瀏覽代碼

ENH: Python wrapping of ctkBooleanMapper

Constructor changed to use QByteArray signal instead of string, so that the class can be properly instantiated from python
Csaba Pitner 7 年之前
父節點
當前提交
341f260a9d
共有 3 個文件被更改,包括 31 次插入11 次删除
  1. 2 3
      Libs/Core/ctkBooleanMapper.cpp
  2. 18 8
      Libs/Core/ctkBooleanMapper.h
  3. 11 0
      Libs/Core/ctkCorePythonQtDecorators.h

+ 2 - 3
Libs/Core/ctkBooleanMapper.cpp

@@ -45,7 +45,7 @@ ctkBooleanMapperPrivate::ctkBooleanMapperPrivate()
 
 // --------------------------------------------------------------------------
 ctkBooleanMapper::ctkBooleanMapper(
-  QObject* targetObject, const QByteArray& property, const char* signal)
+  QObject* targetObject, const QByteArray& property, const QByteArray& signal)
   : QObject(targetObject)
   , d_ptr(new ctkBooleanMapperPrivate)
 {
@@ -53,7 +53,7 @@ ctkBooleanMapper::ctkBooleanMapper(
   Q_ASSERT(targetObject != 0);
   Q_D(ctkBooleanMapper);
   d->PropertyName = property;
-  if (signal)
+  if (!signal.isEmpty())
     {
     connect(targetObject, signal, this, SLOT(emitValueChanged()));
     }
@@ -187,4 +187,3 @@ void ctkBooleanMapper::emitValueAsChanged()
   emit valueAsIntChanged(this->valueAsInt());
   emit valueAsStringChanged(this->valueAsString());
 }
-

+ 18 - 8
Libs/Core/ctkBooleanMapper.h

@@ -31,13 +31,23 @@ class ctkBooleanMapperPrivate;
 
 //---------------------------------------------------------------------------
 /// \ingroup Core
-/// QCheckBox* checkBox = new QCheckBox;
-/// ctkBooleanMapper* inverter =
-///   new ctkBooleanMapper("checked", SIGNAL("toggled(bool)"), checkBox);
-/// inverter->setComplementValue(true);
-/// // -> checkBox->checked() == false
-/// inverter->setValue(false);
-/// // -> checkBox->checked() == false
+///
+/// Example:
+///   QCheckBox* checkBox = new QCheckBox;
+///   ctkBooleanMapper* inverter =
+///     new ctkBooleanMapper("checked", SIGNAL("toggled(bool)"), checkBox);
+///   inverter->setComplementValue(true);
+///   // -> checkBox->checked() == false
+///   inverter->setValue(false);
+///   // -> checkBox->checked() == false
+///
+/// Python example:
+///   boolMapper = ctk.ctkBooleanMapper(checkBox, "checked", "toggled(bool)")
+///   boolMapper.trueValue = qt.QMessageBox.Yes
+///   boolMapper.falseValue = qt.QMessageBox.InvalidRole
+///   parent.registerProperty(
+///     "settingsPropertyName", boolMapper, "valueAsInt", qt.SIGNAL("valueAsIntChanged(int)"))
+///
 class CTK_CORE_EXPORT ctkBooleanMapper : public QObject
 {
   Q_OBJECT
@@ -66,7 +76,7 @@ public:
   /// \a object is destructed.
   /// property and object must be valid and non empty. If signal is 0,
   /// \a valueChanged(bool) and \a complementChanged(bool) won't be fired.
-  ctkBooleanMapper(QObject* targetObject, const QByteArray& propertyName, const char* signal);
+  ctkBooleanMapper(QObject* targetObject, const QByteArray& propertyName, const QByteArray& signal);
   virtual ~ctkBooleanMapper();
 
   QByteArray propertyName()const;

+ 11 - 0
Libs/Core/ctkCorePythonQtDecorators.h

@@ -25,6 +25,7 @@
 #include <PythonQt.h>
 
 // CTK includes
+#include <ctkBooleanMapper.h>
 #include <ctkErrorLogContext.h>
 #include <ctkWorkflowStep.h>
 #include <ctkWorkflowTransitions.h>
@@ -44,6 +45,7 @@ public:
 
   ctkCorePythonQtDecorators()
     {
+    PythonQt::self()->registerClass(&ctkBooleanMapper::staticMetaObject, "CTKCore");
     PythonQt::self()->registerCPPClass("ctkErrorLogContext", 0, "CTKCore");
     PythonQt::self()->registerCPPClass("ctkWorkflowStep", 0, "CTKCore");
     PythonQt::self()->registerClass(&ctkWorkflowInterstepTransition::staticMetaObject, "CTKCore");
@@ -52,6 +54,15 @@ public:
 public Q_SLOTS:
 
   //
+  // ctkBooleanMapper
+  //
+
+  ctkBooleanMapper* new_ctkBooleanMapper(QObject* targetObject, const QByteArray& propertyName, const QByteArray& signal)
+    {
+    return new ctkBooleanMapper(targetObject, propertyName, signal);
+    }
+
+  //
   // ctkWorkflowStep
   //