2 * UI->Qt->MainWindow : FDD Utils.
3 * (C) 2015 K.Ohta <whatisthis.sowhat _at_ gmail.com>
7 * Jan 24, 2014 : Moved from some files.
11 #include "mainwidget.h"
12 #include "commonclasses.h"
13 #include "menu_disk.h"
15 #include "qt_dialogs.h"
17 #include "agar_logger.h"
19 extern class EMU *emu;
21 void Object_Menu_Control::insert_fd(void) {
22 emit sig_insert_fd(getDrive());
24 void Object_Menu_Control::eject_fd(void) {
25 write_protect = false;
26 emit sig_eject_fd(getDrive());
28 void Object_Menu_Control::on_d88_slot(void) {
29 emit set_d88_slot(drive, s_num);
31 void Object_Menu_Control::on_recent_disk(void){
32 // write_protect = false; // Right? On D88, May be writing entry exists.
33 emit set_recent_disk(drive, s_num);
35 void Object_Menu_Control::write_protect_fd(void) {
37 emit sig_write_protect_fd(drive, write_protect);
39 void Object_Menu_Control::no_write_protect_fd(void) {
40 write_protect = false;
41 emit sig_write_protect_fd(drive, write_protect);
44 void Object_Menu_Control::do_set_ignore_crc_error(bool flag)
47 config.ignore_disk_crc[drive] = flag;
48 emit sig_emu_update_config();
52 #ifndef UPDATE_D88_LIST
53 #define UPDATE_D88_LIST(__d, lst) { \
56 for(int iii = 0; iii < MAX_D88_BANKS; iii++) { \
57 __tmps = QString::fromUtf8(""); \
58 if(iii < emu->d88_file[__d].bank_num) { \
59 __tmps = QString::fromUtf8(emu->d88_file[__d].disk_name[iii]); \
66 void Object_Menu_Control::do_set_correct_disk_timing(bool flag)
69 config.correct_disk_timing[drive] = flag;
70 emit sig_emu_update_config();
76 int Ui_MainWindow::write_protect_fd(int drv, bool flag)
79 if((drv < 0) || (drv >= MAX_FD)) return -1;
80 emit sig_write_protect_disk(drv, flag);
86 int Ui_MainWindow::set_d88_slot(int drive, int num)
90 if((num < 0) || (num >= MAX_D88_BANKS)) return -1;
91 path = QString::fromUtf8(emu->d88_file[drive].path);
92 menu_fds[drive]->do_select_inner_media(num);
94 if(emu && emu->d88_file[drive].cur_bank != num) {
95 emit sig_open_disk(drive, path, num);
96 if(emu->is_floppy_disk_protected(drive)) {
97 menu_fds[drive]->do_set_write_protect(true);
99 menu_fds[drive]->do_set_write_protect(false);
105 void Ui_MainWindow::do_update_recent_disk(int drv)
108 if(emu == NULL) return;
109 menu_fds[drv]->do_update_histories(listFDs[drv]);
110 menu_fds[drv]->do_set_initialize_directory(config.initial_floppy_disk_dir);
111 if(emu->is_floppy_disk_protected(drv)) {
112 menu_fds[drv]->do_write_protect_media();
114 menu_fds[drv]->do_write_unprotect_media();
119 int Ui_MainWindow::set_recent_disk(int drv, int num)
122 char path_shadow[PATH_MAX];
124 if((num < 0) || (num >= MAX_HISTORY)) return -1;
125 s_path = QString::fromLocal8Bit(config.recent_floppy_disk_path[drv][num]);
126 strncpy(path_shadow, s_path.toLocal8Bit().constData(), PATH_MAX);
127 UPDATE_HISTORY(path_shadow, config.recent_floppy_disk_path[drv], listFDs[drv]);
128 strncpy(path_shadow, s_path.toLocal8Bit().constData(), PATH_MAX);
130 get_parent_dir(path_shadow);
131 strcpy(config.initial_floppy_disk_dir, path_shadow);
132 strncpy(path_shadow, s_path.toLocal8Bit().constData(), PATH_MAX);
135 emit sig_close_disk(drv);
136 emit sig_open_disk(drv, s_path, 0);
137 menu_fds[drv]->do_update_histories(listFDs[drv]);
138 menu_fds[drv]->do_set_initialize_directory(config.initial_floppy_disk_dir);
139 if(check_file_extension(path_shadow, ".d88") || check_file_extension(path_shadow, ".d77")) {
140 UPDATE_D88_LIST(drv, listD88[drv]);
141 menu_fds[drv]->do_update_inner_media(listD88[drv], 0);
143 menu_fds[drv]->do_clear_inner_media();
146 strncpy(path_shadow, s_path.toLocal8Bit().constData(), PATH_MAX);
147 if(check_file_extension(path_shadow, ".d88") || check_file_extension(path_shadow, ".d77")) {
148 if(((drv & 1) == 0) && (drv + 1 < MAX_FD) && (1 < emu->d88_file[drv].bank_num)) {
150 emit sig_close_disk(drv2);
151 emit sig_open_disk(drv2, s_path, 1);
152 menu_fds[drv2]->do_update_histories(listFDs[drv2]);
153 menu_fds[drv2]->do_set_initialize_directory(config.initial_floppy_disk_dir);
154 UPDATE_D88_LIST(drv2, listD88[drv2]);
155 menu_fds[drv2]->do_update_inner_media(listD88[drv2], 1);
165 void Ui_MainWindow::_open_disk(int drv, const QString fname)
167 char path_shadow[PATH_MAX];
170 if(fname.length() <= 0) return;
172 strncpy(path_shadow, fname.toLocal8Bit().constData(), PATH_MAX);
173 UPDATE_HISTORY(path_shadow, config.recent_floppy_disk_path[drv], listFDs[drv]);
174 get_parent_dir(path_shadow);
175 strcpy(config.initial_floppy_disk_dir, path_shadow);
177 strncpy(path_shadow, fname.toLocal8Bit().constData(), PATH_MAX);
179 emit sig_close_disk(drv);
181 emit sig_open_disk(drv, fname, 0);
182 menu_fds[drv]->do_update_histories(listFDs[drv]);
183 menu_fds[drv]->do_set_initialize_directory(config.initial_floppy_disk_dir);
184 if(check_file_extension(path_shadow, ".d88") || check_file_extension(path_shadow, ".d77")) {
185 UPDATE_D88_LIST(drv, listD88[drv]);
186 menu_fds[drv]->do_update_inner_media(listD88[drv], 0);
188 menu_fds[drv]->do_clear_inner_media();
192 if(check_file_extension(path_shadow, ".d88") || check_file_extension(path_shadow, ".d77")) {
193 if(((drv & 1) == 0) && (drv + 1 < MAX_FD) && (1 < emu->d88_file[drv].bank_num)) {
195 emit sig_close_disk(drv2);
197 strncpy(path_shadow, fname.toLocal8Bit().constData(), PATH_MAX);
198 emit sig_open_disk(drv2, fname, 1);
199 menu_fds[drv2]->do_update_histories(listFDs[drv2]);
200 menu_fds[drv2]->do_set_initialize_directory(config.initial_floppy_disk_dir);
201 UPDATE_D88_LIST(drv2, listD88[drv2]);
202 menu_fds[drv2]->do_update_inner_media(listD88[drv2], 1);
209 void Ui_MainWindow::eject_fd(int drv)
214 emit sig_close_disk(drv);
215 menu_fds[drv]->do_clear_inner_media();
222 void Ui_MainWindow::CreateFloppyMenu(int drv, int drv_base)
226 QString ext = "*.d88 *.d77 *.1dd *.td0 *.imd *.dsk *.fdi *.hdm *.tfd *.xdf *.2d *.sf7 *.img *.ima *.vfd";
227 QString desc1 = "Floppy Disk";
228 menu_fds[drv] = new Menu_FDClass(emu, menubar, QString::fromUtf8("Obj_Floppy"), this, drv);
229 menu_fds[drv]->create_pulldown_menu();
231 menu_fds[drv]->do_clear_inner_media();
232 menu_fds[drv]->do_add_media_extension(ext, desc1);
233 SETUP_HISTORY(config.recent_floppy_disk_path[drv], listFDs[drv]);
234 menu_fds[drv]->do_update_histories(listFDs[drv]);
235 menu_fds[drv]->do_set_initialize_directory(config.initial_floppy_disk_dir);
236 listD88[drv].clear();
238 QString name = QString::fromUtf8("FD");
240 tmpv.setNum(drv_base);
242 menu_fds[drv]->setTitle(name);
247 void Ui_MainWindow::CreateFloppyPulldownMenu(int drv)
251 void Ui_MainWindow::ConfigFloppyMenuSub(int drv)
255 void Ui_MainWindow::retranslateFloppyMenu(int drv, int basedrv)
258 QString drive_name = (QApplication::translate("MainWindow", "Floppy ", 0));
259 drive_name += QString::number(basedrv);
261 if((drv < 0) || (drv >= 8)) return;
262 menu_fds[drv]->setTitle(QApplication::translate("MainWindow", drive_name.toUtf8().constData() , 0));
263 menu_fds[drv]->retranslateUi();
267 void Ui_MainWindow::ConfigFloppyMenu(void)
270 ConfigFloppyMenuSub(0);
273 ConfigFloppyMenuSub(1);
276 ConfigFloppyMenuSub(2);
279 ConfigFloppyMenuSub(3);
282 ConfigFloppyMenuSub(4);
285 ConfigFloppyMenuSub(5);
288 ConfigFloppyMenuSub(6);
291 ConfigFloppyMenuSub(7);