-
Notifications
You must be signed in to change notification settings - Fork 0
/
mainwindow.cpp
146 lines (116 loc) · 5.61 KB
/
mainwindow.cpp
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/**********************************************************************************/
/* */
/* mainwindow.cpp */
/* */
/**********************************************************************************/
/* */
/* Scorpion Anti-malware Console is a free Open Source Qt-powered frontend */
/* framework for SAM Engine. */
/* */
/* Copyright (c) 2024-present (see AUTHORS.md). */
/* */
/* This program is free software: you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation, either version 3 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* */
/**********************************************************************************/
#include "mainwindow.hpp"
#include <QTimer>
#include <iostream>
#define SPLASH_SCREEN_DELAY 2000
MainWindow::MainWindow(QWidget *parent) :
QWidget(parent), splash_screen(nullptr), main_layout(nullptr), page_switcher_bar(nullptr), pages_stack(nullptr), home_page(nullptr), fim_page(nullptr) {
// TODO: This splash screen works fine but it crashes when pressing the
// scan button. I will need to investigate this further.
// MainWindow::splash_screen = new SAMConsoleSplash();
// Add splash screen to the main layout
// MainWindow::main_layout->addWidget(MainWindow::splash_screen);
// Use QTimer to remove splash screen and show main items after a delay
// QTimer::singleShot(SPLASH_SCREEN_DELAY, this, &MainWindow::show_main_ui);
MainWindow::show_main_ui();
}
MainWindow::~MainWindow() {
if (MainWindow::home_page) {
delete MainWindow::home_page;
MainWindow::home_page = nullptr;
}
if (MainWindow::fim_page) {
delete MainWindow::fim_page;
MainWindow::fim_page = nullptr;
}
if (MainWindow::pages_stack) {
delete MainWindow::pages_stack;
MainWindow::pages_stack = nullptr;
}
if (MainWindow::page_switcher_bar) {
delete MainWindow::page_switcher_bar;
MainWindow::page_switcher_bar = nullptr;
}
if (MainWindow::main_layout) {
delete MainWindow::main_layout;
MainWindow::main_layout = nullptr;
}
}
void MainWindow::show_main_ui() {
// Remove splash screen
// MainWindow::main_layout->removeWidget(MainWindow::splash_screen);
// Delete the splash screen
// if (MainWindow::splash_screen)
// {
// delete MainWindow::splash_screen;
// MainWindow::splash_screen = nullptr;
// }
// Initialize the page switcher bar
MainWindow::page_switcher_bar = new PageSwitcherBar();
// Initialize the pages stack
MainWindow::pages_stack = new QStackedWidget();
// Initialize the home page
MainWindow::home_page = new HomePage();
// Initialize the FIM page
MainWindow::fim_page = new FIMPage();
// Add pages to the stack
MainWindow::pages_stack->addWidget(MainWindow::home_page); // Index 0
MainWindow::pages_stack->addWidget(MainWindow::fim_page); // Index 1
// Initialize the main layout
MainWindow::main_layout = new QHBoxLayout(this);
MainWindow::main_layout->setSpacing(20);
// Add main items to the layout
MainWindow::main_layout->addWidget(MainWindow::page_switcher_bar, 1); // Take up 1/10 of the space
MainWindow::main_layout->addWidget(MainWindow::pages_stack, 9); // Take up 9/10 of the space
// Set initial page
MainWindow::pages_stack->setCurrentIndex(0);
// Connect signals and slots
this->connect(MainWindow::page_switcher_bar, &PageSwitcherBar::home_page_switch_button_clicked, this, &MainWindow::on_home_page_switch_button_clicked);
this->connect(MainWindow::page_switcher_bar, &PageSwitcherBar::fim_page_switch_button_clicked, this, &MainWindow::on_fim_page_switch_button_clicked);
}
HomePage *MainWindow::get_home_page_p() const {
return MainWindow::home_page;
}
FIMPage *MainWindow::get_fim_page_p() const {
return MainWindow::fim_page;
}
void MainWindow::on_home_page_switch_button_clicked() const {
// If we are in the home page, do nothing
if (MainWindow::pages_stack->currentIndex() == 0) {
return;
}
std::cout << "Showing home page" << std::endl;
MainWindow::pages_stack->setCurrentIndex(0); // Show the home page
}
void MainWindow::on_fim_page_switch_button_clicked() const {
// If we are in the FIM page, do nothing
if (MainWindow::pages_stack->currentIndex() == 1) {
return;
}
std::cout << "Showing FIM page" << std::endl;
MainWindow::pages_stack->setCurrentIndex(1); // Show the FIM page
}