Browse Source

ctkPythonConsolePrivate now extends from ctkConsolePrivate

Jean-Christophe Fillion-Robin 14 years ago
parent
commit
74ef03dce1

+ 5 - 10
Libs/Scripting/Python/Widgets/ctkPythonConsole.cpp

@@ -49,8 +49,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 =========================================================================*/
 
-//#include <vtkPython.h> // python first
-
 // Qt includes
 #include <QCoreApplication>
 #include <QResizeEvent>
@@ -65,6 +63,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 // CTK includes
 #include <ctkConsole.h>
+#include <ctkConsole_p.h>
 #include <ctkAbstractPythonManager.h>
 #include "ctkPythonConsole.h"
 
@@ -147,11 +146,9 @@ public:
 // ctkPythonConsolePrivate
 
 //----------------------------------------------------------------------------
-class ctkPythonConsolePrivate
+class ctkPythonConsolePrivate : public ctkConsolePrivate
 {
   Q_DECLARE_PUBLIC(ctkPythonConsole);
-protected:
-  ctkPythonConsole* const q_ptr;
 public:
   ctkPythonConsolePrivate(ctkPythonConsole& object, ctkAbstractPythonManager* pythonManager);
   ~ctkPythonConsolePrivate();
@@ -180,8 +177,8 @@ public:
 //----------------------------------------------------------------------------
 ctkPythonConsolePrivate::ctkPythonConsolePrivate(
   ctkPythonConsole& object, ctkAbstractPythonManager* pythonManager)
-  : q_ptr(&object), PythonManager(pythonManager), MultilineStatement(false),
-  InteractiveConsole(0)
+  : ctkConsolePrivate(object), PythonManager(pythonManager),
+    MultilineStatement(false), InteractiveConsole(0)
 {
 }
 
@@ -290,11 +287,9 @@ void ctkPythonConsolePrivate::promptForInput(const QString& indent)
 
 //----------------------------------------------------------------------------
 ctkPythonConsole::ctkPythonConsole(ctkAbstractPythonManager* pythonManager, QWidget* parentObject):
-  Superclass(parentObject),
-  d_ptr(new ctkPythonConsolePrivate(*this, pythonManager))
+  Superclass(new ctkPythonConsolePrivate(*this, pythonManager), parentObject)/*, d_ptr(new ctkPythonConsolePrivate(*this, pythonManager))*/
 {
   Q_D(ctkPythonConsole);
-
   this->setObjectName("pythonConsole");
 
   ctkPythonConsoleCompleter* completer = new ctkPythonConsoleCompleter(*this);

+ 8 - 11
Libs/Scripting/Python/Widgets/ctkPythonConsole.h

@@ -56,13 +56,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <ctkConsole.h>
 #include "ctkScriptingPythonWidgetsExport.h"
 
-/**
-  Qt widget that provides an interactive "shell" interface to an embedded Python interpreter.
-  You can put an instance of ctkPythonConsole in a dialog or a window, and the user will be able
-  to enter Python commands and see their output, while the UI is still responsive.
-  
-  \sa pqConsoleWidget, pqPythonDialog
-*/  
+
+///
+///  Qt widget that provides an interactive "shell" interface to an embedded Python interpreter.
+///  You can put an instance of ctkPythonConsole in a dialog or a window, and the user will be able
+/// to enter Python commands and see their output, while the UI is still responsive.
+///
+/// \sa ctkConsole
 
 class ctkPythonConsolePrivate;
 class ctkAbstractPythonManager;
@@ -74,7 +74,7 @@ class CTK_SCRIPTING_PYTHON_WIDGETS_EXPORT ctkPythonConsole : public ctkConsole
 public:
   typedef ctkConsole Superclass;
   ctkPythonConsole(ctkAbstractPythonManager* pythonManager, QWidget* parentObject = 0);
-  ~ctkPythonConsole();
+  virtual ~ctkPythonConsole();
 
   /// Prints some text on the shell.
   void printMessage(const QString&);
@@ -95,9 +95,6 @@ protected slots:
 
   void onExecutePythonCommand(const QString&);
 
-protected:
-  QScopedPointer<ctkPythonConsolePrivate> d_ptr;
-
 private:
   Q_DECLARE_PRIVATE(ctkPythonConsole);
   Q_DISABLE_COPY(ctkPythonConsole);

+ 22 - 4
Libs/Widgets/ctkConsole.cpp

@@ -69,25 +69,32 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 //-----------------------------------------------------------------------------
 ctkConsolePrivate::ctkConsolePrivate(ctkConsole& object) :
-  QTextEdit(&object),
+  QTextEdit(0),
   q_ptr(&object),
   InteractivePosition(documentEnd())
 {
+}
+
+//-----------------------------------------------------------------------------
+void ctkConsolePrivate::init()
+{
+  Q_Q(ctkConsole);
+  this->setParent(q);
   this->setTabChangesFocus(false);
   this->setAcceptDrops(false);
   this->setAcceptRichText(false);
   this->setUndoRedoEnabled(false);
-  
+
   QFont f;
   f.setFamily("Courier");
   f.setStyleHint(QFont::TypeWriter);
   f.setFixedPitch(true);
-  
+
   QTextCharFormat format;
   format.setFont(f);
   format.setForeground(QColor(0, 0, 0));
   this->setCurrentCharFormat(format);
-  
+
   this->CommandHistory.append("");
   this->CommandPosition = 0;
 }
@@ -404,6 +411,17 @@ ctkConsole::ctkConsole(QWidget* parentObject) :
 }
 
 //-----------------------------------------------------------------------------
+ctkConsole::ctkConsole(ctkConsolePrivate * pimpl, QWidget* parentObject) :
+  QWidget(parentObject), d_ptr(pimpl)
+{
+  Q_D(ctkConsole);
+  d->init();
+  QVBoxLayout* layout = new QVBoxLayout(this);
+  layout->setMargin(0);
+  layout->addWidget(d);
+}
+
+//-----------------------------------------------------------------------------
 ctkConsole::~ctkConsole()
 {
 }

+ 3 - 4
Libs/Widgets/ctkConsole.h

@@ -63,12 +63,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 class ctkConsolePrivate;
 class ctkConsoleCompleter;
 
-
-/// Qwidget that provides an interactive console - you can send text to the
+/// QWidget that provides an interactive console - you can send text to the
 /// console by calling printString() and receive user input by connecting to the
 /// executeCommand() slot.
-///  
-/// \sa pqPythonShell, pqOutputWindow
 class CTK_WIDGETS_EXPORT ctkConsole : public QWidget
 {
   Q_OBJECT
@@ -113,6 +110,8 @@ public slots:
   void insertCompletion(const QString& text);
 
 protected:
+  ctkConsole(ctkConsolePrivate * pimpl, QWidget* parentObject);
+
   QScopedPointer<ctkConsolePrivate> d_ptr;
 
 private:

+ 2 - 0
Libs/Widgets/ctkConsole_p.h

@@ -37,6 +37,8 @@ public:
 
   ctkConsolePrivate(ctkConsole& object);
 
+  void init();
+
   void keyPressEvent(QKeyEvent* e);
   
   /// Returns the end of the document