File indexing completed on 2024-05-19 05:35:23

0001 //////////////////////////////////////////////////////////////////////////////
0002 // oxygendemodialog.cpp
0003 // oxygen configuration dialog
0004 // -------------------
0005 //
0006 // SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0007 //
0008 // SPDX-License-Identifier: MIT
0009 //////////////////////////////////////////////////////////////////////////////
0010 #include "oxygendemodialog.h"
0011 
0012 #include "config-liboxygen.h"
0013 #include "oxygenbenchmarkwidget.h"
0014 #include "oxygenbuttondemowidget.h"
0015 #include "oxygenframedemowidget.h"
0016 #include "oxygeninputdemowidget.h"
0017 #include "oxygenlistdemowidget.h"
0018 #include "oxygenmdidemowidget.h"
0019 #include "oxygensliderdemowidget.h"
0020 #include "oxygentabdemowidget.h"
0021 #ifdef HAVE_SCHEME_CHOOSER
0022 #include "oxygenschemechooser.h"
0023 #include "oxygenstylechooser.h"
0024 #endif
0025 
0026 #include <QDialogButtonBox>
0027 #include <QShortcut>
0028 #include <QTextStream>
0029 
0030 #include <KStandardShortcut>
0031 #include <QIcon>
0032 
0033 namespace Oxygen
0034 {
0035 //_______________________________________________________________
0036 DemoDialog::DemoDialog(QWidget *parent)
0037     : KPageDialog(parent)
0038 {
0039     setWindowTitle(i18n("Oxygen Demo"));
0040 
0041     // install Quit shortcut
0042     const auto shortcuts = KStandardShortcut::quit();
0043     for (const QKeySequence &sequence : shortcuts) {
0044         connect(new QShortcut(sequence, this), SIGNAL(activated()), SLOT(close()));
0045     }
0046 
0047     // button box
0048     auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok, Qt::Horizontal);
0049     setButtonBox(buttonBox);
0050 
0051     // connection
0052     connect(buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()), SLOT(close()));
0053 
0054     // customize button box
0055     _enableCheckBox = new QCheckBox(i18n("Enabled"));
0056     _enableCheckBox->setChecked(true);
0057     connect(_enableCheckBox, SIGNAL(toggled(bool)), SLOT(toggleEnable(bool)));
0058     buttonBox->addButton(_enableCheckBox, QDialogButtonBox::ResetRole);
0059 
0060     _rightToLeftCheckBox = new QCheckBox(i18n("Right to left layout"));
0061     connect(_rightToLeftCheckBox, SIGNAL(toggled(bool)), SLOT(toggleRightToLeft(bool)));
0062     buttonBox->addButton(_rightToLeftCheckBox, QDialogButtonBox::ResetRole);
0063 
0064 #ifdef HAVE_SCHEME_CHOOSER
0065     auto styleChooser = new WidgetStyleChooser(this);
0066     styleChooser->createStyleSelectionMenu(i18n("Style"));
0067     buttonBox->addButton(styleChooser, QDialogButtonBox::ResetRole);
0068 
0069     auto colChooser = new ColorSchemeChooser(this);
0070     buttonBox->addButton(colChooser, QDialogButtonBox::ResetRole);
0071 #endif
0072 
0073     // connections
0074     connect(this, SIGNAL(currentPageChanged(KPageWidgetItem *, KPageWidgetItem *)), SLOT(updateWindowTitle(KPageWidgetItem *)));
0075     connect(this, SIGNAL(currentPageChanged(KPageWidgetItem *, KPageWidgetItem *)), SLOT(updateEnableState(KPageWidgetItem *)));
0076 
0077     auto setPageIcon = [](KPageWidgetItem *page, const QString &iconName) {
0078         page->setIcon(QIcon::fromTheme(iconName));
0079     };
0080 
0081     KPageWidgetItem *page = nullptr;
0082     QVector<KPageWidgetItem *> items;
0083 
0084     // inputs
0085     {
0086         page = new KPageWidgetItem(new InputDemoWidget());
0087         page->setName(i18n("Input Widgets"));
0088         setPageIcon(page, QStringLiteral("edit-rename"));
0089         page->setHeader(i18n("Shows the appearance of text input widgets"));
0090         addPage(page);
0091         items.append(page);
0092     }
0093 
0094     // tab
0095     {
0096         page = new KPageWidgetItem(new TabDemoWidget());
0097         page->setName(i18n("Tab Widgets"));
0098         setPageIcon(page, QStringLiteral("tab-detach"));
0099         page->setHeader(i18n("Shows the appearance of tab widgets"));
0100         addPage(page);
0101         items.append(page);
0102     }
0103 
0104     // buttons
0105     {
0106         page = new KPageWidgetItem(new ButtonDemoWidget());
0107         page->setName(i18n("Buttons"));
0108         setPageIcon(page, QStringLiteral("go-jump-locationbar"));
0109         page->setHeader(i18n("Shows the appearance of buttons"));
0110         addPage(page);
0111         items.append(page);
0112     }
0113 
0114     // lists
0115     {
0116         page = new KPageWidgetItem(new ListDemoWidget());
0117         page->setName(i18n("Lists"));
0118         setPageIcon(page, QStringLiteral("view-list-tree"));
0119         page->setHeader(i18n("Shows the appearance of lists, trees and tables"));
0120         addPage(page);
0121         items.append(page);
0122     }
0123 
0124     // frames
0125     {
0126         page = new KPageWidgetItem(new FrameDemoWidget());
0127         page->setName(i18n("Frames"));
0128         setPageIcon(page, QStringLiteral("draw-rectangle"));
0129         page->setHeader(i18n("Shows the appearance of various framed widgets"));
0130         addPage(page);
0131         items.append(page);
0132     }
0133 
0134     // mdi
0135     {
0136         page = new KPageWidgetItem(new MdiDemoWidget());
0137         page->setName(i18n("MDI Windows"));
0138         setPageIcon(page, QStringLiteral("preferences-system-windows"));
0139         page->setHeader(i18n("Shows the appearance of MDI windows"));
0140         addPage(page);
0141         items.append(page);
0142     }
0143 
0144     // sliders
0145     {
0146         page = new KPageWidgetItem(new SliderDemoWidget());
0147         page->setName(i18n("Sliders"));
0148         setPageIcon(page, QStringLiteral("measure"));
0149         page->setHeader(i18n("Shows the appearance of sliders, progress bars and scrollbars"));
0150         addPage(page);
0151         items.append(page);
0152     }
0153 
0154     // benchmark
0155     {
0156         auto benchmarkWidget(new BenchmarkWidget());
0157         page = new KPageWidgetItem(benchmarkWidget);
0158         page->setName(i18n("Benchmark"));
0159         setPageIcon(page, QStringLiteral("system-run"));
0160         page->setHeader(i18n("Emulates user interaction with widgets for benchmarking"));
0161         benchmarkWidget->init(this, items);
0162         addPage(page);
0163         items.append(page);
0164     }
0165 
0166     // connections
0167     QShortcut *shortcut(new QShortcut(Qt::CTRL | Qt::Key_X, this));
0168     for (auto item : items) {
0169         if (item->widget()->metaObject()->indexOfSlot("benchmark()") >= 0) {
0170             connect(shortcut, SIGNAL(activated()), item->widget(), SLOT(benchmark()));
0171         }
0172         connect(this, SIGNAL(abortSimulations()), &static_cast<DemoWidget *>(item->widget())->simulator(), SLOT(abort()));
0173     }
0174 }
0175 
0176 //_______________________________________________________________
0177 void DemoDialog::updateWindowTitle(KPageWidgetItem *item)
0178 {
0179     QString title;
0180     QTextStream what(&title);
0181     if (item) {
0182         what << item->name();
0183         what << " - ";
0184     }
0185 
0186     what << i18n("Oxygen Demo");
0187     setWindowTitle(title);
0188 }
0189 
0190 //_______________________________________________________________
0191 void DemoDialog::updateEnableState(KPageWidgetItem *item)
0192 {
0193     if (!(item && item->widget() && _enableCheckBox))
0194         return;
0195     item->widget()->setEnabled(_enableCheckBox->isChecked());
0196 }
0197 
0198 //_______________________________________________________________
0199 void DemoDialog::toggleEnable(bool value)
0200 {
0201     if (!(currentPage() && currentPage()->widget()))
0202         return;
0203     currentPage()->widget()->setEnabled(value);
0204 }
0205 
0206 //_______________________________________________________________
0207 void DemoDialog::toggleRightToLeft(bool value)
0208 {
0209     qApp->setLayoutDirection(value ? Qt::RightToLeft : Qt::LeftToRight);
0210 }
0211 
0212 //_______________________________________________________________
0213 void DemoDialog::closeEvent(QCloseEvent *event)
0214 {
0215     emit abortSimulations();
0216     KPageDialog::closeEvent(event);
0217 }
0218 
0219 //_______________________________________________________________
0220 void DemoDialog::hideEvent(QHideEvent *event)
0221 {
0222     emit abortSimulations();
0223     KPageDialog::hideEvent(event);
0224 }
0225 }