X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelAPI%2FModelAPI_Events.h;h=1d69e38a961c276967a8ebedb1c5b2e745eb2477;hb=5a67842979db286af5bb5015fe413d8b06c6587e;hp=00e61330a7634b121fe47a5fc8361fe63229b7c1;hpb=c9b975947df05917fbcf944c9546debda1f174e7;p=modules%2Fshaper.git diff --git a/src/ModelAPI/ModelAPI_Events.h b/src/ModelAPI/ModelAPI_Events.h index 00e61330a..1d69e38a9 100644 --- a/src/ModelAPI/ModelAPI_Events.h +++ b/src/ModelAPI/ModelAPI_Events.h @@ -1,8 +1,22 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: ModelAPI_Events.h -// Created: 10 Apr 2014 -// Author: Mikhail PONIKAROV +// 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 MODELAPI_EVENTS_H_ #define MODELAPI_EVENTS_H_ @@ -10,6 +24,7 @@ #include #include #include +#include #include #include @@ -20,6 +35,7 @@ class ModelAPI_Document; +class ModelAPI_ResultParameter; /// Event ID that feature is created (comes with ModelAPI_ObjectUpdatedMessage) static const char * EVENT_OBJECT_CREATED = "ObjectCreated"; @@ -27,28 +43,60 @@ static const char * EVENT_OBJECT_CREATED = "ObjectCreated"; static const char * EVENT_OBJECT_UPDATED = "ObjectUpdated"; /// Event ID that data of feature is deleted (comes with Model_ObjectDeletedMessage) static const char * EVENT_OBJECT_DELETED = "ObjectDeleted"; +/// Event ID that name of feature is changed (comes with Model_ObjectRenamedMessage) +static const char * EVENT_OBJECT_RENAMED = "ObjectRenamed"; /// Event ID that data of feature is updated (comes with ModelAPI_ObjectUpdatedMessage) static const char * EVENT_OBJECT_MOVED = "ObjectsMoved"; /// Event ID that visualization must be redisplayed (comes with ModelAPI_ObjectUpdatedMessage) static const char * EVENT_OBJECT_TO_REDISPLAY = "ObjectsToRedisplay"; -/// Event ID that visualization must be redisplayed (comes with ModelAPI_ObjectUpdatedMessage) -static const char * EVENT_OPERATION_LAUNCHED = "OperationLaunched"; /// Event ID that plugin is loaded (comes with ModelAPI_ObjectUpdatedMessage) -static const char * EVENT_PLUGIN_LOADED = "PliginLoaded"; -/// Event ID that data of feature has to be shown (comes with ModelAPI_ObjectUpdatedMessage) -static const char * EVENT_OBJECT_TOSHOW = "ObjectShow"; -/// Event ID that data of feature has to be shown (comes with ModelAPI_ObjectUpdatedMessage) -static const char * EVENT_OBJECT_TOHIDE = "ObjectHide"; -// +static const char * EVENT_PLUGIN_LOADED = "PluginLoaded"; +/// The active document becomes another one static const char * EVENT_DOCUMENT_CHANGED = "CurrentDocumentChanged"; +/// Event ID that order of objects in group is changed, +/// so, tree must be fully rectreated (movement of feature) +static const char * EVENT_ORDER_UPDATED = "OrderUpdated"; +/// Event ID that the sketch is prepared and all grouped messages for the solver may be flushed +static const char * EVENT_UPDATE_SELECTION = "UpdateSelection"; + +/// Request for the enabled/disabled actions behavior for some specific features static const char * EVENT_FEATURE_STATE_REQUEST = "FeatureStateRequest"; +/// Reply for the enabled/disabled actions behavior for some specific features static const char * EVENT_FEATURE_STATE_RESPONSE = "FeatureStateResponse"; - +/// To block the viewer updates static const char * EVENT_UPDATE_VIEWER_BLOCKED = "UpdateViewerBlocked"; +/// To unblock the viewer updates static const char * EVENT_UPDATE_VIEWER_UNBLOCKED = "UpdateViewerUnblocked"; +/// To inform that there is an empty presentation in the viewer +static const char * EVENT_EMPTY_AIS_PRESENTATION = "EmptyAISPresentation"; +/// To inform that there is an empty operation for presentation in the viewer +static const char * EVENT_EMPTY_OPERATION_PRESENTATION = "EmptyOperationPresentation"; +/// To block preview +static const char * EVENT_PREVIEW_BLOCKED = "PreviewBlocked"; +/// To preview the current feature in the viewer (to compute the result) +static const char * EVENT_PREVIEW_REQUESTED = "PreviewRequested"; + +/// Event ID that solver has conflicting constraints (comes with ModelAPI_SolverFailedMessage) +static const char * EVENT_SOLVER_FAILED = "SolverFailed"; +/// Event ID that the problem in solver disappeared +static const char * EVENT_SOLVER_REPAIRED = "SolverRepaired"; + +/// Event Id that sketch has DoF = 0 +static const char * EVENT_SKETCH_FULLY_CONSTRAINED = "SketchFullyConstrainted"; +/// Event Id that sketch has DoF > 0 +static const char * EVENT_SKETCH_UNDER_CONSTRAINED = "SketchUnderConstrainted"; +/// Event Id that sketch has DoF < 0 +static const char * EVENT_SKETCH_OVER_CONSTRAINED = "SketchOverConstrainted"; + +/// Event ID that informs that some object has changed the stability +static const char * EVENT_STABILITY_CHANGED = "StabilityChanged"; + +/// Event ID that the sketch is prepared and all grouped messages for the solver may be flushed +static const char * EVENT_SKETCH_PREPARED = "SketchPrepared"; + /// Message that feature was changed (used for Object Browser update): moved, updated and deleted class MODELAPI_EXPORT ModelAPI_ObjectUpdatedMessage : public Events_MessageGroup { @@ -79,10 +127,10 @@ protected: virtual ~ModelAPI_ObjectDeletedMessage(); public: - /// Returns the feature that has been updated + /// Returns the document that has been updated virtual std::shared_ptr document() const = 0; - /// Returns the group where the feature was deleted + /// Returns the groups where the objects were deleted virtual const std::set& groups() const = 0; /// Creates the new empty message of this kind @@ -95,6 +143,23 @@ public: virtual void Join(const std::shared_ptr& theJoined) = 0; }; +/// Message that order changed (used for Object Browser update) +class MODELAPI_EXPORT ModelAPI_OrderUpdatedMessage : public Events_Message +{ +protected: + /// Creates a message: + ModelAPI_OrderUpdatedMessage(const Events_ID theID, const void* theSender = 0); + /// The virtual destructor + virtual ~ModelAPI_OrderUpdatedMessage(); + +public: + /// Returns the document that has been updated + virtual std::shared_ptr reordered() = 0; + + /// Returns the identifier of the kind of a message + virtual const Events_ID messageId() = 0; +}; + /// Allows to create ModelAPI messages class MODELAPI_EXPORT ModelAPI_EventCreator { @@ -105,6 +170,8 @@ public: /// creates deleted message and sends to the loop virtual void sendDeleted(const std::shared_ptr& theDoc, const std::string& theGroup) const = 0; + /// creates reordered message and sends to the loop + virtual void sendReordered(const std::shared_ptr& theReordered) const = 0; /// returns the creator instance static const ModelAPI_EventCreator* get(); @@ -167,4 +234,237 @@ class ModelAPI_DocumentCreatedMessage : public Events_Message MODELAPI_EXPORT void setDocument(DocumentPtr theDocument); }; +/// Message that attribute text should be evaluated in the attribute value +class ModelAPI_AttributeEvalMessage : public Events_Message +{ + AttributePtr myAttribute; + + public: + /// Static. Returns EventID of the message. + MODELAPI_EXPORT static Events_ID& eventId() + { + static const char * MY_ATTRIBUTE_EVALUATION_EVENT_ID("AttributeEvaluationRequest"); + static Events_ID anId = Events_Loop::eventByName(MY_ATTRIBUTE_EVALUATION_EVENT_ID); + return anId; + } + + /// Useful method that creates and sends the AttributeEvalMessage event + MODELAPI_EXPORT static void send(AttributePtr theAttribute, const void* theSender) + { + std::shared_ptr aMessage = + std::shared_ptr( + new ModelAPI_AttributeEvalMessage(eventId(), theSender)); + aMessage->setAttribute(theAttribute); + Events_Loop::loop()->send(aMessage); + } + + /// Creates an empty message + MODELAPI_EXPORT ModelAPI_AttributeEvalMessage(const Events_ID theID, const void* theSender = 0); + /// The virtual destructor + MODELAPI_EXPORT virtual ~ModelAPI_AttributeEvalMessage(); + + /// Returns a document stored in the message + MODELAPI_EXPORT AttributePtr attribute() const; + /// Sets an attribute to the message + MODELAPI_EXPORT void setAttribute(AttributePtr theAttribute); +}; + +/// Message that parameter feature expression should be evaluated: value and error producing +class ModelAPI_ParameterEvalMessage : public Events_Message +{ + FeaturePtr myParam; ///< parameters that should be evaluated + bool myIsProcessed; ///< true if results were set + /// result of processing, list of parameters in expression found + std::list > myParamsList; + double myResult; ///< result of processing, the computed value of the expression + std::string myError; ///< error of processing, empty if there is no error + + public: + /// Static. Returns EventID of the message. + MODELAPI_EXPORT static Events_ID& eventId() + { + static const char * MY_PARAMETER_EVALUATION_EVENT_ID("ParameterEvaluationRequest"); + static Events_ID anId = Events_Loop::eventByName(MY_PARAMETER_EVALUATION_EVENT_ID); + return anId; + } + + /// Useful method that creates and sends the event. + /// Returns the message, processed, with the resulting fields filled. + MODELAPI_EXPORT static std::shared_ptr + send(FeaturePtr theParameter, const void* theSender) + { + std::shared_ptr aMessage = + std::shared_ptr( + new ModelAPI_ParameterEvalMessage(eventId(), theSender)); + aMessage->setParameter(theParameter); + Events_Loop::loop()->send(aMessage); + return aMessage; + } + + /// Creates an empty message + MODELAPI_EXPORT ModelAPI_ParameterEvalMessage(const Events_ID theID, const void* theSender = 0); + /// The virtual destructor + MODELAPI_EXPORT virtual ~ModelAPI_ParameterEvalMessage(); + + /// Returns a parameter stored in the message + MODELAPI_EXPORT FeaturePtr parameter() const; + /// Sets a parameter to the message + MODELAPI_EXPORT void setParameter(FeaturePtr theParam); + /// Sets the results of processing + MODELAPI_EXPORT void setResults( + const std::list >& theParamsList, + const double theResult, const std::string& theError); + /// Returns true if the expression is processed + MODELAPI_EXPORT bool isProcessed(); + /// Returns the results of processing: list of parameters found in the expression + MODELAPI_EXPORT const std::list >& params() const; + /// Returns the expression result + MODELAPI_EXPORT const double& result() const; + /// Returns the interpreter error (empty if no error) + MODELAPI_EXPORT const std::string& error() const; +}; + + +/// Message to ask compute the positions of parameters in the expression +class ModelAPI_ComputePositionsMessage : public Events_Message +{ + std::string myExpression; ///< the expression string + std::string myParamName; ///< name of the parameter to be searched + std::list > myPositions; ///< computation result: start-end position indices + +public: + /// Static. Returns EventID of the message. + MODELAPI_EXPORT static Events_ID& eventId() + { + static const char * MY_COMPUTE_POSITIOND_EVENT_ID("ComputePositionsRequest"); + static Events_ID anId = Events_Loop::eventByName(MY_COMPUTE_POSITIOND_EVENT_ID); + return anId; + } + + /// Useful method that creates and sends the AttributeEvalMessage event + /// Returns the message, processed, with the resulting fields filled + MODELAPI_EXPORT static std::shared_ptr + send(const std::string& theExpression, const std::string& theParameter, const void* theSender) + { + std::shared_ptr aMessage = + std::shared_ptr( + new ModelAPI_ComputePositionsMessage(eventId(), theSender)); + aMessage->set(theExpression, theParameter); + Events_Loop::loop()->send(aMessage); + return aMessage; + } + + /// Creates an empty message + MODELAPI_EXPORT ModelAPI_ComputePositionsMessage( + const Events_ID theID, const void* theSender = 0); + /// The virtual destructor + MODELAPI_EXPORT virtual ~ModelAPI_ComputePositionsMessage(); + + /// Returns an expression stored in the message + MODELAPI_EXPORT const std::string& expression() const; + /// Returns a parameter name stored in the message + MODELAPI_EXPORT const std::string& parameter() const; + /// Sets an expression and parameter needed for computation + MODELAPI_EXPORT void set(const std::string& theExpression, const std::string& theParameter); + /// Sets the results of processing + MODELAPI_EXPORT void setPositions(const std::list >& thePositions); + /// Returns the results of processing: position start and end indices + MODELAPI_EXPORT const std::list >& positions() const; +}; + +/// Message that the object is renamed +class ModelAPI_ObjectRenamedMessage : public Events_Message +{ + ObjectPtr myObject; + std::string myOldName; + std::string myNewName; + + public: + /// Static. Returns EventID of the message. + MODELAPI_EXPORT static Events_ID& eventId() + { + static const char * MY_OBJECT_RENAMED_EVENT_ID("ObjectRenamed"); + static Events_ID anId = Events_Loop::eventByName(MY_OBJECT_RENAMED_EVENT_ID); + return anId; + } + + /// Useful method that creates and sends the AttributeEvalMessage event + MODELAPI_EXPORT static void send(ObjectPtr theObject, + const std::string& theOldName, + const std::string& theNewName, + const void* theSender); + + /// Creates an empty message + MODELAPI_EXPORT ModelAPI_ObjectRenamedMessage(const Events_ID theID, const void* theSender = 0); + /// The virtual destructor + MODELAPI_EXPORT virtual ~ModelAPI_ObjectRenamedMessage(); + + /// Returns an object + MODELAPI_EXPORT ObjectPtr object() const; + /// Sets an object + MODELAPI_EXPORT void setObject(ObjectPtr theObject); + /// Returns an old name + MODELAPI_EXPORT std::string oldName() const; + /// Sets an old name + MODELAPI_EXPORT void setOldName(const std::string& theOldName); + /// Returns a new name + MODELAPI_EXPORT std::string newName() const; + /// Sets a new name + MODELAPI_EXPORT void setNewName(const std::string& theNewName); +}; + +/// Message that the parameter should be replaced with its value +class ModelAPI_ReplaceParameterMessage : public Events_Message +{ + ObjectPtr myObject; + + public: + /// Static. Returns EventID of the message. + MODELAPI_EXPORT static Events_ID& eventId() + { + static const char * MY_EVENT_ID("ReplaceParameter"); + static Events_ID anId = Events_Loop::eventByName(MY_EVENT_ID); + return anId; + } + + /// Useful method that creates and sends the AttributeEvalMessage event + MODELAPI_EXPORT static void send(ObjectPtr theObject, + const void* theSender); + + /// Creates an empty message + MODELAPI_EXPORT + ModelAPI_ReplaceParameterMessage(const Events_ID theID, const void* theSender = 0); + /// The virtual destructor + MODELAPI_EXPORT virtual ~ModelAPI_ReplaceParameterMessage(); + + /// Returns an object + MODELAPI_EXPORT ObjectPtr object() const; + /// Sets an object + MODELAPI_EXPORT void setObject(ObjectPtr theObject); +}; + +/// Message that sends the sketch solver and sketcher GUI processes to show in the property panel +class ModelAPI_SolverFailedMessage : public Events_Message +{ +public: + /// Creates an message + MODELAPI_EXPORT ModelAPI_SolverFailedMessage(const Events_ID theID, const void* theSender = 0); + /// Default destructor + MODELAPI_EXPORT virtual ~ModelAPI_SolverFailedMessage(); + + /// Sets list of conflicting constraints + MODELAPI_EXPORT void setObjects(const std::set& theObjects); + /// Returns list of conflicting constraints + MODELAPI_EXPORT const std::set& objects() const; + + /// Sets degrees of freedom + void dof(const int theDOF) { myDOF = theDOF; } + /// Returns degrees of freedom + const int& dof() const { return myDOF; } + +private: + std::set myObjects; + int myDOF; +}; + #endif