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"