Moved editing of the color scheme into a separate dialog

In preparation of being able to select from multiple color schemes.
This commit is contained in:
Thorbjørn Lindeijer
2009-06-18 17:35:46 +02:00
parent cc730442d6
commit 0e70a1e85e
9 changed files with 631 additions and 332 deletions

View File

@@ -28,6 +28,8 @@
**************************************************************************/
#include "fontsettingspage.h"
#include "editcolorschemedialog.h"
#include "fontsettings.h"
#include "texteditorconstants.h"
#include "ui_fontsettingspage.h"
@@ -38,7 +40,6 @@
#include <QtCore/QSettings>
#include <QtCore/QTimer>
#include <QtGui/QCheckBox>
#include <QtGui/QColorDialog>
#include <QtGui/QComboBox>
#include <QtGui/QFontDatabase>
#include <QtGui/QListWidget>
@@ -48,16 +49,6 @@
#include <QtGui/QTextEdit>
#include <QtGui/QToolButton>
static inline QString colorButtonStyleSheet(const QColor &bgColor)
{
if (bgColor.isValid()) {
QString rc = QLatin1String("border: 2px solid black; border-radius: 2px; background:");
rc += bgColor.name();
return rc;
}
return QLatin1String("border: 2px dotted black; border-radius: 2px;");
}
namespace TextEditor {
namespace Internal {
@@ -78,7 +69,6 @@ public:
TextEditor::FormatDescriptions m_descriptions;
FontSettings m_value;
FontSettings m_lastValue;
int m_curItem;
Ui::FontSettingsPage ui;
};
@@ -90,8 +80,7 @@ FontSettingsPagePrivate::FontSettingsPagePrivate(const TextEditor::FormatDescrip
m_settingsGroup(Core::Utils::settingsKey(category)),
m_category(category),
m_trCategory(trCategory),
m_descriptions(fd),
m_curItem(-1)
m_descriptions(fd)
{
bool settingsFound = false;
if (const QSettings *settings = Core::ICore::instance()->settings())
@@ -231,10 +220,9 @@ QWidget *FontSettingsPage::createPage(QWidget *parent)
QWidget *w = new QWidget(parent);
d_ptr->ui.setupUi(w);
d_ptr->ui.itemListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
foreach (const FormatDescription &d, d_ptr->m_descriptions)
d_ptr->ui.itemListWidget->addItem(d.trName());
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);
QFontDatabase db;
const QStringList families = db.families();
@@ -245,170 +233,13 @@ 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.sizeComboBox, SIGNAL(activated(int)), this, SLOT(updatePreview()));
connect(d_ptr->ui.antialias, SIGNAL(toggled(bool)), this, SLOT(updatePreview()));
connect(d_ptr->ui.itemListWidget, SIGNAL(itemSelectionChanged()),
this, SLOT(itemChanged()));
connect(d_ptr->ui.foregroundToolButton, SIGNAL(clicked()),
this, SLOT(changeForeColor()));
connect(d_ptr->ui.backgroundToolButton, SIGNAL(clicked()),
this, SLOT(changeBackColor()));
connect(d_ptr->ui.eraseBackgroundToolButton, SIGNAL(clicked()),
this, SLOT(eraseBackColor()));
connect(d_ptr->ui.boldCheckBox, SIGNAL(toggled(bool)), this, SLOT(checkCheckBoxes()));
connect(d_ptr->ui.italicCheckBox, SIGNAL(toggled(bool)), this, SLOT(checkCheckBoxes()));
if (!d_ptr->m_descriptions.empty())
d_ptr->ui.itemListWidget->setCurrentRow(0);
connect(d_ptr->ui.editButton, SIGNAL(clicked()), this, SLOT(editColorScheme()));
updatePointSizes();
d_ptr->m_lastValue = d_ptr->m_value;
return w;
}
void FontSettingsPage::itemChanged()
{
QListWidgetItem *item = d_ptr->ui.itemListWidget->currentItem();
if (!item)
return;
const int numFormats = d_ptr->m_descriptions.size();
for (int i = 0; i < numFormats; i++) {
if (d_ptr->m_descriptions[i].trName() == item->text()) {
d_ptr->m_curItem = i;
const Format &format = d_ptr->m_value.formatFor(d_ptr->m_descriptions[i].name());
d_ptr->ui.foregroundToolButton->setStyleSheet(colorButtonStyleSheet(format.foreground()));
d_ptr->ui.backgroundToolButton->setStyleSheet(colorButtonStyleSheet(format.background()));
d_ptr->ui.eraseBackgroundToolButton->setEnabled(i > 0 && format.background().isValid());
const bool boldBlocked = d_ptr->ui.boldCheckBox->blockSignals(true);
d_ptr->ui.boldCheckBox->setChecked(format.bold());
d_ptr->ui.boldCheckBox->blockSignals(boldBlocked);
const bool italicBlocked = d_ptr->ui.italicCheckBox->blockSignals(true);
d_ptr->ui.italicCheckBox->setChecked(format.italic());
d_ptr->ui.italicCheckBox->blockSignals(italicBlocked);
updatePreview();
break;
}
}
}
void FontSettingsPage::changeForeColor()
{
if (d_ptr->m_curItem == -1)
return;
QColor color = d_ptr->m_value.formatFor(d_ptr->m_descriptions[d_ptr->m_curItem].name()).foreground();
const QColor newColor = QColorDialog::getColor(color, d_ptr->ui.boldCheckBox->window());
if (!newColor.isValid())
return;
QPalette p = d_ptr->ui.foregroundToolButton->palette();
p.setColor(QPalette::Active, QPalette::Button, newColor);
d_ptr->ui.foregroundToolButton->setStyleSheet(colorButtonStyleSheet(newColor));
const int numFormats = d_ptr->m_descriptions.size();
for (int i = 0; i < numFormats; i++) {
QList<QListWidgetItem*> items = d_ptr->ui.itemListWidget->findItems(d_ptr->m_descriptions[i].trName(), Qt::MatchExactly);
if (!items.isEmpty() && items.first()->isSelected())
d_ptr->m_value.formatFor(d_ptr->m_descriptions[i].name()).setForeground(newColor);
}
updatePreview();
}
void FontSettingsPage::changeBackColor()
{
if (d_ptr->m_curItem == -1)
return;
QColor color = d_ptr->m_value.formatFor(d_ptr->m_descriptions[d_ptr->m_curItem].name()).background();
const QColor newColor = QColorDialog::getColor(color, d_ptr->ui.boldCheckBox->window());
if (!newColor.isValid())
return;
d_ptr->ui.backgroundToolButton->setStyleSheet(colorButtonStyleSheet(newColor));
d_ptr->ui.eraseBackgroundToolButton->setEnabled(true);
const int numFormats = d_ptr->m_descriptions.size();
for (int i = 0; i < numFormats; i++) {
QList<QListWidgetItem*> items = d_ptr->ui.itemListWidget->findItems(d_ptr->m_descriptions[i].trName(), Qt::MatchExactly);
if (!items.isEmpty() && items.first()->isSelected())
d_ptr->m_value.formatFor(d_ptr->m_descriptions[i].name()).setBackground(newColor);
}
updatePreview();
}
void FontSettingsPage::eraseBackColor()
{
if (d_ptr->m_curItem == -1)
return;
QColor newColor;
d_ptr->ui.backgroundToolButton->setStyleSheet(colorButtonStyleSheet(newColor));
const int numFormats = d_ptr->m_descriptions.size();
for (int i = 0; i < numFormats; i++) {
QList<QListWidgetItem*> items = d_ptr->ui.itemListWidget->findItems(d_ptr->m_descriptions[i].trName(), Qt::MatchExactly);
if (!items.isEmpty() && items.first()->isSelected())
d_ptr->m_value.formatFor(d_ptr->m_descriptions[i].name()).setBackground(newColor);
}
d_ptr->ui.eraseBackgroundToolButton->setEnabled(false);
updatePreview();
}
void FontSettingsPage::checkCheckBoxes()
{
if (d_ptr->m_curItem == -1)
return;
const int numFormats = d_ptr->m_descriptions.size();
for (int i = 0; i < numFormats; i++) {
QList<QListWidgetItem*> items = d_ptr->ui.itemListWidget->findItems(d_ptr->m_descriptions[i].trName(), Qt::MatchExactly);
if (!items.isEmpty() && items.first()->isSelected()) {
d_ptr->m_value.formatFor(d_ptr->m_descriptions[i].name()).setBold(d_ptr->ui.boldCheckBox->isChecked());
d_ptr->m_value.formatFor(d_ptr->m_descriptions[i].name()).setItalic(d_ptr->ui.italicCheckBox->isChecked());
}
}
updatePreview();
}
void FontSettingsPage::updatePreview()
{
if (d_ptr->m_curItem == -1)
return;
const Format &currentFormat = d_ptr->m_value.formatFor(d_ptr->m_descriptions[d_ptr->m_curItem].name());
const Format &baseFormat = d_ptr->m_value.formatFor(QLatin1String("Text"));
QPalette pal = QApplication::palette();
if (baseFormat.foreground().isValid()) {
pal.setColor(QPalette::Text, baseFormat.foreground());
pal.setColor(QPalette::Foreground, baseFormat.foreground());
}
if (baseFormat.background().isValid())
pal.setColor(QPalette::Base, baseFormat.background());
d_ptr->ui.previewTextEdit->setPalette(pal);
QTextCharFormat format;
if (currentFormat.foreground().isValid())
format.setForeground(QBrush(currentFormat.foreground()));
if (currentFormat.background().isValid())
format.setBackground(QBrush(currentFormat.background()));
format.setFontFamily(d_ptr->ui.familyComboBox->currentText());
format.setFontStyleStrategy(d_ptr->ui.antialias->isChecked() ? QFont::PreferAntialias : QFont::NoAntialias);
bool ok;
int size = d_ptr->ui.sizeComboBox->currentText().toInt(&ok);
if (!ok) {
size = QFont().pointSize();
}
format.setFontPointSize(size);
format.setFontItalic(currentFormat.italic());
if (currentFormat.bold())
format.setFontWeight(QFont::Bold);
d_ptr->ui.previewTextEdit->setCurrentCharFormat(format);
d_ptr->ui.previewTextEdit->setPlainText(tr("\n\tThis is only an example."));
}
void FontSettingsPage::updatePointSizes()
{
const int oldSize = d_ptr->m_value.fontSize();
@@ -424,14 +255,32 @@ void FontSettingsPage::updatePointSizes()
const QList<int> sizeLst = db.pointSizes(d_ptr->ui.familyComboBox->currentText());
int idx = 0;
int i = 0;
for (; i<sizeLst.count(); ++i) {
for (; i < sizeLst.count(); ++i) {
if (idx == 0 && sizeLst.at(i) >= oldSize)
idx = i;
d_ptr->ui.sizeComboBox->addItem(QString::number(sizeLst.at(i)));
}
if (d_ptr->ui.sizeComboBox->count())
d_ptr->ui.sizeComboBox->setCurrentIndex(idx);
updatePreview();
}
void FontSettingsPage::editColorScheme()
{
d_ptr->m_value.setFamily(d_ptr->ui.familyComboBox->currentText());
d_ptr->m_value.setAntialias(d_ptr->ui.antialias->isChecked());
bool ok = true;
const int size = d_ptr->ui.sizeComboBox->currentText().toInt(&ok);
if (ok)
d_ptr->m_value.setFontSize(size);
EditColorSchemeDialog dialog(d_ptr->m_descriptions,
d_ptr->m_value,
d_ptr->m_value.colorScheme(),
d_ptr->ui.editButton->window());
if (dialog.exec() == QDialog::Accepted)
d_ptr->m_value.setColorScheme(dialog.colorScheme());
}
void FontSettingsPage::delayedChange()