comparison src/gui/window.cpp @ 51:75c804f713b2

window: add about window, *: use tr() when applicable (useful for i18n)
author Paper <mrpapersonic@gmail.com>
date Mon, 25 Sep 2023 20:29:26 -0400
parents e613772f41d5
children 466ac9870df9
comparison
equal deleted inserted replaced
50:10868c3fb2be 51:75c804f713b2
1 #include "gui/window.h" 1 #include "gui/window.h"
2 #include "core/config.h" 2 #include "core/config.h"
3 #include "core/session.h" 3 #include "core/session.h"
4 #include "gui/dark_theme.h" 4 #include "gui/dark_theme.h"
5 #include "gui/dialog/settings.h" 5 #include "gui/dialog/settings.h"
6 #include "gui/dialog/about.h"
6 #include "gui/pages/anime_list.h" 7 #include "gui/pages/anime_list.h"
7 #include "gui/pages/now_playing.h" 8 #include "gui/pages/now_playing.h"
8 #include "gui/pages/statistics.h" 9 #include "gui/pages/statistics.h"
9 #include "gui/widgets/sidebar.h" 10 #include "gui/widgets/sidebar.h"
10 #include "services/services.h" 11 #include "services/services.h"
35 36
36 MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) { 37 MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) {
37 main_widget = new QWidget(parent); 38 main_widget = new QWidget(parent);
38 39
39 SideBar* sidebar = new SideBar(main_widget); 40 SideBar* sidebar = new SideBar(main_widget);
40 sidebar->AddItem("Now Playing", SideBar::CreateIcon(":/icons/16x16/film.png")); 41 sidebar->AddItem(tr("Now Playing"), SideBar::CreateIcon(":/icons/16x16/film.png"));
41 sidebar->AddSeparator(); 42 sidebar->AddSeparator();
42 sidebar->AddItem("Anime List", SideBar::CreateIcon(":/icons/16x16/document-list.png")); 43 sidebar->AddItem(tr("Anime List"), SideBar::CreateIcon(":/icons/16x16/document-list.png"));
43 sidebar->AddItem("History", SideBar::CreateIcon(":/icons/16x16/clock-history-frame.png")); 44 sidebar->AddItem(tr("History"), SideBar::CreateIcon(":/icons/16x16/clock-history-frame.png"));
44 sidebar->AddItem("Statistics", SideBar::CreateIcon(":/icons/16x16/chart.png")); 45 sidebar->AddItem(tr("Statistics"), SideBar::CreateIcon(":/icons/16x16/chart.png"));
45 sidebar->AddSeparator(); 46 sidebar->AddSeparator();
46 sidebar->AddItem("Search", SideBar::CreateIcon(":/icons/16x16/magnifier.png")); 47 sidebar->AddItem(tr("Search"), SideBar::CreateIcon(":/icons/16x16/magnifier.png"));
47 sidebar->AddItem("Seasons", SideBar::CreateIcon(":/icons/16x16/calendar.png")); 48 sidebar->AddItem(tr("Seasons"), SideBar::CreateIcon(":/icons/16x16/calendar.png"));
48 sidebar->AddItem("Torrents", SideBar::CreateIcon(":/icons/16x16/feed.png")); 49 sidebar->AddItem(tr("Torrents"), SideBar::CreateIcon(":/icons/16x16/feed.png"));
49 sidebar->setFixedWidth(128); 50 sidebar->setFixedWidth(128);
50 sidebar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); 51 sidebar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
51 52
52 QStackedWidget* stack = new QStackedWidget(main_widget); 53 QStackedWidget* stack = new QStackedWidget(main_widget);
53 stack->addWidget(new NowPlayingWidget(main_widget)); 54 stack->addWidget(new NowPlayingWidget(main_widget));
65 sidebar->setCurrentRow(2); 66 sidebar->setCurrentRow(2);
66 67
67 /* Menu Bar */ 68 /* Menu Bar */
68 QAction* action; 69 QAction* action;
69 QMenuBar* menubar = new QMenuBar(parent); 70 QMenuBar* menubar = new QMenuBar(parent);
70 QMenu* menu = menubar->addMenu("&File"); 71 QMenu* menu = menubar->addMenu(tr("&File"));
71 72
72 QMenu* submenu = menu->addMenu("&Library folders"); 73 QMenu* submenu = menu->addMenu(tr("&Library folders"));
73 action = submenu->addAction("&Add new folder..."); 74 action = submenu->addAction(tr("&Add new folder..."));
74 75
75 action = menu->addAction("&Scan available episodes"); 76 action = menu->addAction(tr("&Scan available episodes"));
76 77
77 menu->addSeparator(); 78 menu->addSeparator();
78 79
79 action = menu->addAction("Play &next episode"); 80 action = menu->addAction(tr("Play &next episode"));
80 action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N)); 81 action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N));
81 action = menu->addAction("Play &random episode"); 82 action = menu->addAction(tr("Play &random episode"));
82 action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_R)); 83 action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_R));
83 84
84 menu->addSeparator(); 85 menu->addSeparator();
85 86
86 action = menu->addAction("E&xit", qApp, &QApplication::quit); 87 action = menu->addAction(tr("E&xit"), qApp, &QApplication::quit);
87 88
88 menu = menubar->addMenu("&Services"); 89 menu = menubar->addMenu(tr("&Services"));
89 action = menu->addAction("Synchronize &list", [this, stack] { 90 action = menu->addAction(tr("Synchronize &list"), [this, stack] {
90 Services::Synchronize(); 91 Services::Synchronize();
91 ((AnimeListWidget*)stack->widget((int)Pages::ANIME_LIST))->Refresh(); 92 ((AnimeListWidget*)stack->widget((int)Pages::ANIME_LIST))->Refresh();
92 }); 93 });
93 action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S)); 94 action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S));
94 95
95 menu->addSeparator(); 96 menu->addSeparator();
96 97
97 submenu = menu->addMenu("&AniList"); 98 submenu = menu->addMenu(tr("&AniList"));
98 action = submenu->addAction("Go to my &profile"); 99 action = submenu->addAction(tr("Go to my &profile"));
99 action = submenu->addAction("Go to my &stats"); 100 action = submenu->addAction(tr("Go to my &stats"));
100 101
101 submenu = menu->addMenu("&Kitsu"); 102 submenu = menu->addMenu(tr("&Kitsu"));
102 action = submenu->addAction("Go to my &feed"); 103 action = submenu->addAction(tr("Go to my &feed"));
103 action = submenu->addAction("Go to my &library"); 104 action = submenu->addAction(tr("Go to my &library"));
104 action = submenu->addAction("Go to my &profile"); 105 action = submenu->addAction(tr("Go to my &profile"));
105 106
106 submenu = menu->addMenu("&MyAnimeList"); 107 submenu = menu->addMenu(tr("&MyAnimeList"));
107 action = submenu->addAction("Go to my p&anel"); 108 action = submenu->addAction(tr("Go to my p&anel"));
108 action = submenu->addAction("Go to my &profile"); 109 action = submenu->addAction(tr("Go to my &profile"));
109 action = submenu->addAction("Go to my &history"); 110 action = submenu->addAction(tr("Go to my &history"));
110 111
111 menu = menubar->addMenu("&Tools"); 112 menu = menubar->addMenu(tr("&Tools"));
112 submenu = menu->addMenu("&Export anime list"); 113 submenu = menu->addMenu(tr("&Export anime list"));
113 action = submenu->addAction("Export as &Markdown..."); 114 action = submenu->addAction(tr("Export as &Markdown..."));
114 action = submenu->addAction("Export as MyAnimeList &XML..."); 115 action = submenu->addAction(tr("Export as MyAnimeList &XML..."));
115 116
116 menu->addSeparator(); 117 menu->addSeparator();
117 118
118 action = menu->addAction("Enable anime &recognition"); 119 action = menu->addAction(tr("Enable anime &recognition"));
119 action->setCheckable(true); 120 action->setCheckable(true);
120 action = menu->addAction("Enable auto &sharing"); 121 action = menu->addAction(tr("Enable auto &sharing"));
121 action->setCheckable(true); 122 action->setCheckable(true);
122 action = menu->addAction("Enable &auto synchronization"); 123 action = menu->addAction(tr("Enable &auto synchronization"));
123 action->setCheckable(true); 124 action->setCheckable(true);
124 125
125 menu->addSeparator(); 126 menu->addSeparator();
126 127
127 action = menu->addAction("&Settings", [this] { 128 action = menu->addAction(tr("&Settings"), [this] {
128 SettingsDialog dialog(this); 129 SettingsDialog dialog(this);
129 dialog.exec(); 130 dialog.exec();
130 }); 131 });
131 action->setMenuRole(QAction::PreferencesRole); 132 action->setMenuRole(QAction::PreferencesRole);
132 133
133 menu = menubar->addMenu("&View"); 134 menu = menubar->addMenu(tr("&View"));
134 135
135 std::map<QAction*, int> page_to_index_map = {}; 136 std::map<QAction*, int> page_to_index_map = {};
136 137
137 QActionGroup* pages_group = new QActionGroup(this); 138 QActionGroup* pages_group = new QActionGroup(this);
138 pages_group->setExclusive(true); 139 pages_group->setExclusive(true);
139 140
140 action = pages_group->addAction(menu->addAction("&Now Playing")); 141 action = pages_group->addAction(menu->addAction(tr("&Now Playing")));
141 action->setCheckable(true); 142 action->setCheckable(true);
142 page_to_index_map[action] = 0; 143 page_to_index_map[action] = 0;
143 144
144 action = pages_group->addAction(menu->addAction("&Anime List")); 145 action = pages_group->addAction(menu->addAction(tr("&Anime List")));
145 page_to_index_map[action] = 1; 146 page_to_index_map[action] = 1;
146 147
147 action->setCheckable(true); 148 action->setCheckable(true);
148 action->setChecked(true); 149 action->setChecked(true);
149 action = pages_group->addAction(menu->addAction("&History")); 150 action = pages_group->addAction(menu->addAction(tr("&History")));
150 action->setCheckable(true); 151 action->setCheckable(true);
151 page_to_index_map[action] = 2; 152 page_to_index_map[action] = 2;
152 153
153 action = pages_group->addAction(menu->addAction("&Statistics")); 154 action = pages_group->addAction(menu->addAction(tr("&Statistics")));
154 action->setCheckable(true); 155 action->setCheckable(true);
155 page_to_index_map[action] = 3; 156 page_to_index_map[action] = 3;
156 157
157 action = pages_group->addAction(menu->addAction("S&earch")); 158 action = pages_group->addAction(menu->addAction(tr("S&earch")));
158 action->setCheckable(true); 159 action->setCheckable(true);
159 page_to_index_map[action] = 4; 160 page_to_index_map[action] = 4;
160 161
161 action = pages_group->addAction(menu->addAction("Se&asons")); 162 action = pages_group->addAction(menu->addAction(tr("Se&asons")));
162 action->setCheckable(true); 163 action->setCheckable(true);
163 page_to_index_map[action] = 5; 164 page_to_index_map[action] = 5;
164 165
165 action = pages_group->addAction(menu->addAction("&Torrents")); 166 action = pages_group->addAction(menu->addAction(tr("&Torrents")));
166 action->setCheckable(true); 167 action->setCheckable(true);
167 page_to_index_map[action] = 6; 168 page_to_index_map[action] = 6;
168 169
169 connect(pages_group, &QActionGroup::triggered, this, [page_to_index_map, stack](QAction* action) { 170 connect(pages_group, &QActionGroup::triggered, this, [page_to_index_map, stack](QAction* action) {
170 int index = page_to_index_map.at(action); 171 int index = page_to_index_map.at(action);
174 case 3: stack->setCurrentIndex(2); 175 case 3: stack->setCurrentIndex(2);
175 default: break; 176 default: break;
176 } 177 }
177 }); 178 });
178 menu->addSeparator(); 179 menu->addSeparator();
179 menu->addAction("Show sidebar"); 180 menu->addAction(tr("Show sidebar"));
180 181
181 menu = menubar->addMenu("&Help"); 182 menu = menubar->addMenu(tr("&Help"));
182 action = menu->addAction("About &Qt", qApp, [this] { qApp->aboutQt(); }); 183 action = menu->addAction(tr("About Minori"), this, [this] {
184 AboutWindow dialog(this);
185 dialog.exec();
186 });
187 action = menu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt);
183 action->setMenuRole(QAction::AboutQtRole); 188 action->setMenuRole(QAction::AboutQtRole);
184 189
185 setMenuBar(menubar); 190 setMenuBar(menubar);
186 191
187 QHBoxLayout* layout = new QHBoxLayout(main_widget); 192 QHBoxLayout* layout = new QHBoxLayout(main_widget);