Merge master.
[dcpomatic.git] / src / wx / job_manager_view.cc
index cfe09aec83454abac8d7b5a353d9d2f19cf8d6e9..b5c66bd3ed5740f74136b29a49195b56e5543f8e 100644 (file)
@@ -86,6 +86,7 @@ JobManagerView::update ()
                        JobRecord r;
                        int n = 1;
                        r.finalised = false;
+                       r.scroll_nudged = false;
                        r.gauge = new wxGauge (_panel, wxID_ANY, 100);
                        _table->Insert (index + n, r.gauge, 1, wxEXPAND | wxLEFT | wxRIGHT);
                        ++n;
@@ -113,6 +114,7 @@ JobManagerView::update ()
                        ++n;
                        
                        _job_records[*i] = r;
+
                }
 
                string const st = (*i)->status ();
@@ -126,8 +128,25 @@ JobManagerView::update ()
                                checked_set (_job_records[*i].message, wx_to_std (_("Running")));
                                _job_records[*i].gauge->Pulse ();
                        }
+
                }
 
+               if (!_job_records[*i].scroll_nudged && ((*i)->running () || (*i)->finished())) {
+                       int x, y;
+                       _job_records[*i].gauge->GetPosition (&x, &y);
+                       int px, py;
+                       GetScrollPixelsPerUnit (&px, &py);
+                       int vx, vy;
+                       GetViewStart (&vx, &vy);
+                       int sx, sy;
+                       GetClientSize (&sx, &sy);
+
+                       if (y > (vy * py + sy / 2)) {
+                               Scroll (-1, y / py);
+                               _job_records[*i].scroll_nudged = true;
+                       }
+               }
+                       
                if ((*i)->finished() && !_job_records[*i].finalised) {
                        checked_set (_job_records[*i].message, st);
                        if (!(*i)->finished_cancelled()) {
@@ -155,7 +174,7 @@ JobManagerView::details_clicked (wxCommandEvent& ev)
 {
        wxObject* o = ev.GetEventObject ();
 
-       for (map<boost::shared_ptr<Job>, JobRecord>::iterator i = _job_records.begin(); i != _job_records.end(); ++i) {
+       for (map<shared_ptr<Job>, JobRecord>::iterator i = _job_records.begin(); i != _job_records.end(); ++i) {
                if (i->second.details == o) {
                        string s = i->first->error_summary();
                        s[0] = toupper (s[0]);
@@ -169,7 +188,7 @@ JobManagerView::cancel_clicked (wxCommandEvent& ev)
 {
        wxObject* o = ev.GetEventObject ();
 
-       for (map<boost::shared_ptr<Job>, JobRecord>::iterator i = _job_records.begin(); i != _job_records.end(); ++i) {
+       for (map<shared_ptr<Job>, JobRecord>::iterator i = _job_records.begin(); i != _job_records.end(); ++i) {
                if (i->second.cancel == o) {
                        i->first->cancel ();
                }