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 }