OSDN Git Service

abcddc8e7f10bdc353002726c391bb11d14145e9
[csp-qt/common_source_project-fm7.git] / source / src / qt / gui / menu_cmt.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
9 #include "commonclasses.h"
10 #include "mainwidget_base.h"
11 #include "menu_cmt.h"
12
13 #include "qt_dialogs.h"
14 //#include "emu.h"
15
16
17 Menu_CMTClass::Menu_CMTClass(EMU *ep, QMenuBar *root_entry, QString desc, USING_FLAGS *p, QWidget *parent, int drv) : Menu_MetaClass(ep, root_entry, desc, p, parent, drv)
18 {
19         use_write_protect = true;
20         use_d88_menus = false;
21
22         ext_rec_filter.clear();
23
24         icon_cmt = QIcon(":/icon_cmt.png");
25         icon_play_start = QApplication::style()->standardIcon(QStyle::SP_MediaPlay);
26         icon_play_stop = QApplication::style()->standardIcon(QStyle::SP_MediaStop);
27         icon_ff = QApplication::style()->standardIcon(QStyle::SP_MediaSkipForward);
28         icon_rew = QApplication::style()->standardIcon(QStyle::SP_MediaSkipBackward);
29         icon_apss_forward = QApplication::style()->standardIcon(QStyle::SP_MediaSeekForward);
30         icon_apss_backward = QApplication::style()->standardIcon(QStyle::SP_MediaSeekBackward);
31         icon_record_to_wav = QIcon(":/icon_record_to_tape.png");
32 }
33
34 Menu_CMTClass::~Menu_CMTClass()
35 {
36 }
37
38 void Menu_CMTClass::create_pulldown_menu_device_sub(void)
39 {
40         action_wave_shaper = new Action_Control(p_wid, using_flags);
41         action_wave_shaper->setVisible(true);
42         action_wave_shaper->setCheckable(true);
43
44         if(using_flags->is_machine_cmt_mz_series()) {
45                 action_direct_load_mzt = new Action_Control(p_wid, using_flags);
46                 action_direct_load_mzt->setVisible(true);
47                 action_direct_load_mzt->setCheckable(true);
48         }
49         action_recording = new Action_Control(p_wid, using_flags);
50         action_recording->setVisible(true);
51         action_recording->setCheckable(false);
52
53         if(config.wave_shaper == 0) {
54                 action_wave_shaper->setChecked(false);
55         } else {
56                 action_wave_shaper->setChecked(true);
57         }
58         if(using_flags->is_machine_cmt_mz_series()) {
59                 if(config.direct_load_mzt == 0) {
60                         action_direct_load_mzt->setChecked(false);
61                 } else {
62                         action_direct_load_mzt->setChecked(true);
63                 }
64         }
65         if(using_flags->is_use_tape_button()) {
66                 action_play_start = new Action_Control(p_wid, using_flags);
67                 action_play_start->setVisible(true);
68                 action_play_start->setCheckable(true);
69                 
70                 action_play_stop = new Action_Control(p_wid, using_flags);
71                 action_play_stop->setVisible(true);
72                 action_play_stop->setCheckable(true);
73                 
74                 action_fast_forward = new Action_Control(p_wid, using_flags);
75                 action_fast_forward->setVisible(true);
76                 action_fast_forward->setCheckable(true);
77                 
78                 action_fast_rewind = new Action_Control(p_wid, using_flags);
79                 action_fast_rewind->setVisible(true);
80                 action_fast_rewind->setCheckable(true);
81                 
82                 action_apss_forward = new Action_Control(p_wid, using_flags);
83                 action_apss_forward->setVisible(true);
84                 action_apss_forward->setCheckable(true);
85                 
86                 action_apss_rewind = new Action_Control(p_wid, using_flags);
87                 action_apss_rewind->setVisible(true);
88                 action_apss_rewind->setCheckable(true);
89
90                 action_group_tape_button = new QActionGroup(p_wid);
91
92                 action_group_tape_button->setExclusive(true);
93                 action_group_tape_button->addAction(action_play_start);
94                 action_group_tape_button->addAction(action_play_stop);
95                 action_group_tape_button->addAction(action_fast_forward);
96                 action_group_tape_button->addAction(action_fast_rewind);
97                 action_group_tape_button->addAction(action_apss_forward);
98                 action_group_tape_button->addAction(action_apss_rewind);
99         }
100 }
101
102
103 void Menu_CMTClass::connect_menu_device_sub(void)
104 {
105         if(using_flags->is_use_tape()) {
106                 this->addSeparator();
107                 this->addAction(action_recording);
108                 this->addSeparator();
109                 if(using_flags->is_use_tape_button()) {
110                         this->addAction(action_play_start);
111                         this->addAction(action_play_stop);
112                         this->addSeparator();
113                         
114                         this->addAction(action_fast_forward);
115                         this->addAction(action_fast_rewind);
116                         this->addSeparator();
117         
118                         this->addAction(action_apss_forward);
119                         this->addAction(action_apss_rewind);
120                         this->addSeparator();
121                 }
122                 this->addAction(action_wave_shaper);
123                 connect(action_wave_shaper, SIGNAL(toggled(bool)),
124                                 p_wid, SLOT(set_wave_shaper(bool)));
125                 if(using_flags->is_machine_cmt_mz_series()) {
126                         this->addAction(action_direct_load_mzt);
127                         connect(action_direct_load_mzt, SIGNAL(toggled(bool)),
128                                         p_wid, SLOT(set_direct_load_from_mzt(bool)));
129                 }
130                 connect(action_recording, SIGNAL(triggered()),
131                                 this, SLOT(do_open_rec_dialog()));
132                 connect(this, SIGNAL(sig_open_media(int, QString)),
133                                 p_wid, SLOT(do_open_read_cmt(int, QString)));
134                 
135                 connect(this, SIGNAL(sig_eject_media(int)),
136                                 this, SLOT(do_eject_cmt(int)));
137                 connect(this, SIGNAL(sig_close_tape()),
138                                 p_wid, SLOT(eject_cmt()));
139                 
140                 connect(this, SIGNAL(sig_write_protect_media(int, bool)), p_wid, SLOT(do_write_protect_cmt(int, bool)));        
141                 connect(this, SIGNAL(sig_set_recent_media(int, int)), p_wid, SLOT(set_recent_cmt(int, int)));
142                 if(using_flags->is_use_tape_button()) {
143                         connect(action_play_start, SIGNAL(triggered()), p_wid, SLOT(do_push_play_tape(void)));
144                         connect(action_play_stop,  SIGNAL(triggered()), p_wid, SLOT(do_push_stop_tape(void)));
145                         connect(action_fast_forward,  SIGNAL(triggered()), p_wid, SLOT(do_push_fast_forward_tape(void)));
146                         connect(action_fast_rewind,   SIGNAL(triggered()), p_wid, SLOT(do_push_rewind_tape(void)));
147                         connect(action_apss_forward,  SIGNAL(triggered()), p_wid, SLOT(do_push_apss_forward_tape(void)));
148                         connect(action_apss_rewind,   SIGNAL(triggered()), p_wid, SLOT(do_push_apss_rewind_tape(void)));
149                 }
150         }
151 }
152
153 void Menu_CMTClass::do_add_rec_media_extension(QString ext, QString description)
154 {
155         QString tmps = description;
156         QString all = QString::fromUtf8("All Files (*.*)");
157
158         tmps.append(QString::fromUtf8(" ("));
159         tmps.append(ext.toLower());
160         tmps.append(QString::fromUtf8(" "));
161         tmps.append(ext.toUpper());
162         tmps.append(QString::fromUtf8(")"));
163
164         ext_rec_filter << tmps;
165         ext_rec_filter << all;
166         
167         ext_rec_filter.removeDuplicates();
168 }
169
170 void Menu_CMTClass::do_open_rec_dialog()
171 {
172         CSP_DiskDialog dlg;
173         
174         if(initial_dir.isEmpty()) { 
175                 QDir dir;
176                 char app[PATH_MAX];
177                 initial_dir = dir.currentPath();
178                 strncpy(app, initial_dir.toLocal8Bit().constData(), PATH_MAX);
179                 initial_dir = QString::fromLocal8Bit(get_parent_dir(app));
180         }
181         dlg.setOption(QFileDialog::ReadOnly, false);
182         dlg.setOption(QFileDialog::DontUseNativeDialog, true);
183         dlg.setAcceptMode(QFileDialog::AcceptSave);
184         dlg.param->setDrive(media_drive);
185         dlg.setDirectory(initial_dir);
186         dlg.setNameFilters(ext_rec_filter);
187         dlg.setWindowTitle(desc_rec);
188         dlg.setWindowTitle(QApplication::translate("MainWindow", "Save Tape", 0));
189         QObject::connect(&dlg, SIGNAL(fileSelected(QString)),
190                                          p_wid, SLOT(do_open_write_cmt(QString))); 
191         dlg.show();
192         dlg.exec();
193         return;
194 }
195
196 void Menu_CMTClass::do_eject_cmt(int dummy) 
197 {
198         emit sig_close_tape();
199 }
200
201 void Menu_CMTClass::retranslate_pulldown_menu_device_sub(void)
202 {
203         action_insert->setText(QApplication::translate("MainWindow", "Insert CMT", 0));
204         action_eject->setText(QApplication::translate("MainWindow", "Eject CMT", 0));
205
206         action_wave_shaper->setText(QApplication::translate("MainWindow", "Enable Wave Shaper", 0));
207         if(using_flags->is_machine_cmt_mz_series()) {
208                 action_direct_load_mzt->setText(QApplication::translate("MainWindow", "Direct load from MZT", 0));
209         }
210         this->setTitle(QApplication::translate("MainWindow", "Cassette Tape" , 0));
211         action_insert->setIcon(icon_cmt);
212
213         if(using_flags->is_use_tape_button()) {
214                 action_play_start->setIcon(icon_play_start);
215                 action_play_stop->setIcon(icon_play_stop);
216                 action_fast_forward->setIcon(icon_ff);
217                 action_fast_rewind->setIcon(icon_rew);
218                 action_apss_forward->setIcon(icon_apss_forward);
219                 action_apss_rewind->setIcon(icon_apss_backward);
220                 
221                 action_play_stop->setText(QApplication::translate("MainWindow", "Play Stop", 0));
222                 action_play_start->setText(QApplication::translate("MainWindow", "Play Start", 0));
223                 action_fast_forward->setText(QApplication::translate("MainWindow", "Fast Forward", 0));
224                 action_fast_rewind->setText(QApplication::translate("MainWindow", "Rewind", 0));
225                 action_apss_forward->setText(QApplication::translate("MainWindow", "APSS Forward", 0));
226                 action_apss_rewind->setText(QApplication::translate("MainWindow", "APSS Rewind", 0));
227         }
228         action_recording->setIcon(icon_record_to_wav);
229         action_recording->setText(QApplication::translate("MainWindow", "Record to a WAV File", 0));
230 }