Font settings: Add import and export functions

Fixed: QTCREATORBUG-6833

Change-Id: I23eec56aeb53ed10dd7f04c071318f5cc335b14e
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Artem Sokolovskii
2021-09-10 14:59:27 +02:00
parent c572ca0e87
commit c941f7d0f5
3 changed files with 96 additions and 17 deletions

View File

@@ -129,7 +129,7 @@ static bool removeRecursivelyLocal(const FilePath &filePath, QString *error)
\code \code
QString error; QString error;
book ok = Utils::FileUtils::copyRecursively("/foo/bar", "/foo/baz", &error); bool ok = Utils::FileUtils::copyRecursively("/foo/bar", "/foo/baz", &error);
if (!ok) if (!ok)
qDebug() << error; qDebug() << error;
\endcode \endcode

View File

@@ -31,6 +31,7 @@
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/filepath.h>
#include <utils/stringutils.h> #include <utils/stringutils.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/theme/theme.h> #include <utils/theme/theme.h>
@@ -154,6 +155,10 @@ public:
this, &FontSettingsPageWidget::openCopyColorSchemeDialog); this, &FontSettingsPageWidget::openCopyColorSchemeDialog);
connect(m_ui.deleteButton, &QPushButton::clicked, connect(m_ui.deleteButton, &QPushButton::clicked,
this, &FontSettingsPageWidget::confirmDeleteColorScheme); this, &FontSettingsPageWidget::confirmDeleteColorScheme);
connect(m_ui.importButton, &QPushButton::clicked,
this, &FontSettingsPageWidget::importScheme);
connect(m_ui.exportButton, &QPushButton::clicked,
this, &FontSettingsPageWidget::exportScheme);
updatePointSizes(); updatePointSizes();
refreshColorSchemeList(); refreshColorSchemeList();
@@ -171,6 +176,8 @@ public:
void openCopyColorSchemeDialog(); void openCopyColorSchemeDialog();
void copyColorScheme(const QString &name); void copyColorScheme(const QString &name);
void confirmDeleteColorScheme(); void confirmDeleteColorScheme();
void importScheme();
void exportScheme();
void deleteColorScheme(); void deleteColorScheme();
void maybeSaveColorScheme(); void maybeSaveColorScheme();
@@ -471,7 +478,7 @@ void FontSettingsPageWidget::copyColorScheme(const QString &name)
Utils::FilePath fileName = createColorSchemeFileName(baseFileName); Utils::FilePath fileName = createColorSchemeFileName(baseFileName);
if (!fileName.isEmpty()) { if (!fileName.isEmpty()) {
// Ask about saving any existing modifactions // Ask about saving any existing modifications
maybeSaveColorScheme(); maybeSaveColorScheme();
// Make sure we're copying the current version // Make sure we're copying the current version
@@ -525,17 +532,73 @@ void FontSettingsPageWidget::deleteColorScheme()
m_schemeListModel.removeColorScheme(index); m_schemeListModel.removeColorScheme(index);
} }
void FontSettingsPageWidget::importScheme()
{
const Utils::FilePath importedFile
= Utils::FileUtils::getOpenFilePath(this,
tr("Import Color Scheme"),
{},
tr("Color scheme (*.xml);;All files (*)"));
if (importedFile.isEmpty())
return;
Utils::FilePath fileName = createColorSchemeFileName(importedFile.baseName() + "%1."
+ importedFile.suffix());
// Ask about saving any existing modifications
maybeSaveColorScheme();
QInputDialog *dialog = new QInputDialog(m_ui.copyButton->window());
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->setInputMode(QInputDialog::TextInput);
dialog->setWindowTitle(tr("Import Color Scheme"));
dialog->setLabelText(tr("Color scheme name:"));
dialog->setTextValue(importedFile.baseName());
connect(dialog, &QInputDialog::textValueSelected, this, [this, fileName](const QString &name) {
m_value.setColorScheme(m_ui.schemeEdit->colorScheme());
ColorScheme scheme = m_value.colorScheme();
scheme.setDisplayName(name);
if (scheme.save(fileName.path(), Core::ICore::dialogParent()))
m_value.setColorSchemeFileName(fileName.path());
refreshColorSchemeList();
});
dialog->open();
}
void FontSettingsPageWidget::exportScheme()
{
int index = m_ui.schemeComboBox->currentIndex();
if (index == -1)
return;
const ColorSchemeEntry &entry = m_schemeListModel.colorSchemeAt(index);
const Utils::FilePath filePath
= Utils::FileUtils::getSaveFilePath(this,
tr("Export Color Scheme"),
Utils::FilePath::fromString(entry.fileName),
tr("Color scheme (*.xml);;All files (*)"));
if (!filePath.isEmpty())
m_value.colorScheme().save(filePath.toString(), Core::ICore::dialogParent());
}
void FontSettingsPageWidget::maybeSaveColorScheme() void FontSettingsPageWidget::maybeSaveColorScheme()
{ {
if (m_value.colorScheme() == m_ui.schemeEdit->colorScheme()) if (m_value.colorScheme() == m_ui.schemeEdit->colorScheme())
return; return;
QMessageBox messageBox(QMessageBox::Warning, QMessageBox
tr("Color Scheme Changed"), messageBox(QMessageBox::Warning,
tr("The color scheme \"%1\" was modified, do you want to save the changes?") tr("Color Scheme Changed"),
.arg(m_ui.schemeEdit->colorScheme().displayName()), tr("The color scheme \"%1\" was modified, do you want to save the changes?")
QMessageBox::Discard | QMessageBox::Save, .arg(m_ui.schemeEdit->colorScheme().displayName()),
m_ui.schemeComboBox->window()); QMessageBox::Discard | QMessageBox::Save,
m_ui.schemeComboBox->window());
// Change the text of the discard button // Change the text of the discard button
auto discardButton = static_cast<QPushButton*>(messageBox.button(QMessageBox::Discard)); auto discardButton = static_cast<QPushButton*>(messageBox.button(QMessageBox::Discard));

View File

@@ -146,6 +146,13 @@
<string>Color Scheme</string> <string>Color Scheme</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="5">
<widget class="QPushButton" name="exportButton">
<property name="text">
<string>Export</string>
</property>
</widget>
</item>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QComboBox" name="schemeComboBox"> <widget class="QComboBox" name="schemeComboBox">
<property name="sizePolicy"> <property name="sizePolicy">
@@ -156,14 +163,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="3">
<widget class="QPushButton" name="copyButton">
<property name="text">
<string>Copy...</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="deleteButton"> <widget class="QPushButton" name="deleteButton">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@@ -173,7 +173,21 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0" colspan="3"> <item row="0" column="2">
<widget class="QPushButton" name="copyButton">
<property name="text">
<string>Copy...</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="importButton">
<property name="text">
<string>Import</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="6">
<widget class="TextEditor::Internal::ColorSchemeEdit" name="schemeEdit" native="true"> <widget class="TextEditor::Internal::ColorSchemeEdit" name="schemeEdit" native="true">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding"> <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
@@ -204,6 +218,8 @@
<tabstop>schemeComboBox</tabstop> <tabstop>schemeComboBox</tabstop>
<tabstop>copyButton</tabstop> <tabstop>copyButton</tabstop>
<tabstop>deleteButton</tabstop> <tabstop>deleteButton</tabstop>
<tabstop>importButton</tabstop>
<tabstop>exportButton</tabstop>
</tabstops> </tabstops>
<resources/> <resources/>
<connections/> <connections/>