Salome HOME
Issue #1015: The validate icon must be greyed and inactive instead of red and active
[modules/shaper.git] / src / ModuleBase / ModuleBase_Tools.h
index f78e9b7550a627306754dd9469fbf0aee16f67c5..b50ec66a1116581d3bef2dfe9b229f183da16085 100755 (executable)
 
 #include <Quantity_Color.hxx>
 
+#include <QIcon>
 #include <QPixmap>
 
+#include <map>
+
 class QWidget;
 class QLayout;
 class QDoubleSpinBox;
+class QAction;
+class ModuleBase_ParamIntSpinBox;
 class ModuleBase_ParamSpinBox;
+class ModuleBase_IWorkshop;
+
+class GeomAPI_Shape;
 
 namespace ModuleBase_Tools {
 
@@ -37,6 +45,30 @@ MODULEBASE_EXPORT void adjustMargins(QLayout* theLayout);
 MODULEBASE_EXPORT void zeroMargins(QWidget* theWidget);
 MODULEBASE_EXPORT void zeroMargins(QLayout* theLayout);
 
+/*
+ * Calls the same-named Qt method for the given widget.
+ * It sets the top-level widget containing this widget to be the active window.
+ * An active window is a visible top-level window that has the keyboard input focus.
+ * \param theWidget a widget to be activated
+ * \param theIndo a debug information
+ */
+MODULEBASE_EXPORT void activateWindow(QWidget* theWidget, const QString& theInfo = QString());
+
+/*
+ * Calls the same-named Qt method for the given widget.
+ * Gives the keyboard input focus to this widget (or its focus proxy) if this widget or
+ * one of its parents is the active window.
+ * \param theWidget a widget to be activated
+ * \param theIndo a debug information
+ */
+MODULEBASE_EXPORT void setFocus(QWidget* theWidget, const QString& theInfo = QString());
+
+
+//! Sets or removes the shadow effect to the widget
+//! \param theWidget a widget to be styled
+//! \param isSetEffect if true, the shadow effect is set, overwise cleared
+//! \return resulting pixmap
+MODULEBASE_EXPORT void setShadowEffect(QWidget* theWidget, const bool isSetEffect);
 
 /**
  * \ingroup GUI
@@ -78,6 +110,30 @@ MODULEBASE_EXPORT void setSpinValue(ModuleBase_ParamSpinBox* theSpin, double the
 /// \param theText a new value
 MODULEBASE_EXPORT void setSpinText(ModuleBase_ParamSpinBox* theSpin, const QString& theText);
 
+/// Sets programmatically the value to the spin box without emitting any signals(e.g. valueChanged)
+/// \param theSpin a ModuleBase_ParamIntSpinBox object
+/// \param theValue a new value
+MODULEBASE_EXPORT void setSpinValue(ModuleBase_ParamIntSpinBox* theSpin, int theValue);
+
+/// Sets programmatically the value to the spin box without emitting any signals(e.g. valueChanged)
+/// \param theSpin a SpinBox that accepts text
+/// \param theText a new value
+MODULEBASE_EXPORT void setSpinText(ModuleBase_ParamIntSpinBox* theSpin, const QString& theText);
+
+/// Creates an action filled with the parameters
+/// \param theIcon an action icon
+/// \param theText an icon text
+/// \param theParent an action object
+/// \param theReceiver an object to process action triggered signal
+/// \param theMember a slot to process the action triggered signal
+/// \param theToolTip an action tool tip information, if empty the text is used
+/// \param theStatusTip an action status tip information, if empty the text is used
+MODULEBASE_EXPORT QAction* createAction(const QIcon& theIcon, const QString& theText,
+                                        QObject* theParent, const QObject* theReceiver = 0,
+                                        const char* theMember = "",
+                                        const QString& theToolTip = QString(),
+                                        const QString& theStatusTip = QString());
+
 /// Converts the object to the feature or a result and generate information string
 /// \param theObj an object
 /// \param isUseAttributesInfo a flag whether the attribute values information is used
@@ -100,15 +156,15 @@ Check types of objects which are in the given list
 \param hasResult will be set to true if list contains Result objects
 \param hasFeature will be set to true if list contains Feature objects
 \param hasParameter will be set to true if list contains Parameter objects
-\param hasSubFeature will be set to true if list contains Sub-Feature objects
+\param hasCompositeOwner will be set to true if list contains Sub-Feature objects
 */
 MODULEBASE_EXPORT void checkObjects(const QObjectPtrList& theObjects, bool& hasResult,
-                           bool& hasFeature, bool& hasParameter, bool& hasSubFeature);
+                           bool& hasFeature, bool& hasParameter, bool& hasCompositeOwner);
 
 /*! Sets the default coeffient into the driver calculated accordingly the shape type.
 It provides 1.e-4 for a shape withe Edge shape type
 \param theShape a shape to define the deviation coeffient, 
-\return double value
+\param theDrawer a drawer
 */
 MODULEBASE_EXPORT void setDefaultDeviationCoefficient(const TopoDS_Shape& theShape,
                                                       const Handle(Prs3d_Drawer)& theDrawer);
@@ -124,14 +180,123 @@ MODULEBASE_EXPORT Quantity_Color color(const std::string& theSection,
                                        const std::string& theDefault);
 
 
-// Returns the object from the attribute
+/// Returns the object from the attribute
 /// \param theObj an object
 MODULEBASE_EXPORT ObjectPtr getObject(const AttributePtr& theAttribute);
 
