]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Edit name for group
authorvsv <vsv@opencascade.com>
Tue, 5 Dec 2017 10:56:55 +0000 (13:56 +0300)
committervsv <vsv@opencascade.com>
Tue, 5 Dec 2017 10:56:55 +0000 (13:56 +0300)
src/CollectionPlugin/group_widget.xml
src/Config/Config_Keywords.h
src/ModuleBase/CMakeLists.txt
src/ModuleBase/ModuleBase_ModelWidget.h
src/ModuleBase/ModuleBase_WidgetFactory.cpp
src/ModuleBase/ModuleBase_WidgetLineEdit.h
src/ModuleBase/ModuleBase_WidgetMultiSelector.cpp
src/ModuleBase/ModuleBase_WidgetMultiSelector.h
src/ModuleBase/ModuleBase_WidgetNameEdit.cpp [new file with mode: 0644]
src/ModuleBase/ModuleBase_WidgetNameEdit.h [new file with mode: 0644]
src/XGUI/XGUI_Workshop.cpp

index 31c1c367967596c3b2c026ffc469aa3924291416..fab719c415252a9afd7bc0722b5e1bb7a08c1b82 100644 (file)
@@ -20,6 +20,10 @@ email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com
 -->
 
 <source>
+  <namevalue id="name"
+    label="Name"
+    placeholder="Please input the group name">
+  </namevalue>
   <multi_selector id="group_list"
     tooltip="Select a set of objects"
     type_choice="Vertices Edges Faces Solids"
index da19a07e643d1a85b87774a1ef0ed5316bbbb175..cd2253bfec41d639c3d0d32204b94c78e62a5442 100644 (file)
@@ -41,6 +41,7 @@ const static char* WDG_DOUBLEVALUELABEL = "labelvalue";
 const static char* WDG_INTEGERVALUE = "integervalue";
 const static char* WDG_BOOLVALUE = "boolvalue";
 const static char* WDG_STRINGVALUE = "stringvalue";
+const static char* WDG_NAMEVALUE = "namevalue";
 const static char* WDG_MULTISELECTOR = "multi_selector";
 const static char* WDG_SHAPE_SELECTOR = "shape_selector";
 const static char* WDG_FEATURE_SELECTOR = "feature_selector";
