X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_Operation.cpp;h=2dc4b8f0512af9c1e29e6bfe3bfec59298b533ac;hb=719f3932991137a0c1d054ee9051fd1ae4eac3ac;hp=9def6b185607c528fcff46672bad7f21df07ecef;hpb=199ba9a901b30996e1185a1e7d7b05d972ca8121;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Operation.cpp b/src/ModuleBase/ModuleBase_Operation.cpp index 9def6b185..2dc4b8f05 100644 --- a/src/ModuleBase/ModuleBase_Operation.cpp +++ b/src/ModuleBase/ModuleBase_Operation.cpp @@ -1,258 +1,39 @@ /* * ModuleBase_Operation.cpp * - * Created on: Apr 2, 2014 - * Author: sbh + * Created on: May 5, 2014 + * Author: nds */ #include "ModuleBase_Operation.h" +#include "ModuleBase_OperationDescription.h" +#include "ModuleBase_ModelWidget.h" + #include #include #include #include -#include #include #ifdef _DEBUG #include #endif -/*! - \brief Constructor - \param XGUI_Workshop - workshop for this operation - - Constructs an empty operation. Constructor should work very fast because many - operators may be created after starting workshop but only several from them - may be used. As result this constructor stores given workshop in myApp field - and set Waiting status. - */ -ModuleBase_Operation::ModuleBase_Operation(const QString& theId, QObject* parent) - : QObject(parent), - myFlags(Transaction), - myState(Waiting), - myExecStatus(Rejected), - myOperationId(theId) +ModuleBase_Operation::ModuleBase_Operation(const QString& theId, QObject* theParent) +: ModuleBase_IOperation(theId, theParent) { } -/*! - * \brief Destructor - */ ModuleBase_Operation::~ModuleBase_Operation() { - -} - -/*! - * \brief Unique name of the operation - * - * Returns string name of the operation. - */ -QString ModuleBase_Operation::operationId() const -{ - return myOperationId; -} - -/*! - * \brief Gets state of operation - * \return Value from OperationState enumeration - * - * Gets state of operation (see OperationState enumeration) - */ -ModuleBase_Operation::OperationState ModuleBase_Operation::state() const -{ - return myState; -} - -/*! - * \brief Verifies whether operation is an ran one (state()==Running) - * \return TRUE if operation is active, FALSE otherwise - * - * Verifies whether operation is an running. Returns TRUE if state of operator - * is Running - */ -bool ModuleBase_Operation::isRunning() const -{ - return state() == Running; -} - -/*! - * \brief Verifies whether given operator is valid for this one - * \param theOtherOp - other operation - * \return Returns TRUE if the given operator is valid for this one - * - * Verifies whether given operator is valid for this one (i.e. can be started "above" - * this operator) - */ -bool ModuleBase_Operation::isValid(ModuleBase_Operation*) const -{ - return false; -} - -/*! - * \brief Verifies whether this operator can be always started above any already running one - * \return Returns TRUE if current operation must not be checked for ActiveOperation->IsValid( this ) - * - * This method must be redefined in derived operation if operation of derived class - * must be always can start above any launched one. Default implementation returns FALSE, - * so it is being checked for IsValid, but some operations may overload IsGranted() - * In this case they will always start, no matter what operation is running. - */ -bool ModuleBase_Operation::isGranted() const -{ - return false; -} - -/* - * Returns pointer to the root document. - */ -std::shared_ptr ModuleBase_Operation::document() const -{ - return ModelAPI_PluginManager::get()->rootDocument(); -} - -/*! - * \brief Sets slot which is called when operation is started - * \param theReceiver - object containing slot - * \param theSlot - slot of theReceiver object - * \return TR if slot was connected successfully, FALSE otherwise - * - * Sets slot which is called when operation is started. There is no point in - * using this method. It would be better to inherit own operator from base - * one and redefine startOperation method - */ -bool ModuleBase_Operation::setSlot(const QObject* theReceiver, const char* theSlot) -{ - return connect(this, SIGNAL(callSlot()), theReceiver, theSlot); -} - -/*! - * \brief Sets the flags of operation - * \param f - flags of operation to be set - * - * Sets flags of operation (see Flags enumeration) - */ -void ModuleBase_Operation::setFlags(const int f) -{ - myFlags = myFlags | f; -} - -/*! - * \brief Clears the flags of operation - * \param f - flags of operation to be cleared - * - * Clears flags of operation (see Flags enumeration) - */ -void ModuleBase_Operation::clearFlags(const int f) -{ - myFlags = myFlags & ~f; -} - -/*! - * \brief Test the flags of operation - * \param f - flags of operation to be tested - * - * Returns TRUE if the specified flags set in the operation (see Flags enumeration) - */ -bool ModuleBase_Operation::testFlags(const int f) const -{ - return (myFlags & f) == f; } -/*! - * \brief Gets execution status - * \return Execution status - * - * Gets execution status - */ -int ModuleBase_Operation::execStatus() const -{ - return myExecStatus; -} - -/*! - * \brief Returns XML representation of the operation's widget. - * \return XML QString - * - * Returns XML representation of the operation's widget. - */ -const QString& ModuleBase_Operation::xmlRepresentation() const -{ - return myXmlRepr; -} - -/*! - * \brief Sets XML representation of the operation's widget. - * \param xmlRepr - XML QString - * - * Sets XML representation of the operation's widget. - */ -void ModuleBase_Operation::setXmlRepresentation(const QString& xmlRepr) -{ - myXmlRepr = xmlRepr; -} - -/*! - * \brief Starts operation - * - * Public slot. Verifies whether operation can be started and starts operation. - * This slot is not virtual and cannot be redefined. Redefine startOperation method - * to change behavior of operation. There is no point in using this method. It would - * be better to inherit own operator from base one and redefine startOperation method - * instead. - */ -void ModuleBase_Operation::start() -{ - //document()->start(this); - document()->startOperation(); - - startOperation(); - emit started(); -} - -/*! - * \brief Aborts operation - * - * Public slot. Aborts operation. This slot is not virtual and cannot be redefined. - * Redefine abortOperation method to change behavior of operation instead - */ -void ModuleBase_Operation::abort() +boost::shared_ptr ModuleBase_Operation::feature() const { - abortOperation(); - myState = Waiting; - emit aborted(); - - stopOperation(); - emit stopped(); - - document()->abortOperation(); + return myFeature; } -/*! - * \brief Commits operation - * - * Public slot. Commits operation. This slot is not virtual and cannot be redefined. - * Redefine commitOperation method to change behavior of operation instead - */ -void ModuleBase_Operation::commit() -{ - commitOperation(); - myState = Waiting; - emit committed(); - - stopOperation(); - emit stopped(); - - document()->finishOperation(); -} - -/*! - * \brief Stores a real value in model. - * \param theValue - to store - * - * Public slot. Passes theValue into the model. - */ void ModuleBase_Operation::storeReal(double theValue) { if(!myFeature){ @@ -263,83 +44,57 @@ void ModuleBase_Operation::storeReal(double theValue) return; } QString anId = sender()->objectName(); - std::shared_ptr aData = myFeature->data(); - std::shared_ptr aReal = aData->real(anId.toStdString()); + boost::shared_ptr aData = myFeature->data(); + boost::shared_ptr aReal = aData->real(anId.toStdString()); aReal->setValue(theValue); } -/*! - * \brief Verifies whether operator is ready to start. - * \return TRUE if operation is ready to start - * - * Default implementation returns TRUE. Redefine this method to add own verifications - */ -bool ModuleBase_Operation::isReadyToStart() const +void ModuleBase_Operation::storeCustomValue() { - return true; + if(!myFeature){ + #ifdef _DEBUG + qDebug() << "ModuleBase_Operation::storeCustom: " << + "trying to store value without opening a transaction."; + #endif + return; + } + + ModuleBase_ModelWidget* aCustom = dynamic_cast(sender()); + if (aCustom) + aCustom->storeValue(myFeature); } -/*! - * \brief Virtual method called when operation is started - * - * Virtual method called when operation started (see start() method for more description) - * Default implementation calls corresponding slot and commits immediately. - */ void ModuleBase_Operation::startOperation() { - std::shared_ptr aDoc = ModelAPI_PluginManager::get()->rootDocument(); - myFeature = aDoc->addFeature(myOperationId.toStdString()); - myFeature->execute(); + setFeature(createFeature()); //emit callSlot(); //commit(); } -/*! - * \brief Virtual method called when operation is started - * - * Virtual method called when operation stopped - committed or aborted. - */ void ModuleBase_Operation::stopOperation() { } -/*! - * \brief Virtual method called when operation aborted - * - * Virtual method called when operation aborted (see abort() method for more description) - */ void ModuleBase_Operation::abortOperation() { } -/*! - * \brief Virtual method called when operation committed - * - * Virtual method called when operation committed (see commit() method for more description) - */ void ModuleBase_Operation::commitOperation() { - myFeature->execute(); + if (myFeature) myFeature->execute(); } -/*! - * \brief Sets execution status - * \param theStatus - execution status - * - * Sets myExecStatus to the given value - */ -void ModuleBase_Operation::setExecStatus(const int theVal) +boost::shared_ptr ModuleBase_Operation::createFeature() { - myExecStatus = (ExecStatus) theVal; + boost::shared_ptr aDoc = document(); + boost::shared_ptr aFeature = aDoc->addFeature( + getDescription()->operationId().toStdString()); + if (aFeature) // TODO: generate an error if feature was not created + aFeature->execute(); + return aFeature; } -/*! - * \brief Sets state of operation - * \param theState - state of operation to be set - * - * Sets state of operation (see OperationState enumeration) - */ -void ModuleBase_Operation::setState(const ModuleBase_Operation::OperationState theState) +void ModuleBase_Operation::setFeature(boost::shared_ptr theFeature) { - myState = theState; + myFeature = theFeature; }