X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fwx%2Fjob_manager_view.cc;fp=src%2Fwx%2Fjob_manager_view.cc;h=1594dfc91e62a51523d033b281015c7dbc7903ca;hb=92cafb6fc686a041354da2eabde6bcb2f6846e1d;hp=5cd9f2e15486904a28b7fc4add7588e182709bf0;hpb=6e5c4e570f26e05124ab0ef67e39c07bab9cb4d5;p=dcpomatic.git diff --git a/src/wx/job_manager_view.cc b/src/wx/job_manager_view.cc index 5cd9f2e15..1594dfc91 100644 --- a/src/wx/job_manager_view.cc +++ b/src/wx/job_manager_view.cc @@ -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()) { @@ -156,7 +175,7 @@ JobManagerView::details_clicked (wxCommandEvent& ev) { wxObject* o = ev.GetEventObject (); - for (map, JobRecord>::iterator i = _job_records.begin(); i != _job_records.end(); ++i) { + for (map, 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]); @@ -170,7 +189,7 @@ JobManagerView::cancel_clicked (wxCommandEvent& ev) { wxObject* o = ev.GetEventObject (); - for (map, JobRecord>::iterator i = _job_records.begin(); i != _job_records.end(); ++i) { + for (map, JobRecord>::iterator i = _job_records.begin(); i != _job_records.end(); ++i) { if (i->second.cancel == o) { i->first->cancel (); }