File indexing completed on 2024-04-28 05:48:40

0001 /*
0002    SPDX-FileCopyrightText: 2010 Marco Mentasti <marcomentasti@gmail.com>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-only
0005 */
0006 
0007 #include "outputstylewidget.h"
0008 
0009 #include <KSharedConfig>
0010 #include <QCheckBox>
0011 #include <QFont>
0012 #include <QFontDatabase>
0013 #include <QIcon>
0014 
0015 #include <KColorButton>
0016 #include <KColorScheme>
0017 #include <KConfig>
0018 #include <KConfigGroup>
0019 #include <KLocalizedString>
0020 
0021 OutputStyleWidget::OutputStyleWidget(QWidget *parent)
0022     : QTreeWidget(parent)
0023 {
0024     setColumnCount(7);
0025     setRootIsDecorated(false);
0026 
0027     QStringList headerLabels;
0028 
0029     headerLabels << i18nc("@title:column", "Context") << QString() << QString() << QString() << QString() << i18nc("@title:column", "Text Color")
0030                  << i18nc("@title:column", "Background Color");
0031 
0032     setHeaderLabels(headerLabels);
0033 
0034     headerItem()->setIcon(1, QIcon::fromTheme(QStringLiteral("format-text-bold")));
0035     headerItem()->setIcon(2, QIcon::fromTheme(QStringLiteral("format-text-italic")));
0036     headerItem()->setIcon(3, QIcon::fromTheme(QStringLiteral("format-text-underline")));
0037     headerItem()->setIcon(4, QIcon::fromTheme(QStringLiteral("format-text-strikethrough")));
0038 
0039     addContext(QStringLiteral("text"), i18nc("@item:intable", "Text"));
0040     addContext(QStringLiteral("number"), i18nc("@item:intable", "Number"));
0041     addContext(QStringLiteral("bool"), i18nc("@item:intable", "Bool"));
0042     addContext(QStringLiteral("datetime"), i18nc("@item:intable", "Date & Time"));
0043     addContext(QStringLiteral("null"), i18nc("@item:intable", "NULL"));
0044     addContext(QStringLiteral("blob"), i18nc("@item:intable", "BLOB"));
0045 
0046     for (int i = 0; i < columnCount(); ++i) {
0047         resizeColumnToContents(i);
0048     }
0049 
0050     updatePreviews();
0051 }
0052 
0053 OutputStyleWidget::~OutputStyleWidget()
0054 {
0055 }
0056 
0057 QTreeWidgetItem *OutputStyleWidget::addContext(const QString &key, const QString &name)
0058 {
0059     QTreeWidgetItem *item = new QTreeWidgetItem(this);
0060 
0061     item->setText(0, name);
0062     item->setData(0, Qt::UserRole, key);
0063 
0064     QCheckBox *boldCheckBox = new QCheckBox(this);
0065     QCheckBox *italicCheckBox = new QCheckBox(this);
0066     QCheckBox *underlineCheckBox = new QCheckBox(this);
0067     QCheckBox *strikeOutCheckBox = new QCheckBox(this);
0068     KColorButton *foregroundColorButton = new KColorButton(this);
0069     KColorButton *backgroundColorButton = new KColorButton(this);
0070 
0071     const KColorScheme scheme(QPalette::Active, KColorScheme::View);
0072 
0073     foregroundColorButton->setDefaultColor(scheme.foreground().color());
0074     backgroundColorButton->setDefaultColor(scheme.background().color());
0075 
0076     setItemWidget(item, 1, boldCheckBox);
0077     setItemWidget(item, 2, italicCheckBox);
0078     setItemWidget(item, 3, underlineCheckBox);
0079     setItemWidget(item, 4, strikeOutCheckBox);
0080     setItemWidget(item, 5, foregroundColorButton);
0081     setItemWidget(item, 6, backgroundColorButton);
0082 
0083     readConfig(item);
0084 
0085     connect(boldCheckBox, &QCheckBox::toggled, this, &OutputStyleWidget::slotChanged);
0086     connect(italicCheckBox, &QCheckBox::toggled, this, &OutputStyleWidget::slotChanged);
0087     connect(underlineCheckBox, &QCheckBox::toggled, this, &OutputStyleWidget::slotChanged);
0088     connect(strikeOutCheckBox, &QCheckBox::toggled, this, &OutputStyleWidget::slotChanged);
0089     connect(foregroundColorButton, &KColorButton::changed, this, &OutputStyleWidget::slotChanged);
0090     connect(backgroundColorButton, &KColorButton::changed, this, &OutputStyleWidget::slotChanged);
0091 
0092     return item;
0093 }
0094 
0095 void OutputStyleWidget::readConfig(QTreeWidgetItem *item)
0096 {
0097     KConfigGroup config(KSharedConfig::openConfig(), QStringLiteral("KateSQLPlugin"));
0098     KConfigGroup g = config.group("OutputCustomization").group(item->data(0, QLatin1String(Qt::UserRole).toString()));
0099 
0100     QCheckBox *boldCheckBox = static_cast<QCheckBox *>(itemWidget(item, 1));
0101     QCheckBox *italicCheckBox = static_cast<QCheckBox *>(itemWidget(item, 2));
0102     QCheckBox *underlineCheckBox = static_cast<QCheckBox *>(itemWidget(item, 3));
0103     QCheckBox *strikeOutCheckBox = static_cast<QCheckBox *>(itemWidget(item, 4));
0104     KColorButton *foregroundColorButton = static_cast<KColorButton *>(itemWidget(item, 5));
0105     KColorButton *backgroundColorButton = static_cast<KColorButton *>(itemWidget(item, 6));
0106 
0107     const QFont font = g.readEntry("font", QFontDatabase::systemFont(QFontDatabase::GeneralFont));
0108 
0109     boldCheckBox->setChecked(font.bold());
0110     italicCheckBox->setChecked(font.italic());
0111     underlineCheckBox->setChecked(font.underline());
0112     strikeOutCheckBox->setChecked(font.strikeOut());
0113 
0114     foregroundColorButton->setColor(g.readEntry("foregroundColor", foregroundColorButton->defaultColor()));
0115     backgroundColorButton->setColor(g.readEntry("backgroundColor", backgroundColorButton->defaultColor()));
0116 }
0117 
0118 void OutputStyleWidget::writeConfig(QTreeWidgetItem *item)
0119 {
0120     KConfigGroup config(KSharedConfig::openConfig(), QStringLiteral("KateSQLPlugin"));
0121 
0122     KConfigGroup g = config.group("OutputCustomization").group(item->data(0, QLatin1String(Qt::UserRole).toString()));
0123 
0124     QCheckBox *boldCheckBox = static_cast<QCheckBox *>(itemWidget(item, 1));
0125     QCheckBox *italicCheckBox = static_cast<QCheckBox *>(itemWidget(item, 2));
0126     QCheckBox *underlineCheckBox = static_cast<QCheckBox *>(itemWidget(item, 3));
0127     QCheckBox *strikeOutCheckBox = static_cast<QCheckBox *>(itemWidget(item, 4));
0128     KColorButton *foregroundColorButton = static_cast<KColorButton *>(itemWidget(item, 5));
0129     KColorButton *backgroundColorButton = static_cast<KColorButton *>(itemWidget(item, 6));
0130 
0131     QFont f(QFontDatabase::systemFont(QFontDatabase::GeneralFont));
0132 
0133     f.setBold(boldCheckBox->isChecked());
0134     f.setItalic(italicCheckBox->isChecked());
0135     f.setUnderline(underlineCheckBox->isChecked());
0136     f.setStrikeOut(strikeOutCheckBox->isChecked());
0137 
0138     g.writeEntry("font", f);
0139     g.writeEntry("foregroundColor", foregroundColorButton->color());
0140     g.writeEntry("backgroundColor", backgroundColorButton->color());
0141 }
0142 
0143 void OutputStyleWidget::readConfig()
0144 {
0145     QTreeWidgetItem *root = invisibleRootItem();
0146 
0147     for (int i = 0; i < root->childCount(); ++i) {
0148         readConfig(root->child(i));
0149     }
0150 }
0151 
0152 void OutputStyleWidget::writeConfig()
0153 {
0154     KConfigGroup config(KSharedConfig::openConfig(), QStringLiteral("KateSQLPlugin"));
0155     config.deleteGroup(QStringLiteral("OutputCustomization"));
0156 
0157     QTreeWidgetItem *root = invisibleRootItem();
0158 
0159     for (int i = 0; i < root->childCount(); ++i) {
0160         writeConfig(root->child(i));
0161     }
0162 }
0163 
0164 void OutputStyleWidget::updatePreviews()
0165 {
0166     QTreeWidgetItem *root = invisibleRootItem();
0167 
0168     for (int i = 0; i < root->childCount(); ++i) {
0169         QTreeWidgetItem *item = root->child(i);
0170 
0171         const QCheckBox *boldCheckBox = static_cast<QCheckBox *>(itemWidget(item, 1));
0172         const QCheckBox *italicCheckBox = static_cast<QCheckBox *>(itemWidget(item, 2));
0173         const QCheckBox *underlineCheckBox = static_cast<QCheckBox *>(itemWidget(item, 3));
0174         const QCheckBox *strikeOutCheckBox = static_cast<QCheckBox *>(itemWidget(item, 4));
0175         const KColorButton *foregroundColorButton = static_cast<KColorButton *>(itemWidget(item, 5));
0176         const KColorButton *backgroundColorButton = static_cast<KColorButton *>(itemWidget(item, 6));
0177 
0178         QFont f(QFontDatabase::systemFont(QFontDatabase::GeneralFont));
0179 
0180         f.setBold(boldCheckBox->isChecked());
0181         f.setItalic(italicCheckBox->isChecked());
0182         f.setUnderline(underlineCheckBox->isChecked());
0183         f.setStrikeOut(strikeOutCheckBox->isChecked());
0184 
0185         item->setFont(0, f);
0186         item->setForeground(0, foregroundColorButton->color());
0187         item->setBackground(0, backgroundColorButton->color());
0188     }
0189 }
0190 
0191 void OutputStyleWidget::slotChanged()
0192 {
0193     updatePreviews();
0194 
0195     Q_EMIT changed();
0196 }
0197 
0198 #include "moc_outputstylewidget.cpp"