aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-07-16 17:16:55 +0200
committerThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-07-17 17:28:56 +0200
commit55d40713a65942a7f4dcb9a46bf81648f9d1fddb (patch)
treef93895f074d41ee5d7fc9648dfa57c7cbb86e5b8
parent7f5eff2c5fff44c804511cde3894dca2e0013e2a (diff)
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.
-rw-r--r--src/plugins/texteditor/fontsettingspage.cpp146
-rw-r--r--src/plugins/texteditor/fontsettingspage.h4
-rw-r--r--src/plugins/texteditor/fontsettingspage.ui92
3 files changed, 153 insertions, 89 deletions
diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp
index 6698230b874..b6f371594e6 100644
--- a/src/plugins/texteditor/fontsettingspage.cpp
+++ b/src/plugins/texteditor/fontsettingspage.cpp
@@ -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);
}
diff --git a/src/plugins/texteditor/fontsettingspage.h b/src/plugins/texteditor/fontsettingspage.h
index af009d75d44..5ffc34218ce 100644
--- a/src/plugins/texteditor/fontsettingspage.h
+++ b/src/plugins/texteditor/fontsettingspage.h
@@ -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;
diff --git a/src/plugins/texteditor/fontsettingspage.ui b/src/plugins/texteditor/fontsettingspage.ui
index d6e249bd930..2ff5268962b 100644
--- a/src/plugins/texteditor/fontsettingspage.ui
+++ b/src/plugins/texteditor/fontsettingspage.ui
@@ -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>