X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ActionsMgr.cpp;h=c3a35fe7cbc534739d8db3a16a52ed3ed00ccef4;hb=ed165fd07e71c11885fdc5f475a8522a5914e00d;hp=8722c089649af58c9bd6f1229c8d06ba1e1c8f78;hpb=20e457f76873f469115bd9da937b600ba2edfb57;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ActionsMgr.cpp b/src/XGUI/XGUI_ActionsMgr.cpp index 8722c0896..c3a35fe7c 100644 --- a/src/XGUI/XGUI_ActionsMgr.cpp +++ b/src/XGUI/XGUI_ActionsMgr.cpp @@ -8,30 +8,39 @@ #include "XGUI_OperationMgr.h" #include "XGUI_SalomeConnector.h" +#include + #include +#include #include #ifdef _DEBUG +#include #include #endif - XGUI_ActionsMgr::XGUI_ActionsMgr(XGUI_Workshop* theParent) - : QObject(theParent), myOperationMgr(theParent->operationMgr()) + : QObject(theParent), + myWorkshop(theParent), + myOperationMgr(theParent->operationMgr()) { - + // Default shortcuts + myShortcuts << QKeySequence::Save; + myShortcuts << QKeySequence::Undo; + myShortcuts << QKeySequence::Redo; + myShortcuts << QKeySequence::Open; + myShortcuts << QKeySequence::Close; } XGUI_ActionsMgr::~XGUI_ActionsMgr() { } - void XGUI_ActionsMgr::addCommand(QAction* theCmd) { QString aId = theCmd->data().toString(); - if(aId.isEmpty()) { + if (aId.isEmpty()) { return; } myActions.insert(aId, theCmd); @@ -51,32 +60,48 @@ void XGUI_ActionsMgr::addNestedCommands(const QString& theId, const QStringList& void XGUI_ActionsMgr::update() { - if(myOperationMgr->hasOperation()) { - setAllEnabled(false); + if (myOperationMgr->hasOperation()) { ModuleBase_Operation* anOperation = myOperationMgr->currentOperation(); - QString anOperationId = anOperation->id(); - setActionEnabled(anOperationId, true); - bool isNestedEnabled = anOperation->isNestedOperationsEnabled(); - setNestedCommandsEnabled(isNestedEnabled, anOperationId); + FeaturePtr aFeature = anOperation->feature(); + if(aFeature) { + setAllEnabled(false); + QString aFeatureId = QString::fromStdString(aFeature->getKind()); + setActionEnabled(aFeatureId, true); + setNestedStackEnabled(anOperation); + } } else { setAllEnabled(true); setNestedCommandsEnabled(false); } + updateByDocumentKind(); updateCheckState(); } void XGUI_ActionsMgr::setAllEnabled(bool isEnabled) { - foreach(QString eachAction, myActions.keys()) { + foreach(QString eachAction, myActions.keys()) + { setActionEnabled(eachAction, isEnabled); } } +void XGUI_ActionsMgr::setNestedStackEnabled(ModuleBase_Operation* theOperation) +{ + if(!theOperation || !theOperation->feature()) + return; + FeaturePtr aFeature = theOperation->feature(); + QString aFeatureId = QString::fromStdString(aFeature->getKind()); + bool isNestedEnabled = theOperation->isNestedOperationsEnabled(); + setNestedCommandsEnabled(isNestedEnabled, aFeatureId); + + setNestedStackEnabled(myOperationMgr->previousOperation(theOperation)); +} + //! void XGUI_ActionsMgr::setNestedCommandsEnabled(bool theEnabled, const QString& theParent) { QStringList ltNestedActions; - if(theParent.isEmpty()) { //Disable ALL nested + if (theParent.isEmpty()) { //Disable ALL nested foreach(QString eachParent, myNestedActions.keys()) { ltNestedActions << myNestedActions[eachParent]; } @@ -91,16 +116,34 @@ void XGUI_ActionsMgr::setNestedCommandsEnabled(bool theEnabled, const QString& t void XGUI_ActionsMgr::setActionChecked(const QString& theId, const bool theChecked) { QAction* anAction = myActions[theId]; - if(anAction && anAction->isCheckable()) { + if (anAction && anAction->isCheckable()) { anAction->setChecked(theChecked); } } +/* + * Disables all actions which have the Document Kind different to + * the current document's kind + */ +void XGUI_ActionsMgr::updateByDocumentKind() +{ + std::string aStdDocKind = ModelAPI_Session::get()->activeDocument()->kind(); + QString aDocKind = QString::fromStdString(aStdDocKind); + foreach(QAction* eachAction, myActions.values()) { + XGUI_Command* aCmd = dynamic_cast(eachAction); + if(aCmd) { + QString aCmdDocKind = aCmd->documentKind(); + if(!aCmdDocKind.isEmpty() && aCmdDocKind != aDocKind) { + eachAction->setEnabled(false); + } + } + } +} void XGUI_ActionsMgr::setActionEnabled(const QString& theId, const bool theEnabled) { QAction* anAction = myActions[theId]; - if(anAction) { + if (anAction) { anAction->setEnabled(theEnabled); } } @@ -116,3 +159,36 @@ void XGUI_ActionsMgr::updateCheckState() setActionChecked(eachCommand, true); } } + +QStringList XGUI_ActionsMgr::nestedCommands(const QString& theId) const +{ + if (myNestedActions.contains(theId)) + return myNestedActions[theId]; + return QStringList(); +} + +bool XGUI_ActionsMgr::isNested(const QString& theId) const +{ + foreach(QString aId, myNestedActions.keys()) + { + QStringList aList = myNestedActions[aId]; + if (aList.contains(theId)) + return true; + } + return false; +} + +QKeySequence XGUI_ActionsMgr::registerShortcut(const QString& theKeySequence) +{ + if (theKeySequence.isEmpty()) { + return QKeySequence(); + } + QKeySequence aResult(theKeySequence); + if (myShortcuts.contains(aResult)) { + QString aMessage = tr("Shortcut %1 is already defined. Ignore.").arg(theKeySequence); + Events_Error::send(aMessage.toStdString()); + return QKeySequence(); + } + myShortcuts.append(aResult); + return aResult; +}