#include <ModuleBase_Tools.h>
#include <ModuleBase_PageBase.h>
#include <ModuleBase_PageWidget.h>
+#include <ModuleBase_WidgetFactory.h>
+#include <ModuleBase_OperationDescription.h>
+#include <ModuleBase_Events.h>
+
+#include <Events_Loop.h>
#include <ModelAPI_Session.h>
#include <ModelAPI_Validator.h>
myPanelPage(NULL),
myOperationMgr(theMgr)
{
- this->setWindowTitle(tr("Property Panel"));
- QAction* aViewAct = this->toggleViewAction();
- this->setObjectName(PROP_PANEL);
+ setWindowTitle(tr("Property Panel"));
+ QAction* aViewAct = toggleViewAction();
+ setObjectName(PROP_PANEL);
setStyleSheet("::title { position: relative; padding-left: 5px; text-align: left center }");
QWidget* aContent = new QWidget(this);
const int kPanelColumn = 0;
int aPanelRow = 0;
aMainLayout->setContentsMargins(3, 3, 3, 3);
- this->setWidget(aContent);
+ setWidget(aContent);
QFrame* aFrm = new QFrame(aContent);
aFrm->setFrameStyle(QFrame::Raised);
myPanelPage = new ModuleBase_PageWidget(aContent);
myPanelPage->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
aMainLayout->addWidget(myPanelPage, aPanelRow, kPanelColumn);
+
+ // spit to make the preview button on the bottom of the panel
+ aMainLayout->setRowStretch(aPanelRow++, 1);
+
+ // preview button on the bottom of panel
+ aFrm = new QFrame(aContent);
+ aBtnLay = new QHBoxLayout(aFrm);
+ aBtnLay->addStretch(1);
+ ModuleBase_Tools::zeroMargins(aBtnLay);
+ aMainLayout->addWidget(aFrm, aPanelRow++, kPanelColumn);
+
+ QToolButton* aBtn = new QToolButton(aFrm);
+ aBtn->setObjectName(PROP_PANEL_PREVIEW);
+ aBtnLay->addWidget(aBtn);
}
XGUI_PropertyPanel::~XGUI_PropertyPanel()
myWidgets.clear();
myPanelPage->clearPage();
myActiveWidget = NULL;
+
+ findButton(PROP_PANEL_PREVIEW)->setVisible(false); /// by default it is hidden
setWindowTitle(tr("Property Panel"));
}
repaint();
}
+void XGUI_PropertyPanel::createContentPanel(FeaturePtr theFeature)
+{
+ // Invalid feature case on abort of the operation
+ if (theFeature.get() == NULL)
+ return;
+ if (theFeature->isAction() || !theFeature->data())
+ return;
+
+ if (myWidgets.empty()) {
+ ModuleBase_Operation* anOperation = myOperationMgr->currentOperation();
+ QString aXmlRepr = anOperation->getDescription()->xmlRepresentation();
+
+ ModuleBase_WidgetFactory aFactory(aXmlRepr.toStdString(), myOperationMgr->workshop());
+ aFactory.createPanel(contentWidget(), theFeature);
+ /// Apply button should be update if the feature was modified by the panel
+ myOperationMgr->onValidateOperation();
+ }
+}
+
void XGUI_PropertyPanel::activateNextWidget(ModuleBase_ModelWidget* theWidget)
{
// it is possible that the property panel widgets have not been visualized
// it should be performed before activateWidget(NULL) because it emits some signals which
// can be processed by moudule for example as to activate another widget with setting focus
QWidget* aNewFocusWidget = 0;
- QToolButton* anOkBtn = findChild<QToolButton*>(PROP_PANEL_OK);
+ QToolButton* anOkBtn = findButton(PROP_PANEL_OK);
if (anOkBtn->isEnabled())
aNewFocusWidget = anOkBtn;
else {
- QToolButton* aCancelBtn = findChild<QToolButton*>(PROP_PANEL_CANCEL);
+ QToolButton* aCancelBtn = findButton(PROP_PANEL_CANCEL);
if (aCancelBtn->isEnabled())
aNewFocusWidget = aCancelBtn;
}
if (theIsNext) {
if (aFocusWidgetIndex == aChildrenCount-1) {
// after the last widget focus should be set to "Apply"
- QToolButton* anOkBtn = findChild<QToolButton*>(PROP_PANEL_OK);
+ QToolButton* anOkBtn = findButton(PROP_PANEL_OK);
if (anOkBtn->isEnabled())
aNewFocusWidget = anOkBtn;
else {
- QToolButton* aCancelBtn = findChild<QToolButton*>(PROP_PANEL_CANCEL);
+ QToolButton* aCancelBtn = findButton(PROP_PANEL_CANCEL);
if (aCancelBtn->isEnabled())
aNewFocusWidget = aCancelBtn;
}
}
else {
// before the "Apply" button, the last should accept focus for consistency with "Next"
- QToolButton* anOkBtn = findChild<QToolButton*>(PROP_PANEL_OK);
+ QToolButton* anOkBtn = findButton(PROP_PANEL_OK);
if (aFocusWidget == anOkBtn) {
aNewFocusWidget = aChildren[aChildrenCount - 1];
}
std::string aPreviosAttributeID;
if(myActiveWidget) {
aPreviosAttributeID = myActiveWidget->attributeID();
+ myActiveWidget->processValueState();
myActiveWidget->deactivate();
myActiveWidget->setHighlighted(false);
}
theWidget->activate();
}
myActiveWidget = theWidget;
+ static Events_ID anEvent = Events_Loop::eventByName(EVENT_UPDATE_BY_WIDGET_SELECTION);
+ Events_Loop::loop()->flush(anEvent);
+
return true;
}
void XGUI_PropertyPanel::setFocusOnOkButton()
{
- QToolButton* anOkBtn = findChild<QToolButton*>(PROP_PANEL_OK);
+ QToolButton* anOkBtn = findButton(PROP_PANEL_OK);
ModuleBase_Tools::setFocus(anOkBtn, "XGUI_PropertyPanel::setFocusOnOkButton()");
}
void XGUI_PropertyPanel::setCancelEnabled(bool theEnabled)
{
- QToolButton* anCancelBtn = findChild<QToolButton*>(PROP_PANEL_CANCEL);
+ QToolButton* anCancelBtn = findButton(PROP_PANEL_CANCEL);
anCancelBtn->setEnabled(theEnabled);
}
bool XGUI_PropertyPanel::isCancelEnabled() const
{
- QToolButton* anCancelBtn = findChild<QToolButton*>(PROP_PANEL_CANCEL);
+ QToolButton* anCancelBtn = findButton(PROP_PANEL_CANCEL);
return anCancelBtn->isEnabled();
}
void XGUI_PropertyPanel::setupActions(XGUI_ActionsMgr* theMgr)
{
QStringList aButtonNames;
- aButtonNames << PROP_PANEL_OK << PROP_PANEL_CANCEL << PROP_PANEL_HELP;
+ aButtonNames << PROP_PANEL_OK << PROP_PANEL_CANCEL << PROP_PANEL_HELP << PROP_PANEL_PREVIEW;
QList<XGUI_ActionsMgr::OperationStateActionId> aActionIds;
- aActionIds << XGUI_ActionsMgr::Accept << XGUI_ActionsMgr::Abort << XGUI_ActionsMgr::Help;
+ aActionIds << XGUI_ActionsMgr::Accept << XGUI_ActionsMgr::Abort << XGUI_ActionsMgr::Help
+ << XGUI_ActionsMgr::Preview;
for (int i = 0; i < aButtonNames.size(); ++i) {
- QToolButton* aBtn = findChild<QToolButton*>(aButtonNames.at(i));
+ QToolButton* aBtn = findButton(aButtonNames.at(i).toStdString().c_str());
QAction* anAct = theMgr->operationStateAction(aActionIds.at(i));
aBtn->setDefaultAction(anAct);
}
} else
ModuleBase_IPropertyPanel::closeEvent(theEvent);
}
+
+QToolButton* XGUI_PropertyPanel::findButton(const char* theInternalName) const
+{
+ return findChild<QToolButton*>(theInternalName);
+}