From 2eb2945c58f3c0f7bfd49e218458710978777699 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 7 May 2013 23:22:56 +0100 Subject: [PATCH] Basic auto-scroll of job view (#129). --- src/wx/job_manager_view.cc | 19 +++++++++++++++++++ src/wx/job_manager_view.h | 1 + 2 files changed, 20 insertions(+) diff --git a/src/wx/job_manager_view.cc b/src/wx/job_manager_view.cc index a7788ddd0..c339d26bb 100644 --- a/src/wx/job_manager_view.cc +++ b/src/wx/job_manager_view.cc @@ -79,6 +79,7 @@ JobManagerView::update () JobRecord r; r.finalised = false; + r.scroll_nudged = false; r.gauge = new wxGauge (_panel, wxID_ANY, 100); _table->Insert (index + 1, r.gauge, 1, wxEXPAND | wxLEFT | wxRIGHT); @@ -95,6 +96,7 @@ JobManagerView::update () _table->Insert (index + 4, r.details, 1, wxALIGN_CENTER_VERTICAL | wxALL, 6); _job_records[*i] = r; + } string const st = (*i)->status (); @@ -108,8 +110,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()) { diff --git a/src/wx/job_manager_view.h b/src/wx/job_manager_view.h index 72ac85c02..6343d78af 100644 --- a/src/wx/job_manager_view.h +++ b/src/wx/job_manager_view.h @@ -51,6 +51,7 @@ private: wxButton* cancel; wxButton* details; bool finalised; + bool scroll_nudged; }; std::map, JobRecord> _job_records; -- 2.30.2