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