Various hacking.
authorCarl Hetherington <cth@carlh.net>
Wed, 25 Jul 2012 17:32:54 +0000 (18:32 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 25 Jul 2012 17:32:54 +0000 (18:32 +0100)
src/tools/dvdomatic.cc
src/wx/film_editor.cc
src/wx/job_manager_view.cc
src/wx/job_manager_view.h
src/wx/job_wrapper.cc
src/wx/job_wrapper.h
src/wx/wscript
src/wx/wx_util.cc
src/wx/wx_util.h
windows/installer.nsi.in

index 166b86580a549804c247ae4ce70d6124a024ab46..35691f8454a504a45994ca585ad4c809f83c9573 100644 (file)
 #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;
        }
 };
index 088ee86e61cda066026093a32de1833bafeb4825..abbb8fa223650d1b585eb0dd497df49727d84650 100644 (file)
@@ -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;
index 22c18fd93f4624e733d909d481c84844b3ef94a0..9938d3a88bbd7e78cc509993f53d3a740c094d58 100644 (file)
 #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;
                }
        }
 }
index c88a1ce9aa9f2b3c6ba01e9e25283dfdb5f93436..ef74b3cf86600bd66825deeee63bd416dafa3388 100644 (file)
 */
 
 /** @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 
 };
index be214b0ac7c6a99184a596f18e419315463778f2..4c037ae284508f82feb4ac8cd091f412ae664189 100644 (file)
 #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 ());
        }
 }
index b8760f6e5f6d824c4fed5145c1a41663c9748d7e..4722cfdd4be0f72535142eb3b4096399108d2ae3 100644 (file)
 
 */
 
+#include <wx/wx.h>
+
 class Film;
 
 namespace JobWrapper
 {
 
-void make_dcp (Film *, bool);
+void make_dcp (wxWindow *, Film *, bool);
        
 }
index 845951b17a0b5db47127c207d9973069986f9400..c9d880501abbffc8f6ee5118672a05638dcb7f8e 100644 (file)
@@ -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:
index 50323c6e0065c428b1323e9b93efdf9190975c78..71fb91bc005cb71d77e0ae886c90d8586d21fe77 100644 (file)
@@ -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)
index 3fcc383f0c447c89fe11854943b39aceb69a1818..32d70ea730c8bcb98e5c67fc5f3cf5e123614fdc 100644 (file)
@@ -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);
index 6a60d1ecb37d051d43ab190b346a43a1428a2d05..728640d8303a6faff335433a10d29e10c391b09a 100644 (file)
@@ -35,30 +35,23 @@ File "%deps%/bin/avutil-51.dll"
 File "%deps%/bin/dcp.dll"
 File "%deps%/bin/intl.dll"
 File "%deps%/bin/kumu-libdcp.dll"
-File "%deps%/bin/libatkmm-1.6-1.dll"
 File "%deps%/bin/libboost_chrono-mt.dll"
 File "%deps%/bin/libboost_filesystem-mt.dll"
 File "%deps%/bin/libboost_system-mt.dll"
 File "%deps%/bin/libboost_thread_win32-mt.dll"
-File "%deps%/bin/libcairomm-1.0-1.dll"
 File "%deps%/bin/libeay32.dll"
 File "%deps%/bin/libgcc_s_sjlj-1.dll"
 File "%deps%/bin/libgdk-win32-2.0-0.dll"
-File "%deps%/bin/libgdkmm-2.4-1.dll"
 File "%deps%/bin/libgdk_pixbuf-2.0-0.dll"
 File "%deps%/bin/libgio-2.0-0.dll"
-File "%deps%/bin/libgiomm-2.4-1.dll"
 File "%deps%/bin/libglib-2.0-0.dll"
-File "%deps%/bin/libglibmm-2.4-1.dll"
 File "%deps%/bin/libgobject-2.0-0.dll"
 File "%deps%/bin/libgtk-win32-2.0-0.dll"
-File "%deps%/bin/libgtkmm-2.4-1.dll"
 File "%deps%/bin/libjpeg-7.dll"
 File "%deps%/bin/libMagick++-5.dll"
 File "%deps%/bin/libMagickCore-5.dll"
 File "%deps%/bin/libMagickWand-5.dll"
 File "%deps%/bin/libopenjpeg-1.dll"
-File "%deps%/bin/libpangomm-1.4-1.dll"
 File "%deps%/bin/libpng14-14.dll"
 File "%deps%/bin/libsigc-2.0-0.dll"
 File "%deps%/bin/libsndfile-1.dll"