-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmainwindow.cpp
More file actions
92 lines (77 loc) · 3.01 KB
/
Copy pathmainwindow.cpp
File metadata and controls
92 lines (77 loc) · 3.01 KB
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
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include "mainmenu.h"
#include "levelselect.h"
#include "settings.h"
#include "game.h"
#include <QTextStream>
QString MainWindow::loadStyle(const QString& path) {
QFile file(path);
if (!file.open(QFile::ReadOnly | QFile::Text))
return "";
QTextStream in(&file);
return in.readAll();
}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
ui(new Ui::MainWindow),
settingsManager(new SettingsManager(this))
{
ui->setupUi(this);
// set uniform size
setMinimumSize(1280, 720);
resize(1280, 720);
// add all classes
settingsManager->load();
QString theme = settingsManager->theme();
qApp->setStyleSheet(loadStyle(":/themes/" + theme + ".qss"));
MainMenu *mainMenu = new MainMenu(this);
LevelSelect *levelSelect = new LevelSelect(this);
Game *game = new Game(settingsManager, this);
Settings *settings = new Settings(settingsManager, game, this);
game->setJumpSoundVolume(settingsManager->audioVolume() / 100.0f);
// add the pages to the stacked widget
ui->stackedWidget->addWidget(mainMenu);
ui->stackedWidget->addWidget(levelSelect);
ui->stackedWidget->addWidget(settings);
ui->stackedWidget->addWidget(game);
// connect signal to slots very useful
connect(game, &Game::switchToLevel, this, &MainWindow::switchToLevelSelect);
connect(mainMenu, &MainMenu::openLevelSelect, this, &MainWindow::switchToLevelSelect);
connect(mainMenu, &MainMenu::openSettings, this, &MainWindow::switchToSettings);
connect(levelSelect, &LevelSelect::backToMainMenu, this, &MainWindow::switchToMainMenu);
connect(levelSelect, &LevelSelect::goToLevel1, this, &MainWindow::switchToGame);
connect(levelSelect, &LevelSelect::goToLevel2, this, &MainWindow::switchToGame);
connect(levelSelect, &LevelSelect::goToLevel1, game, &Game::loadLevel1);
connect(levelSelect, &LevelSelect::goToLevel2, game, &Game::loadLevel2);
connect(settings, &Settings::backToMainMenu, this, &MainWindow::switchToMainMenu);
connect(settings, &Settings::themeToggle, this, [=]() {
QString theme = settingsManager->theme();
qApp->setStyleSheet(loadStyle(":/themes/" + theme + ".qss"));
});
// make page main menu :3
ui->stackedWidget->setCurrentWidget(mainMenu);
}
MainWindow::~MainWindow() {
if (settingsManager) {
settingsManager->save();
}
delete ui;
}
void MainWindow::switchToLevelSelect() {
// go to level select
ui->stackedWidget->setCurrentWidget(ui->stackedWidget->findChild<LevelSelect*>());
}
void MainWindow::switchToMainMenu() {
// go to main menu
ui->stackedWidget->setCurrentWidget(ui->stackedWidget->findChild<MainMenu*>());
}
void MainWindow::switchToSettings() {
// go to game
ui->stackedWidget->setCurrentWidget(ui->stackedWidget->findChild<Settings*>());
}
void MainWindow::switchToGame() {
// go to settings
ui->stackedWidget->setCurrentWidget(ui->stackedWidget->findChild<Game*>());
}