Pārlūkot izejas kodu

Expose option on ctkConsole to control the runFile() interface

A shortcut to be able to run a file already existed. This commit adds a
button at the bottom of the console to do the same thing.
It also adds designable flags that control whether:
 - The button is visible
 - The shortcut is active
Default is shortcut active and the button is invisible.
Johan Andruejol 9 gadi atpakaļ
vecāks
revīzija
ec7d24e651
3 mainītis faili ar 52 papildinājumiem un 6 dzēšanām
  1. 27 5
      Libs/Widgets/ctkConsole.cpp
  2. 18 1
      Libs/Widgets/ctkConsole.h
  3. 7 0
      Libs/Widgets/ctkConsole_p.h

+ 27 - 5
Libs/Widgets/ctkConsole.cpp

@@ -59,6 +59,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <QKeyEvent>
 #include <QMimeData>
 #include <QPointer>
+#include <QPushButton>
 #include <QTextCursor>
 #include <QVBoxLayout>
 #include <QScrollBar>
@@ -95,7 +96,10 @@ ctkConsolePrivate::ctkConsolePrivate(ctkConsole& object) :
   MultilineStatement(false), Ps1("$ "), Ps2("> "),
   EditorHints(ctkConsole::AutomaticIndentation | ctkConsole::RemoveTrailingSpaces),
   ScrollbarAtBottom(false),
-  CompleterShortcuts(QList<QKeySequence>() << Qt::Key_Tab)
+  CompleterShortcuts(QList<QKeySequence>() << Qt::Key_Tab),
+  RunFileOptions(ctkConsole::RunFileShortcut),
+  RunFileButton(NULL),
+  RunFileAction(NULL)
 {
 }
 
@@ -129,23 +133,30 @@ void ctkConsolePrivate::init()
   this->CommandHistory.append("");
   this->CommandPosition = 0;
 
-  QAction* runFileAction = new QAction(q->tr("&Run file"),q);
-  runFileAction->setShortcut(q->tr("Ctrl+r"));
-  connect(runFileAction, SIGNAL(triggered()), q, SLOT(runFile()));
-  q->addAction(runFileAction);
+  this->RunFileAction = new QAction(q->tr("&Run file"), q);
+  this->RunFileAction->setShortcut(q->tr("Ctrl+r"));
+  connect(this->RunFileAction, SIGNAL(triggered()), q, SLOT(runFile()));
+  q->addAction(this->RunFileAction);
 
   QAction* printHelpAction = new QAction(q->tr("Print &help"),q);
   printHelpAction->setShortcut(q->tr("Ctrl+h"));
   connect(printHelpAction, SIGNAL(triggered()), q, SLOT(printHelp()));
   q->addAction(printHelpAction);
 
+  this->RunFileButton = new QPushButton(q);
+  this->RunFileButton->setText(q->tr("&Run script from file"));
+  this->RunFileButton->setVisible(false);
+
   QVBoxLayout * layout = new QVBoxLayout(q);
   layout->setMargin(0);
+  layout->setSpacing(0);
   layout->addWidget(this);
+  layout->addWidget(this->RunFileButton);
 
   connect(this->verticalScrollBar(), SIGNAL(valueChanged(int)),
           SLOT(onScrollBarValueChanged(int)));
   connect(this, SIGNAL(textChanged()), SLOT(onTextChanged()));
+  connect(this->RunFileButton, SIGNAL(clicked()), q, SLOT(runFile()));
 }
 
 //-----------------------------------------------------------------------------
@@ -974,6 +985,17 @@ void ctkConsole::addCompleterShortcut(const QKeySequence& key)
 }
 
 //-----------------------------------------------------------------------------
+CTK_GET_CPP(ctkConsole, ctkConsole::RunFileOptions, runFileOptions, RunFileOptions);
+
+//-----------------------------------------------------------------------------
+void ctkConsole::setRunFileOptions(const RunFileOptions& newOptions)
+{
+  Q_D(ctkConsole);
+  d->RunFileButton->setVisible(newOptions.testFlag(ctkConsole::RunFileButton));
+  d->RunFileAction->setEnabled(newOptions.testFlag(ctkConsole::RunFileShortcut));
+}
+
+//-----------------------------------------------------------------------------
 void ctkConsole::exec(const QString& command)
 {
   Q_D(ctkConsole);

+ 18 - 1
Libs/Widgets/ctkConsole.h

@@ -81,7 +81,9 @@ class CTK_WIDGETS_EXPORT ctkConsole : public QWidget
   Q_ENUMS(Qt::ScrollBarPolicy)
   Q_PROPERTY(Qt::ScrollBarPolicy scrollBarPolicy READ scrollBarPolicy WRITE setScrollBarPolicy)
   Q_PROPERTY(QList<QKeySequence> completerShortcuts READ completerShortcuts WRITE setCompleterShortcuts)
-
+  Q_FLAGS(RunFileOption RunFileOptions)
+  Q_PROPERTY(RunFileOptions runFileOptions READ runFileOptions WRITE setRunFileOptions)
+  
 public:
 
   enum EditorHint
@@ -93,6 +95,14 @@ public:
   };
   Q_DECLARE_FLAGS(EditorHints, EditorHint)
 
+  enum RunFileOption
+  {
+    NoRunFileUserInterface = 0x00,
+    RunFileButton = 0x01,   /*!< Show a button at the bottom of the console to run a file */
+    RunFileShortcut = 0x02, /*!< Add the shortcut CTRL+r to run a file */
+  };
+  Q_DECLARE_FLAGS(RunFileOptions, RunFileOption)
+
   ctkConsole(QWidget* parentObject = 0);
   typedef QWidget Superclass;
   virtual ~ctkConsole();
@@ -190,6 +200,13 @@ public:
   /// \sa completerShortcuts(), setCompleterShortcuts()
   void addCompleterShortcut(const QKeySequence& key);
 
+  RunFileOptions runFileOptions()const;
+
+  /// Set which options to run file are enabled.
+  /// Default is RunFileShortcut.
+  /// \sa runFileOptions()
+  void setRunFileOptions(const RunFileOptions& newOptions);
+
 Q_SIGNALS:
 
   /// This signal emitted before and after a command is executed

+ 7 - 0
Libs/Widgets/ctkConsole_p.h

@@ -30,6 +30,8 @@
 #include "ctkConsole.h"
 #include "ctkWidgetsExport.h"
 
+class QPushButton;
+
 /// \ingroup Widgets
 class CTK_WIDGETS_EXPORT ctkConsolePrivate : public QTextEdit
 {
@@ -187,6 +189,11 @@ public:
   QPointer<QEventLoop> InputEventLoop;
 
   QList<QKeySequence> CompleterShortcuts;
+
+  ctkConsole::RunFileOptions RunFileOptions;
+
+  QPushButton* RunFileButton;
+  QAction* RunFileAction;
 };