From 3452b4214db2681ee9013bbc4a96a7372b2edd48 Mon Sep 17 00:00:00 2001
From: mae <qt-info@nokia.com>
Date: Mon, 9 Nov 2009 17:35:20 +0100
Subject: [PATCH] implement the standard context menu also for the script
 editors

In addition, clean up the text editor action handling in the qtscript
plugin.

Rev-by: con
---
 src/plugins/qmleditor/qmleditor.cpp           |  4 +-
 src/plugins/qmleditor/qmleditorplugin.cpp     |  7 ++
 src/plugins/qtscripteditor/qtscripteditor.cpp |  6 ++
 src/plugins/qtscripteditor/qtscripteditor.h   |  2 +
 src/plugins/qtscripteditor/qtscripteditor.pro |  2 -
 .../qtscripteditoractionhandler.cpp           | 99 -------------------
 .../qtscripteditoractionhandler.h             | 55 -----------
 .../qtscripteditor/qtscripteditorfactory.cpp  |  9 +-
 .../qtscripteditor/qtscripteditorfactory.h    |  2 -
 .../qtscripteditor/qtscripteditorplugin.cpp   | 18 ++--
 10 files changed, 35 insertions(+), 169 deletions(-)
 delete mode 100644 src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp
 delete mode 100644 src/plugins/qtscripteditor/qtscripteditoractionhandler.h

diff --git a/src/plugins/qmleditor/qmleditor.cpp b/src/plugins/qmleditor/qmleditor.cpp
index 76d44b67773..3790a27c732 100644
--- a/src/plugins/qmleditor/qmleditor.cpp
+++ b/src/plugins/qmleditor/qmleditor.cpp
@@ -746,7 +746,7 @@ TextEditor::BaseTextEditor::Link ScriptEditor::findLinkAt(const QTextCursor &cur
 
 void ScriptEditor::contextMenuEvent(QContextMenuEvent *e)
 {
-    QMenu *menu = createStandardContextMenu();
+    QMenu *menu = new QMenu();
 
     if (Core::ActionContainer *mcontext = Core::ICore::instance()->actionManager()->actionContainer(QmlEditor::Constants::M_CONTEXT)) {
         QMenu *contextMenu = mcontext->menu();
@@ -762,6 +762,8 @@ void ScriptEditor::contextMenuEvent(QContextMenuEvent *e)
         connect(a, SIGNAL(triggered()), this, SLOT(renameIdUnderCursor()));
     }
 
+    appendStandardContextMenuActions(menu);
+
     menu->exec(e->globalPos());
     menu->deleteLater();
 }
diff --git a/src/plugins/qmleditor/qmleditorplugin.cpp b/src/plugins/qmleditor/qmleditorplugin.cpp
index 47b71b9af18..5958ab469a1 100644
--- a/src/plugins/qmleditor/qmleditorplugin.cpp
+++ b/src/plugins/qmleditor/qmleditorplugin.cpp
@@ -114,6 +114,13 @@ bool QmlEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err
         | TextEditor::TextEditorActionHandler::UnCollapseAll);
     m_actionHandler->initializeActions();
 
+    Core::ActionManager *am =  core->actionManager();
+    Core::ActionContainer *contextMenu= am->createMenu(QmlEditor::Constants::M_CONTEXT);
+    Core::Command *cmd = am->command(TextEditor::Constants::AUTO_INDENT_SELECTION);
+    contextMenu->addAction(cmd);
+    cmd = am->command(TextEditor::Constants::UN_COMMENT_SELECTION);
+    contextMenu->addAction(cmd);
+
     m_completion = new QmlCodeCompletion();
     addAutoReleasedObject(m_completion);
 
diff --git a/src/plugins/qtscripteditor/qtscripteditor.cpp b/src/plugins/qtscripteditor/qtscripteditor.cpp
index fbd91ab062b..d751a87d395 100644
--- a/src/plugins/qtscripteditor/qtscripteditor.cpp
+++ b/src/plugins/qtscripteditor/qtscripteditor.cpp
@@ -40,6 +40,7 @@
 #include "parser/javascriptast_p.h"
 
 #include <indenter.h>
+#include <utils/uncommentselection.h>
 
 #include <coreplugin/icore.h>
 #include <coreplugin/actionmanager/actionmanager.h>
@@ -408,5 +409,10 @@ void ScriptEditor::contextMenuEvent(QContextMenuEvent *e)
     delete menu;
 }
 
+void ScriptEditor::unCommentSelection()
+{
+    Utils::unCommentSelection(this);
+}
+
 } // namespace Internal
 } // namespace QtScriptEditor
diff --git a/src/plugins/qtscripteditor/qtscripteditor.h b/src/plugins/qtscripteditor/qtscripteditor.h
index 06e72371bd1..6556176a350 100644
--- a/src/plugins/qtscripteditor/qtscripteditor.h
+++ b/src/plugins/qtscripteditor/qtscripteditor.h
@@ -95,6 +95,8 @@ public:
     QList<Declaration> declarations() const;
     QStringList words() const;
 
