1 // Copyright (C) 2009 CEA/DEN, EDF R&D
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.
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.
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
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include "BL_GenericGui.hxx"
22 BL::GenericGui::GenericGui(BL::MainWindows_Wrap * wrapper) : QObject(wrapper->getDockParent())
24 DEBTRACE("Creating BL::GenericGui");
28 _job_name_selected = "";
30 _dock_parent = _wrapper->getDockParent();
31 _tab_parent = _wrapper->getTabParent();
33 _salome_services = new BL::SALOMEServices();
34 if (_salome_services->initNS() == false)
35 DEBMSG("WARNING !!!!! SALOME IS NOT REACHABLE !!!!");
36 _jobs_manager = new BL::JobsManager_QT(_dock_parent, _salome_services);
37 _model_manager = new BL::QModelManager(this, _jobs_manager);
39 _model = _model_manager->getModel();
41 // ---- Adding different GUI parts
44 _buttons = new BL::Buttons(_tab_parent);
45 _buttons->setCreateButtonSlot(this, SLOT(create_job()));
46 _buttons->setStartButtonSlot(this, SLOT(start_job()));
47 _buttons->setDeleteButtonSlot(this, SLOT(delete_job()));
48 _buttons->setRefreshButtonSlot(this, SLOT(refresh_job()));
49 _buttons->setGetResultsButtonSlot(this, SLOT(get_results_job()));
52 _jobs_table = new BL::JobsTable(_tab_parent);
53 _jobs_table->setModel(_model);
56 _job_tab = new BL::JobTab(_tab_parent, _jobs_manager);
57 _job_tab->setModel(_model);
59 /* Tab Central Widget */
60 QWidget * central_widget = new QWidget(_tab_parent);
62 QSplitter * tab_central_widget = new QSplitter(Qt::Vertical, central_widget);
63 tab_central_widget->addWidget(_jobs_table);
64 tab_central_widget->addWidget(_job_tab);
65 tab_central_widget->setChildrenCollapsible(false);
67 QVBoxLayout * central_layout = new QVBoxLayout;
68 central_layout->addWidget(_buttons);
69 central_layout->addWidget(tab_central_widget);
70 central_widget->setLayout(central_layout);
72 _tab_parent->setCentralWidget(central_widget);
74 //QDockWidget * dw_main = new QDockWidget(_tab_parent);
75 //dw_main->setWidget(central_widget);
76 //_tab_parent->addDockWidget(Qt::LeftDockWidgetArea, dw_main);
79 _dw_summary = new QDockWidget(_dock_parent);
80 _dw_summary->setWindowTitle("Summary");
81 _summary = new BL::Summary(_dock_parent, _jobs_manager);
82 _summary->setModel(_model);
83 _dw_summary->setWidget(_summary);
86 _dw_machine_catalog = new QDockWidget(_dock_parent);
87 _dw_machine_catalog->setWindowTitle("Machine Catalog");
88 _machine_catalog = new BL::MachineCatalog(_dock_parent, _salome_services);
89 _dw_machine_catalog->setWidget(_machine_catalog);
91 /* Main Dock Window */
92 _dock_parent->addDockWidget(Qt::RightDockWidgetArea, _jobs_manager);
93 _dock_parent->addDockWidget(Qt::RightDockWidgetArea, _dw_summary);
94 _dock_parent->addDockWidget(Qt::RightDockWidgetArea, _dw_machine_catalog);
95 _dock_parent->splitDockWidget(_jobs_manager, _dw_summary, Qt::Vertical);
96 _dock_parent->tabifyDockWidget(_dw_summary, _dw_machine_catalog);
98 /* Signals and Slots */
100 // JobsManager -> Model
101 connect(_jobs_manager, SIGNAL(new_job_added(QString)), _model_manager, SLOT(new_job_added(QString)));
102 connect(_jobs_manager, SIGNAL(job_state_changed(QString)), _model_manager, SLOT(job_state_changed(QString)));
103 connect(_jobs_manager, SIGNAL(job_state_changed(QString)), this, SLOT(job_state_changed(QString)));
106 connect(_model, SIGNAL(rowsInserted(QModelIndex, int, int)), _summary, SLOT(rowsInserted(QModelIndex, int, int)));
107 connect(_model, SIGNAL(rowsRemoved(QModelIndex, int, int)), _summary, SLOT(rowsRemoved(QModelIndex, int, int)));
108 connect(_model, SIGNAL(itemChanged(QStandardItem*)), _summary, SLOT(itemChanged(QStandardItem*)));
109 connect(_model, SIGNAL(itemChanged(QStandardItem*)), _job_tab, SLOT(itemChanged(QStandardItem*)));
112 connect(_jobs_table, SIGNAL(clicked(QModelIndex)), _job_tab, SLOT(job_selected(QModelIndex)));
113 connect(_jobs_table, SIGNAL(clicked(QModelIndex)), this, SLOT(job_selected(QModelIndex)));
114 connect(_jobs_table, SIGNAL(clicked(QModelIndex)), _model_manager, SLOT(job_selected(QModelIndex)));
117 connect(this, SIGNAL(job_deleted(QString)), _job_tab, SLOT(reset(QString)));
120 BL::GenericGui::~GenericGui()
122 DEBTRACE("Destroying BL::GenericGui");
124 delete _salome_services;
128 BL::GenericGui::showDockWidgets(bool isVisible)
130 DEBTRACE("BL::GenericGui::showDockWidgets " << isVisible);
131 if (_jobs_manager) _jobs_manager->setVisible(isVisible);
132 if (_dw_summary) _dw_summary->setVisible(isVisible);
133 if (_dw_machine_catalog) _dw_machine_catalog->setVisible(isVisible);
137 BL::GenericGui::createActions()
139 DEBTRACE("CreateActions BL::GenericGui");
140 _create_job_action = _wrapper->createAction("Create Job", QIcon(), "Create Job", "Create Job", 0, _dock_parent, false, this, SLOT(create_job()));
141 _start_job_action = _wrapper->createAction("Start Job", QIcon(), "Start Job", "Start Job", 0, _dock_parent, false, this, SLOT(start_job()));
142 _delete_job_action = _wrapper->createAction("Delete Job", QIcon(), "Delete Job", "Delete Job", 0, _dock_parent, false, this, SLOT(delete_job()));
143 _refresh_job_action = _wrapper->createAction("Refresh Job", QIcon(), "Refresh Job", "Refresh Job", 0, _dock_parent, false, this, SLOT(refresh_job()));
144 _get_results_job_action = _wrapper->createAction("Get Job Results", QIcon(), "Get Job Results", "Get Job Results", 0, _dock_parent, false, this, SLOT(refresh_job()));
148 BL::GenericGui::createMenus()
150 DEBTRACE("CreateMenus BL::GenericGui");
151 int menu_id = _wrapper->createTopMenu("JobManager");
152 _wrapper->addActionToMenu(_create_job_action, menu_id);
153 _wrapper->addActionToMenu(_start_job_action, menu_id);
154 _wrapper->addActionToMenu(_delete_job_action, menu_id);
155 _wrapper->addActionToMenu(_get_results_job_action, menu_id);
156 _wrapper->addActionToMenu(_refresh_job_action, menu_id);
160 BL::GenericGui::create_job()
162 DEBTRACE("Create Job Slot BL::GenericGui");
163 _jobs_manager->create_job_wizard();
167 BL::GenericGui::start_job()
169 DEBTRACE("Start Job Slot BL::GenericGui");
170 _jobs_manager->start_job(_job_name_selected.toStdString());
171 updateButtonsStates();
175 BL::GenericGui::refresh_job()
177 DEBTRACE("Refresh Job Slot BL::GenericGui");
178 _jobs_manager->refresh_jobs();
182 BL::GenericGui::get_results_job()
184 DEBTRACE("Get Results Job Slot BL::GenericGui");
185 _jobs_manager->get_results_job(_job_name_selected.toStdString());
189 BL::GenericGui::delete_job()
191 DEBTRACE("Delete Job Slot BL::GenericGui");
192 int ret = QMessageBox::warning(NULL, "Delete a job", "Do you really want to delete this job ?",
193 QMessageBox::Ok|QMessageBox::Cancel,
195 if (ret == QMessageBox::Ok)
197 _jobs_manager->delete_job(_job_name_selected);
198 _model_manager->deleteJob(_row_selected);
199 emit job_deleted(_job_name_selected);
201 _job_name_selected = "";
202 updateButtonsStates();
207 BL::GenericGui::job_selected(const QModelIndex & index)
209 DEBTRACE("BL::GenericGui::job_selected slot");
210 QStandardItem * item = _model->itemFromIndex(index);
211 QStandardItem * item_name = _model->item(item->row());
212 _row_selected = item->row();
213 _job_name_selected = item_name->text();
214 updateButtonsStates();
218 BL::GenericGui::job_state_changed(const QString & name)
220 if (name == _job_name_selected)
221 updateButtonsStates();
224 BL::GenericGui::updateButtonsStates()
226 DEBTRACE("BL::GenericGui::updateButtonsStates slot");
228 // First case: no job selected
229 if (_job_name_selected == "" and _row_selected == -1)
231 _start_job_action->setEnabled(false);
232 _delete_job_action->setEnabled(false);
233 _get_results_job_action->setEnabled(false);
234 _buttons->disable_start_button();
235 _buttons->disable_delete_button();
236 _buttons->disable_get_results_button();
238 else if (_job_name_selected != "" and _row_selected != -1)
240 BL::Job * job = _jobs_manager->getJob(_job_name_selected.toStdString());
241 BL::Job::State job_state = job->getState();
245 case BL::Job::CREATED:
246 _start_job_action->setEnabled(true);
247 _delete_job_action->setEnabled(true);
248 _get_results_job_action->setEnabled(false);
249 _buttons->enable_start_button();
250 _buttons->enable_delete_button();
251 _buttons->disable_get_results_button();
254 case BL::Job::IN_PROCESS:
255 _start_job_action->setEnabled(false);
256 _buttons->disable_start_button();
257 _delete_job_action->setEnabled(false);
258 _buttons->disable_delete_button();
259 _get_results_job_action->setEnabled(false);
260 _buttons->disable_get_results_button();
263 case BL::Job::QUEUED:
264 _start_job_action->setEnabled(false);
265 _buttons->disable_start_button();
266 _delete_job_action->setEnabled(true);
267 _buttons->enable_delete_button();
268 _get_results_job_action->setEnabled(false);
269 _buttons->disable_get_results_button();
272 case BL::Job::RUNNING:
273 _start_job_action->setEnabled(false);
274 _buttons->disable_start_button();
275 _delete_job_action->setEnabled(true);
276 _buttons->enable_delete_button();
277 _get_results_job_action->setEnabled(false);
278 _buttons->disable_get_results_button();
281 case BL::Job::PAUSED:
282 _start_job_action->setEnabled(false);
283 _buttons->disable_start_button();
284 _delete_job_action->setEnabled(true);
285 _buttons->enable_delete_button();
286 _get_results_job_action->setEnabled(false);
287 _buttons->disable_get_results_button();
291 _start_job_action->setEnabled(false);
292 _buttons->disable_start_button();
293 _delete_job_action->setEnabled(true);
294 _buttons->enable_delete_button();
295 _get_results_job_action->setEnabled(false);
296 _buttons->disable_get_results_button();
299 case BL::Job::FINISHED:
300 _start_job_action->setEnabled(false);
301 _buttons->disable_start_button();
302 _delete_job_action->setEnabled(true);
303 _buttons->enable_delete_button();
304 _get_results_job_action->setEnabled(true);
305 _buttons->enable_get_results_button();
311 DEBTRACE("ERROR in updateButtonsStates !!!!!!");