From fe9eeece403e15d88759aa3766168f7c7d76d5d7 Mon Sep 17 00:00:00 2001
From: Adam Treat <atreat@rim.com>
Date: Sun, 22 Jan 2012 17:05:02 -0500
Subject: [PATCH] Adds two actions to indent and unindent a selection.

Add actions to the basetexteditor to indent and unindent a selection.  These actions
are equivalent to Key_Tab and Key_BackTab respectively.  The advantage of having
actions here is the user can override them and assign any key binding they want.
Thus, I could assign Ctrl+I and Shift+Ctrl+I to them and have the same behavior
as Kate.

Change-Id: I0a305a7b45018072a78f2880ea15650ea92095a1
Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
---
 src/plugins/texteditor/basetexteditor.cpp          | 10 ++++++++++
 src/plugins/texteditor/basetexteditor.h            |  3 +++
 src/plugins/texteditor/texteditoractionhandler.cpp | 14 ++++++++++++++
 src/plugins/texteditor/texteditoractionhandler.h   |  4 ++++
 src/plugins/texteditor/texteditorconstants.h       |  2 ++
 5 files changed, 33 insertions(+)

diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 9233f2adf72..12885a14bb9 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -1063,6 +1063,16 @@ void BaseTextEditorWidget::lowercaseSelection()
     transformSelection(&QString::toLower);
 }
 
+void BaseTextEditorWidget::indent()
+{
+    indentOrUnindent(true);
+}
+
+void BaseTextEditorWidget::unindent()
+{
+    indentOrUnindent(false);
+}
+
 void BaseTextEditorWidget::moveLineUpDown(bool up)
 {
     QTextCursor cursor = textCursor();
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index 4a39f9c6264..708d82c867f 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -322,6 +322,9 @@ public slots:
 
     void cleanWhitespace();
 
+    void indent();
+    void unindent();
+
 signals:
     void changed();
 
diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp
index 3685d5e75fd..17d180c2c08 100644
--- a/src/plugins/texteditor/texteditoractionhandler.cpp
+++ b/src/plugins/texteditor/texteditoractionhandler.cpp
@@ -102,6 +102,8 @@ TextEditorActionHandler::TextEditorActionHandler(const char *context,
     m_insertLineBelowAction(0),
     m_upperCaseSelectionAction(0),
     m_lowerCaseSelectionAction(0),
+    m_indentAction(0),
+    m_unindentAction(0),
     m_optionalActions(optionalActions),
     m_currentEditor(0),
     m_contextId(context),
@@ -377,6 +379,16 @@ void TextEditorActionHandler::createActions()
     connect(m_circularPasteAction, SIGNAL(triggered()), this, SLOT(circularPasteAction()));
     medit->addAction(command, Core::Constants::G_EDIT_COPYPASTE);
 
+    m_indentAction = new QAction(tr("Indent"), this);
+    m_modifyingActions << m_indentAction;
+    command = am->registerAction(m_indentAction, Constants::INDENT, m_contextId, true);
+    connect(m_indentAction, SIGNAL(triggered()), this, SLOT(indent()));
+
+    m_unindentAction = new QAction(tr("Unindent"), this);
+    m_modifyingActions << m_unindentAction;
+    command = am->registerAction(m_unindentAction, Constants::UNINDENT, m_contextId, true);
+    connect(m_unindentAction, SIGNAL(triggered()), this, SLOT(unindent()));
+
     QAction *a = 0;
     a = new QAction(tr("Go to Line Start"), this);
     command = am->registerAction(a, Constants::GOTO_LINE_START, m_contextId, true);
@@ -611,6 +623,8 @@ FUNCTION(uppercaseSelection)
 FUNCTION(lowercaseSelection)
 FUNCTION(insertLineAbove)
 FUNCTION(insertLineBelow)
+FUNCTION(indent)
+FUNCTION(unindent)
 
 FUNCTION(gotoLineStart)
 FUNCTION(gotoLineStartWithSelection)
diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h
index f24e4ec845c..70ff79237af 100644
--- a/src/plugins/texteditor/texteditoractionhandler.h
+++ b/src/plugins/texteditor/texteditoractionhandler.h
@@ -138,6 +138,8 @@ private slots:
     void uppercaseSelection();
     void lowercaseSelection();
     void updateCurrentEditor(Core::IEditor *editor);
+    void indent();
+    void unindent();
 
     void gotoLineStart();
     void gotoLineStartWithSelection();
@@ -206,6 +208,8 @@ private:
     QAction *m_insertLineBelowAction;
     QAction *m_upperCaseSelectionAction;
     QAction *m_lowerCaseSelectionAction;
+    QAction *m_indentAction;
+    QAction *m_unindentAction;
     QList<QAction *> m_modifyingActions;
 
     uint m_optionalActions;
diff --git a/src/plugins/texteditor/texteditorconstants.h b/src/plugins/texteditor/texteditorconstants.h
index 513a9604837..0f26a6f7830 100644
--- a/src/plugins/texteditor/texteditorconstants.h
+++ b/src/plugins/texteditor/texteditorconstants.h
@@ -102,6 +102,8 @@ const char TASK_DOWNLOAD_DEFINITIONS[] = "TextEditor.Task.Download";
 const char TASK_REGISTER_DEFINITIONS[] = "TextEditor.Task.Register";
 const char TASK_OPEN_FILE[]        = "TextEditor.Task.OpenFile";
 const char CIRCULAR_PASTE[]        = "TextEditor.CircularPaste";
+const char INDENT[]        = "TextEditor.Indent";
+const char UNINDENT[]        = "TextEditor.Unindent";
 
 // Text color and style categories
 const char C_TEXT[]                = "Text";
-- 
GitLab