+    void unCommentSelection(); // from basetexteditor
+
 public slots:
     virtual void setFontSettings(const TextEditor::FontSettings &);
 
diff --git a/src/plugins/qtscripteditor/qtscripteditor.pro b/src/plugins/qtscripteditor/qtscripteditor.pro
index 7fd3ff19c6d..2ff0c5699e7 100644
--- a/src/plugins/qtscripteditor/qtscripteditor.pro
+++ b/src/plugins/qtscripteditor/qtscripteditor.pro
@@ -13,14 +13,12 @@ HEADERS += qtscripteditor.h \
 qtscripteditorfactory.h \
 qtscripteditorplugin.h \
 qtscripthighlighter.h \
-qtscripteditoractionhandler.h \
 qtscriptcodecompletion.h
 
 SOURCES += qtscripteditor.cpp \
 qtscripteditorfactory.cpp \
 qtscripteditorplugin.cpp \
 qtscripthighlighter.cpp \
-qtscripteditoractionhandler.cpp \
 qtscriptcodecompletion.cpp
 
 RESOURCES += qtscripteditor.qrc
diff --git a/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp b/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp
deleted file mode 100644
index 3c48ea9b25e..00000000000
--- a/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** Commercial Usage
-**
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** GNU Lesser General Public License Usage
-**
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at http://qt.nokia.com/contact.
-**
-**************************************************************************/
-
-#include "qtscripteditoractionhandler.h"
-#include "qtscripteditorconstants.h"
-#include "qtscripteditor.h"
-
-#include <coreplugin/icore.h>
-#include <coreplugin/actionmanager/actionmanager.h>
-#include <coreplugin/scriptmanager/scriptmanager.h>
-
-#include <QtCore/QDebug>
-#include <QtGui/QAction>
-#include <QtGui/QMainWindow>
-#include <QtGui/QMessageBox>
-
-#if 0
-static QAction *actionFromId(const QString &id)
-{
-    Core::Command *cmd = Core::ICore::instance()->actionManager()->command(id);
-    if (!cmd)
-        return 0;
-    return cmd->action();
-}
-#endif
-
-namespace QtScriptEditor {
-namespace Internal {
-
-QtScriptEditorActionHandler::QtScriptEditorActionHandler()
-  : TextEditor::TextEditorActionHandler(QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR),
-                                        Format)
-{
-}
-
-void QtScriptEditorActionHandler::createActions()
-{
-    TextEditor::TextEditorActionHandler::createActions();
-}
-
-
-void QtScriptEditorActionHandler::run()
-{
-    typedef Core::ScriptManager::Stack Stack;
-    if (!currentEditor())
-        return;
-
-    const QString script = currentEditor()->toPlainText();
-
-    // run
-    Stack errorStack;
-    QString errorMessage;
-    if (Core::ICore::instance()->scriptManager()->runScript(script, &errorMessage, &errorStack))
-        return;
-
-    // try to find a suitable error line in the stack
-    // ignoring 0 and other files (todo: open other files?)
-    int errorLineNumber = 0;
-    if (const int numFrames = errorStack.size()) {
-        for (int f = 0; f < numFrames; f++) {
-            if (errorStack[f].lineNumber && errorStack[f].fileName.isEmpty()) {
-                errorLineNumber = errorStack[f].lineNumber;
-                break;
-            }
-        }
-    }
-    if (errorLineNumber)
-        currentEditor()->gotoLine(errorLineNumber);
-    QMessageBox::critical(Core::ICore::instance()->mainWindow(), tr("Qt Script Error"), errorMessage);
-}
-
-} // namespace Internal
-} // namespace QtScriptEditor
diff --git a/src/plugins/qtscripteditor/qtscripteditoractionhandler.h b/src/plugins/qtscripteditor/qtscripteditoractionhandler.h
deleted file mode 100644
index 8e94c2a454d..00000000000
--- a/src/plugins/qtscripteditor/qtscripteditoractionhandler.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** Commercial Usage
-**
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** GNU Lesser General Public License Usage
-**
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at http://qt.nokia.com/contact.
-**
-**************************************************************************/
-
-#ifndef QTSCRIPTDITORACTIONHANDLER_H
-#define QTSCRIPTDITORACTIONHANDLER_H
-
-#include <texteditor/texteditoractionhandler.h>
-
-namespace QtScriptEditor {
-namespace Internal {
-
-class QtScriptEditorActionHandler : public TextEditor::TextEditorActionHandler
-{
-    Q_OBJECT
-
-public:
-    QtScriptEditorActionHandler();
-
-private:
-    virtual void createActions();
-
-private slots:
-    void run();
-};
-
-} // namespace Internal
-} // namespace QtScriptEditor
-
-#endif // QTSCRIPTDITORACTIONHANDLER_H
diff --git a/src/plugins/qtscripteditor/qtscripteditorfactory.cpp b/src/plugins/qtscripteditor/qtscripteditorfactory.cpp
index 03cf1b98449..7e4ae5715b2 100644
--- a/src/plugins/qtscripteditor/qtscripteditorfactory.cpp
+++ b/src/plugins/qtscripteditor/qtscripteditorfactory.cpp
@@ -29,11 +29,14 @@
 
 #include "qtscripteditorfactory.h"
 #include "qtscripteditor.h"
