X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_PropertyPanel.cpp;h=4760cffb5a5fe2c8b32bd739a84306e51d5d2dbd;hb=8f09d362a50ccbc085841c24af2e755121e458ba;hp=1779431f5511a3dc204568139f8b334c7e9f72eb;hpb=3c0b551f57002a6e5195ef959f8056aa9df72baf;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_PropertyPanel.cpp b/src/XGUI/XGUI_PropertyPanel.cpp index 1779431f5..4760cffb5 100644 --- a/src/XGUI/XGUI_PropertyPanel.cpp +++ b/src/XGUI/XGUI_PropertyPanel.cpp @@ -12,6 +12,8 @@ //#include #include #include +#include +#include #include #include @@ -31,7 +33,9 @@ XGUI_PropertyPanel::XGUI_PropertyPanel(QWidget* theParent) : ModuleBase_IPropertyPanel(theParent), - myActiveWidget(NULL) + myActiveWidget(NULL), + myPreselectionWidget(NULL), + myPanelPage(NULL) { this->setWindowTitle(tr("Property Panel")); QAction* aViewAct = this->toggleViewAction(); @@ -39,10 +43,10 @@ XGUI_PropertyPanel::XGUI_PropertyPanel(QWidget* theParent) setStyleSheet("::title { position: relative; padding-left: 5px; text-align: left center }"); QWidget* aContent = new QWidget(this); - myMainLayout = new QGridLayout(aContent); + QGridLayout* aMainLayout = new QGridLayout(aContent); const int kPanelColumn = 0; int aPanelRow = 0; - myMainLayout->setContentsMargins(3, 3, 3, 3); + aMainLayout->setContentsMargins(3, 3, 3, 3); this->setWidget(aContent); QFrame* aFrm = new QFrame(aContent); @@ -50,7 +54,9 @@ XGUI_PropertyPanel::XGUI_PropertyPanel(QWidget* theParent) aFrm->setFrameShape(QFrame::Panel); QHBoxLayout* aBtnLay = new QHBoxLayout(aFrm); ModuleBase_Tools::zeroMargins(aBtnLay); - myMainLayout->addWidget(aFrm, aPanelRow++, kPanelColumn); + aMainLayout->addWidget(aFrm, aPanelRow++, kPanelColumn); + + myHeaderWidget = aFrm; QStringList aBtnNames; aBtnNames << QString(PROP_PANEL_HELP) @@ -64,10 +70,9 @@ XGUI_PropertyPanel::XGUI_PropertyPanel(QWidget* theParent) } aBtnLay->insertStretch(1, 1); - myCustomWidget = new QWidget(aContent); - myCustomWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); - myMainLayout->addWidget(myCustomWidget, aPanelRow, kPanelColumn); - setStretchEnabled(true); + myPanelPage = new ModuleBase_PageWidget(aContent); + myPanelPage->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + aMainLayout->addWidget(myPanelPage, aPanelRow, kPanelColumn); } XGUI_PropertyPanel::~XGUI_PropertyPanel() @@ -79,7 +84,7 @@ void XGUI_PropertyPanel::cleanContent() if (myActiveWidget) myActiveWidget->deactivate(); myWidgets.clear(); - qDeleteAll(myCustomWidget->children()); + myPanelPage->clearPage(); myActiveWidget = NULL; setWindowTitle(tr("Property Panel")); } @@ -88,13 +93,13 @@ void XGUI_PropertyPanel::setModelWidgets(const QList& t { myWidgets = theWidgets; if (theWidgets.empty()) return; - QList::const_iterator anIt = theWidgets.begin(); - for (; anIt != theWidgets.end(); anIt++) { - connect(*anIt, SIGNAL(keyReleased(QKeyEvent*)), this, SIGNAL(keyReleased(QKeyEvent*))); - connect(*anIt, SIGNAL(focusOutWidget(ModuleBase_ModelWidget*)), - this, SLOT(activateNextWidget(ModuleBase_ModelWidget*))); - connect(*anIt, SIGNAL(focusInWidget(ModuleBase_ModelWidget*)), - this, SLOT(activateWidget(ModuleBase_ModelWidget*))); + foreach (ModuleBase_ModelWidget* aWidget, theWidgets) { + connect(aWidget, SIGNAL(focusInWidget(ModuleBase_ModelWidget*)), + this, SLOT(activateWidget(ModuleBase_ModelWidget*))); + connect(aWidget, SIGNAL(focusOutWidget(ModuleBase_ModelWidget*)), + this, SLOT(activateNextWidget(ModuleBase_ModelWidget*))); + connect(aWidget, SIGNAL(keyReleased(QKeyEvent*)), + this, SIGNAL(keyReleased(QKeyEvent*))); } ModuleBase_ModelWidget* aLastWidget = theWidgets.last(); if (aLastWidget) { @@ -116,9 +121,10 @@ const QList& XGUI_PropertyPanel::modelWidgets() const return myWidgets; } -QWidget* XGUI_PropertyPanel::contentWidget() +ModuleBase_PageBase* XGUI_PropertyPanel::contentWidget() { - return myCustomWidget; + + return static_cast(myPanelPage); } void XGUI_PropertyPanel::updateContentWidget(FeaturePtr theFeature) @@ -128,9 +134,9 @@ void XGUI_PropertyPanel::updateContentWidget(FeaturePtr theFeature) return; if (theFeature->isAction() || !theFeature->data()) return; - foreach(ModuleBase_ModelWidget* eachWidget, myWidgets) - { - eachWidget->setFeature(theFeature); + foreach(ModuleBase_ModelWidget* eachWidget, myWidgets) { + if (!eachWidget->feature().get()) + eachWidget->setFeature(theFeature); eachWidget->restoreValue(); } // the repaint is used here to immediately react in GUI to the values change. @@ -157,17 +163,9 @@ void XGUI_PropertyPanel::activateNextWidget(ModuleBase_ModelWidget* theWidget) } // Normaly focusTo is enough to activate widget // here is a special case on mouse click in the viewer - //if(aNextWidget == NULL) { + if(aNextWidget == NULL) { activateWidget(aNextWidget); - //} -} - -void XGUI_PropertyPanel::setStretchEnabled(bool isEnabled) -{ - int aStretchIdx = myMainLayout->rowCount() - 1; - if (aStretchIdx < 0) - return; - myMainLayout->setRowStretch(aStretchIdx, isEnabled ? 1 : 0); + } } void XGUI_PropertyPanel::activateNextWidget() @@ -178,23 +176,24 @@ void XGUI_PropertyPanel::activateNextWidget() void XGUI_PropertyPanel::activateWidget(ModuleBase_ModelWidget* theWidget) { // Avoid activation of already actve widget. It could happen on focusIn event many times - if (theWidget == myActiveWidget) + if (theWidget == myActiveWidget) { return; + } if(myActiveWidget) { myActiveWidget->deactivate(); myActiveWidget->setHighlighted(false); } if(theWidget) { - if (theWidget) - emit beforeWidgetActivated(theWidget); - theWidget->activate(); + emit beforeWidgetActivated(theWidget); theWidget->setHighlighted(true); + theWidget->activate(); } myActiveWidget = theWidget; - if (myActiveWidget) + if (myActiveWidget) { emit widgetActivated(theWidget); - else if (!isEditingMode()) + } else if (!isEditingMode()) { emit noMoreWidgets(); + } } void XGUI_PropertyPanel::setCancelEnabled(bool theEnabled) @@ -229,3 +228,13 @@ void XGUI_PropertyPanel::setupActions(XGUI_ActionsMgr* theMgr) aBtn->setDefaultAction(anAct); } } + +ModuleBase_ModelWidget* XGUI_PropertyPanel::preselectionWidget() const +{ + return myPreselectionWidget; +} + +void XGUI_PropertyPanel::setPreselectionWidget(ModuleBase_ModelWidget* theWidget) +{ + myPreselectionWidget = theWidget; +}