浏览代码

Provide QUiLoader and ctkCmdLineModuleXslTransform via protected virtual getters

MattClarkson 12 年之前
父节点
当前提交
514b5d6e6a

+ 57 - 5
Libs/CommandLineModules/QtGui/ctkCmdLineModuleQtGui.cpp

@@ -32,12 +32,54 @@
 
 #include <QDebug>
 
+//-----------------------------------------------------------------------------
 ctkCmdLineModuleQtGui::ctkCmdLineModuleQtGui(const ctkCmdLineModuleReference& moduleRef)
   : ctkCmdLineModule(moduleRef),
+    Loader(NULL),
+    Transform(NULL),
     WidgetTree(NULL)
 {
 }
 
+
+//-----------------------------------------------------------------------------
+ctkCmdLineModuleQtGui::~ctkCmdLineModuleQtGui()
+{
+  if (Loader != NULL)
+  {
+    delete Loader;
+  }
+
+  if (Transform != NULL)
+  {
+    delete Transform;
+  }
+}
+
+
+//-----------------------------------------------------------------------------
+QUiLoader* ctkCmdLineModuleQtGui::uiLoader() const
+{
+  if (Loader == NULL)
+  {
+    Loader = new QUiLoader();
+  }
+  return Loader;
+}
+
+
+//-----------------------------------------------------------------------------
+ctkCmdLineModuleXslTransform* ctkCmdLineModuleQtGui::xslTransform() const
+{
+  if (Transform == NULL)
+  {
+    Transform = new ctkCmdLineModuleXslTransform();
+  }
+  return Transform;
+}
+
+
+//-----------------------------------------------------------------------------
 QObject* ctkCmdLineModuleQtGui::guiHandle() const
 {
   if (WidgetTree) return WidgetTree;
@@ -47,15 +89,19 @@ QObject* ctkCmdLineModuleQtGui::guiHandle() const
 
   QBuffer uiForm;
   uiForm.open(QIODevice::ReadWrite);
-  ctkCmdLineModuleXslTransform xslTransform(&input, &uiForm);
-  if (!xslTransform.transform())
+
+  ctkCmdLineModuleXslTransform* xslTransform = this->xslTransform();
+  xslTransform->setInput(&input);
+  xslTransform->setOutput(&uiForm);
+
+  if (!xslTransform->transform())
   {
     // maybe throw an exception
-    qCritical() << xslTransform.errorString();
+    qCritical() << xslTransform->errorString();
     return 0;
   }
 
-  QUiLoader uiLoader;
+  QUiLoader* uiLoader = this->uiLoader();
 #ifdef CMAKE_INTDIR
   QString appPath = QCoreApplication::applicationDirPath();
   if (appPath.endsWith(CMAKE_INTDIR))
@@ -63,10 +109,12 @@ QObject* ctkCmdLineModuleQtGui::guiHandle() const
     uiLoader.addPluginPath(appPath + "/../designer");
   }
 #endif
-  WidgetTree = uiLoader.load(&uiForm);
+  WidgetTree = uiLoader->load(&uiForm);
   return WidgetTree;
 }
 
+
+//-----------------------------------------------------------------------------
 QVariant ctkCmdLineModuleQtGui::value(const QString &parameter) const
 {
   if (!WidgetTree) return QVariant();
@@ -82,6 +130,8 @@ QVariant ctkCmdLineModuleQtGui::value(const QString &parameter) const
   return QVariant();
 }
 
+
+//-----------------------------------------------------------------------------
 void ctkCmdLineModuleQtGui::setValue(const QString &parameter, const QVariant &value)
 {
   if (!WidgetTree) return;
@@ -97,6 +147,8 @@ void ctkCmdLineModuleQtGui::setValue(const QString &parameter, const QVariant &v
   }
 }
 
+
+//-----------------------------------------------------------------------------
 QList<QString> ctkCmdLineModuleQtGui::parameterNames() const
 {
   if (!ParameterNames.empty()) return ParameterNames;

+ 10 - 1
Libs/CommandLineModules/QtGui/ctkCmdLineModuleQtGui_p.h

@@ -23,8 +23,11 @@
 #define CTKCMDLINEMODULEQTGUI_H
 
 #include <ctkCmdLineModule.h>
+#include <QUiLoader>
+#include <QBuffer>
 
 class ctkCmdLineModuleReference;
+class ctkCmdLineModuleXslTransform;
 
 class ctkCmdLineModuleQtGui : public ctkCmdLineModule
 {
@@ -32,6 +35,7 @@ class ctkCmdLineModuleQtGui : public ctkCmdLineModule
 public:
 
   ctkCmdLineModuleQtGui(const ctkCmdLineModuleReference& moduleRef);
+  virtual ~ctkCmdLineModuleQtGui();
 
   // ctkCmdLineModule overrides
 
@@ -42,8 +46,13 @@ public:
 
   virtual QList<QString> parameterNames() const;
 
-private:
+protected:
 
+  virtual QUiLoader* uiLoader() const;
+  virtual ctkCmdLineModuleXslTransform* xslTransform() const;
+
+  mutable QUiLoader* Loader;
+  mutable ctkCmdLineModuleXslTransform* Transform;
   mutable QWidget* WidgetTree;
 
   // Cache the list of parameter names