Commit 55d40713 authored by Thorbjørn Lindeijer's avatar Thorbjørn Lindeijer
Browse files

Display the list of color schemes in a combo box

This is to make some room for embedding the color scheme editing back in
the options dialog.
parent 7f5eff2c
......@@ -55,6 +55,61 @@
namespace TextEditor {
namespace Internal {
struct ColorSchemeEntry
{
ColorSchemeEntry(const QString &fileName,
bool readOnly):
fileName(fileName),
name(ColorScheme::readNameOfScheme(fileName)),
readOnly(readOnly)
{ }
QString fileName;
QString name;
bool readOnly;
};
class SchemeListModel : public QAbstractListModel
{
public:
SchemeListModel(QObject *parent = 0):
QAbstractListModel(parent)
{
}
int rowCount(const QModelIndex &parent) const
{ return parent.isValid() ? 0 : m_colorSchemes.size(); }
QVariant data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole)
return m_colorSchemes.at(index.row()).name;
return QVariant();
}
void removeColorScheme(int index)
{
beginRemoveRows(QModelIndex(), index, index);
m_colorSchemes.removeAt(index);
endRemoveRows();
}
void setColorSchemes(const QList<ColorSchemeEntry> &colorSchemes)
{
m_colorSchemes = colorSchemes;
reset();
}
const ColorSchemeEntry &colorSchemeAt(int index) const
{ return m_colorSchemes.at(index); }
private:
QList<ColorSchemeEntry> m_colorSchemes;
};
class FontSettingsPagePrivate
{
public:
......@@ -62,6 +117,7 @@ public:
const QString &name,
const QString &category,
const QString &trCategory);
~FontSettingsPagePrivate();
public:
const QString m_name;
......@@ -73,20 +129,12 @@ public:
FontSettings m_value;
FontSettings m_lastValue;
Ui::FontSettingsPage ui;
};
struct ColorSchemeEntry
{
QString fileName;
QString name;
bool readOnly;
SchemeListModel *m_schemeListModel;
};
} // namespace Internal
} // namespace TextEditor
Q_DECLARE_METATYPE(TextEditor::Internal::ColorSchemeEntry)
using namespace TextEditor;
using namespace TextEditor::Internal;
......@@ -129,7 +177,8 @@ FontSettingsPagePrivate::FontSettingsPagePrivate(const TextEditor::FormatDescrip
m_settingsGroup(Core::Utils::settingsKey(category)),
m_category(category),
m_trCategory(trCategory),
m_descriptions(fd)
m_descriptions(fd),
m_schemeListModel(new SchemeListModel)
{
bool settingsFound = false;
QSettings *settings = Core::ICore::instance()->settings();
......@@ -168,6 +217,11 @@ FontSettingsPagePrivate::FontSettingsPagePrivate(const TextEditor::FormatDescrip
m_lastValue = m_value;
}
FontSettingsPagePrivate::~FontSettingsPagePrivate()
{
delete m_schemeListModel;
}
// ------- FormatDescription
FormatDescription::FormatDescription(const QString &name, const QString &trName, const QColor &color) :
......@@ -282,10 +336,7 @@ QWidget *FontSettingsPage::createPage(QWidget *parent)
{
QWidget *w = new QWidget(parent);
d_ptr->ui.setupUi(w);
d_ptr->ui.schemeListWidget->addItem(tr("Default"));
d_ptr->ui.schemeListWidget->setCurrentIndex(d_ptr->ui.schemeListWidget->model()->index(0, 0));
d_ptr->ui.editButton->setEnabled(true);
d_ptr->ui.schemeComboBox->setModel(d_ptr->m_schemeListModel);
QFontDatabase db;
const QStringList families = db.families();
......@@ -296,8 +347,7 @@ QWidget *FontSettingsPage::createPage(QWidget *parent)
d_ptr->ui.antialias->setChecked(d_ptr->m_value.antialias());
connect(d_ptr->ui.familyComboBox, SIGNAL(activated(int)), this, SLOT(updatePointSizes()));
connect(d_ptr->ui.schemeListWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
this, SLOT(colorSchemeSelected(QListWidgetItem*)));
connect(d_ptr->ui.schemeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(colorSchemeSelected(int)));
connect(d_ptr->ui.cloneButton, SIGNAL(clicked()), this, SLOT(cloneColorScheme()));
connect(d_ptr->ui.editButton, SIGNAL(clicked()), this, SLOT(editColorScheme()));
connect(d_ptr->ui.deleteButton, SIGNAL(clicked()), this, SLOT(deleteColorScheme()));
......@@ -332,25 +382,25 @@ void FontSettingsPage::updatePointSizes()
d_ptr->ui.sizeComboBox->setCurrentIndex(idx);
}
void FontSettingsPage::colorSchemeSelected(QListWidgetItem *item)
void FontSettingsPage::colorSchemeSelected(int index)
{
bool modifiable = false;
if (item) {
const ColorSchemeEntry entry = item->data(Qt::UserRole).value<ColorSchemeEntry>();
if (index != -1) {
const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
modifiable = !entry.readOnly;
}
d_ptr->ui.cloneButton->setEnabled(item != 0);
d_ptr->ui.cloneButton->setEnabled(index != -1);
d_ptr->ui.deleteButton->setEnabled(modifiable);
d_ptr->ui.editButton->setEnabled(modifiable);
}
void FontSettingsPage::cloneColorScheme()
{
QListWidgetItem *item = d_ptr->ui.schemeListWidget->currentItem();
if (!item)
int index = d_ptr->ui.schemeComboBox->currentIndex();
if (index == -1)
return;
const ColorSchemeEntry entry = item->data(Qt::UserRole).value<ColorSchemeEntry>();
const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
// Load the currently selected color scheme
if (!d_ptr->m_value.loadColorScheme(entry.fileName, d_ptr->m_descriptions))
......@@ -372,11 +422,12 @@ void FontSettingsPage::cloneColorScheme()
void FontSettingsPage::deleteColorScheme()
{
QListWidgetItem *item = d_ptr->ui.schemeListWidget->currentItem();
if (!item)
int index = d_ptr->ui.schemeComboBox->currentIndex();
if (index == -1)
return;
const ColorSchemeEntry entry = item->data(Qt::UserRole).value<ColorSchemeEntry>();
const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
if (!entry.readOnly) {
int ret = QMessageBox::warning(d_ptr->ui.deleteButton->window(),
tr("Delete Color Scheme"),
......@@ -384,17 +435,18 @@ void FontSettingsPage::deleteColorScheme()
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
if (ret == QMessageBox::Yes && QFile::remove(entry.fileName))
refreshColorSchemeList();
d_ptr->m_schemeListModel->removeColorScheme(index);
}
}
void FontSettingsPage::editColorScheme()
{
QListWidgetItem *item = d_ptr->ui.schemeListWidget->currentItem();
if (!item)
int index = d_ptr->ui.schemeComboBox->currentIndex();
if (index == -1)
return;
const ColorSchemeEntry entry = item->data(Qt::UserRole).value<ColorSchemeEntry>();
const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
if (entry.readOnly)
return;
......@@ -421,21 +473,9 @@ void FontSettingsPage::editColorScheme()
}
}
void FontSettingsPage::addColorSchemeEntry(const QString &fileName, bool readOnly)
{
ColorSchemeEntry entry;
entry.fileName = fileName;
entry.name = ColorScheme::readNameOfScheme(fileName);
entry.readOnly = readOnly;
QListWidgetItem *item = new QListWidgetItem(entry.name);
item->setData(Qt::UserRole, QVariant::fromValue<ColorSchemeEntry>(entry));
d_ptr->ui.schemeListWidget->addItem(item);
}
void FontSettingsPage::refreshColorSchemeList()
{
d_ptr->ui.schemeListWidget->clear();
QList<ColorSchemeEntry> colorSchemes;
QString resourcePath = Core::ICore::instance()->resourcePath();
QDir styleDir(resourcePath + QLatin1String("/styles"));
......@@ -443,28 +483,25 @@ void FontSettingsPage::refreshColorSchemeList()
styleDir.setFilter(QDir::Files);
int selected = 0;
int count = 0;
foreach (const QString &file, styleDir.entryList()) {
const QString fileName = styleDir.absoluteFilePath(file);
addColorSchemeEntry(fileName, true);
if (d_ptr->m_value.colorSchemeFileName() == fileName)
selected = count;
++count;
selected = colorSchemes.size();
colorSchemes.append(ColorSchemeEntry(fileName, true));
}
styleDir.setPath(customStylesPath());
foreach (const QString &file, styleDir.entryList()) {
const QString fileName = styleDir.absoluteFilePath(file);
addColorSchemeEntry(fileName, false);
if (d_ptr->m_value.colorSchemeFileName() == fileName)
selected = count;
++count;
selected = colorSchemes.size();
colorSchemes.append(ColorSchemeEntry(fileName, false));
}
const QModelIndex s = d_ptr->ui.schemeListWidget->model()->index(selected, 0);
d_ptr->ui.schemeListWidget->setCurrentIndex(s);
d_ptr->m_schemeListModel->setColorSchemes(colorSchemes);
d_ptr->ui.schemeComboBox->setCurrentIndex(selected);
}
void FontSettingsPage::delayedChange()
......@@ -477,8 +514,9 @@ void FontSettingsPage::apply()
d_ptr->m_value.setFamily(d_ptr->ui.familyComboBox->currentText());
d_ptr->m_value.setAntialias(d_ptr->ui.antialias->isChecked());
if (QListWidgetItem *item = d_ptr->ui.schemeListWidget->currentItem()) {
const ColorSchemeEntry entry = item->data(Qt::UserRole).value<ColorSchemeEntry>();
int index = d_ptr->ui.schemeComboBox->currentIndex();
if (index != -1) {
const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
if (entry.fileName != d_ptr->m_value.colorSchemeFileName())
d_ptr->m_value.loadColorScheme(entry.fileName, d_ptr->m_descriptions);
}
......
......@@ -42,7 +42,6 @@
#include <QtCore/QVector>
QT_BEGIN_NAMESPACE
class QListWidgetItem;
class QWidget;
QT_END_NAMESPACE
......@@ -111,13 +110,12 @@ signals:
private slots:
void delayedChange();
void updatePointSizes();
void colorSchemeSelected(QListWidgetItem *item);
void colorSchemeSelected(int index);
void cloneColorScheme();
void deleteColorScheme();
void editColorScheme();
private:
void addColorSchemeEntry(const QString &fileName, bool readOnly);
void refreshColorSchemeList();
Internal::FontSettingsPagePrivate *d_ptr;
......
......@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>391</width>
<height>344</height>
<width>344</width>
<height>306</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
......@@ -107,25 +107,66 @@
<property name="title">
<string>Color Scheme</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="1">
<widget class="QPushButton" name="cloneButton">
<property name="text">
<string>Clone</string>
</property>
</widget>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QComboBox" name="schemeComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cloneButton">
<property name="text">
<string>Clone</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="deleteButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Delete</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="deleteButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Delete</string>
</property>
</widget>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="editButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Edit</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="4" column="1">
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
......@@ -138,19 +179,6 @@
</property>
</spacer>
</item>
<item row="0" column="0" rowspan="5">
<widget class="QListWidget" name="schemeListWidget"/>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="editButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Edit</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment