OSDN Git Service

[UI][Qt][OSD][LOG] CDROM: May works with new messaging framework.
[csp-qt/common_source_project-fm7.git] / source / src / qt / gui / util_cd.cpp
1 /*
2  * UI->Qt->MainWindow : CD ROM Utils.
3  * (C) 2015 K.Ohta <whatisthis.sowhat _at_ gmail.com>
4  * License: GPLv2
5  *
6  * History:
7  * Mar 20, 2016 : Initial
8  */
9
10 #include <QApplication>
11
12 #include "commonclasses.h"
13 #include "mainwidget_base.h"
14 #include "qt_dialogs.h"
15 #include "csp_logger.h"
16
17 #include "menu_compactdisc.h"
18 #include "dock_disks.h"
19
20 void Ui_MainWindowBase::CreateCDROMMenu(int drv, int drv_base)
21 {
22         QString ext_play, desc_play;
23
24         listCDROM[drv].clear();
25         menu_CDROM[drv] = new Menu_CompactDiscClass(menubar, "CDROM", using_flags, this, drv, drv_base);
26         menu_CDROM[drv]->setObjectName(QString::fromUtf8("menuCDROM", -1));
27
28         menu_CDROM[drv]->create_pulldown_menu();
29         // Translate Menu
30         ext_play = "*.ccd *.cue *.iso *.gz";
31         desc_play = "Compact Disc";
32         menu_CDROM[drv]->do_clear_inner_media();
33         menu_CDROM[drv]->do_add_media_extension(ext_play, desc_play);
34
35         SETUP_HISTORY(p_config->recent_compact_disc_path[drv], listCDROM[drv]);
36         menu_CDROM[drv]->do_update_histories(listCDROM[drv]);
37         menu_CDROM[drv]->do_set_initialize_directory(p_config->initial_compact_disc_dir);
38
39 }
40
41 void Ui_MainWindowBase::CreateCDROMPulldownMenu(void)
42 {
43 }
44
45 void Ui_MainWindowBase::ConfigCDROMMenuSub(void)
46 {
47
48 }
49
50 int Ui_MainWindowBase::set_recent_compact_disc(int drv, int num)
51 {
52         QString s_path;
53
54         std::shared_ptr<USING_FLAGS> p = using_flags;
55         if(p.get() == nullptr) return -1;
56         if(p_config == nullptr) return -1;
57
58         if(p->get_max_cd() <= drv) return -1;
59         if((num < 0) || (num >= MAX_HISTORY)) return -1;
60
61         s_path = QString::fromLocal8Bit(p_config->recent_compact_disc_path[drv][num]);
62         if(s_path.isEmpty()) return -1;
63         do_open_compact_disc_ui(drv, s_path);
64         return 0;
65 }
66
67 void Ui_MainWindowBase::do_eject_compact_disc(int drv)
68 {
69         emit sig_eject_compact_disc_ui(drv);
70 }
71
72 void Ui_MainWindowBase::do_ui_eject_compact_disc(int drv)
73 {
74         std::shared_ptr<USING_FLAGS>p = using_flags;
75         if(p.get() == nullptr) return;
76         if(p->get_max_cd() <= drv) return;
77         if(menu_CDROM[drv] != nullptr) {
78                 menu_CDROM[drv]->do_clear_inner_media();
79         }
80         // ToDO: Replace signal model.
81         if(driveData != nullptr) {
82                 driveData->updateMediaFileName(CSP_DockDisks_Domain_CD, drv, QString::fromUtf8(""));
83         }
84 }
85
86 void Ui_MainWindowBase::do_ui_compact_disc_insert_history(int drv, QString fname)
87 {
88         std::shared_ptr<USING_FLAGS>p = using_flags;
89         if(p.get() == nullptr) return;
90         if(fname.length() <= 0) return;
91
92         if(p->get_max_cd() <= drv) return;
93
94         _TCHAR path_shadow[_MAX_PATH] = {0};
95
96         my_strncpy_s(path_shadow, _MAX_PATH, fname.toLocal8Bit().constData(), _TRUNCATE);
97         if(!(FILEIO::IsFileExisting(path_shadow))) return;
98
99         UPDATE_HISTORY(fname, p_config->recent_compact_disc_path[drv], listCDROM[drv]);
100         my_strncpy_s(p_config->initial_compact_disc_dir,
101                                  sizeof(p_config->initial_compact_disc_dir) / sizeof(_TCHAR),
102                                  get_parent_dir((const _TCHAR*)path_shadow),
103                                  _TRUNCATE);
104         menu_CDROM[drv]->do_set_initialize_directory(p_config->initial_compact_disc_dir);
105         do_update_compact_disc_history(drv, listCDROM[drv]);
106
107         // ToDO: Replace signal model.
108         if(driveData != nullptr) {
109                 driveData->updateMediaFileName(CSP_DockDisks_Domain_CD, drv, fname);
110         }
111 }
112
113 void Ui_MainWindowBase::do_open_compact_disc_ui(int drv, QString path)
114 {
115         std::shared_ptr<USING_FLAGS>p = using_flags;
116         if(p.get() == nullptr) return;
117         if(path.length() <= 0) return;
118         if(p->get_max_cd() <= drv) return;
119
120         const _TCHAR *fnamep = (const _TCHAR*)(path.toLocal8Bit().constData());
121         if(fnamep == nullptr) return;
122         if(!(FILEIO::IsFileExisting(fnamep))) return; // File not found.
123
124         emit sig_eject_compact_disc_ui(drv);
125         emit sig_open_compact_disc(drv, path);
126
127         return;
128 }
129
130 void Ui_MainWindowBase::retranslateCDROMMenu(void)
131 {
132         if(using_flags->is_use_compact_disc()) {
133                 for(int drv = 0; drv < using_flags->get_max_cd(); drv++) {
134                         menu_CDROM[drv]->retranslateUi();
135                 }
136         }
137 }
138
139 void Ui_MainWindowBase::ConfigCDROMMenu(void)
140 {
141         ConfigCDROMMenuSub();
142 }
143
144 void Ui_MainWindowBase::do_swap_cdaudio_byteorder(bool value)
145 {
146         QAction *cp = qobject_cast<QAction*>(QObject::sender());
147         if(cp == nullptr) return;
148         int drv = cp->data().value<int>();
149
150         std::shared_ptr<USING_FLAGS>up = using_flags;
151         if((p_config != nullptr) && (up.get() != nullptr)) {
152                 if(drv < 0) return;
153                 if(drv >= up->get_max_cd()) return;
154                 p_config->swap_audio_byteorder[drv] = value;
155         }
156 }
157
158 void Ui_MainWindowBase::do_update_compact_disc_history(int drive, QStringList lst)
159 {
160         std::shared_ptr<USING_FLAGS> p = using_flags;
161         if(p.get() == nullptr) return;
162
163         if((drive < 0) || (drive >= p->get_max_cd())) return;
164         if(menu_CDROM[drive] != nullptr) {
165                 menu_CDROM[drive]->do_update_histories(lst);
166         }
167 }