#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"
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 &)
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);
}
#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;
}
};
, _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);
_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;
#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
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;
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 ();
}
}
*/
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;
}
}
} 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;
}
}
}
*/
/** @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 */
/** The columns for the store */
StoreColumns _columns;
+#endif
};
#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;
} 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 ());
}
}
*/
+#include <wx/wx.h>
+
class Film;
namespace JobWrapper
{
-void make_dcp (Film *, bool);
+void make_dcp (wxWindow *, Film *, bool);
}
film_editor.cc
wx_util.cc
film_viewer.cc
+ job_manager_view.cc
+ job_wrapper.cc
"""
# alignment.cc
# 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:
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)
* @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);
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"