Salome HOME
updated copyright message
[modules/shaper.git] / src / SHAPERGUI / SHAPERGUI.h
index ed007ff9102ed83eba791c91134496a030db074e..592cb3aa3b83469a2dead2f80026ab2fa6fc027a 100644 (file)
@@ -1,5 +1,21 @@
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-
+// Copyright (C) 2014-2023  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
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// 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
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
 
 #ifndef SHAPERGUI_H
 #define SHAPERGUI_H
 
 #include <ModuleBase_ActionInfo.h>
 
-#include <QStringList>
+#include <QList>
 #include <QMap>
 
 class XGUI_Workshop;
 class SHAPERGUI_OCCSelector;
 class OCCViewer_Viewer;
 class CAM_Study;
+class QtxInfoPanel;
 
 /** 
  * \ingroup Salome
@@ -41,7 +58,7 @@ Q_OBJECT
   /// \brief Definition of module standard windows
   virtual void windows(QMap<int, int>& theWndMap) const;
 
-  /// \brief Definition of module viewer 
+  /// \brief Definition of module viewer
   virtual void viewManagers(QStringList& theList) const;
 
   /// \brief The method is called on selection changed event
@@ -49,14 +66,16 @@ Q_OBJECT
 
   //--- XGUI connector interface -----
 
-  virtual QAction* addFeature(const QString& theWBName, const QString& theId,
-                              const QString& theTitle, const QString& theTip, const QIcon& theIcon,
-                              const QKeySequence& theKeys = QKeySequence(),
-                              bool isCheckable = false);
+  virtual QAction* addFeature(const QString& theWBName, const QString& theTBName,
+                              const QString& theId, const QString& theTitle,
+                              const QString& theTip, const QIcon& theIcon,
+                              const QKeySequence& theKeys/* = QKeySequence()*/,
+                              bool isCheckable /*= false*/, const bool isAddSeparator/* = false*/,
+                              const QString& theStatusTip);
 
   //! Add feature (QAction) in the \a theWBName toolbar with given \a theInfo about action
   virtual QAction* addFeature(const QString& theWBName,
-                              const ActionInfo& theInfo);
+                              const ActionInfo& theInfo, const bool isAddSeparator);
 
   /// Add a nested feature
   /// \param theWBName a workbench name
@@ -73,10 +92,11 @@ Q_OBJECT
   virtual bool isFeatureOfNested(const QAction* theAction);
 
   virtual QAction* addDesktopCommand(const QString& theId, const QString& theTitle,
-                                     const QString& theTip, const QIcon& theIcon,
-                                     const QKeySequence& theKeys, bool isCheckable,
-                                     const char* theMenuSourceText,
-                                     const int theMenuPosition = 10);
+    const QString& theTip, const QIcon& theIcon,
+    const QKeySequence& theKeys, bool isCheckable,
+    const char* theMenuSourceText, const QString& theSubMenu = QString(),
+    const int theMenuPosition = 10,
+    const int theSuibMenuPosition = -1) Standard_OVERRIDE;
 
   virtual void addDesktopMenuSeparator(const char* theMenuSourceText,
                                        const int theMenuPosition = 10);
@@ -85,14 +105,13 @@ Q_OBJECT
   /// \param theAction an ation to add
   /// \param theToolBarTitle a name of tool bar
   virtual bool addActionInToolbar( QAction* theAction, const QString& theToolBarTitle );
-    
-  virtual QMainWindow* desktop() const;
 
-  virtual QString commandId(const QAction* theCmd) const;
+  /// Creates menu/tool bar actions for loaded features stored in the menu manager
+  virtual void createFeatureActions();
 
-  virtual QAction* command(const QString& theId) const;
+  virtual QMainWindow* desktop() const;
 
