Salome HOME
updated copyright message
[modules/shaper.git] / src / XGUI / XGUI_FacesPanel.h
index fdb08cc51e777211a7394813c4509d8f3861f142..a76dfa550cc5c41e5fd3fd1d6c2cb26e6f024d6f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2023  CEA, EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 //
 // 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
+// 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>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 #ifndef XGUI_FacesPanel_H_
 
 #include "XGUI.h"
 
-#include <ModelAPI_Object.h>
-
 #include <ModuleBase_ActionType.h>
 #include <ModuleBase_Definitions.h>
 #include <ModuleBase_ViewerPrs.h>
+#include <ModuleBase_ResultPrs.h>
+
+#include <ModelAPI_Object.h>
+#include <ModelAPI_ResultGroup.h>
+#include <ModelAPI_Feature.h>
+
+#include <GeomAPI_AISObject.h>
 
 #include <SelectMgr_ListOfFilter.hxx>
+#include <TopoDS_Shape.hxx>
 
 #include <QDockWidget>
 #include <QObject>
@@ -41,7 +46,7 @@ class AIS_InteractiveObject;
 
 class GeomAPI_AISObject;
 
-class ModuleBase_IWorkshop;
+class XGUI_Workshop;
 class ModuleBase_ListView;
 
 class QAction;
@@ -70,13 +75,17 @@ class XGUI_EXPORT XGUI_FacesPanel : public QDockWidget
 public:
   /// Constructor
   /// \param theParent is a parent of the property panel
-  XGUI_FacesPanel(QWidget* theParent, ModuleBase_IWorkshop* theWorkshop);
+  XGUI_FacesPanel(QWidget* theParent, XGUI_Workshop* theWorkshop);
   ~XGUI_FacesPanel() {}
 
   /// Clear content of list widget
   /// \param isToFlushRedisplay flag if redisplay should be flushed immediatelly
   virtual void reset(const bool isToFlushRedisplay);
 
+  /// Returns whether faces panel contains elements
+  /// \return boolean value
+  bool isEmpty() const;
+
   /// Fills container with the panel selection mode: FACE
   // \param theModes [out] a container of modes
   void selectionModes(QIntList& theModes);
@@ -92,19 +101,15 @@ public:
   /// \param theIsActive state whether the panel should be activated or deactivated
   void setActivePanel(const bool theIsActive);
 
-  /// Returns true if transparency choice is checked
-  /// \return boolean value
-  bool useTransparency() const;
-
   /// Returns true if the object is in internal container of hidden objects by this panel
   /// \param theObject a checked object
   /// \return boolean value
-  bool isObjectHiddenByPanel(const std::shared_ptr<ModelAPI_Object>& theObject) const
+  bool isObjectHiddenByPanel(const ObjectPtr& theObject) const
   { return myHiddenObjects.find(theObject) != myHiddenObjects.end(); }
 
   /// Removed faces of the objects from the panel
   /// \param container of objects
-  void restoreObjects(const std::set<std::shared_ptr<ModelAPI_Object> >& theHiddenObjects);
+  void restoreObjects(const std::set<ObjectPtr >& theHiddenObjects);
 
   /// Returns true if the event is processed. The default implementation is empty, returns false.
   virtual bool processAction(ModuleBase_ActionType theActionType);
@@ -116,21 +121,19 @@ public:
   /// \return whether the delete action is processed
   bool processDelete();
 
+  /// Delete last(s) item(s) added since the recent activation of the faces panel
+  void processUndo();
+
   /// Processing focus in/out for the faces control
   /// \param theObject source object of event
   /// \param theEvent an event
   virtual bool eventFilter(QObject* theObject, QEvent *theEvent);
 
-  /// Hide/show faces of the object if:
-  /// - face selector is active
-  /// - object is mentioned in the list of selected elements
-  /// If the object is displayed, all panel faces selected on it will be moved into presentation
-  /// or, if redisplayed, fuction return if the object should be redisplayed or not
-  /// \param theObject a customized object
-  /// \param thePresentation visualized presentation of the object
-  /// \return true if the presentation is customized
-  bool customizeObject(const std::shared_ptr<ModelAPI_Object>& theObject,
-    const std::shared_ptr<GeomAPI_AISObject>& thePresentation);
+  XGUI_Workshop* workshop() const { return myWorkshop; }
+
+public slots:
+  /// Slot called on an object erase
+  void onObjectDisplay(ObjectPtr theObject, AISObjectPtr theAIS);
 
 protected:
   /// Reimplementation to emit a signal about the panel close
@@ -147,34 +150,36 @@ signals:
 private:
   /// Redisplay objects.
   /// \param theObjects container of objects
