Merge master.
[dcpomatic.git] / src / wx / job_manager_view.cc
index b627edc2f31be8b7cc20b71a503bf90765f35787..df9c6f5f1d996dfcbccff08753d71b5789c007c6 100644 (file)
@@ -31,6 +31,7 @@
 using std::string;
 using std::list;
 using std::map;
+using std::min;
 using std::cout;
 using boost::shared_ptr;
 using boost::weak_ptr;
@@ -43,14 +44,19 @@ public:
                , _window (window)
                , _panel (panel)
                , _table (table)
+               , _pause (0)
        {
                int n = 0;
                
-               wxStaticText* m = new wxStaticText (panel, wxID_ANY, std_to_wx (_job->name ()));
-               table->Insert (n, m, 0, wxALIGN_CENTER_VERTICAL | wxALL, 6);
+               _name = new wxStaticText (panel, wxID_ANY, "");
+               string const jn = "<b>" + _job->name () + "</b>";
+               _name->SetLabelMarkup (std_to_wx (jn));
+               table->Insert (n, _name, 0, wxALIGN_CENTER_VERTICAL | wxALL, 6);
                ++n;
        
                _gauge = new wxGauge (panel, wxID_ANY, 100);
+               /* This seems to be required to allow the gauge to shrink under OS X */
+               _gauge->SetMinSize (wxSize (0, -1));
                table->Insert (n, _gauge, 1, wxEXPAND | wxLEFT | wxRIGHT);
                ++n;
                
@@ -92,12 +98,27 @@ public:
 
 private:
 
+       void update_job_name ()
+       {
+               string n = "<b>" + _job->name () + "</b>";
+               if (!_job->sub_name().empty ()) {
+                       n += "\n" + _job->sub_name ();
+               }
+               
+               if (n != _last_name) {
+                       _name->SetLabelMarkup (std_to_wx (n));
+                       _last_name = n;
+               }
+       }
+
        void progress ()
        {
-               float const p = _job->overall_progress ();
+               float const p = _job->progress ();
                if (p >= 0) {
                        checked_set (_message, _job->status ());
-                       _gauge->SetValue (p * 100);
+                       update_job_name ();
+                       int const pp = min (100.0f, p * 100);
+                       _gauge->SetValue (pp);
                }
 
                _table->Layout ();
@@ -107,11 +128,16 @@ private:
        void finished ()
        {
                checked_set (_message, _job->status ());
+               update_job_name ();
+               
                if (!_job->finished_cancelled ()) {
                        _gauge->SetValue (100);
                }
                
                _cancel->Enable (false);
+               if (_pause) {
+                       _pause->Enable (false);
+               }
                if (!_job->error_details().empty ()) {
                        _details->Enable (true);
                }
@@ -147,11 +173,13 @@ private:
        wxScrolledWindow* _window;
        wxPanel* _panel;
        wxFlexGridSizer* _table;
+       wxStaticText* _name;
        wxGauge* _gauge;
        wxStaticText* _message;
        wxButton* _cancel;
        wxButton* _pause;
        wxButton* _details;
+       std::string _last_name;
 };
 
 /** Must be called in the GUI thread */