1 // ----------------------------------------------------------------------------
2 // Copyright (C) 2014
3 //              David Freese, W1HKJ
4 //
5 // This file is part of flrig.
6 //
7 // flrig is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // flrig is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 // ----------------------------------------------------------------------------
20 #include <iostream>
21 #include "gettext.h"
22 #include "rigpanel.h"
23 #include "images.h"
24 #include "rig.h"
25 #include "rigs.h"
26 #include "status.h"
27 #include "support.h"
28 #include "K3_ui.h"
29 #include "KX3_ui.h"
30 #include "socket_io.h"
31 #include "hspinner.h"
32 #include "ui.h"
33 #include "cwioUI.h"
34 #include "cwio.h"
35 
36 Fl_Light_Button *btnPOWER = (Fl_Light_Button *)0;
37 
38 // controls for touch screen interface
39 Hspinner *spnrPOWER = (Hspinner *)0;
40 Hspinner *spnrVOLUME = (Hspinner *)0;
41 Hspinner *spnrRFGAIN = (Hspinner *)0;
42 Hspinner *spnrSQUELCH = (Hspinner *)0;
43 Hspinner *spnrNR = (Hspinner *)0;
44 Hspinner *spnrIFSHIFT = (Hspinner *)0;
45 Hspinner *spnrINNER = (Hspinner *)0;
46 Hspinner *spnrOUTER = (Hspinner *)0;
47 Hspinner *spnrNOTCH = (Hspinner *)0;
48 Hspinner *spnrMICGAIN = (Hspinner *)0;
49 
50 static Fl_Double_Window *meter_scale_dialog = (Fl_Double_Window *)0;
51 static Fl_Double_Window *meter_filters = (Fl_Double_Window *)0;
52 
53 Fl_Group* grp_menu = (Fl_Group *)0;
54 
55 Fl_Menu_Bar *small_menu=(Fl_Menu_Bar *)0;
56 Fl_Menu_Bar *wide_menu=(Fl_Menu_Bar *)0;
57 
58 Fl_Menu_Item *mnuExit = (Fl_Menu_Item *)0;
59 Fl_Menu_Item *mnuConfig = (Fl_Menu_Item *)0;
60 Fl_Menu_Item *mnuTooltips = (Fl_Menu_Item *)0;
61 Fl_Menu_Item *mnuSchema = (Fl_Menu_Item *)0;
62 Fl_Menu_Item *mnuColorConfig = (Fl_Menu_Item *)0;
63 Fl_Menu_Item *mnu_meter_filtering = (Fl_Menu_Item *)0;
64 Fl_Menu_Item *mnuConfigXcvr = (Fl_Menu_Item *)0;
65 Fl_Menu_Item *save_me = (Fl_Menu_Item *)0;
66 Fl_Menu_Item *mnuHelp = (Fl_Menu_Item *)0;
67 Fl_Menu_Item *mnuOnLineHelp = (Fl_Menu_Item *)0;
68 Fl_Menu_Item *mnuAbout = (Fl_Menu_Item *)0;
69 Fl_Box *tcpip_menu_box = (Fl_Box *)0;
70 Fl_Group *tcpip_box = (Fl_Group *)0;
71 
72 Fl_Box *labelMEMORY = (Fl_Box *)0;
73 
74 Fl_Output *txt_encA=(Fl_Output *)0;
75 
76 Fl_Group *grpMeters = (Fl_Group *)0;
77 Fl_Box *scaleSmeter=(Fl_Box *)0;
78 
79 Fl_Light_Button *btnPreamp = (Fl_Light_Button *)0;
80 Fl_Light_Button *btnNOISE = (Fl_Light_Button *)0;
81 Fl_Light_Button *btnAutoNotch = (Fl_Light_Button *)0;
82 Fl_Group *grp_row1b2 = (Fl_Group *)0;
83 Fl_Button *btnAswapB = (Fl_Button *)0;
84 Fl_Button *btn_K3_swapAB = (Fl_Button *)0;
85 Fl_Button *btn_KX3_swapAB = (Fl_Button *)0;
86 Fl_Light_Button *btnB = (Fl_Light_Button *)0;
87 Fl_Light_Button *btnSplit = (Fl_Light_Button *)0;
88 Fl_Light_Button *btnPTT = (Fl_Light_Button *)0;
89 Fl_Box *bx_row1_expander2=(Fl_Box *)0;
90 Fl_Group *grp_row2 = (Fl_Group *)0;
91 Fl_Group *grp_row2a = (Fl_Group *)0;
92 Fl_Wheel_Value_Slider *sldrSQUELCH = (Fl_Wheel_Value_Slider *)0;
93 Fl_Wheel_Value_Slider *sldrMICGAIN = (Fl_Wheel_Value_Slider *)0;
94 Fl_Box *bx_sep2a=(Fl_Box *)0;
95 Fl_Group *grp_row2b = (Fl_Group *)0;
96 Fl_Light_Button *btnIFsh = (Fl_Light_Button *)0;
97 Fl_Wheel_Value_Slider *sldrIFSHIFT = (Fl_Wheel_Value_Slider *)0;
98 
99 Fl_Light_Button *btnLOCK = (Fl_Light_Button *)0;
100 Fl_Button *btnCLRPBT = (Fl_Light_Button *)0;
101 Fl_Wheel_Value_Slider *sldrINNER = (Fl_Wheel_Value_Slider *)0;
102 Fl_Wheel_Value_Slider *sldrOUTER = (Fl_Wheel_Value_Slider *)0;
103 
104 Fl_Light_Button *btnNR = (Fl_Light_Button *)0;
105 Fl_Wheel_Value_Slider *sldrNR = (Fl_Wheel_Value_Slider *)0;
106 Fl_Box *bx_sep2b=(Fl_Box *)0;
107 Fl_Group *grp_row2c = (Fl_Group *)0;
108 Fl_Light_Button *btnNotch = (Fl_Light_Button *)0;
109 Fl_Wheel_Value_Slider *sldrNOTCH = (Fl_Wheel_Value_Slider *)0;
110 Fl_Light_Button *btnAGC = (Fl_Light_Button *)0;
111 Fl_Wheel_Value_Slider *sldrRFGAIN = (Fl_Wheel_Value_Slider *)0;
112 Fl_Box *bx_sep2c=(Fl_Box *)0;
113 Fl_Group *grp_row2d = (Fl_Group *)0;
114 Fl_Wheel_Value_Slider *sldrPOWER = (Fl_Wheel_Value_Slider *)0;
115 Fl_Light_Button *btnVol = (Fl_Light_Button *)0;
116 Fl_Wheel_Value_Slider *sldrVOLUME = (Fl_Wheel_Value_Slider *)0;
117 
118 Fl_Group *grpTABS = (Fl_Group *)0;
119 
120 Fl_Group *hidden_tabs = (Fl_Group *)0;
121 
122 Fl_Tabs *tabsGeneric=(Fl_Tabs *)0;
123 
124 Fl_Group *tab_yaesu_bands = (Fl_Group *)0;
125 Fl_Button *btn_yaesu_select_1 = (Fl_Button *)0;
126 Fl_Button *btn_yaesu_select_2 = (Fl_Button *)0;
127 Fl_Button *btn_yaesu_select_3 = (Fl_Button *)0;
128 Fl_Button *btn_yaesu_select_4 = (Fl_Button *)0;
129 Fl_Button *btn_yaesu_select_5 = (Fl_Button *)0;
130 Fl_Button *btn_yaesu_select_6 = (Fl_Button *)0;
131 Fl_Button *btn_yaesu_select_7 = (Fl_Button *)0;
132 Fl_Button *btn_yaesu_select_8 = (Fl_Button *)0;
133 Fl_Button *btn_yaesu_select_9 = (Fl_Button *)0;
134 Fl_Button *btn_yaesu_select_10 = (Fl_Button *)0;
135 Fl_Button *btn_yaesu_select_11 = (Fl_Button *)0;
136 Fl_ComboBox *op_yaesu_select60 = (Fl_ComboBox *)0;
137 
138 Fl_Group  *tab_ft991_bands = (Fl_Group *)0;
139 Fl_Button *btn_ft991_select_1 = (Fl_Button *)0;
140 Fl_Button *btn_ft991_select_2 = (Fl_Button *)0;
141 Fl_Button *btn_ft991_select_3 = (Fl_Button *)0;
142 Fl_Button *btn_ft991_select_4 = (Fl_Button *)0;
143 Fl_Button *btn_ft991_select_5 = (Fl_Button *)0;
144 Fl_Button *btn_ft991_select_6 = (Fl_Button *)0;
145 Fl_Button *btn_ft991_select_7 = (Fl_Button *)0;
146 Fl_Button *btn_ft991_select_8 = (Fl_Button *)0;
147 Fl_Button *btn_ft991_select_9 = (Fl_Button *)0;
148 Fl_Button *btn_ft991_select_10 = (Fl_Button *)0;
149 Fl_Button *btn_ft991_select_11 = (Fl_Button *)0;
150 Fl_Button *btn_ft991_select_12 = (Fl_Button *)0;
151 Fl_Button *btn_ft991_select_13 = (Fl_Button *)0;
152 Fl_PL_tone *choice_ft991_tTONE = (Fl_PL_tone *)0;
153 Fl_PL_tone *choice_ft991_rTONE = (Fl_PL_tone *)0;
154 
155 Fl_Group *tab_FT8n_bands = (Fl_Group *)0;
156 Fl_Button *btn_FT8n_select_1 = (Fl_Button *)0;
157 Fl_Button *btn_FT8n_select_2 = (Fl_Button *)0;
158 Fl_Button *btn_FT8n_select_3 = (Fl_Button *)0;
159 Fl_Button *btn_FT8n_select_4 = (Fl_Button *)0;
160 Fl_Button *btn_FT8n_select_5 = (Fl_Button *)0;
161 Fl_Button *btn_FT8n_select_6 = (Fl_Button *)0;
162 Fl_Button *btn_FT8n_select_7 = (Fl_Button *)0;
163 Fl_Button *btn_FT8n_select_8 = (Fl_Button *)0;
164 Fl_Button *btn_FT8n_select_9 = (Fl_Button *)0;
165 Fl_Button *btn_FT8n_select_10 = (Fl_Button *)0;
166 Fl_Button *btn_FT8n_select_11 = (Fl_Button *)0;
167 Fl_Button *btn_FT8n_select_12 = (Fl_Button *)0;
168 Fl_Button *btn_FT8n_select_13 = (Fl_Button *)0;
169 
170 Fl_Group *tab_FT8n_CTCSS = (Fl_Group *)0;
171 Fl_PL_tone *choice_FT8n_tTONE = (Fl_PL_tone *)0;
172 Fl_PL_tone *choice_FT8n_rTONE = (Fl_PL_tone *)0;
173 Fl_Button *setTONES = (Fl_Button *)0;
174 Fl_ComboBox *FMoffset = (Fl_ComboBox *)0;
175 Fl_Button *setOFFSET = (Fl_Button *)0;
176 cFreqControl *FMoff_freq = (cFreqControl *)0;
177 
178 Fl_Group *tab_icom_bands = (Fl_Group *)0;
179 Fl_Button *btn_icom_select_1 = (Fl_Button *)0;
180 Fl_Button *btn_icom_select_2 = (Fl_Button *)0;
181 Fl_Button *btn_icom_select_3 = (Fl_Button *)0;
182 Fl_Button *btn_icom_select_4 = (Fl_Button *)0;
183 Fl_Button *btn_icom_select_5 = (Fl_Button *)0;
184 Fl_Button *btn_icom_select_6 = (Fl_Button *)0;
185 Fl_Button *btn_icom_select_7 = (Fl_Button *)0;
186 Fl_Button *btn_icom_select_8 = (Fl_Button *)0;
187 Fl_Button *btn_icom_select_9 = (Fl_Button *)0;
188 Fl_Button *btn_icom_select_10 = (Fl_Button *)0;
189 Fl_Button *btn_icom_select_11 = (Fl_Button *)0;
190 Fl_Button *btn_icom_select_12 = (Fl_Button *)0;
191 Fl_Button *btn_icom_select_13 = (Fl_Button *)0;
192 
193 Fl_PL_tone *choice_tTONE = (Fl_PL_tone *)0;
194 Fl_PL_tone *choice_rTONE = (Fl_PL_tone *)0;
195 
196 Fl_Group *genericCW = (Fl_Group *)0;
197 Fl_Light_Button *btnSpot = (Fl_Light_Button *)0;
198 Hspinner *spnr_cw_spot_tone = (Hspinner *)0;
199 Hspinner *spnr_cw_qsk = (Hspinner *)0;
200 Hspinner *spnr_cw_weight = (Hspinner *)0;
201 Hspinner *spnr_cw_wpm = (Hspinner *)0;
202 Fl_Check_Button *btn_enable_keyer = (Fl_Check_Button *)0;
203 
204 Fl_Group *genericQSK = (Fl_Group *)0;
205 Fl_Button *btnBreakIn = (Fl_Button *)0;
206 Hspinner *spnr_cw_delay = (Hspinner *)0;
207 
208 Fl_Group *genericVOX = (Fl_Group *)0;
209 Hspinner *spnr_vox_gain = (Hspinner *)0;
210 Hspinner *spnr_anti_vox = (Hspinner *)0;
211 Hspinner *spnr_vox_hang = (Hspinner *)0;
212 Fl_Light_Button *btn_vox = (Fl_Light_Button *)0;
213 Fl_Check_Button *btn_vox_on_dataport = (Fl_Check_Button *)0;
214 
215 Fl_Group *genericSpeech = (Fl_Group *)0;
216 Fl_Light_Button *btnCompON = (Fl_Light_Button *)0;
217 Hspinner *spnr_compression = (Hspinner *)0;
218 
219 Fl_Group *genericRx = (Fl_Group *)0;
220 Fl_Wheel_Value_Slider *sldr_nb_level = (Fl_Wheel_Value_Slider *)0;
221 //Fl_ComboBox *cbo_agc_level = (Fl_ComboBox *)0;
222 Hspinner *spnr_bpf_center = (Hspinner *)0;
223 
224 Fl_Button *btnALC_SWR = (Fl_Button *)0;
225 Fl_SigBar *sldrRcvSignal=(Fl_SigBar *)0;
226 Fl_SigBar *sldrALC=(Fl_SigBar *)0;
227 Fl_SigBar *sldrSWR=(Fl_SigBar *)0;
228 Fl_SigBar *sldrFwdPwr=(Fl_SigBar *)0;
229 Fl_Button *scalePower = (Fl_Button *)0;
230 Fl_Box *meter_fill_box=(Fl_Box *)0;
231 cFreqControl *FreqDispA=(cFreqControl *)0;
232 cFreqControl *FreqDispB=(cFreqControl *)0;
233 Fl_Group *grp_row0a = (Fl_Group *)0;
234 Fl_Light_Button *btnA = (Fl_Light_Button *)0;
235 Fl_Button *btnTune = (Fl_Button *)0;
236 Fl_Light_Button *btn_tune_on_off = (Fl_Light_Button *)0;
237 Fl_Box *bx_row0_expander=(Fl_Box *)0;
238 Fl_Button *btn_show_controls = (Fl_Button *)0;
239 Fl_Group *grp_row1 = (Fl_Group *)0;
240 Fl_Group *grp_row1a = (Fl_Group *)0;
241 Fl_ComboBox *opBW = (Fl_ComboBox *)0;
242 Fl_ComboBox *opDSP_lo = (Fl_ComboBox *)0;
243 Fl_Button *btnDSP = (Fl_Button *)0;
244 Fl_ComboBox *opDSP_hi = (Fl_ComboBox *)0;
245 Fl_Button *btnFILT= (Fl_Button*)0;
246 Fl_ComboBox *opMODE = (Fl_ComboBox *)0;
247 Fl_Group *grp_row1b = (Fl_Group *)0;
248 Fl_Group *grp_row1b1 = (Fl_Group *)0;
249 Fl_Light_Button *btnAttenuator = (Fl_Light_Button *)0;
250 
251 Fl_Check_Button *btn_use_bpf_center = (Fl_Check_Button *)0;
252 Fl_Group *genericMisc = (Fl_Group *)0;
253 Hspinner *spnr_vfo_adj = (Hspinner *)0;
254 Hspinner *spnr_line_out = (Hspinner *)0;
255 Fl_Light_Button *btnSpecial = (Fl_Light_Button *)0;
256 Fl_Check_Button *btn_ext_tuner = (Fl_Check_Button *)0;
257 Fl_Check_Button *btn_xcvr_auto_on = (Fl_Check_Button *)0;
258 Fl_Check_Button *btn_xcvr_auto_off = (Fl_Check_Button *)0;
259 
260 Fl_Group  *genericUser_1 = (Fl_Group *)0;
261 Fl_Button *btnUser1 = (Fl_Button*)0;
262 Fl_Button *btnUser2 = (Fl_Button*)0;
263 Fl_Button *btnUser3 = (Fl_Button*)0;
264 Fl_Button *btnUser4 = (Fl_Button*)0;
265 Fl_Button *btnUser5 = (Fl_Button*)0;
266 Fl_Button *btnUser6 = (Fl_Button*)0;
267 Fl_Button *btnUser7 = (Fl_Button*)0;
268 Fl_Button *btnUser8 = (Fl_Button*)0;
269 
270 Fl_Group  *genericUser_2 = (Fl_Group *)0;
271 Fl_Button *btnUser9 = (Fl_Button*)0;
272 Fl_Button *btnUser10 = (Fl_Button*)0;
273 Fl_Button *btnUser11 = (Fl_Button*)0;
274 Fl_Button *btnUser12 = (Fl_Button*)0;
275 Fl_Button *btnUser13 = (Fl_Button*)0;
276 Fl_Button *btnUser14 = (Fl_Button*)0;
277 Fl_Button *btnUser15 = (Fl_Button*)0;
278 Fl_Button *btnUser16 = (Fl_Button*)0;
279 
280 Fl_Group  *genericUser_3 = (Fl_Group *)0;
281 Fl_Button *btnUser17 = (Fl_Button*)0;
282 Fl_Button *btnUser18 = (Fl_Button*)0;
283 Fl_Button *btnUser19 = (Fl_Button*)0;
284 Fl_Button *btnUser20 = (Fl_Button*)0;
285 Fl_Button *btnUser21 = (Fl_Button*)0;
286 Fl_Button *btnUser22 = (Fl_Button*)0;
287 Fl_Button *btnUser23 = (Fl_Button*)0;
288 Fl_Button *btnUser24 = (Fl_Button*)0;
289 
290 Fl_Group *genericRXB = (Fl_Group *)0;
291 Hspinner *cntRIT = (Hspinner *)0;
292 Hspinner *cntXIT = (Hspinner *)0;
293 Hspinner *cntBFO = (Hspinner *)0;
294 Fl_Group *genericAux = (Fl_Group *)0;
295 Fl_Box *boxControl=(Fl_Box *)0;
296 Fl_Light_Button *btnAuxRTS = (Fl_Light_Button *)0;
297 
298 Fl_Group *tab7610 = (Fl_Group *)0;
299 Fl_ComboBox *ic7610att = (Fl_ComboBox *)0;
300 Fl_Light_Button *ic7610dual_watch = (Fl_Light_Button *)0;
301 Fl_Light_Button *ic7610digi_sel_on_off = (Fl_Light_Button *)0;
302 Fl_Wheel_Value_Slider *ic7610_digi_sel_val = (Fl_Wheel_Value_Slider *)0;
303 
304 Fl_Light_Button *btnAuxDTR = (Fl_Light_Button *)0;
305 Fl_Light_Button *btnDataPort = (Fl_Light_Button *)0;
306 
307 Fl_Tabs *tabs550=(Fl_Tabs *)0;
308 Fl_Group *tt550_CW = (Fl_Group *)0;
309 Hspinner *spnr_tt550_cw_wpm = (Hspinner *)0;
310 Hspinner *spnr_tt550_cw_weight = (Hspinner *)0;
311 Hspinner *spnr_tt550_cw_qsk = (Hspinner *)0;
312 Hspinner *spnr_tt550_cw_vol = (Hspinner *)0;
313 Hspinner *spnr_tt550_cw_spot = (Hspinner *)0;
314 Fl_Check_Button *btn_tt550_enable_keyer = (Fl_Check_Button *)0;
315 Fl_Group *tt550_VOX = (Fl_Group *)0;
316 Hspinner *spnr_tt550_vox_gain = (Hspinner *)0;
317 Hspinner *spnr_tt550_anti_vox = (Hspinner *)0;
318 Hspinner *spnr_tt550_vox_hang = (Hspinner *)0;
319 Fl_Light_Button *btn_tt550_vox = (Fl_Light_Button *)0;
320 Fl_Group *tt550_Speech = (Fl_Group *)0;
321 Fl_Light_Button *btn_tt550_CompON = (Fl_Light_Button *)0;
322 Hspinner *spnr_tt550_compression = (Hspinner *)0;
323 Hspinner *spnr_tt550_mon_vol = (Hspinner *)0;
324 Fl_Group *tt550_Audio = (Fl_Group *)0;
325 Hspinner *spnr_tt550_line_out = (Hspinner *)0;
326 Fl_Check_Button *btnAccInp = (Fl_Check_Button *)0;
327 Fl_Group *tt550_Rx = (Fl_Group *)0;
328 Fl_ComboBox *cbo_tt550_nb_level = (Fl_ComboBox *)0;
329 Fl_ComboBox *cbo_tt550_agc_level = (Fl_ComboBox *)0;
330 Hspinner *spnr_tt550_vfo_adj = (Hspinner *)0;
331 Fl_Group *tt550_Tx = (Fl_Group *)0;
332 Fl_Check_Button *btn_tt550_enable_xmtr = (Fl_Check_Button *)0;
333 Fl_Check_Button *btn_tt550_enable_tloop = (Fl_Check_Button *)0;
334 Fl_Check_Button *btn_tt550_tuner_bypass = (Fl_Check_Button *)0;
335 Fl_ComboBox *op_tt550_XmtBW = (Fl_ComboBox *)0;
336 Fl_Check_Button *btn_tt550_use_xmt_bw = (Fl_Check_Button *)0;
337 Fl_Group *tt550_302A = (Fl_Group *)0;
338 Hspinner *spnr_tt550_keypad_time_out = (Hspinner *)0;
339 Hspinner *spnr_tt550_encoder_sensitivity = (Hspinner *)0;
340 Fl_Choice *sel_tt550_encoder_step = (Fl_Choice *)0;
341 Fl_Group *tt550_302B = (Fl_Group *)0;
342 Fl_Choice *sel_tt550_F1_func = (Fl_Choice *)0;
343 Fl_Choice *sel_tt550_F2_func = (Fl_Choice *)0;
344 Fl_Choice *sel_tt550_F3_func = (Fl_Choice *)0;
345 
346 Fl_Group *tt550_AT = (Fl_Group *)0;
347 Fl_Light_Button *tt550_AT_inline = (Fl_Light_Button *)0;
348 Fl_Light_Button *tt550_AT_Z = (Fl_Light_Button *)0;
349 Fl_Button *tt550_AT_capUP = (Fl_Button *)0;
350 Fl_Button *tt550_AT_capDN = (Fl_Button *)0;
351 Fl_Button *tt550_AT_indUP = (Fl_Button *)0;
352 Fl_Button *tt550_AT_indDN = (Fl_Button *)0;
353 Fl_Simple_Counter *tt550_Nsamples = (Fl_Simple_Counter *)0;
354 
355 Fl_Group *main_group = (Fl_Group *)0;
356 
357 Fl_Group *grpInitializing = (Fl_Group *)0;
358 
359 Fl_Progress *progress=(Fl_Progress *)0;
360 
361 #define RIGHT_OF(widget) (widget->x() + widget->w())
362 
363 #include "ui_bitmaps.cxx"
364 
365 static const char *mtr_scales[] = {
366 "5 watt",
367 "25 watt",
368 "50 watt",
369 "100 watt",
370 "200 watt",
371 "Auto scaled"};
372 
select_power_meter_scales()373 void select_power_meter_scales() {
374 	if (!meter_scale_dialog)
375 		meter_scale_dialog = power_meter_scale_select();
376 	meter_scale_dialog->show();
377 }
378 
cb_mnuExit(Fl_Menu_ *,void *)379 static void cb_mnuExit(Fl_Menu_*, void*) {
380 	cbExit();
381 }
382 
cb_mnuTooltips(Fl_Menu_ *,void *)383 static void cb_mnuTooltips(Fl_Menu_*, void*) {
384 	progStatus.tooltips = ! progStatus.tooltips;
385 }
386 
cb_mnuSchema(Fl_Menu_ *,void *)387 static void cb_mnuSchema(Fl_Menu_*, void*) {
388 	progStatus.schema = !progStatus.schema;
389 	adjust_control_positions();
390 }
391 
cb_mnuColorConfig(Fl_Menu_ *,void *)392 static void cb_mnuColorConfig(Fl_Menu_*, void*) {
393 	setDisplayColors();
394 }
395 
cb_mnu_meter_filtering(Fl_Menu_ *,void *)396 static void cb_mnu_meter_filtering(Fl_Menu_*, void*) {
397 	if (!meter_filters)
398 		meter_filters = MetersDialog();
399 	meter_filters->show();
400 }
401 
cb_mnuConfigXcvr(Fl_Menu_ *,void *)402 static void cb_mnuConfigXcvr(Fl_Menu_*, void*) {
403 	configXcvr();
404 }
405 
cb_Memory(Fl_Menu_ *,void *)406 static void cb_Memory(Fl_Menu_*, void*) {
407 	openMemoryDialog();
408 }
409 
cb_save_me(Fl_Menu_ *,void *)410 static void cb_save_me(Fl_Menu_*, void*) {
411 	addFreq();
412 }
413 
cb_Events(Fl_Menu_ *,void *)414 static void cb_Events(Fl_Menu_*, void*) {
415 	cbEventLog();
416 }
417 
cb_Polling(Fl_Menu_ *,void *)418 static void cb_Polling(Fl_Menu_*, void*) {
419 	open_poll_tab();
420 }
421 
cb_mnuTrace(Fl_Menu_ *,void *)422 static void cb_mnuTrace(Fl_Menu_*, void*) {
423 	open_trace_tab();
424 }
425 
cb_mnuCommands(Fl_Menu_ *,void *)426 static void cb_mnuCommands(Fl_Menu_ *, void *) {
427 	open_commands_tab();
428 }
429 
cb_Restore(Fl_Menu_ *,void *)430 static void cb_Restore(Fl_Menu_*, void*) {
431 	open_restore_tab();
432 }
433 
cb_Send(Fl_Menu_ *,void *)434 static void cb_Send(Fl_Menu_*, void*) {
435 	open_send_command_tab();
436 }
437 
cb_mnuTCPIP(Fl_Menu_ *,void *)438 static void cb_mnuTCPIP(Fl_Menu_*, void*) {
439 	open_tcpip_tab();
440 }
441 
cb_keyer(Fl_Menu_ *,void *)442 static void cb_keyer(Fl_Menu_*, void*) {
443 	if (cwio_keyer_dialog == 0)
444 		cwio_keyer_dialog = cwio_window();
445 	for (int n = 0; n < 12; n++) {
446 		btn_msg[n]->label(progStatus.cwio_labels[n].c_str());
447 		btn_msg[n]->redraw_label();
448 	}
449 	cwio_keyer_dialog->show();
450 }
451 
452 //static void cb_mnuXMLRPC(Fl_Menu_*, void*) {
453 //	open_xmlrpc_tab();
454 //}
455 
cb_mnuPTT(Fl_Menu_ *,void *)456 static void cb_mnuPTT(Fl_Menu_*, void*) {
457 	open_ptt_tab();
458 }
459 
cb_mnuGPIO(Fl_Menu_ *,void *)460 static void cb_mnuGPIO(Fl_Menu_*, void*) {
461 	open_gpio_tab();
462 }
463 
cb_mnuAUX(Fl_Menu_ *,void *)464 static void cb_mnuAUX(Fl_Menu_*, void *) {
465 	open_aux_tab();
466 }
467 
cb_mnuSERVER(Fl_Menu_ *,void *)468 static void cb_mnuSERVER(Fl_Menu_*, void*) {
469 	open_server_tab();
470 }
471 
cb_mnuOnLineHelp(Fl_Menu_ *,void *)472 static void cb_mnuOnLineHelp(Fl_Menu_*, void*) {
473 	visit_URL((void *)("http://www.w1hkj.com/flrig-help/index.html"));
474 }
475 
cb_mnuAbout(Fl_Menu_ *,void *)476 static void cb_mnuAbout(Fl_Menu_*, void*) {
477 	about();
478 }
479 
cb_btnALC_SWR(Fl_Button *,void *)480 static void cb_btnALC_SWR(Fl_Button*, void*) {
481 	cbALC_SWR();
482 }
483 
cb_btnAGC(Fl_Button *,void *)484 static void cb_btnAGC(Fl_Button*, void*) {
485 	cbAGC();
486 }
487 
cb_scalePower(Fl_Button *,void *)488 static void cb_scalePower(Fl_Button*, void*) {
489 	if (Fl::event_button() == FL_RIGHT_MOUSE)
490 		select_power_meter_scales();
491 }
492 
493 extern bool useB;
494 
cb_btnA(Fl_Light_Button *,void *)495 static void cb_btnA(Fl_Light_Button*, void*) {
496 	if (Fl::event_button() == FL_RIGHT_MOUSE) {
497 		if (!useB) {
498 			addFreq();
499 			btnA->value(1);
500 			btnB->value(0);
501 		} else {
502 			btnA->value(0);
503 			btnB->value(1);
504 		}
505 	} else {
506 		if (useB) {
507 			cb_selectA();
508 		} else {
509 			if (FreqDispA->is_reversed_colors()) {
510 				FreqDispA->restore_colors();
511 				Fl::focus(btnA);
512 			} else {
513 				FreqDispA->reverse_colors();
514 				Fl::focus(FreqDispA);
515 			}
516 		}
517 
518 		btnA->value(1);
519 		btnB->value(0);
520 		if (progStatus.UIsize == touch_ui) {
521 			FreqDispB->hide();
522 			FreqDispA->show();
523 		}
524 	}
525 }
526 
cb_btn_K3_swapAB(Fl_Button *,void *)527 static void cb_btn_K3_swapAB(Fl_Button*, void*) {
528 	cb_K3_swapAB();
529 }
530 
cb_btn_KX3_swapAB(Fl_Button *,void *)531 static void cb_btn_KX3_swapAB(Fl_Button*, void*) {
532 	cb_KX3_swapAB();
533 }
534 
cb_btnB(Fl_Light_Button *,void *)535 static void cb_btnB(Fl_Light_Button*, void*) {
536 	if (Fl::event_button() == FL_RIGHT_MOUSE) {
537 		if (useB) {
538 			addFreq();
539 			btnB->value(1);
540 			btnA->value(0);
541 		} else {
542 			btnB->value(0);
543 			btnA->value(1);
544 		}
545 	} else {
546 		if (!useB) {
547 			cb_selectB();
548 		} else {
549 			if (FreqDispB->is_reversed_colors()) {
550 				FreqDispB->restore_colors();
551 				Fl::focus(btnB);
552 			} else {
553 				FreqDispB->reverse_colors();
554 				Fl::focus(FreqDispB);
555 			}
556 		}
557 		btnB->value(1);
558 		btnA->value(0);
559 		if (progStatus.UIsize == touch_ui) {
560 			FreqDispA->hide();
561 			FreqDispB->show();
562 		}
563 	}
564 }
565 
cb_btnTune(Fl_Button *,void *)566 static void cb_btnTune(Fl_Button*, void*) {
567 	cbTune();
568 }
569 
cb_btn_tune_on_off(Fl_Light_Button *,void *)570 static void cb_btn_tune_on_off(Fl_Light_Button *, void *) {
571 	cb_tune_on_off();
572 }
573 
cb_btn_show_controls(Fl_Button *,void *)574 static void cb_btn_show_controls(Fl_Button*, void*) {
575 	show_controls();
576 }
577 
cb_btnFILT(Fl_Button *,void *)578 static void cb_btnFILT(Fl_Button *, void *) {
579 	selectFILT();
580 }
581 
cb_opBW(Fl_ComboBox *,void *)582 static void cb_opBW(Fl_ComboBox*, void*) {
583 	setBW();
584 }
585 
cb_btnDSP(Fl_Button *,void *)586 static void cb_btnDSP(Fl_Button*, void*) {
587 	selectDSP();
588 }
589 
cb_opDSP_lo(Fl_ComboBox *,void *)590 static void cb_opDSP_lo(Fl_ComboBox*, void*) {
591 	setDSP();
592 }
593 
cb_opDSP_hi(Fl_ComboBox *,void *)594 static void cb_opDSP_hi(Fl_ComboBox*, void*) {
595 	setDSP();
596 }
597 
cb_opMODE(Fl_ComboBox *,void *)598 static void cb_opMODE(Fl_ComboBox*, void*) {
599 	setMode();
600 }
601 
cb_btnAttenuator(Fl_Light_Button *,void *)602 static void cb_btnAttenuator(Fl_Light_Button*, void*) {
603 	cbAttenuator();
604 }
605 
cb_btnPreamp(Fl_Light_Button *,void *)606 static void cb_btnPreamp(Fl_Light_Button*, void*) {
607 	cbPreamp();
608 }
609 
cb_btnNOISE(Fl_Light_Button *,void *)610 static void cb_btnNOISE(Fl_Light_Button*, void*) {
611 	cbNoise();
612 }
613 
cb_btnAutoNotch(Fl_Light_Button *,void *)614 static void cb_btnAutoNotch(Fl_Light_Button*, void*) {
615 	cbAN();
616 }
617 
cb_btnAswapB(Fl_Button *,void *)618 static void cb_btnAswapB(Fl_Button*, void*) {
619 	cbAswapB();
620 }
621 
cb_btnSplit(Fl_Light_Button * o,void *)622 static void cb_btnSplit(Fl_Light_Button* o, void*) {
623 	cb_set_split(o->value());
624 }
625 
cb_btnPTT(Fl_Light_Button *,void *)626 static void cb_btnPTT(Fl_Light_Button*, void*) {
627 	cbPTT();
628 }
629 
cb_sldrSQUELCH(Fl_Wheel_Value_Slider *,void *)630 static void cb_sldrSQUELCH(Fl_Wheel_Value_Slider*, void*) {
631 	setSQUELCH();
632 }
633 
cb_sldrMICGAIN(Fl_Wheel_Value_Slider *,void *)634 static void cb_sldrMICGAIN(Fl_Wheel_Value_Slider*, void*) {
635 	setMicGain();
636 }
637 
cb_btnIFsh(Fl_Light_Button *,void *)638 static void cb_btnIFsh(Fl_Light_Button*, void*) {
639 	cbIFsh();
640 }
641 
cb_sldrIFSHIFT(Fl_Wheel_Value_Slider *,void *)642 static void cb_sldrIFSHIFT(Fl_Wheel_Value_Slider*, void*) {
643 	setIFshift();
644 }
645 
cb_btnLOCK(Fl_Button *,void *)646 static void cb_btnLOCK(Fl_Button*, void*) {
647 	setLOCK();
648 }
649 
cb_sldrINNER(Fl_Wheel_Value_Slider *,void *)650 static void cb_sldrINNER(Fl_Wheel_Value_Slider*, void*) {
651 	setINNER();
652 }
653 
cb_btnCLRPBT(Fl_Light_Button *,void *)654 static void cb_btnCLRPBT(Fl_Light_Button*, void*) {
655 	setCLRPBT();
656 }
657 
cb_sldrOUTER(Fl_Wheel_Value_Slider *,void *)658 static void cb_sldrOUTER(Fl_Wheel_Value_Slider*, void*) {
659 	setOUTER();
660 }
661 
cb_btnNR(Fl_Light_Button *,void *)662 static void cb_btnNR(Fl_Light_Button*, void*) {
663 	cbNR();
664 }
665 
cb_sldrNR(Fl_Wheel_Value_Slider *,void *)666 static void cb_sldrNR(Fl_Wheel_Value_Slider*, void*) {
667 	setNR();
668 }
669 
cb_btnNotch(Fl_Light_Button *,void *)670 static void cb_btnNotch(Fl_Light_Button*, void*) {
671 	cbbtnNotch();
672 }
673 
cb_sldrNOTCH(Fl_Wheel_Value_Slider *,void *)674 static void cb_sldrNOTCH(Fl_Wheel_Value_Slider*, void*) {
675 	setNotch();
676 }
677 
cb_sldrRFGAIN(Fl_Wheel_Value_Slider *,void *)678 static void cb_sldrRFGAIN(Fl_Wheel_Value_Slider*, void*) {
679 	if ( Fl::event_button() == FL_RIGHT_MOUSE )
680 		progStatus.ft950_rg_reverse = !progStatus.ft950_rg_reverse;
681 	setRFGAIN();
682 }
683 
cb_btnPOWER(Fl_Light_Button * btn,void *)684 static void cb_btnPOWER(Fl_Light_Button *btn, void*) {
685 	if (btn->value()) sldrPOWER->activate();
686 	else sldrPOWER->deactivate();
687 }
688 
cb_sldrPOWER(Fl_Wheel_Value_Slider *,void *)689 static void cb_sldrPOWER(Fl_Wheel_Value_Slider*, void*) {
690 	setPower();
691 }
692 
cb_btnVol(Fl_Light_Button *,void *)693 static void cb_btnVol(Fl_Light_Button*, void*) {
694 	cbMute();
695 }
696 
cb_sldrVOLUME(Fl_Wheel_Value_Slider *,void *)697 static void cb_sldrVOLUME(Fl_Wheel_Value_Slider*, void*) {
698 	setVolume();
699 }
700 
cb_btn_band_select(Fl_Button *,void * d)701 static void cb_btn_band_select(Fl_Button *, void *d) {
702 	long lband = reinterpret_cast<long>(d);
703 	int band = lband;
704 	cbBandSelect(band);
705 }
706 
cb_btnSpot(Fl_Light_Button * o,void *)707 static void cb_btnSpot(Fl_Light_Button* o, void*) {
708 	progStatus.spot_onoff=o->value();
709 	cb_cw_spot();
710 }
711 
cb_spnr_cw_spot_tone(Hspinner * o,void *)712 static void cb_spnr_cw_spot_tone(Hspinner* o, void*) {
713 	progStatus.cw_spot_tone=(int)o->value();
714 	cb_cw_spot_tone();
715 }
716 
cb_spnr_cw_qsk(Hspinner * o,void *)717 static void cb_spnr_cw_qsk(Hspinner* o, void*) {
718 	progStatus.cw_qsk = o->value();
719 	cb_cw_qsk();
720 }
721 
cb_spnr_cw_weight(Hspinner * o,void *)722 static void cb_spnr_cw_weight(Hspinner* o, void*) {
723 	progStatus.cw_weight = o->value();
724 	cb_cw_weight();
725 }
726 
cb_spnr_cw_wpm(Hspinner * o,void *)727 static void cb_spnr_cw_wpm(Hspinner* o, void*) {
728 	progStatus.cw_wpm = o->value();
729 	cb_cw_wpm();
730 }
731 
cb_spnr_cw_delay(Hspinner * o,void *)732 static void cb_spnr_cw_delay(Hspinner* o, void*) {
733 	progStatus.cw_delay = o->value();
734 	cb_cw_delay();
735 }
736 
cb_btn_enable_keyer(Fl_Check_Button * o,void *)737 static void cb_btn_enable_keyer(Fl_Check_Button* o, void*) {
738 	progStatus.enable_keyer=o->value();
739 	cb_enable_keyer();
740 }
741 
cb_btnBreakIn(Fl_Check_Button * o,void *)742 static void cb_btnBreakIn(Fl_Check_Button* o, void*) {
743 	if (xcvr_name == rig_IC7300.name_) {
744 		progStatus.break_in++;
745 		if (progStatus.break_in == 3)
746 			progStatus.break_in = 0;
747 	}
748 	else {
749 		progStatus.break_in = ! progStatus.break_in;
750 	}
751 	cb_set_break_in();
752 }
753 
cb_spnr_vox_gain(Hspinner * o,void *)754 static void cb_spnr_vox_gain(Hspinner* o, void*) {
755 	progStatus.vox_gain=(int)o->value();
756 	cb_vox_gain();
757 }
758 
cb_spnr_anti_vox(Hspinner * o,void *)759 static void cb_spnr_anti_vox(Hspinner* o, void*) {
760 	progStatus.vox_anti=(int)o->value();
761 	cb_vox_anti();
762 }
763 
cb_spnr_vox_hang(Hspinner * o,void *)764 static void cb_spnr_vox_hang(Hspinner* o, void*) {
765 	progStatus.vox_hang = (int)o->value();
766 	cb_vox_hang();
767 }
768 
cb_btn_vox(Fl_Light_Button * o,void *)769 static void cb_btn_vox(Fl_Light_Button* o, void*) {
770 	progStatus.vox_onoff=o->value();
771 cb_vox_onoff();
772 }
773 
cb_btn_vox_on_dataport(Fl_Check_Button * o,void *)774 static void cb_btn_vox_on_dataport(Fl_Check_Button* o, void*) {
775 	progStatus.vox_on_dataport=o->value();
776 	cb_vox_on_dataport();
777 }
778 
cb_btnCompON(Fl_Light_Button * o,void *)779 static void cb_btnCompON(Fl_Light_Button* o, void*) {
780 	progStatus.compON=o->value();
781 	cb_compression();
782 }
783 
cb_spnr_compression(Hspinner * o,void *)784 static void cb_spnr_compression(Hspinner* o, void*) {
785 	progStatus.compression=(int)o->value();
786 	cb_compression();
787 }
788 
cb_sldr_nb_level(Fl_Wheel_Value_Slider * o,void *)789 static void cb_sldr_nb_level(Fl_Wheel_Value_Slider* o, void*) {
790 	progStatus.nb_level = o->value();
791 	cb_nb_level();
792 }
793 
794 //static void cb_cbo_agc_level(Fl_ComboBox* o, void*) {
795 //	progStatus.agc_level = o->index();
796 //	cb_agc_level();
797 //}
798 
cb_spnr_bpf_center(Hspinner * o,void *)799 static void cb_spnr_bpf_center(Hspinner* o, void*) {
800 	progStatus.bpf_center=o->value();
801 	cb_bpf_center();
802 }
803 
cb_btn_use_bpf_center(Fl_Check_Button * o,void *)804 static void cb_btn_use_bpf_center(Fl_Check_Button* o, void*) {
805 	progStatus.use_bpf_center = o->value();
806 	cb_bpf_center();
807 }
808 
cb_spnr_vfo_adj(Hspinner * o,void *)809 static void cb_spnr_vfo_adj(Hspinner* o, void*) {
810 	progStatus.vfo_adj=o->value();
811 	cb_vfo_adj();
812 }
813 
cb_spnr_line_out(Hspinner * o,void *)814 static void cb_spnr_line_out(Hspinner* o, void*) {
815 	progStatus.line_out = o->value();
816 	cb_line_out();
817 }
818 
cb_btnSpecial(Fl_Light_Button *,void *)819 static void cb_btnSpecial(Fl_Light_Button*, void*) {
820 	cb_special();
821 }
822 
cb_btn_ext_tuner(Fl_Check_Button * o,void *)823 static void cb_btn_ext_tuner(Fl_Check_Button* o, void*) {
824 	progStatus.external_tuner = o->value();
825 }
826 
cb_btn_xcvr_auto_on(Fl_Check_Button * o,void *)827 static void cb_btn_xcvr_auto_on(Fl_Check_Button* o, void*) {
828 	progStatus.xcvr_auto_on = o->value();
829 }
830 
cb_btn_xcvr_auto_off(Fl_Check_Button * o,void *)831 static void cb_btn_xcvr_auto_off(Fl_Check_Button* o, void*) {
832 	progStatus.xcvr_auto_off = o->value();
833 }
834 
cb_btnUser(Fl_Button * o,void * d)835 static void cb_btnUser( Fl_Button * o, void *d) {
836 	long val = reinterpret_cast<long>(d);
837 	if (((Fl::event_state() & FL_SHIFT) == FL_SHIFT) ||
838 		(Fl::event_button() == FL_RIGHT_MOUSE)) {
839 		switch (val) {
840 			case 1: cb_send_command(progStatus.shftcmd1, cmdResponse); break;
841 			case 2: cb_send_command(progStatus.shftcmd2, cmdResponse); break;
842 			case 3: cb_send_command(progStatus.shftcmd3, cmdResponse); break;
843 			case 4: cb_send_command(progStatus.shftcmd4, cmdResponse); break;
844 			case 5: cb_send_command(progStatus.shftcmd5, cmdResponse); break;
845 			case 6: cb_send_command(progStatus.shftcmd6, cmdResponse); break;
846 			case 7: cb_send_command(progStatus.shftcmd7, cmdResponse); break;
847 			case 8: cb_send_command(progStatus.shftcmd8, cmdResponse); break;
848 			case 9: cb_send_command(progStatus.shftcmd9, cmdResponse); break;
849 			case 10: cb_send_command(progStatus.shftcmd10, cmdResponse); break;
850 			case 11: cb_send_command(progStatus.shftcmd11, cmdResponse); break;
851 			case 12: cb_send_command(progStatus.shftcmd12, cmdResponse); break;
852 			case 13: cb_send_command(progStatus.shftcmd13, cmdResponse); break;
853 			case 14: cb_send_command(progStatus.shftcmd14, cmdResponse); break;
854 			case 15: cb_send_command(progStatus.shftcmd15, cmdResponse); break;
855 			case 16: cb_send_command(progStatus.shftcmd16, cmdResponse); break;
856 			case 17: cb_send_command(progStatus.shftcmd17, cmdResponse); break;
857 			case 18: cb_send_command(progStatus.shftcmd18, cmdResponse); break;
858 			case 19: cb_send_command(progStatus.shftcmd19, cmdResponse); break;
859 			case 20: cb_send_command(progStatus.shftcmd20, cmdResponse); break;
860 			case 21: cb_send_command(progStatus.shftcmd21, cmdResponse); break;
861 			case 22: cb_send_command(progStatus.shftcmd22, cmdResponse); break;
862 			case 23: cb_send_command(progStatus.shftcmd23, cmdResponse); break;
863 			case 24: cb_send_command(progStatus.shftcmd24, cmdResponse); break;
864 		}
865 	} else {
866 		switch (val) {
867 			case 1: cb_send_command(progStatus.command1, cmdResponse); break;
868 			case 2: cb_send_command(progStatus.command2, cmdResponse); break;
869 			case 3: cb_send_command(progStatus.command3, cmdResponse); break;
870 			case 4: cb_send_command(progStatus.command4, cmdResponse); break;
871 			case 5: cb_send_command(progStatus.command5, cmdResponse); break;
872 			case 6: cb_send_command(progStatus.command6, cmdResponse); break;
873 			case 7: cb_send_command(progStatus.command7, cmdResponse); break;
874 			case 8: cb_send_command(progStatus.command8, cmdResponse); break;
875 			case 9: cb_send_command(progStatus.command9, cmdResponse); break;
876 			case 10: cb_send_command(progStatus.command10, cmdResponse); break;
877 			case 11: cb_send_command(progStatus.command11, cmdResponse); break;
878 			case 12: cb_send_command(progStatus.command12, cmdResponse); break;
879 			case 13: cb_send_command(progStatus.command13, cmdResponse); break;
880 			case 14: cb_send_command(progStatus.command14, cmdResponse); break;
881 			case 15: cb_send_command(progStatus.command15, cmdResponse); break;
882 			case 16: cb_send_command(progStatus.command16, cmdResponse); break;
883 			case 17: cb_send_command(progStatus.command17, cmdResponse); break;
884 			case 18: cb_send_command(progStatus.command18, cmdResponse); break;
885 			case 19: cb_send_command(progStatus.command19, cmdResponse); break;
886 			case 20: cb_send_command(progStatus.command20, cmdResponse); break;
887 			case 21: cb_send_command(progStatus.command21, cmdResponse); break;
888 			case 22: cb_send_command(progStatus.command22, cmdResponse); break;
889 			case 23: cb_send_command(progStatus.command23, cmdResponse); break;
890 			case 24: cb_send_command(progStatus.command24, cmdResponse); break;
891 		}
892 	}
893 }
894 
cb_digi_sel_on_off(Fl_Light_Button * o,void * d)895 static void cb_digi_sel_on_off(Fl_Light_Button *o, void *d) {
896 	progStatus.digi_sel_on_off = o->value();
897 	digi_sel_on_off();
898 }
899 
cb_digi_sel_val(Fl_Wheel_Value_Slider * o,void * d)900 static void cb_digi_sel_val(Fl_Wheel_Value_Slider *o, void *d) {
901 	progStatus.digi_sel_val = o->value();
902 	digi_sel_val();
903 }
904 
cb_dual_watch(Fl_Light_Button * o,void * d)905 static void cb_dual_watch(Fl_Light_Button *o, void *d) {
906 	progStatus.dual_watch = o->value();
907 	dual_watch();
908 }
909 
cb_ic7610_att(Fl_ComboBox * o,void * d)910 static void cb_ic7610_att(Fl_ComboBox *o, void *d) {
911 	progStatus.index_ic7610att = o->index();
912 	index_att();
913 }
914 
cb_cntRIT(Hspinner *,void *)915 static void cb_cntRIT(Hspinner*, void*) {
916 	cbRIT();
917 }
918 
cb_cntXIT(Hspinner *,void *)919 static void cb_cntXIT(Hspinner*, void*) {
920 	cbXIT();
921 }
922 
cb_cntBFO(Hspinner *,void *)923 static void cb_cntBFO(Hspinner*, void*) {
924 	cbBFO();
925 }
926 
cb_btnAuxRTS(Fl_Light_Button * o,void *)927 static void cb_btnAuxRTS(Fl_Light_Button* o, void*) {
928 	progStatus.aux_rts = o->value();
929 	cbAuxPort();
930 }
931 
cb_btnAuxDTR(Fl_Light_Button * o,void *)932 static void cb_btnAuxDTR(Fl_Light_Button* o, void*) {
933 	progStatus.aux_dtr = o->value();
934 	cbAuxPort();
935 }
936 
cb_btnDataPort(Fl_Light_Button * o,void *)937 static void cb_btnDataPort(Fl_Light_Button* o, void*) {
938 	progStatus.data_port = o->value();
939 	if (o->value()) btnDataPort->label("Data");
940 	else btnDataPort->label("Mic");
941 	btnDataPort->redraw_label();
942 	selrig->set_data_port();
943 }
944 
cb_spnr_tt550_cw_wpm(Hspinner * o,void *)945 static void cb_spnr_tt550_cw_wpm(Hspinner* o, void*) {
946 	progStatus.tt550_cw_wpm = (int)o->value();
947 	cb_tt550_cw_wpm();
948 }
949 
cb_spnr_tt550_cw_weight(Hspinner * o,void *)950 static void cb_spnr_tt550_cw_weight(Hspinner* o, void*) {
951 	progStatus.tt550_cw_weight = o->value();
952 	cb_tt550_cw_weight();
953 }
954 
cb_spnr_tt550_cw_qsk(Hspinner * o,void *)955 static void cb_spnr_tt550_cw_qsk(Hspinner* o, void*) {
956 	progStatus.tt550_cw_qsk = (int)o->value();
957 	cb_tt550_cw_qsk();
958 }
959 
cb_spnr_tt550_cw_vol(Hspinner * o,void *)960 static void cb_spnr_tt550_cw_vol(Hspinner* o, void*) {
961 	progStatus.tt550_cw_vol=(int)o->value();
962 	cb_tt550_cw_vol();
963 }
964 
cb_spnr_tt550_cw_spot(Hspinner * o,void *)965 static void cb_spnr_tt550_cw_spot(Hspinner* o, void*) {
966 	progStatus.tt550_cw_spot=(int)o->value();
967 	cb_tt550_cw_spot();
968 }
969 
cb_btn_tt550_enable_keyer(Fl_Check_Button * o,void *)970 static void cb_btn_tt550_enable_keyer(Fl_Check_Button* o, void*) {
971 	progStatus.tt550_enable_keyer=o->value();
972 	cb_tt550_enable_keyer();
973 }
974 
cb_spnr_tt550_vox_gain(Hspinner * o,void *)975 static void cb_spnr_tt550_vox_gain(Hspinner* o, void*) {
976 	progStatus.tt550_vox_gain=(int)o->value();
977 	cb_tt550_vox_gain();
978 }
979 
cb_spnr_tt550_anti_vox(Hspinner * o,void *)980 static void cb_spnr_tt550_anti_vox(Hspinner* o, void*) {
981 	progStatus.tt550_vox_anti=(int)o->value();
982 	cb_tt550_vox_anti();
983 }
984 
cb_spnr_tt550_vox_hang(Hspinner * o,void *)985 static void cb_spnr_tt550_vox_hang(Hspinner* o, void*) {
986 	progStatus.tt550_vox_hang = (int)o->value();
987 	cb_tt550_vox_hang();
988 }
989 
cb_btn_tt550_vox(Fl_Light_Button * o,void *)990 static void cb_btn_tt550_vox(Fl_Light_Button* o, void*) {
991 	progStatus.tt550_vox_onoff=o->value();
992 	cb_tt550_vox_onoff();
993 }
994 
cb_btn_tt550_CompON(Fl_Light_Button * o,void *)995 static void cb_btn_tt550_CompON(Fl_Light_Button* o, void*) {
996 	progStatus.tt550_compON=o->value();
997 	cb_tt550_compression();
998 }
999 
cb_spnr_tt550_compression(Hspinner * o,void *)1000 static void cb_spnr_tt550_compression(Hspinner* o, void*) {
1001 	progStatus.tt550_compression=(int)o->value();
1002 	cb_tt550_compression();
1003 }
1004 
cb_spnr_tt550_mon_vol(Hspinner * o,void *)1005 static void cb_spnr_tt550_mon_vol(Hspinner* o, void*) {
1006 	progStatus.tt550_mon_vol=(int)o->value();
1007 	cb_tt550_mon_vol();
1008 }
1009 
cb_spnr_tt550_line_out(Hspinner * o,void *)1010 static void cb_spnr_tt550_line_out(Hspinner* o, void*) {
1011 	progStatus.tt550_line_out = (int)o->value();
1012 	cb_tt550_line_out();
1013 }
1014 
cb_btnAccInp(Fl_Check_Button * o,void *)1015 static void cb_btnAccInp(Fl_Check_Button* o, void*) {
1016 	progStatus.tt550_use_line_in=o->value();
1017 	cb_tt550_use_line_in();
1018 }
1019 
cb_cbo_tt550_nb_level(Fl_ComboBox * o,void *)1020 static void cb_cbo_tt550_nb_level(Fl_ComboBox* o, void*) {
1021 	progStatus.tt550_nb_level = o->index();
1022 	cb_tt550_nb_level();
1023 }
1024 
cb_cbo_tt550_agc_level(Fl_ComboBox * o,void *)1025 static void cb_cbo_tt550_agc_level(Fl_ComboBox* o, void*) {
1026 	progStatus.tt550_agc_level = o->index();
1027 	cb_tt550_agc_level();
1028 }
1029 
cb_spnr_tt550_vfo_adj(Hspinner * o,void *)1030 static void cb_spnr_tt550_vfo_adj(Hspinner* o, void*) {
1031 	progStatus.vfo_adj=o->value();
1032 	cb_vfo_adj();
1033 }
1034 
cb_btn_tt550_enable_xmtr(Fl_Check_Button * o,void *)1035 static void cb_btn_tt550_enable_xmtr(Fl_Check_Button* o, void*) {
1036 	progStatus.tt550_enable_xmtr=o->value();
1037 	cb_tt550_enable_xmtr();
1038 }
1039 
cb_btn_tt550_enable_tloop(Fl_Check_Button * o,void *)1040 static void cb_btn_tt550_enable_tloop(Fl_Check_Button* o, void*) {
1041 	progStatus.tt550_enable_tloop=o->value();
1042 	cb_tt550_enable_tloop();
1043 }
1044 
cb_btn_tt550_tuner_bypass(Fl_Check_Button * o,void *)1045 static void cb_btn_tt550_tuner_bypass(Fl_Check_Button* o, void*) {
1046 	progStatus.tt550_tuner_bypass=o->value();
1047 	cb_tt550_tuner_bypass();
1048 }
1049 
cb_op_tt550_XmtBW(Fl_ComboBox * o,void *)1050 static void cb_op_tt550_XmtBW(Fl_ComboBox* o, void*) {
1051 	progStatus.tt550_xmt_bw = o->index();
1052 	cb_tt550_setXmtBW();
1053 }
1054 
cb_btn_tt550_use_xmt_bw(Fl_Check_Button * o,void *)1055 static void cb_btn_tt550_use_xmt_bw(Fl_Check_Button* o, void*) {
1056 	progStatus.tt550_use_xmt_bw = o->value();
1057 	cb_tt550_setXmtBW();
1058 }
1059 
cb_spnr_tt550_keypad_time_out(Hspinner * o,void *)1060 static void cb_spnr_tt550_keypad_time_out(Hspinner* o, void*) {
1061 	progStatus.tt550_keypad_timeout=(int)(o->value()*1000.0);
1062 }
1063 
cb_spnr_tt550_encoder_sensitivity(Hspinner * o,void *)1064 static void cb_spnr_tt550_encoder_sensitivity(Hspinner* o, void*) {
1065 	progStatus.tt550_encoder_sensitivity = o->value();
1066 }
1067 
cb_sel_tt550_encoder_step(Fl_Choice * o,void *)1068 static void cb_sel_tt550_encoder_step(Fl_Choice* o, void*) {
1069 	progStatus.tt550_encoder_step = o->value();
1070 }
1071 
cb_sel_tt550_F1_func(Fl_Choice * o,void *)1072 static void cb_sel_tt550_F1_func(Fl_Choice* o, void*) {
1073 	progStatus.tt550_F1_func = o->value();
1074 }
1075 
cb_sel_tt550_F2_func(Fl_Choice * o,void *)1076 static void cb_sel_tt550_F2_func(Fl_Choice* o, void*) {
1077 	progStatus.tt550_F2_func = o->value();
1078 }
1079 
cb_sel_tt550_F3_func(Fl_Choice * o,void *)1080 static void cb_sel_tt550_F3_func(Fl_Choice* o, void*) {
1081 	progStatus.tt550_F3_func = o->value();
1082 }
1083 
cb_AT_bypass(Fl_Light_Button * btn,void *)1084 static void cb_AT_bypass(Fl_Light_Button *btn, void*) {
1085 	if (!btn->value()) {
1086 		progStatus.tt550_at11_inline = false;
1087 		tt550_AT_inline->label("Bypassed");
1088 		tt550_AT_inline->redraw_label();
1089 		selrig->at11_bypass();
1090 	} else {
1091 		progStatus.tt550_at11_inline = true;
1092 		tt550_AT_inline->label("Inline");
1093 		tt550_AT_inline->redraw_label();
1094 		selrig->at11_autotune();
1095 	}
1096 }
1097 
cb_AT_Z(Fl_Light_Button * btn,void *)1098 static void cb_AT_Z(Fl_Light_Button *btn, void*) {
1099 	if (btn->value())
1100 		selrig->at11_hiZ();
1101 	else
1102 		selrig->at11_loZ();
1103 }
1104 
cb_AT_capUP(Fl_Button *,void *)1105 static void cb_AT_capUP(Fl_Button*, void*) {
1106 	selrig->at11_cap_up();
1107 }
1108 
cb_AT_capDN(Fl_Button *,void *)1109 static void cb_AT_capDN(Fl_Button*, void*) {
1110 	selrig->at11_cap_dn();
1111 }
1112 
cb_AT_indUP(Fl_Button *,void *)1113 static void cb_AT_indUP(Fl_Button*, void*) {
1114 	selrig->at11_ind_up();
1115 }
1116 
cb_AT_indDN(Fl_Button *,void *)1117 static void cb_AT_indDN(Fl_Button*, void*) {
1118 	selrig->at11_ind_dn();
1119 }
1120 
cb_tt550_Nsamples(Fl_Simple_Counter *,void *)1121 static void cb_tt550_Nsamples(Fl_Simple_Counter *, void *) {
1122 	progStatus.tt550_Nsamples =  tt550_Nsamples->value();
1123 }
1124 
getMenuItem(const char * caption,Fl_Menu_Item * menu=0)1125 Fl_Menu_Item *getMenuItem(const char *caption, Fl_Menu_Item* menu = 0)
1126 {
1127 	if (menu == 0) {
1128 		return (Fl_Menu_Item*)0;
1129 	}
1130 
1131 	int size = menu->size() - 1;
1132 	Fl_Menu_Item *item = 0;
1133 	const char* label;
1134 	for (int i = 0; i < size; i++) {
1135 		label = menu[i].text;
1136 		if (label && !strcmp(label, caption)) {
1137 			item = menu + i;
1138 			break;
1139 		}
1140 	}
1141 	return item;
1142 }
1143 
1144 int PL_tones[] = {
1145  670,  693,  719,  744,  770,  797,  825,  854,  885,  915,
1146  948,  974, 1000, 1035, 1072, 1109, 1148, 1188, 1230, 1273,
1147 1318, 1365, 1413, 1462, 1514, 1567, 1598, 1622, 1655, 1679,
1148 1713, 1738, 1773, 1799, 1835, 1862, 1899, 1928, 1966, 1995,
1149 2035, 2065, 2107, 2181, 2257, 2291, 2336, 2418, 2503, 2541 };
1150 
cb_tones(Fl_Button * b,void *)1151 void cb_tones(Fl_Button *b, void *)
1152 {
1153 	int tTONE = PL_tones[choice_FT8n_tTONE->value()];
1154 	int rTONE = PL_tones[choice_FT8n_rTONE->value()];
1155 	guard_lock serial(&mutex_serial);
1156 	selrig->set_tones(tTONE, rTONE);
1157 }
1158 
cb_offset(Fl_Button * b,void *)1159 void cb_offset(Fl_Button *b, void*)
1160 {
1161 	guard_lock serial(&mutex_serial);
1162 	selrig->set_offset(FMoffset->index(), FMoff_freq->value());
1163 }
1164 
1165 #include "ui_small.cxx"
1166 
1167 #include "ui_wide.cxx"
1168 
1169 #include "ui_touch.cxx"
1170 
1171 #include "ui_setup.cxx"
1172 
1173 #include "ui_memory.cxx"
1174 
1175 #include "xcvr_setup.cxx"
1176 
1177 #include "meters_setup.cxx"
1178 
1179 #include "power_meter_setup.cxx"
1180