2 * Qt / Tape Menu, Utilities
3 * (C) 2015 K.Ohta <whatisthis.sowhat _at_ gmail.com>
9 #include "commonclasses.h"
10 #include "mainwidget_base.h"
13 #include "qt_dialogs.h"
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)
19 use_write_protect = true;
20 use_d88_menus = false;
22 ext_rec_filter.clear();
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");
34 Menu_CMTClass::~Menu_CMTClass()
38 void Menu_CMTClass::create_pulldown_menu_device_sub(void)
40 action_wave_shaper = new Action_Control(p_wid, using_flags);
41 action_wave_shaper->setVisible(true);
42 action_wave_shaper->setCheckable(true);
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);
49 action_recording = new Action_Control(p_wid, using_flags);
50 action_recording->setVisible(true);
51 action_recording->setCheckable(false);
53 if(config.wave_shaper == 0) {
54 action_wave_shaper->setChecked(false);
56 action_wave_shaper->setChecked(true);
58 if(using_flags->is_machine_cmt_mz_series()) {
59 if(config.direct_load_mzt == 0) {
60 action_direct_load_mzt->setChecked(false);
62 action_direct_load_mzt->setChecked(true);
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);
70 action_play_stop = new Action_Control(p_wid, using_flags);
71 action_play_stop->setVisible(true);
72 action_play_stop->setCheckable(true);
74 action_fast_forward = new Action_Control(p_wid, using_flags);
75 action_fast_forward->setVisible(true);
76 action_fast_forward->setCheckable(true);
78 action_fast_rewind = new Action_Control(p_wid, using_flags);
79 action_fast_rewind->setVisible(true);
80 action_fast_rewind->setCheckable(true);
82 action_apss_forward = new Action_Control(p_wid, using_flags);
83 action_apss_forward->setVisible(true);
84 action_apss_forward->setCheckable(true);
86 action_apss_rewind = new Action_Control(p_wid, using_flags);
87 action_apss_rewind->setVisible(true);
88 action_apss_rewind->setCheckable(true);
90 action_group_tape_button = new QActionGroup(p_wid);
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);
103 void Menu_CMTClass::connect_menu_device_sub(void)
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();
114 this->addAction(action_fast_forward);
115 this->addAction(action_fast_rewind);
116 this->addSeparator();
118 this->addAction(action_apss_forward);
119 this->addAction(action_apss_rewind);
120 this->addSeparator();
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)));
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)));
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()));
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)));
153 void Menu_CMTClass::do_add_rec_media_extension(QString ext, QString description)
155 QString tmps = description;
156 QString all = QString::fromUtf8("All Files (*.*)");
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(")"));
164 ext_rec_filter << tmps;
165 ext_rec_filter << all;
167 ext_rec_filter.removeDuplicates();
170 void Menu_CMTClass::do_open_rec_dialog()
174 if(initial_dir.isEmpty()) {
177 initial_dir = dir.currentPath();
178 strncpy(app, initial_dir.toLocal8Bit().constData(), PATH_MAX);
179 initial_dir = QString::fromLocal8Bit(get_parent_dir(app));
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)));
196 void Menu_CMTClass::do_eject_cmt(int dummy)
198 emit sig_close_tape();
201 void Menu_CMTClass::retranslate_pulldown_menu_device_sub(void)
203 action_insert->setText(QApplication::translate("MainWindow", "Insert CMT", 0));
204 action_eject->setText(QApplication::translate("MainWindow", "Eject CMT", 0));
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));
210 this->setTitle(QApplication::translate("MainWindow", "Cassette Tape" , 0));
211 action_insert->setIcon(icon_cmt);
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);
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));
228 action_recording->setIcon(icon_record_to_wav);
229 action_recording->setText(QApplication::translate("MainWindow", "Record to a WAV File", 0));