-#include "qtscripteditoractionhandler.h"
 #include "qtscripteditorconstants.h"
 #include "qtscripteditorplugin.h"
 
+#include <coreplugin/icore.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/actionmanager/actionmanager.h>
+
+#include <texteditor/texteditorconstants.h>
 
 #include <QtCore/QFileInfo>
 #include <QtCore/QDebug>
@@ -45,14 +48,12 @@ QtScriptEditorFactory::QtScriptEditorFactory(const Context &context, QObject *pa
   : Core::IEditorFactory(parent),
     m_kind(QLatin1String(C_QTSCRIPTEDITOR)),
     m_mimeTypes(QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR_MIMETYPE)),
-    m_context(context),
-    m_actionHandler(new QtScriptEditorActionHandler)
+    m_context(context)
 {
 }
 
 QtScriptEditorFactory::~QtScriptEditorFactory()
 {
-    delete m_actionHandler;
 }
 
 QString QtScriptEditorFactory::kind() const
diff --git a/src/plugins/qtscripteditor/qtscripteditorfactory.h b/src/plugins/qtscripteditor/qtscripteditorfactory.h
index 93c222daa98..0556f35f16c 100644
--- a/src/plugins/qtscripteditor/qtscripteditorfactory.h
+++ b/src/plugins/qtscripteditor/qtscripteditorfactory.h
@@ -63,8 +63,6 @@ private:
     const QString m_kind;
     const QStringList m_mimeTypes;
     const Context m_context;
-
-    TextEditor::TextEditorActionHandler *m_actionHandler;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qtscripteditor/qtscripteditorplugin.cpp b/src/plugins/qtscripteditor/qtscripteditorplugin.cpp
index 5ff65d9bc44..266d2d48204 100644
--- a/src/plugins/qtscripteditor/qtscripteditorplugin.cpp
+++ b/src/plugins/qtscripteditor/qtscripteditorplugin.cpp
@@ -88,6 +88,11 @@ bool QtScriptEditorPlugin::initialize(const QStringList & /*arguments*/, QString
     m_context = m_scriptcontext;
     m_context << core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR);
 
+    m_actionHandler = new TextEditor::TextEditorActionHandler(QtScriptEditor::Constants::C_QTSCRIPTEDITOR,
+          TextEditor::TextEditorActionHandler::Format
+        | TextEditor::TextEditorActionHandler::UnCommentSelection
+        | TextEditor::TextEditorActionHandler::UnCollapseAll);
+
     registerActions();
 
     m_editor = new QtScriptEditorFactory(m_context, this);
@@ -104,10 +109,6 @@ bool QtScriptEditorPlugin::initialize(const QStringList & /*arguments*/, QString
                                               wizardParameters, this);
     addObject(m_wizard);
 
-    m_actionHandler = new TextEditor::TextEditorActionHandler(QtScriptEditor::Constants::C_QTSCRIPTEDITOR,
-          TextEditor::TextEditorActionHandler::Format
-        | TextEditor::TextEditorActionHandler::UnCommentSelection
-        | TextEditor::TextEditorActionHandler::UnCollapseAll);
 
     m_completion = new QtScriptCodeCompletion();
     addAutoReleasedObject(m_completion);
@@ -145,8 +146,13 @@ void QtScriptEditorPlugin::initializeEditor(QtScriptEditor::Internal::ScriptEdit
 
 void QtScriptEditorPlugin::registerActions()
 {
-//    Core::ActionManager *am = Core::ICore::instance()->actionManager();
-//    Core::ActionContainer *mcontext = am->createMenu(QtScriptEditor::Constants::M_CONTEXT);
+    m_actionHandler->initializeActions();
+    Core::ActionManager *am =  Core::ICore::instance()->actionManager();
+    Core::ActionContainer *contextMenu= am->createMenu(QtScriptEditor::Constants::M_CONTEXT);
+    Core::Command *cmd = am->command(TextEditor::Constants::AUTO_INDENT_SELECTION);
+    contextMenu->addAction(cmd);
+    cmd = am->command(TextEditor::Constants::UN_COMMENT_SELECTION);
+    contextMenu->addAction(cmd);
 }
 
 Q_EXPORT_PLUGIN(QtScriptEditorPlugin)
-- 
GitLab