X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Workshop.h;h=8a96cfa803fd838891e70dad003e90cf6974a787;hb=8259f38e8a93b8a65d5c4ec88a39c211c7ae9c4d;hp=c0ecf8d730bfcf06c163589dc055795764b37563;hpb=75d946b4df9ea0f43fd6802bcebf8c3971539fc9;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Workshop.h b/src/XGUI/XGUI_Workshop.h old mode 100644 new mode 100755 index c0ecf8d73..8a96cfa80 --- a/src/XGUI/XGUI_Workshop.h +++ b/src/XGUI/XGUI_Workshop.h @@ -1,4 +1,22 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> +// Copyright (C) 2014-2017 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 XGUI_WORKSHOP_H #define XGUI_WORKSHOP_H @@ -16,14 +34,18 @@ #include #include +#ifndef HAVE_SALOME class AppElements_MainWindow; class AppElements_Command; class AppElements_Workbench; +#endif class XGUI_ActionsMgr; class XGUI_ContextMenuMgr; class XGUI_Displayer; class XGUI_ErrorDialog; +class XGUI_ErrorMgr; +class XGUI_MenuMgr; class XGUI_ModuleConnector; class XGUI_ObjectsBrowser; class XGUI_OperationMgr; @@ -43,6 +65,7 @@ class QDockWidget; class QMainWindow; class QAction; +class Config_DataModelReader; /**\class XGUI_Workshop * \ingroup GUI @@ -53,7 +76,7 @@ class XGUI_EXPORT XGUI_Workshop : public QObject Q_OBJECT public: /// Constructor - /// \param theConnector a Salome connector object. + /// \param theConnector a Salome connector object. /// Used only if the workshop is launched in Salome environment XGUI_Workshop(XGUI_SalomeConnector* theConnector = 0); virtual ~XGUI_Workshop(); @@ -61,18 +84,23 @@ Q_OBJECT //! Starting of the application void startApplication(); - // Activates the module controls. Should be called after module creation + /// Activates the module controls. Should be called after module creation void activateModule(); - // Deactivates the module controls. Should be called after module creation + /// Deactivates 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; } + //! 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 { @@ -91,12 +119,24 @@ Q_OBJECT 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 { @@ -109,9 +149,6 @@ Q_OBJECT return myContextMenuMgr; } - //! Creates and adds a new workbench (menu group) with the given name and returns it - AppElements_Workbench* addWorkbench(const QString& theName); - //! Returns an object which provides interface to Salome Module (LightApp_Module) XGUI_SalomeConnector* salomeConnector() const { @@ -142,7 +179,7 @@ Q_OBJECT return myViewerProxy; } - /// Returns the module connectory + /// Returns the module connector /// \returns the instance of connector XGUI_ModuleConnector* moduleConnector() const { @@ -156,6 +193,11 @@ Q_OBJECT //! 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. + void cleanHistory(); + //! Returns true if the selected feature can be moved to the position after the current feature //! \return boolean value bool canMoveFeature(); @@ -163,36 +205,59 @@ Q_OBJECT //! Move selected features to be after the current feature void moveObjects(); + //! 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 - bool canChangeColor() const; + bool canChangeProperty(const QString& theActionName) const; - //! Change color of the features if it is possible + //! 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 + 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 + void changeTransparency(const QObjectPtrList& theObjects); + //! Show the given features in 3d Viewer void showObjects(const QObjectPtrList& theList, bool isVisible); //! Show the given features in 3d Viewer void showOnlyObjects(const QObjectPtrList& theList); - /// Set display mode for the given onjects + /// Set display mode for the given objects /// \param theList a list of displayed objects /// \param theMode a mode to set (see \ref XGUI_Displayer) void setDisplayMode(const QObjectPtrList& theList, int theMode); + /// 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); + + /// Activates current selection mode for the given list of objects + void activateObjectsSelection(const QObjectPtrList& theList); + /// Returns current module ModuleBase_IModule* module() const { return myModule; } - /// Returns current directory whic contains data files + /// Returns current directory which contains data files QString currentDataDir() const { return myCurrentDir; } - /// Returns current directory whic contains data files + /// Returns current directory which contains data files void setCurrentDataDir(const QString& theDir) { myCurrentDir = theDir; } /** @@ -203,25 +268,23 @@ Q_OBJECT void saveDocument(const QString& theName, std::list& theFileNames); /** - * If there is an active (uncommited) operation shows a prompt to abort it + * 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 isActiveOperationAborted(); - - //! Delete features. Delete the referenced features. There can be a question with a list of referenced - //! objects. - //! \param theList an objects to be deleted - //! \param theIgnoredFeatures a list of features to be ignored during delete - //! \param theParent a parent widget for the question message box - //! \param theAskAboutDeleteReferences if true, the message box with a list of references to the - //! objects features appear. If the user chose do not continue, the deletion is not performed - //! \return the success of the delete - bool deleteFeatures(const QObjectPtrList& theList, - const std::set& theIgnoredFeatures = std::set(), - QWidget* theParent = 0, - const bool theAskAboutDeleteReferences = false); + bool abortAllOperations(); + + /// Updates workshop state according to the started operation, e.g. visualizes the property panel + /// and connect to it. + /// \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 + bool deleteFeatures(const QObjectPtrList& theFeatures); /// Deactivates the object, if it is active and the module returns that the activation /// of selection for the object is not possible currently(the current operation uses it) @@ -229,13 +292,62 @@ Q_OBJECT /// \param theUpdateViewer a boolean flag to update viewer immediately void deactivateActiveObject(const ObjectPtr& theObject, const bool theUpdateViewer); + /// Returns true if the action of the feature is created to contain Accept/Cancel button + /// \param theFeature a feature + bool isFeatureOfNested(const FeaturePtr& theFeature); + + //! Shows the message in the status bar + //! \param theMessage a message + void setStatusBarMessage(const QString& theMessage); + + /// 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); + + /// Update the property panel content by the XML description of the operation and set the panel + /// into the operation + /// \param theOperation an operation + void fillPropertyPanel(ModuleBase_Operation* theOperation); + + /// Connects or disconnects to the value changed signal of the property panel widgets + /// \param isToConnect a boolean value whether connect or disconnect + void connectToPropertyPanel(const bool isToConnect); + + /// Returns defailt selection mode in 3d viewer + QIntList viewerSelectionModes() const { return myViewerSelMode; } + + /// Highlights result objects in Object Browser according to + /// features found in the given list + void highlightResults(const QObjectPtrList& theObjects); + + /// Highlights feature objects in Object Browser according to + /// features found in the given list + void highlightFeature(const QObjectPtrList& theObjects); + + /// Returns Data Model XML reader which contains information about + /// Data structure configuration + const Config_DataModelReader* dataModelXMLReader() const { return myDataModelXMLReader; } + + /// 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; + + //! Closes all in the current session and load the directory + //! \param theDirectory a path to directory + void openDirectory(const QString& theDirectory); + signals: /// Emitted when selection happens in Salome viewer void salomeViewerSelection(); - /// Emitted when error in applivation happens - void errorOccurred(const QString&); - //! the signal about the workshop actions states are updated. void commandStatusUpdated(); @@ -252,39 +364,34 @@ signals: /// Update of commands status void updateCommandStatus(); - // Update enable state of accept all button. It is enabled if the the parent operation is - // valid and there are modifications in sesstion(undo can be performed). - void updateCompositeActionState(); - /// update history list (undo/redo commands) void updateHistory(); - /// Create a new dokument - void onNew(); - - /// Open document from file - void onOpen(); - /// Save current document bool onSave(); /// Save current document to a file selected by user bool onSaveAs(); - /// Exit application - void onExit(); - /// Undo last command void onUndo(int times = 1); /// Redo previous command void onRedo(int times = 1); - /// Rebuild data tree - void onRebuild(); + // Rebuild data tree + //void onRebuild(); - /// Open preferences dialog box - void onPreferences(); + /// Validates the operation to change the "Apply" button state. + /// \param thePreviousState the previous state of the widget + void onWidgetStateChanged(int thePreviousState); + + /// Calls activate of the current widget again. It is possible that selection filters are + /// differs in the new state of paged container + void onValuesChanged(); + + /// Listens the corresponded signal of model widget and updates Apply button state by feature + void onWidgetObjectUpdated(); /// Show property panel void showPropertyPanel(); @@ -298,42 +405,63 @@ signals: /// Hide object Browser void hideObjectBrowser(); - /// Reaction on command call - //void onFeatureTriggered(); - /// Close document void closeDocument(); - protected: - /// Find the nested features and set them into the operation - /// \param theOperation an operation - void setNestedFeatures(ModuleBase_Operation* theOperation); + /// Open document from file + void onOpen(); - /// Update the property panel content by the XML description of the operation and set the panel - /// into the operation - /// \param theOperation an operation - void setPropertyPanel(ModuleBase_Operation* theOperation); + /// Create a new document + void onNew(); + +#ifndef HAVE_SALOME + /// Exit application + void onExit(); + + /// Open preferences dialog box + void onPreferences(); +#endif + + /// 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(); - /// Connect to operation signals + /// 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 connectWithOperation(ModuleBase_Operation* theOperation); + void setGrantedFeatures(ModuleBase_Operation* theOperation); private: /// Display all results //void displayAllResults(); - /// Displau results from document + /// Display results from document /// \param theDoc a document void displayDocumentResults(DocumentPtr theDoc); /// Display results from a group void displayGroupResults(DocumentPtr theDoc, std::string theGroup); + /// Insert folder object before currently selected feature + void insertFeatureFolder(); + + /// Insert an object to a folder above or below + void insertToFolder(bool isBefore); + + /// Insert an object to a folder above or below + 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); + // 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. @@ -341,12 +469,12 @@ private: virtual void onOperationResumed(ModuleBase_Operation* theOperation); /// SLOT, that is called after the operation is stopped. Update workshop state, e.g. - /// hides the property panel and udpate the command status. + /// hides the property panel and update the command status. /// \param theOpertion a stopped operation virtual void onOperationStopped(ModuleBase_Operation* theOperation); /// SLOT, that is called after the operation is committed. - /// \param theOpertion a commmitted operation + /// \param theOpertion a committed operation virtual void onOperationCommitted(ModuleBase_Operation* theOperation); /// SLOT, that is called after the operation is aborted. @@ -361,6 +489,14 @@ private: /// Set waiting cursor void onStartWaiting(); + /// Called by Ok button clicked in the property panel. Asks the error manager whether + /// the operation can be committed and do it if it returns true. + void onAcceptActionClicked(); + + /// Called by Preview button clicked in the property panel. Sends signal to model to + /// compute preview. + void onPreviewActionClicked(); + private: /// Init menu void initMenu(); @@ -397,14 +533,19 @@ private: QList processHistoryList(const std::list&) const; private: +#ifndef HAVE_SALOME AppElements_MainWindow* myMainWindow; +#endif + ModuleBase_IModule* myModule; + XGUI_ErrorMgr* myErrorMgr; XGUI_ObjectsBrowser* myObjectBrowser; XGUI_PropertyPanel* myPropertyPanel; XGUI_SelectionMgr* mySelector; XGUI_Displayer* myDisplayer; XGUI_OperationMgr* myOperationMgr; ///< manager to manipulate through the operations XGUI_ActionsMgr* myActionsMgr; + XGUI_MenuMgr* myMenuMgr; ///< manager to build menu/tool bar using order defined in XML XGUI_SalomeConnector* mySalomeConnector; XGUI_ErrorDialog* myErrorDlg; XGUI_ViewerProxy* myViewerProxy; @@ -413,6 +554,10 @@ private: XGUI_WorkshopListener* myEventsListener; QString myCurrentDir; + + QIntList myViewerSelMode; + + Config_DataModelReader* myDataModelXMLReader; }; #endif