#include <AppElements_MainMenu.h>
#include <AppElements_MainWindow.h>
#include <AppElements_MenuGroupPanel.h>
+#include <AppElements_Button.h>
#include <ModuleBase_IModule.h>
#include <ModuleBase_Preferences.h>
aCommand = aGroup->addFeature(aUndoId, tr("Undo"), tr("Undo last command"),
QIcon(":pictures/undo.png"), QKeySequence::Undo);
aCommand->connectTo(this, SLOT(onUndo()));
- QToolButton* aUndoButton = qobject_cast<QToolButton*>(aGroup->widget(aUndoId));
+ AppElements_Button* aUndoButton = qobject_cast<AppElements_Button*>(aGroup->widget(aUndoId));
addHistoryMenu(aUndoButton,
SIGNAL(updateUndoHistory(const QList<ActionInfo>&)),
SLOT(onUndo(int)));
aCommand = aGroup->addFeature(aRedoId, tr("Redo"), tr("Redo last command"),
QIcon(":pictures/redo.png"), QKeySequence::Redo);
aCommand->connectTo(this, SLOT(onRedo()));
- QToolButton* aRedoButton = qobject_cast<QToolButton*>(aGroup->widget(aRedoId));
+ AppElements_Button* aRedoButton = qobject_cast<AppElements_Button*>(aGroup->widget(aRedoId));
addHistoryMenu(aRedoButton,
SIGNAL(updateRedoHistory(const QList<ActionInfo>&)),
SLOT(onRedo(int)));
aFeatureInfo.shortcut = aHotKey;
}
// Create feature...
- AppElements_Command* aCommand = aGroup->addFeature(aFeatureInfo, aDocKind);
- aCommand->setNestedCommands(aNestedFeatures);
+ AppElements_Command* aCommand = aGroup->addFeature(aFeatureInfo,
+ aDocKind,
+ aNestedFeatures);
+ // Enrich created button with accept/abort buttons if necessary
+ AppElements_Button* aButton = aCommand->button();
+ if (aButton->isColumnButton()) {
+ QString aNestedActions = QString::fromStdString(theMessage->actionsWhenNested());
+ QList<QAction*> anActList;
+ if (aNestedActions.contains("accept")) {
+ QAction* anAction = myActionsMgr->operationStateAction(XGUI_ActionsMgr::AcceptAll, aButton);
+ connect(anAction, SIGNAL(triggered()), myOperationMgr, SLOT(commitAllOperations()));
+ anActList << anAction;
+ }
+ if (aNestedActions.contains("abort")) {
+ QAction* anAction = myActionsMgr->operationStateAction(XGUI_ActionsMgr::AbortAll, aButton);
+ connect(anAction, SIGNAL(triggered()), myOperationMgr, SLOT(abortAllOperations()));
+ anActList << anAction;
+ }
+ aButton->setAdditionalButtons(anActList);
+ }
myActionsMgr->addCommand(aCommand);
myModule->actionCreated(aCommand);
}
// Enable all commands
aCmd->setEnabled(true);
}
+
aUndoCmd->setEnabled(myModule->canUndo());
aRedoCmd->setEnabled(myModule->canRedo());
-
updateHistory();
-
} else {
foreach(QAction* aCmd, aCommands) {
QString aId = aCmd->data().toString();
void XGUI_Workshop::updateHistory()
{
std::list<std::string> aUndoList = ModelAPI_Session::get()->undoList();
- std::list<std::string>::iterator it = aUndoList.begin();
- QList<ActionInfo> aUndoRes;
- for ( ; it != aUndoList.end(); it++) {
- QString anId = QString::fromStdString(*it);
- QIcon aIcon;
- if (myIcons.contains(anId))
- aIcon = QIcon(myIcons[anId]);
- aUndoRes << ActionInfo(aIcon, anId);
- }
+ QList<ActionInfo> aUndoRes = processHistoryList(aUndoList);
emit updateUndoHistory(aUndoRes);
std::list<std::string> aRedoList = ModelAPI_Session::get()->redoList();
- it = aRedoList.begin();
- QList<ActionInfo> aRedoRes;
- for ( ; it != aRedoList.end(); it++) {
- QString anId = QString::fromStdString(*it);
- QIcon aIcon;
- if (myIcons.contains(anId))
- aIcon = QIcon(myIcons[anId]);
- aRedoRes << ActionInfo(aIcon, anId);
- }
- emit updateRedoHistory(aUndoRes);
+ QList<ActionInfo> aRedoRes = processHistoryList(aRedoList);
+ emit updateRedoHistory(aRedoRes);
}
//******************************************************
QDockWidget* aObjDock = createObjectBrowser(aDesktop);
aDesktop->addDockWidget(Qt::LeftDockWidgetArea, aObjDock);
myPropertyPanel = new XGUI_PropertyPanel(aDesktop);
+ myPropertyPanel->setupActions(myActionsMgr);
myPropertyPanel->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea);
-
- connect(myPropertyPanel, SIGNAL(noMoreWidgets()), myModule, SLOT(onNoMoreWidgets()));
-
aDesktop->addDockWidget(Qt::LeftDockWidgetArea, myPropertyPanel);
hidePropertyPanel(); ///<! Invisible by default
hideObjectBrowser();
aDesktop->tabifyDockWidget(aObjDock, myPropertyPanel);
myPropertyPanel->installEventFilter(myOperationMgr);
- QPushButton* aOkBtn = myPropertyPanel->findChild<QPushButton*>(PROP_PANEL_OK);
- connect(aOkBtn, SIGNAL(clicked()), myOperationMgr, SLOT(onCommitOperation()));
- QPushButton* aCancelBtn = myPropertyPanel->findChild<QPushButton*>(PROP_PANEL_CANCEL);
- connect(aCancelBtn, SIGNAL(clicked()), myOperationMgr, SLOT(onAbortOperation()));
- connect(myPropertyPanel, SIGNAL(keyReleased(QKeyEvent*)), myOperationMgr,
- SLOT(onKeyReleased(QKeyEvent*)));
- connect(myOperationMgr, SIGNAL(applyEnableChanged(bool)), myPropertyPanel,
- SLOT(setAcceptEnabled(bool)));
+ QAction* aOkAct = myActionsMgr->operationStateAction(XGUI_ActionsMgr::Accept);
+ connect(aOkAct, SIGNAL(triggered()), myOperationMgr, SLOT(onCommitOperation()));
+ QAction* aCancelAct = myActionsMgr->operationStateAction(XGUI_ActionsMgr::Abort);
+ connect(aCancelAct, SIGNAL(triggered()), myOperationMgr, SLOT(onAbortOperation()));
+ connect(myPropertyPanel, SIGNAL(noMoreWidgets()), myModule, SLOT(onNoMoreWidgets()));
+ connect(myPropertyPanel, SIGNAL(keyReleased(QKeyEvent*)),
+ myOperationMgr, SLOT(onKeyReleased(QKeyEvent*)));
+ connect(myOperationMgr, SIGNAL(validationStateChanged(bool)),
+ aOkAct, SLOT(setEnabled(bool)));
+ QAction* aAcceptAllAct = myActionsMgr->operationStateAction(XGUI_ActionsMgr::AcceptAll);
+ connect(myOperationMgr, SIGNAL(nestedStateChanged(bool)),
+ aAcceptAllAct, SLOT(setEnabled(bool)));
}
}
SessionPtr aMgr = ModelAPI_Session::get();
- aMgr->startOperation("DeleteObjects");
+ QString aDescription = tr("Delete %1");
+ QStringList aObjectNames;
+ foreach (ObjectPtr aObj, theList) {
+ if (!aObj->data().get())
+ continue;
+ aObjectNames << QString::fromStdString(aObj->data()->name());
+ }
+ aDescription = aDescription.arg(aObjectNames.join(", "));
+ aMgr->startOperation(aDescription.toStdString());
std::set<FeaturePtr>::const_iterator anIt = aRefFeatures.begin(),
aLast = aRefFeatures.end();
for (; anIt != aLast; anIt++) {
myDisplayer->updateViewer();
aMgr->finishOperation();
+ updateCommandStatus();
}
//**************************************************************
}
connect(this, theSignal, aMenu, SLOT(setHistory(const QList<ActionInfo>&)));
connect(aMenu, SIGNAL(actionSelected(int)), this, theSlot);
+}
+QList<ActionInfo> XGUI_Workshop::processHistoryList(const std::list<std::string>& theList) const
+{
+ QList<ActionInfo> aResult;
+ std::list<std::string>::const_iterator it = theList.cbegin();
+ for (; it != theList.cend(); it++) {
+ QString anId = QString::fromStdString(*it);
+ bool isEditing = anId.endsWith(ModuleBase_Operation::EditSuffix());
+ if (isEditing) {
+ anId.chop(ModuleBase_Operation::EditSuffix().size());
+ }
+ ActionInfo anInfo = myActionsMgr->actionInfoById(anId);
+ if (isEditing) {
+ anInfo.text = anInfo.text.prepend("Modify ");
+ }
+ aResult << anInfo;
+ }
+ return aResult;
}