diff options
Diffstat (limited to 'src/plugins/python/pythoneditor.cpp')
-rw-r--r-- | src/plugins/python/pythoneditor.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/plugins/python/pythoneditor.cpp b/src/plugins/python/pythoneditor.cpp index cfd8623363..9b98493c83 100644 --- a/src/plugins/python/pythoneditor.cpp +++ b/src/plugins/python/pythoneditor.cpp @@ -27,16 +27,81 @@ #include "pythonconstants.h" #include "pythonhighlighter.h" #include "pythonindenter.h" +#include "pythonsettings.h" #include "pythonutils.h" +#include <coreplugin/actionmanager/actionmanager.h> +#include <coreplugin/actionmanager/commandbutton.h> + #include <texteditor/textdocument.h> #include <texteditor/texteditoractionhandler.h> +#include <QAction> +#include <QMenu> + namespace Python { namespace Internal { +static QAction *createAction(QObject *parent, ReplType type) +{ + QAction *action = new QAction(parent); + switch (type) { + case ReplType::Unmodified: + action->setText(QCoreApplication::translate("Python", "REPL")); + action->setToolTip(QCoreApplication::translate("Python", "Open interactive Python.")); + break; + case ReplType::Import: + action->setText(QCoreApplication::translate("Python", "REPL Import File")); + action->setToolTip( + QCoreApplication::translate("Python", "Open interactive Python and import file.")); + break; + case ReplType::ImportToplevel: + action->setText(QCoreApplication::translate("Python", "REPL Import *")); + action->setToolTip( + QCoreApplication::translate("Python", + "Open interactive Python and import * from file.")); + break; + } + + QObject::connect(action, &QAction::triggered, parent, [type] { + Core::IDocument *doc = Core::EditorManager::currentDocument(); + openPythonRepl(doc ? doc->filePath() : Utils::FilePath(), type); + }); + return action; +} + +static void registerReplAction(QObject *parent) +{ + Core::ActionManager::registerAction(createAction(parent, ReplType::Unmodified), + Constants::PYTHON_OPEN_REPL); + Core::ActionManager::registerAction(createAction(parent, ReplType::Import), + Constants::PYTHON_OPEN_REPL_IMPORT); + Core::ActionManager::registerAction(createAction(parent, ReplType::ImportToplevel), + Constants::PYTHON_OPEN_REPL_IMPORT_TOPLEVEL); +} + +static QWidget *createEditorWidget() +{ + auto widget = new TextEditor::TextEditorWidget; + auto replButton = new QToolButton(widget); + replButton->setProperty("noArrow", true); + replButton->setText(QCoreApplication::translate("Python", "REPL")); + replButton->setPopupMode(QToolButton::InstantPopup); + auto menu = new QMenu(replButton); + replButton->setMenu(menu); + menu->addAction(Core::ActionManager::command(Constants::PYTHON_OPEN_REPL)->action()); + menu->addSeparator(); + menu->addAction(Core::ActionManager::command(Constants::PYTHON_OPEN_REPL_IMPORT)->action()); + menu->addAction( + Core::ActionManager::command(Constants::PYTHON_OPEN_REPL_IMPORT_TOPLEVEL)->action()); + widget->insertExtraToolBarWidget(TextEditor::TextEditorWidget::Left, replButton); + return widget; +} + PythonEditorFactory::PythonEditorFactory() { + registerReplAction(this); + setId(Constants::C_PYTHONEDITOR_ID); setDisplayName( QCoreApplication::translate("OpenWith::Editors", Constants::C_EDITOR_DISPLAY_NAME)); @@ -48,6 +113,7 @@ PythonEditorFactory::PythonEditorFactory() | TextEditor::TextEditorActionHandler::FollowSymbolUnderCursor); setDocumentCreator([] { return new TextEditor::TextDocument(Constants::C_PYTHONEDITOR_ID); }); + setEditorWidgetCreator(createEditorWidget); setIndenterCreator([](QTextDocument *doc) { return new PythonIndenter(doc); }); setSyntaxHighlighterCreator([] { return new PythonHighlighter; }); setCommentDefinition(Utils::CommentDefinition::HashStyle); |