1 #include <QApplication>
2 #include <QLabel>
3 #include <QStackedWidget>
4 #include <QButtonGroup>
5
6 #include "qt_options.h"
7 #include "viewoptionsdialog.h"
8
9 #ifndef CXX_BUILD
10 extern "C" {
11 #endif
12
13 #include <string/stdstring.h>
14
15 #include "../../../gfx/video_display_server.h"
16 #include "../../../input/input_driver.h"
17 #include "../../../input/input_remapping.h"
18 #include "../../../network/netplay/netplay.h"
19 #include "../../../retroarch.h"
20
21 #include "../../../verbosity.h"
22
23 #ifndef CXX_BUILD
24 }
25 #endif
26
AchievementsCategory(QWidget * parent)27 AchievementsCategory::AchievementsCategory(QWidget *parent) :
28 OptionsCategory(parent)
29 {
30 setDisplayName(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS);
31 setCategoryIcon("menu_achievements");
32 }
33
pages()34 QVector<OptionsPage*> AchievementsCategory::pages()
35 {
36 QVector<OptionsPage*> pages;
37
38 pages << new AchievementsPage(this);
39
40 return pages;
41 }
42
AchievementsPage(QObject * parent)43 AchievementsPage::AchievementsPage(QObject *parent) :
44 OptionsPage(parent)
45 {
46 }
47
widget()48 QWidget *AchievementsPage::widget()
49 {
50 unsigned i;
51 QWidget *widget = new QWidget;
52 QVBoxLayout *layout = new QVBoxLayout;
53 enum msg_hash_enums check_setting = MENU_ENUM_LABEL_CHEEVOS_ENABLE;
54 CheckableSettingsGroup *group = new CheckableSettingsGroup(check_setting);
55 settings_t *settings = config_get_ptr();
56 file_list_t *list = (file_list_t*)calloc(1, sizeof(*list));
57 menu_displaylist_build_list(list, settings,
58 DISPLAYLIST_RETRO_ACHIEVEMENTS_SETTINGS_LIST, true);
59
60 for (i = 0; i < list->size; i++)
61 {
62 menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
63 file_list_get_actiondata_at_offset(list, i);
64
65 if (cbs->enum_idx == check_setting)
66 continue;
67
68 group->add(cbs->enum_idx);
69 }
70
71 file_list_free(list);
72
73 layout->addWidget(group);
74
75 layout->addStretch();
76
77 widget->setLayout(layout);
78
79 return widget;
80 }
81
AudioCategory(QWidget * parent)82 AudioCategory::AudioCategory(QWidget *parent) :
83 OptionsCategory(parent)
84 {
85 setDisplayName(MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS);
86 setCategoryIcon("menu_audio");
87 }
88
pages()89 QVector<OptionsPage*> AudioCategory::pages()
90 {
91 QVector<OptionsPage*> pages;
92
93 pages << new AudioPage(this);
94 pages << new MenuSoundsPage(this);
95
96 return pages;
97 }
98
AudioPage(QObject * parent)99 AudioPage::AudioPage(QObject *parent) :
100 OptionsPage(parent)
101 {
102 }
103
widget()104 QWidget *AudioPage::widget()
105 {
106 QWidget *widget = new QWidget;
107 QVBoxLayout *layout = new QVBoxLayout;
108 SettingsGroup *outputGroup = new SettingsGroup("Output");
109 SettingsGroup *resamplerGroup = new SettingsGroup("Resampler");
110 SettingsGroup *syncGroup = new SettingsGroup(msg_hash_to_str(
111 MENU_ENUM_LABEL_VALUE_AUDIO_SYNC));
112 SettingsGroup *dspGroup = new SettingsGroup("DSP plugin");
113 SettingsGroup *volumeGroup = new SettingsGroup("Volume");
114 QGridLayout *volumeLayout = new QGridLayout();
115
116 outputGroup->add(MENU_ENUM_LABEL_AUDIO_ENABLE);
117 outputGroup->add(MENU_ENUM_LABEL_AUDIO_DRIVER);
118 outputGroup->add(MENU_ENUM_LABEL_AUDIO_DEVICE);
119 outputGroup->add(MENU_ENUM_LABEL_AUDIO_LATENCY);
120
121 resamplerGroup->add(MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER);
122 resamplerGroup->add(MENU_ENUM_LABEL_AUDIO_RESAMPLER_QUALITY);
123 resamplerGroup->add(MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE);
124
125 syncGroup->add(MENU_ENUM_LABEL_AUDIO_SYNC);
126 syncGroup->add(MENU_ENUM_LABEL_AUDIO_MAX_TIMING_SKEW);
127 syncGroup->add(MENU_ENUM_LABEL_AUDIO_RATE_CONTROL_DELTA);
128
129 dspGroup->add(MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN);
130
131 volumeLayout->addWidget(new QLabel(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME), widget),
132 1, 1);
133 volumeLayout->addWidget(new CheckableIcon(MENU_ENUM_LABEL_AUDIO_MUTE, qApp->style()->standardIcon(QStyle::SP_MediaVolumeMuted)),
134 1, 2);
135 volumeLayout->addLayout(new FloatSliderAndSpinBox(MENU_ENUM_LABEL_AUDIO_VOLUME),
136 1, 3, 1, 1);
137
138 volumeLayout->addWidget(new QLabel(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_AUDIO_MIXER_VOLUME), widget),
139 2, 1);
140 volumeLayout->addWidget(new CheckableIcon(MENU_ENUM_LABEL_AUDIO_MIXER_MUTE, qApp->style()->standardIcon(QStyle::SP_MediaVolumeMuted)),
141 2, 2);
142 volumeLayout->addLayout(new FloatSliderAndSpinBox(MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME),
143 2, 3, 1, 1);
144
145 volumeGroup->addRow(volumeLayout);
146 volumeGroup->add(MENU_ENUM_LABEL_AUDIO_FASTFORWARD_MUTE);
147
148 layout->addWidget(outputGroup);
149 layout->addWidget(resamplerGroup);
150 layout->addWidget(syncGroup);
151 layout->addWidget(dspGroup);
152 layout->addWidget(volumeGroup);
153
154 layout->addStretch();
155
156 widget->setLayout(layout);
157
158 return widget;
159 }
160
MenuSoundsPage(QObject * parent)161 MenuSoundsPage::MenuSoundsPage(QObject *parent) :
162 OptionsPage(parent)
163 {
164 setDisplayName(MENU_ENUM_LABEL_VALUE_MENU_SOUNDS);
165 }
166
widget()167 QWidget *MenuSoundsPage::widget()
168 {
169 return create_widget(DISPLAYLIST_MENU_SOUNDS_LIST);
170 }
171
InputCategory(QWidget * parent)172 InputCategory::InputCategory(QWidget *parent) :
173 OptionsCategory(parent)
174 {
175 setDisplayName(MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS);
176 setCategoryIcon("core-input-remapping-options");
177 }
178
pages()179 QVector<OptionsPage*> InputCategory::pages()
180 {
181 QVector<OptionsPage*> pages;
182
183 pages << new InputPage(this);
184 pages << new HotkeyBindsPage(this);
185
186 return pages;
187 }
188
InputPage(QObject * parent)189 InputPage::InputPage(QObject *parent) :
190 OptionsPage(parent)
191 {
192 }
193
widget()194 QWidget *InputPage::widget()
195 {
196 unsigned i;
197 QWidget *widget = new QWidget;
198 FormLayout *layout = new FormLayout;
199 settings_t *settings = config_get_ptr();
200 file_list_t *list = (file_list_t*)calloc(1, sizeof(*list));
201
202 menu_displaylist_build_list(list, settings,
203 DISPLAYLIST_INPUT_SETTINGS_LIST, true);
204
205 for (i = 0; i < list->size; i++)
206 {
207 menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
208 file_list_get_actiondata_at_offset(list, i);
209
210 if (cbs->enum_idx == MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS)
211 break;
212
213 layout->add(cbs->enum_idx);
214 }
215
216 file_list_free(list);
217
218 widget->setLayout(layout);
219
220 return widget;
221 }
222
HotkeyBindsPage(QObject * parent)223 HotkeyBindsPage::HotkeyBindsPage(QObject *parent) :
224 OptionsPage(parent)
225 {
226 setDisplayName(MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS);
227 }
228
widget()229 QWidget *HotkeyBindsPage::widget()
230 {
231 unsigned i;
232 QWidget *widget = new QWidget;
233 QHBoxLayout *layout = new QHBoxLayout;
234 FormLayout *mainLayout = new FormLayout;
235 settings_t *settings = config_get_ptr();
236 file_list_t *list = (file_list_t*)calloc(1, sizeof(*list));
237
238 menu_displaylist_build_list(list, settings,
239 DISPLAYLIST_INPUT_HOTKEY_BINDS_LIST, true);
240
241 for (i = 0; i < list->size; i++)
242 {
243 menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
244 file_list_get_actiondata_at_offset(list, i);
245
246 mainLayout->add(cbs->enum_idx);
247 }
248
249 file_list_free(list);
250
251 layout->addLayout(mainLayout);
252
253 widget->setLayout(layout);
254
255 return widget;
256 }
257
UserBindsPage(QObject * parent)258 UserBindsPage::UserBindsPage(QObject *parent) :
259 OptionsPage(parent)
260 {
261 setDisplayName("User Binds");
262 }
263
widget()264 QWidget *UserBindsPage::widget()
265 {
266 unsigned p, retro_id;
267 unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
268 QWidget *widget = new QWidget;
269 QGridLayout *layout = new QGridLayout;
270 QComboBox *userCombo = new QComboBox;
271 QStackedWidget *stack = new QStackedWidget;
272
273 for (p = 0; p < max_users; p++)
274 {
275 userCombo->addItem(QString::number(p));
276
277 QWidget *uWidget = new QWidget();
278 FormLayout *form = new FormLayout();
279
280 for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND + 20; retro_id++)
281 {
282 char descriptor[300];
283 const struct retro_keybind *keybind =
284 &input_config_binds[p][retro_id];
285 const struct retro_keybind *auto_bind =
286 (const struct retro_keybind*)
287 input_config_get_bind_auto(p, retro_id);
288
289 input_config_get_bind_string(descriptor,
290 keybind, auto_bind, sizeof(descriptor));
291
292 const struct retro_keybind *keyptr =
293 &input_config_binds[p][retro_id];
294
295 QString label = msg_hash_to_str(keyptr->enum_idx);
296
297 form->addRow(QString(msg_hash_to_str(keyptr->enum_idx)),
298 new QPushButton(QString(descriptor)));
299 }
300
301 uWidget->setLayout(form);
302
303 stack->addWidget(uWidget);
304 }
305
306 connect(userCombo, SIGNAL(activated(int)),
307 stack, SLOT(setCurrentIndex(int)));
308
309 layout->addWidget(userCombo, 0, 0);
310 layout->addWidget(stack, 1, 0);
311
312 widget->setLayout(layout);
313
314 return widget;
315 }
316
LatencyCategory(QWidget * parent)317 LatencyCategory::LatencyCategory(QWidget *parent) :
318 OptionsCategory(parent)
319 {
320 setDisplayName(MENU_ENUM_LABEL_VALUE_LATENCY_SETTINGS);
321 setCategoryIcon("menu_latency");
322 }
323
pages()324 QVector<OptionsPage*> LatencyCategory::pages()
325 {
326 QVector<OptionsPage*> pages;
327
328 pages << new LatencyPage(this);
329
330 return pages;
331 }
332
LatencyPage(QObject * parent)333 LatencyPage::LatencyPage(QObject *parent) :
334 OptionsPage(parent)
335 {
336 }
337
widget()338 QWidget *LatencyPage::widget()
339 {
340 QWidget *widget = new QWidget;
341 FormLayout *layout = new FormLayout;
342 CheckableSettingsGroup *runAheadGpuSync = new CheckableSettingsGroup(MENU_ENUM_LABEL_RUN_AHEAD_ENABLED);
343
344 rarch_setting_t *hardSyncSetting = menu_setting_find_enum(MENU_ENUM_LABEL_VIDEO_HARD_SYNC);
345
346 if (hardSyncSetting)
347 {
348 CheckableSettingsGroup *hardSyncGroup = new CheckableSettingsGroup(hardSyncSetting);
349
350 hardSyncGroup->add(MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES);
351
352 layout->addRow(hardSyncGroup);
353 }
354
355 layout->add(MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES);
356
357 layout->add(MENU_ENUM_LABEL_VIDEO_FRAME_DELAY);
358 layout->add(MENU_ENUM_LABEL_AUDIO_LATENCY);
359 layout->add(MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR);
360
361 runAheadGpuSync->add(MENU_ENUM_LABEL_RUN_AHEAD_FRAMES);
362 runAheadGpuSync->add(MENU_ENUM_LABEL_RUN_AHEAD_SECONDARY_INSTANCE);
363 runAheadGpuSync->add(MENU_ENUM_LABEL_RUN_AHEAD_HIDE_WARNINGS);
364 layout->addRow(runAheadGpuSync);
365
366 widget->setLayout(layout);
367
368 return widget;
369 }
370
NetworkCategory(QWidget * parent)371 NetworkCategory::NetworkCategory(QWidget *parent) :
372 OptionsCategory(parent)
373 {
374 setDisplayName(MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS);
375 setCategoryIcon("menu_network");
376 }
377
pages()378 QVector<OptionsPage*> NetworkCategory::pages()
379 {
380 QVector<OptionsPage*> pages;
381
382 pages << new NetplayPage(this);
383 pages << new UpdaterPage(this);
384
385 return pages;
386 }
387
NetplayPage(QObject * parent)388 NetplayPage::NetplayPage(QObject *parent) :
389 OptionsPage(parent)
390 {
391 setDisplayName(MENU_ENUM_LABEL_VALUE_NETPLAY);
392 }
393
widget()394 QWidget *NetplayPage::widget()
395 {
396 QWidget *widget = new QWidget;
397 QGridLayout *layout = new QGridLayout;
398 FormLayout *checksLayout = new FormLayout;
399 QGroupBox *serverGroup = new QGroupBox("Server");
400 SettingsGroup *syncGroup = new SettingsGroup("Synchronization");
401 SettingsGroup *slaveGroup = new SettingsGroup("Slave-Mode");
402 SettingsGroup *inputGroup = new SettingsGroup("Input Sharing");
403 SettingsGroup *deviceGroup = new SettingsGroup("Device Request");
404 FormLayout *serverForm = new FormLayout;
405 QHBoxLayout *serverLayout = new QHBoxLayout;
406 QVBoxLayout *mainLayout = new QVBoxLayout;
407 QGridLayout *requestGrid = new QGridLayout;
408 unsigned i = 0;
409 unsigned row = 0;
410 unsigned column = 0;
411
412 checksLayout->add(MENU_ENUM_LABEL_NETPLAY_PUBLIC_ANNOUNCE);
413 checksLayout->add(MENU_ENUM_LABEL_NETPLAY_START_AS_SPECTATOR);
414 checksLayout->add(MENU_ENUM_LABEL_NETWORK_ON_DEMAND_THUMBNAILS);
415
416 serverForm->add(MENU_ENUM_LABEL_NETPLAY_IP_ADDRESS);
417 serverForm->add(MENU_ENUM_LABEL_NETPLAY_TCP_UDP_PORT);
418 serverForm->add(MENU_ENUM_LABEL_NETPLAY_PASSWORD);
419 serverForm->add(MENU_ENUM_LABEL_NETPLAY_SPECTATE_PASSWORD);
420 serverForm->add(MENU_ENUM_LABEL_NETPLAY_NAT_TRAVERSAL);
421
422 serverLayout->addWidget(createMitmServerGroup());
423 serverLayout->addSpacing(30);
424 serverLayout->addLayout(serverForm);
425
426 serverGroup->setLayout(serverLayout);
427
428 slaveGroup->add(MENU_ENUM_LABEL_NETPLAY_ALLOW_SLAVES);
429 slaveGroup->add(MENU_ENUM_LABEL_NETPLAY_REQUIRE_SLAVES);
430
431 syncGroup->add(MENU_ENUM_LABEL_NETPLAY_STATELESS_MODE);
432 syncGroup->add(MENU_ENUM_LABEL_NETPLAY_CHECK_FRAMES);
433 syncGroup->add(MENU_ENUM_LABEL_NETPLAY_INPUT_LATENCY_FRAMES_MIN);
434 syncGroup->add(MENU_ENUM_LABEL_NETPLAY_INPUT_LATENCY_FRAMES_RANGE);
435
436 inputGroup->add(MENU_ENUM_LABEL_NETPLAY_SHARE_DIGITAL);
437 inputGroup->add(MENU_ENUM_LABEL_NETPLAY_SHARE_ANALOG);
438
439 for (i = 0; i < MAX_USERS; i++)
440 {
441 if (column % 4 == 0)
442 {
443 column = 0;
444 row++;
445 }
446 requestGrid->addWidget(new CheckBox((enum msg_hash_enums)(MENU_ENUM_LABEL_NETPLAY_REQUEST_DEVICE_1 + i)), row, column);
447 column++;
448 }
449
450 deviceGroup->addRow(requestGrid);
451
452 layout->addLayout(checksLayout, 0, 0, 1, 2);
453 layout->addWidget(serverGroup, 1, 0, 1, 2);
454 layout->addWidget(slaveGroup, 2, 0, 1, 1);
455 layout->addWidget(syncGroup, 2, 1, 2, 1);
456 layout->addWidget(inputGroup, 3, 0, 1, 1);
457 layout->addWidget(deviceGroup, 4, 0, 1, 2);
458
459 mainLayout->addLayout(layout);
460
461 mainLayout->addStretch();
462
463 widget->setLayout(mainLayout);
464
465 return widget;
466 }
467
createMitmServerGroup()468 QGroupBox *NetplayPage::createMitmServerGroup()
469 {
470 unsigned i;
471 CheckableSettingsGroup *groupBox = new CheckableSettingsGroup(
472 MENU_ENUM_LABEL_NETPLAY_USE_MITM_SERVER);
473 QButtonGroup *buttonGroup = new QButtonGroup(this);
474 unsigned list_len = ARRAY_SIZE(netplay_mitm_server_list);
475 rarch_setting_t *setting = menu_setting_find_enum(
476 MENU_ENUM_LABEL_NETPLAY_MITM_SERVER);
477
478 if (!setting)
479 return nullptr;
480
481 for (i = 0; i < list_len; i++)
482 {
483 QRadioButton *radioButton = new QRadioButton(
484 netplay_mitm_server_list[i].description);
485
486 /* find the currently selected server in the list */
487 if (string_is_equal(setting->value.target.string,
488 netplay_mitm_server_list[i].name))
489 radioButton->setChecked(true);
490
491 buttonGroup->addButton(radioButton, i);
492
493 groupBox->addRow(radioButton);
494 }
495
496 connect(buttonGroup, SIGNAL(buttonClicked(int)),
497 this, SLOT(onRadioButtonClicked(int)));
498
499 return groupBox;
500 }
501
onRadioButtonClicked(int id)502 void NetplayPage::onRadioButtonClicked(int id)
503 {
504 rarch_setting_t *setting =
505 menu_setting_find_enum(MENU_ENUM_LABEL_NETPLAY_MITM_SERVER);
506
507 if (!setting)
508 return;
509
510 strlcpy(setting->value.target.string,
511 netplay_mitm_server_list[id].name, setting->size);
512 }
513
UpdaterPage(QObject * parent)514 UpdaterPage::UpdaterPage(QObject *parent) :
515 OptionsPage(parent)
516 {
517 setDisplayName(MENU_ENUM_LABEL_VALUE_UPDATER_SETTINGS);
518 }
519
widget()520 QWidget *UpdaterPage::widget()
521 {
522 return create_widget(DISPLAYLIST_UPDATER_SETTINGS_LIST);
523 }
524
OnscreenDisplayCategory(QWidget * parent)525 OnscreenDisplayCategory::OnscreenDisplayCategory(QWidget *parent) :
526 OptionsCategory(parent)
527 {
528 setDisplayName(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS);
529 setCategoryIcon("menu_osd");
530 }
531
pages()532 QVector<OptionsPage*> OnscreenDisplayCategory::pages()
533 {
534 QVector<OptionsPage*> pages;
535
536 pages << new OverlayPage(this);
537 pages << new NotificationsPage(this);
538
539 return pages;
540 }
541
NotificationsPage(QObject * parent)542 NotificationsPage::NotificationsPage(QObject *parent) :
543 OptionsPage(parent)
544 {
545 setDisplayName(MENU_ENUM_LABEL_VALUE_ONSCREEN_NOTIFICATIONS_SETTINGS);
546 }
547
widget()548 QWidget *NotificationsPage::widget()
549 {
550 QWidget *widget = new QWidget;
551 QVBoxLayout *layout = new QVBoxLayout;
552 CheckableSettingsGroup *notificationsGroup = new CheckableSettingsGroup(MENU_ENUM_LABEL_VIDEO_FONT_ENABLE);
553 CheckableSettingsGroup *bgGroup = new CheckableSettingsGroup(MENU_ENUM_LABEL_VIDEO_MESSAGE_BGCOLOR_ENABLE);
554
555 notificationsGroup->add(MENU_ENUM_LABEL_FPS_SHOW);
556 notificationsGroup->add(MENU_ENUM_LABEL_FPS_UPDATE_INTERVAL);
557 notificationsGroup->add(MENU_ENUM_LABEL_FRAMECOUNT_SHOW);
558 notificationsGroup->add(MENU_ENUM_LABEL_MEMORY_SHOW);
559 notificationsGroup->add(MENU_ENUM_LABEL_MEMORY_UPDATE_INTERVAL);
560 notificationsGroup->add(MENU_ENUM_LABEL_STATISTICS_SHOW);
561 notificationsGroup->add(MENU_ENUM_LABEL_VIDEO_FONT_PATH);
562 notificationsGroup->add(MENU_ENUM_LABEL_VIDEO_FONT_SIZE);
563 notificationsGroup->add(MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_X);
564 notificationsGroup->add(MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_Y);
565 notificationsGroup->addRow("Notification Color: ", new FloatColorButton(
566 MENU_ENUM_LABEL_VIDEO_MESSAGE_COLOR_RED,
567 MENU_ENUM_LABEL_VIDEO_MESSAGE_COLOR_GREEN,
568 MENU_ENUM_LABEL_VIDEO_MESSAGE_COLOR_BLUE));
569
570 bgGroup->addRow("Notification Background Color: ", new UIntColorButton(
571 MENU_ENUM_LABEL_VIDEO_MESSAGE_BGCOLOR_RED,
572 MENU_ENUM_LABEL_VIDEO_MESSAGE_BGCOLOR_GREEN,
573 MENU_ENUM_LABEL_VIDEO_MESSAGE_BGCOLOR_BLUE));
574 bgGroup->add(MENU_ENUM_LABEL_VIDEO_MESSAGE_BGCOLOR_OPACITY);
575
576 notificationsGroup->addRow(bgGroup);
577
578 notificationsGroup->add(MENU_ENUM_LABEL_MENU_WIDGETS_ENABLE);
579 notificationsGroup->add(MENU_ENUM_LABEL_MENU_WIDGET_SCALE_AUTO);
580 notificationsGroup->add(MENU_ENUM_LABEL_MENU_WIDGET_SCALE_FACTOR);
581 #if !(defined(RARCH_CONSOLE) || defined(RARCH_MOBILE))
582 notificationsGroup->add(MENU_ENUM_LABEL_MENU_WIDGET_SCALE_FACTOR_WINDOWED);
583 #endif
584 notificationsGroup->add(MENU_ENUM_LABEL_MENU_SHOW_LOAD_CONTENT_ANIMATION);
585 notificationsGroup->add(MENU_ENUM_LABEL_NOTIFICATION_SHOW_AUTOCONFIG);
586 notificationsGroup->add(MENU_ENUM_LABEL_NOTIFICATION_SHOW_REMAP_LOAD);
587 notificationsGroup->add(MENU_ENUM_LABEL_NOTIFICATION_SHOW_CONFIG_OVERRIDE_LOAD);
588 notificationsGroup->add(MENU_ENUM_LABEL_NOTIFICATION_SHOW_SET_INITIAL_DISK);
589 notificationsGroup->add(MENU_ENUM_LABEL_NOTIFICATION_SHOW_FAST_FORWARD);
590 notificationsGroup->add(MENU_ENUM_LABEL_NOTIFICATION_SHOW_CHEATS_APPLIED);
591 notificationsGroup->add(MENU_ENUM_LABEL_NOTIFICATION_SHOW_SCREENSHOT);
592 notificationsGroup->add(MENU_ENUM_LABEL_NOTIFICATION_SHOW_SCREENSHOT_DURATION);
593 notificationsGroup->add(MENU_ENUM_LABEL_NOTIFICATION_SHOW_SCREENSHOT_FLASH);
594 notificationsGroup->add(MENU_ENUM_LABEL_NOTIFICATION_SHOW_REFRESH_RATE);
595
596 layout->addWidget(notificationsGroup);
597
598 layout->addStretch();
599
600 widget->setLayout(layout);
601
602 return widget;
603 }
604
OverlayPage(QObject * parent)605 OverlayPage::OverlayPage(QObject *parent) :
606 OptionsPage(parent)
607 {
608 setDisplayName(MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS);
609 }
610
widget()611 QWidget *OverlayPage::widget()
612 {
613 QWidget *widget = new QWidget;
614 #if defined(HAVE_OVERLAY)
615 QVBoxLayout *layout = new QVBoxLayout;
616
617 CheckableSettingsGroup *overlayGroup = new CheckableSettingsGroup(MENU_ENUM_LABEL_INPUT_OVERLAY_ENABLE);
618
619 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_AUTOLOAD_PREFERRED);
620 overlayGroup->add(MENU_ENUM_LABEL_INPUT_OVERLAY_AUTO_ROTATE);
621 overlayGroup->add(MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU);
622 overlayGroup->add(MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_WHEN_GAMEPAD_CONNECTED);
623 overlayGroup->add(MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_MOUSE_CURSOR);
624
625 overlayGroup->add(MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_INPUTS);
626 overlayGroup->add(MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_INPUTS_PORT);
627
628 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_PRESET);
629 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_OPACITY);
630 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_SCALE_LANDSCAPE);
631 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_ASPECT_ADJUST_LANDSCAPE);
632 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_X_SEPARATION_LANDSCAPE);
633 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_Y_SEPARATION_LANDSCAPE);
634 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_X_OFFSET_LANDSCAPE);
635 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_Y_OFFSET_LANDSCAPE);
636 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_SCALE_PORTRAIT);
637 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_ASPECT_ADJUST_PORTRAIT);
638 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_X_SEPARATION_PORTRAIT);
639 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_X_OFFSET_PORTRAIT);
640 overlayGroup->add(MENU_ENUM_LABEL_OVERLAY_Y_OFFSET_PORTRAIT);
641
642 layout->addWidget(overlayGroup);
643
644 layout->addStretch();
645
646 widget->setLayout(layout);
647 #endif
648
649 return widget;
650 }
651
PlaylistsCategory(QWidget * parent)652 PlaylistsCategory::PlaylistsCategory(QWidget *parent) : OptionsCategory(parent)
653 {
654 setDisplayName(MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS);
655 setCategoryIcon("menu_playlist");
656 }
657
pages()658 QVector<OptionsPage*> PlaylistsCategory::pages()
659 {
660 QVector<OptionsPage*> pages;
661
662 pages << new PlaylistsPage(this);
663
664 return pages;
665 }
666
PlaylistsPage(QObject * parent)667 PlaylistsPage::PlaylistsPage(QObject *parent) :
668 OptionsPage(parent)
669 {
670 }
671
widget()672 QWidget *PlaylistsPage::widget()
673 {
674 QWidget *widget = new QWidget;
675 FormLayout *layout = new FormLayout;
676 CheckableSettingsGroup *history = new CheckableSettingsGroup(MENU_ENUM_LABEL_HISTORY_LIST_ENABLE);
677
678 history->add(MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE);
679
680 layout->addRow(history);
681
682 layout->add(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME);
683 /*layout->add(MENU_ENUM_LABEL_PLAYLIST_ENTRY_REMOVE); TOFIX */
684 layout->add(MENU_ENUM_LABEL_PLAYLIST_SORT_ALPHABETICAL);
685 layout->add(MENU_ENUM_LABEL_PLAYLIST_USE_OLD_FORMAT);
686 layout->add(MENU_ENUM_LABEL_PLAYLIST_COMPRESSION);
687 layout->add(MENU_ENUM_LABEL_PLAYLIST_SHOW_SUBLABELS);
688 layout->add(MENU_ENUM_LABEL_PLAYLIST_FUZZY_ARCHIVE_MATCH);
689 layout->add(MENU_ENUM_LABEL_SCAN_WITHOUT_CORE_MATCH);
690
691 widget->setLayout(layout);
692
693 return widget;
694 }
695
RecordingCategory(QWidget * parent)696 RecordingCategory::RecordingCategory(QWidget *parent) :
697 OptionsCategory(parent)
698 {
699 setDisplayName(MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS);
700 setCategoryIcon("menu_record");
701 }
702
pages()703 QVector<OptionsPage*> RecordingCategory::pages()
704 {
705 QVector<OptionsPage*> pages;
706
707 pages << new RecordingPage(this);
708
709 return pages;
710 }
711
RecordingPage(QObject * parent)712 RecordingPage::RecordingPage(QObject *parent) :
713 OptionsPage(parent)
714 {
715 }
716
widget()717 QWidget *RecordingPage::widget()
718 {
719 QWidget * widget = new QWidget;
720 QVBoxLayout *layout = new QVBoxLayout;
721 SettingsGroup *recordingGroup = new SettingsGroup("Recording");
722 SettingsGroup *streamingGroup = new SettingsGroup("Streaming");
723 QHBoxLayout *hl = new QHBoxLayout;
724
725 recordingGroup->add(MENU_ENUM_LABEL_VIDEO_RECORD_QUALITY);
726 recordingGroup->add(MENU_ENUM_LABEL_RECORD_CONFIG);
727 recordingGroup->add(MENU_ENUM_LABEL_VIDEO_RECORD_THREADS);
728 recordingGroup->add(MENU_ENUM_LABEL_RECORDING_OUTPUT_DIRECTORY);
729 recordingGroup->add(MENU_ENUM_LABEL_VIDEO_POST_FILTER_RECORD);
730 recordingGroup->add(MENU_ENUM_LABEL_VIDEO_GPU_RECORD);
731
732 hl->addWidget(new UIntRadioButtons(MENU_ENUM_LABEL_STREAMING_MODE));
733 hl->addWidget(new UIntRadioButtons(MENU_ENUM_LABEL_VIDEO_STREAM_QUALITY));
734
735 streamingGroup->addRow(hl);
736
737 streamingGroup->add(MENU_ENUM_LABEL_STREAM_CONFIG);
738 streamingGroup->add(MENU_ENUM_LABEL_STREAMING_TITLE);
739 streamingGroup->add(MENU_ENUM_LABEL_STREAMING_URL);
740 streamingGroup->add(MENU_ENUM_LABEL_UDP_STREAM_PORT);
741
742 layout->addWidget(recordingGroup);
743 layout->addWidget(streamingGroup);
744
745 layout->addStretch();
746
747 widget->setLayout(layout);
748
749 return widget;
750 }
751
SavingCategory(QWidget * parent)752 SavingCategory::SavingCategory(QWidget *parent) :
753 OptionsCategory(parent)
754 {
755 setDisplayName(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS);
756 setCategoryIcon("menu_saving");
757 }
758
pages()759 QVector<OptionsPage*> SavingCategory::pages()
760 {
761 QVector<OptionsPage*> pages;
762
763 pages << new SavingPage(this);
764
765 return pages;
766 }
767
SavingPage(QObject * parent)768 SavingPage::SavingPage(QObject *parent) :
769 OptionsPage(parent)
770 {
771 }
772
widget()773 QWidget *SavingPage::widget()
774 {
775 QWidget *widget = new QWidget;
776 FormLayout *layout = new FormLayout;
777 SettingsGroup *savesGroup = new SettingsGroup("Saves");
778 SettingsGroup *savestatesGroup = new SettingsGroup("Savestates");
779 CheckableSettingsGroup *autoSavestatesGroup = new CheckableSettingsGroup(MENU_ENUM_LABEL_SAVESTATE_AUTO_SAVE);
780 SettingsGroup *saveRamGroup = new SettingsGroup("SaveRAM");
781 SettingsGroup *systemFilesDirGroup = new SettingsGroup("System Files");
782 SettingsGroup *screenshotsDirGroup = new SettingsGroup("Screenshots");
783 SettingsGroup *runtimeLogGroup = new SettingsGroup("Runtime Log");
784
785 savesGroup->add(MENU_ENUM_LABEL_SORT_SAVEFILES_ENABLE);
786 savesGroup->add(MENU_ENUM_LABEL_SORT_SAVEFILES_BY_CONTENT_ENABLE);
787 savesGroup->add(MENU_ENUM_LABEL_SAVEFILES_IN_CONTENT_DIR_ENABLE);
788
789 savestatesGroup->add(MENU_ENUM_LABEL_SAVESTATE_AUTO_INDEX);
790
791 autoSavestatesGroup->add(MENU_ENUM_LABEL_SAVESTATE_AUTO_LOAD);
792
793 savestatesGroup->addRow(autoSavestatesGroup);
794 savestatesGroup->add(MENU_ENUM_LABEL_SAVESTATE_THUMBNAIL_ENABLE);
795 savestatesGroup->add(MENU_ENUM_LABEL_SORT_SAVESTATES_ENABLE);
796 savestatesGroup->add(MENU_ENUM_LABEL_SORT_SAVESTATES_BY_CONTENT_ENABLE);
797 savestatesGroup->add(MENU_ENUM_LABEL_SAVESTATES_IN_CONTENT_DIR_ENABLE);
798 savestatesGroup->add(MENU_ENUM_LABEL_SAVESTATE_FILE_COMPRESSION);
799
800 saveRamGroup->add(MENU_ENUM_LABEL_BLOCK_SRAM_OVERWRITE);
801 saveRamGroup->add(MENU_ENUM_LABEL_AUTOSAVE_INTERVAL);
802 saveRamGroup->add(MENU_ENUM_LABEL_SAVE_FILE_COMPRESSION);
803
804 systemFilesDirGroup->add(MENU_ENUM_LABEL_SYSTEMFILES_IN_CONTENT_DIR_ENABLE);
805
806 screenshotsDirGroup->add(MENU_ENUM_LABEL_SORT_SCREENSHOTS_BY_CONTENT_ENABLE);
807 screenshotsDirGroup->add(MENU_ENUM_LABEL_SCREENSHOTS_IN_CONTENT_DIR_ENABLE);
808
809 runtimeLogGroup->add(MENU_ENUM_LABEL_CONTENT_RUNTIME_LOG);
810 runtimeLogGroup->add(MENU_ENUM_LABEL_CONTENT_RUNTIME_LOG_AGGREGATE);
811
812 layout->addRow(savesGroup);
813 layout->addRow(savestatesGroup);
814 layout->addRow(saveRamGroup);
815 layout->addRow(systemFilesDirGroup);
816 layout->addRow(screenshotsDirGroup);
817 layout->addRow(runtimeLogGroup);
818
819 widget->setLayout(layout);
820
821 return widget;
822 }
823
UserInterfaceCategory(QWidget * parent)824 UserInterfaceCategory::UserInterfaceCategory(QWidget *parent) :
825 OptionsCategory(parent)
826 {
827 setDisplayName(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS);
828 setCategoryIcon("menu_ui");
829 }
830
UserInterfaceCategory(MainWindow * mainwindow,QWidget * parent)831 UserInterfaceCategory::UserInterfaceCategory(MainWindow *mainwindow, QWidget *parent) :
832 OptionsCategory(parent)
833 ,m_mainwindow(mainwindow)
834 {
835 setDisplayName(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS);
836 setCategoryIcon("menu_ui");
837
838 m_pages << new UserInterfacePage(this);
839 m_pages << new ViewsPage(this);
840 m_pages << new AppearancePage(this);
841 m_pages << new DesktopMenuPage(m_mainwindow, this);
842 }
843
pages()844 QVector<OptionsPage*> UserInterfaceCategory::pages()
845 {
846 return m_pages;
847 }
848
UserInterfacePage(QObject * parent)849 UserInterfacePage::UserInterfacePage(QObject *parent) :
850 OptionsPage(parent)
851 {
852 }
853
widget()854 QWidget *UserInterfacePage::widget()
855 {
856 QWidget * widget = new QWidget;
857 QVBoxLayout *layout = new QVBoxLayout;
858 SettingsGroup *menuGroup = new SettingsGroup("Menu");
859 SettingsGroup *inputGroup = new SettingsGroup("Input");
860 SettingsGroup *miscGroup = new SettingsGroup("Miscellaneous");
861 CheckableSettingsGroup *desktopGroup = new CheckableSettingsGroup(MENU_ENUM_LABEL_DESKTOP_MENU_ENABLE);
862 rarch_setting_t *kioskMode = menu_setting_find_enum(MENU_ENUM_LABEL_MENU_ENABLE_KIOSK_MODE);
863
864 menuGroup->add(MENU_ENUM_LABEL_SHOW_ADVANCED_SETTINGS);
865
866 /* only on XMB and Ozone*/
867 if (kioskMode)
868 {
869 CheckableSettingsGroup *kioskGroup = new CheckableSettingsGroup(kioskMode, widget);
870
871 kioskGroup->add(MENU_ENUM_LABEL_MENU_KIOSK_MODE_PASSWORD);
872
873 menuGroup->addRow(kioskGroup);
874 }
875
876 menuGroup->add(MENU_ENUM_LABEL_NAVIGATION_WRAPAROUND);
877 menuGroup->add(MENU_ENUM_LABEL_PAUSE_LIBRETRO);
878
879 inputGroup->add(MENU_ENUM_LABEL_MOUSE_ENABLE);
880 inputGroup->add(MENU_ENUM_LABEL_POINTER_ENABLE);
881
882 menuGroup->addRow(inputGroup);
883 menuGroup->add(MENU_ENUM_LABEL_THREADED_DATA_RUNLOOP_ENABLE);
884
885 miscGroup->add(MENU_ENUM_LABEL_PAUSE_NONACTIVE);
886 miscGroup->add(MENU_ENUM_LABEL_VIDEO_DISABLE_COMPOSITION);
887
888 menuGroup->add(MENU_ENUM_LABEL_UI_COMPANION_ENABLE);
889 menuGroup->add(MENU_ENUM_LABEL_UI_COMPANION_START_ON_BOOT);
890 menuGroup->add(MENU_ENUM_LABEL_UI_MENUBAR_ENABLE);
891 menuGroup->add(MENU_ENUM_LABEL_MENU_SCROLL_FAST);
892
893 /* layout->add(MENU_ENUM_LABEL_DESKTOP_MENU_ENABLE); */
894 desktopGroup->add(MENU_ENUM_LABEL_UI_COMPANION_TOGGLE);
895
896 layout->addWidget(menuGroup);
897 layout->addWidget(miscGroup);
898 layout->addWidget(desktopGroup);
899 layout->addStretch();
900
901 widget->setLayout(layout);
902
903 return widget;
904 }
905
ViewsPage(QObject * parent)906 ViewsPage::ViewsPage(QObject *parent) :
907 OptionsPage(parent)
908 {
909 setDisplayName(MENU_ENUM_LABEL_VALUE_MENU_VIEWS_SETTINGS);
910 }
911
widget()912 QWidget *ViewsPage::widget()
913 {
914 unsigned i;
915 QWidget * widget = new QWidget();
916 QHBoxLayout *mainLayout = new QHBoxLayout;
917 FormLayout *leftLayout = new FormLayout;
918 QVBoxLayout *rightLayout = new QVBoxLayout;
919 SettingsGroup *quickMenu = new SettingsGroup("Quick Menu");
920 QuickMenuPage *quickPage = new QuickMenuPage(this);
921 SettingsGroup *mainMenu = new SettingsGroup("Main Menu");
922 SettingsGroup *settings = new SettingsGroup("Settings");
923 SettingsGroup *tabs = new SettingsGroup("Tabs");
924 SettingsGroup *status = new SettingsGroup("Status");
925 SettingsGroup *startScreen = new SettingsGroup("StartScreen");
926 settings_t *_settings = config_get_ptr();
927 unsigned tabs_begin = 0;
928 unsigned status_begin = 0;
929 file_list_t *list = (file_list_t*)calloc(1, sizeof(*list));
930
931 {
932 rarch_setting_t *kiosk_mode = NULL;
933 menu_displaylist_build_list(list, _settings,
934 DISPLAYLIST_MENU_VIEWS_SETTINGS_LIST, true);
935 kiosk_mode = menu_setting_find_enum(
936 MENU_ENUM_LABEL_MENU_ENABLE_KIOSK_MODE);
937
938 for (i = 0; i < list->size; i++)
939 {
940 menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
941 file_list_get_actiondata_at_offset(list, i);
942
943 if (cbs->enum_idx == (kiosk_mode
944 ? MENU_ENUM_LABEL_CONTENT_SHOW_SETTINGS
945 : MENU_ENUM_LABEL_CONTENT_SHOW_EXPLORE))
946 {
947 tabs_begin = i;
948 break;
949 }
950
951 mainMenu->add(cbs->enum_idx);
952 }
953
954 for (i = tabs_begin; i < list->size; i++)
955 {
956 menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
957 file_list_get_actiondata_at_offset(list, i);
958
959 if (cbs->enum_idx == MENU_ENUM_LABEL_TIMEDATE_ENABLE)
960 {
961 status_begin = i;
962 break;
963 }
964
965 tabs->add(cbs->enum_idx);
966 }
967
968 for (i = status_begin; i < list->size; i++)
969 {
970 menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
971 file_list_get_actiondata_at_offset(list, i);
972
973 if (cbs->enum_idx == MENU_ENUM_LABEL_MENU_SHOW_SUBLABELS)
974 break;
975
976 status->add(cbs->enum_idx);
977 }
978
979 file_list_free(list);
980 }
981
982 {
983 unsigned i;
984 file_list_t *list = (file_list_t*)calloc(1, sizeof(*list));
985 menu_displaylist_build_list(list, _settings,
986 DISPLAYLIST_SETTINGS_VIEWS_SETTINGS_LIST, true);
987
988 for (i = 0; i < list->size; i++)
989 {
990 menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
991 file_list_get_actiondata_at_offset(list, i);
992
993 settings->add(cbs->enum_idx);
994 }
995
996 file_list_free(list);
997 }
998
999 startScreen->add(MENU_ENUM_LABEL_RGUI_SHOW_START_SCREEN);
1000
1001 quickMenu->layout()->setContentsMargins(0, 0, 0, 0);
1002 quickMenu->addRow(quickPage->widget());
1003
1004 leftLayout->addRow(mainMenu);
1005 leftLayout->addRow(settings);
1006 leftLayout->addRow(startScreen);
1007 leftLayout->add(MENU_ENUM_LABEL_MENU_SHOW_SUBLABELS);
1008
1009 rightLayout->addWidget(tabs);
1010 rightLayout->addWidget(quickMenu);
1011 rightLayout->addWidget(status);
1012 rightLayout->addStretch();
1013
1014 mainLayout->addLayout(leftLayout);
1015 mainLayout->addLayout(rightLayout);
1016
1017 widget->setLayout(mainLayout);
1018
1019 return widget;
1020 }
1021
QuickMenuPage(QObject * parent)1022 QuickMenuPage::QuickMenuPage(QObject *parent) :
1023 OptionsPage(parent)
1024 {
1025 setDisplayName(MENU_ENUM_LABEL_VALUE_QUICK_MENU_VIEWS_SETTINGS);
1026 }
1027
widget()1028 QWidget *QuickMenuPage::widget()
1029 {
1030 return create_widget(DISPLAYLIST_QUICK_MENU_VIEWS_SETTINGS_LIST);
1031 }
1032
AppearancePage(QObject * parent)1033 AppearancePage::AppearancePage(QObject *parent) :
1034 OptionsPage(parent)
1035 {
1036 setDisplayName(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS);
1037 }
1038
widget()1039 QWidget *AppearancePage::widget()
1040 {
1041 unsigned i;
1042 QWidget * widget = new QWidget;
1043 FormLayout *layout = new FormLayout;
1044 file_list_t *list = (file_list_t*)calloc(1, sizeof(*list));
1045 settings_t *settings = config_get_ptr();
1046
1047 menu_displaylist_build_list(
1048 list, settings, DISPLAYLIST_MENU_SETTINGS_LIST, true);
1049
1050 /* TODO/FIXME - we haven't yet figured out how to
1051 * put a radio button setting next to another radio
1052 * button on the same row */
1053
1054 for (i = 0; i < list->size; i++)
1055 {
1056 menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
1057 file_list_get_actiondata_at_offset(list, i);
1058
1059 switch (cbs->enum_idx)
1060 {
1061 /* TODO/FIXME - this is a dirty hack - if we
1062 * detect this setting, we instead replace it with a
1063 * color button and ignore the other two font color
1064 * settings since they are already covered by this one
1065 * color button */
1066 case MENU_ENUM_LABEL_MENU_FONT_COLOR_RED:
1067 layout->addUIntColorButton("Menu Font Color: ",
1068 MENU_ENUM_LABEL_MENU_FONT_COLOR_RED,
1069 MENU_ENUM_LABEL_MENU_FONT_COLOR_GREEN,
1070 MENU_ENUM_LABEL_MENU_FONT_COLOR_BLUE);
1071 break;
1072 case MENU_ENUM_LABEL_MENU_FONT_COLOR_GREEN:
1073 case MENU_ENUM_LABEL_MENU_FONT_COLOR_BLUE:
1074 break;
1075 default:
1076 layout->add(cbs->enum_idx);
1077 break;
1078 }
1079 }
1080
1081 file_list_free(list);
1082
1083 widget->setLayout(layout);
1084
1085 return widget;
1086 }
1087
DesktopMenuPage(MainWindow * mainwindow,QObject * parent)1088 DesktopMenuPage::DesktopMenuPage(MainWindow *mainwindow, QObject *parent) :
1089 OptionsPage(parent)
1090 ,m_widget(new ViewOptionsWidget(mainwindow))
1091 {
1092 setDisplayName("Desktop Menu");
1093 }
1094
apply()1095 void DesktopMenuPage::apply()
1096 {
1097 m_widget->saveViewOptions();
1098 }
1099
load()1100 void DesktopMenuPage::load()
1101 {
1102 m_widget->loadViewOptions();
1103 }
1104
widget()1105 QWidget *DesktopMenuPage::widget()
1106 {
1107 return m_widget;
1108 }
1109
UserCategory(QWidget * parent)1110 UserCategory::UserCategory(QWidget *parent) :
1111 OptionsCategory(parent)
1112 {
1113 setDisplayName(MENU_ENUM_LABEL_VALUE_USER_SETTINGS);
1114 setCategoryIcon("menu_user");
1115 }
1116
pages()1117 QVector<OptionsPage*> UserCategory::pages()
1118 {
1119 QVector<OptionsPage*> pages;
1120
1121 pages << new UserPage(this);
1122 pages << new AccountsPage(this);
1123
1124 return pages;
1125 }
1126
UserPage(QObject * parent)1127 UserPage::UserPage(QObject *parent) :
1128 OptionsPage(parent)
1129 {
1130 }
1131
widget()1132 QWidget *UserPage::widget()
1133 {
1134 QWidget *widget = new QWidget;
1135 FormLayout *layout = new FormLayout;
1136
1137 layout->add(MENU_ENUM_LABEL_NETPLAY_NICKNAME);
1138 layout->add(MENU_ENUM_LABEL_USER_LANGUAGE);
1139
1140 widget->setLayout(layout);
1141
1142 return widget;
1143 }
1144
AccountsPage(QObject * parent)1145 AccountsPage::AccountsPage(QObject *parent) :
1146 OptionsPage(parent)
1147 {
1148 setDisplayName(MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST);
1149 }
1150
widget()1151 QWidget *AccountsPage::widget()
1152 {
1153 QWidget *widget = new QWidget;
1154 QVBoxLayout *layout = new QVBoxLayout;
1155 SettingsGroup *youtubeGroup = new SettingsGroup(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACCOUNTS_YOUTUBE));
1156 SettingsGroup *twitchGroup = new SettingsGroup(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACCOUNTS_TWITCH));
1157 SettingsGroup *facebookGroup = new SettingsGroup(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACCOUNTS_FACEBOOK));
1158 #ifdef HAVE_CHEEVOS
1159 SettingsGroup *cheevosGroup = new SettingsGroup(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACCOUNTS_RETRO_ACHIEVEMENTS));
1160
1161 cheevosGroup->add(MENU_ENUM_LABEL_CHEEVOS_USERNAME);
1162 cheevosGroup->add(MENU_ENUM_LABEL_CHEEVOS_PASSWORD);
1163
1164 layout->addWidget(cheevosGroup);
1165 #endif
1166
1167 youtubeGroup->add(MENU_ENUM_LABEL_YOUTUBE_STREAM_KEY);
1168
1169 layout->addWidget(youtubeGroup);
1170
1171 twitchGroup->add(MENU_ENUM_LABEL_TWITCH_STREAM_KEY);
1172
1173 layout->addWidget(twitchGroup);
1174
1175 facebookGroup->add(MENU_ENUM_LABEL_FACEBOOK_STREAM_KEY);
1176
1177 layout->addWidget(facebookGroup);
1178
1179 layout->addStretch();
1180
1181 widget->setLayout(layout);
1182
1183 return widget;
1184 }
1185
VideoCategory(QWidget * parent)1186 VideoCategory::VideoCategory(QWidget *parent) :
1187 OptionsCategory(parent)
1188 {
1189 setDisplayName(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS);
1190 setCategoryIcon("menu_video");
1191 }
1192
pages()1193 QVector<OptionsPage*> VideoCategory::pages()
1194 {
1195 QVector<OptionsPage*> pages;
1196
1197 pages << new VideoPage(this);
1198 pages << new CrtSwitchresPage(this);
1199
1200 return pages;
1201 }
1202
VideoPage(QObject * parent)1203 VideoPage::VideoPage(QObject *parent) :
1204 OptionsPage(parent)
1205 ,m_resolutionCombo(new QComboBox())
1206 {
1207 }
1208
widget()1209 QWidget *VideoPage::widget()
1210 {
1211 QWidget *widget = new QWidget;
1212
1213 QVBoxLayout *layout = new QVBoxLayout;
1214
1215 SettingsGroup *outputGroup = new SettingsGroup("Output");
1216 SettingsGroup *aspectGroup = new SettingsGroup("Scaling");
1217
1218 SettingsGroup *fullscreenGroup = new SettingsGroup("Fullscreen Mode");
1219 SettingsGroup *windowedGroup = new SettingsGroup("Windowed Mode");
1220
1221 QHBoxLayout *fullcreenSizeLayout = new QHBoxLayout;
1222 FormLayout *leftFullscreenSizeForm = new FormLayout;
1223 FormLayout *rightFullscreenSizeForm = new FormLayout;
1224
1225 QHBoxLayout *windowedSizeLayout = new QHBoxLayout;
1226 FormLayout *leftWindowedSizeForm = new FormLayout;
1227 FormLayout *rightWindowedSizeForm = new FormLayout;
1228
1229 SettingsGroup *syncGroup = new SettingsGroup("Synchronization");
1230 CheckableSettingsGroup *vSyncGroup = new CheckableSettingsGroup(MENU_ENUM_LABEL_VIDEO_VSYNC);
1231
1232 QHBoxLayout *outputScalingLayout = new QHBoxLayout;
1233 QHBoxLayout *modeLayout = new QHBoxLayout;
1234 QHBoxLayout *syncMiscLayout = new QHBoxLayout;
1235
1236 SettingsGroup *miscGroup = new SettingsGroup("Miscellaneous");
1237 SettingsGroup *filterGroup = new SettingsGroup("Video Filter");
1238
1239 unsigned i, size = 0;
1240 struct video_display_config *list = (struct video_display_config*) video_display_server_get_resolution_list(&size);
1241
1242 if (list)
1243 {
1244 for (i = 0; i < size; i++)
1245 {
1246 char val_d[256], str[256];
1247 snprintf(str, sizeof(str), "%dx%d (%d Hz)", list[i].width, list[i].height, list[i].refreshrate);
1248 snprintf(val_d, sizeof(val_d), "%d", i);
1249
1250 m_resolutionCombo->addItem(str);
1251
1252 if (list[i].current)
1253 m_resolutionCombo->setCurrentIndex(i);
1254 }
1255
1256 free(list);
1257 }
1258
1259 outputGroup->add(MENU_ENUM_LABEL_VIDEO_DRIVER);
1260 outputGroup->add(MENU_ENUM_LABEL_VIDEO_MONITOR_INDEX);
1261 outputGroup->add(MENU_ENUM_LABEL_VIDEO_ROTATION);
1262 outputGroup->addRow(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION), m_resolutionCombo);
1263 outputGroup->add(MENU_ENUM_LABEL_VIDEO_FORCE_SRGB_DISABLE);
1264
1265 fullscreenGroup->add(MENU_ENUM_LABEL_VIDEO_FULLSCREEN);
1266 fullscreenGroup->add(MENU_ENUM_LABEL_VIDEO_WINDOWED_FULLSCREEN);
1267
1268 leftFullscreenSizeForm->addRow("Width:", new UIntSpinBox(MENU_ENUM_LABEL_VIDEO_FULLSCREEN_X));
1269 rightFullscreenSizeForm->addRow("Height:", new UIntSpinBox(MENU_ENUM_LABEL_VIDEO_FULLSCREEN_Y));
1270
1271 fullcreenSizeLayout->addLayout(leftFullscreenSizeForm);
1272 fullcreenSizeLayout->addLayout(rightFullscreenSizeForm);
1273
1274 fullscreenGroup->addRow(fullcreenSizeLayout);
1275
1276 aspectGroup->add(MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER);
1277 aspectGroup->addRow(new AspectRatioGroup("Aspect Ratio"));
1278
1279 leftWindowedSizeForm->addRow("Scale:", new FloatSpinBox(MENU_ENUM_LABEL_VIDEO_SCALE));
1280 leftWindowedSizeForm->addRow("Width:", new UIntSpinBox(MENU_ENUM_LABEL_VIDEO_WINDOW_WIDTH));
1281
1282 rightWindowedSizeForm->addRow("Opacity:", new UIntSpinBox(MENU_ENUM_LABEL_VIDEO_WINDOW_OPACITY));
1283 rightWindowedSizeForm->addRow("Height:", new UIntSpinBox(MENU_ENUM_LABEL_VIDEO_WINDOW_HEIGHT));
1284
1285 windowedSizeLayout->addLayout(leftWindowedSizeForm);
1286 windowedSizeLayout->addLayout(rightWindowedSizeForm);
1287
1288 windowedGroup->addRow(windowedSizeLayout);
1289
1290 windowedGroup->add(MENU_ENUM_LABEL_VIDEO_WINDOW_SHOW_DECORATIONS);
1291 windowedGroup->add(MENU_ENUM_LABEL_VIDEO_WINDOW_SAVE_POSITION);
1292
1293 vSyncGroup->add(MENU_ENUM_LABEL_VIDEO_SWAP_INTERVAL);
1294 vSyncGroup->add(MENU_ENUM_LABEL_VIDEO_ADAPTIVE_VSYNC);
1295 vSyncGroup->add(MENU_ENUM_LABEL_VIDEO_FRAME_DELAY);
1296 syncGroup->addRow(vSyncGroup);
1297
1298 rarch_setting_t *hardSyncSetting = menu_setting_find_enum(MENU_ENUM_LABEL_VIDEO_HARD_SYNC);
1299
1300 if (hardSyncSetting)
1301 {
1302 CheckableSettingsGroup *hardSyncGroup = new CheckableSettingsGroup(hardSyncSetting);
1303
1304 hardSyncGroup->add(MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES);
1305
1306 syncGroup->addRow(hardSyncGroup);
1307 }
1308
1309 syncGroup->add(MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES);
1310
1311 miscGroup->add(MENU_ENUM_LABEL_SUSPEND_SCREENSAVER_ENABLE);
1312 miscGroup->add(MENU_ENUM_LABEL_VIDEO_THREADED);
1313 miscGroup->add(MENU_ENUM_LABEL_VIDEO_BLACK_FRAME_INSERTION);
1314 miscGroup->add(MENU_ENUM_LABEL_VIDEO_GPU_SCREENSHOT);
1315 miscGroup->add(MENU_ENUM_LABEL_VIDEO_SMOOTH);
1316 miscGroup->add(MENU_ENUM_LABEL_VIDEO_CTX_SCALING);
1317 miscGroup->add(MENU_ENUM_LABEL_VIDEO_SHADER_DELAY);
1318
1319 syncMiscLayout->addWidget(syncGroup);
1320 syncMiscLayout->addWidget(miscGroup);
1321
1322 filterGroup->add(MENU_ENUM_LABEL_VIDEO_FILTER);
1323
1324 modeLayout->addWidget(fullscreenGroup);
1325 modeLayout->addWidget(windowedGroup);
1326
1327 aspectGroup->add(MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN);
1328
1329 outputScalingLayout->addWidget(outputGroup);
1330 outputScalingLayout->addWidget(aspectGroup);
1331
1332 layout->addLayout(outputScalingLayout);
1333 layout->addLayout(modeLayout);
1334 layout->addLayout(syncMiscLayout);
1335 layout->addWidget(filterGroup);
1336
1337 layout->addStretch();
1338
1339 connect(m_resolutionCombo, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(onResolutionComboIndexChanged(const QString&)));
1340
1341 widget->setLayout(layout);
1342
1343 return widget;
1344 }
1345
AspectRatioGroup(const QString & title,QWidget * parent)1346 AspectRatioGroup::AspectRatioGroup(const QString &title, QWidget *parent) :
1347 SettingsGroup(title, parent)
1348 ,m_radioButton(new AspectRatioRadioButton(ASPECT_RATIO_4_3, ASPECT_RATIO_32_9))
1349 ,m_comboBox(new UIntComboBox(MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX, ASPECT_RATIO_4_3, ASPECT_RATIO_32_9))
1350 {
1351 QHBoxLayout *aspectLayout = new QHBoxLayout;
1352 QHBoxLayout *preset = new QHBoxLayout;
1353 QHBoxLayout *custom = new QHBoxLayout;
1354 QVBoxLayout *customRadio = new QVBoxLayout;
1355 QHBoxLayout *config = new QHBoxLayout;
1356 QHBoxLayout *full = new QHBoxLayout;
1357 QHBoxLayout *aspectL = new QHBoxLayout;
1358 FormLayout *leftAspectForm = new FormLayout;
1359 FormLayout *rightAspectForm = new FormLayout;
1360 FormLayout *leftAspect = new FormLayout;
1361 FormLayout *rightAspect = new FormLayout;
1362
1363 leftAspectForm->addRow("X Pos.:", new UIntSpinBox(MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_X));
1364 leftAspectForm->addRow("Width:", new UIntSpinBox(MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH));
1365 rightAspectForm->addRow("Y Pos.:", new UIntSpinBox(MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_Y));
1366 rightAspectForm->addRow("Height:", new UIntSpinBox(MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT));
1367
1368 aspectLayout->addLayout(leftAspectForm);
1369 aspectLayout->addLayout(rightAspectForm);
1370
1371 preset->addWidget(m_radioButton);
1372 preset->addWidget(m_comboBox);
1373 preset->setStretch(1, 1);
1374
1375 customRadio->addWidget(new UIntRadioButton(MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX, ASPECT_RATIO_CUSTOM), Qt::AlignTop);
1376 customRadio->addStretch();
1377
1378 custom->addLayout(customRadio);
1379 custom->addLayout(aspectLayout);
1380 custom->addStretch();
1381
1382 config->addWidget(new UIntRadioButton(MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX, ASPECT_RATIO_CONFIG));
1383 config->addWidget(new FloatSpinBox(MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO));
1384 config->setStretch(1, 1);
1385 config->setSizeConstraint(QLayout::SetMinimumSize);
1386
1387 full->addWidget(new UIntRadioButton(MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX, ASPECT_RATIO_FULL));
1388
1389 leftAspect->addRow(new UIntRadioButton(MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX, ASPECT_RATIO_CORE));
1390 leftAspect->addRow(preset);
1391
1392 rightAspect->addRow(config);
1393 rightAspect->addRow(new UIntRadioButton(MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX, ASPECT_RATIO_SQUARE));
1394
1395 aspectL->addLayout(leftAspect);
1396 aspectL->addStretch();
1397 aspectL->addSpacing(30);
1398 aspectL->addLayout(rightAspect);
1399
1400 addRow(aspectL);
1401 addRow(full);
1402 addRow(custom);
1403
1404 connect(m_radioButton, SIGNAL(clicked(bool)), this, SLOT(onAspectRadioClicked(bool)));
1405 }
1406
paintEvent(QPaintEvent * event)1407 void AspectRatioGroup::paintEvent(QPaintEvent *event)
1408 {
1409 settings_t *settings = config_get_ptr();
1410 unsigned value = settings->uints.video_aspect_ratio_idx;
1411
1412 if (ASPECT_RATIO_4_3 >= value || value <= ASPECT_RATIO_32_9)
1413 {
1414 m_comboBox->blockSignals(false);
1415 m_radioButton->setChecked(true);
1416 }
1417 else
1418 m_comboBox->blockSignals(true);
1419
1420 SettingsGroup::paintEvent(event);
1421 }
1422
onAspectRadioToggled(bool checked)1423 void AspectRatioGroup::onAspectRadioToggled(bool checked)
1424 {
1425 if (checked)
1426 m_comboBox->currentIndexChanged(m_comboBox->currentIndex());
1427 else
1428 m_comboBox->blockSignals(true);
1429 }
1430
onAspectRadioClicked(bool checked)1431 void AspectRatioGroup::onAspectRadioClicked(bool checked)
1432 {
1433 m_comboBox->blockSignals(false);
1434 m_comboBox->currentIndexChanged(m_comboBox->currentIndex());
1435 setChecked(true);
1436 }
1437
CrtSwitchresPage(QObject * parent)1438 CrtSwitchresPage::CrtSwitchresPage(QObject *parent) :
1439 OptionsPage(parent)
1440 ,m_crtSuperResolutionCombo(new QComboBox())
1441 {
1442 setDisplayName(MENU_ENUM_LABEL_VALUE_CRT_SWITCHRES_SETTINGS);
1443 }
1444
widget()1445 QWidget *CrtSwitchresPage::widget()
1446 {
1447 QWidget *widget = new QWidget;
1448 FormLayout *layout = new FormLayout;
1449
1450 m_crtSuperResolutionCombo->addItem(msg_hash_to_str(MSG_NATIVE), 0);
1451 m_crtSuperResolutionCombo->addItem("1920", 1920);
1452 m_crtSuperResolutionCombo->addItem("2560", 2560);
1453 m_crtSuperResolutionCombo->addItem("3840", 3840);
1454
1455 layout->add(MENU_ENUM_LABEL_CRT_SWITCH_RESOLUTION);
1456 layout->addRow(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_SUPER), m_crtSuperResolutionCombo);
1457 layout->add(MENU_ENUM_LABEL_CRT_SWITCH_X_AXIS_CENTERING);
1458 layout->add(MENU_ENUM_LABEL_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE);
1459
1460 connect(m_crtSuperResolutionCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onCrtSuperResolutionComboIndexChanged(int)));
1461
1462 widget->setLayout(layout);
1463
1464 return widget;
1465 }
1466
onResolutionComboIndexChanged(const QString & text)1467 void VideoPage::onResolutionComboIndexChanged(const QString &text)
1468 {
1469 const char *path = text.toUtf8().constData();
1470 action_cb_push_dropdown_item_resolution(path,
1471 NULL, 0, 0, 0);
1472 }
1473
onCrtSuperResolutionComboIndexChanged(int index)1474 void CrtSwitchresPage::onCrtSuperResolutionComboIndexChanged(int index)
1475 {
1476 settings_t *settings = config_get_ptr();
1477 Q_UNUSED(index)
1478
1479 settings->uints.crt_switch_resolution_super =
1480 m_crtSuperResolutionCombo->currentData().value<unsigned>();
1481 }
1482
AspectRatioRadioButton(unsigned min,unsigned max,QWidget * parent)1483 AspectRatioRadioButton::AspectRatioRadioButton(unsigned min, unsigned max, QWidget *parent) :
1484 QRadioButton(parent)
1485 ,m_min(min)
1486 ,m_max(max)
1487 {
1488 }
1489
1490 /* DRIVERS */
1491
DriversCategory(QWidget * parent)1492 DriversCategory::DriversCategory(QWidget *parent) :
1493 OptionsCategory(parent)
1494 {
1495 setDisplayName(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS);
1496 setCategoryIcon("menu_drivers");
1497 }
1498
pages()1499 QVector<OptionsPage*> DriversCategory::pages()
1500 {
1501 QVector<OptionsPage*> pages;
1502
1503 pages << new DriversPage(this);
1504
1505 return pages;
1506 }
1507
DriversPage(QObject * parent)1508 DriversPage::DriversPage(QObject *parent) :
1509 OptionsPage(parent)
1510 {
1511 setDisplayName(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS);
1512 }
1513
widget()1514 QWidget *DriversPage::widget()
1515 {
1516 return create_widget(DISPLAYLIST_DRIVER_SETTINGS_LIST);
1517 }
1518
1519 /* DIRECTORY */
1520
DirectoryCategory(QWidget * parent)1521 DirectoryCategory::DirectoryCategory(QWidget *parent) :
1522 OptionsCategory(parent)
1523 {
1524 setDisplayName(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS);
1525 setCategoryIcon("folder");
1526 }
1527
pages()1528 QVector<OptionsPage*> DirectoryCategory::pages()
1529 {
1530 QVector<OptionsPage*> pages;
1531
1532 pages << new DirectoryPage(this);
1533
1534 return pages;
1535 }
1536
DirectoryPage(QObject * parent)1537 DirectoryPage::DirectoryPage(QObject *parent) :
1538 OptionsPage(parent)
1539 {
1540 }
1541
widget()1542 QWidget *DirectoryPage::widget()
1543 {
1544 return create_widget(DISPLAYLIST_DIRECTORY_SETTINGS_LIST);
1545 }
1546
1547 /* CONFIGURATION */
1548
ConfigurationCategory(QWidget * parent)1549 ConfigurationCategory::ConfigurationCategory(QWidget *parent) :
1550 OptionsCategory(parent)
1551 {
1552 setDisplayName(MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS);
1553 setCategoryIcon("setting");
1554 }
1555
pages()1556 QVector<OptionsPage*> ConfigurationCategory::pages()
1557 {
1558 QVector<OptionsPage*> pages;
1559
1560 pages << new ConfigurationPage(this);
1561
1562 return pages;
1563 }
1564
ConfigurationPage(QObject * parent)1565 ConfigurationPage::ConfigurationPage(QObject *parent) :
1566 OptionsPage(parent)
1567 {
1568 }
1569
widget()1570 QWidget *ConfigurationPage::widget()
1571 {
1572 return create_widget(DISPLAYLIST_CONFIGURATION_SETTINGS_LIST);
1573 }
1574
1575 /* CORE */
1576
CoreCategory(QWidget * parent)1577 CoreCategory::CoreCategory(QWidget *parent) :
1578 OptionsCategory(parent)
1579 {
1580 setDisplayName(MENU_ENUM_LABEL_VALUE_CORE_SETTINGS);
1581 setCategoryIcon("core-options");
1582 }
1583
pages()1584 QVector<OptionsPage*> CoreCategory::pages()
1585 {
1586 QVector<OptionsPage*> pages;
1587
1588 pages << new CorePage(this);
1589
1590 return pages;
1591 }
1592
CorePage(QObject * parent)1593 CorePage::CorePage(QObject *parent) :
1594 OptionsPage(parent)
1595 {
1596 }
1597
widget()1598 QWidget *CorePage::widget()
1599 {
1600 return create_widget(DISPLAYLIST_CORE_SETTINGS_LIST);
1601 }
1602
1603 /* LOGGING */
1604
LoggingCategory(QWidget * parent)1605 LoggingCategory::LoggingCategory(QWidget *parent) :
1606 OptionsCategory(parent)
1607 {
1608 setDisplayName(MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS);
1609 setCategoryIcon("menu_log");
1610 }
1611
pages()1612 QVector<OptionsPage*> LoggingCategory::pages()
1613 {
1614 QVector<OptionsPage*> pages;
1615
1616 pages << new LoggingPage(this);
1617
1618 return pages;
1619 }
1620
LoggingPage(QObject * parent)1621 LoggingPage::LoggingPage(QObject *parent) :
1622 OptionsPage(parent)
1623 {
1624 }
1625
widget()1626 QWidget *LoggingPage::widget()
1627 {
1628 return create_widget(DISPLAYLIST_LOGGING_SETTINGS_LIST);
1629 }
1630
1631 /* AI SERVICE */
1632
AIServiceCategory(QWidget * parent)1633 AIServiceCategory::AIServiceCategory(QWidget *parent) :
1634 OptionsCategory(parent)
1635 {
1636 setDisplayName(MENU_ENUM_LABEL_VALUE_AI_SERVICE_SETTINGS);
1637 setCategoryIcon("menu_drivers");
1638 }
1639
pages()1640 QVector<OptionsPage*> AIServiceCategory::pages()
1641 {
1642 QVector<OptionsPage*> pages;
1643
1644 pages << new AIServicePage(this);
1645
1646 return pages;
1647 }
1648
AIServicePage(QObject * parent)1649 AIServicePage::AIServicePage(QObject *parent) :
1650 OptionsPage(parent)
1651 {
1652 setDisplayName(MENU_ENUM_LABEL_VALUE_AI_SERVICE_SETTINGS);
1653 }
1654
widget()1655 QWidget *AIServicePage::widget()
1656 {
1657 return create_widget(DISPLAYLIST_AI_SERVICE_SETTINGS_LIST);
1658 }
1659
1660 /* FRAME THROTTLE */
1661
FrameThrottleCategory(QWidget * parent)1662 FrameThrottleCategory::FrameThrottleCategory(QWidget *parent) :
1663 OptionsCategory(parent)
1664 {
1665 setDisplayName(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS);
1666 setCategoryIcon("menu_frameskip");
1667 }
1668
pages()1669 QVector<OptionsPage*> FrameThrottleCategory::pages()
1670 {
1671 QVector<OptionsPage*> pages;
1672
1673 pages << new FrameThrottlePage(this);
1674 pages << new RewindPage(this);
1675
1676 return pages;
1677 }
1678
FrameThrottlePage(QObject * parent)1679 FrameThrottlePage::FrameThrottlePage(QObject *parent) :
1680 OptionsPage(parent)
1681 {
1682 setDisplayName(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS);
1683 }
1684
widget()1685 QWidget *FrameThrottlePage::widget()
1686 {
1687 return create_widget(DISPLAYLIST_FRAME_THROTTLE_SETTINGS_LIST);
1688 }
1689
RewindPage(QObject * parent)1690 RewindPage::RewindPage(QObject *parent) :
1691 OptionsPage(parent)
1692 {
1693 setDisplayName(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS);
1694 }
1695
widget()1696 QWidget *RewindPage::widget()
1697 {
1698 return create_widget(DISPLAYLIST_REWIND_SETTINGS_LIST);
1699 }
1700