X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelAPI%2FModelAPI_Feature.h;h=1e44a2b9e434929e175269311d3a50c5b16c3210;hb=87bb3bb183012fd6ad662c785e575fff56897905;hp=c266b505ea1a194910a7ab7a020a72b448717532;hpb=fa107dfb3ba274eaeb191c5ec4f6c96517b55a02;p=modules%2Fshaper.git diff --git a/src/ModelAPI/ModelAPI_Feature.h b/src/ModelAPI/ModelAPI_Feature.h index c266b505e..1e44a2b9e 100644 --- a/src/ModelAPI/ModelAPI_Feature.h +++ b/src/ModelAPI/ModelAPI_Feature.h @@ -1,35 +1,36 @@ -// File: ModelAPI_Feature.hxx -// Created: 21 Mar 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_Feature_H_ #define ModelAPI_Feature_H_ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include -#include -#include +#include #include #include -class ModelAPI_Data; -class ModelAPI_Document; -class ModelAPI_Result; - /**\class ModelAPI_Feature * \ingroup DataModel * \brief Feature function that represents the particular functionality @@ -38,20 +39,25 @@ class ModelAPI_Result; class ModelAPI_Feature : public ModelAPI_Object { ///< list of current results of this feature - std::list > myResults; + std::list > myResults; + ///< is feature disabled or not + bool myIsDisabled; + ///< is feature is stable (not editing) + bool myIsStable; + public: /// Returns the unique kind of a feature (like "Point") virtual const std::string& getKind() = 0; /// Returns the group identifier of all features - static std::string group() + inline static std::string group() { static std::string MY_GROUP = "Features"; return MY_GROUP; } /// Returns document this feature belongs to - virtual boost::shared_ptr document() const + virtual std::shared_ptr document() const { return ModelAPI_Object::document(); } @@ -62,29 +68,50 @@ class ModelAPI_Feature : public ModelAPI_Object return group(); } - /// Request for initialization of data model of the feature: adding all attributes - virtual void initAttributes() = 0; - /// Computes or recomputes the results virtual void execute() = 0; + /// Computes the attribute value on the base of other attributes if the value can be computed + /// \param theAttributeId an attribute index to be computed + /// \return a boolean value about it is computed + virtual bool compute(const std::string& theAttributeId) { return false; }; + + /// Registers error during the execution, causes the ExecutionFailed state + MODELAPI_EXPORT virtual void setError(const std::string& theError, + bool isSend = true, + bool isTranslate = true); + + /// Returns error, arose during the execution + virtual std::string error() const { + return data()->error(); + } + /// returns the current results of the feature - MODELAPI_EXPORT const std::list >& results(); + MODELAPI_EXPORT const std::list >& results(); /// returns the first result in the list or NULL reference - MODELAPI_EXPORT boost::shared_ptr firstResult(); + MODELAPI_EXPORT std::shared_ptr firstResult() const; /// returns the last result in the list or NULL reference - MODELAPI_EXPORT boost::shared_ptr lastResult(); + MODELAPI_EXPORT std::shared_ptr lastResult(); /// sets the alone result - MODELAPI_EXPORT void setResult(const boost::shared_ptr& theResult); + MODELAPI_EXPORT void setResult(const std::shared_ptr& theResult); /// sets the result by index (zero based), results before this must be set before - MODELAPI_EXPORT void setResult(const boost::shared_ptr& theResult, + MODELAPI_EXPORT void setResult(const std::shared_ptr& theResult, const int theIndex); /// removes the result from the feature - MODELAPI_EXPORT void removeResult(const boost::shared_ptr& theResult); + MODELAPI_EXPORT void removeResult(const std::shared_ptr& theResult); + /// removes all results starting from the given index (zero-based) + /// \param theSinceIndex - index of the deleted result and all after also will be deleted + /// \param theForever - removes results for long period (not just because of feature disabling) + /// \param theFlush - if it is false, REDISPLAY message is not flushed + MODELAPI_EXPORT void removeResults(const int theSinceIndex, + const bool theForever = true, const bool theFlush = true); /// removes all results from the feature - MODELAPI_EXPORT void eraseResults(); + MODELAPI_EXPORT void eraseResults(const bool theForever = true); /// removes all fields from this feature: results, data, etc MODELAPI_EXPORT virtual void erase(); + /// removes the result from the list of feature (not doing in disabled): normally this + /// method is not used from features. only internally + MODELAPI_EXPORT void eraseResultFromList(const std::shared_ptr& theResult); /// Returns true if result is persistent (stored in document) and on undo-redo, save-open /// it is not needed to recompute it. @@ -97,82 +124,134 @@ class ModelAPI_Feature : public ModelAPI_Object return false; } + /// Returns true if this feature is used as macro: creates other features and then removed. + /// \returns false by default + MODELAPI_EXPORT virtual bool isMacro() const; + + /// Returns true if preview update during the edition needed. Otherwise the update-mechanism + /// calls the \a execute function only on "apply" of the operation + /// \returns true by default + MODELAPI_EXPORT virtual bool isPreviewNeeded() const; + /// Must return document where the new feature must be added to - /// By default it is current document - MODELAPI_EXPORT virtual boost::shared_ptr documentToAdd(); + /// By default it is empty: it is added to the document this method is called to + MODELAPI_EXPORT virtual const std::string& documentToAdd(); + + /// Enables/disables the feature. The disabled feature has no results and does not participate in + /// any calculation. + /// \returns true if state is really changed + MODELAPI_EXPORT virtual bool setDisabled(const bool theFlag); + + /// Returns the feature is disabled or not. + MODELAPI_EXPORT virtual bool isDisabled(); /// To virtually destroy the fields of successors MODELAPI_EXPORT virtual ~ModelAPI_Feature(); - MODELAPI_EXPORT static boost::shared_ptr feature(ObjectPtr theObject); + /// Returns the feature by the object (result). + MODELAPI_EXPORT static std::shared_ptr feature(ObjectPtr theObject); + + /// Set the stable feature flag. If feature is currently editing then it is not stable. + /// \returns true if state is really changed + MODELAPI_EXPORT virtual bool setStable(const bool theFlag); + + /// Returns the feature is stable or not. + MODELAPI_EXPORT virtual bool isStable(); + + /// Performs some custom feature specific functionality (normally called by some GUI button) + /// \param theActionId an action key + /// \return a boolean value about it is performed + MODELAPI_EXPORT virtual bool customAction(const std::string& theActionId); // // Helper methods, aliases for data()->method() // ----------------------------------------------------------------------------------------------- + /// Returns the name stored in the attribute inline std::string name() { return data()->name(); } - - inline boost::shared_ptr boolean(const std::string& theID) + /// Returns the Boolean attribute by the identifier + inline std::shared_ptr boolean(const std::string& theID) { return data()->boolean(theID); } - - inline boost::shared_ptr document(const std::string& theID) + /// Returns the document reference attribute + inline std::shared_ptr document(const std::string& theID) { return data()->document(theID); } - - inline boost::shared_ptr real(const std::string& theID) + /// Returns the real attribute by the identifier + inline std::shared_ptr real(const std::string& theID) { return data()->real(theID); } - - inline boost::shared_ptr integer(const std::string& theID) + /// Returns the integer attribute by the identifier + inline std::shared_ptr integer(const std::string& theID) { return data()->integer(theID); } - - inline boost::shared_ptr refattr(const std::string& theID) + /// Returns the integer array attribute by the identifier + inline std::shared_ptr intArray(const std::string& theID) + { + return data()->intArray(theID); + } + /// Returns the reference attribute by the identifier + inline std::shared_ptr refattr(const std::string& theID) { return data()->refattr(theID); } - - inline boost::shared_ptr reference(const std::string& theID) + /// Returns the reference attribute by the identifier + inline std::shared_ptr reference(const std::string& theID) { return data()->reference(theID); } - - inline boost::shared_ptr reflist(const std::string& theID) + /// Returns the list of references attribute by the identifier + inline std::shared_ptr reflist(const std::string& theID) { return data()->reflist(theID); } - - inline boost::shared_ptr selection(const std::string& theID) + /// Returns the shape selection attribute by the identifier + inline std::shared_ptr selection(const std::string& theID) { return data()->selection(theID); } - - inline boost::shared_ptr selectionList(const std::string& theID) + /// Returns the list of shape selections attribute by the identifier + inline std::shared_ptr selectionList(const std::string& theID) { return data()->selectionList(theID); } - - inline boost::shared_ptr string(const std::string& theID) + /// Returns the string attribute by the identifier + inline std::shared_ptr string(const std::string& theID) { return data()->string(theID); } - - inline boost::shared_ptr attribute(const std::string& theID) + /// Returns the string array attribute by the identifier + inline std::shared_ptr stringArray(const std::string& theID) + { + return data()->stringArray(theID); + } + /// Returns the tables attribute by the identifier + inline std::shared_ptr tables(const std::string& theID) + { + return data()->tables(theID); + } + /// Returns the attribute by the identifier + inline std::shared_ptr attribute(const std::string& theID) { return data()->attribute(theID); } - // ----------------------------------------------------------------------------------------------- + protected: + /// This method is called just after creation of the object: it must initialize + /// all fields, normally initialized in the constructor + MODELAPI_EXPORT virtual void init(); + + friend class Model_Document; + friend class Model_Objects; }; //! Pointer on feature object -typedef boost::shared_ptr FeaturePtr; +typedef std::shared_ptr FeaturePtr; #endif