X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_SketcherReetntrantMgr.h;h=5f68d34ea801da84cd0be655b27c2b820d468092;hb=bd9061e324388f26ea22a3a6071066daefd52300;hp=0c232eef02d8c1ca9ba01781d4a94bfac7c33e66;hpb=15e43ce4e968a935d5276d8e3102b0bd795212b0;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_SketcherReetntrantMgr.h b/src/PartSet/PartSet_SketcherReetntrantMgr.h index 0c232eef0..5f68d34ea 100755 --- a/src/PartSet/PartSet_SketcherReetntrantMgr.h +++ b/src/PartSet/PartSet_SketcherReetntrantMgr.h @@ -24,8 +24,8 @@ class PartSet_Module; /// \ingroup PartSet_SketcherReetntrantMgr /// It provides reentrant create operations in sketch, that is when all inputs are valid, /// automatic validation of the creation and switch the created entity to edit mode -/// ('internal' edit operation), -/// with the ability to simultaneously create the next entity of same type (re-entrance of the operation). +/// ('internal' edit operation), with the ability to simultaneously create the next entity +/// of same type (re-entrance of the operation). /// OK valids the current edition and exits from the operation (no re-entrance). /// Cancel removes (undo) the entity currently edited and exits from the operation (no re-entrance). class PARTSET_EXPORT PartSet_SketcherReetntrantMgr : public QObject @@ -47,24 +47,38 @@ public: virtual ~PartSet_SketcherReetntrantMgr(); public: - /// If the internal edit operation is started, this is the first widget of the operation - ModuleBase_ModelWidget* activeWidget() const; - - /// Restarts sketcher operation automatically. If the commited operation is created, it starts - /// an 'internal' edit operation for the created feature. If an 'internal' operation is committed, - /// a create operation for a new feature with the current feature kind is started. - /// Some internal flags are taken into accout, such as whether the previous feature should be - /// used for initialization of created one or whether the restart of operation is forbidden. - /// \param theOperation a committed operation - /// \return true if an operation restarted + /// Returns a first widget of the current opeation if the internal edit operation is active + /// or return null. If the current widget of the operation is a viewer selector, it returns null. + ModuleBase_ModelWidget* internalActiveWidget() const; + + /// Return true if the current edit operation is an internal + bool isInternalEditActive() const; + + /// Stop internal edit if the operation feature is invalid + void updateInternalEditActiveState(); + + /// if the internal flags allow it and the manager is active, it starts an internal edit operation + /// for the created operation. + /// \param thePreviousAttributeID an index of the previous active attribute + //bool restartOperation(const std::string& thePreviousAttributeID); + bool processEnter(const std::string& thePreviousAttributeID); + + /// Resets the internal flags + /// \param theOperation a started operation + void operationStarted(ModuleBase_Operation* theOperation); + + /// Resets the internal flags + /// \param theOperation a started operation + /// \return state whether the internal edit operation was active bool operationCommitted(ModuleBase_Operation* theOperation); - /// \param theOperation a committed operation + /// Resets the internal flags + /// \param theOperation a started operation void operationAborted(ModuleBase_Operation* theOperation); /// Return true if the manager processes the mouse move event /// It happens if the current operation is an internal edit operation and the first - /// control can be filled by the mouse move event. The operation is committed. + /// control can be filled by the mouse move event. The operation is restarted. /// \return true if operation is committed. bool processMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent); @@ -74,37 +88,69 @@ public: /// Return true if the manager processes the mouse enter event /// It happens if the current operation is an internal edit operation. - /// The operation is committed. + /// The operation is restarted. If the first widget of the started operation is + /// the point 2d, it processes this mouse event /// \return true if operation is committed. bool processMouseReleased(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent); - /// Activates the operation widgets relatively the internal reentrant flags - void propertyPanelDefined(ModuleBase_Operation* theOperation); - - /// It is called by no more widget signal emitted by property panel - /// Set a specific flag to restart the sketcher operation - void noMoreWidgets(const std::string& thePreviousAttributeID); - - /// Processing of vertex selected, if the feature is line, save flags to stop reentrant operation - void vertexSelected(); - - /// It is called by enter key released - /// Set a specific type of restarting the current operation - void enterReleased(); - /// It is called by the current operation filling with the preselection. /// Returns false if the reentrant mode of the operation is not empty. bool canBeCommittedByPreselection(); -public slots: - void onInternalActivateFirstWidgetSelection(); +private slots: + /// SLOT, that is called by a widget activating in the property panel + /// If the 'internal' edit operation is started, it activates the first widget selection + void onWidgetActivated(); + + /// SLOT, that is called by no more widget signal emitted by property panel + /// Start an internal edit operation or, if the internal flag is forbided, commits + /// the current operation + /// \param thePreviousAttributeID an index of the previous active attribute + void onNoMoreWidgets(const std::string& thePreviousAttributeID); + + /// Processing of vertex selected. Set an internal reentrant flag to forbiddent state if + /// the current feature is a line and there are not obligate widgets anymore + void onVertexSelected(); + + /// Deactivates selection and filters of the first operation widget if it is an internal + /// 'edit' operation + void onBeforeStopped(); private: /// Returns true if the current operation is a sketch or a nested sketch operation bool isActiveMgr() const; + /// Sets the focus to the last control of the property panel and activates selection + /// of the first widget to can select first value of the next create operation + /// \param thePreviousAttributeID an index of the previous attribute to set focus to this widget + /// \return true if it is started + bool startInternalEdit(const std::string& thePreviousAttributeID); + + /// Disconnects this manager from operation signals, deactivate selection of the first control + /// in the viewer. + void beforeStopInternalEdit(); + + /// Commits the current operation and launches a new with the commited operation feature index + void restartOperation(); + + /// Creates an internal feature and controls to process it + void createInternalFeature(); + + /// A pair method for an internal creation to remove it and clear all created controls + void deleteInternalFeature(); + /// Breaks sequense of automatically resterted operations - void breakOperationSequence(); + void resetFlags(); + + /// Copy some feature specific attributes from the source to a new feature + /// This is type for Circle and Arc features + /// \param theSourceFeature a source feature + /// \param theNewFeature a new feature + /// \return true is something is copied + static bool copyReetntrantAttributes(const FeaturePtr& theSourceFeature, + const FeaturePtr& theNewFeature); + + static bool isTangentArc(ModuleBase_Operation* theOperation); /// Returns the workshop XGUI_Workshop* workshop() const; @@ -115,13 +161,14 @@ private: private: ModuleBase_IWorkshop* myWorkshop; /// the workshop + RestartingMode myRestartingMode; /// automatical restarting mode flag + bool myIsFlagsBlocked; /// true when reset of flags should not be perfromed bool myIsInternalEditOperation; /// true when the 'internal' edit is started - std::string myLastOperationId; - FeaturePtr myLastFeature; - - std::string myPreviousAttributeID; - RestartingMode myRestartingMode; /// Automatical restarting mode flag + FeaturePtr myInternalFeature; + QWidget* myInternalWidget; + ModuleBase_ModelWidget* myInternalActiveWidget; + std::string myNoMoreWidgetsAttribute; }; #endif