burning cd-rom with wxWidgets

Franco Amato eurofrank at gmail.com
Thu Apr 19 08:04:50 PDT 2007


Thank you again Piotr.
If you can send me something more easy (for me...I'm not wxExpert) I will
appreciate it
Franco

2007/4/19, Piotr Starczewski <pstarczewski at o2.pl>:
>
> It's just a piece of quickly written sample that I had written some time
> ago. Sorry, but I don't have anything "clean" at hand.
>
> Regards,
> Peter
>
> Franco Amato wrote:
> > Thank for your example.
> > Your code is not so easy :-)
> >
> >
> > 2007/4/19, Piotr Starczewski <pstarczewski at o2.pl
> > <mailto:pstarczewski at o2.pl>>:
> >
> >     This is very basic sample code that I have digged out of my test
> >     folder.
> >     I'm not even sure if it works, but you'll get a basic concept. :)
> >
> >
> >     EvaBurnCdDialog::EvaBurnCdDialog( wxWindow* parent)
> >     : _evaBurnCdDialog( parent)
> >     {
> >     //    wxBoxSizer* bSizer5;
> >     //    bSizer5 =3D new wxBoxSizer( wxVERTICAL );
> >     //
> >     //    m_textCtrl1 =3D new wxTextCtrl( this, ID_DEFAULT, wxT(""),
> >     wxDefaultPosition, wxSize( 510,100 ), wxTE_MULTILINE|wxTE_READONLY
> );
> >     //    bSizer5->Add( m_textCtrl1, 0, wxALL, 5 );
> >     //
> >     //    m_button6 =3D new wxButton( this, ID_BURNCD, wxT("Burn to CD"=
),
> >     wxDefaultPosition, wxDefaultSize, 0 );
> >     //    bSizer5->Add( m_button6, 0, wxALL|wxALIGN_CENTER_HORIZONTAL,
> >     5 );
> >     //
> >     //    this->SetSizer( bSizer5 );
> >     //    this->Layout();
> >     //    bSizer5->Fit( this );
> >     }
> >
> >     void EvaBurnCdDialog::connect_events()
> >     {
> >        SetTitle("EuroView CD-Burner (Alpha v0.1)");
> >
> >
> Connect(ID_BURNCD,wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(EvaB=
urnCdDialog::on_burncd));
> >
> >
> Connect(ID_PROCESS_RUNNING,wxEVT_END_PROCESS,wxProcessEventHandler(EvaBur=
nCdDialog::on_proc_stop));
> >
> >
> >     Connect(wxEVT_TIMER,wxTimerEventHandler(EvaBurnCdDialog::on_timer));
> >     }
> >
> >     void EvaBurnCdDialog::on_timer(wxTimerEvent &event)
> >     {
> >        if (!m_stop)
> >        {
> >            while (m_process->GetErrorStream()->CanRead())
> >            {
> >                wxTextInputStream in(*m_process->GetErrorStream());
> >                if (m_process_count=3D=3D0)
> >                {
> >                    m_scanbus.Add(in.ReadLine());
> >                } else
> >                {
> >                    *m_textCtrl1 << in.ReadLine() << "\n";
> >                }
> >            }
> >            while (m_process->GetInputStream()->CanRead())
> >            {
> >                wxTextInputStream in(*m_process->GetInputStream());
> >                if (m_process_count=3D=3D0)
> >                {
> >                    m_scanbus.Add(in.ReadLine());
> >                } else
> >                {
> >                    *m_textCtrl1 << in.ReadLine() << "\n";
> >                }
> >            }
> >        }
> >     }
> >
> >     void EvaBurnCdDialog::on_proc_stop(wxProcessEvent &event)
> >     {
> >        m_stop =3D true;
> >        if (m_process_count=3D=3D1)
> >        {
> >            m_process_count++;
> >            burn_cd();
> >        } else
> >        {
> >            m_msg_timer->Stop();
> >            delete m_msg_timer;
> >            m_process_count++;
> >            wxRemoveFile("./temp.iso");
> >            wxRemoveFile("./eva");
> >            wxRemoveFile("./autorun.inf");
> >            delete m_disabler;
> >            wxMessageBox("All done");
> >        }
> >     }
> >
> >     void EvaBurnCdDialog::scanbus()
> >     {
> >     //    m_process =3D new wxProcess(this,ID_PROCESS_RUNNING);
> >     //    m_process->Redirect();
> >        m_scanbus.Clear();
> >        wxArrayString dummy;
> >        long pid =3D wxExecute("./cdrecord.exe
> >     -scanbus",m_scanbus,m_scanbus);
> >
> >            // Allow to choose cd-recorder
> >            wxArrayString drives;
> >            for (size_t i=3D0; i<m_scanbus.GetCount(); ++i)
> >            {
> >                if (m_scanbus[i].First("CD-ROM")!=3D-1)
> >                {
> >                    wxString val =3D m_scanbus[i];
> >                    val.Trim(false);
> >                    val.Replace("\t"," ");
> >                    int id =3D val.First(" ");
> >                    val.Remove(id+1,val.First("'")-id-1);
> >                    drives.Add(val);
> >                }
> >            }
> >            wxSingleChoiceDialog dlg(this,"Choose your CD-ROM
> >     drive","CD-BURNER",drives);
> >            if (dlg.ShowModal()=3D=3DwxID_OK)
> >            {
> >                m_disabler =3D new wxWindowDisabler();
> >                int id =3D dlg.GetSelection();
> >                wxString drive =3D drives[id];
> >                drive.Trim(false);
> >                id =3D drive.First(" ");
> >                m_dev =3D drive.Mid(0,id);
> >                m_process_count++;
> >                prepare_cd();
> >            }
> >     }
> >
> >     void EvaBurnCdDialog::prepare_cd()
> >     {
> >        m_process =3D new wxProcess(this,ID_PROCESS_RUNNING);
> >        m_process->Redirect();
> >        wxString cmd =3D "mkisofs -o temp.iso -joliet-long -R ";
> >        cmd << m_file;
> >        //wxMessageBox(cmd);
> >        long pid =3D wxExecute(cmd,wxEXEC_ASYNC,m_process);
> >        m_stop =3D false;
> >     }
> >
> >     void EvaBurnCdDialog::burn_cd()
> >     {
> >        wxString cmd =3D "";
> >        cmd <<"cdrecord dev=3D"<<m_dev<<" -multi -eject -v ./temp.iso";
> >     // add
> >     -dummy for test purpous
> >        m_process =3D new wxProcess(this,ID_PROCESS_RUNNING);
> >        m_process->Redirect();
> >        long pid =3D wxExecute(cmd,wxEXEC_ASYNC,m_process);
> >        m_stop =3D false;
> >     }
> >
> >     void EvaBurnCdDialog::on_burncd(wxCommandEvent &event)
> >     {
> >        wxArrayString path;
> >        wxArrayInt size;
> >        wxArrayString output,err;
> >
> >        {
> >            Config config("./evs");
> >            long l =3D config.GetLong("data",0);
> >            for (long i=3D0; i<l; ++i)
> >            {
> >
> >     path.Add(config.GetString(wxString::Format("data/p%ld",i),""));
> >                size.Add(config.GetInt
> (wxString::Format("data/s%ld",i),0));
> >            }
> >        }
> >
> >        if (size[0]>0)
> >        {
> >            // create file list for burning standalone browser
> >            wxFile file("./autorun.inf",wxFile::write);
> >            file.Write(wxString("[autorun]\nopen=3Dplayer.exe"));
> >            file.Close();
> >
> >            {
> >                Config config("./eva",true);
> >                config.SetLong("data",1);
> >                config.SetString("data/p0","./");
> >                config.SetInt("data/s0",200);
> >            }
> >
> >
> >            m_file =3D "./player.exe ./eva ./autorun.inf ./MFC71.dll
> >     ./msvcr71.dll ./wxmsw26_gl_vc_ev.dll ./wxmsw26_vc_ev.dll ";
> >            m_file << path[0] << "/" << wxString::Format("%010d.dat",1);
> >            m_file.Replace("\\","/");
> >
> >            // get external msg timer
> >            m_process_count =3D 0;
> >            m_stop =3D true;
> >            m_msg_timer =3D new wxTimer(this);
> >            m_msg_timer->Start(1);
> >
> >            scanbus();
> >        }
> >     }
> >
> >
> >     Franco Amato wrote:
> >     > Hi Piotr,
> >     > thank you very much for your reply...
> >     > Can I have a piece of code as example of integration?
> >     > Because I never used wxProcess :-(    (what does it do?)
> >     > Franco
> >     >
> >     >
> >     > 2007/4/19, Piotr Starczewski <pstarczewski at o2.pl
> >     <mailto:pstarczewski at o2.pl>
> >     > <mailto:pstarczewski at o2.pl <mailto:pstarczewski at o2.pl>>>:
> >     >
> >     >     I don't think that you are able to burn CD/DVD using wx native
> >     >     functions. If you want something that works and can be quite
> >     easy to
> >     >     implement try CdRecord
> >     >     http://cdrecord.berlios.de/old/private/cdrecord.html
> >     >
> >     >     I have used it successfully by connecting it with my
> >     application via
> >     >     wxProcess. They also have good support and the project is
> free.
> >     >
> >     >     Regards,
> >     >     Peter
> >     >
> >     >     Franco Amato wrote:
> >     >     > Hi people,
> >     >     > does anyone know how to integrate a cd-rom data burner in a
> wx
> >     >     > application?
> >     >     > Is possible to do it with the wxfunctions or not?
> >     >     > Kind Regards
> >     >     > Frank
> >     >     >
> >     >
> >     >
> >
> ---------------------------------------------------------------------
> >     >     To unsubscribe, e-mail:
> >     wx-users-unsubscribe at lists.wxwidgets.org
> >     <mailto:wx-users-unsubscribe at lists.wxwidgets.org>
> >     >     <mailto: wx-users-unsubscribe at lists.wxwidgets.org
> >     <mailto:wx-users-unsubscribe at lists.wxwidgets.org>>
> >     >     For additional commands, e-mail:
> >     wx-users-help at lists.wxwidgets.org
> >     <mailto:wx-users-help at lists.wxwidgets.org>
> >     >     <mailto: wx-users-help at lists.wxwidgets.org
> >     <mailto:wx-users-help at lists.wxwidgets.org>>
> >     >
> >     >
> >
> >
> ---------------------------------------------------------------------
> >     To unsubscribe, e-mail: wx-users-unsubscribe at lists.wxwidgets.org
> >     <mailto:wx-users-unsubscribe at lists.wxwidgets.org>
> >     For additional commands, e-mail: wx-users-help at lists.wxwidgets.org
> >     <mailto:wx-users-help at lists.wxwidgets.org>
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: wx-users-unsubscribe at lists.wxwidgets.org
> For additional commands, e-mail: wx-users-help at lists.wxwidgets.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.wxwidgets.org/pipermail/wx-users/attachments/20070419/46e=
4ea8e/attachment.htm


More information about the wx-users mailing list