diff options
Diffstat (limited to 'src/plugins/texteditor/fontsettingspage.cpp')
-rw-r--r-- | src/plugins/texteditor/fontsettingspage.cpp | 276 |
1 files changed, 158 insertions, 118 deletions
diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp index 1e6b65d56bc..7f863ebb18b 100644 --- a/src/plugins/texteditor/fontsettingspage.cpp +++ b/src/plugins/texteditor/fontsettingspage.cpp @@ -1,41 +1,23 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #include "fontsettingspage.h" +#include "colorschemeedit.h" #include "fontsettings.h" #include "texteditorsettings.h" -#include "ui_fontsettingspage.h" #include <coreplugin/icore.h> -#include <utils/fileutils.h> + #include <utils/filepath.h> -#include <utils/stringutils.h> +#include <utils/fileutils.h> +#include <utils/layoutbuilder.h> #include <utils/qtcassert.h> +#include <utils/stringutils.h> #include <utils/theme/theme.h> +#include <QAbstractItemModel> +#include <QDebug> #include <QFileDialog> #include <QFontDatabase> #include <QInputDialog> @@ -44,17 +26,30 @@ #include <QPointer> #include <QSettings> #include <QTimer> -#include <QDebug> + +#include <QtCore/QVariant> +#include <QtWidgets/QApplication> +#include <QtWidgets/QCheckBox> +#include <QtWidgets/QComboBox> +#include <QtWidgets/QFontComboBox> +#include <QtWidgets/QGridLayout> +#include <QtWidgets/QGroupBox> +#include <QtWidgets/QLabel> +#include <QtWidgets/QPushButton> +#include <QtWidgets/QSpacerItem> +#include <QtWidgets/QSpinBox> +#include <QtWidgets/QVBoxLayout> +#include <QtWidgets/QWidget> using namespace TextEditor::Internal; +using namespace Utils; namespace TextEditor { namespace Internal { struct ColorSchemeEntry { - ColorSchemeEntry(const QString &fileName, - bool readOnly): + ColorSchemeEntry(const QString &fileName, bool readOnly) : fileName(fileName), name(ColorScheme::readNameOfScheme(fileName)), readOnly(readOnly) @@ -66,7 +61,6 @@ struct ColorSchemeEntry bool readOnly; }; - class SchemeListModel : public QAbstractListModel { public: @@ -119,45 +113,87 @@ public: { m_lastValue = m_value; - m_ui.setupUi(this); - m_ui.colorSchemeGroupBox->setTitle( - tr("Color Scheme for Theme \"%1\"") - .arg(Utils::creatorTheme()->displayName())); - m_ui.schemeComboBox->setModel(&m_schemeListModel); + resize(639, 306); - m_ui.fontComboBox->setCurrentFont(m_value.family()); + m_antialias = new QCheckBox(tr("Antialias")); + m_antialias->setChecked(m_value.antialias()); - m_ui.antialias->setChecked(m_value.antialias()); - m_ui.zoomSpinBox->setValue(m_value.fontZoom()); + m_zoomSpinBox = new QSpinBox; + m_zoomSpinBox->setSuffix(tr("%")); + m_zoomSpinBox->setRange(10, 3000); + m_zoomSpinBox->setSingleStep(10); + m_zoomSpinBox->setValue(m_value.fontZoom()); - m_ui.schemeEdit->setFormatDescriptions(fd); - m_ui.schemeEdit->setBaseFont(m_value.font()); - m_ui.schemeEdit->setColorScheme(m_value.colorScheme()); + m_fontComboBox = new QFontComboBox; + m_fontComboBox->setCurrentFont(m_value.family()); - auto sizeValidator = new QIntValidator(m_ui.sizeComboBox); + m_sizeComboBox = new QComboBox; + m_sizeComboBox->setEditable(true); + auto sizeValidator = new QIntValidator(m_sizeComboBox); sizeValidator->setBottom(0); - m_ui.sizeComboBox->setValidator(sizeValidator); + m_sizeComboBox->setValidator(sizeValidator); + + m_copyButton = new QPushButton(tr("Copy...")); + + m_deleteButton = new QPushButton(tr("Delete")); + m_deleteButton->setEnabled(false); + + auto importButton = new QPushButton(tr("Import")); + auto exportButton = new QPushButton(tr("Export")); + + m_schemeComboBox = new QComboBox; + m_schemeComboBox->setModel(&m_schemeListModel); + m_schemeComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + + m_schemeEdit = new ColorSchemeEdit; + m_schemeEdit->setFormatDescriptions(fd); + m_schemeEdit->setBaseFont(m_value.font()); + m_schemeEdit->setColorScheme(m_value.colorScheme()); + + using namespace Layouting; - connect(m_ui.fontComboBox, &QFontComboBox::currentFontChanged, + Column { + Group { + title(tr("Font")), + Column { + Row { + tr("Family:"), m_fontComboBox, Space(20), + tr("Size:"), m_sizeComboBox, Space(20), + tr("Zoom:"), m_zoomSpinBox, st + }, + m_antialias + } + }, + Group { + title(tr("Color Scheme for Theme \"%1\"") + .arg(Utils::creatorTheme()->displayName())), + Column { + Row { m_schemeComboBox, m_copyButton, m_deleteButton, importButton, exportButton }, + m_schemeEdit + } + } + + }.attachTo(this); + + connect(m_fontComboBox, &QFontComboBox::currentFontChanged, this, &FontSettingsPageWidget::fontSelected); - connect(m_ui.sizeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), + connect(m_sizeComboBox, &QComboBox::currentIndexChanged, this, &FontSettingsPageWidget::fontSizeSelected); - connect(m_ui.zoomSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), + connect(m_zoomSpinBox, &QSpinBox::valueChanged, this, &FontSettingsPageWidget::fontZoomChanged); - connect(m_ui.antialias, &QCheckBox::toggled, + connect(m_antialias, &QCheckBox::toggled, this, &FontSettingsPageWidget::antialiasChanged); - connect(m_ui.schemeComboBox, - QOverload<int>::of(&QComboBox::currentIndexChanged), + connect(m_schemeComboBox, &QComboBox::currentIndexChanged, this, &FontSettingsPageWidget::colorSchemeSelected); - connect(m_ui.copyButton, &QPushButton::clicked, + connect(m_copyButton, &QPushButton::clicked, this, &FontSettingsPageWidget::openCopyColorSchemeDialog); - connect(m_ui.schemeEdit, &ColorSchemeEdit::copyScheme, + connect(m_schemeEdit, &ColorSchemeEdit::copyScheme, this, &FontSettingsPageWidget::openCopyColorSchemeDialog); - connect(m_ui.deleteButton, &QPushButton::clicked, + connect(m_deleteButton, &QPushButton::clicked, this, &FontSettingsPageWidget::confirmDeleteColorScheme); - connect(m_ui.importButton, &QPushButton::clicked, + connect(importButton, &QPushButton::clicked, this, &FontSettingsPageWidget::importScheme); - connect(m_ui.exportButton, &QPushButton::clicked, + connect(exportButton, &QPushButton::clicked, this, &FontSettingsPageWidget::exportScheme); updatePointSizes(); @@ -186,28 +222,36 @@ public: void refreshColorSchemeList(); FontSettingsPage *q; - Ui::FontSettingsPage m_ui; bool m_refreshingSchemeList = false; FontSettings &m_value; FontSettings m_lastValue; SchemeListModel m_schemeListModel; FormatDescriptions m_descriptions; + + QCheckBox *m_antialias; + QSpinBox *m_zoomSpinBox; + QFontComboBox *m_fontComboBox; + QComboBox *m_sizeComboBox; + QComboBox *m_schemeComboBox; + ColorSchemeEdit *m_schemeEdit; + QPushButton *m_deleteButton; + QPushButton *m_copyButton; }; } // namespace Internal -static Utils::FilePath customStylesPath() +static FilePath customStylesPath() { return Core::ICore::userResourcePath("styles"); } -static Utils::FilePath createColorSchemeFileName(const QString &pattern) +static FilePath createColorSchemeFileName(const QString &pattern) { - const Utils::FilePath stylesPath = customStylesPath(); + const FilePath stylesPath = customStylesPath(); // Find an available file name int i = 1; - Utils::FilePath filePath; + FilePath filePath; do { filePath = stylesPath.pathAppended(pattern.arg((i == 1) ? QString() : QString::number(i))); ++i; @@ -370,20 +414,20 @@ bool FormatDescription::showControl(FormatDescription::ShowControls showControl) return m_showControls & showControl; } +namespace Internal { + void FontSettingsPageWidget::fontSelected(const QFont &font) { m_value.setFamily(font.family()); - m_ui.schemeEdit->setBaseFont(font); + m_schemeEdit->setBaseFont(font); updatePointSizes(); } -namespace Internal { - void FontSettingsPageWidget::updatePointSizes() { // Update point sizes const int oldSize = m_value.fontSize(); - m_ui.sizeComboBox->clear(); + m_sizeComboBox->clear(); const QList<int> sizeLst = pointSizesForSelectedFont(); int idx = -1; int i = 0; @@ -391,18 +435,18 @@ void FontSettingsPageWidget::updatePointSizes() if (idx == -1 && sizeLst.at(i) >= oldSize) { idx = i; if (sizeLst.at(i) != oldSize) - m_ui.sizeComboBox->addItem(QString::number(oldSize)); + m_sizeComboBox->addItem(QString::number(oldSize)); } - m_ui.sizeComboBox->addItem(QString::number(sizeLst.at(i))); + m_sizeComboBox->addItem(QString::number(sizeLst.at(i))); } if (idx != -1) - m_ui.sizeComboBox->setCurrentIndex(idx); + m_sizeComboBox->setCurrentIndex(idx); } QList<int> FontSettingsPageWidget::pointSizesForSelectedFont() const { QFontDatabase db; - const QString familyName = m_ui.fontComboBox->currentFont().family(); + const QString familyName = m_fontComboBox->currentFont().family(); QList<int> sizeLst = db.pointSizes(familyName); if (!sizeLst.isEmpty()) return sizeLst; @@ -418,24 +462,24 @@ QList<int> FontSettingsPageWidget::pointSizesForSelectedFont() const void FontSettingsPageWidget::fontSizeSelected(int index) { - const QString sizeString = m_ui.sizeComboBox->itemText(index); + const QString sizeString = m_sizeComboBox->itemText(index); bool ok = true; const int size = sizeString.toInt(&ok); if (ok) { m_value.setFontSize(size); - m_ui.schemeEdit->setBaseFont(m_value.font()); + m_schemeEdit->setBaseFont(m_value.font()); } } void FontSettingsPageWidget::fontZoomChanged() { - m_value.setFontZoom(m_ui.zoomSpinBox->value()); + m_value.setFontZoom(m_zoomSpinBox->value()); } void FontSettingsPageWidget::antialiasChanged() { - m_value.setAntialias(m_ui.antialias->isChecked()); - m_ui.schemeEdit->setBaseFont(m_value.font()); + m_value.setAntialias(m_antialias->isChecked()); + m_schemeEdit->setBaseFont(m_value.font()); } void FontSettingsPageWidget::colorSchemeSelected(int index) @@ -449,16 +493,16 @@ void FontSettingsPageWidget::colorSchemeSelected(int index) const ColorSchemeEntry &entry = m_schemeListModel.colorSchemeAt(index); readOnly = entry.readOnly; m_value.loadColorScheme(entry.fileName, m_descriptions); - m_ui.schemeEdit->setColorScheme(m_value.colorScheme()); + m_schemeEdit->setColorScheme(m_value.colorScheme()); } - m_ui.copyButton->setEnabled(index != -1); - m_ui.deleteButton->setEnabled(!readOnly); - m_ui.schemeEdit->setReadOnly(readOnly); + m_copyButton->setEnabled(index != -1); + m_deleteButton->setEnabled(!readOnly); + m_schemeEdit->setReadOnly(readOnly); } void FontSettingsPageWidget::openCopyColorSchemeDialog() { - QInputDialog *dialog = new QInputDialog(m_ui.copyButton->window()); + QInputDialog *dialog = new QInputDialog(m_copyButton->window()); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setInputMode(QInputDialog::TextInput); dialog->setWindowTitle(tr("Copy Color Scheme")); @@ -471,7 +515,7 @@ void FontSettingsPageWidget::openCopyColorSchemeDialog() void FontSettingsPageWidget::copyColorScheme(const QString &name) { - int index = m_ui.schemeComboBox->currentIndex(); + int index = m_schemeComboBox->currentIndex(); if (index == -1) return; @@ -479,14 +523,14 @@ void FontSettingsPageWidget::copyColorScheme(const QString &name) QString baseFileName = QFileInfo(entry.fileName).completeBaseName(); baseFileName += QLatin1String("_copy%1.xml"); - Utils::FilePath fileName = createColorSchemeFileName(baseFileName); + FilePath fileName = createColorSchemeFileName(baseFileName); if (!fileName.isEmpty()) { // Ask about saving any existing modifications maybeSaveColorScheme(); // Make sure we're copying the current version - m_value.setColorScheme(m_ui.schemeEdit->colorScheme()); + m_value.setColorScheme(m_schemeEdit->colorScheme()); ColorScheme scheme = m_value.colorScheme(); scheme.setDisplayName(name); @@ -499,7 +543,7 @@ void FontSettingsPageWidget::copyColorScheme(const QString &name) void FontSettingsPageWidget::confirmDeleteColorScheme() { - const int index = m_ui.schemeComboBox->currentIndex(); + const int index = m_schemeComboBox->currentIndex(); if (index == -1) return; @@ -511,7 +555,7 @@ void FontSettingsPageWidget::confirmDeleteColorScheme() tr("Delete Color Scheme"), tr("Are you sure you want to delete this color scheme permanently?"), QMessageBox::Discard | QMessageBox::Cancel, - m_ui.deleteButton->window()); + m_deleteButton->window()); // Change the text and role of the discard button auto deleteButton = static_cast<QPushButton*>(messageBox->button(QMessageBox::Discard)); @@ -526,7 +570,7 @@ void FontSettingsPageWidget::confirmDeleteColorScheme() void FontSettingsPageWidget::deleteColorScheme() { - const int index = m_ui.schemeComboBox->currentIndex(); + const int index = m_schemeComboBox->currentIndex(); QTC_ASSERT(index != -1, return); const ColorSchemeEntry &entry = m_schemeListModel.colorSchemeAt(index); @@ -538,7 +582,7 @@ void FontSettingsPageWidget::deleteColorScheme() void FontSettingsPageWidget::importScheme() { - const Utils::FilePath importedFile + const FilePath importedFile = Utils::FileUtils::getOpenFilePath(this, tr("Import Color Scheme"), {}, @@ -550,7 +594,7 @@ void FontSettingsPageWidget::importScheme() // Ask about saving any existing modifications maybeSaveColorScheme(); - QInputDialog *dialog = new QInputDialog(m_ui.copyButton->window()); + QInputDialog *dialog = new QInputDialog(m_copyButton->window()); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setInputMode(QInputDialog::TextInput); dialog->setWindowTitle(tr("Import Color Scheme")); @@ -581,16 +625,16 @@ void FontSettingsPageWidget::importScheme() void FontSettingsPageWidget::exportScheme() { - int index = m_ui.schemeComboBox->currentIndex(); + int index = m_schemeComboBox->currentIndex(); if (index == -1) return; const ColorSchemeEntry &entry = m_schemeListModel.colorSchemeAt(index); - const Utils::FilePath filePath + const FilePath filePath = Utils::FileUtils::getSaveFilePath(this, tr("Export Color Scheme"), - Utils::FilePath::fromString(entry.fileName), + FilePath::fromString(entry.fileName), tr("Color scheme (*.xml);;All files (*)")); if (!filePath.isEmpty()) @@ -599,16 +643,16 @@ void FontSettingsPageWidget::exportScheme() void FontSettingsPageWidget::maybeSaveColorScheme() { - if (m_value.colorScheme() == m_ui.schemeEdit->colorScheme()) + if (m_value.colorScheme() == m_schemeEdit->colorScheme()) return; QMessageBox messageBox(QMessageBox::Warning, tr("Color Scheme Changed"), tr("The color scheme \"%1\" was modified, do you want to save the changes?") - .arg(m_ui.schemeEdit->colorScheme().displayName()), + .arg(m_schemeEdit->colorScheme().displayName()), QMessageBox::Discard | QMessageBox::Save, - m_ui.schemeComboBox->window()); + m_schemeComboBox->window()); // Change the text of the discard button auto discardButton = static_cast<QPushButton*>(messageBox.button(QMessageBox::Discard)); @@ -617,7 +661,7 @@ void FontSettingsPageWidget::maybeSaveColorScheme() messageBox.setDefaultButton(QMessageBox::Save); if (messageBox.exec() == QMessageBox::Save) { - const ColorScheme &scheme = m_ui.schemeEdit->colorScheme(); + const ColorScheme &scheme = m_schemeEdit->colorScheme(); scheme.save(m_value.colorSchemeFileName(), Core::ICore::dialogParent()); } } @@ -626,59 +670,55 @@ void FontSettingsPageWidget::refreshColorSchemeList() { QList<ColorSchemeEntry> colorSchemes; - QDir styleDir(Core::ICore::resourcePath("styles").toDir()); - styleDir.setNameFilters(QStringList() << QLatin1String("*.xml")); - styleDir.setFilter(QDir::Files); + const FilePath styleDir = Core::ICore::resourcePath("styles"); - int selected = 0; + FilePaths schemeList = styleDir.dirEntries(FileFilter({"*.xml"}, QDir::Files)); + const FilePath defaultScheme = FilePath::fromString(FontSettings::defaultSchemeFileName()); - QStringList schemeList = styleDir.entryList(); - QString defaultScheme = Utils::FilePath::fromString(FontSettings::defaultSchemeFileName()).fileName(); if (schemeList.removeAll(defaultScheme)) schemeList.prepend(defaultScheme); - for (const QString &file : qAsConst(schemeList)) { - const QString fileName = styleDir.absoluteFilePath(file); - if (m_value.colorSchemeFileName() == fileName) + + int selected = 0; + + for (const FilePath &file : qAsConst(schemeList)) { + if (FilePath::fromString(m_value.colorSchemeFileName()) == file) selected = colorSchemes.size(); - colorSchemes.append(ColorSchemeEntry(fileName, true)); + colorSchemes.append(ColorSchemeEntry(file.toString(), true)); } if (colorSchemes.isEmpty()) - qWarning() << "Warning: no color schemes found in path:" << styleDir.path(); - - styleDir.setPath(customStylesPath().path()); + qWarning() << "Warning: no color schemes found in path:" << styleDir.toUserOutput(); - const QStringList files = styleDir.entryList(); - for (const QString &file : files) { - const QString fileName = styleDir.absoluteFilePath(file); - if (m_value.colorSchemeFileName() == fileName) + const FilePaths files = customStylesPath().dirEntries(FileFilter({"*.xml"}, QDir::Files)); + for (const FilePath &file : files) { + if (FilePath::fromString(m_value.colorSchemeFileName()) == file) selected = colorSchemes.size(); - colorSchemes.append(ColorSchemeEntry(fileName, false)); + colorSchemes.append(ColorSchemeEntry(file.toString(), false)); } m_refreshingSchemeList = true; m_schemeListModel.setColorSchemes(colorSchemes); - m_ui.schemeComboBox->setCurrentIndex(selected); + m_schemeComboBox->setCurrentIndex(selected); m_refreshingSchemeList = false; } void FontSettingsPageWidget::apply() { - if (m_value.colorScheme() != m_ui.schemeEdit->colorScheme()) { + if (m_value.colorScheme() != m_schemeEdit->colorScheme()) { // Update the scheme and save it under the name it already has - m_value.setColorScheme(m_ui.schemeEdit->colorScheme()); + m_value.setColorScheme(m_schemeEdit->colorScheme()); const ColorScheme &scheme = m_value.colorScheme(); scheme.save(m_value.colorSchemeFileName(), Core::ICore::dialogParent()); } bool ok; - int fontSize = m_ui.sizeComboBox->currentText().toInt(&ok); + int fontSize = m_sizeComboBox->currentText().toInt(&ok); if (ok && m_value.fontSize() != fontSize) { m_value.setFontSize(fontSize); - m_ui.schemeEdit->setBaseFont(m_value.font()); + m_schemeEdit->setBaseFont(m_value.font()); } - int index = m_ui.schemeComboBox->currentIndex(); + int index = m_schemeComboBox->currentIndex(); if (index != -1) { const ColorSchemeEntry &entry = m_schemeListModel.colorSchemeAt(index); if (entry.fileName != m_value.colorSchemeFileName()) @@ -725,7 +765,7 @@ FontSettingsPage::FontSettingsPage(FontSettings *fontSettings, const FormatDescr void FontSettingsPage::setFontZoom(int zoom) { if (m_widget) - static_cast<FontSettingsPageWidget *>(m_widget.data())->m_ui.zoomSpinBox->setValue(zoom); + static_cast<FontSettingsPageWidget *>(m_widget.data())->m_zoomSpinBox->setValue(zoom); } } // TextEditor |