File indexing completed on 2024-06-16 04:46:39
0001 /* 0002 SPDX-FileCopyrightText: 2018 Łukasz Wojniłowicz lukasz.wojnilowicz @gmail.com 0003 SPDX-FileCopyrightText: 2021 Dawid Wróbel <me@dawidwrobel.com> 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "kcm_reportsview.h" 0008 #include <config-kmymoney-version.h> 0009 0010 // ---------------------------------------------------------------------------- 0011 // QT Includes 0012 0013 #include <QUrl> 0014 #include <QFileInfo> 0015 0016 // ---------------------------------------------------------------------------- 0017 // KDE Includes 0018 0019 #include <KAboutData> 0020 #include <KLineEdit> 0021 #include <KLocalizedString> 0022 #include <KMessageBox> 0023 #include <KPluginFactory> 0024 #include <kio_version.h> 0025 0026 // ---------------------------------------------------------------------------- 0027 // Project Includes 0028 0029 #include "kmymoneysettings.h" 0030 #include "ui_reportsviewsettings.h" 0031 0032 class ReportsViewSettingsWidgetPrivate 0033 { 0034 Q_DISABLE_COPY(ReportsViewSettingsWidgetPrivate) 0035 0036 public: 0037 ReportsViewSettingsWidgetPrivate() : 0038 ui(new Ui::ReportsViewSettings), 0039 m_fileKLineEdit(nullptr) 0040 { 0041 } 0042 0043 ~ReportsViewSettingsWidgetPrivate() 0044 { 0045 delete ui; 0046 } 0047 0048 0049 /** 0050 * Collector for both signals 0051 * urlSelected and editingFinished. 0052 * 0053 * Only shows a warning 0054 * if the selected file 0055 * is not a readable plain file - 0056 * and only one time. 0057 * 0058 * @param[in] css css file name 0059 * 0060 * @see ReportsViewSettingsWidget#slotCssUrlSelected 0061 * @see ReportsViewSettingsWidget#slotEditingFinished 0062 */ 0063 void checkCssFile(QString& css) { 0064 0065 if (css == m_cssFileOld) { 0066 // do not check again to avoid emitting a warning more than 1 time 0067 return; 0068 } 0069 0070 m_cssFileOld = css; 0071 0072 QFileInfo* info = new QFileInfo(css); 0073 0074 if (!info->exists()) { 0075 KMessageBox::error(0, i18n("File %1 does not exist", css)); 0076 return; 0077 } 0078 0079 QList<QString> warnings; 0080 0081 if (!info->isFile()) { 0082 warnings.append(i18n("it is not a plain file")); 0083 } 0084 0085 if (!info->isReadable()) { 0086 warnings.append(i18n("it is not readable")); 0087 } 0088 0089 if (info->size() < 1) { 0090 warnings.append(i18n("it is empty")); 0091 } 0092 0093 if (warnings.size() < 1) { 0094 // no warnings, fine 0095 return; 0096 } 0097 0098 QString out = i18np("There is a problem with file %1", "There are problems with file %1", css); 0099 0100 QList<QString>::const_iterator i; 0101 for (i = warnings.constBegin(); i != warnings.constEnd(); ++i) { 0102 out += '\n' + *i; 0103 } 0104 0105 KMessageBox::error(0, out); 0106 } 0107 0108 Ui::ReportsViewSettings *ui; 0109 /** 0110 * Old value of css file to avoid warnings 0111 * when a signal is emitted 0112 * but the value itself did not change. 0113 */ 0114 QString m_cssFileOld; 0115 0116 /** 0117 * Pointer to the KLineEdit of the KFileDialog which we need 0118 * to receive signal editingFinished. 0119 */ 0120 KLineEdit* m_fileKLineEdit; 0121 }; 0122 0123 ReportsViewSettingsWidget::ReportsViewSettingsWidget(QWidget* parent) : 0124 QWidget(parent), 0125 d_ptr(new ReportsViewSettingsWidgetPrivate) 0126 { 0127 Q_D(ReportsViewSettingsWidget); 0128 d->ui->setupUi(this); 0129 0130 #if KIO_VERSION >= QT_VERSION_CHECK(5, 108, 0) 0131 d->ui->kcfg_CssFileDefault->setNameFilters({i18n("CSS files") + QLatin1String(" (*.css)"), i18n("All files") + QLatin1String(" (*)")}); 0132 #else 0133 d->ui->kcfg_CssFileDefault->setFilter(QLatin1String("*.css|") + i18n("CSS files") + QLatin1String("\n*|") + i18n("All files")); 0134 #endif 0135 0136 // keep initial (default) css file in mind 0137 d->m_cssFileOld = KMyMoneySettings::cssFileDefault(); 0138 0139 // set default css file in ReportsViewSettingsWidget dialog 0140 d->ui->kcfg_CssFileDefault->setUrl(QUrl::fromLocalFile(KMyMoneySettings::cssFileDefault())); 0141 0142 d->m_fileKLineEdit = d->ui->kcfg_CssFileDefault->lineEdit(); 0143 0144 connect(d->ui->kcfg_CssFileDefault, &KUrlRequester::urlSelected, 0145 this, &ReportsViewSettingsWidget::slotCssUrlSelected); 0146 0147 connect(d->m_fileKLineEdit, &QLineEdit::editingFinished, 0148 this, &ReportsViewSettingsWidget::slotEditingFinished); 0149 } 0150 0151 ReportsViewSettingsWidget::~ReportsViewSettingsWidget() 0152 { 0153 Q_D(ReportsViewSettingsWidget); 0154 delete d; 0155 } 0156 0157 /** 0158 * Receiver for signal urlSelected. 0159 * 0160 * Signal urlSelected only is emitted 0161 * when a file is selected with the file chooser. 0162 * 0163 * @param[in] cssUrl url of css file 0164 * 0165 * @see ReportsViewSettingsWidget#Private#checkCssFile 0166 */ 0167 void ReportsViewSettingsWidget::slotCssUrlSelected(const QUrl &cssUrl) 0168 { 0169 Q_D(ReportsViewSettingsWidget); 0170 auto css = cssUrl.toLocalFile(); 0171 d->checkCssFile(css); 0172 } 0173 0174 /** 0175 * Receiver for signal editingFinished. 0176 * 0177 * Signal editingFinished is emitted 0178 * on focus out only, 0179 * not when a file is selected with the file chooser. 0180 * 0181 * @see ReportsViewSettingsWidget#Private#checkCssFile 0182 */ 0183 void ReportsViewSettingsWidget::slotEditingFinished() 0184 { 0185 Q_D(ReportsViewSettingsWidget); 0186 auto txt = d->m_fileKLineEdit->text(); 0187 d->checkCssFile(txt); 0188 } 0189 0190 KCMReportsView::KCMReportsView(QWidget *parent, const QVariantList& args) 0191 : KCModule(parent, args) 0192 { 0193 ReportsViewSettingsWidget* w = new ReportsViewSettingsWidget(this); 0194 // addConfig(ReportsViewSettings::self(), w); 0195 addConfig(KMyMoneySettings::self(), w); 0196 QVBoxLayout *layout = new QVBoxLayout; 0197 setLayout(layout); 0198 layout->addWidget(w); 0199 setButtons(NoAdditionalButton); 0200 load(); 0201 } 0202 0203 KCMReportsView::~KCMReportsView() 0204 { 0205 } 0206 0207 K_PLUGIN_CLASS(KCMReportsView) 0208 0209 #include "kcm_reportsview.moc"