File indexing completed on 2024-05-12 05:13:30

0001 /*
0002    SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 #include "newthemedialog.h"
0007 #include "globalsettings_base.h"
0008 
0009 #include <KLineEdit>
0010 #include <KLocalizedString>
0011 #include <KUrlRequester>
0012 
0013 #include <QDialogButtonBox>
0014 #include <QLabel>
0015 #include <QPushButton>
0016 #include <QVBoxLayout>
0017 
0018 using namespace GrantleeThemeEditor;
0019 class GrantleeThemeEditor::NewThemeDialogPrivate
0020 {
0021 public:
0022     NewThemeDialogPrivate() = default;
0023 
0024     KLineEdit *mThemeName = nullptr;
0025     KUrlRequester *mUrlRequester = nullptr;
0026     QPushButton *mOkButton = nullptr;
0027 };
0028 NewThemeDialog::NewThemeDialog(QWidget *parent)
0029     : QDialog(parent)
0030     , d(new GrantleeThemeEditor::NewThemeDialogPrivate)
0031 {
0032     setWindowTitle(i18nc("@title:window", "New Theme"));
0033 
0034     auto w = new QWidget;
0035 
0036     auto lay = new QVBoxLayout(w);
0037     lay->setContentsMargins(0, 0, 0, 0);
0038 
0039     auto lab = new QLabel(i18n("Theme name:"));
0040     lay->addWidget(lab);
0041 
0042     d->mThemeName = new KLineEdit;
0043     d->mThemeName->setClearButtonEnabled(true);
0044     d->mThemeName->setTrapReturnKey(true);
0045     connect(d->mThemeName, &KLineEdit::textChanged, this, &NewThemeDialog::slotUpdateOkButton);
0046     lay->addWidget(d->mThemeName);
0047 
0048     lab = new QLabel(i18n("Theme directory:"));
0049     lay->addWidget(lab);
0050 
0051     d->mUrlRequester = new KUrlRequester;
0052     d->mUrlRequester->setMode(KFile::Directory | KFile::LocalOnly);
0053     connect(d->mUrlRequester->lineEdit(), &KLineEdit::textChanged, this, &NewThemeDialog::slotUpdateOkButton);
0054     lay->addWidget(d->mUrlRequester);
0055 
0056     auto mainLayout = new QVBoxLayout(this);
0057     mainLayout->addWidget(w);
0058 
0059     auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
0060     d->mOkButton = buttonBox->button(QDialogButtonBox::Ok);
0061     d->mOkButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0062     connect(buttonBox, &QDialogButtonBox::accepted, this, &NewThemeDialog::accept);
0063     connect(buttonBox, &QDialogButtonBox::rejected, this, &NewThemeDialog::reject);
0064     mainLayout->addWidget(buttonBox);
0065     d->mOkButton->setDefault(true);
0066     d->mOkButton->setFocus();
0067 
0068     d->mOkButton->setEnabled(false);
0069     resize(300, 150);
0070     d->mThemeName->setFocus();
0071     readConfig();
0072 }
0073 
0074 NewThemeDialog::~NewThemeDialog()
0075 {
0076     delete d;
0077 }
0078 
0079 void NewThemeDialog::readConfig()
0080 {
0081     d->mUrlRequester->setUrl(QUrl::fromLocalFile(GrantleeThemeEditor::GrantleeThemeEditorSettings::path()));
0082 }
0083 
0084 QString NewThemeDialog::themeName() const
0085 {
0086     return d->mThemeName->text();
0087 }
0088 
0089 QString NewThemeDialog::directory() const
0090 {
0091     return d->mUrlRequester->lineEdit()->text();
0092 }
0093 
0094 void NewThemeDialog::slotUpdateOkButton()
0095 {
0096     d->mOkButton->setEnabled(!d->mUrlRequester->lineEdit()->text().trimmed().isEmpty() && !d->mThemeName->text().trimmed().isEmpty());
0097 }
0098 
0099 #include "moc_newthemedialog.cpp"