Salome HOME
Merge branch 'V7_dev'
[modules/jobmanager.git] / src / genericgui / BL_JobsManager_QT.cxx
index 16c65ce2f7edd24d4bca88087d600588571a72dc..e56bde129d86812aa84a053fb9292ad164bb4df9 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2009-2013  CEA/DEN, EDF R&D
+// Copyright (C) 2009-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 #include "BL_JobsManager_QT.hxx"
 #include "BL_GenericGui.hxx"
+
+#include <QApplication>
+#include <QFileDialog>
+#include <QGroupBox>
+#include <QHBoxLayout>
+#include <QMenu>
+#include <QPushButton>
+#include <QScrollArea>
+#include <QStandardItemModel>
+#include <QTextEdit>
+#include <QTimer>
+#include <QVBoxLayout>
 #include <vector>
 
 using namespace std;
@@ -94,7 +106,7 @@ BL::JobsManager_QT::JobsManager_QT(QWidget * parent, BL::GenericGui * main_gui,
   scroll_widget->setWidgetResizable(true);
   setWidget(scroll_widget);
   setWindowTitle("Job Manager");
-  setObjectName("JobManagerDockWidget");
+  setObjectName("jmJobManagerDock");
 }
 
 BL::JobsManager_QT::~JobsManager_QT()
@@ -120,7 +132,7 @@ BL::JobsManager_QT::load_jobs_button()
     write_normal_text("Load jobs action cancelled\n");
   }
   else
-    load_jobs(jobs_file.toStdString());
+    load_jobs(jobs_file.toUtf8().constData());
 }
 
 void
@@ -132,8 +144,8 @@ BL::JobsManager_QT::save_jobs_button()
   filters << "XML files (*.xml)"
           << "Any files (*)";
   dialog.setFileMode(QFileDialog::AnyFile);
-  dialog.setFilters(filters);
-  dialog.selectFilter("(*.xml)");
+  dialog.setNameFilters(filters);
+  dialog.selectNameFilter("(*.xml)");
   dialog.setDefaultSuffix("xml");
   dialog.setConfirmOverwrite(true);
   dialog.setAcceptMode(QFileDialog::AcceptSave);
@@ -152,7 +164,7 @@ BL::JobsManager_QT::save_jobs_button()
     write_normal_text("Save jobs action cancelled\n");
   }
   else
-    save_jobs(jobs_file.toStdString());
+    save_jobs(jobs_file.toUtf8().constData());
 }
 
 void
@@ -272,24 +284,27 @@ void
 BL::JobsManager_QT::create_job_with_wizard(BL::CreateJobWizard & wizard)
 {
   BL::Job * new_job = createJob(wizard.job_name);
-  if (wizard.yacs_file != "")
+  switch (wizard.job_type)
   {
+  case BL::CreateJobWizard::YACS:
     // YACS schema job
     new_job->setType(BL::Job::YACS_SCHEMA);
     new_job->setJobFile(wizard.yacs_file);
     new_job->setDumpYACSState(wizard.dump_yacs_state);
-  }
-  else if (wizard.command != "")
-  {
+    new_job->setYacsDriverOptions(wizard.yacs_driver_options);
+    break;
+  case BL::CreateJobWizard::COMMAND:
     // Command Job
     new_job->setType(BL::Job::COMMAND);
     new_job->setJobFile(wizard.command);
-  }
-  else if (wizard.python_salome_file != "")
-  {
-    // Command Job
+    break;
+  case BL::CreateJobWizard::PYTHON_SALOME:
+    // Python Salome Job
     new_job->setType(BL::Job::PYTHON_SALOME);
     new_job->setJobFile(wizard.python_salome_file);
+    break;
+  default:
+    throw BL::Exception("Unknown job type");
   }
 
   // For all jobs
@@ -325,12 +340,14 @@ BL::JobsManager_QT::create_job_with_wizard(BL::CreateJobWizard & wizard)
   new_job->setResource(wizard.resource_choosed);
   new_job->setBatchQueue(wizard.batch_queue);
   new_job->setLoadLevelerJobType(wizard.ll_jobtype);
+  new_job->setWCKey(wizard.wckey);
+  new_job->setExtraParams(wizard.extra_params);
 
   // End
   addJobToLauncher(wizard.job_name);
-  emit new_job_added(QString::fromStdString(wizard.job_name));
+  emit new_job_added(QString::fromUtf8(wizard.job_name.c_str()));
   QStandardItemModel * model = _model_manager->getModel();
-  QList<QStandardItem *> item_list = model->findItems(QString::fromStdString(wizard.job_name));
+  QList<QStandardItem *> item_list = model->findItems(QString::fromUtf8(wizard.job_name.c_str()));
   QStandardItem * job_state_item = model->item(item_list.at(0)->row(), 2);
   _main_gui->_jobs_table->selectRow(item_list.at(0)->row());
   if (wizard.start_job)
@@ -340,7 +357,7 @@ BL::JobsManager_QT::create_job_with_wizard(BL::CreateJobWizard & wizard)
 void
 BL::JobsManager_QT::delete_job(QString job_name)
 {
-  BL::JobsManager::removeJob(job_name.toStdString());
+  BL::JobsManager::removeJob(job_name.toUtf8().constData());
   _model_manager->delete_job(job_name);
   _main_gui->_job_tab->reset(job_name);
 }
@@ -371,17 +388,16 @@ BL::JobsManager_QT::event(QEvent * e)
           << event->job_name << " "
           << event->data);
 
