diff --git a/src/plugins/texteditor/CMakeLists.txt b/src/plugins/texteditor/CMakeLists.txt index 737ce0023ae..40d4a3b55ba 100644 --- a/src/plugins/texteditor/CMakeLists.txt +++ b/src/plugins/texteditor/CMakeLists.txt @@ -90,7 +90,7 @@ add_qtc_plugin(TextEditor storagesettings.cpp storagesettings.h syntaxhighlighter.cpp syntaxhighlighter.h tabsettings.cpp tabsettings.h - tabsettingswidget.cpp tabsettingswidget.h tabsettingswidget.ui + tabsettingswidget.cpp tabsettingswidget.h textdocument.cpp textdocument.h textdocumentlayout.cpp textdocumentlayout.h texteditor.cpp texteditor.h diff --git a/src/plugins/texteditor/tabsettingswidget.cpp b/src/plugins/texteditor/tabsettingswidget.cpp index c6e84d26d31..f0a8c2286c1 100644 --- a/src/plugins/texteditor/tabsettingswidget.cpp +++ b/src/plugins/texteditor/tabsettingswidget.cpp @@ -24,56 +24,135 @@ ****************************************************************************/ #include "tabsettingswidget.h" -#include "ui_tabsettingswidget.h" + #include "tabsettings.h" +#include +#include +#include +#include +#include #include +#include + namespace TextEditor { +QString continuationTooltip() +{ + // FIXME: This is unfair towards translators. + return QCoreApplication::translate("TextEditor::Internal::TabSettingsWidget", + "\n" + "Influences the indentation of continuation lines.\n" + "\n" + "
    \n" + "
  • Not At All: Do not align at all. Lines will only be indented to the current logical indentation depth.\n" + "
    \n"
    +        "(tab)int i = foo(a, b\n"
    +        "(tab)c, d);\n"
    +        "
    \n" + "
  • \n" + "\n" + "
  • With Spaces: Always use spaces for alignment, regardless of the other indentation settings.\n" + "
    \n"
    +        "(tab)int i = foo(a, b\n"
    +        "(tab)            c, d);\n"
    +        "
    \n" + "
  • \n" + "\n" + "
  • With Regular Indent: Use tabs and/or spaces for alignment, as configured above.\n" + "
    \n"
    +        "(tab)int i = foo(a, b\n"
    +        "(tab)(tab)(tab)  c, d);\n"
    +        "
    \n" + "
  • \n" + "
"); +} + TabSettingsWidget::TabSettingsWidget(QWidget *parent) : - QGroupBox(parent), - ui(new Internal::Ui::TabSettingsWidget) + QGroupBox(parent) { - ui->setupUi(this); - ui->codingStyleWarning->setVisible(false); + resize(254, 189); + setTitle(tr("Tabs And Indentation")); - auto comboIndexChanged = QOverload::of(&QComboBox::currentIndexChanged); - auto spinValueChanged = QOverload::of(&QSpinBox::valueChanged); - connect(ui->codingStyleWarning, &QLabel::linkActivated, + m_codingStyleWarning = new QLabel( + tr("Code indentation is configured in C++ " + "and Qt Quick settings.")); + m_codingStyleWarning->setVisible(false); + m_codingStyleWarning->setWordWrap(true); + m_codingStyleWarning->setToolTip( + tr("The text editor indentation setting is used for non-code files only. See the C++ " + "and Qt Quick coding style settings to configure indentation for code files.")); + + m_tabPolicy = new QComboBox(this); + m_tabPolicy->setMinimumContentsLength(28); + m_tabPolicy->addItem(tr("Spaces Only")); + m_tabPolicy->addItem(tr("Tabs Only")); + m_tabPolicy->addItem(tr("Mixed")); + + auto tabSizeLabel = new QLabel(tr("Ta&b size:")); + + m_tabSize = new QSpinBox(this); + m_tabSize->setRange(1, 20); + + auto indentSizeLabel = new QLabel(tr("&Indent size:")); + + m_indentSize = new QSpinBox(this); + m_indentSize->setRange(1, 20); + + m_continuationAlignBehavior = new QComboBox; + m_continuationAlignBehavior->addItem(tr("Not At All")); + m_continuationAlignBehavior->addItem(tr("With Spaces")); + m_continuationAlignBehavior->addItem(tr("With Regular Indent")); + m_continuationAlignBehavior->setToolTip(continuationTooltip()); + + tabSizeLabel->setBuddy(m_tabSize); + indentSizeLabel->setBuddy(m_indentSize); + + using namespace Utils::Layouting; + const auto indent = [](QWidget *inner) { return Row { Space(30), inner }; }; + + Column { + m_codingStyleWarning, + tr("Tab policy:"), + indent(m_tabPolicy), + Row { tabSizeLabel, m_tabSize, indentSizeLabel, m_indentSize, st }, + tr("Align continuation lines:"), + indent(m_continuationAlignBehavior) + }.attachTo(this); + + connect(m_codingStyleWarning, &QLabel::linkActivated, this, &TabSettingsWidget::codingStyleLinkActivated); - connect(ui->tabPolicy, comboIndexChanged, + connect(m_tabPolicy, &QComboBox::currentIndexChanged, this, &TabSettingsWidget::slotSettingsChanged); - connect(ui->tabSize, spinValueChanged, + connect(m_tabSize, &QSpinBox::valueChanged, this, &TabSettingsWidget::slotSettingsChanged); - connect(ui->indentSize, spinValueChanged, + connect(m_indentSize, &QSpinBox::valueChanged, this, &TabSettingsWidget::slotSettingsChanged); - connect(ui->continuationAlignBehavior, comboIndexChanged, + connect(m_continuationAlignBehavior, &QComboBox::currentIndexChanged, this, &TabSettingsWidget::slotSettingsChanged); } -TabSettingsWidget::~TabSettingsWidget() -{ - delete ui; -} +TabSettingsWidget::~TabSettingsWidget() = default; -void TabSettingsWidget::setTabSettings(const TextEditor::TabSettings& s) +void TabSettingsWidget::setTabSettings(const TabSettings &s) { QSignalBlocker blocker(this); - ui->tabPolicy->setCurrentIndex(s.m_tabPolicy); - ui->tabSize->setValue(s.m_tabSize); - ui->indentSize->setValue(s.m_indentSize); - ui->continuationAlignBehavior->setCurrentIndex(s.m_continuationAlignBehavior); + m_tabPolicy->setCurrentIndex(s.m_tabPolicy); + m_tabSize->setValue(s.m_tabSize); + m_indentSize->setValue(s.m_indentSize); + m_continuationAlignBehavior->setCurrentIndex(s.m_continuationAlignBehavior); } TabSettings TabSettingsWidget::tabSettings() const { TabSettings set; - set.m_tabPolicy = (TabSettings::TabPolicy)(ui->tabPolicy->currentIndex()); - set.m_tabSize = ui->tabSize->value(); - set.m_indentSize = ui->indentSize->value(); - set.m_continuationAlignBehavior = (TabSettings::ContinuationAlignBehavior)(ui->continuationAlignBehavior->currentIndex()); + set.m_tabPolicy = TabSettings::TabPolicy(m_tabPolicy->currentIndex()); + set.m_tabSize = m_tabSize->value(); + set.m_indentSize = m_indentSize->value(); + set.m_continuationAlignBehavior = + TabSettings::ContinuationAlignBehavior(m_continuationAlignBehavior->currentIndex()); return set; } @@ -93,7 +172,7 @@ void TabSettingsWidget::codingStyleLinkActivated(const QString &linkString) void TabSettingsWidget::setCodingStyleWarningVisible(bool visible) { - ui->codingStyleWarning->setVisible(visible); + m_codingStyleWarning->setVisible(visible); } -} // namespace TextEditor +} // TextEditor diff --git a/src/plugins/texteditor/tabsettingswidget.h b/src/plugins/texteditor/tabsettingswidget.h index 5a5206434ac..8850545619b 100644 --- a/src/plugins/texteditor/tabsettingswidget.h +++ b/src/plugins/texteditor/tabsettingswidget.h @@ -29,9 +29,13 @@ #include -namespace TextEditor { +QT_BEGIN_NAMESPACE +class QComboBox; +class QLabel; +class QSpinBox; +QT_END_NAMESPACE -namespace Internal { namespace Ui { class TabSettingsWidget; } } +namespace TextEditor { class TabSettings; @@ -61,7 +65,11 @@ private: void slotSettingsChanged(); void codingStyleLinkActivated(const QString &linkString); - Internal::Ui::TabSettingsWidget *ui; + QLabel *m_codingStyleWarning; + QComboBox *m_tabPolicy; + QSpinBox *m_tabSize; + QSpinBox *m_indentSize; + QComboBox *m_continuationAlignBehavior; }; } // namespace TextEditor diff --git a/src/plugins/texteditor/tabsettingswidget.ui b/src/plugins/texteditor/tabsettingswidget.ui deleted file mode 100644 index 69fe0b9a2a6..00000000000 --- a/src/plugins/texteditor/tabsettingswidget.ui +++ /dev/null @@ -1,231 +0,0 @@ - - - TextEditor::Internal::TabSettingsWidget - - - - 0 - 0 - 254 - 189 - - - - - - - Tabs And Indentation - - - - - - The text editor indentation setting is used for non-code files only. See the C++ and Qt Quick coding style settings to configure indentation for code files. - - - <i>Code indentation is configured in <a href="C++">C++</a> and <a href="QtQuick">Qt Quick</a> settings.</i> - - - true - - - - - - - Tab policy: - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 30 - 20 - - - - - - - - - 0 - 0 - - - - - Spaces Only - - - - - Tabs Only - - - - - Mixed - - - - - - - - - - - 0 - 0 - - - - Ta&b size: - - - tabSize - - - - - - - - 0 - 0 - - - - 1 - - - 20 - - - - - - - - 0 - 0 - - - - &Indent size: - - - indentSize - - - - - - - - 0 - 0 - - - - 1 - - - 20 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Align continuation lines: - - - - - - - - 0 - 0 - - - - <html><head/><body> -Influences the indentation of continuation lines. - -<ul> -<li>Not At All: Do not align at all. Lines will only be indented to the current logical indentation depth. -<pre> -(tab)int i = foo(a, b -(tab)c, d); -</pre> -</li> - -<li>With Spaces: Always use spaces for alignment, regardless of the other indentation settings. -<pre> -(tab)int i = foo(a, b -(tab) c, d); -</pre> -</li> - -<li>With Regular Indent: Use tabs and/or spaces for alignment, as configured above. -<pre> -(tab)int i = foo(a, b -(tab)(tab)(tab) c, d); -</pre> -</li> -</ul></body></html> - - - - Not At All - - - - - With Spaces - - - - - With Regular Indent - - - - - - - - tabPolicy - tabSize - indentSize - continuationAlignBehavior - - - - diff --git a/src/plugins/texteditor/texteditor.qbs b/src/plugins/texteditor/texteditor.qbs index c96ada6a84d..dad6815fce2 100644 --- a/src/plugins/texteditor/texteditor.qbs +++ b/src/plugins/texteditor/texteditor.qbs @@ -119,7 +119,6 @@ Project { "tabsettings.h", "tabsettingswidget.cpp", "tabsettingswidget.h", - "tabsettingswidget.ui", "textdocument.cpp", "textdocument.h", "textdocumentlayout.cpp",