final modification to use in the property panel the operation widgets.
To do: the property panel clear the widgets, but should not do it.
#include "ModuleBase_IOperation.h"
#include "ModuleBase_OperationDescription.h"
+#include "ModuleBase_ModelWidget.h"
#include <ModelAPI_Document.h>
#include <ModelAPI_PluginManager.h>
return false;
}
+void ModuleBase_IOperation::setModelWidgets(const std::string& theXmlRepresentation,
+ QList<ModuleBase_ModelWidget*> theWidgets)
+{
+ QList<ModuleBase_ModelWidget*>::const_iterator anIt = theWidgets.begin(), aLast = theWidgets.end();
+ for (; anIt != aLast; anIt++) {
+ QObject::connect(*anIt, SIGNAL(valuesChanged()), this, SLOT(storeCustomValue()));
+ }
+ getDescription()->setModelWidgets(theXmlRepresentation, theWidgets);
+}
+
boost::shared_ptr<ModelAPI_Document> ModuleBase_IOperation::document() const
{
return ModelAPI_PluginManager::get()->rootDocument();
#include <QObject>
#include <QString>
+#include <QList>
#include <boost/shared_ptr.hpp>
class ModelAPI_Document;
class ModuleBase_OperationDescription;
+class ModuleBase_ModelWidget;
/*!
\class ModuleBase_IOperation
/// \param theOperation the previous running operation
virtual bool isGranted(ModuleBase_IOperation* theOperation) const;
+ /// Sets a list of model widgets, according to the operation feature xml definition
+ /// \param theXmlRepresentation an xml feature definition
+ /// \param theWidgets a list of widgets
+ void setModelWidgets(const std::string& theXmlRepresentation,
+ QList<ModuleBase_ModelWidget*> theWidgets);
+
signals:
void started(); /// the operation is started
void aborted(); /// the operation is aborted
FeaturePtr ModuleBase_Operation::createFeature(const bool theFlushMessage)
{
boost::shared_ptr<ModelAPI_Document> aDoc = document();
- FeaturePtr aFeature = aDoc->addFeature(
- getDescription()->operationId().toStdString());
- if (aFeature) // TODO: generate an error if feature was not created
+ FeaturePtr aFeature = aDoc->addFeature(getDescription()->operationId().toStdString());
+ if (aFeature) { // TODO: generate an error if feature was not created
aFeature->execute();
+ // Init default values
+ QList<ModuleBase_ModelWidget*> aWidgets = getDescription()->modelWidgets();
+ QList<ModuleBase_ModelWidget*>::const_iterator anIt = aWidgets.begin(), aLast = aWidgets.end();
+ for (; anIt != aLast; anIt++) {
+ (*anIt)->storeValue(aFeature);
+ }
+ }
if (theFlushMessage)
flushCreated();
return myOperationId;
}
-const QString& ModuleBase_OperationDescription::xmlRepresentation() const
+const QString& ModuleBase_OperationDescription::description() const
{
- return myXmlRepr;
+ return myDescription;
}
-void ModuleBase_OperationDescription::setXmlRepresentation(const QString& xmlRepr)
+void ModuleBase_OperationDescription::setDescription(const QString& theDescription)
{
- myXmlRepr = xmlRepr;
+ myDescription = theDescription;
}
-const QString& ModuleBase_OperationDescription::description() const
+void ModuleBase_OperationDescription::setModelWidgets(const std::string& theXmlRepresentation,
+ const QList<ModuleBase_ModelWidget*>& theWidgets)
{
- return myDescription;
+ myWidgets.clear();
+ QList<ModuleBase_ModelWidget*>::const_iterator anIt = theWidgets.begin(), aLast = theWidgets.end();
+ for (; anIt != aLast; anIt++)
+ myWidgets.push_back(*anIt);
+ myXmlRepresentation = theXmlRepresentation;
}
-void ModuleBase_OperationDescription::setDescription(const QString& theDescription)
+const QList<ModuleBase_ModelWidget*>& ModuleBase_OperationDescription::modelWidgets() const
{
- myDescription = theDescription;
+ return myWidgets;
}
+bool ModuleBase_OperationDescription::hasXmlRepresentation() const
+{
+ return !myWidgets.empty() || !myXmlRepresentation.empty();
+}
#include <QObject>
#include <QString>
+#include <QList>
#include <memory>
+class ModuleBase_ModelWidget;
+
/*!
* \class ModuleBase_OperationDescription
*
/// Returns XML representation of the operation's widget.
/// \return XML QString
- const QString& xmlRepresentation() const;
-
- /// Sets XML representation of the operation's widget.
- /// \param xmlRepr - XML QString
- void setXmlRepresentation(const QString& xmlRepr);
+ //const QString& xmlRepresentation() const;
/// Returns a short description of operation (will be
/// inserted in title of property panel)
/// inserted in title of property panel)
void setDescription(const QString& theDescription);
+ /// Sets a list of model widgets, according to the operation feature xml definition
+ /// \param theWidgets a list of widgets
+ void setModelWidgets(const std::string& theXmlRepresentation,
+ const QList<ModuleBase_ModelWidget*>& theWidgets);
+
+ /// Sets a list of model widgets, according to the operation feature xml definition
+ /// \param theWidgets a list of widgets
+ const QList<ModuleBase_ModelWidget*>& modelWidgets() const;
+
+ /// Returns true if there are no model widgets
+ /// \return the boolean value
+ bool hasXmlRepresentation() const;
+
private:
//!< Next fields could be extracted into a subclass;
QString myOperationId; /// the operation identifier
- QString myXmlRepr; /// the XML representation of the operation's widget
QString myDescription; /// the short description of the opertaion
+ std::string myXmlRepresentation; /// the xml definition
+ QList<ModuleBase_ModelWidget*> myWidgets; /// the list of operation widgets
};
#endif //ModuleBase_OperationDescription_H
#include <PartSet_OperationConstraint.h>
#include <ModuleBase_Operation.h>
#include <ModuleBase_OperationDescription.h>
+#include <ModuleBase_WidgetFactory.h>
#include <PartSet_Listener.h>
#include <PartSet_TestOCC.h>
#include <PartSet_Presentation.h>
#include <XGUI_ViewerProxy.h>
#include <XGUI_ContextMenuMgr.h>
#include <XGUI_PropertyPanel.h>
+#include <XGUI_ModuleConnector.h>
#include <XGUI_Tools.h>
#include <SketchPlugin_Line.h>
if (aPreviewOp)
{
XGUI_Displayer* aDisplayer = myWorkshop->displayer();
- // refill the features list with avoiding of the features, obtained only by vertex shape (TODO)
+ // refill the features list with avoiding of the features, obtained only by vertex shape (TODO)
std::list<XGUI_ViewerPrs> aSelected = aDisplayer->getSelected(TopAbs_VERTEX);
std::list<XGUI_ViewerPrs> aHighlighted = aDisplayer->getHighlighted(TopAbs_VERTEX);
aPreviewOp->init(theFeature, aSelected, aHighlighted);
anOperation = new ModuleBase_Operation(theCmdId.c_str(), this);
}
- // set operation xml description
+ // set operation description and list of widgets corresponding to the feature xml definition
std::string aFeatureKind = theFeatureKind.empty() ? theCmdId : theFeatureKind;
std::string aPluginFileName = featureFile(aFeatureKind);
std::string aXmlCfg = aWdgReader.featureWidgetCfg(aFeatureKind);
std::string aDescription = aWdgReader.featureDescription(aFeatureKind);
- anOperation->getDescription()->setXmlRepresentation(QString::fromStdString(aXmlCfg));
+ QString aXmlRepr = QString::fromStdString(aXmlCfg);
+ ModuleBase_WidgetFactory aFactory = ModuleBase_WidgetFactory(aXmlRepr.toStdString(),
+ myWorkshop->moduleConnector());
+ QWidget* aContent = myWorkshop->propertyPanel()->contentWidget();
+ qDeleteAll(aContent->children());
+ aFactory.createWidget(aContent);
+
anOperation->getDescription()->setDescription(QString::fromStdString(aDescription));
+ anOperation->setModelWidgets(aXmlRepr.toStdString(), aFactory.getModelWidgets());
+
// connect the operation
PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(anOperation);
if (aPreviewOp) {
FeaturePtr theSketch,
FeaturePtr theFeature)
{
- PartSet_FeaturePrs* aFeaturePrs;
+ boost::shared_ptr<PartSet_FeaturePrs> aFeaturePrs;
if (theKind == PartSet_FeaturePointPrs::getKind()) {
- aFeaturePrs = new PartSet_FeaturePointPrs(theSketch);
+ aFeaturePrs = boost::shared_ptr<PartSet_FeaturePrs>(new PartSet_FeaturePointPrs(theSketch));
}
else if (theKind == PartSet_FeatureLinePrs::getKind()) {
- aFeaturePrs = new PartSet_FeatureLinePrs(theSketch);
+ aFeaturePrs = boost::shared_ptr<PartSet_FeaturePrs>(new PartSet_FeatureLinePrs(theSketch));
}
else if (theKind == PartSet_FeatureCirclePrs::getKind()) {
- aFeaturePrs = new PartSet_FeatureCirclePrs(theSketch);
+ aFeaturePrs = boost::shared_ptr<PartSet_FeaturePrs>(new PartSet_FeatureCirclePrs(theSketch));
}
else if (theKind == PartSet_FeatureArcPrs::getKind()) {
- aFeaturePrs = new PartSet_FeatureArcPrs(theSketch);
+ aFeaturePrs = boost::shared_ptr<PartSet_FeaturePrs>(new PartSet_FeatureArcPrs(theSketch));
}
- if (theFeature)
+
+ if (theFeature && aFeaturePrs)
aFeaturePrs->init(theFeature, FeaturePtr());
- return boost::shared_ptr<PartSet_FeaturePrs>(aFeaturePrs);
+ return aFeaturePrs;
}
FeaturePtr PartSet_Tools::nearestFeature(QPoint thePoint, Handle_V3d_View theView,
//An operation passed by message. Start it, process and commit.
const Config_PointerMessage* aPartSetMsg = dynamic_cast<const Config_PointerMessage*>(theMessage);
if (aPartSetMsg) {
- // Clear previous content
- myPropertyPanel->cleanContent();
+ // TODO: Clear previous content
+ //myPropertyPanel->cleanContent();
ModuleBase_Operation* anOperation =
(ModuleBase_Operation*)(aPartSetMsg->pointer());
if (myOperationMgr->startOperation(anOperation)) {
myPropertyPanel->updateContentWidget(anOperation->feature());
- if (anOperation->getDescription()->xmlRepresentation().isEmpty()) {
+ if (!anOperation->getDescription()->hasXmlRepresentation()) {
anOperation->commit();
updateCommandStatus();
}
{
ModuleBase_Operation* aOperation = myOperationMgr->currentOperation();
- if(!aOperation->getDescription()->xmlRepresentation().isEmpty()) { //!< No need for property panel
+ if(aOperation->getDescription()->hasXmlRepresentation()) { //!< No need for property panel
connectWithOperation(aOperation);
showPropertyPanel();
-
+ // TODO: Clear previous content
+ /*
QString aXmlRepr = aOperation->getDescription()->xmlRepresentation();
ModuleBase_WidgetFactory aFactory = ModuleBase_WidgetFactory(aXmlRepr.toStdString(), myModuleConnector);
QWidget* aContent = myPropertyPanel->contentWidget();
qDeleteAll(aContent->children());
aFactory.createWidget(aContent);
-
- QList<ModuleBase_ModelWidget*> aWidgets = aFactory.getModelWidgets();
- QList<ModuleBase_ModelWidget*>::const_iterator anIt = aWidgets.begin(), aLast = aWidgets.end();
- ModuleBase_ModelWidget* aWidget;
- for (; anIt != aLast; anIt++) {
- aWidget = *anIt;
- QObject::connect(aWidget, SIGNAL(valuesChanged()), aOperation, SLOT(storeCustomValue()));
- // Init default values
- if (!aOperation->isEditOperation()) {
- aWidget->storeValue(aOperation->feature());
- }
- }
-
myPropertyPanel->setModelWidgets(aFactory.getModelWidgets());
+ */
+ myPropertyPanel->setModelWidgets(aOperation->getDescription()->modelWidgets());
myPropertyPanel->setWindowTitle(aOperation->getDescription()->description());
}
updateCommandStatus();
//!< No need for property panel
updateCommandStatus();
hidePropertyPanel();
+ //myPropertyPanel->cleanContent();
}
/*
XGUI_ViewerProxy* viewer() const { return myViewerProxy; }
+ /// Returns the module connectory
+ /// \returns the instance of connector
+ XGUI_ModuleConnector* moduleConnector() const { return myModuleConnector; }
+
//! Returns icon name according to feature Id
static QString featureIcon(const std::string& theId);