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

0001 //////////////////////////////////////////////////////////////////////////////
0002 // oxygenbuttondemowidget.cpp
0003 // oxygen buttons demo widget
0004 // -------------------
0005 //
0006 // SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0007 //
0008 // SPDX-License-Identifier: MIT
0009 //////////////////////////////////////////////////////////////////////////////
0010 
0011 #include "oxygenbuttondemowidget.h"
0012 
0013 #include <QIcon>
0014 #include <QMenu>
0015 
0016 namespace Oxygen
0017 {
0018 //_____________________________________________________________
0019 ButtonDemoWidget::ButtonDemoWidget(QWidget *parent)
0020     : DemoWidget(parent)
0021 {
0022     ui.setupUi(this);
0023 
0024     ui.pushButton_3->setIcon(QIcon::fromTheme(QStringLiteral("im-user")));
0025     ui.pushButton_4->setIcon(QIcon::fromTheme(QStringLiteral("im-user")));
0026 
0027     installMenu(ui.pushButton_2);
0028     installMenu(ui.pushButton_4);
0029 
0030     _pushButtons << ui.pushButton << ui.pushButton_2 << ui.pushButton_3 << ui.pushButton_4;
0031 
0032     connect(ui.flatButtonCheckBox, SIGNAL(toggled(bool)), SLOT(toggleFlat(bool)));
0033 
0034     ui.kcombobox_2->addItem(QIcon::fromTheme(QStringLiteral("im-user")), i18n("Normal"));
0035     ui.kcombobox_2->addItem(QIcon::fromTheme(QStringLiteral("document-new")), i18n("New"));
0036     ui.kcombobox_2->addItem(QIcon::fromTheme(QStringLiteral("document-open")), i18n("Open"));
0037     ui.kcombobox_2->addItem(QIcon::fromTheme(QStringLiteral("document-save")), i18n("Save"));
0038 
0039     ui.toolButton_2->setIcon(QIcon::fromTheme(QStringLiteral("im-user")));
0040     ui.toolButton_2->setIconSize(QSize(16, 16));
0041     ui.toolButton_2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
0042 
0043     ui.toolButton_3->setIcon(QIcon::fromTheme(QStringLiteral("im-user")));
0044     ui.toolButton_4->setIcon(QIcon::fromTheme(QStringLiteral("im-user")));
0045     ui.toolButton_5->setIcon(QIcon::fromTheme(QStringLiteral("im-user")));
0046     ui.toolButton_6->setIcon(QIcon::fromTheme(QStringLiteral("im-user")));
0047     ui.toolButton_7->setIcon(QIcon::fromTheme(QStringLiteral("im-user")));
0048     ui.toolButton_8->setIcon(QIcon::fromTheme(QStringLiteral("im-user")));
0049 
0050     // add toolbar
0051     ui.toolBarContainer->setLayout(new QVBoxLayout());
0052     _toolBar = new QToolBar(ui.toolBarContainer);
0053     ui.toolBarContainer->layout()->addWidget(_toolBar);
0054     _toolBar->addAction(QIcon::fromTheme(QStringLiteral("document-new")), i18n("New"));
0055     _toolBar->addAction(QIcon::fromTheme(QStringLiteral("document-open")), i18n("Open"));
0056     _toolBar->addAction(QIcon::fromTheme(QStringLiteral("document-save")), i18n("Save"));
0057     QAction *action(_toolBar->addAction(QIcon::fromTheme(QStringLiteral("dialog-password")), i18n("Toggle authentication")));
0058     action->setCheckable(true);
0059     action->setChecked(true);
0060 
0061     installMenu(ui.toolButton_4);
0062     installMenu(ui.toolButton_5);
0063     installMenu(ui.toolButton_7);
0064     installMenu(ui.toolButton_8);
0065 
0066     // checkboxes
0067     ui.checkBox_2->setCheckState(Qt::PartiallyChecked);
0068 
0069     _toolButtons = {ui.toolButton_3,
0070                     ui.toolButton_4,
0071                     ui.toolButton_5,
0072                     ui.toolButton_6,
0073                     ui.toolButton_7,
0074                     ui.toolButton_8,
0075                     ui.toolButton_9,
0076                     ui.toolButton_10,
0077                     ui.toolButton_11,
0078                     ui.toolButton_12};
0079 
0080     connect(ui.textPosition, SIGNAL(currentIndexChanged(int)), SLOT(textPosition(int)));
0081     connect(ui.iconSize, SIGNAL(currentIndexChanged(int)), SLOT(iconSize(int)));
0082     ui.iconSize->setCurrentIndex(2);
0083     textPosition(0);
0084 }
0085 
0086 //_____________________________________________________________
0087 void ButtonDemoWidget::benchmark(void)
0088 {
0089     if (!isVisible())
0090         return;
0091 
0092     if (true) {
0093         simulator().click(ui.pushButton);
0094 
0095         simulator().selectMenuItem(ui.pushButton_2, 2);
0096 
0097         simulator().selectComboBoxItem(ui.kcombobox, 0);
0098         simulator().selectComboBoxItem(ui.kcombobox, 2);
0099         simulator().selectComboBoxItem(ui.kcombobox, 1);
0100 
0101         simulator().click(ui.toolButton);
0102 
0103         simulator().click(ui.pushButton_3);
0104 
0105         simulator().selectMenuItem(ui.pushButton_4, 2);
0106 
0107         simulator().selectComboBoxItem(ui.kcombobox_2, 1);
0108         simulator().selectComboBoxItem(ui.kcombobox_2, 2);
0109         simulator().selectComboBoxItem(ui.kcombobox_2, 3);
0110         simulator().selectComboBoxItem(ui.kcombobox_2, 0);
0111 
0112         simulator().click(ui.toolButton_2);
0113     }
0114 
0115     if (true) {
0116         // toggle flat mode and redo
0117         simulator().click(ui.flatButtonCheckBox);
0118         simulator().click(ui.flatButtonCheckBox);
0119     }
0120 
0121     if (true) {
0122         simulator().click(ui.toolButton_3);
0123         simulator().click(ui.toolButton_3);
0124 
0125         simulator().click(ui.toolButton_6);
0126         simulator().click(ui.toolButton_6);
0127 
0128         simulator().selectMenuItem(ui.toolButton_4, 2);
0129         simulator().selectMenuItem(ui.toolButton_7, 2);
0130 
0131         // TODO select menu item in toolbutton with separated arrow
0132 
0133         const auto children = _toolBar->findChildren<QToolButton *>();
0134         for (QToolButton *button : children) {
0135             simulator().click(button);
0136         }
0137     }
0138 
0139     if (true) {
0140         // change text position
0141         simulator().selectComboBoxItem(ui.textPosition, 1);
0142         simulator().selectComboBoxItem(ui.textPosition, 2);
0143         simulator().selectComboBoxItem(ui.textPosition, 3);
0144         simulator().selectComboBoxItem(ui.textPosition, 0);
0145 
0146         // change icon sizes
0147         simulator().selectComboBoxItem(ui.iconSize, 0);
0148         simulator().selectComboBoxItem(ui.iconSize, 1);
0149         simulator().selectComboBoxItem(ui.iconSize, 3);
0150         simulator().selectComboBoxItem(ui.iconSize, 2);
0151     }
0152 
0153     if (true) {
0154         simulator().click(ui.radioButton_2);
0155         simulator().click(ui.radioButton_3);
0156         simulator().click(ui.radioButton);
0157     }
0158 
0159     simulator().run();
0160 }
0161 
0162 //_____________________________________________________________
0163 void ButtonDemoWidget::toggleFlat(bool value)
0164 {
0165     for (QPushButton *button : std::as_const(_pushButtons)) {
0166         button->setFlat(value);
0167     }
0168 
0169     ui.toolButton->setAutoRaise(value);
0170     ui.toolButton_2->setAutoRaise(value);
0171 
0172     ui.kcombobox->setFrame(!value);
0173     ui.kcombobox_2->setFrame(!value);
0174 }
0175 
0176 //_____________________________________________________________
0177 void ButtonDemoWidget::textPosition(int index)
0178 {
0179     for (QToolButton *button : std::as_const(_toolButtons)) {
0180         switch (index) {
0181         default:
0182         case 0:
0183             button->setToolButtonStyle(Qt::ToolButtonIconOnly);
0184             break;
0185         case 1:
0186             button->setToolButtonStyle(Qt::ToolButtonTextOnly);
0187             break;
0188         case 2:
0189             button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
0190             break;
0191         case 3:
0192             button->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
0193             break;
0194         }
0195     }
0196 
0197     switch (index) {
0198     default:
0199     case 0:
0200         _toolBar->setToolButtonStyle(Qt::ToolButtonIconOnly);
0201         break;
0202     case 1:
0203         _toolBar->setToolButtonStyle(Qt::ToolButtonTextOnly);
0204         break;
0205     case 2:
0206         _toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
0207         break;
0208     case 3:
0209         _toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
0210         break;
0211     }
0212 }
0213 
0214 //_____________________________________________________________
0215 void ButtonDemoWidget::iconSize(int index)
0216 {
0217     static QList<int> sizes(QList<int>() << 16 << 22 << 32 << 48);
0218     for (QToolButton *button : std::as_const(_toolButtons)) {
0219         button->setIconSize(QSize(sizes[index], sizes[index]));
0220     }
0221 
0222     _toolBar->setIconSize(QSize(sizes[index], sizes[index]));
0223 }
0224 
0225 //_____________________________________________________________
0226 void ButtonDemoWidget::installMenu(QToolButton *button)
0227 {
0228     QMenu *menu = new QMenu();
0229     menu->addAction(QIcon::fromTheme(QStringLiteral("document-new")), i18n("New"));
0230     menu->addAction(QIcon::fromTheme(QStringLiteral("document-open")), i18n("Open"));
0231     menu->addAction(QIcon::fromTheme(QStringLiteral("document-save")), i18n("Save"));
0232     button->setMenu(menu);
0233 }
0234 
0235 //_____________________________________________________________
0236 void ButtonDemoWidget::installMenu(QPushButton *button)
0237 {
0238     QMenu *menu = new QMenu();
0239     menu->addAction(QIcon::fromTheme(QStringLiteral("document-new")), i18n("New"));
0240     menu->addAction(QIcon::fromTheme(QStringLiteral("document-open")), i18n("Open"));
0241     menu->addAction(QIcon::fromTheme(QStringLiteral("document-save")), i18n("Save"));
0242     button->setMenu(menu);
0243 }
0244 }