Browse Source

ctkWorkflowStep - setId() and id() are public and exposed in python

If 'id' is not set, it will be set by the associated workflow to: "step<STEPCOUNT>"
Jean-Christophe Fillion-Robin 14 years ago
parent
commit
70912ce477

+ 5 - 0
Libs/Core/ctkCorePythonQtDecorators.h

@@ -74,6 +74,11 @@ public slots:
     return step->id();
     }
 
+  void setId(ctkWorkflowStep* step, const QString& newId)const
+    {
+    step->setId(newId);
+    }
+
   QString name(ctkWorkflowStep* step)const
     {
     return step->name();

+ 12 - 0
Libs/Core/ctkWorkflow.cpp

@@ -550,6 +550,12 @@ bool ctkWorkflow::addTransition(ctkWorkflowStep* origin, ctkWorkflowStep* destin
     return false;
     }
 
+  // Set origin id if empty
+  if (origin && origin->id().isEmpty())
+    {
+    origin->setId(QString("step%1").arg(d->StepToForwardAndBackwardStepMap.count()));
+    }
+
   // cannot currently create a transition between two steps of the same id, which is equivalent to
   // adding a transition from a step to itself
   if (origin && destination && (QString::compare(origin->id(), destination->id(), Qt::CaseInsensitive) == 0))
@@ -565,6 +571,12 @@ bool ctkWorkflow::addTransition(ctkWorkflowStep* origin, ctkWorkflowStep* destin
     d->addStep(origin);
     }
 
+  // Set destination id if empty
+  if (destination && destination->id().isEmpty())
+    {
+    destination->setId(QString("step%1").arg(d->StepToForwardAndBackwardStepMap.count()));
+    }
+
   // add the destination step if it doesn't exist in the workflow yet
   if (destination && !this->hasStep(destination->id()))
     {

+ 15 - 25
Libs/Core/ctkWorkflowStep.cpp

@@ -117,9 +117,6 @@ void ctkWorkflowStepPrivate::invokeOnExitCommandInternal(const ctkWorkflowStep*
 // --------------------------------------------------------------------------
 ctkWorkflowStep::ctkWorkflowStep(): d_ptr(new ctkWorkflowStepPrivate(*this))
 {
-  Q_D(ctkWorkflowStep);
-
-  d->Id = d->metaObject()->className();
 }
 
 // --------------------------------------------------------------------------
@@ -128,23 +125,13 @@ ctkWorkflowStep::ctkWorkflowStep(ctkWorkflow* newWorkflow, const QString& newId)
 {
   Q_D(ctkWorkflowStep);
 
-  if (newId.isEmpty())
-    {
-     d->Id = d->metaObject()->className();
-    }
-  else
-    {
-    d->Id = newId;
-    }
-
+  d->Id = newId;
   d->Workflow = newWorkflow;
 }
 
 // --------------------------------------------------------------------------
 ctkWorkflowStep::ctkWorkflowStep(ctkWorkflowStepPrivate * pimpl):d_ptr(pimpl)
 {
-  Q_D(ctkWorkflowStep);
-  d->Id = d->metaObject()->className();
 }
 
 // --------------------------------------------------------------------------
@@ -152,16 +139,7 @@ ctkWorkflowStep::ctkWorkflowStep(ctkWorkflowStepPrivate * pimpl,
                                  ctkWorkflow* newWorkflow, const QString& newId):d_ptr(pimpl)
 {
   Q_D(ctkWorkflowStep);
-
-  if (newId.isEmpty())
-    {
-     d->Id = d->metaObject()->className();
-    }
-  else
-    {
-    d->Id = newId;
-    }
-
+  d->Id = newId;
   d->Workflow = newWorkflow;
 }
 
@@ -176,7 +154,19 @@ CTK_SET_CPP(ctkWorkflowStep, ctkWorkflow*, setWorkflow, Workflow);
 
 // --------------------------------------------------------------------------
 CTK_GET_CPP(ctkWorkflowStep, QString, id, Id);
-CTK_SET_CPP(ctkWorkflowStep, const QString&, setId, Id);
+
+// --------------------------------------------------------------------------
+void ctkWorkflowStep::setId(const QString& newId)
+{
+  Q_D(ctkWorkflowStep);
+  if (d->Workflow && d->Workflow->hasStep(newId) && !this->id().isEmpty())
+    {
+    logger.error(QString("ctkWorkflowStep - Failed to change id from '%1' to '%2' - "
+                         "Step already added to a workflow !").arg(this->id()).arg(newId));
+    return;
+    }
+  d->Id = newId;
+}
 
 // --------------------------------------------------------------------------
 CTK_GET_CPP(ctkWorkflowStep, QString, name, Name);

+ 4 - 3
Libs/Core/ctkWorkflowStep.h

@@ -55,6 +55,10 @@ public:
   /// Get id
   QString id()const;
 
+  /// Set step Id
+  /// \note Setting the Id after the step had been added to a workflow is a no-op
+  void setId(const QString& newStepId);
+
   /// Set/get \a name
   QString name()const;
   void setName(const QString& newName);
@@ -94,9 +98,6 @@ protected:
   explicit ctkWorkflowStep(ctkWorkflowStepPrivate * pimpl,
                            ctkWorkflow* newWorkflow, const QString& newId);
 
-  /// Set step Id
-  void setId(const QString& newStepId);
-
   /// Set workflow
   void setWorkflow(ctkWorkflow* newWorkflow);
 

+ 2 - 1
Libs/Scripting/Python/Core/Python/ctk/__init__.py.in

@@ -27,8 +27,9 @@ def add_methodclass_to_ctkWorkflowStep_or_ctkWorkflowWidgetStep(workflowstep_cla
     """Reimplement this function for step-specific processing when exiting a step."""
     self.ctkWorkflowStepQObject().onExitComplete()
     
-  def initialize(self):
+  def initialize(self, stepid):
     workflowstep_class.__init__(self)
+    self.setId(stepid)
     self.setHasValidateCommand(True)
     self.setHasOnEntryCommand(True)
     self.setHasOnExitCommand(True)