Repository navigation
Expand file tree
/
Copy pathmainwindow.cpp
More file actions
113 lines (98 loc) · 3.56 KB
/
Copy pathmainwindow.cpp
File metadata and controls
113 lines (98 loc) · 3.56 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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include "mainwindow.h"
#include "control_bar.h"
#include "workspace.h"
#include "progress.h"
#include "tool.h"
#include <QIcon>
#include <QMenu>
#include <QAction>
#include <QShowEvent>
#include <QCloseEvent>
#include <QMessageBox>
#include <QVBoxLayout>
#include <QApplication>
#include <QSystemTrayIcon>
#include <fmt/core.h>
// Kraken token.
// eJyrVkpMTk4tLg7Jz07NU7JSMrIwTjUyNUsxMEhNTjUzN0k0TzNJSku2MDdOS7M0N0xKTktMTEo2T1OqBQAZ2hIa
Window::Window(): QDialog(),
controlbar_{new ControlBar},
workspace_{new Workspace},
progress_{new Progress},
tray_{new QSystemTrayIcon(this)},
tray_menu_{new QMenu},
app_icon_{":/img/speaker"},
minimize_action_{new QAction("Minimize")},
maximize_action_{new QAction("Maximize")},
restore_action_{new QAction{"Restore"}},
quit_action_{new QAction("Quit")},
msg_action_{new QAction("Message")},
play_action_{new QAction("Play")},
pause_action_{new QAction("Pause")}
{
setWindowTitle(tool::app_complete_name());
connect(minimize_action_, &QAction::triggered, this, &QWidget::hide);
connect(maximize_action_, &QAction::triggered, this, &QWidget::showMaximized);
connect(restore_action_ , &QAction::triggered, this, &QWidget::showNormal);
connect(quit_action_ , &QAction::triggered, qApp, &QCoreApplication::quit);
connect(msg_action_ , &QAction::triggered, this, [this] (auto _) {
show_message();
});
// Create menu
tray_menu_->addAction(minimize_action_);
tray_menu_->addAction(maximize_action_);
tray_menu_->addAction(restore_action_);
tray_menu_->addSeparator();
tray_menu_->addAction(play_action_);
tray_menu_->addAction(pause_action_);
tray_menu_->addAction(msg_action_);
tray_menu_->addSeparator();
tray_menu_->addAction(quit_action_);
tray_->setContextMenu(tray_menu_);
// Set app the same icon and for tray and for window.
tray_->setIcon(app_icon_);
tray_->setToolTip("Amadeus");
setWindowIcon(app_icon_);
// When user click tray icon with left mouse button then show/hide main window.
connect(tray_, &QSystemTrayIcon::activated, this, [this] (auto _) {
isVisible() ? hide() : show();
});
// layout of window
QVBoxLayout *main_layout = new QVBoxLayout;
main_layout->addWidget(controlbar_);
main_layout->addWidget(workspace_);
main_layout->addWidget(progress_);
setLayout(main_layout);
tray_->show();
tool::resize(this, 60, 60);
}
void Window::setVisible(bool const visible) {
minimize_action_->setEnabled(visible);
maximize_action_->setEnabled(!isMaximized());
restore_action_->setEnabled(isMaximized() || !visible);
QDialog::setVisible(visible);
}
/// We ignore close event.
/// User should explicity close app from tray-menu.
void Window::closeEvent(QCloseEvent* const event) {
if (!event->spontaneous() || !isVisible())
return;
if (tray_->isVisible()) {
if (first_time_) {
// this message is displayed only one time (when starting the app)
first_time_ = false;
QMessageBox::information(this, tool::PROGRAM,
"The program will keep running in the "
"system tray. To terminate the program, "
"choose <b>Quit</b> in the context menu "
"of the system tray entry.");
}
hide();
event->ignore();
}
}
void Window::show_message() {
// tray_->showMessage("Tytul", player_->source().path(), app_icon_, 15 * 1000);
}
void Window::showEvent(QShowEvent* e) {
}