shape_types="faces objects">
<validator id="FeaturesPlugin_ValidatorCompositeLauncher" parameters="base,Sketch"/>
</sketch_launcher>
- <composite_multi_selector id="base"
+ <multi_selector id="base"
label="Base objects:"
tooltip="Select a base objects"
type_choice="faces objects">
<validator id="FeaturesPlugin_ValidatorBaseForGeneration" parameters="vertex,edge,wire,face,shell"/>
- </composite_multi_selector>
+ </multi_selector>
<shape_selector id="direction_object"
icon=":icons/axis.png"
label="Direction"
shape_types="face objects">
<validator id="FeaturesPlugin_ValidatorCompositeLauncher" parameters="base,Sketch"/>
</sketch_launcher>
- <composite_multi_selector id="base"
+ <multi_selector id="base"
label="Select a sketch face"
icon=":icons/sketch.png"
tooltip="Select a sketch face"
type_choice="Faces Objects">
<validator id="FeaturesPlugin_ValidatorBaseForGeneration" parameters="face,shell"/>
- </composite_multi_selector>
+ </multi_selector>
<shape_selector id="direction_object"
icon=":icons/axis.png"
label="Direction"
shape_types="face objects">
<validator id="FeaturesPlugin_ValidatorCompositeLauncher" parameters="base,Sketch"/>
</sketch_launcher>
- <composite_multi_selector id="base"
+ <multi_selector id="base"
label="Select a sketch face"
icon=":icons/sketch.png"
tooltip="Select a sketch face"
type_choice="Faces Objects">
<validator id="FeaturesPlugin_ValidatorBaseForGeneration" parameters="vertex,edge,wire,face,shell"/>
- </composite_multi_selector>
+ </multi_selector>
<shape_selector id="direction_object"
icon=":icons/axis.png"
label="Direction"
shape_types="faces objects">
<validator id="FeaturesPlugin_ValidatorCompositeLauncher" parameters="base,Sketch"/>
</sketch_launcher>
- <composite_multi_selector id="base"
+ <multi_selector id="base"
label="Base objects:"
tooltip="Select a base objects"
type_choice="faces objects">
<validator id="FeaturesPlugin_ValidatorBaseForGeneration" parameters="vertex,edge,wire,face,shell"/>
- </composite_multi_selector>
+ </multi_selector>
<shape_selector id="axis_object"
icon=":icons/axis.png"
label="Axis"
shape_types="face objects">
<validator id="FeaturesPlugin_ValidatorCompositeLauncher" parameters="base,Sketch"/>
</sketch_launcher>
- <composite_multi_selector id="base"
+ <multi_selector id="base"
label="Select a sketch face"
icon=":icons/sketch.png"
tooltip="Select a sketch face"
type_choice="Faces Objects">
<validator id="FeaturesPlugin_ValidatorBaseForGeneration" parameters="face,shell"/>
- </composite_multi_selector>
+ </multi_selector>
<shape_selector id="axis_object"
icon=":icons/axis.png"
label="Axis"
shape_types="face objects">
<validator id="FeaturesPlugin_ValidatorCompositeLauncher" parameters="base,Sketch"/>
</sketch_launcher>
- <composite_multi_selector id="base"
+ <multi_selector id="base"
label="Select a sketch face"
icon=":icons/sketch.png"
tooltip="Select a sketch face"
type_choice="Faces Objects">
<validator id="FeaturesPlugin_ValidatorBaseForGeneration" parameters="vertex,edge,wire,face,shell"/>
- </composite_multi_selector>
+ </multi_selector>
<shape_selector id="axis_object"
icon=":icons/axis.png"
label="Axis"
void ModuleBase_OperationFeature::initSelection(ModuleBase_ISelection* theSelection,
ModuleBase_IViewer* theViewer)
{
- clearPreselection();
-
QList<ModuleBase_ViewerPrs> aPreSelected;
// Check that the selected result are not results of operation feature
FeaturePtr aFeature = feature();
} else
aPreSelected = theSelection->getSelected(ModuleBase_ISelection::AllControls);
- myPreSelection = aPreSelected;
+ setPreselection(aPreSelected);
+}
+
+void ModuleBase_OperationFeature::setPreselection(const QList<ModuleBase_ViewerPrs>& theValues)
+{
+ clearPreselection();
+ myPreSelection = theValues;
}
void ModuleBase_OperationFeature::clearPreselection()
virtual void initSelection(ModuleBase_ISelection* theSelection,
ModuleBase_IViewer* theViewer);
+ /// Fill internal map by preselection
+ /// \param theValues a list of preselection
+ void setPreselection(const QList<ModuleBase_ViewerPrs>& theValues);
+
/// \brief Set property pane to the operation
/// \param theProp a property panel instance
virtual void setPropertyPanel(ModuleBase_IPropertyPanel* theProp);
PartSet_WidgetPoint2d.h
PartSet_WidgetEditor.h
PartSet_WidgetMultiSelector.h
- PartSet_WidgetMultiSelectorComposite.h
PartSet_WidgetPoint2dDistance.h
PartSet_WidgetPoint2DFlyout.h
PartSet_WidgetShapeSelector.h
PartSet_Validators.cpp
PartSet_WidgetEditor.cpp
PartSet_WidgetMultiSelector.cpp
- PartSet_WidgetMultiSelectorComposite.cpp
PartSet_WidgetPoint2d.cpp
PartSet_WidgetPoint2dDistance.cpp
PartSet_WidgetPoint2DFlyout.cpp
#include "PartSet_WidgetPoint2DFlyout.h"
#include "PartSet_WidgetShapeSelector.h"
#include "PartSet_WidgetMultiSelector.h"
-#include "PartSet_WidgetMultiSelectorComposite.h"
#include "PartSet_WidgetEditor.h"
#include "PartSet_WidgetFileSelector.h"
#include "PartSet_WidgetSketchCreator.h"
new PartSet_WidgetMultiSelector(theParent, aWorkshop, theWidgetApi);
aShapeSelectorWgt->setSketcher(mySketchMgr->activeSketch());
aWgt = aShapeSelectorWgt;
- } else if (theType == "composite_multi_selector") {
- PartSet_WidgetMultiSelectorComposite* aShapeSelectorWgt =
- new PartSet_WidgetMultiSelectorComposite(theParent, aWorkshop, theWidgetApi);
- aWgt = aShapeSelectorWgt;
}
else if (theType == WDG_DOUBLEVALUE_EDITOR) {
aWgt = new PartSet_WidgetEditor(theParent, aWorkshop, theWidgetApi);
+++ /dev/null
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-
-// File: PartSet_WidgetMultiSelectorComposite.cpp
-// Created: 17 Mar 2016
-// Author: Natalia Ermolaeva
-
-#include "PartSet_WidgetMultiSelectorComposite.h"
-
-PartSet_WidgetMultiSelectorComposite::PartSet_WidgetMultiSelectorComposite(QWidget* theParent,
- ModuleBase_IWorkshop* theWorkshop,
- const Config_WidgetAPI* theData)
-: ModuleBase_WidgetMultiSelector(theParent, theWorkshop, theData)
-{
-}
-
-PartSet_WidgetMultiSelectorComposite::~PartSet_WidgetMultiSelectorComposite()
-{
-}
-
-bool PartSet_WidgetMultiSelectorComposite::focusTo()
-{
- bool aCanHaveFocus = true;
-
- if (hasSubObjects()) {
- // disable widget controls
- disableControls();
- aCanHaveFocus = false;
- }
- else
- aCanHaveFocus = ModuleBase_WidgetMultiSelector::focusTo();
- return aCanHaveFocus;
-}
-
-void PartSet_WidgetMultiSelectorComposite::setEditingMode(bool isEditing)
-{
- ModuleBase_ModelWidget::setEditingMode(isEditing);
- bool aHasSubObjects = hasSubObjects();
- if (aHasSubObjects)
- disableControls();
-}
-
-bool PartSet_WidgetMultiSelectorComposite::hasSubObjects() const
-{
- bool aHasSubObjects = false;
-
- bool aCanSetFocus = true;
- CompositeFeaturePtr aComposite = std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(myFeature);
- if (aComposite.get())
- aHasSubObjects = aComposite->numberOfSubs() > 0;
- return aHasSubObjects;
-}
-
-void PartSet_WidgetMultiSelectorComposite::disableControls()
-{
- QList<QWidget*> aMyControls = getControls();
- foreach(QWidget* eachControl, aMyControls) {
- eachControl->setFocusPolicy(Qt::NoFocus);
- eachControl->setEnabled(false);
- }
-}
+++ /dev/null
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-
-// File: PartSet_WidgetMultiSelectorComposite.h
-// Created: 17 Mar 2016
-// Author: Natalia Ermolaeva
-
-#ifndef PartSet_WidgetMultiSelectorComposite_H
-#define PartSet_WidgetMultiSelectorComposite_H
-
-#include "PartSet.h"
-
-#include <ModuleBase_WidgetMultiSelector.h>
-
-#include <ModelAPI_CompositeFeature.h>
-
-/**
-* \ingroup Modules
-* Customosation of ModuleBase_WidgetMultiSelector in order to provide
-* working with sketch specific objects and creation of external objects.
-*/
-class PARTSET_EXPORT PartSet_WidgetMultiSelectorComposite: public ModuleBase_WidgetMultiSelector
-{
-Q_OBJECT
- public:
- /// Constructor
- /// \param theParent the parent object
- /// \param theWorkshop instance of workshop interface
- /// \param theData the widget configuation. The attribute of the model widget is obtained from
- PartSet_WidgetMultiSelectorComposite(QWidget* theParent, ModuleBase_IWorkshop* theWorkshop,
- const Config_WidgetAPI* theData);
-
- virtual ~PartSet_WidgetMultiSelectorComposite();
-
- /// Set focus to the first control of the current widget. The focus policy of the control is checked.
- /// If the widget has the NonFocus focus policy, it is skipped.
- /// \return the state whether the widget can accept the focus
- virtual bool focusTo();
-
- /// Editing mode depends on mode of current operation. This value is defined by it.
- virtual void setEditingMode(bool isEditing);
-
-private:
- /// Returns true if the current composite feature contains at least one sub-object
- /// \return boolean value
- bool hasSubObjects() const;
-
- /// Disable controls by setting them focus policy NoFocus and disabling them
- void disableControls();
-};
-
-#endif
\ No newline at end of file
#include <QMessageBox>
#include <QMainWindow>
-//#define DEBUG_UNDO_INVALID_SKETCH
+#define DEBUG_UNDO_INVALID_SKETCH
PartSet_WidgetSketchCreator::PartSet_WidgetSketchCreator(QWidget* theParent,
PartSet_Module* theModule,
myLabel->setWordWrap(true);
aLayout->addWidget(myLabel);
aLayout->addStretch(1);
- /*if (!aLabelIcon.isEmpty())
- myLabel->setPixmap(QPixmap(aLabelIcon));
-
-
- QString aToolTip = QString::fromStdString(theData->widgetTooltip());
- myTextLine = new QLineEdit(this);
- myTextLine->setReadOnly(true);
- myTextLine->setToolTip(aToolTip);
- myTextLine->installEventFilter(this);
-
- myLabel->setToolTip(aToolTip);
-
- aLayout->addRow(myLabel, myTextLine);*/
std::string aTypes = theData->getProperty("shape_types");
myShapeTypes = QString(aTypes.c_str()).split(' ', QString::SkipEmptyParts);
PartSet_WidgetSketchCreator::~PartSet_WidgetSketchCreator()
{
+ // we need to deactivate here in order to hide preview planes if the selection mode is
+ // active
+ deactivate();
}
QList<QWidget*> PartSet_WidgetSketchCreator::getControls() const
bool PartSet_WidgetSketchCreator::restoreValueCustom()
{
- /*CompositeFeaturePtr aCompFeature =
- std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(myFeature);
- if (aCompFeature->numberOfSubs() > 0) {
- FeaturePtr aSubFeature = aCompFeature->subFeature(0);
- myTextLine->setText(QString::fromStdString(aSubFeature->data()->name()));
- }*/
return true;
}
void PartSet_WidgetSketchCreator::activateSelectionControl()
{
- setVisibleSelectionControl(true);
-
// we need to call activate here as the widget has no focus accepted controls
// if these controls are added here, activate will happens automatically after focusIn()
XGUI_Workshop* aWorkshop = XGUI_Tools::workshop(myModule->workshop());
else { // hide current control
if (aWidget == this)
aWidget->setVisible(false);
- else
+ else {
aWidget->setVisible(true);
+ if (aWidget->attributeID() == myAttributeListID)
+ setEnabledModelWidget(aWidget, !hasSubObjects());
+ }
}
}
void PartSet_WidgetSketchCreator::setEditingMode(bool isEditing)
{
ModuleBase_ModelWidget::setEditingMode(isEditing);
- if (isEditing)
+ if (isEditing) {
setVisibleSelectionControl(false);
+
+ ModuleBase_ModelWidget* anAttributeListWidget = 0;
+ XGUI_Workshop* aWorkshop = XGUI_Tools::workshop(myModule->workshop());
+ XGUI_PropertyPanel* aPanel = aWorkshop->propertyPanel();
+ const QList<ModuleBase_ModelWidget*>& aWidgets = aPanel->modelWidgets();
+ foreach(ModuleBase_ModelWidget* aWidget, aWidgets) {
+ if (aWidget->attributeID() == myAttributeListID) {
+ anAttributeListWidget = aWidget;
+ break;
+ }
+ }
+ if (anAttributeListWidget)
+ setEnabledModelWidget(anAttributeListWidget, !hasSubObjects());
+ }
}
bool PartSet_WidgetSketchCreator::isSelectionMode() const
return !aHasValueInList;
}
+bool PartSet_WidgetSketchCreator::hasSubObjects() const
+{
+ bool aHasSubObjects = false;
+
+ bool aCanSetFocus = true;
+ CompositeFeaturePtr aComposite = std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(myFeature);
+ if (aComposite.get())
+ aHasSubObjects = aComposite->numberOfSubs() > 0;
+ return aHasSubObjects;
+}
+
bool PartSet_WidgetSketchCreator::setSelection(QList<ModuleBase_ViewerPrs>& theValues,
const bool theToValidate)
{
CompositeFeaturePtr aCompFeature =
std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(myFeature);
- /// add sketch feature without current feature change.
- /// it is important to do not change the current feature in order to
- /// after sketch edition, the extrusion cut feature becomes current
- SessionPtr aMgr = ModelAPI_Session::get();
- DocumentPtr aDoc = aMgr->activeDocument();
- FeaturePtr aPreviousCurrentFeature = aDoc->currentFeature(false);
- FeaturePtr aSketch = aCompFeature->addFeature("Sketch");
-
- PartSet_WidgetSketchLabel::fillSketchPlaneBySelection(aSketch, aValue);
-
- aDoc->setCurrentFeature(aPreviousCurrentFeature, false);
-
// start edit operation for the sketch
ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>
(myModule->createOperation("Sketch"));
- if (aFOperation)
- aFOperation->setFeature(aSketch);
+ QList<ModuleBase_ViewerPrs> aValues;
+ aValues.push_back(aValue);
+ aFOperation->setPreselection(aValues);
+
myModule->sendOperation(aFOperation);
return aSketchStarted;
bool PartSet_WidgetSketchCreator::focusTo()
{
// this method is called only in creation mode. In Edition mode this widget is hidden
- CompositeFeaturePtr aCompFeature =
- std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(myFeature);
- if (isSelectionMode() && aCompFeature->numberOfSubs() == 0) {
+ if (isSelectionMode() && !hasSubObjects()) {
+ setVisibleSelectionControl(true);
activateSelectionControl();
openExtrusionTransaction();
return true;
}
else
connect(myModule, SIGNAL(resumed(ModuleBase_Operation*)), SLOT(onResumed(ModuleBase_Operation*)));
- return false;
+
+ return true;
}
void PartSet_WidgetSketchCreator::deactivate()
}
openExtrusionTransaction();
- if (aCompFeature->numberOfSubs() > 0) {
+ if (aCompFeature->numberOfSubs() == 0) {
+ // call activateWidget() of the parent to connect to the viewer seleciton
+ activateSelectionControl();
+ }
+ else {
// check if the created sketch is valid. If it is invalid, it will be deleted with warning else
/// the attribute selection list will be filled by result of this sketch.
setVisibleSelectionControl(false);
aBaseObjectsSelectionList->append(aSketchRes, GeomShapePtr());
}
}
+
+void PartSet_WidgetSketchCreator::setEnabledModelWidget(ModuleBase_ModelWidget* theModelWidget,
+ const bool theEnabled)
+{
+ QList<QWidget*> aMyControls = theModelWidget->getControls();
+ foreach(QWidget* eachControl, aMyControls) {
+ eachControl->setEnabled(theEnabled);
+ }
+}
#include <ModuleBase_WidgetSelector.h>
class QLabel;
-class QLineEdit;
class PartSet_Module;
class ModelAPI_Tools;
class ModuleBase_Operation;
/// \return boolean value
bool isSelectionMode() const;
+ /// Returns true if the current composite feature contains at least one sub-object
+ /// \return boolean value
+ bool hasSubObjects() const;
+
private slots:
void onResumed(ModuleBase_Operation* theOp);
/// \return true if validation succeed
bool validateSelectionList() const;
+ /// Change enable state of controls in the model widget by the attribute identifier
+ /// \param theModelWidget a model widget
+ /// \param theEnabled a state if the controls should be enabled/disabled
+ void setEnabledModelWidget(ModuleBase_ModelWidget* theModelWidget,
+ const bool theEnabled);
+
private:
std::string myAttributeListID;
/// Label of the widget
QLabel* myLabel;
- /// Input control of the widget
- QLineEdit* myTextLine;
-
/// List of accepting shapes types
QStringList myShapeTypes;