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 / menu_binary.cpp
1 /*
2  * Qt / Tape Menu, Utilities
3  * (C) 2015 K.Ohta <whatisthis.sowhat _at_ gmail.com>
4  * License : GPLv2
5  *   History :
6  *     Jan 13 2015 : Start
7  */
8 #include <QApplication>
9 #include <QActionGroup>
10
11 #include "commonclasses.h"
12 #include "mainwidget_base.h"
13 #include "menu_binary.h"
14
15 #include "qt_dialogs.h"
16
17
18 Menu_BinaryClass::Menu_BinaryClass(QMenuBar *root_entry, QString desc, std::shared_ptr<USING_FLAGS> p, QWidget *parent, int drv, int base_drv) : Menu_MetaClass(root_entry, desc, p, parent, drv, base_drv)
19 {
20         use_write_protect = false;
21         use_d88_menus = false;
22 }
23
24 Menu_BinaryClass::~Menu_BinaryClass()
25 {
26 }
27
28 void Menu_BinaryClass::create_pulldown_menu_device_sub(void)
29 {
30         int ii;
31         action_saving = new Action_Control(p_wid, using_flags);
32         action_saving->setVisible(true);
33         action_saving->setCheckable(false);
34
35         //menu_history_save = new QMenu(this);
36         //menu_history_save->setObjectName(QString::fromUtf8("menu_history_save_") + object_desc);
37
38         {
39                 QString tmps;
40                 action_group_save_recent = new QActionGroup(p_wid);
41                 action_group_save_recent->setExclusive(true);
42
43                 for(ii = 0; ii < MAX_HISTORY; ii++) {
44                         tmps = history.value(ii, "");
45                         action_recent_save_list[ii] = new Action_Control(p_wid, using_flags);
46                         struct CSP_Ui_Menu::DriveIndexPair tmp;
47                         tmp.drive = media_drive;
48                         tmp.index = ii;
49                         QVariant _tmpv;
50                         _tmpv.setValue(tmp);
51                         action_recent_save_list[ii]->setData(_tmpv);
52
53                         action_recent_save_list[ii]->setText(tmps);
54                         action_group_save_recent->addAction(action_recent_save_list[ii]);
55                         if(!tmps.isEmpty()) {
56                                 action_recent_save_list[ii]->setVisible(true);
57                         } else {
58                                 action_recent_save_list[ii]->setVisible(false);
59                         }
60                 }
61         }
62 }
63
64 void Menu_BinaryClass::do_open_media_save(int drv, QString name) {
65         emit sig_open_media_save(drv, name);
66 }
67
68 void Menu_BinaryClass::do_open_recent_media_save(int drv, int slot) {
69         emit sig_set_recent_media_save(drv, slot);
70 }
71
72 void Menu_BinaryClass::do_update_histories(QStringList lst)
73 {
74         int ii;
75         QString tmps;
76
77         Menu_MetaClass::do_update_histories(lst);
78
79         for(ii = 0; ii < MAX_HISTORY; ii++) {
80                 tmps = QString::fromUtf8("");
81                 if(ii < lst.size()) tmps = lst.value(ii);
82                 action_recent_save_list[ii]->setText(tmps);
83                 if(!tmps.isEmpty()) {
84                         action_recent_save_list[ii]->setVisible(true);
85                 } else {
86                         action_recent_save_list[ii]->setVisible(false);
87                 }
88         }
89 }
90
91
92
93 void Menu_BinaryClass::connect_menu_device_sub(void)
94 {
95         int ii;
96         if(!using_flags->is_machine_pasopia_variants()) {
97                 this->addAction(action_saving);
98                 this->addSeparator();
99         } else {
100                 action_saving->setVisible(false);
101         }
102         action_eject->setVisible(false);
103         for(ii = 0; ii < MAX_HISTORY; ii++) {
104                 connect(action_recent_save_list[ii], SIGNAL(triggered()),
105                                 p_wid, SLOT(set_recent_binary_save()));
106         }
107         connect(action_saving, SIGNAL(triggered()),     this, SLOT(do_open_save_dialog()));
108
109         connect(this, SIGNAL(sig_open_media(int, QString)), p_wid, SLOT(_open_binary_load(int, QString)));
110         connect(this, SIGNAL(sig_open_media_save(int, QString)), p_wid, SLOT(_open_binary_save(int, QString)));
111 }
112
113
114
115 void Menu_BinaryClass::do_open_save_dialog()
116 {
117         CSP_DiskDialog *dlg = new CSP_DiskDialog(nullptr);
118
119         if(initial_dir.isEmpty()) {
120                 QDir dir;
121                 char app[PATH_MAX];
122                 initial_dir = dir.currentPath();
123                 strncpy(app, initial_dir.toLocal8Bit().constData(), PATH_MAX - 1);
124                 initial_dir = QString::fromLocal8Bit(get_parent_dir(app));
125         }
126         dlg->setOption(QFileDialog::ReadOnly, false);
127         dlg->setOption(QFileDialog::DontUseNativeDialog, true);
128         dlg->setAcceptMode(QFileDialog::AcceptSave);
129         dlg->param->setDrive(media_drive);
130         dlg->param->setPlay(false);
131         dlg->setWindowTitle(QApplication::translate("MenuMedia", "Save Binary", 0));
132         dlg->setDirectory(initial_dir);
133         dlg->setNameFilters(ext_filter);
134
135         connect(dlg, SIGNAL(fileSelected(QString)), dlg->param, SLOT(_open_media(QString)));
136         connect(dlg->param, SIGNAL(sig_open_media(int, QString)),
137                                          this, SLOT(do_open_media_save(int, QString)));
138
139         connect(dlg, SIGNAL(accepted()), this, SLOT(do_close_window()), Qt::QueuedConnection);
140         connect(dlg, SIGNAL(rejected()), this, SLOT(do_close_window()), Qt::QueuedConnection);
141         connect(dlg, SIGNAL(finished(int)), this, SLOT(do_finish(int)), Qt::QueuedConnection);
142
143         dialogs.append(dlg);
144         dlg->setModal(false);
145
146         dlg->show();
147         //dlg.exec();
148         return;
149 }
150
151 void Menu_BinaryClass::retranslate_pulldown_menu_device_sub(void)
152 {
153         action_insert->setText(QApplication::translate("MenuMedia", "Load", 0));
154         action_insert->setToolTip(QApplication::translate("MenuMedia", "Load memory image from a file.", 0));
155         action_saving->setText(QApplication::translate("MenuMedia", "Save", 0));
156         action_saving->setToolTip(QApplication::translate("MenuMedia", "Save memory image to a file.", 0));
157         action_saving->setIcon(QIcon(":/icon_saveas.png"));
158         //menu_history_save->setTitle(QApplication::translate("MenuMedia", "Recently Saved", 0));
159         menu_history->setTitle(QApplication::translate("MenuMedia", "Recently Loaded", 0));
160 }