-  /// \param isToFlushRedisplay flag if redisplay should be flushed immediatelly
   /// \return true if some of objects was redisplayed
-  static bool redisplayObjects(const std::set<std::shared_ptr<ModelAPI_Object> >& theObjects,
-                               const bool isToFlushRedisplay);
-
-  /// Display objects if the objects are in a container of hidden by this pane.
-  /// \param theObjects container of objects
-  /// \param theHiddenObjects hidden objects, if object is in the container, it should be removed
-  /// \param isToFlushRedisplay flag if redisplay should be flushed immediatelly
-  /// \return true if some of objects was redisplayed
-  static bool displayHiddenObjects(const std::set<std::shared_ptr<ModelAPI_Object> >& theObjects,
-                                   std::set<std::shared_ptr<ModelAPI_Object> >& theHiddenObjects,
-                                   const bool isToFlushRedisplay);
-
-  /// Iterates by items and hide objects where all sub-shapes are hidden
-  /// \return true if some of objects was redisplayed
-  bool hideEmptyObjects();
+  static bool redisplayObjects(const std::set<ObjectPtr>& theObjects);
 
   /// Container of objects participating in the panel, it is filled by internal container
   /// \param theItems container of selected values
   /// \param theObjects [out] container of objects
-  static void updateProcessedObjects(QMap<int, std::shared_ptr<ModuleBase_ViewerPrs> > theItems,
-                                     std::set<std::shared_ptr<ModelAPI_Object> >& theObjects);
+  static void updateProcessedObjects(QMap<int, ModuleBase_ViewerPrsPtr> theItems,
+                                     std::set<ObjectPtr>& theObjects);
+
+  /// Returns maps of shapes and presentations. If object is a body result then it returns
+  /// its ruslts. If it is a group then it returns result of shapes included into the gropup
+  /// The function doesn't clear content of input maps.
+  /// \param thePrs a selected presintation
+  /// \param theObjectsToShapes map of objects to shapes list
+  /// \param theObjectToPrs map of objects to presentations
+  void getObjectsMapFromResult(ResultGroupPtr theResGroup, FeaturePtr theGroupFeature,
+    std::map<ObjectPtr, TopoDS_ListOfShape>& theObjectsToShapes,
+    std::map<ObjectPtr, Handle(ModuleBase_ResultPrs) >& theObjectToPrs);
+
+  void getObjectsMapFromPrs(ModuleBase_ViewerPrsPtr thePrs,
+    std::map<ObjectPtr, TopoDS_ListOfShape>& theObjectToShapes,
+    std::map<ObjectPtr, Handle(ModuleBase_ResultPrs) >& theObjectToPrs);
+
+  /// Returns true if transparency choice is checked
+  /// \return boolean value
+  bool useTransparency() const;
 
-  /// Generates a presentation name in form: <object_name>/<face>_<face_index>
-  /// \param thePrs a presentation
-  /// \return string value
-  static QString generateName(const std::shared_ptr<ModuleBase_ViewerPrs>& thePrs);
+  double transparency() const;
+
+  void removeItems(std::set<int> theIds);
 
 protected slots:
   /// Deletes element in list of items
@@ -186,17 +191,24 @@ protected slots:
   /// Closes faces panel restore all hidden faces by calling reset()
   void onClosed();
 
-protected:
+  /// Flushes redisplay event and perform update of object browser icons
+  /// (objects might be hidden/shown)
+  void flushRedisplay() const;
+
+private:
+
   QCheckBox* myHiddenOrTransparent; ///< if checked - transparent, else hidden
   ModuleBase_ListView* myListView; ///< list control of processed faces
-  ModuleBase_IWorkshop* myWorkshop; ///< workshop
+  XGUI_Workshop* myWorkshop; ///< workshop
 
   bool myIsActive; ///< current state about the panel is active
   int myLastItemIndex; ///< last index to be used in the map of items for the next added item
+  std::vector<int> myUndoList; ///< indexes of items for undo
 
-  QMap<int, std::shared_ptr<ModuleBase_ViewerPrs> > myItems; ///< selected face items
-  std::set<std::shared_ptr<ModelAPI_Object> > myItemObjects; ///< cached objects of myItems
-  std::set<std::shared_ptr<ModelAPI_Object> > myHiddenObjects; ///< hidden objects
+  QMap<int, ModuleBase_ViewerPrsPtr> myItems; ///< selected face items
+  std::set<ObjectPtr > myItemObjects; ///< cached objects of myItems
+  std::set<ObjectPtr > myHiddenObjects; ///< hidden objects
+  std::set<ObjectPtr > myHiddenGroups; ///< hidden objects
 };
 
-#endif
\ No newline at end of file
+#endif