- list<shared_ptr<Job> > jobs = JobManager::instance()->get ();
-
- for (list<shared_ptr<Job> >::iterator i = jobs.begin(); i != jobs.end(); ++i) {
-
- if (_job_records.find (*i) == _job_records.end ()) {
- JobRecord r;
- r.gauge = new wxGauge (_panel, wxID_ANY, 100);
- _table->Add (r.gauge, 1, wxEXPAND | wxLEFT | wxRIGHT);
- r.informed_of_finish = false;
- r.message = add_label_to_sizer (_table, _panel, "", 1);
-
- _job_records[*i] = r;
- }
-
- string const st = (*i)->status ();
-
- if (!(*i)->finished ()) {
- float const p = (*i)->overall_progress ();
- if (p >= 0) {
- _job_records[*i].message->SetLabel (std_to_wx (st));
- _job_records[*i].gauge->SetValue (p * 100);
- } else {
- _job_records[*i].message->SetLabel (wxT ("Running"));
- _job_records[*i].gauge->Pulse ();
- }
- }
-
- /* Hack to work around our lack of cross-thread
- signalling; we tell the job to emit_finished()
- from here (the GUI thread).
- */
-
- if ((*i)->finished () && !_job_records[*i].informed_of_finish) {
- _job_records[*i].gauge->SetValue (100);
- _job_records[*i].message->SetLabel (std_to_wx (st));
-
- try {
- (*i)->emit_finished ();
- } catch (OpenFileError& e) {
- stringstream s;
- s << "Error: " << e.what();
- error_dialog (this, s.str ());
- }
-
- _job_records[*i].informed_of_finish = true;
- }