NewGeom_DataModel.h
NewGeom_OCCSelector.h
NewGeom_SalomeViewer.h
+ NewGeom_NestedButton.h
)
SET(PROJECT_AUTOMOC
NewGeom_DataModel.cpp
NewGeom_OCCSelector.cpp
NewGeom_SalomeViewer.cpp
+ NewGeom_NestedButton.cpp
)
SET(PROJECT_RESOURCES
#include "NewGeom_Module.h"
#include "NewGeom_DataModel.h"
#include "NewGeom_OCCSelector.h"
+#include <NewGeom_NestedButton.h>
#include <XGUI_Workshop.h>
#include <XGUI_PropertyPanel.h>
#include <ModuleBase_Operation.h>
#include <ModuleBase_Preferences.h>
+#include <ModuleBase_ActionInfo.h>
#include <LightApp_Application.h>
#include <LightApp_SelectionMgr.h>
return aDataModel;
}
+QAction* NewGeom_Module::addFeature(const QString& theWBName, const ActionInfo& theInfo)
+{
+ return addFeature(theWBName,
+ theInfo.id,
+ theInfo.text,
+ theInfo.toolTip,
+ theInfo.icon,
+ theInfo.shortcut);
+}
+
//******************************************************
QAction* NewGeom_Module::addFeature(const QString& theWBName, const QString& theId,
const QString& theTitle, const QString& theTip,
aAction->setData(theId);
int aItemId = createMenu(aId, aMenu, -1, 10);
int aToolId = createTool(aId, aTool);
+
return aAction;
}
-QAction* NewGeom_Module::addFeature(const QString& theWBName, const ActionInfo& theInfo)
+
+QAction* NewGeom_Module::addNestedFeature(const QString& theWBName,
+ const ActionInfo& theInfo,
+ const QList<QAction*>& theNestedActions)
{
- return addFeature(theWBName,
- theInfo.id,
- theInfo.text,
- theInfo.toolTip,
- theInfo.icon,
- theInfo.shortcut);
+ int aMenu = createMenu(theWBName, -1, -1, 50);
+ int aTool = createTool(theWBName);
+
+ int aId = myActionsList.size();
+ myActionsList.append(theInfo.id);
+ SUIT_Desktop* aDesk = application()->desktop();
+ NewGeom_NestedButton* anAction = new NewGeom_NestedButton(aDesk, theNestedActions);
+ anAction->setData(theInfo.id);
+ anAction->setCheckable(theInfo.checkable);
+ anAction->setChecked(theInfo.checked);
+ anAction->setEnabled(theInfo.enabled);
+ anAction->setVisible(theInfo.visible);
+ anAction->setIcon(theInfo.icon);
+ anAction->setText(theInfo.text);
+ anAction->setToolTip(theInfo.toolTip);
+ anAction->setShortcut(theInfo.shortcut);
+ anAction->setFont(theInfo.font);
+
+ //int aItemId = createMenu(aId, aMenu, -1, 10);
+ int aToolId = createTool(anAction, aTool, aId);
+
+ return anAction;
}
virtual QAction* addFeature(const QString& theWBName,
const ActionInfo& theInfo);
+ virtual QAction* addNestedFeature(const QString& theWBName,
+ const ActionInfo& theInfo,
+ const QList<QAction*>& theNestedActions);
+
virtual QAction* addDesktopCommand(const QString& theId, const QString& theTitle,
const QString& theTip, const QIcon& theIcon,
const QKeySequence& theKeys, bool isCheckable,
--- /dev/null
+/*
+ * NewGeom_NestedButton.cpp
+ *
+ * Created on: Apr 13, 2015
+ * Author: sbh
+ */
+
+#include <NewGeom_NestedButton.h>
+
+#include <QAction>
+#include <QFrame>
+#include <QHBoxLayout>
+#include <QToolButton>
+
+NewGeom_NestedButton::NewGeom_NestedButton(QObject* theParent,
+ const QList<QAction*>& theNestedActions)
+: QWidgetAction(theParent),
+ myNestedActions(theNestedActions),
+ myAdditionalButtonsWidget(0),
+ myButtonFrame(0),
+ myThisButton(0)
+{
+}
+
+NewGeom_NestedButton::~NewGeom_NestedButton()
+{
+}
+
+void NewGeom_NestedButton::showAdditionalButtons(bool isShow)
+{
+ myAdditionalButtonsWidget->setVisible(isShow);
+ if (isShow) {
+ myButtonFrame->setFrameStyle(QFrame::WinPanel);
+ myButtonFrame->setFrameShadow(QFrame::Sunken);
+ myThisButton->setAutoRaise(false);
+ } else {
+ myButtonFrame->setFrameStyle(QFrame::NoFrame);
+ myButtonFrame->setFrameShadow(QFrame::Plain);
+ myThisButton->setAutoRaise(true);
+ }
+}
+
+QWidget * NewGeom_NestedButton::createWidget(QWidget * theParent)
+{
+ myButtonFrame = new QFrame(theParent);
+ QHBoxLayout* aBoxLay = new QHBoxLayout(myButtonFrame);
+ aBoxLay->setContentsMargins(2, 0, 0, 0);
+ aBoxLay->setSpacing(1);
+
+ myThisButton = new QToolButton(myButtonFrame);
+ myThisButton->setDefaultAction(this);
+ myThisButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ aBoxLay->addWidget(myThisButton, 1);
+
+ myAdditionalButtonsWidget = new QWidget(myButtonFrame);
+ QHBoxLayout* aAdditionalBoxLay = new QHBoxLayout(myAdditionalButtonsWidget);
+ aAdditionalBoxLay->setContentsMargins(0, 0, 0, 0);
+ aAdditionalBoxLay->setSpacing(1);
+ foreach (QAction* eachAct, myNestedActions) {
+ QToolButton* aButton = new QToolButton(myButtonFrame);
+ aButton->setDefaultAction(eachAct);
+ aButton->setAutoRaise(true);
+ aAdditionalBoxLay->addWidget(aButton);
+ }
+ myAdditionalButtonsWidget->setLayout(aAdditionalBoxLay);
+ aBoxLay->addWidget(myAdditionalButtonsWidget);
+
+ myButtonFrame->setLayout(aBoxLay);
+
+ showAdditionalButtons(false);
+ connect(this, SIGNAL(toggled(bool)), this, SLOT(showAdditionalButtons(bool)));
+ connect(this, SIGNAL(changed()), this, SLOT(actionStateChanged()));
+ return myButtonFrame;
+}
+
+void NewGeom_NestedButton::actionStateChanged()
+{
+ if (isEnabled()) {
+ QString s = "true";
+ } else {
+ QString s = "false";
+ }
+
+}
--- /dev/null
+/*
+ * NewGeom_NestedButton.h
+ *
+ * Created on: Apr 13, 2015
+ * Author: sbh
+ */
+
+#ifndef SRC_NEWGEOM_NEWGEOM_NESTEDBUTTON_H_
+#define SRC_NEWGEOM_NEWGEOM_NESTEDBUTTON_H_
+
+#include <QWidgetAction>
+
+class QFrame;
+class QAction;
+class QWidget;
+class QToolButton;
+
+/*!
+ * \ingroup Salome
+ * Custom (nested) button in salome mode.
+ */
+class NewGeom_NestedButton : public QWidgetAction
+{
+ Q_OBJECT
+ public:
+ NewGeom_NestedButton(QObject *parent, const QList<QAction*>& theNestedActions);
+ virtual ~NewGeom_NestedButton();
+
+ public slots:
+ /// Shows/hides the additional buttons widget
+ void showAdditionalButtons(bool);
+ void actionStateChanged();
+
+ protected:
+ /// Creates the button representation
+ virtual QWidget * createWidget(QWidget * theParent);
+
+ private:
+ QList<QAction*> myNestedActions; ///< list of nested actions
+ QWidget* myAdditionalButtonsWidget; ///< widget to precess additional buttons visibility
+ QFrame* myButtonFrame; ///< frame arround button representation
+ QToolButton* myThisButton; ///< main button
+};
+
+#endif /* SRC_NEWGEOM_NEWGEOM_NESTEDBUTTON_H_ */
return;
FeaturePtr aFeature = theOperation->feature();
QString aFeatureId = QString::fromStdString(aFeature->getKind());
+ setActionEnabled(aFeatureId, true);
setNestedCommandsEnabled(true, aFeatureId);
setNestedStackEnabled(myOperationMgr->previousOperation(theOperation));
void XGUI_OperationMgr::onOperationStarted()
{
ModuleBase_Operation* aSenderOperation = dynamic_cast<ModuleBase_Operation*>(sender());
- if (myOperations.count() == 1) {
- emit nestedStateChanged(false);
- }
+
+ bool isNestedOk = (myOperations.count() >= 1) &&
+ myOperations.at(0)->isValid();
+ emit nestedStateChanged(isNestedOk);
emit operationStarted(aSenderOperation);
}
void XGUI_OperationMgr::onOperationCommitted()
{
ModuleBase_Operation* aSenderOperation = dynamic_cast<ModuleBase_Operation*>(sender());
- emit nestedStateChanged(true);
+ emit nestedStateChanged(myOperations.count() >= 1);
emit operationCommitted(aSenderOperation);
}
virtual QAction* addFeature(const QString& theWBName,
const ActionInfo& theInfo) = 0;
+ //! Creates a feature (command) in SALOME desktop
+ //! \param theWBName - name of toolbar (workbench)
+ //! \param theInfo - information about action (icon, text, etc)
+ virtual QAction* addNestedFeature(const QString& theWBName,
+ const ActionInfo& theInfo,
+ const QList<QAction*>& theNestedActions) = 0;
+
//! Creates a command in Edit menu of SALOME desktop
//! \param theId - an id of the feature
//! \param theTitle - a menu item string
QStringList aNestedFeatures =
QString::fromStdString(theMessage->nestedFeatures()).split(" ", QString::SkipEmptyParts);
QString aDocKind = QString::fromStdString(theMessage->documentKind());
+ QList<QAction*> aNestedActList;
+ bool isColumnButton = !aNestedFeatures.isEmpty();
+ if (isColumnButton) {
+ QString aNestedActions = QString::fromStdString(theMessage->actionsWhenNested());
+ if (aNestedActions.contains("accept")) {
+ QAction* anAction = myActionsMgr->operationStateAction(XGUI_ActionsMgr::AcceptAll, NULL);
+ connect(anAction, SIGNAL(triggered()), myOperationMgr, SLOT(commitAllOperations()));
+ aNestedActList << anAction;
+ }
+ if (aNestedActions.contains("abort")) {
+ QAction* anAction = myActionsMgr->operationStateAction(XGUI_ActionsMgr::AbortAll, NULL);
+ connect(anAction, SIGNAL(triggered()), myOperationMgr, SLOT(abortAllOperations()));
+ aNestedActList << anAction;
+ }
+ }
+
if (isSalomeMode()) {
- QAction* aAction = salomeConnector()->addFeature(aWchName, aFeatureInfo);
+ QAction* aAction;
+ if (isColumnButton) {
+ aAction = salomeConnector()->addNestedFeature(aWchName, aFeatureInfo, aNestedActList);
+ } else {
+ aAction = salomeConnector()->addFeature(aWchName, aFeatureInfo);
+ }
salomeConnector()->setNestedActions(aFeatureInfo.id, aNestedFeatures);
salomeConnector()->setDocumentKind(aFeatureInfo.id, aDocKind);
// 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);
+ aButton->setAdditionalButtons(aNestedActList);
}
myActionsMgr->addCommand(aCommand);
myModule->actionCreated(aCommand);