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"