OSDN Git Service

b619b952e09cfa2a25c49fec436399296c436406
[csp-qt/common_source_project-fm7.git] / source / src / qt / gui / util_cmt.cpp
1 /*
2  * UI->Qt->MainWindow : CMT 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
10
11 #include "commonclasses.h"
12 #include "mainwidget_base.h"
13 #include "qt_dialogs.h"
14 #include "agar_logger.h"
15
16 #include "menu_cmt.h"
17 #include "menu_flags.h"
18
19 //extern USING_FLAGS *using_flags;
20 void Object_Menu_Control::start_insert_play_cmt(void) {
21         //AGAR_DebugLog(AGAR_LOG_DEBUG, "%d", play);
22         emit sig_insert_play_cmt(play);
23 }
24 void Object_Menu_Control::eject_cmt(void) {
25         emit sig_eject_cmt();
26 }
27 void Object_Menu_Control::on_recent_cmt(){
28         emit sig_recent_cmt(s_num);
29 }
30 void Object_Menu_Control::do_set_write_protect_cmt(void) {
31          write_protect = true;
32          emit sig_set_write_protect_cmt(write_protect);
33 }
34 void Object_Menu_Control::do_unset_write_protect_cmt(void) {
35         write_protect = false;
36         emit sig_set_write_protect_cmt(write_protect);
37 }
38
39
40 void Ui_MainWindowBase::CreateCMTMenu(void)
41 {
42         QString ext_play;
43         QString ext_rec;
44         QString desc_play;
45         QString desc_rec;
46         
47         listCMT.clear();
48         menu_CMT = new Menu_CMTClass(emu, menubar, "Object_CMT_Menu", using_flags, this, 0);
49         menu_CMT->setObjectName(QString::fromUtf8("menuCMT", -1));
50         
51         menu_CMT->create_pulldown_menu();       
52         // Translate Menu
53         SETUP_HISTORY(config.recent_tape_path, listCMT);
54         menu_CMT->do_set_write_protect(false);
55         menu_CMT->do_update_histories(listCMT);
56         menu_CMT->do_set_initialize_directory(config.initial_tape_dir);
57
58         if(using_flags->is_machine_pc6001()) {
59                 ext_play = "*.wav *.p6 *.cas";
60                 ext_rec = "*.wav *.p6 *.cas";
61         } else if(using_flags->is_machine_pc8001_variants()) {
62                 ext_play = "*.cas *.cmt *.n80 *.t88";
63                 ext_rec  = "*.cas *.cmt";
64         } else if(using_flags->is_machine_mz80a_variants()) {
65                 ext_play = "*.wav *.cas *.mzt *.m12 *.t77";
66                 ext_rec = "*.wav *.cas";
67         } else if(using_flags->is_machine_mz80b_variants()) {
68                 ext_play = "*.wav *.cas *.mzt *.mti *.mtw *.dat";
69                 ext_rec =  "*.wav *.cas";
70         } else if(using_flags->is_machine_x1_series()) {
71                 ext_play = "*.wav *.cas *.tap *.t77";
72                 ext_rec =  "*.wav *.cas";
73         } else if(using_flags->is_machine_fm7_series()) {
74                 ext_play = "*.wav *.t77";
75                 ext_rec = "*.wav *.t77";
76         } else if(using_flags->is_tape_binary_only()) {
77                 ext_play = "*.cas *.cmt";
78                 ext_rec = "*.cas *.cmt";
79         } else {
80                 ext_play = "*.wav *.cas";
81                 ext_rec = "*.wav *.cas";
82         }
83         desc_play = "Data Recorder Tape [Play]";
84         desc_rec  = "Data Recorder Tape [Rec]";
85
86         menu_CMT->do_add_media_extension(ext_play, desc_play);
87         menu_CMT->do_add_rec_media_extension(ext_rec, desc_rec);
88 }
89
90 void Ui_MainWindowBase::CreateCMTPulldownMenu(void)
91 {
92 }
93
94
95 int Ui_MainWindowBase::set_recent_cmt(int drv, int num) 
96 {
97         QString s_path;
98         char path_shadow[PATH_MAX];
99         int i;
100         if((num < 0) || (num >= MAX_HISTORY)) return -1;
101     
102         s_path = QString::fromLocal8Bit(config.recent_tape_path[num]);
103         strncpy(path_shadow, s_path.toLocal8Bit().constData(), PATH_MAX);
104         UPDATE_HISTORY(path_shadow, config.recent_tape_path, listCMT);
105    
106         get_parent_dir(path_shadow);
107         strcpy(config.initial_tape_dir, path_shadow);
108         strncpy(path_shadow, s_path.toLocal8Bit().constData(), PATH_MAX);
109         AGAR_DebugLog(AGAR_LOG_DEBUG, "Tape: Open READ");
110         
111         emit sig_close_tape();
112         emit sig_play_tape(s_path);
113         menu_CMT->do_update_histories(listCMT);
114         menu_CMT->do_set_initialize_directory(config.initial_tape_dir);
115         return 0;
116 }
117
118 void Ui_MainWindowBase::do_write_protect_cmt(int drv, bool flag)
119 {
120         cmt_write_protect = flag;
121         //menu_CMT->do_set_write_protect(flag);
122 }
123
124
125 void Ui_MainWindowBase::do_push_play_tape(void)
126 {
127         // Do notify?
128         emit sig_cmt_push_play();
129 }
130
131 void Ui_MainWindowBase::do_push_stop_tape(void)
132 {
133         // Do notify?
134         emit sig_cmt_push_stop();
135 }
136
137 void Ui_MainWindowBase::do_display_tape_play(bool flag)
138 {
139         //if(flag) {
140         //      actionPlay_Start->setChecked(true);
141         //} else {
142         //      actionPlay_Stop->setChecked(true);
143         //}
144 }
145  
146 void Ui_MainWindowBase::do_push_fast_forward_tape(void)
147 {
148         // Do notify?
149         emit sig_cmt_push_fast_forward();
150 }
151 void Ui_MainWindowBase::do_push_rewind_tape(void)
152 {
153         // Do notify?
154         emit sig_cmt_push_fast_rewind();
155 }
156 void Ui_MainWindowBase::do_push_apss_forward_tape(void)
157 {
158         // Do notify?
159         emit sig_cmt_push_apss_forward();
160 }
161 void Ui_MainWindowBase::do_push_apss_rewind_tape(void)
162 {
163         // Do notify?
164         emit sig_cmt_push_apss_rewind();
165 }
166
167 void Ui_MainWindowBase::set_wave_shaper(bool f)
168 {
169         if(f) {
170                 config.wave_shaper = 1;
171         } else {
172                 config.wave_shaper = 0;
173         }
174 }
175
176 bool Ui_MainWindowBase::get_wave_shaper(void)
177 {
178         if(config.wave_shaper == 0) return false;
179         return true;
180 }
181
182 void Ui_MainWindowBase::set_direct_load_from_mzt(bool f)
183 {
184         if(f) {
185                 config.direct_load_mzt = 1;
186         } else {
187                 config.direct_load_mzt = 0;
188         }
189 }
190
191 bool Ui_MainWindowBase::get_direct_load_mzt(void)
192 {
193         if(config.direct_load_mzt == 0) return false;
194         return true;
195 }
196
197 void Ui_MainWindowBase::eject_cmt(void) 
198 {
199         emit sig_close_tape();
200 }
201
202 void Ui_MainWindowBase::ConfigCMTMenuSub(void)
203 {
204 }
205
206 void Ui_MainWindowBase::do_open_read_cmt(int dummy, QString path) 
207 {
208         char path_shadow[PATH_MAX];
209         int i;
210
211         if(path.length() <= 0) return;
212         strncpy(path_shadow, path.toLocal8Bit().constData(), PATH_MAX);
213         UPDATE_HISTORY(path_shadow, config.recent_tape_path, listCMT);
214         get_parent_dir(path_shadow);
215         strcpy(config.initial_tape_dir, path_shadow);
216         // Copy filename again.
217         strncpy(path_shadow, path.toLocal8Bit().constData(), PATH_MAX);
218
219         emit sig_close_tape();
220         AGAR_DebugLog(AGAR_LOG_DEBUG, "Tape: Open READ : filename = %s", path_shadow);
221         emit sig_play_tape(path);
222         menu_CMT->do_update_histories(listCMT);
223         menu_CMT->do_set_initialize_directory(config.initial_tape_dir);
224 }
225
226 void Ui_MainWindowBase::do_open_write_cmt(QString path) 
227 {
228         char path_shadow[PATH_MAX];
229         int i;
230
231         if(path.length() <= 0) return;
232         strncpy(path_shadow, path.toLocal8Bit().constData(), PATH_MAX);
233         UPDATE_HISTORY(path_shadow, config.recent_tape_path, listCMT);
234         get_parent_dir(path_shadow);
235         strcpy(config.initial_tape_dir, path_shadow);
236         // Copy filename again.
237         strncpy(path_shadow, path.toLocal8Bit().constData(), PATH_MAX);
238
239         emit sig_close_tape();
240         if(menu_CMT->getWriteProtect() != false) {
241                 AGAR_DebugLog(AGAR_LOG_DEBUG, "Tape: Open READ : filename = %s", path_shadow);
242                 emit sig_play_tape(path);
243         } else {
244                 AGAR_DebugLog(AGAR_LOG_DEBUG, "Tape: Open Write : filename = %s", path_shadow);
245                 emit sig_rec_tape(path);
246         }
247         menu_CMT->do_update_histories(listCMT);
248         menu_CMT->do_set_initialize_directory(config.initial_tape_dir);
249 }
250
251
252 void Ui_MainWindowBase::retranslateCMTMenu(void)
253 {
254         if(using_flags->is_use_tape()) {
255                 menu_CMT->retranslateUi();
256         }
257 }
258
259 void Ui_MainWindowBase::ConfigCMTMenu(void)
260 {
261         ConfigCMTMenuSub(); 
262 }