Salome HOME
Synchronize adm files
[modules/jobmanager.git] / src / genericgui / BL_GenericGui.cxx
1 // Copyright (C) 2009-2014  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "BL_GenericGui.hxx"
21
22 #ifdef WNT
23 #undef ERROR
24 #endif
25
26 BL::GenericGui::GenericGui(BL::MainWindows_Wrap * wrapper) : QObject(wrapper->getDockParent())
27 {
28   DEBTRACE("Creating BL::GenericGui");
29   BL_ASSERT(wrapper);
30   _wrapper = wrapper;
31   _job_name_selected = "";
32
33   _dock_parent = _wrapper->getDockParent();
34
35   // _salome_services is a servant
36   // POA wil destroy it at the end of the application
37   _salome_services = new BL::SALOMEServices();
38 }
39
40 BL::GenericGui::~GenericGui()
41 {
42   DEBTRACE("Destroying BL::GenericGui");
43   _salome_services->end();
44 }
45
46 void 
47 BL::GenericGui::createDockWidgets()
48 {
49   DEBTRACE("createDockWidgets BL::GenericGui");
50   _jobs_manager = new BL::JobsManager_QT(_dock_parent, this, _salome_services);
51   _model_manager = new BL::QModelManager(this, _jobs_manager);
52   _model = _model_manager->getModel();
53
54   /* Summary */
55   _dw_summary = new QDockWidget(_dock_parent);
56   _dw_summary->setWindowTitle("Summary");
57   _dw_summary->setObjectName("SummaryDockWidget");
58   _summary = new BL::Summary(_dw_summary, _jobs_manager);
59   _summary->setModel(_model);
60   QScrollArea * scroll_widget_summary = new QScrollArea(_dw_summary);
61   scroll_widget_summary->setWidget(_summary);
62   scroll_widget_summary->setWidgetResizable(true);
63   _dw_summary->setWidget(scroll_widget_summary);
64
65   /* ResourceCatalog */
66   _dw_resource_catalog = new QDockWidget(_dock_parent);
67   _dw_resource_catalog->setWindowTitle("Resource Catalog");
68   _dw_resource_catalog->setObjectName("ResourceCatalogDockWidget");
69   _resource_catalog = new JM::ResourceCatalog(_dw_resource_catalog, _salome_services, false);
70   QScrollArea * scroll_widget_resource = new QScrollArea(_dw_resource_catalog);
71   scroll_widget_resource->setWidget(_resource_catalog);
72   scroll_widget_resource->setWidgetResizable(true);
73   _dw_resource_catalog->setWidget(scroll_widget_resource);
74
75   /* Main Dock Window */
76   _dock_parent->addDockWidget(Qt::RightDockWidgetArea, _jobs_manager);
77   _dock_parent->addDockWidget(Qt::RightDockWidgetArea, _dw_summary);
78   _dock_parent->addDockWidget(Qt::RightDockWidgetArea, _dw_resource_catalog);
79   _dock_parent->splitDockWidget(_jobs_manager, _dw_summary, Qt::Vertical);
80   _dock_parent->tabifyDockWidget(_dw_summary, _dw_resource_catalog);
81
82   /* Signals and Slots */
83   // JobsManager -> Model
84   connect(_jobs_manager, SIGNAL(new_job_added(QString)), _model_manager, SLOT(new_job_added(QString)));
85   connect(_jobs_manager, SIGNAL(job_state_changed(QString)), _model_manager, SLOT(job_state_changed(QString)));
86   connect(_jobs_manager, SIGNAL(job_state_changed(QString)), this, SLOT(job_state_changed(QString)));
87   // Model -> summary
88   connect(_model, SIGNAL(rowsInserted(QModelIndex, int, int)), _summary, SLOT(rowsInserted(QModelIndex, int, int)));
89   connect(_model, SIGNAL(rowsRemoved(QModelIndex, int, int)), _summary, SLOT(rowsRemoved(QModelIndex, int, int)));
90   connect(_model, SIGNAL(itemChanged(QStandardItem*)), _summary, SLOT(itemChanged(QStandardItem*)));
91
92   // Init at the end to be able to get jobs already in Launcher
93   if (_salome_services->initNS() == false)
94     DEBMSG("WARNING !!!!! SALOME IS NOT REACHABLE !!!!");
95   // refresh at the beacause we need that _salome_services be
96   // initialized
97   _resource_catalog->refresh_resource_list();
98 }
99
100 void 
101 BL::GenericGui::createCentralWidget()
102 {
103   DEBTRACE("createCentralWidget BL::GenericGui");
104
105   _tab_parent  = _wrapper->getTabParent();
106   /* Tab Central Widget */
107   /* Buttons */
108   _buttons = new BL::Buttons(_tab_parent);
109   _buttons->setCreateButtonSlot(this, SLOT(create_job()));
110   _buttons->setEditCloneButtonSlot(this, SLOT(edit_clone_job()));
111   _buttons->setStartButtonSlot(this, SLOT(start_job()));
112   _buttons->setReStartButtonSlot(this, SLOT(restart_job()));
113   _buttons->setDeleteButtonSlot(this, SLOT(delete_job()));
114   _buttons->setStopButtonSlot(this, SLOT(stop_job()));
115   _buttons->setRefreshButtonSlot(this, SLOT(refresh_job()));
116   _buttons->setGetResultsButtonSlot(this, SLOT(get_results_job()));
117
118   /* Jobs Table */
119   _jobs_table = new BL::JobsTable(_tab_parent);
120   _jobs_table->setModel(_model);
121   _jobs_table->set_main_gui(this);
122
123   /* Job Tab */
124   _job_tab = new BL::JobTab(_tab_parent, _jobs_manager);
125   _job_tab->setModel(_model);
126
127   // Central Widget
128   QWidget * central_widget = new QWidget(_tab_parent);
129   QSplitter * tab_central_widget = new QSplitter(Qt::Vertical, _tab_parent);
130   tab_central_widget->addWidget(_jobs_table);
131   tab_central_widget->addWidget(_job_tab);
132   tab_central_widget->setChildrenCollapsible(false);
133   QVBoxLayout * central_layout = new QVBoxLayout;
134   central_layout->addWidget(_buttons);
135   central_layout->addWidget(tab_central_widget);
136   central_widget->setLayout(central_layout);
137
138   // Adding a scroll area for low resolution
139   QScrollArea * scroll_central_widget = new QScrollArea(_tab_parent);
140   scroll_central_widget->setWidget(central_widget);
141   scroll_central_widget->setWidgetResizable(true);
142   _tab_parent->setCentralWidget(scroll_central_widget);
143
144   /* Signals and Slots */
145   // Model -> JobTab
146   connect(_model, SIGNAL(itemChanged(QStandardItem*)), _job_tab, SLOT(itemChanged(QStandardItem*)));
147
148   // TableView -> X
149   connect(_jobs_table, SIGNAL(clicked(QModelIndex)), this, SLOT(job_selected(QModelIndex)));
150   connect(_jobs_table, SIGNAL(activated(QModelIndex)), this, SLOT(job_activated(QModelIndex)));
151 }
152
153 void
154 BL::GenericGui::deleteDockWidget()
155 {
156   // Specific for SALOME...
157   _dock_parent->removeDockWidget(_dw_summary);
158   delete _dw_summary;
159   _dock_parent->removeDockWidget(_dw_resource_catalog);
160   delete _dw_resource_catalog;
161   _dock_parent->removeDockWidget(_jobs_manager);
162   delete _jobs_manager;
163 }
164
165 void 
166 BL::GenericGui::showDockWidgets(bool isVisible)
167 {
168   DEBTRACE("BL::GenericGui::showDockWidgets " << isVisible);
169   if (_jobs_manager) {
170     _jobs_manager->setVisible(isVisible);
171     _jobs_manager->toggleViewAction()->setVisible(isVisible);
172   }
173   if (_dw_summary) {
174     _dw_summary->setVisible(isVisible);
175     _dw_summary->toggleViewAction()->setVisible(isVisible);
176   }
177   if (_dw_resource_catalog) {
178     _dw_resource_catalog->setVisible(isVisible);
179     _dw_resource_catalog->toggleViewAction()->setVisible(isVisible);
180   }
181 }
182
183 void
184 BL::GenericGui::createActions()
185 {
186   DEBTRACE("CreateActions BL::GenericGui");
187   _create_job_action = _wrapper->createAction("Create a Job", QIcon(), "Create a Job", "Create a Job", 0, _dock_parent, false, this, SLOT(create_job()));
188   _edit_clone_job_action = _wrapper->createAction("Edit/Clone a Job", QIcon(), "Edit/Clone a Job", "Edit/Clone a Job", 0, _dock_parent, false, this, SLOT(edit_clone_job()));
189   _start_job_action = _wrapper->createAction("Start a Job", QIcon(), "Start a Job", "Start a Job", 0, _dock_parent, false, this, SLOT(start_job()));
190   _restart_job_action = _wrapper->createAction("Restart a Job", QIcon(), "Restart a Job", "Restart a Job", 0, _dock_parent, false, this, SLOT(restart_job()));
191   _delete_job_action = _wrapper->createAction("Delete a Job", QIcon(), "Delete a Job", "Delete a Job", Qt::Key_Delete, _dock_parent, false, this, SLOT(delete_job()));
192   _refresh_job_action = _wrapper->createAction("Refresh Jobs", QIcon(), "Refresh Jobs", "Refresh Jobs", 0, _dock_parent, false, this, SLOT(refresh_job()));
193   _get_results_job_action = _wrapper->createAction("Get Job Results", QIcon(), "Get Job Results", "Get Job Results", 0, _dock_parent, false, this, SLOT(refresh_job()));
194   _stop_job_action = _wrapper->createAction("Stop a Job", QIcon(), "Stop a Job", "Stop a Job", 0, _dock_parent, false, this, SLOT(stop_job()));
195 }
196
197 void
198 BL::GenericGui::createMenus()
199 {
200   DEBTRACE("CreateMenus BL::GenericGui");
201   int menu_id = _wrapper->createTopMenu("JobManager");
202   _wrapper->addActionToMenu(_create_job_action, menu_id);
203   _wrapper->addActionToMenu(_edit_clone_job_action, menu_id);
204   _wrapper->addActionToMenu(_start_job_action, menu_id);
205   _wrapper->addActionToMenu(_restart_job_action, menu_id);
206   _wrapper->addActionToMenu(_stop_job_action, menu_id);
207   _wrapper->addActionToMenu(_delete_job_action, menu_id);
208   _wrapper->addActionToMenu(_get_results_job_action, menu_id);
209   _wrapper->addActionToMenu(_refresh_job_action, menu_id);
210 }
211
212 void
213 BL::GenericGui::create_job()
214 {
215   DEBTRACE("Create Job Slot BL::GenericGui");
216   _jobs_manager->create_job();
217 }
218
219 void
220 BL::GenericGui::edit_clone_job()
221 {
222   DEBTRACE("Edit/Clone Job Slot BL::GenericGui");
223   _jobs_manager->edit_clone_job(_job_name_selected.toUtf8().constData());
224 }
225
226 void
227 BL::GenericGui::start_job()
228 {
229   DEBTRACE("Start Job Slot BL::GenericGui");
230   _jobs_manager->start_job(_job_name_selected.toUtf8().constData());
231   updateButtonsStates();
232 }
233
234 void
235 BL::GenericGui::restart_job()
236 {
237   DEBTRACE("Restart Job Slot BL::GenericGui");
238   _jobs_manager->restart_job(_job_name_selected.toUtf8().constData());
239   updateButtonsStates();
240 }
241
242 void
243 BL::GenericGui::refresh_job()
244 {
245   DEBTRACE("Refresh Job Slot BL::GenericGui");
246   _jobs_manager->refresh_jobs();
247 }
248
249 void
250 BL::GenericGui::get_results_job()
251 {
252   DEBTRACE("Get Results Job Slot BL::GenericGui");
253   if (!_jobs_table->isMultipleSelected())
254   {
255     _jobs_manager->get_results_job(_job_name_selected.toUtf8().constData());
256   }
257   else
258   {
259     QModelIndexList selected_rows = _jobs_table->selectionModel()->selectedRows();
260     for (int i = 0; i < selected_rows.length(); ++i)
261     {
262       QString job_name = _model->itemFromIndex(selected_rows[i])->text();
263     _jobs_manager->get_results_job(job_name.toUtf8().constData());
264     }
265   }
266 }
267
268 void
269 BL::GenericGui::stop_job()
270 {
271   DEBTRACE("Stop Job Slot BL::GenericGui");
272   if (!_jobs_table->isMultipleSelected())
273   {
274     _jobs_manager->stop_job(_job_name_selected.toUtf8().constData());
275   }
276   else
277   {
278     QModelIndexList selected_rows = _jobs_table->selectionModel()->selectedRows();
279     for (int i = 0; i < selected_rows.length(); ++i)
280     {
281       QString job_name = _model->itemFromIndex(selected_rows[i])->text();
282       _jobs_manager->stop_job(job_name.toUtf8().constData());
283     }
284   }
285 }
286
287
288 void
289 BL::GenericGui::delete_job()
290 {
291   DEBTRACE("Delete Job Slot BL::GenericGui");
292   int ret = QMessageBox::Cancel;
293
294   if (!_jobs_table->isMultipleSelected())
295   {
296     ret = QMessageBox::warning(NULL, "Delete a job", "Do you really want to delete job " + _job_name_selected + " ? ",
297                                QMessageBox::Ok|QMessageBox::Cancel,
298                                QMessageBox::Ok);
299   }
300   else
301   {
302    ret = QMessageBox::warning(NULL, "Delete jobs", "Do you really want to delete these jobs ?",
303                               QMessageBox::Ok|QMessageBox::Cancel,
304                               QMessageBox::Ok);
305   }
306   if (ret == QMessageBox::Ok)
307   {
308     delete_job_internal();
309   }
310 }
311
312 void
313 BL::GenericGui::delete_job_external(const QString & name)
314 {
315   DEBTRACE("Delete Job External");
316   _jobs_manager->delete_job(name);
317   if (!_jobs_table->selectCurrent())
318   {
319     _job_name_selected = "";
320     updateButtonsStates();
321   }
322 }
323
324 void
325 BL::GenericGui::delete_job_internal()
326 {
327   if (!_jobs_table->isMultipleSelected())
328   {
329     QModelIndexList selected_list = _jobs_table->getSelectedIndexes();
330     QString job_name_to_delete    = _model->itemFromIndex(selected_list[0])->text();
331     DEBTRACE("Single Deleting job: " << job_name_to_delete.toUtf8().constData());
332     _jobs_manager->delete_job(job_name_to_delete);
333     if (!_jobs_table->selectCurrent())
334     {
335       _job_name_selected = "";
336       updateButtonsStates();
337     }
338   }
339   else
340   {
341     QModelIndexList selected_list = _jobs_table->getSelectedIndexes();
342     QString job_name = _model->itemFromIndex(selected_list[0])->text();
343     DEBTRACE("Multiple Deleting job: " << job_name.toUtf8().constData());
344     _jobs_manager->delete_job(job_name);
345     delete_job_internal(); // Recursive delete
346   }
347 }
348
349 void
350 BL::GenericGui::reset_job_selection()
351 {
352   _job_name_selected = "";
353   _job_tab->reset("");
354   updateButtonsStates();
355 }
356
357 void
358 BL::GenericGui::job_selected(const QModelIndex & index)
359 {
360   DEBTRACE("BL::GenericGui::job_selected");
361
362   //Find if a job is selected (ignore index)
363   //If Multiple job are selected, take first job
364   QItemSelectionModel * selection_model = _jobs_table->selectionModel();
365   QModelIndexList selected_rows = selection_model->selectedRows();
366   if (selected_rows.length() >= 1)
367   {
368     QModelIndex idx = selected_rows[0];
369     QStandardItem * item = _model->itemFromIndex(idx);
370     QStandardItem * item_name = _model->item(item->row());
371     _job_name_selected = item_name->text();
372     _job_tab->job_selected(idx);
373     DEBTRACE("BL::GenericGui::job_selected name is " << _job_name_selected.toUtf8().constData());
374   }
375   else
376   {
377     _job_name_selected = "";
378     _job_tab->reset("");
379     DEBTRACE("BL::GenericGui::job_selected - no jobs are selected");
380   }
381   updateButtonsStates();
382 }
383
384 void
385 BL::GenericGui::job_activated(const QModelIndex & index)
386 {
387   DEBTRACE("BL::GenericGui::job_activated slot");
388   job_selected(index);
389 }
390
391 void
392 BL::GenericGui::job_state_changed(const QString & name)
393 {
394   if (name == _job_name_selected)
395     updateButtonsStates();
396 }
397
398 void
399 BL::GenericGui::updateButtonsStates()
400 {
401   if (!_jobs_table->isMultipleSelected())
402   {
403     updateButtonsStatesSingleSelection();
404   }
405   else
406   {
407     _start_job_action->setEnabled(false);
408     _edit_clone_job_action->setEnabled(false);
409     _restart_job_action->setEnabled(false);
410     _buttons->disable_start_button();
411     _buttons->disable_edit_clone_button();
412     _buttons->disable_restart_button();
413
414     // You can always delete jobs
415     _delete_job_action->setEnabled(true);
416     _buttons->enable_delete_button();
417
418     // Enable stop ?
419     bool enable_stop = true;
420     QModelIndexList selected_rows = _jobs_table->selectionModel()->selectedRows();
421     for (int i = 0; i < selected_rows.length(); ++i)
422     {
423       QString job_name = _model->itemFromIndex(selected_rows[i])->text();
424       BL::Job * job = _jobs_manager->getJob(job_name.toUtf8().constData());
425       BL::Job::State job_state = job->getState();
426       if (job_state != BL::Job::QUEUED  &&
427           job_state != BL::Job::RUNNING &&
428           job_state != BL::Job::PAUSED)
429         enable_stop = false;
430     }
431     if (enable_stop)
432     {
433       _stop_job_action->setEnabled(true);
434       _buttons->enable_stop_button();
435     }
436     else
437     {
438       _stop_job_action->setEnabled(false);
439       _buttons->disable_stop_button();
440     }
441
442     // Enable get_results ?
443     bool enable_results = true;
444     for (int i = 0; i < selected_rows.length(); ++i)
445     {
446       QString job_name = _model->itemFromIndex(selected_rows[i])->text();
447       BL::Job * job = _jobs_manager->getJob(job_name.toUtf8().constData());
448       BL::Job::State job_state = job->getState();
449       if (job_state != BL::Job::FINISHED &&
450           job_state != BL::Job::FAILED)
451         enable_results= false;
452     }
453     if (enable_results)
454     {
455       _get_results_job_action->setEnabled(true);
456       _buttons->enable_get_results_button();
457     }
458     else
459     {
460       _get_results_job_action->setEnabled(false);
461       _buttons->disable_get_results_button();
462     }
463   }
464 }
465
466 void
467 BL::GenericGui::updateButtonsStatesSingleSelection()
468 {
469   DEBTRACE("BL::GenericGui::updateButtonsStatesSingleSelection slot");
470
471   // First case: no job selected
472   if (_job_name_selected == "")
473   {
474     _start_job_action->setEnabled(false);
475     _delete_job_action->setEnabled(false);
476     _get_results_job_action->setEnabled(false);
477     _buttons->disable_start_button();
478     _buttons->disable_delete_button();
479     _buttons->disable_get_results_button();
480     _edit_clone_job_action->setEnabled(false);
481     _buttons->disable_edit_clone_button();
482     _restart_job_action->setEnabled(false);
483     _buttons->disable_restart_button();
484     _stop_job_action->setEnabled(false);
485     _buttons->disable_stop_button();
486   }
487   else if (_job_name_selected != "")
488   {
489     BL::Job * job = _jobs_manager->getJob(_job_name_selected.toUtf8().constData());
490     BL::Job::State job_state = job->getState();
491
492     _edit_clone_job_action->setEnabled(true);
493     _buttons->enable_edit_clone_button();
494     switch (job_state)
495     {
496       case BL::Job::CREATED:
497         _start_job_action->setEnabled(true);
498         _delete_job_action->setEnabled(true);
499         _get_results_job_action->setEnabled(false);
500         _buttons->enable_start_button();
501         _buttons->enable_delete_button();
502         _buttons->disable_get_results_button();
503         _restart_job_action->setEnabled(false);
504         _buttons->disable_restart_button();
505         _stop_job_action->setEnabled(false);
506         _buttons->disable_stop_button();
507         break;
508
509       case BL::Job::IN_PROCESS:
510         _start_job_action->setEnabled(false);
511         _buttons->disable_start_button();
512         _delete_job_action->setEnabled(false);
513         _buttons->disable_delete_button();
514         _get_results_job_action->setEnabled(false);
515         _buttons->disable_get_results_button();
516         _restart_job_action->setEnabled(false);
517         _buttons->disable_restart_button();
518         _stop_job_action->setEnabled(false);
519         _buttons->disable_stop_button();
520         break;
521
522       case BL::Job::QUEUED:
523         _start_job_action->setEnabled(false);
524         _buttons->disable_start_button();
525         _delete_job_action->setEnabled(true);
526         _buttons->enable_delete_button();
527         _get_results_job_action->setEnabled(false);
528         _buttons->disable_get_results_button();
529         _restart_job_action->setEnabled(false);
530         _buttons->disable_restart_button();
531         _stop_job_action->setEnabled(true);
532         _buttons->enable_stop_button();
533         break;
534
535       case BL::Job::RUNNING:
536         _start_job_action->setEnabled(false);
537         _buttons->disable_start_button();
538         _delete_job_action->setEnabled(true);
539         _buttons->enable_delete_button();
540         _get_results_job_action->setEnabled(false);
541         _buttons->disable_get_results_button();
542         _restart_job_action->setEnabled(false);
543         _buttons->disable_restart_button();
544         _stop_job_action->setEnabled(true);
545         _buttons->enable_stop_button();
546         break;
547
548       case BL::Job::PAUSED:
549         _start_job_action->setEnabled(false);
550         _buttons->disable_start_button();
551         _delete_job_action->setEnabled(true);
552         _buttons->enable_delete_button();
553         _get_results_job_action->setEnabled(false);
554         _buttons->disable_get_results_button();
555         _restart_job_action->setEnabled(false);
556         _buttons->disable_restart_button();
557         _stop_job_action->setEnabled(true);
558         _buttons->enable_stop_button();
559         break;
560
561       case BL::Job::ERROR:
562         _start_job_action->setEnabled(false);
563         _buttons->disable_start_button();
564         _delete_job_action->setEnabled(true);
565         _buttons->enable_delete_button();
566         _get_results_job_action->setEnabled(false);
567         _buttons->disable_get_results_button();
568         _restart_job_action->setEnabled(true);
569         _buttons->enable_restart_button();
570         _stop_job_action->setEnabled(false);
571         _buttons->disable_stop_button();
572         break;
573
574       case BL::Job::FINISHED:
575         _start_job_action->setEnabled(false);
576         _buttons->disable_start_button();
577         _delete_job_action->setEnabled(true);
578         _buttons->enable_delete_button();
579         _get_results_job_action->setEnabled(true);
580         _buttons->enable_get_results_button();
581         _restart_job_action->setEnabled(true);
582         _buttons->enable_restart_button();
583         _stop_job_action->setEnabled(false);
584         _buttons->disable_stop_button();
585         break;
586
587       case BL::Job::FAILED:
588         _start_job_action->setEnabled(false);
589         _buttons->disable_start_button();
590         _delete_job_action->setEnabled(true);
591         _buttons->enable_delete_button();
592         _get_results_job_action->setEnabled(true);
593         _buttons->enable_get_results_button();
594         _restart_job_action->setEnabled(true);
595         _buttons->enable_restart_button();
596         _stop_job_action->setEnabled(false);
597         _buttons->disable_stop_button();
598         break;
599
600       case BL::Job::NOT_CREATED:
601         _start_job_action->setEnabled(false);
602         _buttons->disable_start_button();
603         _delete_job_action->setEnabled(true);
604         _buttons->enable_delete_button();
605         _get_results_job_action->setEnabled(false);
606         _buttons->disable_get_results_button();
607         _restart_job_action->setEnabled(true);
608         _buttons->enable_restart_button();
609         _stop_job_action->setEnabled(false);
610         _buttons->disable_stop_button();
611         break;
612     }
613   }
614   else
615   {
616     DEBTRACE("ERROR in updateButtonsStates !!!!!!");
617   }
618 }