2 Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
4 This file is part of DCP-o-matic.
6 DCP-o-matic is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 DCP-o-matic is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
23 /** @file src/job_manager_view.cc
24 * @brief Class generating a GTK widget to show the progress of jobs.
28 #include "job_manager_view.h"
29 #include "batch_job_view.h"
30 #include "normal_job_view.h"
32 #include "lib/job_manager.h"
35 #include "lib/exceptions.h"
36 #include "lib/compose.hpp"
45 using std::shared_ptr;
48 #if BOOST_VERSION >= 106100
49 using namespace boost::placeholders;
53 /** @param parent Parent window.
54 * @param batch true to use BatchJobView, false to use NormalJobView.
56 * Must be called in the GUI thread.
58 JobManagerView::JobManagerView (wxWindow* parent, bool batch)
59 : wxScrolledWindow (parent)
62 _panel = new wxPanel (this);
63 auto sizer = new wxBoxSizer (wxVERTICAL);
64 sizer->Add (_panel, 1, wxEXPAND);
67 _table = new wxFlexGridSizer (2, 6, 6);
68 _table->AddGrowableCol (0, 1);
69 _panel->SetSizer (_table);
71 SetScrollRate (0, 32);
72 EnableScrolling (false, true);
74 Bind (wxEVT_TIMER, boost::bind(&JobManagerView::periodic, this));
75 _timer.reset (new wxTimer (this));
78 JobManager::instance()->JobAdded.connect (bind(&JobManagerView::job_added, this, _1));
79 JobManager::instance()->JobsReordered.connect (bind(&JobManagerView::replace, this));
84 JobManagerView::job_added (weak_ptr<Job> j)
88 shared_ptr<JobView> v;
90 v.reset (new BatchJobView(job, this, _panel, _table));
92 v.reset (new NormalJobView(job, this, _panel, _table));
95 _job_records.push_back (v);
104 JobManagerView::periodic ()
106 for (auto i: _job_records) {
113 JobManagerView::replace ()
115 /* Make a new version of _job_records which reflects the order in JobManager's job list */
117 list<shared_ptr<JobView>> new_job_records;
119 for (auto i: JobManager::instance()->get()) {
120 /* Find this job's JobView */
121 for (auto j: _job_records) {
123 new_job_records.push_back (j);
129 for (auto i: _job_records) {
133 _job_records = new_job_records;
135 for (auto i: _job_records) {
136 i->insert (i->insert_position ());
144 JobManagerView::job_list_changed ()
146 for (auto i: _job_records) {
147 i->job_list_changed ();