From 26114a23d0af8b876b85870e5e7777cbd9626e63 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Mon, 13 Sep 2010 12:36:18 +0200 Subject: [PATCH] Indenter: Add an option to control the padding style. Reviewed-by: Thorbjorn Lindeijer --- .../texteditor/behaviorsettingspage.cpp | 2 + .../texteditor/behaviorsettingspage.ui | 63 ++++++++++++++----- src/plugins/texteditor/tabsettings.cpp | 18 +++++- src/plugins/texteditor/tabsettings.h | 8 +++ 4 files changed, 72 insertions(+), 19 deletions(-) diff --git a/src/plugins/texteditor/behaviorsettingspage.cpp b/src/plugins/texteditor/behaviorsettingspage.cpp index 9595415fb09..57a911a8deb 100644 --- a/src/plugins/texteditor/behaviorsettingspage.cpp +++ b/src/plugins/texteditor/behaviorsettingspage.cpp @@ -158,6 +158,7 @@ void BehaviorSettingsPage::settingsFromUI(TabSettings &tabSettings, tabSettings.m_doubleIndentBlocks = m_d->m_page.indentBlocksBehavior->currentIndex() >= 2; tabSettings.m_tabKeyBehavior = (TabSettings::TabKeyBehavior)m_d->m_page.tabKeyBehavior->currentIndex(); + tabSettings.m_paddingMode = (TabSettings::PaddingMode)m_d->m_page.paddingMode->currentIndex(); storageSettings.m_cleanWhitespace = m_d->m_page.cleanWhitespace->isChecked(); storageSettings.m_inEntireDocument = m_d->m_page.inEntireDocument->isChecked(); @@ -181,6 +182,7 @@ void BehaviorSettingsPage::settingsToUI() (tabSettings.m_doubleIndentBlocks ? 2 : 1) : 0); m_d->m_page.tabKeyBehavior->setCurrentIndex(tabSettings.m_tabKeyBehavior); + m_d->m_page.paddingMode->setCurrentIndex(tabSettings.m_paddingMode); const StorageSettings &storageSettings = m_d->m_storageSettings; m_d->m_page.cleanWhitespace->setChecked(storageSettings.m_cleanWhitespace); diff --git a/src/plugins/texteditor/behaviorsettingspage.ui b/src/plugins/texteditor/behaviorsettingspage.ui index 8ccf21d5070..2b5d2bd7959 100644 --- a/src/plugins/texteditor/behaviorsettingspage.ui +++ b/src/plugins/texteditor/behaviorsettingspage.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>550</width> - <height>464</height> + <width>576</width> + <height>538</height> </rect> </property> <layout class="QVBoxLayout" name="verticalLayout"> @@ -179,14 +179,14 @@ </item> </widget> </item> - <item row="1" column="0"> + <item row="2" column="0"> <widget class="QLabel" name="tabKeyIndentLabel"> <property name="text"> <string>Tab key performs auto-indent:</string> </property> </widget> </item> - <item row="1" column="1"> + <item row="2" column="1"> <widget class="QComboBox" name="tabKeyBehavior"> <item> <property name="text"> @@ -205,6 +205,41 @@ </item> </widget> </item> + <item row="1" column="0"> + <widget class="QLabel" name="paddingStyleLabel"> + <property name="text"> + <string>Padding style:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="paddingMode"> + <property name="toolTip"> + <string>Padding is the part of indentation exceeding logical indentation and is usually used to align consecutive lines of code. + +Disable Padding: Do not pad at all. Lines will only be indented to the current logical indentation depth. + +Pad With Spaces: Always use spaces for padding, regardless of the choice between tabs and spaces above. + +Pad With Indentation: Padding will be part of the indentation and follow the settings above.</string> + </property> + <item> + <property name="text"> + <string>Disable Padding</string> + </property> + </item> + <item> + <property name="text"> + <string>Pad With Spaces</string> + </property> + </item> + <item> + <property name="text"> + <string>Pad With Indentation</string> + </property> + </item> + </widget> + </item> </layout> </item> </layout> @@ -339,10 +374,6 @@ </spacer> </item> </layout> - <zorder>groupBoxTabAndIndentSettings</zorder> - <zorder>groupBoxStorageSettings</zorder> - <zorder>groupBoxMouse</zorder> - <zorder>indentBlocksLabel</zorder> </widget> <tabstops> <tabstop>insertSpaces</tabstop> @@ -364,12 +395,12 @@ <slot>setEnabled(bool)</slot> <hints> <hint type="sourcelabel"> - <x>67</x> - <y>252</y> + <x>87</x> + <y>323</y> </hint> <hint type="destinationlabel"> - <x>148</x> - <y>281</y> + <x>205</x> + <y>353</y> </hint> </hints> </connection> @@ -380,12 +411,12 @@ <slot>setEnabled(bool)</slot> <hints> <hint type="sourcelabel"> - <x>40</x> - <y>251</y> + <x>60</x> + <y>323</y> </hint> <hint type="destinationlabel"> - <x>77</x> - <y>310</y> + <x>134</x> + <y>384</y> </hint> </hints> </connection> diff --git a/src/plugins/texteditor/tabsettings.cpp b/src/plugins/texteditor/tabsettings.cpp index b9772bb37a2..6277030eb19 100644 --- a/src/plugins/texteditor/tabsettings.cpp +++ b/src/plugins/texteditor/tabsettings.cpp @@ -45,6 +45,7 @@ static const char *indentBracesKey = "IndentBraces"; static const char *doubleIndentBlocksKey = "DoubleIndentBlocks"; static const char *tabKeyBehaviorKey = "TabKeyBehavior"; static const char *groupPostfix = "TabSettings"; +static const char *paddingModeKey = "PaddingMode"; namespace TextEditor { @@ -57,7 +58,8 @@ TabSettings::TabSettings() : m_indentSize(4), m_indentBraces(false), m_doubleIndentBlocks(false), - m_tabKeyBehavior(TabNeverIndents) + m_tabKeyBehavior(TabNeverIndents), + m_paddingMode(PadWithSpaces) { } @@ -76,6 +78,7 @@ void TabSettings::toSettings(const QString &category, QSettings *s) const s->setValue(QLatin1String(indentBracesKey), m_indentBraces); s->setValue(QLatin1String(doubleIndentBlocksKey), m_doubleIndentBlocks); s->setValue(QLatin1String(tabKeyBehaviorKey), m_tabKeyBehavior); + s->setValue(QLatin1String(paddingModeKey), m_paddingMode); s->endGroup(); } @@ -99,6 +102,7 @@ void TabSettings::fromSettings(const QString &category, const QSettings *s) = s->value(group + QLatin1String(doubleIndentBlocksKey), m_doubleIndentBlocks).toBool(); m_tabKeyBehavior = (TabKeyBehavior)s->value(group + QLatin1String(tabKeyBehaviorKey), m_tabKeyBehavior).toInt(); + m_paddingMode = (PaddingMode)s->value(group + QLatin1String(paddingModeKey), m_paddingMode).toInt(); } @@ -319,13 +323,20 @@ void TabSettings::indentLine(QTextBlock block, int newIndent, int padding) const const QString text = block.text(); const int oldBlockLength = text.size(); + if (m_paddingMode == DisablePadding) { + newIndent -= padding; + padding = 0; + } else if (m_paddingMode == PadWithIndent) { + padding = 0; + } + // Quickly check whether indenting is required. if (indentationColumn(text) == newIndent) return; QString indentString; - if (!m_spacesForTabs && m_tabSize == m_indentSize) { + if (!m_spacesForTabs) { // user likes tabs for spaces and uses tabs for indentation, preserve padding indentString = indentationString(0, newIndent - padding, block); indentString += QString(padding, QLatin1Char(' ')); @@ -388,7 +399,8 @@ bool TabSettings::equals(const TabSettings &ts) const && m_indentSize == ts.m_indentSize && m_indentBraces == ts.m_indentBraces && m_doubleIndentBlocks == ts.m_doubleIndentBlocks - && m_tabKeyBehavior == ts.m_tabKeyBehavior; + && m_tabKeyBehavior == ts.m_tabKeyBehavior + && m_paddingMode == ts.m_paddingMode; } } // namespace TextEditor diff --git a/src/plugins/texteditor/tabsettings.h b/src/plugins/texteditor/tabsettings.h index 75ec461f0c1..66c7fa0e6aa 100644 --- a/src/plugins/texteditor/tabsettings.h +++ b/src/plugins/texteditor/tabsettings.h @@ -52,6 +52,13 @@ public: TabLeadingWhitespaceIndents = 2 }; + // This enum must match the indexes of paddingMode widget + enum PaddingMode { + DisablePadding = 0, + PadWithSpaces = 1, + PadWithIndent = 2 + }; + TabSettings(); void toSettings(const QString &category, QSettings *s) const; @@ -89,6 +96,7 @@ public: bool m_indentBraces; bool m_doubleIndentBlocks; TabKeyBehavior m_tabKeyBehavior; + PaddingMode m_paddingMode; bool equals(const TabSettings &ts) const; }; -- GitLab