OSDN Git Service

[UI][Qt][EMU]Menu: Make around quick-disk new signal framework.
[csp-qt/common_source_project-fm7.git] / source / src / qt / gui / util_qd.cpp
1 /*
2  * UI->Qt->MainWindow : Quick Disk Utils.
3  * (C) 2015 K.Ohta <whatisthis.sowhat _at_ gmail.com>
4  * License: GPLv2
5  *
6  * History:
7  * Jan 24, 2014 : Moved from some files.
8  */
9 #include <QApplication>
10
11 #include "mainwidget_base.h"
12 #include "commonclasses.h"
13 #include "qt_dialogs.h"
14 #include "csp_logger.h"
15 #include "menu_quickdisk.h"
16
17 #include "dock_disks.h"
18 #include "../../osdcall_types.h"
19
20 void Ui_MainWindowBase::CreateQuickDiskPulldownMenu(int drv)
21 {
22 }
23
24 void Ui_MainWindowBase::ConfigQuickDiskMenuSub(int drv)
25 {
26 }
27
28 int Ui_MainWindowBase::do_emu_write_protect_quick_disk(int drv, bool flag)
29 {
30         std::shared_ptr<USING_FLAGS> p = using_flags;
31         if(p.get() == nullptr) return -1;
32         if((drv < 0) || (drv >= p->get_max_qd())) return -1;
33
34         emit sig_write_protect_quick_disk(drv, flag);
35         return 0;
36 }
37
38 void Ui_MainWindowBase::do_ui_quick_disk_write_protect(int drive, quint64 flag)
39 {
40         if(drive < 0) return;
41
42         std::shared_ptr<USING_FLAGS>p = using_flags;
43         if(p.get() == nullptr) return;
44         if(!(p->is_use_qd()) || (p->get_max_qd() <= drive)) return;
45         if(menu_QDs[drive] == nullptr) return;
46
47         if((flag & EMU_MESSAGE_TYPE::WRITE_PROTECT) != 0) {
48                 menu_QDs[drive]->do_set_write_protect(true);
49         } else {
50                 menu_QDs[drive]->do_set_write_protect(false);
51         }
52 }
53
54 int Ui_MainWindowBase::set_recent_quick_disk(int drv, int num)
55 {
56         QString s_path;
57
58         std::shared_ptr<USING_FLAGS> p = using_flags;
59         if(p.get() == nullptr) return -1;
60         if(p_config == nullptr) return -1;
61
62         if(p->get_max_qd() <= drv) return -1;
63         if((num < 0) || (num >= MAX_HISTORY)) return -1;
64
65         s_path = QString::fromLocal8Bit(p_config->recent_quick_disk_path[drv][num]);
66         if(!(s_path.isEmpty())) {
67                 do_open_quick_disk_ui(drv, s_path);
68                 return 0;
69         }
70         return -1;
71 }
72
73 void Ui_MainWindowBase::do_ui_quick_disk_insert_history(int drv, QString fname)
74 {
75         std::shared_ptr<USING_FLAGS>p = using_flags;
76         if(p.get() == nullptr) return;
77         if(fname.length() <= 0) return;
78         if(p->get_max_qd() <= drv) return;
79
80         _TCHAR path_shadow[_MAX_PATH] = {0};
81
82         my_strncpy_s(path_shadow, _MAX_PATH, fname.toLocal8Bit().constData(), _TRUNCATE);
83         if(!(FILEIO::IsFileExisting(path_shadow))) return;
84
85         UPDATE_HISTORY(fname, p_config->recent_quick_disk_path[drv], listQDs[drv]);
86
87         my_strncpy_s(p_config->initial_quick_disk_dir,
88                                  sizeof(p_config->initial_quick_disk_dir) / sizeof(_TCHAR),
89                                  get_parent_dir((const _TCHAR *)path_shadow),
90                                  _TRUNCATE);
91
92         if(menu_QDs[drv] != nullptr) {
93                 menu_QDs[drv]->do_set_initialize_directory(p_config->initial_quick_disk_dir);
94         }
95         do_update_quick_disk_history(drv, listQDs[drv]);
96
97         // ToDO: Replace signal model.
98         if(driveData != nullptr) {
99                 driveData->updateMediaFileName(CSP_DockDisks_Domain_QD, drv, fname);
100         }
101
102 }
103
104
105 void Ui_MainWindowBase::do_open_quick_disk_ui(int drv, const QString fname)
106 {
107         std::shared_ptr<USING_FLAGS>p = using_flags;
108         if(p.get() == nullptr) return;
109         if(fname.length() <= 0) return;
110         if(p->get_max_qd() <= drv) return;
111
112         const _TCHAR *fnamep = (const _TCHAR*)(fname.toLocal8Bit().constData());
113         if(fnamep == nullptr) return;
114
115         if(!(FILEIO::IsFileExisting(fnamep))) return; // File not found.
116
117         emit sig_close_quick_disk_ui(drv);
118         emit sig_open_quick_disk(drv, fname);
119 }
120
121 void Ui_MainWindowBase::do_eject_quick_disk(int drv)
122 {
123         emit sig_close_quick_disk_ui(drv);
124 }
125
126 void Ui_MainWindowBase::do_ui_eject_quick_disk(int drv)
127 {
128         if(menu_QDs[drv] != nullptr) {
129                 menu_QDs[drv]->do_clear_inner_media();
130         }
131         // ToDO: Replace signal model.
132         if(driveData != nullptr) {
133                 driveData->updateMediaFileName(CSP_DockDisks_Domain_QD, drv, QString::fromUtf8(""));
134         }
135 }
136
137 void Ui_MainWindowBase::CreateQuickDiskMenu(int drv, int drv_base)
138 {
139         {
140                 QString ext = "*.mzt *.q20 *.qdf *.gz";
141                 QString desc1 = "Quick DIsk";
142
143                 std::shared_ptr<USING_FLAGS> p = using_flags;
144                 if(p_config == nullptr) return;
145                 if(p.get() == nullptr) return;
146
147                 menu_QDs[drv] = new Menu_QDClass(menubar, QString::fromUtf8("QD"), p, this, drv);
148                 menu_QDs[drv]->create_pulldown_menu();
149
150                 menu_QDs[drv]->do_clear_inner_media();
151                 menu_QDs[drv]->do_add_media_extension(ext, desc1);
152
153                 SETUP_HISTORY(p_config->recent_quick_disk_path[drv], listQDs[drv]);
154
155                 menu_QDs[drv]->do_update_histories(listQDs[drv]);
156                 menu_QDs[drv]->do_set_initialize_directory(p_config->initial_quick_disk_dir);
157
158         }
159 }
160
161 void Ui_MainWindowBase::retranslateQuickDiskMenu(int drv, int basedrv)
162 {
163         std::shared_ptr<USING_FLAGS> p = using_flags;
164         if(p.get() == nullptr) return;
165
166         if((drv < 0) || (drv >= p->get_max_qd())) return;
167         QString drive_name = (QApplication::translate("MenuMedia", "Quick Disk ", 0));
168         drive_name += QString::number(basedrv);
169
170         menu_QDs[drv]->retranslateUi();
171         menu_QDs[drv]->setTitle(QApplication::translate("MenuMedia", drive_name.toUtf8().constData() , 0));
172 }
173
174 void Ui_MainWindowBase::ConfigQuickDiskMenu(void)
175 {
176         std::shared_ptr<USING_FLAGS> p = using_flags;
177         if(p.get() == nullptr) return;
178
179         for(int i = 0; i < p->get_max_qd(); i++) {
180                 ConfigQuickDiskMenuSub(i);
181         }
182 }
183
184 void Ui_MainWindowBase::do_update_quick_disk_history(int drive, QStringList lst)
185 {
186         std::shared_ptr<USING_FLAGS> p = using_flags;
187         if(p.get() == nullptr) return;
188
189         if((drive < 0) || (drive >= p->get_max_qd())) return;
190         if(menu_QDs[drive] != nullptr) {
191                 menu_QDs[drive]->do_update_histories(lst);
192         }
193 }