diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-07-25 18:32:54 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-07-25 18:32:54 +0100 |
| commit | 81e0ec64eccf10232628fdf89149b3a66f231312 (patch) | |
| tree | 1d845a4ea4c97109b6b2c2c78ff8c14ce7080119 /src | |
| parent | f1a68da7de486525be2b4199288ee2e9b822668b (diff) | |
Various hacking.
Diffstat (limited to 'src')
| -rw-r--r-- | src/tools/dvdomatic.cc | 27 | ||||
| -rw-r--r-- | src/wx/film_editor.cc | 6 | ||||
| -rw-r--r-- | src/wx/job_manager_view.cc | 103 | ||||
| -rw-r--r-- | src/wx/job_manager_view.h | 27 | ||||
| -rw-r--r-- | src/wx/job_wrapper.cc | 8 | ||||
| -rw-r--r-- | src/wx/job_wrapper.h | 4 | ||||
| -rw-r--r-- | src/wx/wscript | 4 | ||||
| -rw-r--r-- | src/wx/wx_util.cc | 10 | ||||
| -rw-r--r-- | src/wx/wx_util.h | 2 |
9 files changed, 97 insertions, 94 deletions
diff --git a/src/tools/dvdomatic.cc b/src/tools/dvdomatic.cc index 166b86580..35691f845 100644 --- a/src/tools/dvdomatic.cc +++ b/src/tools/dvdomatic.cc @@ -24,10 +24,10 @@ #ifndef DVDOMATIC_DISABLE_PLAYER #include "wx/film_player.h" #endif -//#include "gtk/job_manager_view.h" +#include "wx/job_manager_view.h" //#include "gtk/config_dialog.h" //#include "gtk/gpl.h" -//#include "gtk/job_wrapper.h" +#include "wx/job_wrapper.h" //#include "gtk/dvd_title_dialog.h" #include "wx/wx_util.h" #include "lib/film.h" @@ -256,12 +256,12 @@ public: void jobs_make_dcp (wxCommandEvent &) { -// JobWrapper::make_dcp (film, true); + JobWrapper::make_dcp (this, film, true); } void jobs_make_dcp_from_existing_transcode (wxCommandEvent &) { -// JobWrapper::make_dcp (film, false); + JobWrapper::make_dcp (this, film, false); } void jobs_copy_from_dvd (wxCommandEvent &) @@ -344,17 +344,23 @@ class App : public wxApp frame->Connect (ID_jobs_make_dcp_from_existing_transcode, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_make_dcp_from_existing_transcode)); frame->Connect (ID_help_about, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::help_about)); + wxPanel* rhs = new wxPanel (frame); + film_editor = new FilmEditor (film, frame); - film_editor->Show (true); - film_viewer = new FilmViewer (film, frame); - film_viewer->Show (true); + film_viewer = new FilmViewer (film, rhs); #ifndef DVDOMATIC_DISABLE_PLAYER film_player = new FilmPlayer (film, frame); -#endif +#endif + JobManagerView* job_manager_view = new JobManagerView (rhs); + + wxSizer* rhs_sizer = new wxBoxSizer (wxVERTICAL); + rhs_sizer->Add (film_viewer, 3, wxEXPAND | wxALL); + rhs_sizer->Add (job_manager_view, 1, wxEXPAND | wxALL); + rhs->SetSizer (rhs_sizer); wxBoxSizer* main_sizer = new wxBoxSizer (wxHORIZONTAL); main_sizer->Add (film_editor, 0, wxALL, 6); - main_sizer->Add (film_viewer, 1, wxEXPAND | wxALL, 6); + main_sizer->Add (rhs, 1, wxEXPAND | wxALL, 6); frame->SetSizer (main_sizer); SetTopWindow (frame); @@ -376,9 +382,6 @@ class App : public wxApp } #endif - /* XXX this should be in JobManagerView, shouldn't it? */ -//XXX Glib::signal_timeout().connect (sigc::bind_return (sigc::mem_fun (jobs_view, &JobManagerView::update), true), 1000); - return true; } }; diff --git a/src/wx/film_editor.cc b/src/wx/film_editor.cc index 088ee86e6..abbb8fa22 100644 --- a/src/wx/film_editor.cc +++ b/src/wx/film_editor.cc @@ -52,7 +52,7 @@ FilmEditor::FilmEditor (Film* f, wxWindow* parent) , _film (f) { wxSizer* sizer = new wxFlexGridSizer (2, 6, 6); - this->SetSizer (sizer); + SetSizer (sizer); add_label_to_sizer (sizer, this, "Name"); _name = new wxTextCtrl (this, wxID_ANY); @@ -286,9 +286,7 @@ FilmEditor::content_changed (wxCommandEvent &) _content->SetPath (std_to_wx (_film->directory ())); stringstream m; m << "Could not set content: " << e.what() << "."; - wxMessageDialog* d = new wxMessageDialog (this, std_to_wx (m.str ()), wxT ("DVD-o-matic"), wxOK); - d->ShowModal (); - d->Destroy (); + error_dialog (this, m.str ()); } _ignore_changes = false; diff --git a/src/wx/job_manager_view.cc b/src/wx/job_manager_view.cc index 22c18fd93..9938d3a88 100644 --- a/src/wx/job_manager_view.cc +++ b/src/wx/job_manager_view.cc @@ -26,34 +26,42 @@ #include "lib/util.h" #include "lib/exceptions.h" #include "job_manager_view.h" -#include "gtk_util.h" +#include "wx_util.h" using namespace std; using namespace boost; /** Must be called in the GUI thread */ -JobManagerView::JobManagerView () +JobManagerView::JobManagerView (wxWindow* parent) + : wxPanel (parent) { - _scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_ALWAYS); - - _store = Gtk::TreeStore::create (_columns); - _view.set_model (_store); - _view.append_column ("Name", _columns.name); - - Gtk::CellRendererProgress* r = Gtk::manage (new Gtk::CellRendererProgress ()); - int const n = _view.append_column ("Progress", *r); - Gtk::TreeViewColumn* c = _view.get_column (n - 1); - c->add_attribute (r->property_value(), _columns.progress); - c->add_attribute (r->property_pulse(), _columns.progress_unknown); - c->add_attribute (r->property_text(), _columns.text); - - _scroller.add (_view); - _scroller.set_size_request (-1, 150); + _sizer = new wxFlexGridSizer (2, 6, 6); + SetSizer (_sizer); + +#if 0 + add_label_to_sizer (_sizer, this, "Hello world"); + wxGauge* g = new wxGauge (this, wxID_ANY, 100); + _sizer->Add (g, 1, wxEXPAND | wxALL); + + add_label_to_sizer (_sizer, this, "Shit"); + g = new wxGauge (this, wxID_ANY, 100); + _sizer->Add (g, 1, wxEXPAND | wxALL); +#endif + Connect (wxID_ANY, wxEVT_TIMER, wxTimerEventHandler (JobManagerView::periodic), 0, this); + _timer.reset (new wxTimer (this)); + _timer->Start (1000); + update (); } -/** Update the view by examining the state of each jobs. +void +JobManagerView::periodic (wxTimerEvent &) +{ + update (); +} + +/** Update the view by examining the state of each job. * Must be called in the GUI thread. */ void @@ -62,26 +70,17 @@ JobManagerView::update () list<shared_ptr<Job> > jobs = JobManager::instance()->get (); for (list<shared_ptr<Job> >::iterator i = jobs.begin(); i != jobs.end(); ++i) { - Gtk::ListStore::iterator j = _store->children().begin(); - while (j != _store->children().end()) { - Gtk::TreeRow r = *j; - shared_ptr<Job> job = r[_columns.job]; - if (job == *i) { - break; - } - ++j; - } - - Gtk::TreeRow r; - if (j == _store->children().end ()) { - j = _store->append (); - r = *j; - r[_columns.name] = (*i)->name (); - r[_columns.job] = *i; - r[_columns.progress_unknown] = -1; - r[_columns.informed_of_finish] = false; - } else { - r = *j; + + if (_job_records.find (*i) == _job_records.end ()) { + add_label_to_sizer (_sizer, this, (*i)->name ()); + + JobRecord r; + r.gauge = new wxGauge (this, wxID_ANY, 100); + r.informed_of_finish = false; + + _sizer->Add (r.gauge, 1, wxEXPAND); + _job_records[*i] = r; + _sizer->Layout (); } bool inform_of_finish = false; @@ -90,11 +89,11 @@ JobManagerView::update () if (!(*i)->finished ()) { float const p = (*i)->overall_progress (); if (p >= 0) { - r[_columns.text] = st; - r[_columns.progress] = p * 100; +// r[_columns.text] = st; + _job_records[*i].gauge->SetValue (p * 100); } else { - r[_columns.text] = "Running"; - r[_columns.progress_unknown] = r[_columns.progress_unknown] + 1; +// r[_columns.text] = "Running"; + _job_records[*i].gauge->Pulse (); } } @@ -104,19 +103,15 @@ JobManagerView::update () */ if ((*i)->finished_ok ()) { - bool i = r[_columns.informed_of_finish]; - if (!i) { - r[_columns.progress_unknown] = -1; - r[_columns.progress] = 100; - r[_columns.text] = st; + if (!_job_records[*i].informed_of_finish) { + _job_records[*i].gauge->SetValue (100); +// r[_columns.text] = st; inform_of_finish = true; } } else if ((*i)->finished_in_error ()) { - bool i = r[_columns.informed_of_finish]; - if (!i) { - r[_columns.progress_unknown] = -1; - r[_columns.progress] = 100; - r[_columns.text] = st; + if (!_job_records[*i].informed_of_finish) { + _job_records[*i].gauge->SetValue (100); +// r[_columns.text] = st; inform_of_finish = true; } } @@ -127,9 +122,9 @@ JobManagerView::update () } catch (OpenFileError& e) { stringstream s; s << "Error: " << e.what(); - error_dialog (s.str ()); + error_dialog (this, s.str ()); } - r[_columns.informed_of_finish] = true; + _job_records[*i].informed_of_finish = true; } } } diff --git a/src/wx/job_manager_view.h b/src/wx/job_manager_view.h index c88a1ce9a..ef74b3cf8 100644 --- a/src/wx/job_manager_view.h +++ b/src/wx/job_manager_view.h @@ -18,31 +18,37 @@ */ /** @file src/job_manager_view.h - * @brief Class generating a GTK widget to show the progress of jobs. + * @brief Class which is a wxPanel for showing the progress of jobs. */ #include <string> #include <boost/shared_ptr.hpp> -#include <gtkmm.h> +#include <wx/wx.h> class Job; /** @class JobManagerView - * @brief Class generating a GTK widget to show the progress of jobs. + * @brief Class which is a wxPanel for showing the progress of jobs. */ -class JobManagerView +class JobManagerView : public wxPanel { public: - JobManagerView (); - - /** @return Our main widget, which contains everything else */ - Gtk::Widget& widget () { - return _scroller; - } + JobManagerView (wxWindow *); void update (); private: + void periodic (wxTimerEvent &); + + boost::shared_ptr<wxTimer> _timer; + wxFlexGridSizer* _sizer; + struct JobRecord { + wxGauge* gauge; + bool informed_of_finish; + }; + + std::map<boost::shared_ptr<Job>, JobRecord> _job_records; +#if 0 /** Scroller for all our contents */ Gtk::ScrolledWindow _scroller; /** View for the jobs */ @@ -80,4 +86,5 @@ private: /** The columns for the store */ StoreColumns _columns; +#endif }; diff --git a/src/wx/job_wrapper.cc b/src/wx/job_wrapper.cc index be214b0ac..4c037ae28 100644 --- a/src/wx/job_wrapper.cc +++ b/src/wx/job_wrapper.cc @@ -21,12 +21,12 @@ #include "lib/film.h" #include "lib/exceptions.h" #include "job_wrapper.h" -#include "gtk_util.h" +#include "wx_util.h" using namespace std; void -JobWrapper::make_dcp (Film* film, bool transcode) +JobWrapper::make_dcp (wxWindow* parent, Film* film, bool transcode) { if (!film) { return; @@ -41,10 +41,10 @@ JobWrapper::make_dcp (Film* film, bool transcode) } else { s << "Bad setting for " << e.setting() << "(" << e.what() << ")"; } - error_dialog (s.str ()); + error_dialog (parent, s.str ()); } catch (std::exception& e) { stringstream s; s << "Could not make DCP: " << e.what () << "."; - error_dialog (s.str ()); + error_dialog (parent, s.str ()); } } diff --git a/src/wx/job_wrapper.h b/src/wx/job_wrapper.h index b8760f6e5..4722cfdd4 100644 --- a/src/wx/job_wrapper.h +++ b/src/wx/job_wrapper.h @@ -17,11 +17,13 @@ */ +#include <wx/wx.h> + class Film; namespace JobWrapper { -void make_dcp (Film *, bool); +void make_dcp (wxWindow *, Film *, bool); } diff --git a/src/wx/wscript b/src/wx/wscript index 845951b17..c9d880501 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -12,6 +12,8 @@ def build(bld): film_editor.cc wx_util.cc film_viewer.cc + job_manager_view.cc + job_wrapper.cc """ # alignment.cc @@ -22,8 +24,6 @@ def build(bld): # filter_dialog.cc # filter_view.cc # gpl.cc -# job_manager_view.cc -# job_wrapper.cc # dvd_title_dialog.cc if not bld.env.DISABLE_PLAYER: diff --git a/src/wx/wx_util.cc b/src/wx/wx_util.cc index 50323c6e0..71fb91bc0 100644 --- a/src/wx/wx_util.cc +++ b/src/wx/wx_util.cc @@ -33,15 +33,13 @@ add_label_to_sizer (wxSizer* s, wxWindow* p, string t) return m; } -#if 0 void -error_dialog (string m) +error_dialog (wxWindow* parent, string m) { - Gtk::MessageDialog d (m, false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); - d.set_title ("DVD-o-matic"); - d.run (); + wxMessageDialog* d = new wxMessageDialog (parent, std_to_wx (m), wxT ("DVD-o-matic"), wxOK); + d->ShowModal (); + d->Destroy (); } -#endif string wx_to_std (wxString s) diff --git a/src/wx/wx_util.h b/src/wx/wx_util.h index 3fcc383f0..32d70ea73 100644 --- a/src/wx/wx_util.h +++ b/src/wx/wx_util.h @@ -23,7 +23,7 @@ * @brief Some utility functions. */ -extern void error_dialog (std::string); +extern void error_dialog (wxWindow *, std::string); extern wxStaticText* add_label_to_sizer (wxSizer *, wxWindow *, std::string); extern std::string wx_to_std (wxString); extern wxString std_to_wx (std::string); |
