-// 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_WORKSHOP_H
#define XGUI_WORKSHOP_H
#include "XGUI.h"
-//#include "XGUI_Constants.h"
-#include <ModuleBase_Definitions.h>
+
#include <ModelAPI_Document.h>
#include <ModelAPI_Feature.h>
+#include <ModelAPI_ResultBody.h>
#include <ModuleBase_ActionInfo.h>
+#include <ModuleBase_ActionType.h>
+#include <ModuleBase_Definitions.h>
+#include <SelectMgr_ListOfFilter.hxx>
+
+#include <QIcon>
#include <QObject>
-#include <QMap>
#include <QKeySequence>
-#include <QIcon>
+#include <QMap>
+#include <QTemporaryDir>
#ifndef HAVE_SALOME
-class AppElements_MainWindow;
class AppElements_Command;
+class AppElements_MainWindow;
class AppElements_Workbench;
#endif
+class Config_DataModelReader;
+
class XGUI_ActionsMgr;
+class XGUI_ActiveControlMgr;
class XGUI_ContextMenuMgr;
class XGUI_Displayer;
class XGUI_ErrorDialog;
class XGUI_ErrorMgr;
+class XGUI_FacesPanel;
class XGUI_MenuMgr;
class XGUI_ModuleConnector;
class XGUI_ObjectsBrowser;
class XGUI_PropertyPanel;
class XGUI_SalomeConnector;
class XGUI_SalomeViewer;
+class XGUI_SelectionActivate;
class XGUI_SelectionMgr;
class XGUI_ViewerProxy;
class XGUI_WorkshopListener;
+class XGUI_InspectionPanel;
class ModuleBase_IModule;
class ModuleBase_IViewer;
class ModuleBase_Operation;
-class QWidget;
+class QAction;
class QDockWidget;
class QMainWindow;
+class QWidget;
-class QAction;
-class Config_DataModelReader;
-
-/**\class XGUI_Workshop
- * \ingroup GUI
- * \brief Class which defines a configuration of the application (Workshop) and launches it.
- */
+/// \class XGUI_Workshop
+/// \ingroup GUI
+/// \brief Class which defines a configuration of the application (Workshop) and launches it.
class XGUI_EXPORT XGUI_Workshop : public QObject
{
Q_OBJECT
XGUI_Workshop(XGUI_SalomeConnector* theConnector = 0);
virtual ~XGUI_Workshop();
- //! Starting of the application
+ /// Starting of the application
void startApplication();
/// Activates the module controls. Should be called after module creation
void deactivateModule();
#ifndef HAVE_SALOME
- //! Returns main window (Desktop) of the application
- AppElements_MainWindow* mainWindow() const
- {
- return myMainWindow;
- }
+ /// Returns main window (Desktop) of the application
+ AppElements_MainWindow* mainWindow() const { return myMainWindow; }
- //! Creates and adds a new workbench (menu group) with the given name and returns it
+ /// Creates and adds a new workbench (menu group) with the given name and returns it
AppElements_Workbench* addWorkbench(const QString& theName);
#endif
- //! Returns selection manager object
- XGUI_SelectionMgr* selector() const
- {
- return mySelector;
- }
-
- //! Returns displayer
- XGUI_Displayer* displayer() const
- {
- return myDisplayer;
- }
-
- //! ! Returns operation manager.
- XGUI_OperationMgr* operationMgr() const
- {
- return myOperationMgr;
- }
-
- //! ! Returns error manager.
- XGUI_ErrorMgr* errorMgr() const
- {
- return myErrorMgr;
- }
-
- //! ! Returns an actions manager
- XGUI_ActionsMgr* actionsMgr() const
- {
- return myActionsMgr;
- }
-
- //! ! Returns an actions manager
- XGUI_MenuMgr* menuMgr() const
- {
- return myMenuMgr;
- }
-
- //! Returns property panel widget
- XGUI_PropertyPanel* propertyPanel() const
- {
- return myPropertyPanel;
- }
-
- //! Returns context menu manager object
- XGUI_ContextMenuMgr* contextMenuMgr() const
- {
- return myContextMenuMgr;
- }
-
- //! Returns an object which provides interface to Salome Module (LightApp_Module)
- XGUI_SalomeConnector* salomeConnector() const
- {
- return mySalomeConnector;
- }
-
- //! Provides an object which provides interface to Salome Viewer
+ /// Returns selection manager object
+ XGUI_SelectionMgr* selector() const { return mySelector; }
+
+ /// Returns selection activating object
+ XGUI_SelectionActivate* selectionActivate() const { return mySelectionActivate; }
+
+ /// Returns displayer
+ XGUI_Displayer* displayer() const { return myDisplayer; }
+
+ /// Returns operation manager.
+ XGUI_OperationMgr* operationMgr() const { return myOperationMgr; }
+
+ /// Returns error manager.
+ XGUI_ErrorMgr* errorMgr() const { return myErrorMgr; }
+
+ /// Returns an actions manager
+ XGUI_ActionsMgr* actionsMgr() const { return myActionsMgr; }
+
+ /// Returns an active control manager
+ XGUI_ActiveControlMgr* activeControlMgr() const { return myActiveControlMgr; }
+
+ /// Returns an actions manager
+ XGUI_MenuMgr* menuMgr() const { return myMenuMgr; }
+
+ /// Returns property panel widget
+ XGUI_PropertyPanel* propertyPanel() const { return myPropertyPanel; }
+
+ /// Returns property panel widget
+ XGUI_InspectionPanel* inspectionPanel() const { return myInspectionPanel; }
+
+ /// Returns panel for hide object faces
+ XGUI_FacesPanel* facesPanel() const { return myFacesPanel; }
+
+ /// Returns context menu manager object
+ XGUI_ContextMenuMgr* contextMenuMgr() const { return myContextMenuMgr; }
+
+ /// Returns an object which provides interface to Salome Module (LightApp_Module)
+ XGUI_SalomeConnector* salomeConnector() const { return mySalomeConnector; }
+
+ /// Provides an object which provides interface to Salome Viewer
ModuleBase_IViewer* salomeViewer() const;
- //! Returns true if the application works as SALOME module
- bool isSalomeMode() const
- {
- return mySalomeConnector != 0;
- }
+ /// Returns true if the application works as SALOME module
+ bool isSalomeMode() const { return mySalomeConnector != 0; }
- //! Returns Object browser
- XGUI_ObjectsBrowser* objectBrowser() const
- {
- return myObjectBrowser;
- }
+ /// Returns Object browser
+ XGUI_ObjectsBrowser* objectBrowser() const { return myObjectBrowser; }
/// This method is called by Salome module when selection is changed
void salomeViewerSelectionChanged();
/// Returns viewer which unifies access as to Salome viewer as to standalone viewer
- XGUI_ViewerProxy* viewer() const
- {
- return myViewerProxy;
- }
+ XGUI_ViewerProxy* viewer() const { return myViewerProxy; }
/// Returns the module connector
/// \returns the instance of connector
- XGUI_ModuleConnector* moduleConnector() const
- {
- return myModuleConnector;
- }
+ XGUI_ModuleConnector* moduleConnector() const { return myModuleConnector; }
/// Returns a desktop
/// \return a desktop instance
QMainWindow* desktop() const;
- //! Delete features
+ /// If faces panel made the object hidden, show message box whether the object should be
+ /// restored (removed from the panel) and displayed, if answer is No, returns false
+ /// \param theObject a model object
+ /// \return boolean state if the object should not be displayed
+ virtual bool prepareForDisplay(const std::set<ObjectPtr>& theObjects) const;
+
+ /// Delete features
void deleteObjects();
- //! Searches for selected features unused in other (not selected) features. If one or several
- //! selected features are found, a warning message proposes to delete them. It contains
- //! the list of features to be deleted.
+ /// Searches for selected features unused in other (not selected) features. If one or several
+ /// selected features are found, a warning message proposes to delete them. It contains
+ /// the list of features to be deleted.
void cleanHistory();
- //! Returns true if the selected feature can be moved to the position after the current feature
- //! \return boolean value
+ /// Returns true if the selected feature can be moved to the position after the current feature
+ /// \return boolean value
bool canMoveFeature();
- //! Move selected features to be after the current feature
- void moveObjects();
+ /// Move selected features to be after the current feature
+ void moveObjects(const bool theSplit);
+
+ /// Start a "Recover" feature on the selected one
+ void recoverFeature();
- //! Returns true if the object can be shaded. If the object is a compsolid result, the method
- //! checks subobjects of the result
- //! \return boolean value
+ /// Returns true if the object can be shaded. If the object is a compsolid result, the method
+ /// checks subobjects of the result
+ /// \return boolean value
bool canBeShaded(const ObjectPtr& theObject) const;
- //! Returns true if there is at least one selected body/construction/group result
- //! \param theActionName text of the checked action
- //! \return boolean value
+ /// Returns true if there is at least one selected body/construction/group result
+ /// \param theActionName text of the checked action
+ /// \return boolean value
bool canChangeProperty(const QString& theActionName) const;
- //! Change color of the results if it is possible
- //! The operation is available for construction, body and group results
- //! theObjects a list of selected objects
+ /// Change color of the results if it is possible
+ /// The operation is available for construction, body and group results
+ /// theObjects a list of selected objects
void changeColor(const QObjectPtrList& theObjects);
- //! Change deflection of the results if it is possible
- //! The operation is available for construction, body and group results
- //! theObjects a list of selected objects
+ /// Change Autocolor of the results if it is possible
+ /// The operation is available for group results
+ /// theObjects a list of selected objects
+ void changeAutoColor(const QObjectPtrList& theObjects);
+
+ /// Change deflection of the results if it is possible
+ /// The operation is available for construction, body and group results
+ /// theObjects a list of selected objects
void changeDeflection(const QObjectPtrList& theObjects);
- //! Change transparency of the results if it is possible
- //! The operation is available for construction, body and group results
- //! theObjects a list of selected objects
+ /// Change transparency of the results if it is possible
+ /// The operation is available for construction, body and group results
+ /// theObjects a list of selected objects
void changeTransparency(const QObjectPtrList& theObjects);
- //! Show the given features in 3d Viewer
+ /// Change number of iso-lines for the given objects
+ /// theObjects a list of selected objects
+ void changeIsoLines(const QObjectPtrList& theObjects);
+
+ /// Show the given features in 3d Viewer
void showObjects(const QObjectPtrList& theList, bool isVisible);
- //! Show the given features in 3d Viewer
+ /// Show the given features in 3d Viewer
void showOnlyObjects(const QObjectPtrList& theList);
/// Set display mode for the given objects
/// \param theMode a mode to set (see \ref XGUI_Displayer)
void setDisplayMode(const QObjectPtrList& theList, int theMode);
+ /// Toggle visualisation of edges direction
+ void toggleEdgesDirection(const QObjectPtrList& theList);
+
+ /// Toggle state of display priority (normal/in front)
+ void toggleBringToFront(const QObjectPtrList& theList);
+
/// Set selection mode in viewer. If theMode=-1 then activate default mode
/// \param theMode the selection mode (according to TopAbs_ShapeEnum)
void setViewerSelectionMode(int theMode);
void activateObjectsSelection(const QObjectPtrList& theList);
/// Returns current module
- ModuleBase_IModule* module() const
- {
- return myModule;
- }
-
- /// Returns current directory which contains data files
- QString currentDataDir() const { return myCurrentDir; }
-
- /// Returns current directory which contains data files
- void setCurrentDataDir(const QString& theDir) { myCurrentDir = theDir; }
-
- /**
- * Save the current document into a directory
- * \param theName - path to the directory
- * \param theFileNames - returned file names created in this directory
- */
+ ModuleBase_IModule* module() const { return myModule; }
+
+ /// Returns current file
+ QString currentDataFile() const { return myCurrentFile; }
+
+ /// Returns current file
+ void setCurrentDataFile(const QString& theDir) { myCurrentFile = theDir; }
+
+ /// Save the current document into a directory
+ /// \param theName - path to the directory
+ /// \param theFileNames - returned file names created in this directory
void saveDocument(const QString& theName, std::list<std::string>& theFileNames);
- /**
- * If there is an active (uncommitted) operation shows a prompt to abort it
- * and performs abortion if user agreed. Returns true if
- * - operation aborted successfully
- * - there is no active operation
- */
+ /// If there is an active (uncommitted) operation shows a prompt to abort it
+ /// and performs abortion if user agreed. Returns true if
+ /// - operation aborted successfully
+ /// - there is no active operation
bool abortAllOperations();
/// Updates workshop state according to the started operation, e.g. visualizes the property panel
/// \param theOpertion a started operation
void operationStarted(ModuleBase_Operation* theOperation);
-
- //! Delete features. Delete the referenced features. There can be a question with a list of
- //! referenced objects.
- //! \param theFeatures a list of objects to be deleted
+ /// Delete features. Delete the referenced features. There can be a question with a list of
+ /// referenced objects.
+ /// \param theFeatures a list of objects to be deleted
bool deleteFeatures(const QObjectPtrList& theFeatures);
/// Deactivates the object, if it is active and the module returns that the activation
/// \param theFeature a feature
bool isFeatureOfNested(const FeaturePtr& theFeature);
- //! Shows the message in the status bar
- //! \param theMessage a message
+ /// Shows the message in the status bar
+ /// \param theMessage a message
void setStatusBarMessage(const QString& theMessage);
+#ifdef HAVE_SALOME
/// Has to be called in order to display objects with visibility status = true
void synchronizeViewer();
/// Has to be called in order to display objects from a specifed group
/// with visibility status = true
/// \param theDoc the document for objects synchronisation
- /// \param theGroup the group name
/// \param theUpdateViewer update viewer flag
void synchronizeGroupInViewer(const DocumentPtr& theDoc,
- const std::string& theGroup,
bool theUpdateViewer);
+ void synchronizeResultTree(const ResultBodyPtr& theRes, bool theUpdateViewer);
+
+#endif
/// Update the property panel content by the XML description of the operation and set the panel
/// into the operation
/// \param theOperation an operation
/// A constant string used for "Move to end" command definition
/// It is used for specific processing of Undo/Redo for this command.
static QString MOVE_TO_END_COMMAND;
+ /// A constant string used for "Move to end and split" command definition
+ /// It is used for specific processing of Undo/Redo for this command.
+ static QString MOVE_TO_END_SPLIT_COMMAND;
+
+ /// Closes all in the current session and load the directory
+ /// \param theDirectory a path to directory
+ void openFile(const QString& theDirectory);
+
+ void updateAutoComputeState();
- //! Closes all in the current session and load the directory
- //! \param theDirectory a path to directory
- void openDirectory(const QString& theDirectory);
+ void deactivateCurrentSelector();
+
+ /// The method updates a Color Scale object in the viewer
+ void updateColorScaleVisibility();
+
+ /// The method updates a Text of Group names in the viewer.
+ void updateGroupsText();
+
+ void showHelpPage(const QString& thePage) const;
signals:
/// Emitted when selection happens in Salome viewer
void salomeViewerSelection();
- //! the signal about the workshop actions states are updated.
+ /// the signal about the workshop actions states are updated.
void commandStatusUpdated();
- //! the application is started
+ /// the application is started
void applicationStarted();
- //! Signal to update Undo history list
+ /// Signal to update Undo history list
void updateUndoHistory(const QList<ActionInfo>&);
- //! Signal to update Redo history list
+ /// Signal to update Redo history list
void updateRedoHistory(const QList<ActionInfo>&);
public slots:
/// Redo previous command
void onRedo(int times = 1);
- // Rebuild data tree
- //void onRebuild();
-
/// Validates the operation to change the "Apply" button state.
/// \param thePreviousState the previous state of the widget
void onWidgetStateChanged(int thePreviousState);
/// Listens the corresponded signal of model widget and updates Apply button state by feature
void onWidgetObjectUpdated();
- /// Show property panel
- void showPropertyPanel();
+ /// Show dock widget panel
+ void showPanel(QDockWidget* theDockWidget);
- /// Hide property panel
- void hidePropertyPanel();
+ /// Hide dock widget panel
+ void hidePanel(QDockWidget* theDockWidget);
/// Show object Browser
void showObjectBrowser();
/// Create a new document
void onNew();
+ /// Import part structure from a file
+ void onImportPart();
+
+ /// Import shape from a file
+ void onImportShape();
+
+ /// Import image from a file
+ void onImportImage();
+
+ /// Export features to a file
+ void onExportPart();
+
+ /// Export a shape to a file
+ void onExportShape();
+
#ifndef HAVE_SALOME
/// Exit application
void onExit();
void onPreferences();
#endif
+ /// A slot calleon toggle of auto-compute button
+ void onAutoApply();
+
/// Activates/deactivates the trihedron in the viewer AIS context
void onTrihedronVisibilityChanged(bool theState);
/// Apply the current transparency value if preview in transparency dialog is switched on
void onTransparencyValueChanged();
- /// Switch on/off preview of transparency change
- void onPreviewStateChanged();
-
protected:
/// Sets the granted operations for the parameter operation. Firstly, it finds the nested features
/// and set them into the operation. Secondly, it asks the module about ids of granted operations.
/// \param theOperation an operation
- void setGrantedFeatures(ModuleBase_Operation* theOperation);
+ void setGrantedFeatures(ModuleBase_Operation* theOperation);
private:
- /// Display all results
- //void displayAllResults();
-
/// Display results from document
/// \param theDoc a document
void displayDocumentResults(DocumentPtr theDoc);
void moveOutFolder(bool isBefore);
private slots:
- /// SLOT, that is called after the operation is started. Update workshop state according to
- /// the started operation, e.g. visualizes the property panel and connect to it.
- /// \param theOpertion a started operation
- // void onOperationStarted(ModuleBase_Operation* theOperation);
-
/// SLOT, that is called after the operation is resumed. Update workshop state according to
/// the started operation, e.g. visualizes the property panel and connect to it.
/// \param theOpertion a resumed operation
/// the operation can be committed and do it if it returns true.
void onAcceptActionClicked();
+ /// Called by OkPlus button clicked in the property panel. Asks the error manager whether
+ /// the operation can be committed and do it if it returns true.
+ void onAcceptPlusActionClicked();
+
/// Called by Preview button clicked in the property panel. Sends signal to model to
/// compute preview.
void onPreviewActionClicked();
+ /// Called on help button clicked in the property panel.
+ void onHelpActionClicked() const;
+
+ //! The slot is called only once on resizing of Object Browser
+ void onDockSizeChanged();
+
private:
- /// Init menu
+ /// Init menu
void initMenu();
/// Register validators
/// \param theParent a parent of widget
QDockWidget* createObjectBrowser(QWidget* theParent);
- /// Create property panel widget
- /// \param theParent a parent of widget
- QDockWidget* createPropertyPanel(QWidget* theParent);
-
// Creates Dock widgets: Object browser and Property panel
void createDockWidgets();
- //! Extends undo/redo toolbutton's with history menu
- //! \param theObject - in the OpenParts it is a QToolButton by itself,
- //! in salome mode - QAction that creates a button.
- //! \param theSignal - void "updateUndoHistory" or "updateRedoHistory" SIGNAL;
- //! \param theSlot - onUndo(int) or onRedo(int) SLOT
+ /// Extends undo/redo toolbutton's with history menu
+ /// \param theObject - in the CADBuilder it is a QToolButton by itself,
+ /// in salome mode - QAction that creates a button.
+ /// \param theSignal - void "updateUndoHistory" or "updateRedoHistory" SIGNAL;
+ /// \param theSlot - onUndo(int) or onRedo(int) SLOT
void addHistoryMenu(QObject* theObject, const char* theSignal, const char* theSlot);
- //! Creates list of actions (commands) by given history list from session
+ /// Creates list of actions (commands) by given history list from session
QList<ActionInfo> processHistoryList(const std::list<std::string>&) const;
+ /// Pefrom Undo/Redo and necessary workshop updates(viewer, browser, actions state)
+ /// \param theActionType a type of the action (Undo or Redo)
+ /// \param theTimes number of applies the given action
+ void processUndoRedo(const ModuleBase_ActionType theActionType, int theTimes);
+
+ /// Clear content of temporary directory
+ void clearTemporaryDir();
+
+ /// Set current point of view normal to selected planar face
+ /// \param toInvert invert the normal vector
+ void setNormalView(bool toInvert = false);
+
private:
#ifndef HAVE_SALOME
- AppElements_MainWindow* myMainWindow;
+ AppElements_MainWindow* myMainWindow; ///< desktop window
#endif
- ModuleBase_IModule* myModule;
- XGUI_ErrorMgr* myErrorMgr;
- XGUI_ObjectsBrowser* myObjectBrowser;
- XGUI_PropertyPanel* myPropertyPanel;
- XGUI_SelectionMgr* mySelector;
- XGUI_Displayer* myDisplayer;
+ ModuleBase_IModule* myModule; ///< current module
+ XGUI_ErrorMgr* myErrorMgr; ///< updator of error message
+ XGUI_ObjectsBrowser* myObjectBrowser; ///< data tree widget
+ XGUI_PropertyPanel* myPropertyPanel; ///< container of feature attributes widgets
+ XGUI_FacesPanel* myFacesPanel; ///< panel for hide object faces
+ XGUI_SelectionMgr* mySelector; ///< handler of selection processing
+ XGUI_SelectionActivate* mySelectionActivate; /// manager of selection activating
+ XGUI_Displayer* myDisplayer; ///< handler of objects display
XGUI_OperationMgr* myOperationMgr; ///< manager to manipulate through the operations
- XGUI_ActionsMgr* myActionsMgr;
+ XGUI_ActionsMgr* myActionsMgr; ///< manager of workshop actions
+ XGUI_ActiveControlMgr* myActiveControlMgr; ///< manager to have none or one active control
XGUI_MenuMgr* myMenuMgr; ///< manager to build menu/tool bar using order defined in XML
- XGUI_SalomeConnector* mySalomeConnector;
- XGUI_ErrorDialog* myErrorDlg;
- XGUI_ViewerProxy* myViewerProxy;
- XGUI_ContextMenuMgr* myContextMenuMgr;
- XGUI_ModuleConnector* myModuleConnector;
- XGUI_WorkshopListener* myEventsListener;
-
- QString myCurrentDir;
-
- QIntList myViewerSelMode;
-
- Config_DataModelReader* myDataModelXMLReader;
+ XGUI_SalomeConnector* mySalomeConnector; ///< connector to SALOME module interface
+ XGUI_ErrorDialog* myErrorDlg; ///< dialog to show information of occured error events
+ XGUI_ViewerProxy* myViewerProxy; ///< connector to SALOME viewer interface
+ XGUI_ContextMenuMgr* myContextMenuMgr; ///< manager of context menu build
+ XGUI_ModuleConnector* myModuleConnector; ///< implementation of ModuleBase_IWorkshop
+ XGUI_WorkshopListener* myEventsListener; ///< processing of events
+ QString myCurrentFile; ///< cached the last open directory
+ QIntList myViewerSelMode; ///< selection modes set in the viewer
+ Config_DataModelReader* myDataModelXMLReader; ///< XML reader of data model
+ XGUI_InspectionPanel* myInspectionPanel; ///< container of feature attributes widgets
+ QTemporaryDir myTmpDir; ///< a direcory for uncompressed files
};
#endif