X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2Fgenericgui%2FGenericGui.cxx;h=16d08646d96d66c6e6430e8d03481e9cdbd2f323;hb=884c24e399ddcf623cee5d6d7136a06255b6f3f0;hp=4975ee469933aecb6794cec2f06c68492caccdcc;hpb=c81be9b5e74b26e207bd6efd0ccf68418ac536a3;p=modules%2Fyacs.git diff --git a/src/genericgui/GenericGui.cxx b/src/genericgui/GenericGui.cxx index 4975ee469..16d08646d 100644 --- a/src/genericgui/GenericGui.cxx +++ b/src/genericgui/GenericGui.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2006-2012 CEA/DEN, EDF R&D +// Copyright (C) 2006-2014 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 @@ -67,7 +67,7 @@ #include -#ifdef WNT +#ifdef WIN32 #define WEXITSTATUS(w) ((int) ((w) & 0x40000000)) #endif @@ -153,15 +153,18 @@ GenericGui::GenericGui(YACS::HMI::SuitWrapper* wrapper, QMainWindow *parent) _dwTree = new QDockWidget(_parent); _dwTree->setVisible(false); _dwTree->setWindowTitle("Tree View: edition mode"); + _dwTree->setObjectName("yacsTreeViewDock"); _parent->addDockWidget(Qt::LeftDockWidgetArea, _dwTree); _dwStacked = new QDockWidget(_parent); _dwStacked->setVisible(false); _dwStacked->setWindowTitle("Input Panel"); + _dwStacked->setObjectName("yacsInputPanelDock"); _dwStacked->setMinimumWidth(270); // --- force a minimum until display _parent->addDockWidget(Qt::RightDockWidgetArea, _dwStacked); _dwCatalogs = new QDockWidget(_parent); _dwCatalogs->setVisible(false); _dwCatalogs->setWindowTitle("Catalogs"); + _dwCatalogs->setObjectName("yacsCatalogsDock"); _parent->addDockWidget(Qt::RightDockWidgetArea, _dwCatalogs); _catalogsWidget = new CatalogWidget(_dwCatalogs, _builtinCatalog, @@ -237,8 +240,8 @@ void GenericGui::createActions() tr("Load Schema to run"), tr("Load a schema for run"), 0, _parent, false, this, SLOT(onLoadAndRunSchema())); - _chooseBatchJobAct = _wrapper->createAction(getMenuId(), tr("Choose Batch Job for watch"), QIcon("icons:batch.png"), - tr("Choose Batch Job for watch"), tr("Choose Batch Job for watch"), + _chooseBatchJobAct = _wrapper->createAction(getMenuId(), tr("Choose Batch Job to watch"), QIcon("icons:batch.png"), + tr("Choose Batch Job to watch"), tr("Choose Batch Job to watch"), 0, _parent, false, this, SLOT(onChooseBatchJob())); _startResumeAct = _wrapper->createAction(getMenuId(), tr("Start or Resume Schema execution"), QIcon("icons:suspend_resume.png"), @@ -416,6 +419,22 @@ void GenericGui::createActions() tr("Put node in block"), tr("Put node in block"), 0, _parent, false, this, SLOT(onPutInBloc())); + _putGraphInBlocAct = _wrapper->createAction(getMenuId(), tr("Bloc"), QIcon("icons:new_block_node.png"), + tr("Bloc"), tr("Bloc"), + 0, _parent, false, this, SLOT(onPutGraphInBloc())); + + _putGraphInForLoopAct = _wrapper->createAction(getMenuId(), tr("For Loop"), QIcon("icons:new_for_loop_node.png"), + tr("For Loop"), tr("For Loop"), + 0, _parent, false, this, SLOT(onPutGraphInForLoop())); + + _putGraphInWhileLoopAct = _wrapper->createAction(getMenuId(), tr("While Loop"), QIcon("icons:new_while_loop_node.png"), + tr("While Loop"), tr("While Loop"), + 0, _parent, false, this, SLOT(onPutGraphInWhileLoop())); + + _putGraphInOptimizerLoopAct = _wrapper->createAction(getMenuId(), tr("Optimizer Loop"), QIcon("icons:new_for_loop_node.png"), + tr("Optimizer Loop"), tr("Optimizer Loop"), + 0, _parent, false, this, SLOT(onPutGraphInOptimizerLoop())); + _arrangeLocalNodesAct = _wrapper->createAction(getMenuId(), tr("arrange nodes on that bloc level, without recursion"), QIcon("icons:arrange_nodes.png"), tr("arrange local nodes"), tr("arrange nodes on that bloc level, without recursion"), 0, _parent, false, this, SLOT(onArrangeLocalNodes())); @@ -441,6 +460,14 @@ void GenericGui::createActions() tr("shrink/expand"), tr("shrink or expand the selected node"), 0, _parent, false, this, SLOT(onShrinkExpand())); + _shrinkExpandChildren = _wrapper->createAction(getMenuId(), tr("shrink or expand direct children of the selected node"), QIcon("icons:shrinkExpand.png"), + tr("shrink/expand children"), tr("shrink or expand direct children of the selected node"), + 0, _parent, false, this, SLOT(onShrinkExpandChildren())); + + _shrinkExpandElementaryRecursively = _wrapper->createAction(getMenuId(), tr("shrink or expand elementary nodes of the selected node recursively"), QIcon("icons:shrinkExpand.png"), + tr("shrink/expand elementary"), tr("shrink or expand elementary nodes of the selected node recursively"), + 0, _parent, false, this, SLOT(onShrinkExpandElementaryRecursively())); + _toggleStraightLinksAct = _wrapper->createAction(getMenuId(), tr("draw straight or orthogonal links"), QIcon("icons:straightLink.png"), tr("straight/orthogonal"), tr("draw straight or orthogonal links"), 0, _parent, true, this, SLOT(onToggleStraightLinks(bool))); @@ -651,7 +678,7 @@ void GenericGui::createMenus() void GenericGui::createTools() { - int aToolId = _wrapper->createTool ( tr( "YACS Toolbar" ) ); + int aToolId = _wrapper->createTool ( tr( "YACS Toolbar" ), QString( "YACSToolbar" ) ); _wrapper->createTool( _newSchemaAct, aToolId ); _wrapper->createTool( _importSchemaAct, aToolId ); _wrapper->createTool( _wrapper->separator(), aToolId ); @@ -701,6 +728,14 @@ void GenericGui::initialMenus() showBaseMenus(true); } +void GenericGui::hideAllMenus() +{ + showBaseMenus (false); + showCommonMenus (false); + showEditionMenus(false); + showExecMenus (false); +} + void GenericGui::showBaseMenus(bool show) { DEBTRACE("GenericGui::showBaseMenus " << show); @@ -782,12 +817,12 @@ void GenericGui::showCommonMenus(bool show) _wrapper->setToolShown(_hideAllLinksAct, show); } -void GenericGui::switchContext(QWidget *view) +void GenericGui::switchContext(QWidget *view, bool onExit) { DEBTRACE("GenericGui::switchContext " << view); if (! _mapViewContext.count(view)) { - initialMenus(); + onExit ? hideAllMenus() : initialMenus(); _dwTree->setWidget(0); _dwStacked->setWidget(0); return; @@ -940,7 +975,7 @@ bool GenericGui::closeContext(QWidget *view, bool onExit) } delete context; _mapViewContext.erase(view); - switchContext(newView); + switchContext(newView, onExit); } return true; } @@ -1186,6 +1221,7 @@ void GenericGui::setLoadedPresentation(YACS::ENGINE::Proc* proc) { DEBTRACE("GenericGui::setLoadedPresentation"); QtGuiContext::getQtCurrent()->setLoadingPresentation(true); + map nodesToMove; map presNodes = _loader->getPrsData(proc); if (!presNodes.empty()) { @@ -1203,11 +1239,38 @@ void GenericGui::setLoadedPresentation(YACS::ENGINE::Proc* proc) inode->setWidth(pres._width); inode->setHeight(pres._height); inode->setExpanded(pres._expanded); - inode->setExpandedPos(QPointF(pres._expx, pres._expy)); + QPointF anExpandedPos = QPointF(pres._expx, pres._expy); + if (anExpandedPos.isNull()) + anExpandedPos = inode->pos(); + inode->setExpandedPos(anExpandedPos); inode->setExpandedWH(pres._expWidth, pres._expHeight); inode->setShownState(shownState(pres._shownState)); + + // collect nodes to correct it's Y-position if this collides with parent's header + if (inode->getParent() ) { + qreal anX = inode->x(); + qreal anY = inode->y(); + if (inode->getShownState() == shrinkHidden) { + anX = inode->getExpandedX(); + anY = inode->getExpandedY(); + } + if (anY < inode->getParent()->getHeaderBottom()) + nodesToMove[inode] = QPointF(anX, inode->getParent()->getHeaderBottom()+1); + } } } + QtGuiContext::getQtCurrent()->setLoadingPresentation(false); + + //after loading of presentation: + + //move nodes because of progress bar, if any was added + map::iterator it = nodesToMove.begin(); + for (; it!= nodesToMove.end(); ++it) + { + (*it).first->setTopLeft((*it).second); + } + + //update links if (Scene::_autoComputeLinks) _guiEditor->rebuildLinks(); else @@ -1217,8 +1280,6 @@ void GenericGui::setLoadedPresentation(YACS::ENGINE::Proc* proc) SceneComposedNodeItem *proc = dynamic_cast(item); proc->updateLinks(); } - - QtGuiContext::getQtCurrent()->setLoadingPresentation(false); } // ----------------------------------------------------------------------------- @@ -1249,7 +1310,7 @@ void GenericGui::loadSchema(const std::string& filename,bool edit, bool arrangeL { DEBTRACE(logger->getStr()); } - QString fn=QString::fromStdString(filename); + QString fn=QString::fromUtf8(filename.c_str()); if(edit) createContext(proc, fn, "", true); else @@ -1289,11 +1350,11 @@ void GenericGui::onImportSchema() if (!fi.exists() && fi.suffix() != "xml") fn += ".xml"; - DEBTRACE("file loaded : " <load(fn.toLatin1()); + proc = _loader->load(fn.toUtf8().constData()); } catch (...) { } @@ -1353,7 +1414,7 @@ void GenericGui::onImportSupervSchema() QString tmpFileName; try { -#ifdef WNT +#ifdef WIN32 QString tmpDir = getenv("TEMP"); QString fileExt = "bat"; #else @@ -1487,12 +1548,12 @@ void GenericGui::onExportSchema() } if (fn.isEmpty()) return; - DEBTRACE("GenericGui::onExportSchema: " << fn.toStdString()); + DEBTRACE("GenericGui::onExportSchema: " << fn.toUtf8().constData()); //to be sure that all pending changes are effective _parent->setFocus(); QtGuiContext::getQtCurrent()->setFileName(fn); VisitorSaveGuiSchema aWriter(proc); - aWriter.openFileSchema( fn.toStdString() ); + aWriter.openFileSchema( fn.toUtf8().constData() ); aWriter.visitProc(); aWriter.closeFileSchema(); QtGuiContext::getQtCurrent()->setNotSaved(false); @@ -1513,10 +1574,10 @@ void GenericGui::onExportSchemaAs() QString fn = getSaveFileName(fo); if (fn.isEmpty()) return; - DEBTRACE("GenericGui::onExportSchemaAs: " << fn.toStdString()); + DEBTRACE("GenericGui::onExportSchemaAs: " << fn.toUtf8().constData()); QtGuiContext::getQtCurrent()->setFileName(fn); VisitorSaveGuiSchema aWriter(proc); - aWriter.openFileSchema(fn.toStdString()); + aWriter.openFileSchema(fn.toUtf8().constData()); aWriter.visitProc(); aWriter.closeFileSchema(); _isSaved = true; @@ -1599,7 +1660,7 @@ void GenericGui::onRunLoadedSchema(bool withState) QFileInfo fo = QtGuiContext::getQtCurrent()->getFileName(); QString procName = fo.baseName(); //QString tmpDir = SALOMEDS_Tool::GetTmpDir().c_str(); -#ifdef WNT +#ifdef WIN32 QString tmpDir = getenv("TEMP"); #else QString tmpDir = "/tmp"; @@ -2063,6 +2124,37 @@ void GenericGui::onPutInBloc() _guiEditor->PutSubjectInBloc(); } +void GenericGui::onPutGraphInBloc() +{ + DEBTRACE("GenericGui::onPutGraphInBloc"); + _guiEditor->PutGraphInBloc(); + _guiEditor->arrangeNodes(false); +} + +void GenericGui::onPutGraphInForLoop() +{ + DEBTRACE("GenericGui::onPutGraphInForLoop"); + _guiEditor->PutGraphInNode("ForLoop"); +} + +void GenericGui::putGraphInForeachLoop(std::string type) +{ + DEBTRACE("GenericGui::PutGraphInForeachLoop"); + _guiEditor->PutGraphInNode("ForEachLoop_"+type); +} + +void GenericGui::onPutGraphInWhileLoop() +{ + DEBTRACE("GenericGui::onPutGraphInWhileLoop"); + _guiEditor->PutGraphInNode("WhileLoop"); +} + +void GenericGui::onPutGraphInOptimizerLoop() +{ + DEBTRACE("GenericGui::onPutGraphInOptimizerLoop"); + _guiEditor->PutGraphInNode("OptimizerLoop"); +} + void GenericGui::onArrangeLocalNodes() { DEBTRACE("GenericGui::onArrangeLocalNodes"); @@ -2098,6 +2190,16 @@ void GenericGui::onShrinkExpand() { _guiEditor->shrinkExpand(); } +void GenericGui::onShrinkExpandChildren() { + DEBTRACE("GenericGui::onShrinkExpandChildren"); + _guiEditor->shrinkExpand(Qt::ControlModifier|Qt::ShiftModifier); +} + +void GenericGui::onShrinkExpandElementaryRecursively() { + DEBTRACE("GenericGui::onShrinkExpandElementaryRecursively"); + _guiEditor->shrinkExpand(Qt::ControlModifier); +} + void GenericGui::onToggleStraightLinks(bool checked) { Scene::_straightLinks = checked;