2008-12-02 12:01:29 +01:00
|
|
|
/***************************************************************************
|
|
|
|
|
**
|
|
|
|
|
** This file is part of Qt Creator
|
|
|
|
|
**
|
2009-01-13 19:21:51 +01:00
|
|
|
** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
|
|
|
|
** Contact: Qt Software Information (qt-info@nokia.com)
|
|
|
|
|
**
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
|
|
|
|
** Non-Open Source Usage
|
|
|
|
|
**
|
2008-12-02 12:01:29 +01:00
|
|
|
** Licensees may use this file in accordance with the Qt Beta Version
|
|
|
|
|
** License Agreement, Agreement version 2.2 provided with the Software or,
|
|
|
|
|
** alternatively, in accordance with the terms contained in a written
|
2008-12-02 14:17:16 +01:00
|
|
|
** agreement between you and Nokia.
|
|
|
|
|
**
|
|
|
|
|
** GNU General Public License Usage
|
|
|
|
|
**
|
2008-12-02 12:01:29 +01:00
|
|
|
** Alternatively, this file may be used under the terms of the GNU General
|
|
|
|
|
** Public License versions 2.0 or 3.0 as published by the Free Software
|
|
|
|
|
** Foundation and appearing in the file LICENSE.GPL included in the packaging
|
|
|
|
|
** of this file. Please review the following information to ensure GNU
|
|
|
|
|
** General Public Licensing requirements will be met:
|
|
|
|
|
**
|
|
|
|
|
** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
|
|
|
|
|
** http://www.gnu.org/copyleft/gpl.html.
|
|
|
|
|
**
|
|
|
|
|
** In addition, as a special exception, Nokia gives you certain additional
|
2008-12-02 14:17:16 +01:00
|
|
|
** rights. These rights are described in the Nokia Qt GPL Exception
|
2008-12-16 17:20:00 +01:00
|
|
|
** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
|
|
|
|
***************************************************************************/
|
2008-12-02 16:19:05 +01:00
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
#include "texteditoractionhandler.h"
|
|
|
|
|
#include "texteditorconstants.h"
|
|
|
|
|
#include "basetexteditor.h"
|
|
|
|
|
#include "texteditorplugin.h"
|
|
|
|
|
#include "linenumberfilter.h"
|
|
|
|
|
|
|
|
|
|
#include <quickopen/quickopenmanager.h>
|
|
|
|
|
#include <coreplugin/coreconstants.h>
|
|
|
|
|
#include <coreplugin/uniqueidmanager.h>
|
2009-01-13 13:39:31 +01:00
|
|
|
#include <coreplugin/actionmanager/actionmanager.h>
|
2008-12-02 12:01:29 +01:00
|
|
|
#include <coreplugin/editormanager/editormanager.h>
|
2008-12-09 15:25:01 +01:00
|
|
|
#include <utils/qtcassert.h>
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
#include <QtCore/QSet>
|
|
|
|
|
#include <QtCore/QtDebug>
|
|
|
|
|
#include <QtGui/QAction>
|
|
|
|
|
#include <QtGui/QTextCursor>
|
|
|
|
|
|
|
|
|
|
using namespace TextEditor;
|
|
|
|
|
using namespace TextEditor::Internal;
|
|
|
|
|
|
|
|
|
|
TextEditorActionHandler::TextEditorActionHandler(Core::ICore *core,
|
|
|
|
|
const QString &context,
|
|
|
|
|
uint optionalActions) :
|
|
|
|
|
QObject(core),
|
|
|
|
|
m_optionalActions(optionalActions),
|
|
|
|
|
m_currentEditor(0),
|
|
|
|
|
m_core(core),
|
|
|
|
|
m_initialized(false)
|
|
|
|
|
{
|
|
|
|
|
m_undoAction = m_redoAction = m_copyAction = m_cutAction = m_pasteAction
|
|
|
|
|
= m_selectAllAction = m_gotoAction = m_printAction = m_formatAction
|
2008-12-09 17:43:31 +01:00
|
|
|
= m_visualizeWhitespaceAction = m_cleanWhitespaceAction = m_textWrappingAction
|
2008-12-02 12:01:29 +01:00
|
|
|
= m_unCommentSelectionAction = m_unCollapseAllAction
|
|
|
|
|
= m_collapseAction = m_expandAction
|
|
|
|
|
= m_deleteLineAction = m_selectEncodingAction
|
|
|
|
|
= m_increaseFontSizeAction = m_decreaseFontSizeAction
|
2008-12-04 18:37:02 +01:00
|
|
|
= m_gotoBlockStartAction = m_gotoBlockStartWithSelectionAction
|
|
|
|
|
= m_gotoBlockEndAction = m_gotoBlockEndWithSelectionAction
|
2008-12-04 19:25:20 +01:00
|
|
|
= m_selectBlockUpAction = m_selectBlockDownAction
|
2008-12-10 18:01:33 +01:00
|
|
|
= m_moveLineUpAction = m_moveLineDownAction
|
2008-12-02 12:01:29 +01:00
|
|
|
= 0;
|
|
|
|
|
|
|
|
|
|
m_contextId << m_core->uniqueIDManager()->uniqueIdentifier(context);
|
|
|
|
|
|
|
|
|
|
connect(m_core, SIGNAL(contextAboutToChange(Core::IContext *)),
|
|
|
|
|
this, SLOT(updateCurrentEditor(Core::IContext *)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::setupActions(BaseTextEditor *editor)
|
|
|
|
|
{
|
|
|
|
|
initializeActions();
|
|
|
|
|
editor->setActionHack(this);
|
|
|
|
|
QObject::connect(editor, SIGNAL(undoAvailable(bool)), this, SLOT(updateUndoAction()));
|
|
|
|
|
QObject::connect(editor, SIGNAL(redoAvailable(bool)), this, SLOT(updateRedoAction()));
|
|
|
|
|
QObject::connect(editor, SIGNAL(copyAvailable(bool)), this, SLOT(updateCopyAction()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::initializeActions()
|
|
|
|
|
{
|
|
|
|
|
if (!m_initialized) {
|
|
|
|
|
createActions();
|
|
|
|
|
m_initialized = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::createActions()
|
|
|
|
|
{
|
|
|
|
|
m_undoAction = registerNewAction(QLatin1String(Core::Constants::UNDO), this, SLOT(undoAction()),
|
|
|
|
|
tr("&Undo"));
|
|
|
|
|
m_redoAction = registerNewAction(QLatin1String(Core::Constants::REDO), this, SLOT(redoAction()),
|
|
|
|
|
tr("&Redo"));
|
|
|
|
|
m_copyAction = registerNewAction(QLatin1String(Core::Constants::COPY), this, SLOT(copyAction()));
|
|
|
|
|
m_cutAction = registerNewAction(QLatin1String(Core::Constants::CUT), this, SLOT(cutAction()));
|
|
|
|
|
m_pasteAction = registerNewAction(QLatin1String(Core::Constants::PASTE), this, SLOT(pasteAction()));
|
|
|
|
|
m_selectAllAction = registerNewAction(QLatin1String(Core::Constants::SELECTALL), this, SLOT(selectAllAction()));
|
|
|
|
|
m_gotoAction = registerNewAction(QLatin1String(Core::Constants::GOTO), this, SLOT(gotoAction()));
|
|
|
|
|
m_printAction = registerNewAction(QLatin1String(Core::Constants::PRINT), this, SLOT(printAction()));
|
|
|
|
|
|
2009-01-13 13:39:31 +01:00
|
|
|
Core::ActionManager *am = m_core->actionManager();
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-01-14 12:39:59 +01:00
|
|
|
Core::ActionContainer *medit = am->actionContainer(Core::Constants::M_EDIT);
|
|
|
|
|
Core::ActionContainer *advancedMenu = am->actionContainer(Core::Constants::M_EDIT_ADVANCED);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
m_selectEncodingAction = new QAction(tr("Select Encoding..."), this);
|
|
|
|
|
Core::ICommand *command = am->registerAction(m_selectEncodingAction, Constants::SELECT_ENCODING, m_contextId);
|
|
|
|
|
connect(m_selectEncodingAction, SIGNAL(triggered()), this, SLOT(selectEncoding()));
|
|
|
|
|
medit->addAction(command, Core::Constants::G_EDIT_OTHER);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_formatAction = new QAction(tr("Auto-&indent Selection"), this);
|
|
|
|
|
command = am->registerAction(m_formatAction, TextEditor::Constants::AUTO_INDENT_SELECTION, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+I")));
|
|
|
|
|
advancedMenu->addAction(command);
|
|
|
|
|
connect(m_formatAction, SIGNAL(triggered(bool)), this, SLOT(formatAction()));
|
|
|
|
|
|
|
|
|
|
|
2008-12-09 17:43:31 +01:00
|
|
|
m_visualizeWhitespaceAction = new QAction(tr("&Visualize Whitespace"), this);
|
2008-12-02 12:01:29 +01:00
|
|
|
m_visualizeWhitespaceAction->setCheckable(true);
|
|
|
|
|
command = am->registerAction(m_visualizeWhitespaceAction,
|
|
|
|
|
TextEditor::Constants::VISUALIZE_WHITESPACE, m_contextId);
|
|
|
|
|
#ifndef Q_OS_MAC
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+E, Ctrl+V")));
|
|
|
|
|
#endif
|
|
|
|
|
advancedMenu->addAction(command);
|
|
|
|
|
connect(m_visualizeWhitespaceAction, SIGNAL(triggered(bool)), this, SLOT(setVisualizeWhitespace(bool)));
|
|
|
|
|
|
2008-12-09 17:43:31 +01:00
|
|
|
m_cleanWhitespaceAction = new QAction(tr("Clean Whitespace"), this);
|
|
|
|
|
command = am->registerAction(m_cleanWhitespaceAction,
|
|
|
|
|
TextEditor::Constants::CLEAN_WHITESPACE, m_contextId);
|
|
|
|
|
|
|
|
|
|
advancedMenu->addAction(command);
|
|
|
|
|
connect(m_cleanWhitespaceAction, SIGNAL(triggered()), this, SLOT(cleanWhitespace()));
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
m_textWrappingAction = new QAction(tr("Enable Text &Wrapping"), this);
|
|
|
|
|
m_textWrappingAction->setCheckable(true);
|
|
|
|
|
command = am->registerAction(m_textWrappingAction,
|
|
|
|
|
TextEditor::Constants::TEXT_WRAPPING, m_contextId);
|
|
|
|
|
#ifndef Q_OS_MAC
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+E, Ctrl+W")));
|
|
|
|
|
#endif
|
|
|
|
|
advancedMenu->addAction(command);
|
|
|
|
|
connect(m_textWrappingAction, SIGNAL(triggered(bool)), this, SLOT(setTextWrapping(bool)));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_unCommentSelectionAction = new QAction(tr("(Un)Comment &Selection"), this);
|
|
|
|
|
command = am->registerAction(m_unCommentSelectionAction, Constants::UN_COMMENT_SELECTION, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+/")));
|
|
|
|
|
connect(m_unCommentSelectionAction, SIGNAL(triggered()), this, SLOT(unCommentSelection()));
|
|
|
|
|
advancedMenu->addAction(command);
|
|
|
|
|
|
|
|
|
|
m_deleteLineAction = new QAction(tr("Delete &Line"), this);
|
|
|
|
|
command = am->registerAction(m_deleteLineAction, Constants::DELETE_LINE, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Shift+Del")));
|
|
|
|
|
connect(m_deleteLineAction, SIGNAL(triggered()), this, SLOT(deleteLine()));
|
|
|
|
|
|
|
|
|
|
m_collapseAction = new QAction(tr("Collapse"), this);
|
|
|
|
|
command = am->registerAction(m_collapseAction, Constants::COLLAPSE, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+<")));
|
|
|
|
|
connect(m_collapseAction, SIGNAL(triggered()), this, SLOT(collapse()));
|
|
|
|
|
|
|
|
|
|
m_expandAction = new QAction(tr("Expand"), this);
|
|
|
|
|
command = am->registerAction(m_expandAction, Constants::EXPAND, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+>")));
|
|
|
|
|
connect(m_expandAction, SIGNAL(triggered()), this, SLOT(expand()));
|
|
|
|
|
|
|
|
|
|
m_unCollapseAllAction = new QAction(tr("(Un)&Collapse All"), this);
|
|
|
|
|
command = am->registerAction(m_unCollapseAllAction, Constants::UN_COLLAPSE_ALL, m_contextId);
|
|
|
|
|
connect(m_unCollapseAllAction, SIGNAL(triggered()), this, SLOT(unCollapseAll()));
|
|
|
|
|
advancedMenu->addAction(command);
|
|
|
|
|
|
|
|
|
|
m_increaseFontSizeAction = new QAction(tr("Increase Font Size"), this);
|
|
|
|
|
command = am->registerAction(m_increaseFontSizeAction, Constants::INCREASE_FONT_SIZE, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl++")));
|
|
|
|
|
connect(m_increaseFontSizeAction, SIGNAL(triggered()), this, SLOT(increaseFontSize()));
|
|
|
|
|
advancedMenu->addAction(command);
|
|
|
|
|
|
|
|
|
|
m_decreaseFontSizeAction = new QAction(tr("Decrease Font Size"), this);
|
|
|
|
|
command = am->registerAction(m_decreaseFontSizeAction, Constants::DECREASE_FONT_SIZE, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+-")));
|
|
|
|
|
connect(m_decreaseFontSizeAction, SIGNAL(triggered()), this, SLOT(decreaseFontSize()));
|
|
|
|
|
advancedMenu->addAction(command);
|
2008-12-04 18:37:02 +01:00
|
|
|
|
|
|
|
|
m_gotoBlockStartAction = new QAction(tr("Goto Block Start"), this);
|
|
|
|
|
command = am->registerAction(m_gotoBlockStartAction, Constants::GOTO_BLOCK_START, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+[")));
|
|
|
|
|
connect(m_gotoBlockStartAction, SIGNAL(triggered()), this, SLOT(gotoBlockStart()));
|
|
|
|
|
|
|
|
|
|
m_gotoBlockEndAction = new QAction(tr("Goto Block End"), this);
|
|
|
|
|
command = am->registerAction(m_gotoBlockEndAction, Constants::GOTO_BLOCK_END, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+]")));
|
|
|
|
|
connect(m_gotoBlockEndAction, SIGNAL(triggered()), this, SLOT(gotoBlockEnd()));
|
|
|
|
|
|
|
|
|
|
m_gotoBlockStartWithSelectionAction = new QAction(tr("Goto Block Start With Selection"), this);
|
|
|
|
|
command = am->registerAction(m_gotoBlockStartWithSelectionAction, Constants::GOTO_BLOCK_START_WITH_SELECTION, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+{")));
|
|
|
|
|
connect(m_gotoBlockStartWithSelectionAction, SIGNAL(triggered()), this, SLOT(gotoBlockStartWithSelection()));
|
|
|
|
|
|
|
|
|
|
m_gotoBlockEndWithSelectionAction = new QAction(tr("Goto Block End With Selection"), this);
|
|
|
|
|
command = am->registerAction(m_gotoBlockEndWithSelectionAction, Constants::GOTO_BLOCK_END_WITH_SELECTION, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+}")));
|
|
|
|
|
connect(m_gotoBlockEndWithSelectionAction, SIGNAL(triggered()), this, SLOT(gotoBlockEndWithSelection()));
|
|
|
|
|
|
2008-12-04 19:25:20 +01:00
|
|
|
m_selectBlockUpAction= new QAction(tr("Select Block Up"), this);
|
|
|
|
|
command = am->registerAction(m_selectBlockUpAction, Constants::SELECT_BLOCK_UP, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+U")));
|
|
|
|
|
connect(m_selectBlockUpAction, SIGNAL(triggered()), this, SLOT(selectBlockUp()));
|
|
|
|
|
|
|
|
|
|
m_selectBlockDownAction= new QAction(tr("Select Block Down"), this);
|
|
|
|
|
command = am->registerAction(m_selectBlockDownAction, Constants::SELECT_BLOCK_DOWN, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+U")));
|
|
|
|
|
connect(m_selectBlockDownAction, SIGNAL(triggered()), this, SLOT(selectBlockDown()));
|
2008-12-10 18:01:33 +01:00
|
|
|
|
|
|
|
|
m_moveLineUpAction= new QAction(tr("Move Line Up"), this);
|
|
|
|
|
command = am->registerAction(m_moveLineUpAction, Constants::MOVE_LINE_UP, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+Up")));
|
|
|
|
|
connect(m_moveLineUpAction, SIGNAL(triggered()), this, SLOT(moveLineUp()));
|
|
|
|
|
|
|
|
|
|
m_moveLineDownAction= new QAction(tr("Move Line Down"), this);
|
|
|
|
|
command = am->registerAction(m_moveLineDownAction, Constants::MOVE_LINE_DOWN, m_contextId);
|
|
|
|
|
command->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+Down")));
|
|
|
|
|
connect(m_moveLineDownAction, SIGNAL(triggered()), this, SLOT(moveLineDown()));
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TextEditorActionHandler::supportsAction(const QString & /*id */) const
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QAction *TextEditorActionHandler::registerNewAction(const QString &id, const QString &title)
|
|
|
|
|
{
|
|
|
|
|
if (!supportsAction(id))
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
QAction *result = new QAction(title, this);
|
|
|
|
|
m_core->actionManager()->registerAction(result, id, m_contextId);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QAction *TextEditorActionHandler::registerNewAction(const QString &id,
|
|
|
|
|
QObject *receiver,
|
|
|
|
|
const char *slot,
|
|
|
|
|
const QString &title)
|
|
|
|
|
{
|
|
|
|
|
QAction *rc = registerNewAction(id, title);
|
|
|
|
|
if (!rc)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
connect(rc, SIGNAL(triggered()), receiver, slot);
|
|
|
|
|
return rc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TextEditorActionHandler::UpdateMode TextEditorActionHandler::updateMode() const
|
|
|
|
|
{
|
|
|
|
|
if (!m_currentEditor)
|
|
|
|
|
return NoEditor;
|
|
|
|
|
return m_currentEditor->file()->isReadOnly() ? ReadOnlyMode : WriteMode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::updateActions()
|
|
|
|
|
{
|
|
|
|
|
updateActions(updateMode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::updateActions(UpdateMode um)
|
|
|
|
|
{
|
2008-12-04 19:25:20 +01:00
|
|
|
if (!m_initialized)
|
|
|
|
|
return;
|
|
|
|
|
m_pasteAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_selectAllAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_gotoAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_selectEncodingAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_printAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_formatAction->setEnabled((m_optionalActions & Format) && um != NoEditor);
|
|
|
|
|
m_unCommentSelectionAction->setEnabled((m_optionalActions & UnCommentSelection) && um != NoEditor);
|
|
|
|
|
m_collapseAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_expandAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_unCollapseAllAction->setEnabled((m_optionalActions & UnCollapseAll) && um != NoEditor);
|
|
|
|
|
m_decreaseFontSizeAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_increaseFontSizeAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_gotoBlockStartAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_gotoBlockStartWithSelectionAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_gotoBlockEndAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_gotoBlockEndWithSelectionAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_selectBlockUpAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_selectBlockDownAction->setEnabled(um != NoEditor);
|
2008-12-10 18:01:33 +01:00
|
|
|
m_moveLineUpAction->setEnabled(um != NoEditor);
|
|
|
|
|
m_moveLineDownAction->setEnabled(um != NoEditor);
|
2008-12-04 19:25:20 +01:00
|
|
|
|
|
|
|
|
m_visualizeWhitespaceAction->setEnabled(um != NoEditor);
|
|
|
|
|
if (m_currentEditor)
|
|
|
|
|
m_visualizeWhitespaceAction->setChecked(m_currentEditor->displaySettings().m_visualizeWhitespace);
|
2008-12-09 17:43:31 +01:00
|
|
|
m_cleanWhitespaceAction->setEnabled(um != NoEditor);
|
2008-12-02 12:01:29 +01:00
|
|
|
if (m_textWrappingAction) {
|
|
|
|
|
m_textWrappingAction->setEnabled(um != NoEditor);
|
|
|
|
|
if (m_currentEditor)
|
|
|
|
|
m_textWrappingAction->setChecked(m_currentEditor->displaySettings().m_textWrapping);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
updateRedoAction();
|
|
|
|
|
updateUndoAction();
|
|
|
|
|
updateCopyAction();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::updateRedoAction()
|
|
|
|
|
{
|
|
|
|
|
if (m_redoAction)
|
|
|
|
|
m_redoAction->setEnabled(m_currentEditor && m_currentEditor->document()->isRedoAvailable());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::updateUndoAction()
|
|
|
|
|
{
|
|
|
|
|
if (m_undoAction)
|
|
|
|
|
m_undoAction->setEnabled(m_currentEditor && m_currentEditor->document()->isUndoAvailable());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::updateCopyAction()
|
|
|
|
|
{
|
|
|
|
|
const bool hasCopyableText = m_currentEditor && m_currentEditor->textCursor().hasSelection();
|
|
|
|
|
if (m_cutAction)
|
|
|
|
|
m_cutAction->setEnabled(hasCopyableText && updateMode() == WriteMode);
|
|
|
|
|
if (m_copyAction)
|
|
|
|
|
m_copyAction->setEnabled(hasCopyableText);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::gotoAction()
|
|
|
|
|
{
|
|
|
|
|
QuickOpen::QuickOpenManager *quickopen = QuickOpen::QuickOpenManager::instance();
|
2008-12-09 15:25:01 +01:00
|
|
|
QTC_ASSERT(quickopen, return);
|
2008-12-02 12:01:29 +01:00
|
|
|
QString shortcut = TextEditorPlugin::instance()->lineNumberFilter()->shortcutString();
|
|
|
|
|
quickopen->show(shortcut + " <line number>", 2, 13);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::printAction()
|
|
|
|
|
{
|
|
|
|
|
if (m_currentEditor)
|
|
|
|
|
m_currentEditor->print(m_core->printer());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::setVisualizeWhitespace(bool checked)
|
|
|
|
|
{
|
|
|
|
|
if (m_currentEditor) {
|
|
|
|
|
DisplaySettings ds = m_currentEditor->displaySettings();
|
|
|
|
|
ds.m_visualizeWhitespace = checked;
|
|
|
|
|
m_currentEditor->setDisplaySettings(ds);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextEditorActionHandler::setTextWrapping(bool checked)
|
|
|
|
|
{
|
|
|
|
|
if (m_currentEditor) {
|
|
|
|
|
DisplaySettings ds = m_currentEditor->displaySettings();
|
|
|
|
|
ds.m_textWrapping = checked;
|
|
|
|
|
m_currentEditor->setDisplaySettings(ds);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-04 18:37:02 +01:00
|
|
|
#define FUNCTION(funcname) void TextEditorActionHandler::funcname ()\
|
|
|
|
|
{\
|
|
|
|
|
if (m_currentEditor)\
|
|
|
|
|
m_currentEditor->funcname ();\
|
|
|
|
|
}
|
|
|
|
|
#define FUNCTION2(funcname, funcname2) void TextEditorActionHandler::funcname ()\
|
|
|
|
|
{\
|
|
|
|
|
if (m_currentEditor)\
|
|
|
|
|
m_currentEditor->funcname2 ();\
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-09 17:43:31 +01:00
|
|
|
|
|
|
|
|
FUNCTION2(undoAction, undo)
|
|
|
|
|
FUNCTION2(redoAction, redo)
|
|
|
|
|
FUNCTION2(copyAction, copy)
|
|
|
|
|
FUNCTION2(cutAction, cut)
|
|
|
|
|
FUNCTION2(pasteAction, paste)
|
|
|
|
|
FUNCTION2(formatAction, format)
|
|
|
|
|
FUNCTION2(selectAllAction, selectAll)
|
|
|
|
|
FUNCTION(cleanWhitespace)
|
2008-12-04 18:37:02 +01:00
|
|
|
FUNCTION(unCommentSelection)
|
|
|
|
|
FUNCTION(deleteLine)
|
|
|
|
|
FUNCTION(unCollapseAll)
|
|
|
|
|
FUNCTION(collapse)
|
|
|
|
|
FUNCTION(expand)
|
|
|
|
|
FUNCTION2(increaseFontSize, zoomIn)
|
|
|
|
|
FUNCTION2(decreaseFontSize, zoomOut)
|
|
|
|
|
FUNCTION(selectEncoding)
|
|
|
|
|
FUNCTION(gotoBlockStart)
|
|
|
|
|
FUNCTION(gotoBlockEnd)
|
|
|
|
|
FUNCTION(gotoBlockStartWithSelection)
|
|
|
|
|
FUNCTION(gotoBlockEndWithSelection)
|
2008-12-04 19:25:20 +01:00
|
|
|
FUNCTION(selectBlockUp)
|
|
|
|
|
FUNCTION(selectBlockDown)
|
2008-12-10 18:01:33 +01:00
|
|
|
FUNCTION(moveLineUp)
|
|
|
|
|
FUNCTION(moveLineDown)
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
void TextEditorActionHandler::updateCurrentEditor(Core::IContext *object)
|
|
|
|
|
{
|
|
|
|
|
do {
|
|
|
|
|
if (!object) {
|
|
|
|
|
if (!m_currentEditor)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
m_currentEditor = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
BaseTextEditor *editor = qobject_cast<BaseTextEditor *>(object->widget());
|
|
|
|
|
if (!editor) {
|
|
|
|
|
if (!m_currentEditor)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
m_currentEditor = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (editor == m_currentEditor)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (editor->actionHack() != this) {
|
|
|
|
|
m_currentEditor = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_currentEditor = editor;
|
|
|
|
|
|
|
|
|
|
} while (false);
|
|
|
|
|
updateActions();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const QPointer<BaseTextEditor> &TextEditorActionHandler::currentEditor() const
|
|
|
|
|
{
|
|
|
|
|
return m_currentEditor;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Core::ICore *TextEditorActionHandler::core() const
|
|
|
|
|
{
|
|
|
|
|
return m_core;
|
|
|
|
|
}
|
|
|
|
|
|