summaryrefslogtreecommitdiffstats
path: root/tests/manual/widgets/widgets/bigmenucreator/mainwindow.cpp
blob: 116983aa909a94cfde09ce43d4c054ec5e4a5832 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

#include "mainwindow.h"
#include "ui_mainwindow.h"

bool MainWindow::newMenubar = false;
bool MainWindow::parentlessMenubar = false;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    const int level = 3;
    QMenuBar *mb;
    if (newMenubar)
        mb = new QMenuBar(parentlessMenubar ? nullptr : this);
    else
        mb = ui->menuBar;
    populateMenu(mb, level);
    if (newMenubar)
        setMenuBar(mb);
}

MainWindow::~MainWindow()
{
    delete ui;
}

// We do all the permutations on the following 3 operations:
//
//      A: Add action to parent menu
//      P: Populate the submenu
//      S: Set action submenu
//
// Recursing on menu population gives more combinations of
// creation and insertions.

void MainWindow::populateMenu(QWidget *menu, int level)
{
    if (level > 0) {
        --level;
        doAPS(menu, level);
        doASP(menu, level);
        doPAS(menu, level);
        doSPA(menu, level);
        doSAP(menu, level);
        doPSA(menu, level);
    } else {
        static int itemCounter = 0;
        static const char *sym[] = { "Foo", "Bar", "Baz", "Quux" };
        for (uint i = 0; i < sizeof(sym) / sizeof(sym[0]); i++) {
            QString title = QString::fromLatin1("%1 Item %2").arg(QLatin1String(sym[i])).arg(itemCounter);
            menu->addAction(new QAction(title));
        }
        ++itemCounter;
    }
}

void MainWindow::doAPS(QWidget *menu, int level)
{
    auto *action = new QAction("A P S");
    menu->addAction(action);
    auto *submenu = new QMenu;
    populateMenu(submenu, level);
    action->setMenu(submenu);
}

void MainWindow::doASP(QWidget *menu, int level)
{
    auto *action = new QAction("A S P");
    menu->addAction(action);
    auto *submenu = new QMenu;
    action->setMenu(submenu);
    populateMenu(submenu, level);
}

void MainWindow::doPAS(QWidget *menu, int level)
{
    auto *submenu = new QMenu;
    populateMenu(submenu, level);
    auto *action = new QAction("P A S");
    menu->addAction(action);
    action->setMenu(submenu);
}

void MainWindow::doSPA(QWidget *menu, int level)
{
    auto *action = new QAction("S P A");
    auto *submenu = new QMenu;
    action->setMenu(submenu);
    populateMenu(submenu, level);
    menu->addAction(action);
}

void MainWindow::doSAP(QWidget *menu, int level)
{
    auto *action = new QAction("S A P");
    auto *submenu = new QMenu;
    action->setMenu(submenu);
    menu->addAction(action);
    populateMenu(submenu, level);
}

void MainWindow::doPSA(QWidget *menu, int level)
{
    auto *action = new QAction("P S A");
    auto *submenu = new QMenu;
    populateMenu(submenu, level);
    action->setMenu(submenu);
    menu->addAction(action);
}