+  QString job_name = QString::fromUtf8(event->job_name.c_str());
   if (event->action == "create_job")
   {
     if (event->event_name == "Ok")
     {
-      QString str((event->job_name).c_str());
-      write_normal_text("Job " + str + " created\n");
+      write_normal_text("Job " + job_name + " created\n");
     }
     else
     {
-      QString str((event->job_name).c_str());
-      write_error_text("Error in creating job: " + str + "\n");
+      write_error_text("Error in creating job: " + job_name + "\n");
       write_error_text("*** ");
       write_error_text((event->data).c_str());
       write_error_text(" ***\n");
@@ -391,33 +407,29 @@ BL::JobsManager_QT::event(QEvent * e)
   {
     if (event->event_name == "Ok")
     {
-      QString str((event->job_name).c_str());
-      write_normal_text("Job " + str + " queued\n");
+      write_normal_text("Job " + job_name + " queued\n");
     }
     else
     {
-      QString str((event->job_name).c_str());
-      write_error_text("Error in starting job: " + str + "\n");
+      write_error_text("Error in starting job: " + job_name + "\n");
       write_error_text("*** ");
       write_error_text((event->data).c_str());
       write_error_text(" ***\n");
     }
-    emit job_state_changed(QString((event->job_name).c_str()));
+    emit job_state_changed(job_name);
   }
   else if (event->action == "refresh_job")
   {
     if (event->event_name == "Ok")
     {
-      QString name((event->job_name).c_str());
       QString state((event->data).c_str());
       state = state.toLower();
-      write_normal_text("Job " + name + " new state is " + state + "\n");
-      emit job_state_changed(QString((event->job_name).c_str()));
+      write_normal_text("Job " + job_name + " new state is " + state + "\n");
+      emit job_state_changed(job_name);
     }
     else
     {
-      QString str((event->job_name).c_str());
-      write_error_text("Error in refreshing job: " + str + "\n");
+      write_error_text("Error in refreshing job: " + job_name + "\n");
       write_error_text("*** ");
       write_error_text((event->data).c_str());
       write_error_text(" ***\n");
@@ -427,13 +439,11 @@ BL::JobsManager_QT::event(QEvent * e)
   {
     if (event->event_name == "Ok")
     {
-      QString str((event->job_name).c_str());
-      write_normal_text("Job " + str + " deleted\n");
+      write_normal_text("Job " + job_name + " deleted\n");
     }
     else
     {
-      QString str((event->job_name).c_str());
-      write_error_text("Warning delete job: " + str + " maybe not complete, exception catch in SALOME Launcher service\n");
+      write_error_text("Warning delete job: " + job_name + " maybe not complete, exception catch in SALOME Launcher service\n");
       write_error_text("*** ");
       write_error_text((event->data).c_str());
       write_error_text(" ***\n");
@@ -443,13 +453,11 @@ BL::JobsManager_QT::event(QEvent * e)
   {
     if (event->event_name == "Ok")
     {
-      QString str((event->job_name).c_str());
-      write_normal_text("Results of Job " + str + " are get\n");
+      write_normal_text("Results of Job " + job_name + " are get\n");
     }
     else
     {
-      QString str((event->job_name).c_str());
-      write_error_text("Warning for results of job: " + str + " maybe not complete, exception catch in SALOME Launcher service\n");
+      write_error_text("Warning for results of job: " + job_name + " maybe not complete, exception catch in SALOME Launcher service\n");
       write_error_text("*** ");
       write_error_text((event->data).c_str());
       write_error_text(" ***\n");
@@ -459,13 +467,11 @@ BL::JobsManager_QT::event(QEvent * e)
   {
     if (event->event_name == "Ok")
     {
-      QString str((event->job_name).c_str());
-      write_normal_text("Job " + str + " is stopped\n");
+      write_normal_text("Job " + job_name + " is stopped\n");
     }
     else
     {
-      QString str((event->job_name).c_str());
-      write_error_text("Error when trying to stop job: " + str + "\n");
+      write_error_text("Error when trying to stop job: " + job_name + "\n");
       write_error_text("*** ");
       write_error_text((event->data).c_str());
       write_error_text(" ***\n");
@@ -475,15 +481,13 @@ BL::JobsManager_QT::event(QEvent * e)
   {
     if (event->event_name == "Ok")
     {
-      QString str((event->job_name).c_str());
-
          vector<string> hostnames;
 
          Tokenize(event->data, hostnames, "+");
 
          vector<string>::iterator it;
 
-      write_normal_text("Job " + str + " assigned hostnames are :\n");
+      write_normal_text("Job " + job_name + " assigned hostnames are :\n");
 
          for (it = hostnames.begin(); it < hostnames.end(); it++)
          {
@@ -532,15 +536,14 @@ BL::JobsManager_QT::event(QEvent * e)
   {
     if (event->event_name == "Ok")
     {
-      QString str((event->job_name).c_str());
-      write_normal_text("New job added " + str + "\n");
-      emit new_job_added(str);
+      write_normal_text("New job added " + job_name + "\n");
+      emit new_job_added(job_name);
     }
   }
   else if (event->action == "to_remove_job")
   {
     if (event->event_name == "Ok")
-      _main_gui->delete_job_external((event->job_name).c_str());
+      _main_gui->delete_job_external(job_name);
   }
   else
   {