File indexing completed on 2025-03-09 03:57:05
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2010-05-01 0007 * Description : a dialog that can be used to display a configuration 0008 * dialog for a rule 0009 * 0010 * SPDX-FileCopyrightText: 2009-2012 by Andi Clemens <andi dot clemens at gmail dot com> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #include "ruledialog.h" 0017 0018 // Qt includes 0019 0020 #include <QFrame> 0021 #include <QGridLayout> 0022 #include <QLabel> 0023 #include <QRegularExpression> 0024 #include <QWidget> 0025 #include <QDialogButtonBox> 0026 #include <QVBoxLayout> 0027 #include <QPushButton> 0028 0029 // Local includes 0030 0031 #include "digikam_globals.h" 0032 #include "rule.h" 0033 #include "dxmlguiwindow.h" 0034 0035 namespace Digikam 0036 { 0037 0038 class Q_DECL_HIDDEN RuleDialog::Private 0039 { 0040 public: 0041 0042 explicit Private() 0043 : buttons(nullptr), 0044 container(nullptr), 0045 dialogTitle(nullptr), 0046 dialogDescription(nullptr), 0047 dialogIcon(nullptr), 0048 settingsWidget(nullptr) 0049 { 0050 } 0051 0052 QDialogButtonBox* buttons; 0053 QWidget* container; 0054 QLabel* dialogTitle; 0055 QLabel* dialogDescription; 0056 QLabel* dialogIcon; 0057 QWidget* settingsWidget; 0058 }; 0059 0060 RuleDialog::RuleDialog(Rule* const parent) 0061 : QDialog(nullptr), 0062 d(new Private) 0063 { 0064 d->buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, this); 0065 d->buttons->button(QDialogButtonBox::Ok)->setDefault(true); 0066 0067 d->dialogTitle = new QLabel(this); 0068 d->dialogDescription = new QLabel(this); 0069 d->dialogIcon = new QLabel(this); 0070 0071 setDialogTitle(parent->objectName()); 0072 setDialogDescription(parent->description()); 0073 setDialogIcon(parent->icon(Rule::Dialog)); 0074 0075 d->dialogTitle->setAlignment(Qt::AlignHCenter); 0076 d->dialogDescription->setAlignment(Qt::AlignHCenter); 0077 d->dialogDescription->setWordWrap(true); 0078 0079 QFrame* const line = new QFrame(this); 0080 line->setFrameShape(QFrame::HLine); 0081 line->setFrameShadow(QFrame::Sunken); 0082 0083 QWidget* const header = new QWidget(this); 0084 QGridLayout* headerLayout = new QGridLayout(this); 0085 headerLayout->addWidget(d->dialogIcon, 0, 0, 4, 1); 0086 headerLayout->addWidget(d->dialogTitle, 1, 1, 1, 1); 0087 headerLayout->addWidget(d->dialogDescription, 2, 1, 1, 1); 0088 headerLayout->addWidget(line, 4, 0, 1, -1); 0089 headerLayout->setColumnStretch(1, 10); 0090 header->setLayout(headerLayout); 0091 0092 d->container = new QWidget(this); 0093 QGridLayout* const containerLayout = new QGridLayout(this); 0094 containerLayout->addWidget(header, 0, 0, 1, 1); 0095 containerLayout->addWidget(d->settingsWidget, 1, 0, 1, 1); 0096 containerLayout->setRowStretch(1, 10); 0097 d->container->setLayout(containerLayout); 0098 0099 QVBoxLayout* const vbx = new QVBoxLayout(this); 0100 vbx->addWidget(d->container); 0101 vbx->addWidget(d->buttons); 0102 setLayout(vbx); 0103 0104 setMinimumWidth(300); 0105 0106 connect(d->buttons->button(QDialogButtonBox::Ok), SIGNAL(clicked()), 0107 this, SLOT(accept())); 0108 0109 connect(d->buttons->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), 0110 this, SLOT(reject())); 0111 0112 connect(d->buttons->button(QDialogButtonBox::Help), SIGNAL(clicked()), 0113 this, SLOT(slotHelp())); 0114 } 0115 0116 RuleDialog::~RuleDialog() 0117 { 0118 delete d; 0119 } 0120 0121 void RuleDialog::setDialogTitle(const QString& title) 0122 { 0123 // remove ellipsis and "&&" from the string 0124 0125 QString _title = title; 0126 _title.remove(QRegularExpression(QLatin1String("\\.{3,}"))).replace(QLatin1String("&&"), QLatin1String("&")); 0127 0128 d->dialogTitle->setText(QString::fromUtf8("<b>%1</b>").arg(_title)); 0129 setWindowTitle(_title); 0130 } 0131 0132 void RuleDialog::setDialogDescription(const QString& description) 0133 { 0134 d->dialogDescription->setText(description); 0135 } 0136 0137 void RuleDialog::setDialogIcon(const QPixmap& icon) 0138 { 0139 d->dialogIcon->setPixmap(icon); 0140 } 0141 0142 void RuleDialog::setSettingsWidget(QWidget* const settingsWidget) 0143 { 0144 delete d->settingsWidget; 0145 0146 d->settingsWidget = new QWidget(this); 0147 QGridLayout* const l = new QGridLayout(this); 0148 l->addWidget(settingsWidget); 0149 l->setSpacing(0); 0150 l->setContentsMargins(QMargins()); 0151 d->settingsWidget->setLayout(l); 0152 d->container->layout()->addWidget(d->settingsWidget); 0153 } 0154 0155 void RuleDialog::slotHelp() 0156 { 0157 openOnlineDocumentation(QLatin1String("main_window"), QLatin1String("image_view"), QLatin1String("renaming-photograph")); 0158 } 0159 0160 } // namespace Digikam 0161 0162 #include "moc_ruledialog.cpp"