Salome HOME
Change translation
[modules/shaper.git] / src / XGUI / XGUI_FacesPanel.h
index 4c147ab7dd6a8e11dbc88dc1fcd37487a532ce55..d4a0b04dae171cd5badcb5fba7e4715ee69f0c63 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2019  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
 //
 // 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 <ModelAPI_Object.h>
 
 #include <ModuleBase_ActionType.h>
+#include <ModuleBase_Definitions.h>
 #include <ModuleBase_ViewerPrs.h>
 
+#include <SelectMgr_ListOfFilter.hxx>
+
 #include <QDockWidget>
 #include <QObject>
 #include <QMap>
@@ -36,6 +38,8 @@
 
 class AIS_InteractiveObject;
 
+class GeomAPI_AISObject;
+
 class ModuleBase_IWorkshop;
 class ModuleBase_ListView;
 
@@ -72,6 +76,18 @@ public:
   /// \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);
+
+  /// Appends into container of workshop selection filters
+  /// \param [out] selection filters
+  void selectionFilters(SelectMgr_ListOfFilter& theSelectionFilters);
+
   /// Returns whether the panel is active or not
   bool isActivePanel() const { return myIsActive; }
 
@@ -114,16 +130,10 @@ public:
   /// 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 isDisplayed state if the object is displayed or redisplayed
+  /// \param thePresentation visualized presentation of the object
   /// \return true if the presentation is customized
-  bool customizeObject(const std::shared_ptr<ModelAPI_Object>& theObject, const bool isDisplayed);
-
-protected:
-  /// Add panel selection filters to the current viewer
-  virtual void activateSelectionFilters() {}
-
-  /// Remove panel selection filters from the current viewer
-  virtual void deactivateSelectionFilters() {}
+  bool customizeObject(const std::shared_ptr<ModelAPI_Object>& theObject,
+    const std::shared_ptr<GeomAPI_AISObject>& thePresentation);
 
 protected:
   /// Reimplementation to emit a signal about the panel close
@@ -138,33 +148,43 @@ signals:
   void closed();
 
 private:
-  /// Activate or deactivate selection and selection filters
-  void activateSelection(bool toActivate);
+  /// Redisplay objects.
+  /// \param theObjects container of objects
+  /// \return true if some of objects was redisplayed
+  static bool redisplayObjects(const std::set<std::shared_ptr<ModelAPI_Object> >& theObjects);
 
-  /// Redisplay or display objects. The viewer is not updated after redisplay.
+  /// Display objects if the objects are in a container of hidden by this pane.
   /// \param theObjects container of objects
-  /// \param isToFlushRedisplay flag if redisplay should be flushed immediatelly
-  /// \return true if some of objects was redisplayed to update viewer
-  bool redisplayObjects(const std::set<std::shared_ptr<ModelAPI_Object> >& theObjects,
-                        const bool isToFlushRedisplay);
+  /// \param theHiddenObjects hidden objects, if object is in the container, it should be removed
+  /// \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);
 
-  /// Change the presentation to have the selected presentation hidden
-  /// \param theIndex an index of selected item that should be hidden
-  /// \return true if presentation is changed
-  bool hideFace(const int theIndex);
+  /// Iterates by items and hide objects where all sub-shapes are hidden
+  /// \return true if some of objects was redisplayed
+  bool hideEmptyObjects();
 
-  /// 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);
+  /// 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);
 
 protected slots:
   /// Deletes element in list of items
   void onDeleteItem();
 
+  /// Upates hidden faces to be hidden or transparent
+  void onTransparencyChanged();
+
   /// Closes faces panel restore all hidden faces by calling reset()
   void onClosed();
 
+private:
+  /// Flushes redisplay event and perform update of object browser icons
+  /// (objects might be hidden/shown)
+  void flushRedisplay() const;
+
 protected:
   QCheckBox* myHiddenOrTransparent; ///< if checked - transparent, else hidden
   ModuleBase_ListView* myListView; ///< list control of processed faces
@@ -174,6 +194,7 @@ protected:
   int myLastItemIndex; ///< last index to be used in the map of items for the next added item
 
   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
 };