-    //! Stores XML information for the feature kind
+  //! Stores XML information for the feature kind
   //! \param theFeatureId a feature kind
   //! \param theMessage a container of the feature XML properties
   virtual void setFeatureInfo(const QString& theFeatureId,
@@ -101,7 +120,7 @@ Q_OBJECT
   //! Returns XML information for the feature kind
   //! \param theFeatureId a feature kind
   //! \return theMessage a container of the feature XML properties
-  virtual const std::shared_ptr<Config_FeatureMessage>& featureInfo(const QString& theFeatureId);
+  virtual std::shared_ptr<Config_FeatureMessage> featureInfo(const QString& theFeatureId);
 
   //! Returns interface to Salome viewer
   virtual ModuleBase_IViewer* viewer() const
@@ -112,35 +131,56 @@ Q_OBJECT
   //! Returns list of defined actions (just by SHAPER module)
   virtual QList<QAction*> commandList() const;
 
-  //! Returns list of Ids of defined actions (just by SHAPER module)
-  virtual QStringList commandIdList() const;
-
-  /// Redefinition of virtual function. 
+  /// Redefinition of virtual function.
   /// \param theClient name of pop-up client
   /// \param theMenu popup menu instance
   /// \param theTitle menu title.
   virtual void contextMenuPopup(const QString& theClient, QMenu* theMenu, QString& theTitle);
 
-  /// Redefinition of virtual function for preferences creation. 
+  /// Redefinition of virtual function for preferences creation.
   virtual void createPreferences();
 
-  /// Redefinition of virtual function for preferences changed event. 
+  /// Redefinition of virtual function for preferences changed event.
   virtual void preferencesChanged(const QString& theSection, const QString& theParam);
-  
+
+  //! Shows the given text in status bar as a permanent text
+  //! \theInfo a string value
+  //! \theMsecs interval of msec milliseconds when the message will be hidden, if -1, it stays.
+  //            If 0, default value is used, it is 3000
+  virtual void putInfo(const QString& theInfo, const int theMSecs = 0);
+
   /// \return Workshop class instance
   XGUI_Workshop* workshop() const { return myWorkshop; }
 
   /// \brief Set flag about opened document state
   void setIsOpened(bool theOpened) { myIsOpened = theOpened; }
 
-  /// Register current modules of SALOME
-  void inspectSalomeModules();
+  virtual void updateModuleVisibilityState();
+
+  /// Returns list of the module commands
+  QIntList shaperActions() const { return myActionsList; }
+
+  /// Returns structure of tool bars
+  QMap<QString, QIntList> shaperToolbars() const { return myToolbars; }
+
+  /// Returns free commands which are not in toolbars in the module
+  QIntList getFreeCommands() const;
+
+  /// Returns structure of default tool bars
+  QMap<QString, QIntList> defaultToolbars() const
+  { return (myDefaultToolbars.size() == 0)? myToolbars : myDefaultToolbars; }
+
+  void resetToolbars();
+
+  void publishToStudy();
+
+  virtual void updateInfoPanel();
 
  public slots:
   /// \brief The method is redefined to connect to the study viewer before the data
   /// model is filled by opened file. This file open will flush redisplay signals for,
   /// objects which should be visualized
-  virtual void connectToStudy(CAM_Study* theStudy);
+  //virtual void connectToStudy(CAM_Study* theStudy);
 
    /// \brief The method is called on the module activation
    /// \param theStudy current study
@@ -162,6 +202,15 @@ Q_OBJECT
   /// Set preferences to default
   void onDefaultPreferences();
 
+  /// Hide object browser if it was created during loading script
+  void onScriptLoaded();
+
+  /// Save application functionality with additional processing of aborting the current operation
+  void onSaveDocByShaper();
+
+  /// Save application functionality with additional processing of aborting the current operation
+  void onSaveAsDocByShaper();
+
   /// Obtains the current application and updates its actions
   void onUpdateCommandStatus();
 
@@ -175,13 +224,42 @@ Q_OBJECT
   /// Abort all operations
   virtual bool abortAllOperations();
 
+private slots:
+  void onWhatIs(bool isToggled);
+
+  void onEditToolbars();
+
  private:
    /// Create selector for OCC Viewer
    /// \param theMgr view manager
   SHAPERGUI_OCCSelector* createSelector(SUIT_ViewManager* theMgr);
 
-  /// List of registered actions
-  QStringList myActionsList;
+  void registerCommandToolbar(const QString& theToolName, int theCommandId);
+
+  int getNextCommandId() const;
+
+  // Update current toolbars
+  void updateToolbars(const QMap<QString, QIntList>& theNewToolbars);
+
+  void saveToolbarsConfig();
+  void loadToolbarsConfig();
+
+  //! Fill Info Panel in Part set mode
+  void fillPartSetInfoPanel(QtxInfoPanel* theInfoPanel);
+
+  //! Fill Info Panel in Part mode
+  void fillPartInfoPanel(QtxInfoPanel* theInfoPanel);
+
+  //! Fill Info Panel in Sketcher mode
+  void fillSketcherInfoPanel(QtxInfoPanel* theInfoPanel);
+
+  //! Fill Info Panel in Sketcher mode
+  void addActionsToInfoGroup(QtxInfoPanel* theInfoPanel, const QString& theGroup, const QSet<QString>& theActions);
+
+  void hideInternalWindows();
+
+  /// List of registered nested actions
+  QStringList myNestedActionsList;
 
   /// Reference to workshop
   XGUI_Workshop* myWorkshop;
@@ -198,16 +276,29 @@ Q_OBJECT
   /// Flag of opened document state
   bool myIsOpened;
 
-  // the next parameters should be restored after this module deactivation
-
-  /// The application value of the preferences parameter
-  bool myIsStorePositions; 
-
+  // the next parameter should be restored after this module deactivation
   /// The application value
-  bool myIsEditEnabled;    
+  bool myIsEditEnabled;
 
   /// Popup manager
   QtxPopupMgr* myPopupMgr;
+
+  QAction* myWhatIsAction;
+
+  bool myIsInspectionVisible;
+  QDockWidget* myInspectionPanel;
+  bool myIsFacesPanelVisible;
+
+  /// List of registered actions
+  QIntList myActionsList;
+  QMap<QString, QIntList> myToolbars;
+  QMap<QString, QIntList> myDefaultToolbars;
+  bool myIsToolbarsModified;
+
+  std::vector<int> myOldSelectionColor;
+  Handle(Graphic3d_AspectMarker3d) myHighlightPointAspect;
+
+  double myAxisArrowRate;
 };
 
 #endif