-// Returns the object from the attribute
+/// Returns the object from the attribute
 /// \param theObj an object
 MODULEBASE_EXPORT TopAbs_ShapeEnum getCompoundSubType(const TopoDS_Shape& theShape);
 
+/// Returns list of parameters accessible in the active part and partset
+/// \theParameters a list of parameter names
+MODULEBASE_EXPORT void getParameters(QStringList& theParameters);
+
+/// Returns list of parameters accessible in the active part and partset
+/// \theParameters a list of parameter names
+MODULEBASE_EXPORT std::string findGreedAttribute(ModuleBase_IWorkshop* theWorkshop,
+                                                 const FeaturePtr& theFeature);
+
+/// Set the object to the attribute depending on the attribute type. If it is a list,
+/// the values are appended if they are not in the list yet.
+/// \param theAttribute an attribute where the object and shape are set
+/// \param theObject an object
+/// \param theShape a shape
+/// \param theWorkshop to find an attribute for the given shape for attribute reference
+/// \param theTemporarily if it is true, do not store and name the added in the data framework
+///        It is useful for attribute selection
+MODULEBASE_EXPORT bool hasObject(const AttributePtr& theAttribute, const ObjectPtr& theObject,
+                                 const std::shared_ptr<GeomAPI_Shape>& theShape,
+                                 ModuleBase_IWorkshop* theWorkshop,
+                                 const bool theTemporarily);
+
+/// Set the object to the attribute depending on the attribute type. If it is a list,
+/// the values are appended if they are not in the list yet.
+/// \param theAttribute an attribute where the object and shape are set
+/// \param theObject an object
+/// \param theShape a shape
+/// \param theWorkshop to find an attribute for the given shape for attribute reference
+/// \param theTemporarily if it is true, do not store and name the added in the data framework
+/// \param theCheckIfAttributeHasObject if it is true, the check isInList is called
+///        It is useful for attribute selection
+MODULEBASE_EXPORT void setObject(const AttributePtr& theAttribute, const ObjectPtr& theObject,
+                                 const std::shared_ptr<GeomAPI_Shape>& theShape,
+                                 ModuleBase_IWorkshop* theWorkshop,
+                                 const bool theTemporarily,
+                                 const bool theCheckIfAttributeHasObject);
+
+/// Returns the shape of the attribute. If the attribute is AttributeRefAttrPtr, the shape is found
+/// using current module of the given workshop.
+/// \param theAttribute an attribute where the shape is set
+/// \param theWorkshop to find a shape for the given attribute
+MODULEBASE_EXPORT std::shared_ptr<GeomAPI_Shape> getShape(const AttributePtr& theAttribute,
+                                                          ModuleBase_IWorkshop* theWorkshop);
+
+/// Flush updated signal for the object. The viewer update is blocked in the process
+/// \param theObject parameter of the signal
+MODULEBASE_EXPORT void flushUpdated(ObjectPtr theObject);
+
+/// Sends a message about block/unblock viewer updating
+/// \param theValue a boolean value
+MODULEBASE_EXPORT void blockUpdateViewer(const bool theValue);
+
+/// Generates a wrapped string to be less than value with '\n' separators
+/// \param theValue a boolean value
+/// \param theWidget a widget to know the font
+/// \param theMaxLineInPixels a maximum line width in pixels
+MODULEBASE_EXPORT QString wrapTextByWords(const QString& theValue, QWidget* theWidget,
+                                             int theMaxLineInPixels = 150);
+
+/*!
+  Returns a container of referenced feature to the current object in the object document.
+  \param theObject an object, which will be casted to a feature type
+  \param theRefFeatures an output container
+ */
+void MODULEBASE_EXPORT refsToFeatureInFeatureDocument(const ObjectPtr& theObject,
+                                                      std::set<FeaturePtr>& theRefFeatures);
+
+
+/*!
+ Returns true if the object if a sub child of the feature. The feature is casted to the
+ composite one. If it is possible, the sub object check happens. The method is applyed
+ recursively to the feature subs.
+ \param theObject a candidate to be a sub object
+ \param theFeature a candidate to be a composite feature
+ \return a boolean value
+ */
+bool MODULEBASE_EXPORT isSubOfComposite(const ObjectPtr& theObject, const FeaturePtr& theFeature);
+
+
+/*!
+* Returns true if the result is a sub object of some composite object
+* \param theObject a result object
+* \returns boolean value
+*/
+bool MODULEBASE_EXPORT isSubOfComposite(const ObjectPtr& theObject);
+
+
+/*!
+* Shows a dialog box about references. Ask whether they should be also removed.
+* \param theFeatures a list of features
+* \param theReferences a map of all references to the features
+* \param theParent a parent widget for the question message box
+* \param theReferencesToDelete an out set for references features to be removed
+* \return true if in message box answer is Yes
+*/
+bool MODULEBASE_EXPORT askToDelete(const std::set<FeaturePtr> aFeatures,
+                                   const std::map<FeaturePtr, std::set<FeaturePtr> >& theReferences,
+                                   QWidget* theParent,
+                                   std::set<FeaturePtr>& theReferencesToDelete);
+
+/*!
+* Converts a list of objects to set of corresponded features. If object is result, it is ingored
+* because the feauture only might be removed. But if result is in a parameter group, the feature
+* of this parameter is to be removed
+* \param theObjects a list of objects
+* \param theFeatures an out conteiner of features
+*/
+void MODULEBASE_EXPORT convertToFeatures(const QObjectPtrList& theObjects, std::set<FeaturePtr>& theFeatures);
+
 }
 
 #endif