1 // Copyright (C) 2006-2015 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, or (at your option) any later version.
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
21 #include "SALOME_ResourcesManager.hxx"
22 #include "SALOME_LifeCycleCORBA.hxx"
24 #include "RuntimeSALOME.hxx"
26 #include "InputPort.hxx"
27 #include "ServiceNode.hxx"
28 #include "parsers.hxx"
30 #include "YACSGuiLoader.hxx"
31 #include "ComponentInstance.hxx"
33 #include "SALOME_NamingService.hxx"
34 #include "SALOME_ModuleCatalog.hxx"
35 #include "SALOME_ModuleCatalog.hh"
36 #include "SALOMEDS_Tool.hxx"
38 #include "QtGuiContext.hxx"
40 #include "GuiEditor.hxx"
41 #include "GraphicsView.hxx"
43 #include "GenericGui.hxx"
44 #include "SceneItem.hxx"
45 #include "SceneNodeItem.hxx"
46 #include "SceneComposedNodeItem.hxx"
47 #include "ItemEdition.hxx"
48 #include "CatalogWidget.hxx"
49 #include "TreeView.hxx"
50 #include "VisitorSaveGuiSchema.hxx"
51 #include "TypeCode.hxx"
52 #include "LinkInfo.hxx"
53 #include "LogViewer.hxx"
55 #include "Resource.hxx"
56 #include "Message.hxx"
57 #include "ListJobs_GUI.hxx"
59 #include <QFileDialog>
63 #include <QMessageBox>
71 #define WEXITSTATUS(w) ((int) ((w) & 0x40000000))
75 #include "YacsTrace.hxx"
78 using namespace YACS::HMI;
80 GenericGui::GenericGui(YACS::HMI::SuitWrapper* wrapper, QMainWindow *parent)
91 _mapViewContext.clear();
95 QtGuiContext::_counters = new counters(100);
96 srand((unsigned)time(0));
98 GuiObserver::setEventMap();
100 string iconPath = getenv("YACS_ROOT_DIR");
101 iconPath += "/share/salome/resources/yacs";
103 QDir::addSearchPath("icons", iconPath.c_str());
105 _guiEditor = new GuiEditor();
107 YACS::ENGINE::RuntimeSALOME::setRuntime();
108 _loader = new YACSGuiLoader();
109 _loader->registerProcCataLoader();
110 _builtinCatalog = YACS::ENGINE::getSALOMERuntime()->getBuiltinCatalog();
114 YACS::ENGINE::RuntimeSALOME* runTime = YACS::ENGINE::getSALOMERuntime();
115 CORBA::ORB_ptr orb = runTime->getOrb();
118 SALOME_NamingService namingService(orb);
119 CORBA::Object_ptr obj = namingService.Resolve("/Kernel/ModulCatalog");
120 SALOME_ModuleCatalog::ModuleCatalog_var aModuleCatalog =
121 SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj);
122 if (! CORBA::is_nil(aModuleCatalog))
124 DEBTRACE("SALOME_ModuleCatalog::ModuleCatalog found");
125 std::string anIOR = orb->object_to_string( aModuleCatalog );
126 _sessionCatalog = runTime->loadCatalog( "session", anIOR );
127 runTime->addCatalog(_sessionCatalog);
129 std::map< std::string, YACS::ENGINE::ComponentDefinition * >::iterator it;
130 for (it = _sessionCatalog->_componentMap.begin();
131 it != _sessionCatalog->_componentMap.end(); ++it)
132 DEBTRACE("Component: " <<(*it).first);
135 std::map< std::string, YACS::ENGINE::TypeCode*>::iterator it;
136 for (it = _sessionCatalog->_typeMap.begin();
137 it != _sessionCatalog->_typeMap.end(); ++it)
138 DEBTRACE("Type : " <<(*it).first
139 << " " << (*it).second->getKindRepr()
140 << " " << (*it).second->name()
141 << " " << (*it).second->shortName()
142 << " " << (*it).second->id() );
144 DEBTRACE("_sessionCatalog " << _sessionCatalog);
148 catch(ServiceUnreachable& e)
150 DEBTRACE("Caught Exception. "<<e);
153 _dwTree = new QDockWidget(_parent);
154 _dwTree->setVisible(false);
155 _dwTree->setWindowTitle("Tree View: edition mode");
156 _dwTree->setObjectName("yacsTreeViewDock");
157 _parent->addDockWidget(Qt::LeftDockWidgetArea, _dwTree);
158 _dwStacked = new QDockWidget(_parent);
159 _dwStacked->setVisible(false);
160 _dwStacked->setWindowTitle("Input Panel");
161 _dwStacked->setObjectName("yacsInputPanelDock");
162 _dwStacked->setMinimumWidth(270); // --- force a minimum until display
163 _parent->addDockWidget(Qt::RightDockWidgetArea, _dwStacked);
164 _dwCatalogs = new QDockWidget(_parent);
165 _dwCatalogs->setVisible(false);
166 _dwCatalogs->setWindowTitle("Catalogs");
167 _dwCatalogs->setObjectName("yacsCatalogsDock");
168 _parent->addDockWidget(Qt::RightDockWidgetArea, _dwCatalogs);
169 _catalogsWidget = new CatalogWidget(_dwCatalogs,
172 _dwCatalogs->setWidget(_catalogsWidget);
174 _parent->tabifyDockWidget(_dwStacked, _dwCatalogs);
175 _parent->tabifyDockWidget(_dwTree, _wrapper->objectBrowser());
176 #if QT_VERSION >= 0x040500
177 _parent->setTabPosition(Qt::AllDockWidgetAreas, Resource::tabPanelsUp? QTabWidget::North: QTabWidget::South);
179 //Import user catalog
180 std::string usercata=Resource::userCatalog.toStdString();
181 _catalogsWidget->addCatalogFromFile(usercata);
184 GenericGui::~GenericGui()
186 if(_BJLdialog) delete _BJLdialog;
189 void GenericGui::createActions()
191 // QAction* createAction(const int id,
192 // const QString& toolTip,
193 // const QIcon& icon,
194 // const QString& menu,
195 // const QString& status,
196 // const int shortCut,
197 // QObject* parent =0,
198 // bool checkable = false,
199 // QObject* receiver =0,
200 // const char* member =0);
202 _newSchemaAct = _wrapper->createAction(getMenuId(), tr("Create a new YACS Schema"), QIcon("icons:schema.png"),
203 tr("New Schema"), tr("Create a new YACS Schema"),
204 0, _parent, false, this, SLOT(onNewSchema()));
205 _newSchemaAct->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_N); // --- QKeySequence::New ambiguous in SALOME
207 _importSchemaAct = _wrapper->createAction(getMenuId(), tr("Import a YACS Schema for edition"), QIcon("icons:import_dataflow.png"),
208 tr("Import Schema"), tr("Import a YACS Schema for edition"),
209 0, _parent, false, this, SLOT(onImportSchema()));
210 _importSchemaAct->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_O); // --- QKeySequence::Open ambiguous in SALOME
212 _importSupervSchemaAct = _wrapper->createAction(getMenuId(), tr("Import a SUPERV Schema for edition"), QIcon("icons:import_superv_dataflow.png"),
213 tr("Import SUPERV Schema"), tr("Import a SUPERV Schema for edition"),
214 0, _parent, false, this, SLOT(onImportSupervSchema()));
216 _exportSchemaAct = _wrapper->createAction(getMenuId(), tr("Save the current YACS Schema"), QIcon("icons:save_dataflow.png"),
217 tr("Save Schema"), tr("Save the current YACS Schema"),
218 0, _parent, false, this, SLOT(onExportSchema()));
219 _exportSchemaAct->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_S); // --- QKeySequence::Save ambiguous in SALOME
221 _exportSchemaAsAct = _wrapper->createAction(getMenuId(), tr("Save the current YACS Schema As..."), QIcon("icons:export_dataflow.png"),
222 tr("Save Schema As"), tr("Save the current YACS Schema As..."),
223 0, _parent, false, this, SLOT(onExportSchemaAs()));
224 //_exportSchemaAsAct->setShortcut(QKeySequence::SaveAs); // --- ambiguous in SALOME
226 _importCatalogAct = _wrapper->createAction(getMenuId(), tr("Import a Schema as a Catalog"), QIcon("icons:insert_file.png"),
227 tr("Import Catalog"), tr("Import a Schema as a Catalog"),
228 0, _parent, false, this, SLOT(onImportCatalog()));
231 _runLoadedSchemaAct = _wrapper->createAction(getMenuId(), tr("Prepare the current edited schema for run"), QIcon("icons:run_active.png"),
232 tr("Run Current Schema"), tr("Prepare the current edited schema for run"),
233 0, _parent, false, this, SLOT(onRunLoadedSchema()));
235 _loadRunStateSchemaAct = _wrapper->createAction(getMenuId(), tr("Load a previous run state for this schema, prepare to run"), QIcon("icons:load_execution_state.png"),
236 tr("Load Run State"), tr("Load a previous run state for this schema, prepare to run"),
237 0, _parent, false, this, SLOT(onLoadRunStateSchema()));
239 _loadAndRunSchemaAct = _wrapper->createAction(getMenuId(), tr("Load a schema for run"), QIcon("icons:run.png"),
240 tr("Load Schema to run"), tr("Load a schema for run"),
241 0, _parent, false, this, SLOT(onLoadAndRunSchema()));
243 _chooseBatchJobAct = _wrapper->createAction(getMenuId(), tr("Choose Batch Job to watch"), QIcon("icons:batch.png"),
244 tr("Choose Batch Job to watch"), tr("Choose Batch Job to watch"),
245 0, _parent, false, this, SLOT(onChooseBatchJob()));
247 _startResumeAct = _wrapper->createAction(getMenuId(), tr("Start or Resume Schema execution"), QIcon("icons:suspend_resume.png"),
248 tr("Start/Resume execution"), tr("Start or Resume Schema execution"),
249 0, _parent, false, this, SLOT(onStartResume()));
251 _abortAct = _wrapper->createAction(getMenuId(), tr("Abort the current execution"), QIcon("icons:kill.png"),
252 tr("Abort execution"), tr("Abort the current execution"),
253 0, _parent, false, this, SLOT(onAbort()));
255 _pauseAct = _wrapper->createAction(getMenuId(), tr("Suspend the current execution"), QIcon("icons:pause.png"),
256 tr("Suspend execution"), tr("Suspend the current execution"),
257 0, _parent, false, this, SLOT(onPause()));
259 _resetAct = _wrapper->createAction(getMenuId(), tr("Reset error nodes and restart the current execution"), QIcon("icons:reset.png"),
260 tr("Restart execution"), tr("Restart the current execution with reset of error nodes"),
261 0, _parent, false, this, SLOT(onReset()));
264 _saveRunStateAct = _wrapper->createAction(getMenuId(), tr("Save the current run state"), QIcon("icons:save_dataflow_state.png"),
265 tr("Save State"), tr("Save the current run state"),
266 0, _parent, false, this, SLOT(onSaveRunState()));
268 _newEditionAct = _wrapper->createAction(getMenuId(), tr("Edit again the current schema in a new context"), QIcon("icons:new_edition.png"),
269 tr("Edit Again"), tr("Edit again the current schema in a new context"),
270 0, _parent, false, this, SLOT(onNewEdition()));
273 _getYacsContainerLogAct = _wrapper->createAction(getMenuId(), tr("get YACS container log"), QIcon("icons:change_informations.png"),
274 tr("YACS Container Log"), tr("get YACS container log"),
275 0, _parent, false, this, SLOT(onGetYacsContainerLog()));
277 _getErrorReportAct = _wrapper->createAction(getMenuId(), tr("get Node Error Report"), QIcon("icons:filter_notification.png"),
278 tr("Node Error Report"), tr("get Node Error Report"),
279 0, _parent, false, this, SLOT(onGetErrorReport()));
281 _getErrorDetailsAct = _wrapper->createAction(getMenuId(), tr("get Node Error Details"), QIcon("icons:icon_text.png"),
282 tr("Node Error Details"), tr("get Node Error Details"),
283 0, _parent, false, this, SLOT(onGetErrorDetails()));
285 _getContainerLogAct = _wrapper->createAction(getMenuId(), tr("get Node Container Log"), QIcon("icons:change_informations.png"),
286 tr("Node Container Log"), tr("get Node Container Log"),
287 0, _parent, false, this, SLOT(onGetContainerLog()));
289 _shutdownProcAct = _wrapper->createAction(getMenuId(), tr("Shutdown Proc"), QIcon("icons:kill.png"),
290 tr("Shutdown Proc"), tr("Shutdown Proc"),
291 0, _parent, false, this, SLOT(onShutdownProc()));
294 _editDataTypesAct = _wrapper->createAction(getMenuId(), tr("Edit Data Types"), QIcon("icons:kill.png"),
295 tr("Edit Data Types"), tr("Edit Data Types"),
296 0, _parent, false, this, SLOT(onEditDataTypes()));
298 _createDataTypeAct = _wrapper->createAction(getMenuId(), tr("Create Data Types"), QIcon("icons:kill.png"),
299 tr("Create Data Types"), tr("Create Data Types"),
300 0, _parent, false, this, SLOT(onCreateDataType()));
302 _importDataTypeAct = _wrapper->createAction(getMenuId(), tr("Import Data Types, use drag and drop from catalog"), QIcon("icons:folder_cyan.png"),
303 tr("Import Data Types"), tr("Import Data Types, use drag and drop from catalog"),
304 0, _parent, false, this, SLOT(onImportDataType()));
306 _newContainerAct = _wrapper->createAction(getMenuId(), tr("Create a New Container"), QIcon("icons:container.png"),
307 tr("Create Container"), tr("Create a New Container"),
308 0, _parent, false, this, SLOT(onNewContainer()));
310 _newHPContainerAct = _wrapper->createAction(getMenuId(), tr("Create a New HP Container"), QIcon("icons:container.png"),
311 tr("Create HP Container"), tr("Create a New Homogeneous Pool Container."),
312 0, _parent, false, this, SLOT(onNewHPContainer()));
314 _selectComponentInstanceAct = _wrapper->createAction(getMenuId(), tr("Select a Component Instance"), QIcon("icons:icon_select.png"),
315 tr("Select a Component Instance"), tr("Select a Component Instance"),
316 0, _parent, false, this, SLOT(onSelectComponentInstance()));
318 _newSalomeComponentAct = _wrapper->createAction(getMenuId(), tr("Create a New SALOME Component Instance"), QIcon("icons:new_salome_component.png"),
319 tr("Create Component Instance"), tr("Create a New SALOME Component Instance"),
320 0, _parent, false, this, SLOT(onNewSalomeComponent()));
322 _newSalomePythonComponentAct = _wrapper->createAction(getMenuId(), tr("Create a New SALOME Python Component"), QIcon("icons:new_salomepy_component.png"),
323 tr("SALOME Python Component"), tr("Create a New SALOME Python Component"),
324 0, _parent, false, this, SLOT(onNewSalomePythonComponent()));
326 _newCorbaComponentAct = _wrapper->createAction(getMenuId(), tr("Create a New CORBA Component"), QIcon("icons:new_corba_component.png"),
327 tr("CORBA Component"), tr("Create a New CORBA Component"),
328 0, _parent, false, this, SLOT(onNewCorbaComponent()));
330 _salomeServiceNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New SALOME Service Node"), QIcon("icons:new_salome_service_node.png"),
331 tr("SALOME Service Node"), tr("Create a New SALOME Service Node"),
332 0, _parent, false, this, SLOT(onSalomeServiceNode()));
334 _serviceInlineNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New Inline Service Node"), QIcon("icons:new_service_inline_node.png"),
335 tr("Inline Service Node"), tr("Create a New Inline Service Node"),
336 0, _parent, false, this, SLOT(onServiceInlineNode()));
338 _CORBAServiceNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New CORBA Service Node"), QIcon("icons:new_corba_service_node.png"),
339 tr("CORBA Node"), tr("Create a New CORBA Service Node"),
340 0, _parent, false, this, SLOT(onCORBAServiceNode()));
342 _nodeNodeServiceNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New Node referencing a Node"), QIcon("icons:new_nodenode_service_node.png"),
343 tr("Ref on Node"), tr("Create a New Node referencing a Node"),
344 0, _parent, false, this, SLOT(onNodeNodeServiceNode()));
346 _cppNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New C++ Node"), QIcon("icons:new_cpp_node.png"),
347 tr("Cpp Node"), tr("Create a New C++ Node"),
348 0, _parent, false, this, SLOT(onCppNode()));
350 _inDataNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New Input data Node"), QIcon("icons:node.png"),
351 tr("Input Data Node"), tr("Create a New Input data Node"),
352 0, _parent, false, this, SLOT(onInDataNode()));
354 _outDataNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New Output data Node"), QIcon("icons:node.png"),
355 tr("Output Data Node"), tr("Create a New Output data Node"),
356 0, _parent, false, this, SLOT(onOutDataNode()));
358 _inStudyNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New Input Study Node"), QIcon("icons:node.png"),
359 tr("Input Study Node"), tr("Create a New Input Study Node"),
360 0, _parent, false, this, SLOT(onInStudyNode()));
362 _outStudyNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New Output Study Node"), QIcon("icons:node.png"),
363 tr("Output Study Node"), tr("Create a New Output Study Node"),
364 0, _parent, false, this, SLOT(onOutStudyNode()));
366 _inlineScriptNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New Inline Python Script Node"), QIcon("icons:new_inline_script_node.png"),
367 tr("Inline Script Node"), tr("Create a New Inline Python Script Node"),
368 0, _parent, false, this, SLOT(onInlineScriptNode()));
370 _inlineFunctionNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New Inline Python Function Node"), QIcon("icons:new_inline_function_node.png"),
371 tr("Inline Function Node"), tr("Create a New Inline Python Function Node"),
372 0, _parent, false, this, SLOT(onInlineFunctionNode()));
374 _blockNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New Bloc Node"), QIcon("icons:new_block_node.png"),
375 tr("bloc Node"), tr("Create a New Bloc Node"),
376 0, _parent, false, this, SLOT(onBlockNode()));
378 _FORNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New For Loop Node"), QIcon("icons:new_for_loop_node.png"),
379 tr("For Loop Node"), tr("Create a New For Loop Node"),
380 0, _parent, false, this, SLOT(onFORNode()));
382 _FOREACHNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New For Each Loop Node"), QIcon("icons:new_foreach_loop_node.png"),
383 tr("For Each Loop Node"), tr("Create a New For Each Loop Node"),
384 0, _parent, false, this, SLOT(onFOREACHNode()));
386 _WHILENodeAct = _wrapper->createAction(getMenuId(), tr("Create a New While Loop Node"), QIcon("icons:new_while_loop_node.png"),
387 tr("While Loop Node"), tr("Create a New While Loop Node"),
388 0, _parent, false, this, SLOT(onWHILENode()));
390 _SWITCHNodeAct = _wrapper->createAction(getMenuId(), tr("Create a New Switch Node"), QIcon("icons:new_switch_loop_node.png"),
391 tr("Switch Node"), tr("Create a New Switch Node"),
392 0, _parent, false, this, SLOT(onSWITCHNode()));
394 _OptimizerLoopAct = _wrapper->createAction(getMenuId(), tr("Create a New Optimizer Loop Node"), QIcon("icons:new_for_loop_node.png"),
395 tr("Optimizer Loop"), tr("Create a New Optimizer Loop"),
396 0, _parent, false, this, SLOT(onOptimizerLoop()));
398 _nodeFromCatalogAct = _wrapper->createAction(getMenuId(), tr("Create a New Node from Catalog, use drag and drop from catalog"), QIcon("icons:new_from_library_node.png"),
399 tr("Node from Catalog"), tr("Create a New Node from Catalog, use drag and drop from catalog"),
400 0, _parent, false, this, SLOT(onNodeFromCatalog()));
402 _deleteItemAct = _wrapper->createAction(getMenuId(), tr("Delete a Schema Item"), QIcon("icons:delete.png"),
403 tr("Delete Item"), tr("Delete a Schema Item"),
404 0, _parent, false, this, SLOT(onDeleteItem()));
405 _deleteItemAct->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_D); // --- QKeySequence::Delete dangerous...
407 _cutItemAct = _wrapper->createAction(getMenuId(), tr("Cut a Schema Item"), QIcon("icons:cut.png"),
408 tr("Cut Item"), tr("Cut a Schema Item"),
409 0, _parent, false, this, SLOT(onCutItem()));
410 _cutItemAct->setShortcut(QKeySequence::Cut);
412 _copyItemAct = _wrapper->createAction(getMenuId(), tr("Copy a Schema Item"), QIcon("icons:copy.png"),
413 tr("Copy Item"), tr("Copy a Schema Item"),
414 0, _parent, false, this, SLOT(onCopyItem()));
415 _copyItemAct->setShortcut(QKeySequence::Copy);
417 _pasteItemAct = _wrapper->createAction(getMenuId(), tr("Paste a Schema Item"), QIcon("icons:paste.png"),
418 tr("Paste Item"), tr("Paste a Schema Item"),
419 0, _parent, false, this, SLOT(onPasteItem()));
420 _pasteItemAct->setShortcut(QKeySequence::Paste);
422 _putInBlocAct = _wrapper->createAction(getMenuId(), tr("Put node in block"), QIcon("icons:paste.png"),
423 tr("Put node in block"), tr("Put node in block"),
424 0, _parent, false, this, SLOT(onPutInBloc()));
426 _putGraphInBlocAct = _wrapper->createAction(getMenuId(), tr("Bloc"), QIcon("icons:new_block_node.png"),
427 tr("Bloc"), tr("Bloc"),
428 0, _parent, false, this, SLOT(onPutGraphInBloc()));
430 _putGraphInForLoopAct = _wrapper->createAction(getMenuId(), tr("For Loop"), QIcon("icons:new_for_loop_node.png"),
431 tr("For Loop"), tr("For Loop"),
432 0, _parent, false, this, SLOT(onPutGraphInForLoop()));
434 _putGraphInWhileLoopAct = _wrapper->createAction(getMenuId(), tr("While Loop"), QIcon("icons:new_while_loop_node.png"),
435 tr("While Loop"), tr("While Loop"),
436 0, _parent, false, this, SLOT(onPutGraphInWhileLoop()));
438 _putGraphInOptimizerLoopAct = _wrapper->createAction(getMenuId(), tr("Optimizer Loop"), QIcon("icons:new_for_loop_node.png"),
439 tr("Optimizer Loop"), tr("Optimizer Loop"),
440 0, _parent, false, this, SLOT(onPutGraphInOptimizerLoop()));
442 _arrangeLocalNodesAct = _wrapper->createAction(getMenuId(), tr("arrange nodes on that bloc level, without recursion"), QIcon("icons:arrange_nodes.png"),
443 tr("arrange local nodes"), tr("arrange nodes on that bloc level, without recursion"),
444 0, _parent, false, this, SLOT(onArrangeLocalNodes()));
446 _arrangeRecurseNodesAct = _wrapper->createAction(getMenuId(), tr("arrange nodes on that bloc level, with recursion"), QIcon("icons:sample.png"),
447 tr("arrange nodes recursion"), tr("arrange nodes on that bloc level, with recursion"),
448 0, _parent, false, this, SLOT(onArrangeRecurseNodes()));
450 _computeLinkAct = _wrapper->createAction(getMenuId(), tr("compute orthogonal links"), QIcon("icons:rebuild_links.png"),
451 tr("compute links"), tr("compute orthogonal links"),
452 0, _parent, false, this, SLOT(onRebuildLinks()));
454 _zoomToBlocAct = _wrapper->createAction(getMenuId(), tr("zoom 2D view to selected bloc"), QIcon("icons:zoomToBloc.png"),
455 tr("zoom to bloc"), tr("zoom 2D view to the selected composed node"),
456 0, _parent, false, this, SLOT(onZoomToBloc()));
458 _centerOnNodeAct = _wrapper->createAction(getMenuId(), tr("center 2D view on selected node"), QIcon("icons:centerOnNode.png"),
459 tr("center on node"), tr("center 2D view on selected node"),
460 0, _parent, false, this, SLOT(onCenterOnNode()));
461 _centerOnNodeAct->setShortcut(QKeySequence::Find);
463 _shrinkExpand = _wrapper->createAction(getMenuId(), tr("shrink or expand the selected node"), QIcon("icons:shrinkExpand.png"),
464 tr("shrink/expand"), tr("shrink or expand the selected node"),
465 0, _parent, false, this, SLOT(onShrinkExpand()));
467 _shrinkExpandChildren = _wrapper->createAction(getMenuId(), tr("shrink or expand direct children of the selected node"), QIcon("icons:shrinkExpand.png"),
468 tr("shrink/expand children"), tr("shrink or expand direct children of the selected node"),
469 0, _parent, false, this, SLOT(onShrinkExpandChildren()));
471 _shrinkExpandElementaryRecursively = _wrapper->createAction(getMenuId(), tr("shrink or expand elementary nodes of the selected node recursively"), QIcon("icons:shrinkExpand.png"),
472 tr("shrink/expand elementary"), tr("shrink or expand elementary nodes of the selected node recursively"),
473 0, _parent, false, this, SLOT(onShrinkExpandElementaryRecursively()));
475 _toggleStraightLinksAct = _wrapper->createAction(getMenuId(), tr("draw straight or orthogonal links"), QIcon("icons:straightLink.png"),
476 tr("straight/orthogonal"), tr("draw straight or orthogonal links"),
477 0, _parent, true, this, SLOT(onToggleStraightLinks(bool)));
479 _toggleStraightLinksAct->setChecked(Resource::straightLinks);
480 onToggleStraightLinks(Resource::straightLinks);
482 _toggleAutomaticComputeLinkAct = _wrapper->createAction(getMenuId(), tr("compute othogonal links automatically when nodes move"), QIcon("icons:autoComputeLink.png"),
483 tr("automatic link"), tr("compute othogonal links automatically when nodes move"),
484 0, _parent, true, this, SLOT(onToggleAutomaticComputeLinks(bool)));
486 _toggleAutomaticComputeLinkAct->setChecked(Resource::autoComputeLinks);
487 onToggleAutomaticComputeLinks(Resource::autoComputeLinks); // Why is this needed ?
489 _toggleSimplifyLinkAct = _wrapper->createAction(getMenuId(), tr("simplify links by removing unnecessary direction changes"), QIcon("icons:simplifyLink.png"),
490 tr("simplify links"), tr("simplify links by removing unnecessary direction changes"),
491 0, _parent, true, this, SLOT(onToggleSimplifyLinks(bool)));
492 _toggleSimplifyLinkAct->setChecked(Resource::simplifyLink);
493 onToggleSimplifyLinks(Resource::simplifyLink);
495 _toggleForce2NodesLinkAct = _wrapper->createAction(getMenuId(), tr("force orthogonal links by adding an edge on simples links"), QIcon("icons:force2nodeLink.png"),
496 tr("force ortho links"), tr("force orthogonal links by adding an edge on simples links"),
497 0, _parent, true, this, SLOT(onToggleForce2NodesLinks(bool)));
498 _toggleForce2NodesLinkAct->setChecked(true);
500 _toggleAddRowColsAct = _wrapper->createAction(getMenuId(), tr("allow more path for the links, for a better separation"), QIcon("icons:addRowCols.png"),
501 tr("separate links"), tr("allow more path for the links, for a better separation"),
502 0, _parent, true, this, SLOT(onToggleAddRowCols(bool)));
503 _toggleAddRowColsAct->setChecked(Resource::addRowCols);
504 onToggleAddRowCols(Resource::addRowCols);
506 _selectReferenceAct = _wrapper->createAction(getMenuId(), tr("select reference"), QIcon("icons:ob_service_node.png"),
507 tr("select reference"), tr("select reference"),
508 0, _parent, false, this, SLOT(onSelectReference()));
510 _whatsThisAct = _wrapper->createAction(getMenuId(), tr("active whatsThis Mode to get help on widgets"), QIcon("icons:whatsThis.png"),
511 tr("whatsThis Mode"), tr("active whatsThis Mode to get help on widgets"),
512 0, _parent, false, this, SLOT(onWhatsThis()));
513 _whatsThisAct->setShortcut(QKeySequence::WhatsThis);
515 _withoutStopModeAct = _wrapper->createAction(getMenuId(), tr("set execution mode without stop"), QIcon("icons:run_active.png"),
516 tr("mode without stop"), tr("set execution mode without stop"),
517 0, _parent, true, this, SLOT(onWithoutStopMode(bool)));
519 _breakpointsModeAct = _wrapper->createAction(getMenuId(), tr("set execution mode with stop on breakpoints"), QIcon("icons:breakpoints_active.png"),
520 tr("mode breakpoints"), tr("set execution mode with stop on breakpoints"),
521 0, _parent, true, this, SLOT(onBreakpointsMode(bool)));
523 _stepByStepModeAct = _wrapper->createAction(getMenuId(), tr("set execution mode step by step"), QIcon("icons:step_by_step_active.png"),
524 tr("mode step by step"), tr("set execution mode step by step"),
525 0, _parent, true, this, SLOT(onStepByStepMode(bool)));
527 _toggleStopOnErrorAct = _wrapper->createAction(getMenuId(), tr("Force stop on first error during execution"), QIcon("icons:toggle_stop_on_error.png"),
528 tr("stop on error"), tr("Force stop on first error during execution"),
529 0, _parent, true, this, SLOT(onToggleStopOnError(bool)));
531 _toggleSceneItemVisibleAct = _wrapper->createAction(getMenuId(), tr("toggle 2D scene item visibility"), QIcon("icons:toggleVisibility.png"),
532 tr("visible/hidden"), tr("toggle 2D scene item visibility"),
533 0, _parent, true, this, SLOT(onToggleSceneItemVisible(bool)));
537 _showAllLinksAct = _wrapper->createAction(getMenuId(), tr("Show all the links"), QIcon("icons:showLink.png"),
538 tr("show all links"), tr("Show all the links"),
539 0, _parent, false, this, SLOT(onShowAllLinks()));
541 _hideAllLinksAct = _wrapper->createAction(getMenuId(), tr("Hide all the links"), QIcon("icons:hideLink.png"),
542 tr("hide all links"), tr("Hide all the links"),
543 0, _parent, false, this, SLOT(onHideAllLinks()));
546 _showOnlyPortLinksAct = _wrapper->createAction(getMenuId(), tr("Show only links from/to this port"), QIcon("icons:showLink.png"),
547 tr("show only links"), tr("Show only links from/to this port"),
548 0, _parent, false, this, SLOT(onShowOnlyPortLinks()));
550 _showPortLinksAct = _wrapper->createAction(getMenuId(), tr("Show links from/to this port"), QIcon("icons:showLink.png"),
551 tr("show links"), tr("Show links from/to this port"),
552 0, _parent, false, this, SLOT(onShowPortLinks()));
554 _hidePortLinksAct = _wrapper->createAction(getMenuId(), tr("Hide links from/to this port"), QIcon("icons:hideLink.png"),
555 tr("hide links"), tr("Hide links from/to this port"),
556 0, _parent, false, this, SLOT(onHidePortLinks()));
559 _showOnlyCtrlLinksAct = _wrapper->createAction(getMenuId(), tr("Show only control links from/to this node"), QIcon("icons:showLink.png"),
560 tr("show only Control links"), tr("Show only control links from/to this node"),
561 0, _parent, false, this, SLOT(onShowOnlyCtrlLinks()));
563 _showCtrlLinksAct = _wrapper->createAction(getMenuId(), tr("Show control links from/to this node"), QIcon("icons:showLink.png"),
564 tr("show control links"), tr("Show control links from/to this node"),
565 0, _parent, false, this, SLOT(onShowCtrlLinks()));
567 _hideCtrlLinksAct = _wrapper->createAction(getMenuId(), tr("Hide control links from/to this node"), QIcon("icons:hideLink.png"),
568 tr("hide control links"), tr("Hide control links from/to this node"),
569 0, _parent, false, this, SLOT(onHideCtrlLinks()));
572 _showOnlyLinkAct = _wrapper->createAction(getMenuId(), tr("Show only this link"), QIcon("icons:showLink.png"),
573 tr("show only"), tr("Show only this link"),
574 0, _parent, false, this, SLOT(onShowOnlyLink()));
576 _showLinkAct = _wrapper->createAction(getMenuId(), tr("Show this link"), QIcon("icons:showLink.png"),
577 tr("show"), tr("Show this link"),
578 0, _parent, false, this, SLOT(onShowLink()));
580 _hideLinkAct = _wrapper->createAction(getMenuId(), tr("Hide this link"), QIcon("icons:hideLink.png"),
581 tr("hide"), tr("Hide this link"),
582 0, _parent, false, this, SLOT(onHideLink()));
585 _emphasisPortLinksAct = _wrapper->createAction(getMenuId(), tr("emphasis on links from/to this port"), QIcon("icons:emphasisLink.png"),
586 tr("emphasize links"), tr("emphasis on links from/to this port"),
587 0, _parent, false, this, SLOT(onEmphasisPortLinks()));
589 _emphasisCtrlLinksAct = _wrapper->createAction(getMenuId(), tr("emphasis on control links from/to this node"), QIcon("icons:emphasisLink.png"),
590 tr("emphasize control links"), tr("emphasis on control links from/to this node"),
591 0, _parent, false, this, SLOT(onEmphasisCtrlLinks()));
593 _emphasisLinkAct = _wrapper->createAction(getMenuId(), tr("emphasis on this link"), QIcon("icons:emphasisLink.png"),
594 tr("emphasize"), tr("emphasis on this link"),
595 0, _parent, false, this, SLOT(onEmphasisLink()));
597 _deEmphasizeAllAct = _wrapper->createAction(getMenuId(), tr("remove all emphasis"), QIcon("icons:deEmphasisLink.png"),
598 tr("remove all emphasis"), tr("remove all emphasis"),
599 0, _parent, false, this, SLOT(onDeEmphasizeAll()));
602 _undoAct = _wrapper->createAction(getMenuId(), tr("undo last action"), QIcon("icons:undo.png"),
603 tr("undo"), tr("undo last action"),
604 0, _parent, false, this, SLOT(onUndo()));
605 _undoAct->setShortcut(QKeySequence::Undo);
607 _redoAct = _wrapper->createAction(getMenuId(), tr("redo last action"), QIcon("icons:redo.png"),
608 tr("redo"), tr("redo last action"),
609 0, _parent, false, this, SLOT(onRedo()));
610 _redoAct->setShortcut(QKeySequence::Redo);
612 _showUndoAct = _wrapper->createAction(getMenuId(), tr("show undo commands"), QIcon("icons:undo.png"),
613 tr("show undo"), tr("show undo commands"),
614 0, _parent, false, this, SLOT(onShowUndo()));
616 _showRedoAct = _wrapper->createAction(getMenuId(), tr("show redo commands"), QIcon("icons:redo.png"),
617 tr("show redo"), tr("show redo commands"),
618 0, _parent, false, this, SLOT(onShowRedo()));
621 _execModeGroup = new QActionGroup(this);
622 _execModeGroup->addAction(_withoutStopModeAct);
623 _execModeGroup->addAction(_breakpointsModeAct);
624 _execModeGroup->addAction(_stepByStepModeAct);
625 _withoutStopModeAct->setChecked(true);
628 void GenericGui::createMenus()
631 aMenuId = _wrapper->createMenu( tr( "File" ), -1, -1 );
632 _wrapper->createMenu( _wrapper->separator(), aMenuId, -1, 10 );
633 aMenuId = _wrapper->createMenu( "YACS", aMenuId, -1, 10 );
634 _wrapper->createMenu( _newSchemaAct, aMenuId );
635 _wrapper->createMenu( _importSchemaAct, aMenuId );
637 aMenuId = _wrapper->createMenu( "YACS", -1, -1, 30 );
638 _wrapper->createMenu( _newSchemaAct, aMenuId );//, 10
639 _wrapper->createMenu( _importSchemaAct, aMenuId );
640 _wrapper->createMenu( _importSupervSchemaAct, aMenuId );
641 _wrapper->createMenu( _wrapper->separator(), aMenuId);
642 _wrapper->createMenu( _exportSchemaAct, aMenuId );
643 _wrapper->createMenu( _exportSchemaAsAct, aMenuId );
644 _wrapper->createMenu( _wrapper->separator(), aMenuId);
645 _wrapper->createMenu( _runLoadedSchemaAct, aMenuId );
646 _wrapper->createMenu( _loadRunStateSchemaAct, aMenuId );
647 _wrapper->createMenu( _loadAndRunSchemaAct, aMenuId );
648 _wrapper->createMenu( _chooseBatchJobAct, aMenuId );
649 _wrapper->createMenu( _wrapper->separator(), aMenuId);
650 _wrapper->createMenu( _undoAct, aMenuId );
651 _wrapper->createMenu( _redoAct, aMenuId );
652 _wrapper->createMenu( _showUndoAct, aMenuId );
653 _wrapper->createMenu( _showRedoAct, aMenuId );
654 _wrapper->createMenu( _wrapper->separator(), aMenuId);
655 _wrapper->createMenu( _startResumeAct, aMenuId );
656 _wrapper->createMenu( _abortAct, aMenuId );
657 _wrapper->createMenu( _pauseAct, aMenuId );
658 _wrapper->createMenu( _resetAct, aMenuId );
659 _wrapper->createMenu( _wrapper->separator(), aMenuId);
660 _wrapper->createMenu( _saveRunStateAct, aMenuId );
661 //_wrapper->createMenu( _newEditionAct, aMenuId );
662 _wrapper->createMenu( _wrapper->separator(), aMenuId);
663 _wrapper->createMenu( _withoutStopModeAct, aMenuId );
664 _wrapper->createMenu( _breakpointsModeAct, aMenuId );
665 _wrapper->createMenu( _stepByStepModeAct, aMenuId );
666 _wrapper->createMenu( _wrapper->separator(), aMenuId);
667 _wrapper->createMenu( _toggleStopOnErrorAct, aMenuId );
668 _wrapper->createMenu( _wrapper->separator(), aMenuId);
669 _wrapper->createMenu( _importCatalogAct, aMenuId );
670 _wrapper->createMenu( _wrapper->separator(), aMenuId);
671 _wrapper->createMenu( _toggleStraightLinksAct, aMenuId );
672 _wrapper->createMenu( _toggleAutomaticComputeLinkAct, aMenuId );
673 _wrapper->createMenu( _toggleSimplifyLinkAct, aMenuId );
674 _wrapper->createMenu( _toggleForce2NodesLinkAct, aMenuId );
675 _wrapper->createMenu( _toggleAddRowColsAct, aMenuId );
676 _wrapper->createMenu( _wrapper->separator(), aMenuId);
677 _wrapper->createMenu( _showAllLinksAct, aMenuId );
678 _wrapper->createMenu( _hideAllLinksAct, aMenuId );
679 _wrapper->createMenu( _wrapper->separator(), aMenuId);
680 _wrapper->createMenu( _whatsThisAct, aMenuId );
683 void GenericGui::createTools()
685 int aToolId = _wrapper->createTool ( tr( "YACS Toolbar" ), QString( "YACSToolbar" ) );
686 _wrapper->createTool( _newSchemaAct, aToolId );
687 _wrapper->createTool( _importSchemaAct, aToolId );
688 _wrapper->createTool( _wrapper->separator(), aToolId );
689 _wrapper->createTool( _exportSchemaAct, aToolId );
690 _wrapper->createTool( _exportSchemaAsAct, aToolId );
691 _wrapper->createTool( _wrapper->separator(), aToolId);
692 _wrapper->createTool( _runLoadedSchemaAct, aToolId );
693 _wrapper->createTool( _loadRunStateSchemaAct, aToolId );
694 _wrapper->createTool( _loadAndRunSchemaAct, aToolId );
695 _wrapper->createTool( _chooseBatchJobAct, aToolId );
696 _wrapper->createTool( _wrapper->separator(), aToolId );
697 _wrapper->createTool( _undoAct, aToolId );
698 _wrapper->createTool( _redoAct, aToolId );
699 _wrapper->createTool( _wrapper->separator(), aToolId );
700 _wrapper->createTool( _startResumeAct, aToolId );
701 _wrapper->createTool( _abortAct, aToolId );
702 _wrapper->createTool( _pauseAct, aToolId );
703 _wrapper->createTool( _resetAct, aToolId );
704 _wrapper->createTool( _wrapper->separator(), aToolId );
705 _wrapper->createTool( _saveRunStateAct, aToolId );
706 //_wrapper->createTool( _newEditionAct, aToolId );
707 _wrapper->createTool( _withoutStopModeAct, aToolId );
708 _wrapper->createTool( _breakpointsModeAct, aToolId );
709 _wrapper->createTool( _stepByStepModeAct, aToolId );
710 _wrapper->createTool( _wrapper->separator(), aToolId );
711 _wrapper->createTool( _toggleStopOnErrorAct, aToolId );
712 _wrapper->createTool( _wrapper->separator(), aToolId );
713 _wrapper->createTool( _importCatalogAct, aToolId );
714 _wrapper->createTool( _wrapper->separator(), aToolId );
715 _wrapper->createTool( _toggleStraightLinksAct, aToolId );
716 _wrapper->createTool( _toggleAutomaticComputeLinkAct, aToolId );
717 _wrapper->createTool( _toggleSimplifyLinkAct, aToolId );
718 //_wrapper->createTool( _toggleForce2NodesLinkAct, aToolId );
719 _wrapper->createTool( _toggleAddRowColsAct, aToolId );
720 _wrapper->createTool( _wrapper->separator(), aToolId );
721 _wrapper->createTool( _showAllLinksAct, aToolId );
722 _wrapper->createTool( _hideAllLinksAct, aToolId );
723 _wrapper->createTool( _wrapper->separator(), aToolId );
724 _wrapper->createTool( _whatsThisAct, aToolId );
727 void GenericGui::initialMenus()
729 showEditionMenus(false);
730 showExecMenus(false);
731 showCommonMenus(false);
735 void GenericGui::hideAllMenus()
737 showBaseMenus (false);
738 showCommonMenus (false);
739 showEditionMenus(false);
740 showExecMenus (false);
743 void GenericGui::showBaseMenus(bool show)
745 DEBTRACE("GenericGui::showBaseMenus " << show);
746 _wrapper->setMenuShown(_newSchemaAct, show);
747 _wrapper->setToolShown(_newSchemaAct, show);
748 _wrapper->setMenuShown(_importSchemaAct, show);
749 _wrapper->setToolShown(_importSchemaAct, show);
750 _wrapper->setMenuShown(_importSupervSchemaAct, show);
751 _wrapper->setMenuShown(_loadAndRunSchemaAct, show);
752 _wrapper->setToolShown(_loadAndRunSchemaAct, show);
753 _wrapper->setMenuShown(_chooseBatchJobAct, show);
754 _wrapper->setToolShown(_chooseBatchJobAct, show);
755 _wrapper->setMenuShown(_whatsThisAct, show);
756 _wrapper->setToolShown(_whatsThisAct, show);
759 void GenericGui::showEditionMenus(bool show)
761 DEBTRACE("GenericGui::showEditionMenus " << show);
762 _wrapper->setMenuShown(_exportSchemaAct, show);
763 _wrapper->setToolShown(_exportSchemaAct, show);
764 _wrapper->setMenuShown(_exportSchemaAsAct, show);
765 _wrapper->setToolShown(_exportSchemaAsAct, show);
766 _wrapper->setMenuShown(_runLoadedSchemaAct, show);
767 _wrapper->setToolShown(_loadRunStateSchemaAct, show);
768 _wrapper->setMenuShown(_loadRunStateSchemaAct, show);
769 _wrapper->setToolShown(_runLoadedSchemaAct, show);
770 _wrapper->setMenuShown(_undoAct, show);
771 _wrapper->setToolShown(_undoAct, show);
772 _wrapper->setMenuShown(_redoAct, show);
773 _wrapper->setToolShown(_redoAct, show);
774 _wrapper->setMenuShown(_showUndoAct, show);
775 _wrapper->setMenuShown(_showRedoAct, show);
776 _wrapper->setMenuShown(_importCatalogAct, show);
777 _wrapper->setToolShown(_importCatalogAct, show);
780 void GenericGui::showExecMenus(bool show)
782 DEBTRACE("GenericGui::showExecMenus " << show);
783 _wrapper->setMenuShown(_startResumeAct, show);
784 _wrapper->setToolShown(_startResumeAct, show);
785 _wrapper->setMenuShown(_abortAct, show);
786 _wrapper->setToolShown(_abortAct, show);
787 _wrapper->setMenuShown(_pauseAct, show);
788 _wrapper->setToolShown(_pauseAct, show);
789 _wrapper->setMenuShown(_resetAct, show);
790 _wrapper->setToolShown(_resetAct, show);
791 _wrapper->setMenuShown(_saveRunStateAct, show);
792 _wrapper->setToolShown(_saveRunStateAct, show);
793 //_wrapper->setMenuShown(_newEditionAct, show);
794 //_wrapper->setToolShown(_newEditionAct, show);
795 _wrapper->setMenuShown(_withoutStopModeAct, show);
796 _wrapper->setToolShown(_withoutStopModeAct, show);
797 _wrapper->setMenuShown(_breakpointsModeAct, show);
798 _wrapper->setToolShown(_breakpointsModeAct, show);
799 _wrapper->setMenuShown(_stepByStepModeAct, show);
800 _wrapper->setToolShown(_stepByStepModeAct, show);
801 _wrapper->setMenuShown(_toggleStopOnErrorAct, show);
802 _wrapper->setToolShown(_toggleStopOnErrorAct, show);
805 void GenericGui::showCommonMenus(bool show)
807 DEBTRACE("GenericGui::showCommonMenus " << show);
808 _wrapper->setMenuShown(_toggleStraightLinksAct, show);
809 _wrapper->setToolShown(_toggleStraightLinksAct, show);
810 _wrapper->setMenuShown(_toggleAutomaticComputeLinkAct, show);
811 _wrapper->setToolShown(_toggleAutomaticComputeLinkAct, show);
812 _wrapper->setMenuShown(_toggleSimplifyLinkAct, show);
813 _wrapper->setToolShown(_toggleSimplifyLinkAct, show);
814 _wrapper->setMenuShown(_toggleForce2NodesLinkAct, show);
815 //_wrapper->setToolShown(_toggleForce2NodesLinkAct, show);
816 _wrapper->setMenuShown(_toggleAddRowColsAct, show);
817 _wrapper->setToolShown(_toggleAddRowColsAct, show);
818 _wrapper->setMenuShown(_showAllLinksAct, show);
819 _wrapper->setToolShown(_showAllLinksAct, show);
820 _wrapper->setMenuShown(_hideAllLinksAct, show);
821 _wrapper->setToolShown(_hideAllLinksAct, show);
824 void GenericGui::switchContext(QWidget *view, bool onExit)
826 DEBTRACE("GenericGui::switchContext " << view);
827 if (! _mapViewContext.count(view))
829 onExit ? hideAllMenus() : initialMenus();
830 _dwTree->setWidget(0);
831 _dwStacked->setWidget(0);
834 QtGuiContext* newContext = _mapViewContext[view];
836 _dwTree->setWidget(newContext->getEditTree());
837 _dwTree->widget()->show();
839 _dwStacked->setWidget(newContext->getStackedWidget());
841 QtGuiContext::setQtCurrent(newContext);
843 if (newContext->isEdition())
845 showExecMenus(false);
847 showEditionMenus(true);
848 showCommonMenus(true);
849 if (_dwTree) _dwTree->setWindowTitle("Tree View: edition mode");
853 showEditionMenus(false);
856 showCommonMenus(true);
857 _withoutStopModeAct->setChecked(true);
858 if (_dwTree) _dwTree->setWindowTitle("Tree View: execution mode");
860 _dwStacked->setMinimumWidth(10);
863 bool GenericGui::closeContext(QWidget *view, bool onExit)
865 DEBTRACE("GenericGui::closeContext " << onExit);
866 if (! _mapViewContext.count(view))
868 QtGuiContext* context = _mapViewContext[view];
871 bool tryToSave = false;
873 if (QtGuiContext::getQtCurrent()->isEdition())
875 if (!QtGuiContext::getQtCurrent()->_setOfModifiedSubjects.empty())
878 msgBox.setText("Some elements are modified and not taken into account.");
879 string info = "do you want to apply your changes ?\n";
880 info += " - Save : do not take into account edition in progress,\n";
881 info += " but if there are other modifications, select a file name for save\n";
882 info += " - Discard : discard all modifications and close the schema";
884 info += "\n - Cancel : do not close the schema, return to edition";
885 msgBox.setInformativeText(info.c_str());
888 msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
889 msgBox.setDefaultButton(QMessageBox::Cancel);
893 msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard);
894 msgBox.setDefaultButton(QMessageBox::Save);
896 int ret = msgBox.exec();
899 case QMessageBox::Save:
902 case QMessageBox::Discard:
905 case QMessageBox::Cancel:
907 DEBTRACE("Cancel or default");
913 if (QtGuiContext::getQtCurrent()->isNotSaved())
916 msgBox.setWindowTitle("Close the active schema");
917 msgBox.setText("The schema has been modified");
918 string info = "do you want to save the schema ?\n";
919 info += " - Save : select a file name for save\n";
920 info += " - Discard : discard all modifications and close the schema";
922 info += "\n - Cancel : do not close the schema, return to edition";
923 msgBox.setInformativeText(info.c_str());
926 msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
927 msgBox.setDefaultButton(QMessageBox::Cancel);
931 msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard);
932 msgBox.setDefaultButton(QMessageBox::Save);
934 int ret = msgBox.exec();
937 case QMessageBox::Save:
940 case QMessageBox::Discard:
943 case QMessageBox::Cancel:
944 DEBTRACE("Cancel or default");
954 if ((!onExit) && (!_isSaved)) // --- probably, user has cancelled the save dialog. Do not close
959 map<QWidget*, YACS::HMI::QtGuiContext*>::iterator it = _mapViewContext.begin();
960 QtGuiContext* newContext = 0;
961 QWidget* newView = 0;
962 for (; it != _mapViewContext.end(); ++it)
964 if ((*it).second != context)
966 newView = (*it).first;
967 newContext = (*it).second;
971 int studyId = _wrapper->activeStudyId();
972 if (context->getStudyId() == studyId)
974 _wrapper->deleteSchema(view);
975 DEBTRACE("delete context");
976 if (GuiExecutor* exec = context->getGuiExecutor())
978 exec->closeContext();
981 _mapViewContext.erase(view);
982 switchContext(newView, onExit);
987 void GenericGui::showDockWidgets(bool isVisible)
989 DEBTRACE("GenericGui::showDockWidgets " << isVisible);
990 if (_dwTree) _dwTree->setVisible(isVisible);
991 if (_dwTree) _dwTree->toggleViewAction()->setVisible(isVisible);
992 if (_dwStacked) _dwStacked->setVisible(isVisible);
993 if (_dwStacked) _dwStacked->toggleViewAction()->setVisible(isVisible);
994 if (_dwCatalogs) _dwCatalogs->setVisible(isVisible);
995 if (_dwCatalogs) _dwCatalogs->toggleViewAction()->setVisible(isVisible);
998 void GenericGui::raiseStacked()
1000 if (_dwStacked) _dwStacked->raise();
1003 std::list<std::string> GenericGui::getMachineList()
1005 if (!_machineList.empty()) return _machineList;
1007 YACS::ENGINE::RuntimeSALOME* runTime = YACS::ENGINE::getSALOMERuntime();
1008 CORBA::ORB_ptr orb = runTime->getOrb();
1009 if (!orb) return _machineList;
1011 SALOME_NamingService namingService(orb);
1012 SALOME_LifeCycleCORBA lcc(&namingService);
1014 CORBA::Object_var obj =
1015 namingService.Resolve(SALOME_ResourcesManager::_ResourcesManagerNameInNS);
1016 if (CORBA::is_nil(obj)) return _machineList;
1018 Engines::ResourcesManager_var resManager = Engines::ResourcesManager::_narrow(obj);
1019 if(!resManager) return _machineList;
1021 Engines::ResourceParameters params;
1024 Engines::ResourceList* resourceList =
1025 resManager->GetFittingResources(params);
1027 for (int i = 0; i < resourceList->length(); i++)
1029 const char* aResource = (*resourceList)[i];
1030 _machineList.push_back(aResource);
1033 return _machineList;
1036 // -----------------------------------------------------------------------------
1038 /*! a QtGuiContext instance is created for each schema in edition or each execution or run
1039 * of a schema. The context stores references of a lot of objects related to the edition
1041 * \param proc the schema to run or edit, loaded from file or just created empty.
1042 * \param schemaName filename of the schema in edition, also used in execution to publish
1043 * a run under the edition name in Salome object browser.
1044 * \param runName filename of the schema in execution, not used in edition.
1045 * \param forEdition if true, edition mode, if false, execution mode.
1047 void GenericGui::createContext(YACS::ENGINE::Proc* proc,
1048 const QString& schemaName,
1049 const QString& runName,
1052 DEBTRACE("GenericGui::createContext");
1058 QWidget* central = _parent->centralWidget();
1060 central->setFocus();
1062 DEBTRACE("No Central Widget");
1065 QWidget* refWindow = 0; // --- used only on run to refer to the schema in edition
1068 fileName = schemaName;
1073 if (QtGuiContext::getQtCurrent())
1074 refWindow = QtGuiContext::getQtCurrent()->getWindow();
1077 QtGuiContext* context = new QtGuiContext(this);
1078 QtGuiContext::setQtCurrent(context);
1082 context->setEdition(forEdition);
1083 context->setSessionCatalog(_sessionCatalog);
1084 context->setFileName(fileName);
1085 context->setCurrentCatalog(_builtinCatalog);
1087 // --- scene, viewWindow & GraphicsView
1089 Scene *scene = new Scene();
1090 QWidget *viewWindow = _wrapper->getNewWindow(scene);
1091 _mapViewContext[viewWindow] = context;
1092 GraphicsView* gView = new GraphicsView(viewWindow);
1093 gView->setScene(scene);
1094 gView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
1095 int studyId = _wrapper->AssociateViewToWindow(gView, viewWindow);
1096 context->setStudyId(studyId);
1097 std::ostringstream value;
1099 proc->setProperty("DefaultStudyID",value.str());
1100 context->setScene(scene);
1101 context->setView(gView);
1102 context->setWindow(viewWindow);
1107 SchemaModel *schemaModel = new SchemaModel(context, viewWindow);
1108 schemaModel->setEdition(forEdition);
1109 context->setSchemaModel(schemaModel);
1110 RootSceneItem *rootSceneItem = new RootSceneItem(context);
1112 // --- tree associated to model
1114 FormEditTree *editTree = new FormEditTree(_dwTree);
1115 editTree->setMinimumHeight(400);
1116 _dwTree->setWidget(editTree);
1118 context->setEditTree(editTree);
1119 editTree->tv_schema->setModel(schemaModel);
1120 context->setSelectionModel(editTree->tv_schema->selectionModel());
1123 QObject::connect(editTree->tv_schema->selectionModel(),
1124 SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
1126 SLOT(updateSelection(const QItemSelection &, const QItemSelection &)));
1128 // --- stacked widget
1130 QStackedWidget *stacked = new QStackedWidget(_dwStacked);
1131 _dwStacked->setWidget(stacked);
1132 context->setStackedWidget(stacked);
1133 YACS::HMI::ItemEditionRoot* rootEdit = new YACS::HMI::ItemEditionRoot(context,
1135 context->getName().c_str());
1136 context->setEditionRoot(rootEdit);
1138 QObject::connect(schemaModel,
1139 SIGNAL(signalSelection(const QModelIndex &)),
1140 editTree->tv_schema,
1141 SLOT(viewSelection(const QModelIndex &)));
1145 proc->setEdition(forEdition);
1149 double passe = (end_t -start_t);
1150 passe = passe/CLOCKS_PER_SEC;
1151 DEBTRACE("create context -1- : " << passe);
1155 context->setLoading(true);
1157 context->setProc(proc);
1158 setLoadedPresentation(proc);
1162 double passe = (end_t -start_t);
1163 passe = passe/CLOCKS_PER_SEC;
1164 DEBTRACE("create context - load proc- : " << passe);
1168 context->setLoading(false);
1170 if (forEdition && _wrapper) // --- Edition mode
1172 _wrapper->createNewSchema(fileName, viewWindow);
1174 else if (_wrapper) // --- Execution Mode
1176 GuiExecutor *guiExec = new GuiExecutor(proc);
1177 context->setGuiExecutor(guiExec);
1178 _wrapper->createNewRun(schemaName, fileName, refWindow, viewWindow);
1182 QtGuiContext::getQtCurrent()->getSubjectProc()->update(UPDATE,
1183 ProcInvoc::getTypeOfNode(proc),
1184 0); // --- force validity check
1186 // --- adjust widgets
1188 TreeView *vtree = dynamic_cast<TreeView*>(editTree->tv_schema);
1190 vtree->resizeColumns();
1191 _catalogsWidget->setMinimumWidth(10); // --- reset the constraint on width
1192 editTree->setMinimumHeight(40);
1193 _dwStacked->setMinimumWidth(10);
1198 showExecMenus(false);
1199 showEditionMenus(true);
1200 showCommonMenus(true);
1201 if (_dwTree) _dwTree->setWindowTitle("Tree View: edition mode");
1205 showEditionMenus(false);
1206 showExecMenus(true);
1207 showCommonMenus(true);
1208 _withoutStopModeAct->setChecked(true);
1209 if (_dwTree) _dwTree->setWindowTitle("Tree View: execution mode");
1212 QtGuiContext::getQtCurrent()->setNotSaved(false);
1215 double passe = (end_t -start_t);
1216 passe = passe/CLOCKS_PER_SEC;
1217 DEBTRACE("create context - end - : " << passe);
1222 // -----------------------------------------------------------------------------
1224 void GenericGui::setLoadedPresentation(YACS::ENGINE::Proc* proc)
1226 DEBTRACE("GenericGui::setLoadedPresentation");
1227 QtGuiContext::getQtCurrent()->setLoadingPresentation(true);
1228 map<SceneNodeItem*, QPointF> nodesToMove;
1229 map<YACS::ENGINE::Node*, PrsData> presNodes = _loader->getPrsData(proc);
1230 if (!presNodes.empty())
1232 map<YACS::ENGINE::Node*, PrsData>::iterator it = presNodes.begin();
1233 for (; it!= presNodes.end(); ++it)
1235 YACS::ENGINE::Node* node = (*it).first;
1236 PrsData pres = (*it).second;
1237 SubjectNode *snode = QtGuiContext::getQtCurrent()->_mapOfSubjectNode[node];
1238 SceneItem *item = QtGuiContext::getQtCurrent()->_mapOfSceneItem[snode];
1240 SceneNodeItem *inode = dynamic_cast<SceneNodeItem*>(item);
1242 inode->setPos(QPointF(pres._x, pres._y));
1243 inode->setWidth(pres._width);
1244 inode->setHeight(pres._height);
1245 inode->setExpanded(pres._expanded);
1246 QPointF anExpandedPos = QPointF(pres._expx, pres._expy);
1247 if (anExpandedPos.isNull())
1248 anExpandedPos = inode->pos();
1249 inode->setExpandedPos(anExpandedPos);
1250 inode->setExpandedWH(pres._expWidth, pres._expHeight);
1251 inode->setShownState(shownState(pres._shownState));
1253 // collect nodes to correct it's Y-position if this collides with parent's header
1254 if (inode->getParent() ) {
1255 qreal anX = inode->x();
1256 qreal anY = inode->y();
1257 if (inode->getShownState() == shrinkHidden) {
1258 anX = inode->getExpandedX();
1259 anY = inode->getExpandedY();
1261 if (anY < inode->getParent()->getHeaderBottom())
1262 nodesToMove[inode] = QPointF(anX, inode->getParent()->getHeaderBottom()+1);
1266 QtGuiContext::getQtCurrent()->setLoadingPresentation(false);
1268 //after loading of presentation:
1270 //move nodes because of progress bar, if any was added
1271 map<SceneNodeItem*, QPointF>::iterator it = nodesToMove.begin();
1272 for (; it!= nodesToMove.end(); ++it)
1274 (*it).first->setTopLeft((*it).second);
1278 if (Scene::_autoComputeLinks)
1279 _guiEditor->rebuildLinks();
1282 YACS::HMI::SubjectProc* subproc = QtGuiContext::getQtCurrent()->getSubjectProc();
1283 SceneItem *item = QtGuiContext::getQtCurrent()->_mapOfSceneItem[subproc];
1284 SceneComposedNodeItem *proc = dynamic_cast<SceneComposedNodeItem*>(item);
1285 proc->updateLinks();
1289 // -----------------------------------------------------------------------------
1291 void GenericGui::onNewSchema()
1293 DEBTRACE("GenericGui::onNewSchema");
1295 std::stringstream name;
1296 name << "newSchema_" << ++_schemaCnt;
1298 YACS::ENGINE::RuntimeSALOME* runTime = YACS::ENGINE::getSALOMERuntime();
1299 YACS::ENGINE::Proc *proc = runTime->createProc(name.str());
1303 QString fileName = name.str().c_str();
1304 createContext(proc, fileName, "", true);
1307 void GenericGui::loadSchema(const std::string& filename,bool edit, bool arrangeLocalNodes)
1309 YACS::ENGINE::Proc *proc = _loader->load(filename.c_str());
1312 YACS::ENGINE::Logger* logger= proc->getLogger("parser");
1313 if(!logger->isEmpty())
1315 DEBTRACE(logger->getStr());
1317 QString fn=QString::fromUtf8(filename.c_str());
1319 createContext(proc, fn, "", true);
1321 createContext(proc, fn, fn, false);
1322 if (arrangeLocalNodes)
1324 _guiEditor->arrangeProc();
1328 void GenericGui::onImportSchema()
1333 DEBTRACE("GenericGui::onImportSchema");
1334 QFileDialog dialog(_parent,
1335 "Choose a filename to load" ,
1337 tr( "XML-Files (*.xml);;All Files (*)" ));
1339 dialog.setHistory(_wrapper->getQuickDirList());
1342 QStringList fileNames;
1345 fileNames = dialog.selectedFiles();
1346 if (!fileNames.isEmpty())
1347 fn = fileNames.first();
1350 if ( !fn.isEmpty() )
1352 // add ".xml" suffix
1354 if (!fi.exists() && fi.suffix() != "xml")
1357 DEBTRACE("file loaded : " <<fn.toUtf8().constData());
1358 YACS::ENGINE::Proc *proc = 0;
1361 proc = _loader->load(fn.toUtf8().constData());
1368 double passe = (end_t -start_t);
1369 passe = passe/CLOCKS_PER_SEC;
1370 DEBTRACE("load xml file : " << passe);
1376 QMessageBox msgBox(QMessageBox::Critical,
1377 "Import YACS Schema, native YACS XML format",
1378 "The file has not the native YACS XML format or is not readable.");
1382 YACS::ENGINE::Logger* logger= proc->getLogger("parser");
1383 if(!logger->isEmpty())
1385 DEBTRACE(logger->getStr());
1387 createContext(proc, fn, "", true);
1391 void GenericGui::onImportSupervSchema()
1393 DEBTRACE("GenericGui::onImportSupervSchema");
1394 QFileDialog dialog(_parent,
1395 "Choose a SUPERV filename to load" ,
1397 tr( "XML-Files (*.xml);;All Files (*)" ));
1399 dialog.setHistory(_wrapper->getQuickDirList());
1402 QStringList fileNames;
1405 fileNames = dialog.selectedFiles();
1406 if (!fileNames.isEmpty())
1407 fn = fileNames.first();
1410 if (fn.isEmpty()) return;
1412 // add ".xml" suffix
1414 if (!fi.exists() && fi.suffix() != "xml")
1417 DEBTRACE("file loaded : " <<fn.toStdString());
1418 QString tmpFileName;
1422 QString tmpDir = getenv("TEMP");
1423 QString fileExt = "bat";
1425 QString tmpDir = "/tmp";
1426 QString fileExt = "sh";
1428 QDir aTmpDir(tmpDir);
1429 aTmpDir.mkdir(QString("YACS_") + getenv("USER"));
1430 YASSERT(aTmpDir.cd(QString("YACS_") + getenv("USER")));
1431 QDateTime curTime = QDateTime::currentDateTime();
1432 tmpFileName = "SUPERV_import_" + curTime.toString("yyyyMMdd_hhmmss") + ".xml";
1433 QString tmpOutput = "salomeloader_output";
1434 tmpFileName = aTmpDir.absoluteFilePath(tmpFileName);
1435 DEBTRACE(tmpFileName.toStdString());
1437 QString aCall = "salomeloader."+ fileExt+ " "+ fn + " " + tmpFileName + " > " + tmpOutput;
1438 DEBTRACE(aCall.toStdString());
1440 int ret = system(aCall.toAscii());
1443 // --- read file with logs
1444 fstream f(tmpOutput.toAscii());
1449 // --- Problem in execution
1450 int status=WEXITSTATUS(ret);
1453 QString mes = "Problems in conversion: some errors but an incomplete proc has nevertheless been created.\n\n";
1454 mes += QString(hfile.str().c_str());
1455 QMessageBox msgBox(QMessageBox::Warning,
1456 "Import YACS Schema, SUPERV XML format",
1460 else if(status == 2)
1462 QString mes = "Problems in conversion: a fatal error has been encountered. The proc can't be created.\n\n";
1463 mes += QString(hfile.str().c_str());
1464 QMessageBox msgBox(QMessageBox::Critical,
1465 "Import YACS Schema, SUPERV XML format",
1472 DEBTRACE("Unknown problem: " << ret );
1473 QMessageBox msgBox(QMessageBox::Critical,
1474 "Import YACS Schema, SUPERV XML format",
1475 "Unexpected exception in salomeloader.");
1483 QMessageBox msgBox(QMessageBox::Critical,
1484 "Import YACS Schema, SUPERV XML format",
1485 "Unexpected exception in convertSupervFile");
1491 if (fn.isEmpty()) return; // must not happen
1493 DEBTRACE("file loaded : " <<fn.toStdString());
1494 YACS::ENGINE::Proc *proc = _loader->load(fn.toLatin1());
1497 QMessageBox msgBox(QMessageBox::Critical,
1498 "Import YACS Schema, SUPERV file converted in native YACS XML format",
1499 "The file has not the native YACS XML format or is not readable.");
1503 YACS::ENGINE::Logger* logger= proc->getLogger("parser");
1504 if(!logger->isEmpty())
1506 DEBTRACE(logger->getStr());
1508 createContext(proc, fn, "", true);
1511 //! bug confirmOverwrite : correction Qt 4.3.5
1512 QString GenericGui::getSaveFileName(const QString& fileName)
1514 QFileDialog dialog(_parent, "Save schema", fileName);
1515 QStringList filters;
1516 filters << "XML files (*.xml)"
1518 dialog.setFileMode(QFileDialog::AnyFile);
1519 dialog.setFilters(filters);
1520 dialog.selectFilter("(*.xml)");
1521 dialog.setDefaultSuffix("xml");
1522 dialog.setConfirmOverwrite(true);
1523 //dialog.setConfirmOverwrite(false); // bug Qt4.3.3
1524 dialog.setAcceptMode(QFileDialog::AcceptSave);
1525 QString selectedFile;
1526 QStringList fileNames;
1528 if (bool ret = dialog.exec())
1530 DEBTRACE(ret << " " << dialog.confirmOverwrite());
1531 fileNames = dialog.selectedFiles();
1532 if (!fileNames.isEmpty())
1533 selectedFile = fileNames.first();
1535 QString filteredName = _guiEditor->asciiFilter(selectedFile);
1536 DEBTRACE(filteredName.toStdString());
1537 return filteredName;
1540 void GenericGui::onExportSchema()
1542 DEBTRACE("GenericGui::onExportSchema");
1543 if (!QtGuiContext::getQtCurrent()) return;
1544 YACS::ENGINE::Proc* proc = QtGuiContext::getQtCurrent()->getProc();
1545 QString fo = QtGuiContext::getQtCurrent()->getFileName();
1548 if (fo.startsWith("newSchema_"))
1551 fn = getSaveFileName(fo);
1553 if (fn.isEmpty()) return;
1555 DEBTRACE("GenericGui::onExportSchema: " << fn.toUtf8().constData());
1556 //to be sure that all pending changes are effective
1557 _parent->setFocus();
1558 QtGuiContext::getQtCurrent()->setFileName(fn);
1559 VisitorSaveGuiSchema aWriter(proc);
1560 aWriter.openFileSchema( fn.toUtf8().constData() );
1561 aWriter.visitProc();
1562 aWriter.closeFileSchema();
1563 QtGuiContext::getQtCurrent()->setNotSaved(false);
1565 if (fn.compare(foo) && _wrapper)
1566 _wrapper->renameSchema(foo, fn, QtGuiContext::getQtCurrent()->getWindow());
1569 void GenericGui::onExportSchemaAs()
1571 DEBTRACE("GenericGui::onExportSchemaAs");
1573 if (!QtGuiContext::getQtCurrent()) return;
1574 YACS::ENGINE::Proc* proc = QtGuiContext::getQtCurrent()->getProc();
1575 QString fo = QtGuiContext::getQtCurrent()->getFileName();
1577 if (fo.startsWith("newSchema_")) fo.clear();
1578 QString fn = getSaveFileName(fo);
1579 if (fn.isEmpty()) return;
1581 DEBTRACE("GenericGui::onExportSchemaAs: " << fn.toUtf8().constData());
1582 QtGuiContext::getQtCurrent()->setFileName(fn);
1583 VisitorSaveGuiSchema aWriter(proc);
1584 aWriter.openFileSchema(fn.toUtf8().constData());
1585 aWriter.visitProc();
1586 aWriter.closeFileSchema();
1588 QtGuiContext::getQtCurrent()->setNotSaved(false);
1590 if (fn.compare(foo) && _wrapper)
1591 _wrapper->renameSchema(foo, fn, QtGuiContext::getQtCurrent()->getWindow());
1594 void GenericGui::onImportCatalog()
1596 DEBTRACE("GenericGui::onImportCatalog");
1597 QFileDialog dialog(_parent,
1598 "Choose a YACS Schema to load as a Catalog" ,
1600 tr( "XML-Files (*.xml);;All Files (*)" ));
1602 dialog.setHistory(_wrapper->getQuickDirList());
1605 QStringList fileNames;
1608 fileNames = dialog.selectedFiles();
1609 if (!fileNames.isEmpty())
1610 fn = fileNames.first();
1613 if ( !fn.isEmpty() )
1614 _catalogsWidget->addCatalogFromFile(fn.toStdString());
1617 void GenericGui::onRunLoadedSchema(bool withState)
1619 DEBTRACE("GenericGui::onRunLoadedSchema");
1620 if (!QtGuiContext::getQtCurrent()) return;
1626 // --- check proc state (cf. editionProc)
1628 if (!QtGuiContext::getQtCurrent()->_setOfModifiedSubjects.empty())
1630 set<Subject*>::iterator it = QtGuiContext::getQtCurrent()->_setOfModifiedSubjects.begin();
1631 (*it)->select(true);
1635 YACS::ENGINE::Proc* proc = QtGuiContext::getQtCurrent()->getProc();
1636 if (!proc->isValid())
1638 QtGuiContext::getQtCurrent()->getSubjectProc()->select(true);
1642 YACS::ENGINE::LinkInfo info(YACS::ENGINE::LinkInfo::ALL_STOP_ASAP);
1645 proc->checkConsistency(info);
1647 catch (Exception &ex)
1649 DEBTRACE(ex.what());
1650 QtGuiContext::getQtCurrent()->getSubjectProc()->select(true);
1653 if (info.areWarningsOrErrors()) return;
1657 double passe = (end_t -start_t);
1658 passe = passe/CLOCKS_PER_SEC;
1659 cerr <<"run schema -1- : " << passe << endl;
1662 // --- save proc under a run name
1664 QFileInfo fo = QtGuiContext::getQtCurrent()->getFileName();
1665 QString procName = fo.baseName();
1666 //QString tmpDir = SALOMEDS_Tool::GetTmpDir().c_str();
1668 QString tmpDir = getenv("TEMP");
1670 QString tmpDir = "/tmp";
1672 QDir aTmpDir(tmpDir);
1673 aTmpDir.mkdir(QString("YACS_") + getenv("USER"));
1674 YASSERT(aTmpDir.cd(QString("YACS_") + getenv("USER")));
1675 QDateTime curTime = QDateTime::currentDateTime();
1676 QString aRunName = procName + "_" + curTime.toString("yyyyMMdd_hhmmss") + ".xml";
1677 aRunName = aTmpDir.absoluteFilePath(aRunName);
1678 DEBTRACE(aRunName.toStdString());
1680 VisitorSaveGuiSchema aWriter(proc);
1681 aWriter.openFileSchema(aRunName.toStdString());
1682 aWriter.visitProc();
1683 aWriter.closeFileSchema();
1685 // --- create a run context
1687 YACS::ENGINE::Proc *procrun = _loader->load(aRunName.toLatin1());
1690 double passe = (end_t -start_t);
1691 passe = passe/CLOCKS_PER_SEC;
1692 cerr <<"run schema -2- : " << passe << endl;
1695 createContext(procrun, QtGuiContext::getQtCurrent()->getFileName(), aRunName, false);
1697 // load state if required
1699 GuiExecutor *executor = QtGuiContext::getQtCurrent()->getGuiExecutor();
1700 if (!executor) return;
1703 QString fn = QFileDialog::getOpenFileName( _parent,
1704 "Choose a previous run state to load" ,
1706 tr( "XML-Files (*.xml);;All Files (*)" ));
1709 DEBTRACE("run state to load: " <<fn.toStdString());
1710 executor->setLoadStateFile(fn.toStdString());
1713 executor->startResumeDataflow(true); // --- initialise gui state
1714 if(_toggleStopOnErrorAct->isChecked())
1715 executor->setStopOnError(false);
1718 void GenericGui::onLoadRunStateSchema()
1720 DEBTRACE("GenericGui::onLoadRunStateSchema");
1721 onRunLoadedSchema(true);
1724 void GenericGui::onLoadAndRunSchema()
1726 DEBTRACE("GenericGui::onLoadAndRunSchema");
1727 QString fn = QFileDialog::getOpenFileName( _parent,
1728 "Choose a filename to load" ,
1730 tr( "XML-Files (*.xml);;All Files (*)" ));
1731 if ( !fn.isEmpty() )
1733 // add ".xml" suffix
1735 if (!fi.exists() && fi.suffix() != "xml")
1738 DEBTRACE("file loaded : " <<fn.toStdString());
1739 YACS::ENGINE::Proc *proc =0;
1742 proc = _loader->load(fn.toLatin1());
1749 QMessageBox msgBox(QMessageBox::Critical,
1750 "Import YACS Schema, native YACS XML format",
1751 "The file has not the native YACS XML format or is not readable.");
1755 YACS::ENGINE::Logger* logger= proc->getLogger("parser");
1756 if(!logger->isEmpty())
1758 DEBTRACE(logger->getStr());
1760 createContext(proc, fn, "", true);
1761 onRunLoadedSchema();
1765 void GenericGui::onChooseBatchJob() {
1766 DEBTRACE("GenericGui::onChooseBatchJob");
1768 // Show the Batch Jobs list
1769 if(_BJLdialog) delete _BJLdialog;
1770 _BJLdialog = new BatchJobsListDialog(tr("Select one Batch Job to watch"),this);
1772 _BJLdialog->move(300,200);
1773 _BJLdialog->resize(450,200);
1777 void GenericGui::onStartResume()
1779 DEBTRACE("GenericGui::onStartResume");
1780 if (!QtGuiContext::getQtCurrent()) return;
1781 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
1782 QtGuiContext::getQtCurrent()->getGuiExecutor()->startResumeDataflow();
1785 void GenericGui::onAbort()
1787 DEBTRACE("GenericGui::onAbort");
1788 if (!QtGuiContext::getQtCurrent()) return;
1789 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
1790 QtGuiContext::getQtCurrent()->getGuiExecutor()->killDataflow();
1793 void GenericGui::onPause()
1795 DEBTRACE("GenericGui::onPause");
1796 if (!QtGuiContext::getQtCurrent()) return;
1797 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
1798 QtGuiContext::getQtCurrent()->getGuiExecutor()->suspendDataflow();
1801 void GenericGui::onReset()
1803 DEBTRACE("GenericGui::onReset");
1804 if (!QtGuiContext::getQtCurrent()) return;
1805 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
1806 QtGuiContext::getQtCurrent()->getGuiExecutor()->resetDataflow();
1809 void GenericGui::onSaveRunState()
1811 DEBTRACE("GenericGui::onSaveRunState");
1812 if (!QtGuiContext::getQtCurrent()) return;
1813 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
1814 QDateTime curTime = QDateTime::currentDateTime();
1815 QFileInfo procName = QtGuiContext::getQtCurrent()->getFileName();
1816 QString stateName = procName.baseName();
1817 DEBTRACE(stateName.toStdString());
1818 stateName += "_state_" + curTime.toString("yyyyMMdd_hhmmss") + ".xml";
1819 DEBTRACE(stateName.toStdString());
1820 stateName = getSaveFileName(stateName);
1821 DEBTRACE(stateName.toStdString());
1822 if (!stateName.isEmpty())
1823 QtGuiContext::getQtCurrent()->getGuiExecutor()->saveState(stateName.toStdString());
1826 void GenericGui::onNewEdition()
1828 DEBTRACE("GenericGui::onNewEdition");
1829 // if (!QtGuiContext::getQtCurrent()) return;
1830 // if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
1831 // QtGuiContext::getQtCurrent()->getGuiExecutor()->resetDataflow();
1834 void GenericGui::onGetYacsContainerLog()
1836 DEBTRACE("GenericGui::onGetYacsContainerLog");
1837 if (!QtGuiContext::getQtCurrent()) return;
1838 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
1839 string log = QtGuiContext::getQtCurrent()->getGuiExecutor()->getContainerLog();
1840 ContainerLogViewer *lv = new ContainerLogViewer("YACS Container Log", _parent);
1845 void GenericGui::onGetErrorReport()
1847 DEBTRACE("GenericGui::onGetErrorReport");
1848 if (!QtGuiContext::getQtCurrent()) return;
1849 Subject *sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
1850 SubjectNode *snode = dynamic_cast<SubjectNode*>(sub);
1853 if (QtGuiContext::getQtCurrent()->getGuiExecutor())
1855 log = QtGuiContext::getQtCurrent()->getGuiExecutor()->getErrorReport(snode->getNode());
1859 log = snode->getNode()->getErrorReport();
1862 LogViewer *lv = new LogViewer("Node error report", _parent);
1867 void GenericGui::onGetErrorDetails()
1869 DEBTRACE("GenericGui::onGetErrorDetails");
1870 if (!QtGuiContext::getQtCurrent()) return;
1871 Subject *sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
1872 SubjectNode *snode = dynamic_cast<SubjectNode*>(sub);
1875 if (QtGuiContext::getQtCurrent()->getGuiExecutor())
1877 log = QtGuiContext::getQtCurrent()->getGuiExecutor()->getErrorDetails(snode->getNode());
1881 log = snode->getNode()->getErrorDetails();
1884 LogViewer *lv = new LogViewer("Node Error Details", _parent);
1889 void GenericGui::onGetContainerLog()
1891 DEBTRACE("GenericGui::onGetContainerLog");
1892 if (!QtGuiContext::getQtCurrent()) return;
1893 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
1894 Subject *sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
1895 SubjectElementaryNode *snode = dynamic_cast<SubjectElementaryNode*>(sub);
1897 string log = QtGuiContext::getQtCurrent()->getGuiExecutor()->getContainerLog(snode->getNode());
1899 LogViewer *lv = new LogViewer("Node Container Log", _parent);
1903 if (dynamic_cast<YACS::ENGINE::ServiceNode*>(snode->getNode()))
1905 info +="The container log of this node\n";
1906 info += "is not stored in a file and \n";
1907 info += "can't be displayed here, \n";
1908 info += "but you can have a look at \n";
1909 info += "the SALOME standard output,\n";
1910 info += "on your terminal...";
1914 info += "See YACS Container log \n";
1915 info += "(on main proc menu) \n";
1916 info += "for all inline nodes";
1925 void GenericGui::onShutdownProc()
1927 DEBTRACE("GenericGui::onShutdownProc");
1928 if (!QtGuiContext::getQtCurrent()) return;
1929 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
1930 QtGuiContext::getQtCurrent()->getGuiExecutor()->shutdownProc();
1933 void GenericGui::onEditDataTypes()
1935 DEBTRACE("GenericGui::onEditDataTypes");
1938 void GenericGui::onCreateDataType()
1940 DEBTRACE("GenericGui::onCreateDataType");
1943 void GenericGui::onImportDataType()
1945 DEBTRACE("GenericGui::onImportDataType");
1946 if (_dwCatalogs) _dwCatalogs->raise();
1949 void GenericGui::onSelectComponentInstance()
1951 DEBTRACE("GenericGui::onSelectComponentInstance");
1952 Subject *sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
1954 SubjectComponent *ref = dynamic_cast<SubjectComponent*>(sub);
1956 YACS::ENGINE::ComponentInstance* compo=ref->getComponent();
1957 QtGuiContext::getQtCurrent()->_mapOfLastComponentInstance[compo->getCompoName()]=compo;
1960 void GenericGui::onNewContainer()
1962 DEBTRACE("GenericGui::onNewContainer");
1963 _guiEditor->CreateContainer();
1966 void GenericGui::onNewHPContainer()
1968 DEBTRACE("GenericGui::onNewHPContainer");
1969 _guiEditor->CreateHPContainer();
1972 void GenericGui::onNewSalomeComponent()
1974 DEBTRACE("GenericGui::onNewSalomeComponent");
1975 _guiEditor->CreateComponentInstance();
1978 void GenericGui::onNewSalomePythonComponent()
1980 DEBTRACE("GenericGui::onNewSalomePythonComponent");
1983 void GenericGui::onNewCorbaComponent()
1985 DEBTRACE("GenericGui::onNewCorbaComponent");
1989 void GenericGui::onSalomeServiceNode()
1991 DEBTRACE("GenericGui::onSalomeServiceNode");
1992 _guiEditor->CreateNode("SalomeNode");
1995 void GenericGui::onServiceInlineNode()
1997 DEBTRACE("GenericGui::onServiceInlineNode");
1998 _guiEditor->CreateNode("SalomePythonNode");
2001 void GenericGui::onCORBAServiceNode()
2003 DEBTRACE("GenericGui::onCORBAServiceNode");
2004 _guiEditor->CreateNode("CORBANode");
2007 void GenericGui::onNodeNodeServiceNode()
2009 DEBTRACE("GenericGui::onNodeNodeServiceNode");
2012 void GenericGui::onCppNode()
2014 DEBTRACE("GenericGui::onCppNode");
2015 _guiEditor->CreateNode("CppNode");
2018 void GenericGui::onXMLNode()
2020 DEBTRACE("GenericGui::onXMLNode");
2021 _guiEditor->CreateNode("XmlNode");
2024 void GenericGui::onInDataNode()
2026 DEBTRACE("GenericGui::onInDataNode");
2027 _guiEditor->CreateNode("PresetNode");
2030 void GenericGui::onOutDataNode()
2032 DEBTRACE("GenericGui::onOutDataNode");
2033 _guiEditor->CreateNode("OutNode");
2036 void GenericGui::onInStudyNode()
2038 DEBTRACE("GenericGui::onInStudyNode");
2039 _guiEditor->CreateNode("StudyInNode");
2042 void GenericGui::onOutStudyNode()
2044 DEBTRACE("GenericGui::onOutStudyNode");
2045 _guiEditor->CreateNode("StudyOutNode");
2048 void GenericGui::onInlineScriptNode()
2050 DEBTRACE("GenericGui::onInlineScriptNode");
2051 _guiEditor->CreateNode("PyScript");
2054 void GenericGui::onInlineFunctionNode()
2056 DEBTRACE("GenericGui::onInlineFunctionNode");
2057 _guiEditor->CreateNode("PyFunction");
2060 void GenericGui::onBlockNode()
2062 DEBTRACE("GenericGui::onBlockNode");
2063 _guiEditor->CreateBloc();
2066 void GenericGui::onFORNode()
2068 DEBTRACE("GenericGui::onFORNode");
2069 _guiEditor->CreateForLoop();
2072 void GenericGui::onFOREACHNode()
2074 DEBTRACE("GenericGui::onFOREACHNode");
2075 createForEachLoop("double");
2078 void GenericGui::createForEachLoop(std::string type)
2080 DEBTRACE("GenericGui::createForEachLoop");
2081 _guiEditor->CreateForEachLoop(type);
2084 void GenericGui::onWHILENode()
2086 DEBTRACE("GenericGui::onWHILENode");
2087 _guiEditor->CreateWhileLoop();
2090 void GenericGui::onSWITCHNode()
2092 DEBTRACE("GenericGui::onSWITCHNode");
2093 _guiEditor->CreateSwitch();
2096 void GenericGui::onOptimizerLoop()
2098 DEBTRACE("GenericGui::onOptimizerLoop");
2099 _guiEditor->CreateOptimizerLoop();
2102 void GenericGui::onNodeFromCatalog()
2104 DEBTRACE("GenericGui::onNodeFromCatalog");
2105 if (_dwCatalogs) _dwCatalogs->raise();
2108 void GenericGui::onDeleteItem()
2110 DEBTRACE("GenericGui::onDeleteItem");
2111 _guiEditor->DeleteSubject();
2114 void GenericGui::onCutItem()
2116 DEBTRACE("GenericGui::onCutItem");
2117 _guiEditor->CutSubject();
2120 void GenericGui::onCopyItem()
2122 DEBTRACE("GenericGui::onCopyItem");
2123 _guiEditor->CopySubject();
2126 void GenericGui::onPasteItem()
2128 DEBTRACE("GenericGui::onPasteItem");
2129 _guiEditor->PasteSubject();
2132 void GenericGui::onPutInBloc()
2134 _guiEditor->PutSubjectInBloc();
2137 void GenericGui::onPutGraphInBloc()
2139 DEBTRACE("GenericGui::onPutGraphInBloc");
2140 _guiEditor->PutGraphInBloc();
2141 _guiEditor->arrangeNodes(false);
2144 void GenericGui::onPutGraphInForLoop()
2146 DEBTRACE("GenericGui::onPutGraphInForLoop");
2147 _guiEditor->PutGraphInNode("ForLoop");
2150 void GenericGui::putGraphInForeachLoop(std::string type)
2152 DEBTRACE("GenericGui::PutGraphInForeachLoop");
2153 _guiEditor->PutGraphInNode("ForEachLoop_"+type);
2156 void GenericGui::onPutGraphInWhileLoop()
2158 DEBTRACE("GenericGui::onPutGraphInWhileLoop");
2159 _guiEditor->PutGraphInNode("WhileLoop");
2162 void GenericGui::onPutGraphInOptimizerLoop()
2164 DEBTRACE("GenericGui::onPutGraphInOptimizerLoop");
2165 _guiEditor->PutGraphInNode("OptimizerLoop");
2168 void GenericGui::onArrangeLocalNodes()
2170 DEBTRACE("GenericGui::onArrangeLocalNodes");
2171 _guiEditor->arrangeNodes(false);
2174 void GenericGui::onArrangeRecurseNodes()
2176 DEBTRACE("GenericGui::onArrangeRecurseNodes");
2177 _guiEditor->arrangeNodes(true);
2180 void GenericGui::onRebuildLinks()
2182 DEBTRACE("GenericGui::onRebuildLinks");
2183 _guiEditor->rebuildLinks();
2186 void GenericGui::onZoomToBloc()
2188 DEBTRACE("GenericGui::onZoomToBloc");
2189 QtGuiContext::getQtCurrent()->getView()->onZoomToBloc();
2192 void GenericGui::onCenterOnNode()
2194 DEBTRACE("GenericGui::onCenterOnNode");
2195 QtGuiContext::getQtCurrent()->getView()->onCenterOnNode();
2198 void GenericGui::onShrinkExpand() {
2199 DEBTRACE("GenericGui::onShrinkExpand");
2200 _guiEditor->shrinkExpand();
2203 void GenericGui::onShrinkExpandChildren() {
2204 DEBTRACE("GenericGui::onShrinkExpandChildren");
2205 _guiEditor->shrinkExpand(Qt::ControlModifier|Qt::ShiftModifier);
2208 void GenericGui::onShrinkExpandElementaryRecursively() {
2209 DEBTRACE("GenericGui::onShrinkExpandElementaryRecursively");
2210 _guiEditor->shrinkExpand(Qt::ControlModifier);
2213 void GenericGui::onToggleStraightLinks(bool checked)
2215 Scene::_straightLinks = checked;
2216 DEBTRACE("Scene::_straightLinks=" << checked);
2217 if (!QtGuiContext::getQtCurrent())
2219 map<Subject*, SchemaItem*>::const_iterator it = QtGuiContext::getQtCurrent()->_mapOfSchemaItem.begin();
2220 for( ; it != QtGuiContext::getQtCurrent()->_mapOfSchemaItem.end(); ++it)
2222 Subject* sub = (*it).first;
2223 sub->update(SWITCHSHAPE, 0, 0);
2227 void GenericGui::onToggleAutomaticComputeLinks(bool checked)
2229 Scene::_autoComputeLinks = checked;
2230 DEBTRACE("Scene::_autoComputeLinks=" << checked);
2233 void GenericGui::onToggleSimplifyLinks(bool checked)
2235 Scene::_simplifyLinks = checked;
2236 DEBTRACE("Scene::_simplifyLinks=" << checked);
2239 void GenericGui::onToggleForce2NodesLinks(bool checked)
2241 Scene::_force2NodesLink = checked;
2242 DEBTRACE("Scene::_force2NodesLink=" << checked);
2245 void GenericGui::onToggleAddRowCols(bool checked)
2247 Scene::_addRowCols = checked;
2248 DEBTRACE("Scene::_addRowCols=" << checked);
2251 void GenericGui::onSelectReference()
2253 Subject *sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
2255 SubjectReference *ref = dynamic_cast<SubjectReference*>(sub);
2257 SubjectServiceNode *snode = dynamic_cast<SubjectServiceNode*>(ref->getReference());
2258 snode->select(true);
2261 void GenericGui::onWhatsThis()
2263 DEBTRACE("GenericGui::onWhatsThis");
2264 QWhatsThis::enterWhatsThisMode();
2267 void GenericGui::onWithoutStopMode(bool checked)
2269 DEBTRACE("GenericGui::onWithoutStopMode " << checked);
2270 if (!QtGuiContext::getQtCurrent()) return;
2271 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
2272 if (checked) QtGuiContext::getQtCurrent()->getGuiExecutor()->setContinueMode();
2275 void GenericGui::onBreakpointsMode(bool checked)
2277 DEBTRACE("GenericGui::onWithoutStopMode " << checked);
2278 if (!QtGuiContext::getQtCurrent()) return;
2279 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
2280 if (checked) QtGuiContext::getQtCurrent()->getGuiExecutor()->setBreakpointMode();
2283 void GenericGui::onStepByStepMode(bool checked)
2285 DEBTRACE("GenericGui::onWithoutStopMode " << checked);
2286 if (!QtGuiContext::getQtCurrent()) return;
2287 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
2288 if (checked) QtGuiContext::getQtCurrent()->getGuiExecutor()->setStepByStepMode();
2291 void GenericGui::onToggleStopOnError(bool checked)
2293 DEBTRACE("GenericGui::onToggleStopOnError " << checked);
2294 if (!QtGuiContext::getQtCurrent()) return;
2295 if (!QtGuiContext::getQtCurrent()->getGuiExecutor()) return;
2297 QtGuiContext::getQtCurrent()->getGuiExecutor()->setStopOnError(false);
2299 QtGuiContext::getQtCurrent()->getGuiExecutor()->unsetStopOnError();
2302 void GenericGui::onToggleSceneItemVisible(bool checked)
2304 DEBTRACE("GenericGui::onToggleSceneItemVisible " << checked);
2305 if (!QtGuiContext::getQtCurrent()) return;
2306 Subject *sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
2307 SubjectNode *snode = dynamic_cast<SubjectNode*>(sub);
2310 if (!QtGuiContext::getQtCurrent()->_mapOfSceneItem.count(sub)) return;
2312 SceneItem *item = QtGuiContext::getQtCurrent()->_mapOfSceneItem[sub];
2313 item->setVisible(checked);
2316 void GenericGui::displayLinks(bool isShown)
2318 if (!QtGuiContext::getQtCurrent()) return;
2319 map<pair<YACS::ENGINE::OutPort*, YACS::ENGINE::InPort*>,YACS::HMI::SubjectLink*>::const_iterator it;
2320 for (it = QtGuiContext::getQtCurrent()->_mapOfSubjectLink.begin();
2321 it != QtGuiContext::getQtCurrent()->_mapOfSubjectLink.end();
2324 YACS::HMI::SubjectLink* sub = (*it).second;
2326 SceneItem *item = QtGuiContext::getQtCurrent()->_mapOfSceneItem[sub];
2327 item->setVisible(isShown);
2331 void GenericGui::displayControlLinks(bool isShown)
2333 if (!QtGuiContext::getQtCurrent()) return;
2334 map<pair<YACS::ENGINE::Node*, YACS::ENGINE::Node*>,YACS::HMI::SubjectControlLink*>::const_iterator it;
2335 for (it = QtGuiContext::getQtCurrent()->_mapOfSubjectControlLink.begin();
2336 it != QtGuiContext::getQtCurrent()->_mapOfSubjectControlLink.end();
2339 YACS::HMI::SubjectControlLink* sub = (*it).second;
2341 SceneItem *item = QtGuiContext::getQtCurrent()->_mapOfSceneItem[sub];
2342 item->setVisible(isShown);
2346 void GenericGui::displayPortLinks(bool isShown)
2348 Subject *sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
2349 DEBTRACE("displayPortLinks, subject : " << sub->getName());
2350 SubjectDataPort *sport = dynamic_cast<SubjectDataPort*>(sub);
2353 DEBTRACE("dataPort : " << sport->getName());
2354 list<SubjectLink*> linkList = sport->getListOfSubjectLink();
2355 list<SubjectLink*>::const_iterator it = linkList.begin();
2356 for( ; it != linkList.end(); ++it)
2358 YACS::HMI::SubjectLink* sub = (*it);
2360 SceneItem *item = QtGuiContext::getQtCurrent()->_mapOfSceneItem[sub];
2361 item->setVisible(isShown);
2365 SubjectNode *snode = dynamic_cast<SubjectNode*>(sub);
2368 DEBTRACE("Node : " << snode->getName());
2369 list<SubjectControlLink*> linkList = snode->getSubjectControlLinks();
2370 list<SubjectControlLink*>::const_iterator it = linkList.begin();
2371 for( ; it != linkList.end(); ++it)
2373 YACS::HMI::SubjectControlLink* sub = (*it);
2375 SceneItem *item = QtGuiContext::getQtCurrent()->_mapOfSceneItem[sub];
2376 item->setVisible(isShown);
2382 void GenericGui::displayALink(bool isShown)
2384 Subject *sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
2385 if (! QtGuiContext::getQtCurrent()->_mapOfSceneItem.count(sub)) return;
2386 SceneItem *item = QtGuiContext::getQtCurrent()->_mapOfSceneItem[sub];
2387 item->setVisible(isShown);
2390 void GenericGui::onShowAllLinks()
2392 DEBTRACE("GenericGui::onShowAllLinks");
2394 displayControlLinks(true);
2397 void GenericGui::onHideAllLinks()
2399 DEBTRACE("GenericGui::onHideAllLinks");
2400 displayLinks(false);
2401 displayControlLinks(false);
2404 void GenericGui::onShowOnlyPortLinks()
2406 DEBTRACE("GenericGui::onShowOnlyPortLinks");
2408 displayPortLinks(true);
2411 void GenericGui::onShowPortLinks()
2413 DEBTRACE("GenericGui::onShowPortLinks");
2414 displayPortLinks(true);
2417 void GenericGui::onHidePortLinks()
2419 DEBTRACE("GenericGui::onHidePortLinks");
2420 displayPortLinks(false);
2423 void GenericGui::onEmphasisPortLinks()
2425 DEBTRACE("GenericGui::onEmphasisPortLinks");
2426 if (!QtGuiContext::getQtCurrent()) return;
2427 Subject *sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
2428 DEBTRACE("EmphasizePortLinks, subject : " << sub->getName());
2432 SubjectDataPort *sport = dynamic_cast<SubjectDataPort*>(sub);
2435 emphasizePortLink(sport, true);
2439 // --- if a Node, explore all data ports
2441 SubjectNode *snode = dynamic_cast<SubjectNode*>(sub);
2444 DEBTRACE("Node : " << snode->getName());
2446 list<SubjectInputPort*> linkList = snode->getSubjectInputPorts();
2447 list<SubjectInputPort*>::const_iterator it = linkList.begin();
2448 for( ; it != linkList.end(); ++it)
2450 YACS::HMI::SubjectInputPort* sub = (*it);
2452 emphasizePortLink(sub, true);
2456 list<SubjectOutputPort*> linkList = snode->getSubjectOutputPorts();
2457 list<SubjectOutputPort*>::const_iterator it = linkList.begin();
2458 for( ; it != linkList.end(); ++it)
2460 YACS::HMI::SubjectOutputPort* sub = (*it);
2462 emphasizePortLink(sub, true);
2469 void GenericGui::onShowOnlyCtrlLinks()
2471 DEBTRACE("GenericGui::onShowOnlyCtrlLinks");
2473 displayPortLinks(true);
2476 void GenericGui::onShowCtrlLinks()
2478 DEBTRACE("GenericGui::onShowCtrlLinks");
2479 displayPortLinks(true);
2482 void GenericGui::onHideCtrlLinks()
2484 DEBTRACE("GenericGui::onHideCtrlLinks");
2485 displayPortLinks(false);
2488 void GenericGui::onEmphasisCtrlLinks()
2490 DEBTRACE("GenericGui::onEmphasisCtrlLinks");
2491 Subject *sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
2492 DEBTRACE("Emphasize Ctrl Links, subject : " << sub->getName());
2495 SubjectNode *snode = dynamic_cast<SubjectNode*>(sub);
2498 DEBTRACE("Node : " << snode->getName());
2499 list<SubjectControlLink*> linkList = snode->getSubjectControlLinks();
2500 list<SubjectControlLink*>::const_iterator it = linkList.begin();
2501 for( ; it != linkList.end(); ++it)
2503 YACS::HMI::SubjectControlLink* sub = (*it);
2505 sub->update(EMPHASIZE, true, sub);
2506 Subject *sin = sub->getSubjectInNode();
2507 Subject *sout = sub->getSubjectOutNode();
2508 sin->update(EMPHASIZE, true, sub);
2509 sout->update(EMPHASIZE, true, sub);
2515 void GenericGui::onShowOnlyLink()
2517 DEBTRACE("GenericGui::onShowOnlyLink");
2522 void GenericGui::onShowLink()
2524 DEBTRACE("GenericGui::onShowLink");
2528 void GenericGui::onHideLink()
2530 DEBTRACE("GenericGui::onHideLink");
2531 displayALink(false);
2534 void GenericGui::onEmphasisLink()
2536 DEBTRACE("GenericGui::onEmphasisLink");
2537 Subject *sub = QtGuiContext::getQtCurrent()->getSelectedSubject();
2540 sub->update(EMPHASIZE, true, sub);
2543 void GenericGui::onDeEmphasizeAll()
2545 DEBTRACE("GenericGui::onDeEmphasizeAll");
2546 map<Subject*, SchemaItem*>::const_iterator it = QtGuiContext::getQtCurrent()->_mapOfSchemaItem.begin();
2547 for( ; it != QtGuiContext::getQtCurrent()->_mapOfSchemaItem.end(); ++it)
2549 Subject* sub = (*it).first;
2550 sub->update(EMPHASIZE, false, sub);
2554 void GenericGui::onUndo()
2556 DEBTRACE("GenericGui::onUndo");
2557 if (QtGuiContext::getQtCurrent()->_setOfModifiedSubjects.empty())
2559 QtGuiContext::getQtCurrent()->getInvoc()->undo();
2560 // Empty the clipboard in order to avoid the copy of a destroyed object.
2561 QtGuiContext::getQtCurrent()->setSubjectToCopy(NULL);
2563 else Message("undo not possible when there are local modifications not confirmed");
2566 void GenericGui::onRedo()
2568 DEBTRACE("GenericGui::onRedo");
2569 if (QtGuiContext::getQtCurrent()->_setOfModifiedSubjects.empty())
2571 QtGuiContext::getQtCurrent()->getInvoc()->redo();
2572 // Empty the clipboard in order to avoid the copy of a destroyed object.
2573 QtGuiContext::getQtCurrent()->setSubjectToCopy(NULL);
2575 else Message("redo not possible when there are local modifications not confirmed");
2578 void GenericGui::onShowUndo()
2580 _guiEditor->showUndo(_parent);
2583 void GenericGui::onShowRedo()
2585 _guiEditor->showRedo(_parent);
2588 void GenericGui::onCleanOnExit()
2590 DEBTRACE("GenericGui::onCleanOnExit");
2591 int studyId = _wrapper->activeStudyId();
2592 map<QWidget*, YACS::HMI::QtGuiContext*> mapViewContextCopy = _mapViewContext;
2593 map<QWidget*, YACS::HMI::QtGuiContext*>::iterator it = mapViewContextCopy.begin();
2594 for (; it != mapViewContextCopy.end(); ++it)
2596 closeContext((*it).first, true);
2600 void GenericGui::emphasizePortLink(YACS::HMI::SubjectDataPort* sub, bool emphasize)
2602 DEBTRACE("dataPort : " << sub->getName());
2603 list<SubjectLink*> linkList = sub->getListOfSubjectLink();
2604 list<SubjectLink*>::const_iterator it = linkList.begin();
2605 for( ; it != linkList.end(); ++it)
2607 YACS::HMI::SubjectLink* subli = (*it);
2608 if (!subli) continue;
2609 subli->update(EMPHASIZE, emphasize, sub);
2610 Subject *sin = subli->getSubjectInPort();
2611 Subject *sout = subli->getSubjectOutPort();
2612 sin->update(EMPHASIZE, emphasize, sub);
2613 sout->update(EMPHASIZE, emphasize, sub);
2617 void GenericGui::onHelpContextModule( const QString& theComponentName, const QString& theFileName, const QString& theContext)
2619 _wrapper->onHelpContextModule(theComponentName,theFileName,theContext);