index d536ef23d12246754133dcb4e2c66866f7a65235..a849fa00f9409e444d6683f3df9fa21a46a274f9 100644 (file)
@@ -95,6 +95,7 @@ SET(PROJECT_HEADERS
   ModuleBase_Dialog.h
   ModuleBase_ModelDialogWidget.h
   ModuleBase_ChoiceCtrl.h
+  ModuleBase_WidgetNameEdit.h
 )
 
 SET(PROJECT_MOC_HEADERS
@@ -140,6 +141,7 @@ SET(PROJECT_MOC_HEADERS
   ModuleBase_WidgetToolbox.h
   ModuleBase_WidgetValidated.h
   ModuleBase_ChoiceCtrl.h
+  ModuleBase_WidgetNameEdit.h
 )
 
 SET(PROJECT_SOURCES
@@ -203,6 +205,7 @@ SET(PROJECT_SOURCES
   ModuleBase_SelectionValidator.cpp
   ModuleBase_Dialog.cpp
   ModuleBase_ChoiceCtrl.cpp
+  ModuleBase_WidgetNameEdit.cpp
 )
 
 SET(PROJECT_LIBRARIES
index 4882e290317761c872cc6d83df7e62b6eccece0b..b72edb9c64075ef909889ebd41d6524f4c5bc4d0 100644 (file)
@@ -265,6 +265,11 @@ Q_OBJECT
   /// \return a model widget or NULL
   static ModuleBase_ModelWidget* findModelWidget(ModuleBase_IPropertyPanel* theProp,
                                                  QWidget* theWidget);
+
+  /// Returns True if the widget uses feature attribute.
+  /// If not then it means that the widget do not need attribute at all.
+  virtual bool usesAttribute() const { return true; }
+
 signals:
   /// The signal about widget values are to be changed
   void beforeValuesChanged();
index ecba43238c54b0249e6e9c63b8889e43e8a0fc49..cc62794037c6db483da4dee52bb349a8ce604f64 100644 (file)
@@ -37,6 +37,7 @@
 #include <ModuleBase_IModule.h>
 #include <ModuleBase_Tools.h>
 #include <ModuleBase_WidgetLineEdit.h>
+#include <ModuleBase_WidgetNameEdit.h>
 #include <ModuleBase_WidgetMultiSelector.h>
 #include <ModuleBase_WidgetConcealedObjects.h>
 #include <ModuleBase_WidgetLabel.h>
@@ -317,6 +318,9 @@ ModuleBase_ModelWidget* ModuleBase_WidgetFactory::createWidgetByType(const std::
   } else if (theType == WDG_STRINGVALUE) {
     std::string aPlaceHolder = myWidgetApi->getProperty( WDG_PLACE_HOLDER );
     result = new ModuleBase_WidgetLineEdit( theParent, myWidgetApi, aPlaceHolder );
+  } else if (theType == WDG_NAMEVALUE) {
+    std::string aPlaceHolder = myWidgetApi->getProperty( WDG_PLACE_HOLDER );
+    result = new ModuleBase_WidgetNameEdit( theParent, myWidgetApi, aPlaceHolder );
   } else if (theType == WDG_EXPR_EDITOR) {
     std::string aPlaceHolder = myWidgetApi->getProperty( WDG_PLACE_HOLDER );
     result = new ModuleBase_WidgetExprEditor( theParent, myWidgetApi, aPlaceHolder );
index aee98f9f418735dec8293e96aacafc87091852fd..1ce71ef22e61700e4c7a2c005e43821a86fcb92f 100644 (file)
@@ -63,7 +63,6 @@ protected:
   /// Redefinition of virtual method
   virtual bool restoreValueCustom();
 
-private:
    /// A line edit control
   QLineEdit* myLineEdit;
 };
index fd4fd7bcbd120015da418a91494a86043d889148..e59721ff6a18463d13a9fe7b528017b1a77f22d0 100755 (executable)
@@ -22,6 +22,7 @@
 #include <ModuleBase_WidgetShapeSelector.h>
 #include <ModuleBase_ISelection.h>
 #include <ModuleBase_IWorkshop.h>
+#include <ModuleBase_IPropertyPanel.h>
 #include <ModuleBase_IViewer.h>
 #include <ModuleBase_Tools.h>
 #include <ModuleBase_Definitions.h>
@@ -152,19 +153,13 @@ ModuleBase_WidgetMultiSelector::ModuleBase_WidgetMultiSelector(QWidget* theParen
   QGridLayout* aMainLay = new QGridLayout(this);
   ModuleBase_Tools::adjustMargins(aMainLay);
 
-  //QLabel* aTypeLabel = new QLabel(tr("Type"), this);
-  //aMainLay->addWidget(aTypeLabel, 0, 0);
-
-  //myTypeCombo = new QComboBox(this);
   QStringList aIconsList = getIconsList(myShapeTypes);
   myTypeCtrl = new ModuleBase_ChoiceCtrl(this, myShapeTypes, aIconsList);
   myTypeCtrl->setLabel(tr("Type"));
   myTypeCtrl->setValue(0);
+  aMainLay->addWidget(myTypeCtrl, 0, 0, 1, 2);
 
   // There is no sense to parameterize list of types while we can not parameterize selection mode
-  //if (!aShapeTypes.empty())
-  //  myTypeCombo->addItems(aShapeTypes);
-  aMainLay->addWidget(myTypeCtrl, 0, 0, 1, 2);
   // if the xml definition contains one type, the controls to select a type should not be shown
   if (myShapeTypes.size() <= 1 || !myIsUseChoice) {
     myTypeCtrl->setVisible(false);
@@ -253,7 +248,6 @@ bool ModuleBase_WidgetMultiSelector::storeValueCustom()
   std::string aType = anAttribute->attributeType();
   if (aType == ModelAPI_AttributeSelectionList::typeId()) {
     AttributeSelectionListPtr aSelectionListAttr = myFeature->data()->selectionList(attributeID());
-    //aSelectionListAttr->setSelectionType(myTypeCombo->currentText().toStdString());
     aSelectionListAttr->setSelectionType(myTypeCtrl->textValue().toStdString());
   }
   return true;
@@ -505,7 +499,6 @@ bool ModuleBase_WidgetMultiSelector::processDelete()
 QList<QWidget*> ModuleBase_WidgetMultiSelector::getControls() const
 {
   QList<QWidget*> result;
-  //result << myTypeCombo;
   result << myListControl;
   return result;
 }
@@ -551,6 +544,9 @@ void ModuleBase_WidgetMultiSelector::onSelectionTypeChanged()
                             true); /// hope that something is redisplayed by object updated
   // clear history should follow after set selected to do not increase history by setSelected
   clearSelectedHistory();
+
+  if (myWorkshop->propertyPanel()->activeWidget() != this)
+    myWorkshop->propertyPanel()->activateWidget(this);
 }
 
 //********************************************************************
@@ -670,8 +666,6 @@ void ModuleBase_WidgetMultiSelector::setCurrentShapeType(const int theShapeType)
 {
   QString aShapeTypeName;
 
-  //for (int idx = 0; idx < myTypeCombo->count(); ++idx) {
-  //  aShapeTypeName = myTypeCombo->itemText(idx);
   int idx = 0;
   foreach (QString aShapeTypeName, myShapeTypes) {
     int aRefType = ModuleBase_Tools::shapeType(aShapeTypeName);
index ca4830e67f3c3cd1e5a00607fda7d8cbd0782a17..c8dcdf66ffa3fa42e18e427209b2ca25b50c1201 100755 (executable)
@@ -244,6 +244,7 @@ protected:
 
   /// A container of selected objects
   QList<QList<std::shared_ptr<ModuleBase_ViewerPrs> > > mySelectedHistoryValues;
+
   /// Position in a container of selected values
   int myCurrentHistoryIndex;
 };
diff --git a/src/ModuleBase/ModuleBase_WidgetNameEdit.cpp b/src/ModuleBase/ModuleBase_WidgetNameEdit.cpp
new file mode 100644 (file)
index 0000000..e97666f
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or
+// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+//
+
+#include <ModuleBase_WidgetNameEdit.h>
+
+#include <QLineEdit>
+
+bool ModuleBase_WidgetNameEdit::storeValueCustom()
+{
+  if(!myFeature)
+    return false;
+
+  QString aValue = myLineEdit->text();
+  myFeature->data()->setName(aValue.toStdString());
+  updateObject(myFeature);
+  return true;
+}
+
+bool ModuleBase_WidgetNameEdit::restoreValueCustom()
+{
+  if(!myFeature)
+    return false;
+
+  bool isBlocked = myLineEdit->blockSignals(true);
+  myLineEdit->setText(QString::fromStdString(myFeature->data()->name()));
+  myLineEdit->blockSignals(isBlocked);
+
+  return true;
+}
\ No newline at end of file
diff --git a/src/ModuleBase/ModuleBase_WidgetNameEdit.h b/src/ModuleBase/ModuleBase_WidgetNameEdit.h
new file mode 100644 (file)
index 0000000..ba090c4
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or
+// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+//
+
+#ifndef MODULEBASE_WIDGETNAMEEDIT_H_
+#define MODULEBASE_WIDGETNAMEEDIT_H_
+
+#include <ModuleBase.h>
+#include <ModuleBase_WidgetLineEdit.h>
+
+class ModuleBase_WidgetNameEdit : public ModuleBase_WidgetLineEdit
+{
+  Q_OBJECT
+public:
+  ModuleBase_WidgetNameEdit( QWidget* theParent,
+                             const Config_WidgetAPI* theData,
+                             const std::string& thePlaceHolder )
+             : ModuleBase_WidgetLineEdit(theParent, theData, thePlaceHolder) {}
+
+  /// Returns True if the widget uses feature attribute.
+  /// If not then it means that the widget do not need attribute at all.
+  virtual bool usesAttribute() const { return false; }
+
+protected:
+    /// Saves the internal parameters to the given feature
+  /// \return True in success
+  virtual bool storeValueCustom();
+
+  /// Redefinition of virtual method
+  virtual bool restoreValueCustom();
+};
+
+#endif
\ No newline at end of file
index 17be4e5309218cd94261291618e6ae54b8dc33ff..e3e1468c2689aec7e781bd8f77e81c87a930ab92 100755 (executable)
@@ -598,13 +598,15 @@ void XGUI_Workshop::fillPropertyPanel(ModuleBase_Operation* theOperation)
   FeaturePtr aFeature = aFOperation->feature();
   std::string aFeatureKind = aFeature->getKind();
   foreach (ModuleBase_ModelWidget* aWidget, aWidgets) {
-    if (!aWidget->attributeID().empty() && !aFeature->attribute(aWidget->attributeID()).get()) {
-      std::string anErrorMsg = "The feature '%1' has no attribute '%2' used by widget '%3'.";
-      Events_InfoMessage("XGUI_Workshop", anErrorMsg)
-        .arg(aFeatureKind).arg(aWidget->attributeID())
-        .arg(aWidget->metaObject()->className()).send();
-      myPropertyPanel->cleanContent();
-      return;
+    if (aWidget->usesAttribute()) {
+      if (!aWidget->attributeID().empty() && !aFeature->attribute(aWidget->attributeID()).get()) {
+        std::string anErrorMsg = "The feature '%1' has no attribute '%2' used by widget '%3'.";
+        Events_InfoMessage("XGUI_Workshop", anErrorMsg)
+          .arg(aFeatureKind).arg(aWidget->attributeID())
+          .arg(aWidget->metaObject()->className()).send();
+        myPropertyPanel->cleanContent();
+        return;
+      }
     }
   }
   // for performance purpose, flush should be done after all controls are filled