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
21 #include <sstream>
22 #include <string>
23
24 #include "dialogs.h"
25 #include "ICbase.h"
26 #include "trace.h"
27 #include "xml_server.h"
28
29 #include "XmlRpc.h"
30
31 Fl_Group *tabXCVR = (Fl_Group *)0;
32 Fl_ComboBox *selectRig = (Fl_ComboBox *)0;
33 Fl_Counter *cntRigCatRetries = (Fl_Counter *)0;
34 Fl_Counter *cntRigCatTimeout = (Fl_Counter *)0;
35 Fl_Counter *cntRigCatWait = (Fl_Counter *)0;
36 Fl_Counter *query_interval = (Fl_Counter *)0;
37 Fl_Counter *byte_interval = (Fl_Counter *)0;
38 Fl_ComboBox *selectCommPort = (Fl_ComboBox *)0;
39 Fl_ComboBox *mnuBaudrate = (Fl_ComboBox *)0;
40 Fl_Check_Button *btnTwoStopBit = (Fl_Check_Button *)0;
41 Fl_Check_Button *btnOneStopBit = (Fl_Check_Button *)0;
42 Fl_Check_Button *btnRigCatEcho = (Fl_Check_Button *)0;
43 Fl_Check_Button *btncatptt = (Fl_Check_Button *)0;
44 Fl_Check_Button *btnrtsptt = (Fl_Check_Button *)0;
45 Fl_Check_Button *btndtrptt = (Fl_Check_Button *)0;
46 Fl_Check_Button *chkrtscts = (Fl_Check_Button *)0;
47 Fl_Check_Button *btnrtsplus = (Fl_Check_Button *)0;
48 Fl_Check_Button *btndtrplus = (Fl_Check_Button *)0;
49 //Fl_Check_Button *btn_notxqsy = (Fl_Check_Button *)0;
50 Fl_Int_Input *txtCIV = (Fl_Int_Input *)0;
51 Fl_Button *btnCIVdefault = (Fl_Button *)0;
52 Fl_Check_Button *btnUSBaudio = (Fl_Check_Button *)0;
53
54 Fl_Group *tabTCPIP = (Fl_Group *)0;
55 Fl_Input2 *inp_tcpip_addr = (Fl_Input2 *)0;
56 Fl_Input2 *inp_tcpip_port = (Fl_Input2 *)0;
57 Fl_Check_Button *chk_use_tcpip = (Fl_Check_Button *)0;
58 Fl_Box *box_tcpip_connect = (Fl_Box *)0;
59 Fl_Counter *inp_tcpip_ping_delay = (Fl_Counter *)0;
60 Fl_Counter *cntRetryAfter = (Fl_Counter *)0;
61 Fl_Counter *cntDropsAllowed = (Fl_Counter *)0;
62
63 Fl_Group *tabPTT = (Fl_Group *)0;
64 Fl_ComboBox *selectSepPTTPort = (Fl_ComboBox *)0;
65 Fl_Check_Button *btnSep_SCU_17 = (Fl_Check_Button *)0;
66 Fl_Check_Button *btnSepRTSptt = (Fl_Check_Button *)0;
67 Fl_Check_Button *btnSepRTSplus = (Fl_Check_Button *)0;
68 Fl_Check_Button *btnSepDTRptt = (Fl_Check_Button *)0;
69 Fl_Check_Button *btnSepDTRplus = (Fl_Check_Button *)0;
70
71 Fl_Group *tabGPIO = (Fl_Group *)0;
72 Fl_Check_Button *btn_enable_gpio[17];
73 Fl_Check_Button *btn_gpio_on[17];
74 Fl_Counter *cnt_gpio_pulse_width;
75
76 Fl_Group *tabAUX = (Fl_Group *)0;
77 Fl_ComboBox *selectAuxPort = (Fl_ComboBox *)0;
78 Fl_Check_Button *btnAux_SCU_17 = (Fl_Check_Button *)0;
79
80 Fl_Group *tabSERVER = (Fl_Group *)0;
81 Fl_Box *server_text = (Fl_Box *)0;
82 Fl_Input2 *inp_serverport = (Fl_Input2 *)0;
83 Fl_Box *box_fldigi_connect = (Fl_Box *)0;
84
85 Fl_Group *tabPOLLING = (Fl_Group *)0;
86 Fl_Value_Input *poll_smeter = (Fl_Value_Input *)0;
87 Fl_Value_Input *poll_pout = (Fl_Value_Input *)0;
88 Fl_Value_Input *poll_swr = (Fl_Value_Input *)0;
89 Fl_Value_Input *poll_alc = (Fl_Value_Input *)0;
90 Fl_Value_Input *poll_frequency = (Fl_Value_Input *)0;
91 Fl_Value_Input *poll_mode = (Fl_Value_Input *)0;
92 Fl_Value_Input *poll_bandwidth = (Fl_Value_Input *)0;
93 Fl_Value_Input *poll_volume = (Fl_Value_Input *)0;
94 Fl_Value_Input *poll_micgain = (Fl_Value_Input *)0;
95 Fl_Value_Input *poll_rfgain = (Fl_Value_Input *)0;
96 Fl_Value_Input *poll_power_control = (Fl_Value_Input *)0;
97 Fl_Value_Input *poll_ifshift = (Fl_Value_Input *)0;
98 Fl_Value_Input *poll_notch = (Fl_Value_Input *)0;
99 Fl_Value_Input *poll_auto_notch = (Fl_Value_Input *)0;
100 Fl_Value_Input *poll_pre_att = (Fl_Value_Input *)0;
101 Fl_Value_Input *poll_squelch = (Fl_Value_Input *)0;
102 Fl_Value_Input *poll_split = (Fl_Value_Input *)0;
103 Fl_Value_Input *poll_noise = (Fl_Value_Input *)0;
104 Fl_Value_Input *poll_nr = (Fl_Value_Input *)0;
105 Fl_Value_Input *poll_compression = (Fl_Value_Input *)0;
106 Fl_Value_Input *poll_tuner = (Fl_Value_Input *)0;
107 Fl_Value_Input *poll_ptt = (Fl_Value_Input *)0;
108 Fl_Value_Input *poll_break_in = (Fl_Value_Input *)0;
109 Fl_Button *btnClearAddControls = (Fl_Button *)0;
110
111 Fl_Value_Input *poll_meters = (Fl_Value_Input *)0;
112 Fl_Button *btnSetMeters = (Fl_Button *)0;
113 Fl_Value_Input *poll_ops = (Fl_Value_Input *)0;
114 Fl_Button *btnSetOps = (Fl_Button *)0;
115 Fl_Value_Input *poll_all = (Fl_Value_Input *)0;
116 Fl_Button *btnSetAdd = (Fl_Button *)0;
117
118 Fl_Group *tabSNDCMD = (Fl_Group *)0;
119 Fl_Input2 *txt_command = (Fl_Input2 *)0;
120 Fl_Button *btn_icom_pre = (Fl_Button *)0;
121 Fl_Button *btn_icom_post = (Fl_Button *)0;
122 Fl_Button *btn_send_command = (Fl_Button *)0;
123 Fl_Output *txt_response = (Fl_Output *)0;
124 Fl_Box *box_xcvr_connect = (Fl_Box *)0;
125
126 Fl_Button *btn_init_ser_port = (Fl_Button *)0;
127 Fl_Button *btn2_init_ser_port = (Fl_Button *)0;
128
129 Fl_Button *btnCloseCommConfig = (Fl_Button *)0;
130 Fl_Button *btnOkSepSerial = (Fl_Button *)0;
131 Fl_Button *btnOkAuxSerial = (Fl_Button *)0;
132
133 Fl_Group *tabTRACE = (Fl_Group *)0;
134 Fl_Check_Button *btn_trace = (Fl_Check_Button *)0;
135 Fl_Check_Button *btn_xmltrace = (Fl_Check_Button *)0;
136 Fl_Check_Button *btn_rigtrace = (Fl_Check_Button *)0;
137 Fl_Check_Button *btn_gettrace = (Fl_Check_Button *)0;
138 Fl_Check_Button *btn_settrace = (Fl_Check_Button *)0;
139 Fl_Check_Button *btn_debugtrace = (Fl_Check_Button *)0;
140 Fl_Check_Button *btn_rpctrace = (Fl_Check_Button *)0;
141 Fl_Check_Button *btn_start_stop_trace = (Fl_Check_Button *)0;
142 Fl_ComboBox *selectlevel = (Fl_ComboBox *)0;
143 Fl_Button *btn_viewtrace = (Fl_Button *)0;
144
145 Fl_Group *tabCOMMANDS = (Fl_Group *)0;
146 Fl_Tabs *tabCmds = (Fl_Tabs *)0;
147 Fl_Group *tabCmds1 = (Fl_Group *)0;
148 Fl_Group *tabCmds2 = (Fl_Group *)0;
149 Fl_Group *tabCmds3 = (Fl_Group *)0;
150 Fl_Group *tabCmds4 = (Fl_Group *)0;
151 Fl_Group *tabCmds5 = (Fl_Group *)0;
152 Fl_Group *tabCmds6 = (Fl_Group *)0;
153
154 Fl_Box *bx1a = (Fl_Box *)0;
155 Fl_Box *bx1b = (Fl_Box *)0;
156 Fl_Box *bx2a = (Fl_Box *)0;
157 Fl_Box *bx2b = (Fl_Box *)0;
158 Fl_Box *bx3a = (Fl_Box *)0;
159 Fl_Box *bx3b = (Fl_Box *)0;
160 Fl_Box *bx4a = (Fl_Box *)0;
161 Fl_Box *bx4b = (Fl_Box *)0;
162 Fl_Box *bx5a = (Fl_Box *)0;
163 Fl_Box *bx5b = (Fl_Box *)0;
164 Fl_Box *bx6a = (Fl_Box *)0;
165 Fl_Box *bx6b = (Fl_Box *)0;
166
167 Fl_Input2 * cmdlbl1 = (Fl_Input2 *)0;
168 Fl_Input2 * cmdlbl2 = (Fl_Input2 *)0;
169 Fl_Input2 * cmdlbl3 = (Fl_Input2 *)0;
170 Fl_Input2 * cmdlbl4 = (Fl_Input2 *)0;
171 Fl_Input2 * cmdlbl5 = (Fl_Input2 *)0;
172 Fl_Input2 * cmdlbl6 = (Fl_Input2 *)0;
173 Fl_Input2 * cmdlbl7 = (Fl_Input2 *)0;
174 Fl_Input2 * cmdlbl8 = (Fl_Input2 *)0;
175 Fl_Input2 * cmdlbl9 = (Fl_Input2 *)0;
176 Fl_Input2 * cmdlbl10 = (Fl_Input2 *)0;
177 Fl_Input2 * cmdlbl11 = (Fl_Input2 *)0;
178 Fl_Input2 * cmdlbl12 = (Fl_Input2 *)0;
179 Fl_Input2 * cmdlbl13 = (Fl_Input2 *)0;
180 Fl_Input2 * cmdlbl14 = (Fl_Input2 *)0;
181 Fl_Input2 * cmdlbl15 = (Fl_Input2 *)0;
182 Fl_Input2 * cmdlbl16 = (Fl_Input2 *)0;
183 Fl_Input2 * cmdlbl17 = (Fl_Input2 *)0;
184 Fl_Input2 * cmdlbl18 = (Fl_Input2 *)0;
185 Fl_Input2 * cmdlbl19 = (Fl_Input2 *)0;
186 Fl_Input2 * cmdlbl20 = (Fl_Input2 *)0;
187 Fl_Input2 * cmdlbl21 = (Fl_Input2 *)0;
188 Fl_Input2 * cmdlbl22 = (Fl_Input2 *)0;
189 Fl_Input2 * cmdlbl23 = (Fl_Input2 *)0;
190 Fl_Input2 * cmdlbl24 = (Fl_Input2 *)0;
191
192 Fl_Input2 * cmdtext1 = (Fl_Input2 *)0;
193 Fl_Input2 * cmdtext2 = (Fl_Input2 *)0;
194 Fl_Input2 * cmdtext3 = (Fl_Input2 *)0;
195 Fl_Input2 * cmdtext4 = (Fl_Input2 *)0;
196 Fl_Input2 * cmdtext5 = (Fl_Input2 *)0;
197 Fl_Input2 * cmdtext6 = (Fl_Input2 *)0;
198 Fl_Input2 * cmdtext7 = (Fl_Input2 *)0;
199 Fl_Input2 * cmdtext8 = (Fl_Input2 *)0;
200 Fl_Input2 * cmdtext9 = (Fl_Input2 *)0;
201 Fl_Input2 * cmdtext10 = (Fl_Input2 *)0;
202 Fl_Input2 * cmdtext11 = (Fl_Input2 *)0;
203 Fl_Input2 * cmdtext12 = (Fl_Input2 *)0;
204 Fl_Input2 * cmdtext13 = (Fl_Input2 *)0;
205 Fl_Input2 * cmdtext14 = (Fl_Input2 *)0;
206 Fl_Input2 * cmdtext15 = (Fl_Input2 *)0;
207 Fl_Input2 * cmdtext16 = (Fl_Input2 *)0;
208 Fl_Input2 * cmdtext17 = (Fl_Input2 *)0;
209 Fl_Input2 * cmdtext18 = (Fl_Input2 *)0;
210 Fl_Input2 * cmdtext19 = (Fl_Input2 *)0;
211 Fl_Input2 * cmdtext20 = (Fl_Input2 *)0;
212 Fl_Input2 * cmdtext21 = (Fl_Input2 *)0;
213 Fl_Input2 * cmdtext22 = (Fl_Input2 *)0;
214 Fl_Input2 * cmdtext23 = (Fl_Input2 *)0;
215 Fl_Input2 * cmdtext24 = (Fl_Input2 *)0;
216
217 Fl_Input2 * shftcmdtext1 = (Fl_Input2 *)0;
218 Fl_Input2 * shftcmdtext2 = (Fl_Input2 *)0;
219 Fl_Input2 * shftcmdtext3 = (Fl_Input2 *)0;
220 Fl_Input2 * shftcmdtext4 = (Fl_Input2 *)0;
221 Fl_Input2 * shftcmdtext5 = (Fl_Input2 *)0;
222 Fl_Input2 * shftcmdtext6 = (Fl_Input2 *)0;
223 Fl_Input2 * shftcmdtext7 = (Fl_Input2 *)0;
224 Fl_Input2 * shftcmdtext8 = (Fl_Input2 *)0;
225 Fl_Input2 * shftcmdtext9 = (Fl_Input2 *)0;
226 Fl_Input2 * shftcmdtext10 = (Fl_Input2 *)0;
227 Fl_Input2 * shftcmdtext11 = (Fl_Input2 *)0;
228 Fl_Input2 * shftcmdtext12 = (Fl_Input2 *)0;
229 Fl_Input2 * shftcmdtext13 = (Fl_Input2 *)0;
230 Fl_Input2 * shftcmdtext14 = (Fl_Input2 *)0;
231 Fl_Input2 * shftcmdtext15 = (Fl_Input2 *)0;
232 Fl_Input2 * shftcmdtext16 = (Fl_Input2 *)0;
233 Fl_Input2 * shftcmdtext17= (Fl_Input2 *)0;
234 Fl_Input2 * shftcmdtext18 = (Fl_Input2 *)0;
235 Fl_Input2 * shftcmdtext19 = (Fl_Input2 *)0;
236 Fl_Input2 * shftcmdtext20 = (Fl_Input2 *)0;
237 Fl_Input2 * shftcmdtext21 = (Fl_Input2 *)0;
238 Fl_Input2 * shftcmdtext22 = (Fl_Input2 *)0;
239 Fl_Input2 * shftcmdtext23 = (Fl_Input2 *)0;
240 Fl_Input2 * shftcmdtext24 = (Fl_Input2 *)0;
241
242 Fl_Output * cmdResponse = (Fl_Output *)0;
243
244 Fl_Group *tabRESTORE = (Fl_Group *)0;
245 Fl_Check_Button *btnRestoreFrequency = (Fl_Check_Button *)0;
246 Fl_Check_Button *btnRestoreMode = (Fl_Check_Button *)0;
247 Fl_Check_Button *btnRestoreBandwidth = (Fl_Check_Button *)0;
248 Fl_Check_Button *btnRestoreVolume = (Fl_Check_Button *)0;
249 Fl_Check_Button *btnRestoreMicGain = (Fl_Check_Button *)0;
250 Fl_Check_Button *btnRestoreRfGain = (Fl_Check_Button *)0;
251 Fl_Check_Button *btnRestorePowerControl = (Fl_Check_Button *)0;
252 Fl_Check_Button *btnRestoreIFshift = (Fl_Check_Button *)0;
253 Fl_Check_Button *btnRestoreNotch = (Fl_Check_Button *)0;
254 Fl_Check_Button *btnRestoreAutoNotch = (Fl_Check_Button *)0;
255 Fl_Check_Button *btnRestoreSquelch = (Fl_Check_Button *)0;
256 Fl_Check_Button *btnRestoreSplit = (Fl_Check_Button *)0;
257 Fl_Check_Button *btnRestorePreAtt = (Fl_Check_Button *)0;
258 Fl_Check_Button *btnRestoreNoise = (Fl_Check_Button *)0;
259 Fl_Check_Button *btnRestoreNR = (Fl_Check_Button *)0;
260 Fl_Check_Button *btnRestoreCompOnOff = (Fl_Check_Button *)0;
261 Fl_Check_Button *btnRestoreCompLevel = (Fl_Check_Button *)0;
262 Fl_Check_Button *btnUseRigData = (Fl_Check_Button *)0;
263
cb_btn_trace(Fl_Check_Button *,void *)264 static void cb_btn_trace(Fl_Check_Button *, void *) {
265 progStatus.trace = btn_trace->value();
266 }
267
cb_btn_rigtrace(Fl_Check_Button *,void *)268 static void cb_btn_rigtrace(Fl_Check_Button *, void *) {
269 progStatus.rigtrace = btn_rigtrace->value();
270 }
271
cb_btn_gettrace(Fl_Check_Button *,void *)272 static void cb_btn_gettrace(Fl_Check_Button *, void *) {
273 progStatus.gettrace = btn_gettrace->value();
274 }
275
cb_btn_settrace(Fl_Check_Button *,void *)276 static void cb_btn_settrace(Fl_Check_Button *, void *) {
277 progStatus.settrace = btn_settrace->value();
278 }
279
cb_btn_xmltrace(Fl_Check_Button *,void *)280 static void cb_btn_xmltrace(Fl_Check_Button *, void *) {
281 progStatus.xmltrace = btn_xmltrace->value();
282 }
283
cb_btn_debugtrace(Fl_Check_Button *,void *)284 static void cb_btn_debugtrace(Fl_Check_Button *, void *) {
285 progStatus.debugtrace = btn_debugtrace->value();
286 }
287
cb_btn_rpctrace(Fl_Check_Button *,void *)288 static void cb_btn_rpctrace(Fl_Check_Button *, void *) {
289 progStatus.rpctrace = btn_rpctrace->value();
290 }
291
cb_btn_start_stop_trace(Fl_Check_Button *,void *)292 static void cb_btn_start_stop_trace(Fl_Check_Button *, void *) {
293 progStatus.start_stop_trace = btn_start_stop_trace->value();
294 }
295
cb_selectlevel(Fl_ComboBox *,void *)296 static void cb_selectlevel(Fl_ComboBox *, void *) {
297 progStatus.rpc_level = selectlevel->index();
298 XmlRpc::setVerbosity(progStatus.rpc_level);
299 }
300
cb_btn_viewtrace(Fl_Button *,void *)301 static void cb_btn_viewtrace(Fl_Button *, void *) {
302 tracewindow->show();
303 }
304
cb_selectRig(Fl_ComboBox *,void *)305 static void cb_selectRig(Fl_ComboBox*, void*) {
306 btn_init_ser_port->labelcolor(FL_RED);
307 btn_init_ser_port->redraw_label();
308
309 btn2_init_ser_port->labelcolor(FL_RED);
310 btn2_init_ser_port->redraw_label();
311
312 initConfigDialog();
313 }
314
cb_cntRigCatRetries(Fl_Counter * o,void *)315 static void cb_cntRigCatRetries(Fl_Counter* o, void*) {
316 progStatus.comm_retries = (int)o->value();
317 }
318
cb_cntRigCatTimeout(Fl_Counter * o,void *)319 static void cb_cntRigCatTimeout(Fl_Counter* o, void*) {
320 progStatus.comm_timeout = (int)o->value();
321 }
322
cb_cntRigCatWait(Fl_Counter * o,void *)323 static void cb_cntRigCatWait(Fl_Counter* o, void*) {
324 progStatus.comm_wait = (int)o->value();
325 }
326
cb_query_interval(Fl_Counter * o,void *)327 static void cb_query_interval(Fl_Counter* o, void*) {
328 progStatus.serloop_timing = (int)o->value();
329 }
330
cb_byte_interval(Fl_Counter * o,void *)331 static void cb_byte_interval(Fl_Counter* o, void*) {
332 progStatus.byte_interval = (int)o->value();
333 }
334
cb_selectCommPort(Fl_ComboBox *,void *)335 static void cb_selectCommPort(Fl_ComboBox*, void*) {
336 btn_init_ser_port->labelcolor(FL_RED);
337 btn_init_ser_port->redraw_label();
338
339 btn2_init_ser_port->labelcolor(FL_RED);
340 btn2_init_ser_port->redraw_label();
341 }
342
cb_mnuBaudrate(Fl_ComboBox *,void *)343 static void cb_mnuBaudrate(Fl_ComboBox*, void*) {
344 btn_init_ser_port->labelcolor(FL_RED);
345 btn_init_ser_port->redraw_label();
346
347 btn2_init_ser_port->labelcolor(FL_RED);
348 btn2_init_ser_port->redraw_label();
349 }
350
cb_btnTwoStopBit(Fl_Check_Button * o,void *)351 static void cb_btnTwoStopBit(Fl_Check_Button* o, void*) {
352 if (o->value() == true) {
353 btnOneStopBit->value(false);
354 progStatus.stopbits = 2;
355 } else
356 o->value(true);
357 btn_init_ser_port->labelcolor(FL_RED);
358 btn_init_ser_port->redraw_label();
359
360 btn2_init_ser_port->labelcolor(FL_RED);
361 btn2_init_ser_port->redraw_label();
362 }
363
cb_btnOneStopBit(Fl_Check_Button * o,void *)364 static void cb_btnOneStopBit(Fl_Check_Button* o, void*) {
365 if (o->value() == true) {
366 btnTwoStopBit->value(false);
367 progStatus.stopbits = 1;
368 } else
369 o->value(true);
370 btn_init_ser_port->labelcolor(FL_RED);
371 btn_init_ser_port->redraw_label();
372
373 btn2_init_ser_port->labelcolor(FL_RED);
374 btn2_init_ser_port->redraw_label();
375 }
376
cb_btnRigCatEcho(Fl_Check_Button *,void *)377 static void cb_btnRigCatEcho(Fl_Check_Button*, void*) {
378 btn_init_ser_port->labelcolor(FL_RED);
379 btn_init_ser_port->redraw_label();
380
381 btn2_init_ser_port->labelcolor(FL_RED);
382 btn2_init_ser_port->redraw_label();
383 }
384
cb_tcpip_addr(Fl_Input2 * o,void *)385 static void cb_tcpip_addr(Fl_Input2* o, void*) {
386 progStatus.tcpip_addr = o->value();
387 }
388
cb_tcpip_port(Fl_Input2 * o,void *)389 static void cb_tcpip_port(Fl_Input2* o, void*) {
390 progStatus.tcpip_port = o->value();
391 }
392
cb_tcpip_ping_delay(Fl_Counter * o,void *)393 static void cb_tcpip_ping_delay(Fl_Counter* o, void*) {
394 progStatus.tcpip_ping_delay = o->value();
395 }
396
cb_use_tcpip(Fl_Check_Button * o,void *)397 static void cb_use_tcpip(Fl_Check_Button* o, void*) {
398 progStatus.use_tcpip = o->value();
399 if (!progStatus.use_tcpip)
400 disconnect_from_remote();
401 else
402 try {
403 connect_to_remote();
404 initRig();
405 } catch (...) {
406 progStatus.use_tcpip = 0;
407 o->value(0);
408 return;
409 }
410 }
411
cb_cntRetryAfter(Fl_Counter * o,void *)412 static void cb_cntRetryAfter(Fl_Counter* o, void *) {
413 progStatus.tcpip_reconnect_after = o->value();
414 }
415
cb_cntDropsAllowed(Fl_Counter * o,void *)416 static void cb_cntDropsAllowed(Fl_Counter* o, void *) {
417 progStatus.tcpip_drops_allowed = o->value();
418 }
419
cb_btncatptt(Fl_Check_Button * o,void *)420 static void cb_btncatptt(Fl_Check_Button* o, void*) {
421 if (o->value()== 1) {
422 btnrtsptt->value(0);
423 btndtrptt->value(0);
424 }
425 btn_init_ser_port->labelcolor(FL_RED);
426 btn_init_ser_port->redraw_label();
427
428 btn2_init_ser_port->labelcolor(FL_RED);
429 btn2_init_ser_port->redraw_label();
430 }
431
cb_btnrtsptt(Fl_Check_Button * o,void *)432 static void cb_btnrtsptt(Fl_Check_Button* o, void*) {
433 if (o->value() == 1)
434 btncatptt->value(0);
435 btn_init_ser_port->labelcolor(FL_RED);
436 btn_init_ser_port->redraw_label();
437
438 btn2_init_ser_port->labelcolor(FL_RED);
439 btn2_init_ser_port->redraw_label();
440 }
441
cb_btndtrptt(Fl_Check_Button * o,void *)442 static void cb_btndtrptt(Fl_Check_Button* o, void*) {
443 if (o->value() == 1)
444 btncatptt->value(0);
445 btn_init_ser_port->labelcolor(FL_RED);
446 btn_init_ser_port->redraw_label();
447
448 btn2_init_ser_port->labelcolor(FL_RED);
449 btn2_init_ser_port->redraw_label();
450 }
451
cb_chkrtscts(Fl_Check_Button *,void *)452 static void cb_chkrtscts(Fl_Check_Button*, void*) {
453 btn_init_ser_port->labelcolor(FL_RED);
454 btn_init_ser_port->redraw_label();
455
456 btn2_init_ser_port->labelcolor(FL_RED);
457 btn2_init_ser_port->redraw_label();
458 }
459
cb_btnrtsplus(Fl_Check_Button *,void *)460 static void cb_btnrtsplus(Fl_Check_Button*, void*) {
461 btn_init_ser_port->labelcolor(FL_RED);
462 btn_init_ser_port->redraw_label();
463
464 btn2_init_ser_port->labelcolor(FL_RED);
465 btn2_init_ser_port->redraw_label();
466 }
467
cb_btndtrplus(Fl_Check_Button *,void *)468 static void cb_btndtrplus(Fl_Check_Button*, void*) {
469 btn_init_ser_port->labelcolor(FL_RED);
470 btn_init_ser_port->redraw_label();
471
472 btn2_init_ser_port->labelcolor(FL_RED);
473 btn2_init_ser_port->redraw_label();
474 }
475
cb_txtCIV(Fl_Int_Input * o,void *)476 static void cb_txtCIV(Fl_Int_Input* o, void*) {
477 cbCIV();
478 }
479
cb_btnCIVdefault(Fl_Button *,void *)480 static void cb_btnCIVdefault(Fl_Button*, void*) {
481 cbCIVdefault();
482 }
483
cb_btnUSBaudio(Fl_Check_Button *,void *)484 static void cb_btnUSBaudio(Fl_Check_Button*, void*) {
485 cbUSBaudio();
486 }
487
cb_selectSepPTTPort(Fl_ComboBox *,void *)488 static void cb_selectSepPTTPort(Fl_ComboBox*, void*) {
489 btnOkSepSerial->labelcolor(FL_RED);
490 btnOkSepSerial->redraw_label();
491 }
492
cb_btnSepRTSptt(Fl_Check_Button * o,void *)493 static void cb_btnSepRTSptt(Fl_Check_Button* o, void*) {
494 btnOkSepSerial->labelcolor(FL_RED);
495 btnOkSepSerial->redraw_label();
496 }
497
cb_btnSepRTSplus(Fl_Check_Button *,void *)498 static void cb_btnSepRTSplus(Fl_Check_Button*, void*) {
499 btnOkSepSerial->labelcolor(FL_RED);
500 btnOkSepSerial->redraw_label();
501 }
502
cb_btnSepDTRptt(Fl_Check_Button * o,void *)503 static void cb_btnSepDTRptt(Fl_Check_Button* o, void*) {
504 btnOkSepSerial->labelcolor(FL_RED);
505 btnOkSepSerial->redraw_label();
506 }
507
cb_btnSepDTRplus(Fl_Check_Button *,void *)508 static void cb_btnSepDTRplus(Fl_Check_Button*, void*) {
509 btnOkSepSerial->labelcolor(FL_RED);
510 btnOkSepSerial->redraw_label();
511 }
512
cb_btnSep_SCU_17(Fl_Check_Button *,void *)513 static void cb_btnSep_SCU_17(Fl_Check_Button*, void*) {
514 btnOkSepSerial->labelcolor(FL_RED);
515 btnOkSepSerial->redraw_label();
516 }
517
cb_selectAuxPort(Fl_ComboBox *,void *)518 static void cb_selectAuxPort(Fl_ComboBox*, void*) {
519 btnOkAuxSerial->labelcolor(FL_RED);
520 btnOkAuxSerial->redraw_label();
521 }
522
cb_btnAux_SCU_17(Fl_Check_Button *,void *)523 static void cb_btnAux_SCU_17(Fl_Check_Button*, void*) {
524 btnOkAuxSerial->labelcolor(FL_RED);
525 btnOkAuxSerial->redraw_label();
526 }
527
cb_disable_CW_ptt(Fl_Check_Button * btn,void *)528 static void cb_disable_CW_ptt(Fl_Check_Button *btn, void*) {
529 progStatus.disable_CW_ptt = btn->value();
530 }
531
cb_server_port(Fl_Input2 * o,void *)532 static void cb_server_port(Fl_Input2* o, void*) {
533 progStatus.xmlport = o->value();
534 ::xmlport = atoi(progStatus.xmlport.c_str());
535 set_server_port(::xmlport);
536 }
537
cb_poll_smeter(Fl_Value_Input * o,void *)538 static void cb_poll_smeter(Fl_Value_Input* o, void*) {
539 progStatus.poll_smeter = o->value();
540 }
541
cb_poll_pout(Fl_Value_Input * o,void *)542 static void cb_poll_pout(Fl_Value_Input* o, void*) {
543 progStatus.poll_pout = o->value();
544 }
545
cb_poll_swr(Fl_Value_Input * o,void *)546 static void cb_poll_swr(Fl_Value_Input* o, void*) {
547 progStatus.poll_swr = o->value();
548 }
549
cb_poll_alc(Fl_Value_Input * o,void *)550 static void cb_poll_alc(Fl_Value_Input* o, void*) {
551 progStatus.poll_alc = o->value();
552 }
553
cb_poll_frequency(Fl_Value_Input * o,void *)554 static void cb_poll_frequency(Fl_Value_Input* o, void*) {
555 progStatus.poll_frequency = o->value();
556 }
557
cb_poll_mode(Fl_Value_Input * o,void *)558 static void cb_poll_mode(Fl_Value_Input* o, void*) {
559 progStatus.poll_mode = o->value();
560 }
561
cb_poll_bandwidth(Fl_Value_Input * o,void *)562 static void cb_poll_bandwidth(Fl_Value_Input* o, void*) {
563 progStatus.poll_bandwidth = o->value();
564 }
565
cb_poll_volume(Fl_Value_Input * o,void *)566 static void cb_poll_volume(Fl_Value_Input* o, void*) {
567 progStatus.poll_volume = o->value();
568 }
569
cb_poll_micgain(Fl_Value_Input * o,void *)570 static void cb_poll_micgain(Fl_Value_Input* o, void*) {
571 progStatus.poll_micgain = o->value();
572 }
573
cb_poll_rfgain(Fl_Value_Input * o,void *)574 static void cb_poll_rfgain(Fl_Value_Input* o, void*) {
575 progStatus.poll_rfgain = o->value();
576 }
577
cb_poll_power_control(Fl_Value_Input * o,void *)578 static void cb_poll_power_control(Fl_Value_Input* o, void*) {
579 progStatus.poll_power_control = o->value();
580 }
581
cb_poll_ifshift(Fl_Value_Input * o,void *)582 static void cb_poll_ifshift(Fl_Value_Input* o, void*) {
583 progStatus.poll_ifshift = o->value();
584 }
585
cb_poll_notch(Fl_Value_Input * o,void *)586 static void cb_poll_notch(Fl_Value_Input* o, void*) {
587 progStatus.poll_notch = o->value();
588 }
589
cb_poll_auto_notch(Fl_Value_Input * o,void *)590 static void cb_poll_auto_notch(Fl_Value_Input* o, void*) {
591 progStatus.poll_auto_notch = o->value();
592 }
593
cb_poll_pre_att(Fl_Value_Input * o,void *)594 static void cb_poll_pre_att(Fl_Value_Input* o, void*) {
595 progStatus.poll_pre_att = o->value();
596 }
597
cb_poll_squelch(Fl_Value_Input * o,void *)598 static void cb_poll_squelch(Fl_Value_Input* o, void*) {
599 progStatus.poll_squelch = o->value();
600 }
601
cb_poll_split(Fl_Value_Input * o,void *)602 static void cb_poll_split(Fl_Value_Input* o, void*) {
603 progStatus.poll_split = o->value();
604 }
605
cb_poll_noise(Fl_Value_Input * o,void *)606 static void cb_poll_noise(Fl_Value_Input* o, void*) {
607 progStatus.poll_noise = o->value();
608 }
609
cb_poll_nr(Fl_Value_Input * o,void *)610 static void cb_poll_nr(Fl_Value_Input* o, void*) {
611 progStatus.poll_nr = o->value();
612 }
613
cb_poll_compression(Fl_Value_Input * o,void *)614 static void cb_poll_compression(Fl_Value_Input* o, void *) {
615 progStatus.poll_compression = o->value();
616 }
617
cb_poll_tuner(Fl_Value_Input * o,void *)618 static void cb_poll_tuner(Fl_Value_Input* o, void *) {
619 progStatus.poll_tuner = o->value();
620 }
621
cb_poll_meters(Fl_Value_Input * o,void *)622 static void cb_poll_meters(Fl_Value_Input* o, void*) {
623 progStatus.poll_meters = o->value();
624 }
625
cb_poll_ptt(Fl_Value_Input * o,void *)626 static void cb_poll_ptt(Fl_Value_Input* o, void*) {
627 progStatus.poll_ptt = o->value();
628 }
629
cb_poll_break_in(Fl_Value_Input * o,void *)630 static void cb_poll_break_in(Fl_Value_Input* o, void*) {
631 progStatus.poll_break_in = o->value();
632 }
633
cb_btnSetMeters(Fl_Button *,void *)634 static void cb_btnSetMeters(Fl_Button*, void*) {
635 poll_smeter->value(progStatus.poll_meters);
636 poll_pout->value(progStatus.poll_meters);
637 poll_swr->value(progStatus.poll_meters);
638 poll_alc->value(progStatus.poll_meters);
639
640 progStatus.poll_smeter = progStatus.poll_meters;
641 progStatus.poll_pout = progStatus.poll_meters;
642 progStatus.poll_swr = progStatus.poll_meters;
643 progStatus.poll_alc = progStatus.poll_meters;
644 }
645
cb_poll_ops(Fl_Value_Input * o,void *)646 static void cb_poll_ops(Fl_Value_Input* o, void*) {
647 progStatus.poll_ops = o->value();
648 }
649
cb_btnSetOps(Fl_Button *,void *)650 static void cb_btnSetOps(Fl_Button*, void*) {
651 poll_frequency->value(progStatus.poll_ops);
652 poll_mode->value(progStatus.poll_ops);
653 poll_bandwidth->value(progStatus.poll_ops);
654
655 progStatus.poll_frequency = progStatus.poll_ops;
656 progStatus.poll_mode = progStatus.poll_ops;
657 progStatus.poll_bandwidth = progStatus.poll_ops;
658 }
659
cb_poll_all(Fl_Value_Input * o,void *)660 static void cb_poll_all(Fl_Value_Input* o, void*) {
661 progStatus.poll_all = o->value();
662 }
663
cb_btnSetAdd(Fl_Button *,void *)664 static void cb_btnSetAdd(Fl_Button*, void*) {
665 poll_volume->value(progStatus.poll_all);
666 poll_micgain->value(progStatus.poll_all);
667 poll_rfgain->value(progStatus.poll_all);
668 poll_power_control->value(progStatus.poll_all);
669 poll_ifshift->value(progStatus.poll_all);
670 poll_notch->value(progStatus.poll_all);
671 poll_auto_notch->value(progStatus.poll_all);
672 poll_pre_att->value(progStatus.poll_all);
673 poll_squelch->value(progStatus.poll_all);
674 poll_split->value(progStatus.poll_all);
675 poll_noise->value(progStatus.poll_all);
676 poll_nr->value(progStatus.poll_all);
677 poll_compression->value(progStatus.poll_all);
678 poll_tuner->value(progStatus.poll_all);
679 poll_ptt->value(progStatus.poll_all);
680
681 progStatus.poll_volume = progStatus.poll_all;
682 progStatus.poll_micgain = progStatus.poll_all;
683 progStatus.poll_rfgain = progStatus.poll_all;
684 progStatus.poll_power_control = progStatus.poll_all;
685 progStatus.poll_ifshift = progStatus.poll_all;
686 progStatus.poll_notch = progStatus.poll_all;
687 progStatus.poll_auto_notch = progStatus.poll_all;
688 progStatus.poll_pre_att = progStatus.poll_all;
689 progStatus.poll_squelch = progStatus.poll_all;
690 progStatus.poll_split = progStatus.poll_all;
691 progStatus.poll_noise = progStatus.poll_all;
692 progStatus.poll_nr = progStatus.poll_all;
693 progStatus.poll_compression = progStatus.poll_all;
694 progStatus.poll_tuner = progStatus.poll_all;
695 progStatus.poll_ptt = progStatus.poll_all;
696 }
697
cb_btn_send_command(Fl_Button * o,void *)698 static void cb_btn_send_command(Fl_Button *o, void*) {
699 cb_send_command(txt_command->value(), txt_response);
700 }
701
702 static const char hexsym[] = "0123456789ABCDEF";
str2hex(std::string str)703 static std::string str2hex(std::string str)
704 {
705 static std::string hexbuf;
706
707 size_t len = str.length();
708
709 if (!len) return "";
710
711 hexbuf.clear();
712 for (size_t i = 0; i < len; i++) {
713 hexbuf += 'x';
714 hexbuf += hexsym[(str[i] & 0xFF) >> 4];
715 hexbuf += hexsym[str[i] & 0xF];
716 hexbuf += ' ';
717 }
718 return hexbuf;
719 }
720
cb_btn_icom_pre(Fl_Button * o,void *)721 static void cb_btn_icom_pre(Fl_Button *o, void*) {
722 if (!selrig->ICOMrig) return;
723 txt_command->value(str2hex(selrig->pre_to).c_str());
724 }
725
cb_btn_icom_post(Fl_Button * o,void *)726 static void cb_btn_icom_post(Fl_Button *o, void*) {
727 if (!selrig->ICOMrig) return;
728 std::string s = txt_command->value();
729 s.append(str2hex(selrig->post));
730 txt_command->value(s.c_str());
731 }
732
cb_cmdlbl(Fl_Input2 * o,void * d)733 static void cb_cmdlbl(Fl_Input2 *o, void *d) {
734 long val = reinterpret_cast<long>(d);
735 struct BPAIR { std::string *plbl; Fl_Button *b; } bpairs[] =
736 { { &progStatus.label1, btnUser1 },
737 { &progStatus.label2, btnUser2 },
738 { &progStatus.label3, btnUser3 },
739 { &progStatus.label4, btnUser4 },
740 { &progStatus.label5, btnUser5 },
741 { &progStatus.label6, btnUser6 },
742 { &progStatus.label7, btnUser7 },
743 { &progStatus.label8, btnUser8 },
744 { &progStatus.label9, btnUser9 },
745 { &progStatus.label10, btnUser10 },
746 { &progStatus.label11, btnUser11 },
747 { &progStatus.label12, btnUser12 },
748 { &progStatus.label13, btnUser13 },
749 { &progStatus.label14, btnUser14 },
750 { &progStatus.label15, btnUser15 },
751 { &progStatus.label16, btnUser16 },
752 { &progStatus.label17, btnUser17 },
753 { &progStatus.label18, btnUser18 },
754 { &progStatus.label19, btnUser19 },
755 { &progStatus.label20, btnUser20 },
756 { &progStatus.label21, btnUser21 },
757 { &progStatus.label22, btnUser22 },
758 { &progStatus.label23, btnUser23 },
759 { &progStatus.label24, btnUser24 } };
760
761 if (val < 0) val = 0;
762 if (val > 23) val = 23;
763
764 *bpairs[val].plbl = o->value();
765 bpairs[val].b->label(o->value());
766 bpairs[val].b->redraw_label();
767 }
768
cb_cmdtext(Fl_Input2 * o,void * d)769 static void cb_cmdtext(Fl_Input2 *o, void *d) {
770 long val = reinterpret_cast<long>(d);
771 std::string *cmd[] =
772 { &progStatus.command1, &progStatus.command2,
773 &progStatus.command3, &progStatus.command4,
774 &progStatus.command5, &progStatus.command6,
775 &progStatus.command7, &progStatus.command8,
776 &progStatus.command9, &progStatus.command10,
777 &progStatus.command11, &progStatus.command12,
778 &progStatus.command13, &progStatus.command14,
779 &progStatus.command15, &progStatus.command16,
780 &progStatus.command17, &progStatus.command18,
781 &progStatus.command19, &progStatus.command20,
782 &progStatus.command21, &progStatus.command22,
783 &progStatus.command23, &progStatus.command24 };
784 if (val < 0) val = 0;
785 if (val > 23) val = 23;
786
787 *cmd[val] = o->value();
788 }
789
cb_shftcmdtext(Fl_Input2 * o,void * d)790 static void cb_shftcmdtext(Fl_Input2 *o, void *d) {
791 long val = reinterpret_cast<long>(d);
792 std::string *cmd[] =
793 { &progStatus.shftcmd1, &progStatus.shftcmd2,
794 &progStatus.shftcmd3, &progStatus.shftcmd4,
795 &progStatus.shftcmd5, &progStatus.shftcmd6,
796 &progStatus.shftcmd7, &progStatus.shftcmd8,
797 &progStatus.shftcmd9, &progStatus.shftcmd10,
798 &progStatus.shftcmd11, &progStatus.shftcmd12,
799 &progStatus.shftcmd13, &progStatus.shftcmd14,
800 &progStatus.shftcmd15, &progStatus.shftcmd16,
801 &progStatus.shftcmd17, &progStatus.shftcmd18,
802 &progStatus.shftcmd19, &progStatus.shftcmd20,
803 &progStatus.shftcmd21, &progStatus.shftcmd22,
804 &progStatus.shftcmd23, &progStatus.shftcmd24 };
805 if (val < 0) val = 0;
806 if (val > 23) val = 23;
807
808 *cmd[val] = o->value();
809 }
810
cb_init_ser_port(Fl_Return_Button *,void *)811 static void cb_init_ser_port(Fl_Return_Button*, void*) {
812 string p1 = selectCommPort->value();
813 string p2 = selectAuxPort->value();
814 string p3 = selectSepPTTPort->value();
815
816 if ( (p1.compare("NONE") != 0) && (p1 == p2 || p1 == p3) ) {
817 fl_message("Select separate ports");
818 return;
819 }
820
821 if (progStatus.UIsize == wide_ui) {
822 btn_show_controls->label("@-22->");
823 btn_show_controls->redraw_label();
824 grpTABS->hide();
825 mainwindow->resizable(grpTABS);
826 mainwindow->size(mainwindow->w(), WIDE_MAINH);
827 mainwindow->size_range(WIDE_MAINW, WIDE_MAINH, 0, WIDE_MAINH);
828 }
829
830 // close the current rig control
831 closeRig(); // local serial comm connection
832
833 { guard_lock gl_serial(&mutex_serial);
834 RigSerial->ClosePort();
835 bypass_serial_thread_loop = true;
836 }
837
838 clearList();
839 saveFreqList();
840 selrig = rigs[selectRig->index()];
841 xcvr_name = selrig->name_;
842
843 progStatus.xcvr_serial_port = selectCommPort->value();
844
845 progStatus.comm_baudrate = mnuBaudrate->index();
846 progStatus.stopbits = btnOneStopBit->value() ? 1 : 2;
847 progStatus.comm_retries = (int)cntRigCatRetries->value();
848 progStatus.comm_timeout = (int)cntRigCatTimeout->value();
849 progStatus.comm_wait = (int)cntRigCatWait->value();
850 progStatus.comm_echo = btnRigCatEcho->value();
851 progStatus.comm_rtsptt = btnrtsptt->value();
852 progStatus.comm_catptt = btncatptt->value();
853 progStatus.comm_dtrptt = btndtrptt->value();
854 progStatus.comm_rtscts = chkrtscts->value();
855 progStatus.comm_rtsplus = btnrtsplus->value();
856 progStatus.comm_dtrplus = btndtrplus->value();
857
858 progStatus.imode_B = progStatus.imode_A = selrig->def_mode;
859 progStatus.iBW_B = progStatus.iBW_A = selrig->def_bw;
860 progStatus.freq_B = progStatus.freq_A = selrig->def_freq;
861
862 init_title();
863
864 if (!startXcvrSerial()) {
865 if (progStatus.xcvr_serial_port.compare("NONE") == 0) {
866 LOG_WARN("No comm port ... test mode");
867 } else {
868 // progStatus.xcvr_serial_port = "NONE";
869 // selectCommPort->value(progStatus.xcvr_serial_port.c_str());
870 }
871 }
872
873 initRig();
874
875 btn_init_ser_port->labelcolor(FL_BLACK);
876 btn_init_ser_port->redraw_label();
877
878 btn2_init_ser_port->labelcolor(FL_BLACK);
879 btn2_init_ser_port->redraw_label();
880 }
881
cb_btnOkSepSerial(Fl_Button *,void *)882 static void cb_btnOkSepSerial(Fl_Button*, void*) {
883 string p2 = selectAuxPort->value();
884 string p3 = selectSepPTTPort->value();
885
886 if ((p3.compare("NONE") != 0) && p2 == p3) {
887 fl_message("Port used for Aux i/o");
888 return;
889 }
890
891 progStatus.sep_serial_port = selectSepPTTPort->value();
892 progStatus.sep_SCU_17 = btnSep_SCU_17->value();
893
894 progStatus.sep_dtrplus = btnSepDTRplus->value();
895 progStatus.sep_dtrptt = btnSepDTRptt->value();
896 progStatus.sep_rtsplus = btnSepRTSplus->value();
897 progStatus.sep_rtsptt = btnSepRTSptt->value();
898
899 if (!startSepSerial()) {
900 if (progStatus.sep_serial_port.compare("NONE") != 0) {
901 progStatus.sep_serial_port = "NONE";
902 selectSepPTTPort->value(progStatus.sep_serial_port.c_str());
903 }
904 }
905
906 btnOkSepSerial->labelcolor(FL_BLACK);
907 btnOkSepSerial->redraw_label();
908 }
909
cb_btnOkAuxSerial(Fl_Button *,void *)910 static void cb_btnOkAuxSerial(Fl_Button*, void*) {
911 AuxSerial->ClosePort();
912
913 string p2 = selectAuxPort->value();
914 string p3 = selectSepPTTPort->value();
915
916 if ((p2.compare("NONE") != 0) && p2 == p3) {
917 fl_message("Port used for Sep serial");
918 return;
919 }
920
921 progStatus.aux_serial_port = selectAuxPort->value();
922 progStatus.aux_SCU_17 = btnAux_SCU_17->value();
923
924 if (!startAuxSerial()) {
925 if (progStatus.aux_serial_port.compare("NONE") != 0) {
926 progStatus.aux_serial_port = "NONE";
927 selectAuxPort->value(progStatus.aux_serial_port.c_str());
928 }
929 }
930
931 btnOkAuxSerial->labelcolor(FL_BLACK);
932 btnOkAuxSerial->redraw_label();
933 }
934
cb_restore(Fl_Check_Button * btn,void *)935 static void cb_restore(Fl_Check_Button *btn, void*)
936 {
937 progStatus.restore_frequency = btnRestoreFrequency->value();
938 progStatus.restore_mode = btnRestoreMode->value();
939 progStatus.restore_bandwidth = btnRestoreBandwidth->value();
940 progStatus.restore_volume = btnRestoreVolume->value();
941 progStatus.restore_mic_gain = btnRestoreMicGain->value();
942 progStatus.restore_rf_gain = btnRestoreRfGain->value();
943 progStatus.restore_power_control = btnRestorePowerControl->value();
944 progStatus.restore_if_shift = btnRestoreIFshift->value();
945 progStatus.restore_notch = btnRestoreNotch->value();
946 progStatus.restore_auto_notch = btnRestoreAutoNotch->value();
947 progStatus.restore_noise = btnRestoreNoise->value();
948 progStatus.restore_squelch = btnRestoreSquelch->value();
949 progStatus.restore_split = btnRestoreSplit->value();
950 progStatus.restore_pre_att = btnRestorePreAtt->value();
951 progStatus.restore_nr = btnRestoreNR->value();
952 progStatus.restore_comp_on_off = btnRestoreCompOnOff->value();
953 progStatus.restore_comp_level = btnRestoreCompLevel->value();
954 progStatus.use_rig_data = btnUseRigData->value();
955 }
956
cb_comports(Fl_Button * b,void * d)957 void cb_comports(Fl_Button *b, void* d)
958 {
959 init_port_combos();
960 }
961
createXCVR(int X,int Y,int W,int H,const char * label)962 Fl_Group *createXCVR(int X, int Y, int W, int H, const char *label)
963 {
964 Fl_Group *tabXCVR = new Fl_Group(X, Y, W, H, label);
965
966 Fl_Group* xcvr_grp1 = new Fl_Group(X + 2, Y + 2, W - 4, 200);
967 xcvr_grp1->box(FL_ENGRAVED_FRAME);
968
969 selectRig = new Fl_ComboBox(
970 xcvr_grp1->x() + 60, xcvr_grp1->y() + 4,
971 xcvr_grp1->w() - 64, 22, _("Rig:"));
972 selectRig->tooltip(_("Select Transceiver"));
973 selectRig->box(FL_DOWN_BOX);
974 selectRig->color(FL_BACKGROUND2_COLOR);
975 selectRig->selection_color(FL_BACKGROUND_COLOR);
976 selectRig->labeltype(FL_NORMAL_LABEL);
977 selectRig->labelfont(0);
978 selectRig->labelsize(14);
979 selectRig->labelcolor(FL_FOREGROUND_COLOR);
980 selectRig->callback((Fl_Callback*)cb_selectRig);
981 selectRig->align(Fl_Align(FL_ALIGN_LEFT));
982 selectRig->readonly();
983 selectRig->when(FL_WHEN_RELEASE);
984 selectRig->end();
985
986 Fl_Button *comports = new Fl_Button(
987 xcvr_grp1->x() + 4, selectRig->y() + 26,
988 52, 22, _("Update"));
989 comports->box(FL_THIN_UP_BOX);
990 comports->tooltip(_("Update serial port combo"));
991 comports->callback((Fl_Callback*)cb_comports);
992 comports->when(FL_WHEN_RELEASE);
993
994 selectCommPort = new Fl_ComboBox(
995 selectRig->x(), comports->y(),
996 selectRig->w(), 22, "");
997 selectCommPort->tooltip(_("Xcvr serial port"));
998 selectCommPort->box(FL_DOWN_BOX);
999 selectCommPort->color(FL_BACKGROUND2_COLOR);
1000 selectCommPort->selection_color(FL_BACKGROUND_COLOR);
1001 selectCommPort->labeltype(FL_NORMAL_LABEL);
1002 selectCommPort->labelfont(0);
1003 selectCommPort->labelsize(14);
1004 selectCommPort->labelcolor(FL_FOREGROUND_COLOR);
1005 selectCommPort->callback((Fl_Callback*)cb_selectCommPort);
1006 selectCommPort->align(Fl_Align(FL_ALIGN_CENTER));
1007 selectCommPort->when(FL_WHEN_RELEASE);
1008 selectCommPort->end();
1009
1010 mnuBaudrate = new Fl_ComboBox(
1011 selectCommPort->x(), selectCommPort->y() + 26,
1012 160, 22, _("Baud:"));
1013 mnuBaudrate->tooltip(_("Xcvr baudrate"));
1014 mnuBaudrate->box(FL_DOWN_BOX);
1015 mnuBaudrate->color(FL_BACKGROUND2_COLOR);
1016 mnuBaudrate->selection_color(FL_BACKGROUND_COLOR);
1017 mnuBaudrate->labeltype(FL_NORMAL_LABEL);
1018 mnuBaudrate->labelfont(0);
1019 mnuBaudrate->labelsize(14);
1020 mnuBaudrate->labelcolor(FL_FOREGROUND_COLOR);
1021 mnuBaudrate->callback((Fl_Callback*)cb_mnuBaudrate);
1022 mnuBaudrate->align(Fl_Align(FL_ALIGN_LEFT));
1023 mnuBaudrate->readonly();
1024 mnuBaudrate->when(FL_WHEN_RELEASE);
1025 mnuBaudrate->end();
1026
1027 btnOneStopBit = new Fl_Check_Button(
1028 mnuBaudrate->x(), mnuBaudrate->y() + 26,
1029 22, 22, _("1"));
1030 btnOneStopBit->tooltip(_("One Stop Bit"));
1031 btnOneStopBit->down_box(FL_DOWN_BOX);
1032 btnOneStopBit->callback((Fl_Callback*)cb_btnOneStopBit);
1033 btnOneStopBit->align(Fl_Align(FL_ALIGN_RIGHT));
1034 btnOneStopBit->value(progStatus.stopbits == 1);
1035
1036 btnTwoStopBit = new Fl_Check_Button(
1037 btnOneStopBit->x() + 120, btnOneStopBit->y(),
1038 22, 22, _("2 -StopBits"));
1039 btnTwoStopBit->down_box(FL_DOWN_BOX);
1040 btnTwoStopBit->callback((Fl_Callback*)cb_btnTwoStopBit);
1041 btnTwoStopBit->align(Fl_Align(FL_ALIGN_RIGHT));
1042 btnTwoStopBit->value(progStatus.stopbits == 2);
1043
1044 btnRigCatEcho = new Fl_Check_Button(
1045 btnOneStopBit->x(), btnOneStopBit->y() + 26,
1046 22, 22, _("Echo "));
1047 btnRigCatEcho->down_box(FL_DOWN_BOX);
1048 btnRigCatEcho->callback((Fl_Callback*)cb_btnRigCatEcho);
1049 btnRigCatEcho->align(Fl_Align(FL_ALIGN_RIGHT));
1050 btnRigCatEcho->value(progStatus.comm_echo);
1051
1052 chkrtscts = new Fl_Check_Button(
1053 btnTwoStopBit->x(), btnRigCatEcho->y(),
1054 22, 22, _("RTS/CTS"));
1055 chkrtscts->tooltip(_("Xcvr uses RTS/CTS handshake"));
1056 chkrtscts->down_box(FL_DOWN_BOX);
1057 chkrtscts->callback((Fl_Callback*)cb_chkrtscts);
1058 chkrtscts->value(progStatus.comm_rtscts);
1059
1060 cntRigCatRetries = new Fl_Counter(
1061 xcvr_grp1->x() + xcvr_grp1->w() - 110 - 4, mnuBaudrate->y(),
1062 110, 22, _("Retries"));
1063 cntRigCatRetries->tooltip(_("Number of times to resend\ncommand before giving up"));
1064 cntRigCatRetries->minimum(1);
1065 cntRigCatRetries->maximum(10);
1066 cntRigCatRetries->step(1);
1067 cntRigCatRetries->value(5);
1068 cntRigCatRetries->callback((Fl_Callback*)cb_cntRigCatRetries);
1069 cntRigCatRetries->align(Fl_Align(FL_ALIGN_LEFT));
1070 cntRigCatRetries->value(progStatus.comm_retries);
1071 cntRigCatRetries->lstep(10);
1072
1073 cntRigCatTimeout = new Fl_Counter(
1074 cntRigCatRetries->x(), btnOneStopBit->y(),
1075 110, 22, _("Retry intvl"));
1076 cntRigCatTimeout->tooltip(_("Time between retries is msec"));
1077 cntRigCatTimeout->minimum(2);
1078 cntRigCatTimeout->maximum(200);
1079 cntRigCatTimeout->step(1);
1080 cntRigCatTimeout->value(10);
1081 cntRigCatTimeout->callback((Fl_Callback*)cb_cntRigCatTimeout);
1082 cntRigCatTimeout->align(Fl_Align(FL_ALIGN_LEFT));
1083 cntRigCatTimeout->value(progStatus.comm_timeout);
1084 cntRigCatTimeout->lstep(10);
1085
1086 cntRigCatWait = new Fl_Counter(
1087 cntRigCatRetries->x(), btnRigCatEcho->y(),
1088 110, 22, _("Cmds"));
1089 cntRigCatWait->tooltip(_("Wait millseconds between sequential commands"));
1090 cntRigCatWait->minimum(0);
1091 cntRigCatWait->maximum(100);
1092 cntRigCatWait->step(1);
1093 cntRigCatWait->value(5);
1094 cntRigCatWait->callback((Fl_Callback*)cb_cntRigCatWait);
1095 cntRigCatWait->align(Fl_Align(FL_ALIGN_LEFT));
1096 cntRigCatWait->value(progStatus.comm_wait);
1097 cntRigCatWait->lstep(10);
1098
1099 query_interval = new Fl_Counter(
1100 cntRigCatRetries->x(), cntRigCatWait->y() + 26,
1101 110, 22, _("Poll intvl"));
1102 query_interval->tooltip(_("Polling interval in msec"));
1103 query_interval->minimum(10);
1104 query_interval->maximum(5000);
1105 query_interval->step(1);
1106 query_interval->value(50);
1107 query_interval->callback((Fl_Callback*)cb_query_interval);
1108 query_interval->align(Fl_Align(FL_ALIGN_LEFT));
1109 query_interval->value(progStatus.serloop_timing);
1110 query_interval->lstep(10);
1111
1112 byte_interval = new Fl_Counter(
1113 cntRigCatRetries->x(), query_interval->y() + 26,
1114 110, 22, _("Byte intvl"));
1115 byte_interval->tooltip(_("Inter-byte interval (msec)"));
1116 byte_interval->minimum(0);
1117 byte_interval->maximum(200);
1118 byte_interval->step(1);
1119 byte_interval->value(0);
1120 byte_interval->callback((Fl_Callback*)cb_byte_interval);
1121 byte_interval->align(Fl_Align(FL_ALIGN_LEFT));
1122 byte_interval->value(progStatus.byte_interval);
1123 byte_interval->lstep(10);
1124
1125 Fl_Group* xcvr_grp4 = new Fl_Group(
1126 xcvr_grp1->x() + 2, xcvr_grp1->y() + xcvr_grp1->h() - 38,
1127 150, 36);
1128 xcvr_grp4->box(FL_ENGRAVED_FRAME);
1129 xcvr_grp4->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
1130
1131 txtCIV = new Fl_Int_Input(
1132 xcvr_grp4->x() + 4, xcvr_grp4->y() + 8,
1133 58, 22, _("CI-V adr"));
1134 txtCIV->tooltip(_("Enter hex value, ie: 0x5F"));
1135 txtCIV->type(2);
1136 txtCIV->callback((Fl_Callback*)cb_txtCIV);
1137 txtCIV->align(Fl_Align(FL_ALIGN_RIGHT));
1138
1139 btnCIVdefault = new Fl_Button(
1140 txtCIV->x() + txtCIV->w() + 4, txtCIV->y(),
1141 70, 22, _("Default"));
1142 btnCIVdefault->callback((Fl_Callback*)cb_btnCIVdefault);
1143
1144 xcvr_grp4->end();
1145
1146 xcvr_grp1->end();
1147
1148 Fl_Group* xcvr_grp5 = new Fl_Group(
1149 xcvr_grp1->x(), xcvr_grp1->y() + xcvr_grp1->h() + 2,
1150 152, H - xcvr_grp1->y() - xcvr_grp1->h() - 4);
1151 xcvr_grp5->box(FL_ENGRAVED_FRAME);
1152
1153 btnUSBaudio = new Fl_Check_Button(
1154 xcvr_grp5->x() + 4, xcvr_grp5->y() + xcvr_grp5->h() / 2 - 9,
1155 100, 18, _("USB audio"));
1156 btnUSBaudio->down_box(FL_DOWN_BOX);
1157 btnUSBaudio->callback((Fl_Callback*)cb_btnUSBaudio);
1158
1159 xcvr_grp5->end();
1160
1161 box_xcvr_connect = new Fl_Box(
1162 X + W - 90, Y + H - 27,
1163 18, 18, _("Connected"));
1164 box_xcvr_connect->tooltip(_("Lit when connected"));
1165 box_xcvr_connect->box(FL_DIAMOND_DOWN_BOX);
1166 box_xcvr_connect->color(FL_LIGHT1);
1167 box_xcvr_connect->align(Fl_Align(FL_ALIGN_LEFT));
1168
1169 btn_init_ser_port = new Fl_Button(
1170 X + W - 60, Y + H - 30,
1171 50, 24, _("Init"));
1172 btn_init_ser_port->callback((Fl_Callback*)cb_init_ser_port);
1173
1174 tabXCVR->end();
1175
1176 return tabXCVR;
1177 }
1178
createTRACE(int X,int Y,int W,int H,const char * label)1179 Fl_Group *createTRACE(int X, int Y, int W, int H, const char *label)
1180 {
1181 Fl_Group *tabTRACE = new Fl_Group(X, Y, W, H, label);
1182
1183 tabTRACE->hide();
1184 btn_trace = new Fl_Check_Button(X + 10, Y + 20, 80, 20, _("Trace support code"));
1185 btn_trace->value(progStatus.trace);
1186 btn_trace->callback((Fl_Callback*)cb_btn_trace);
1187 btn_trace->tooltip(_("Enable trace support"));
1188
1189 btn_debugtrace = new Fl_Check_Button(X + 10, Y + 50, 80, 20, _("Trace debug code"));
1190 btn_debugtrace->value(progStatus.debugtrace);
1191 btn_debugtrace->callback((Fl_Callback*)cb_btn_debugtrace);
1192 btn_debugtrace->tooltip(_("Display debug output on trace view"));
1193
1194 btn_rigtrace = new Fl_Check_Button(X + 10, Y + 80, 80, 20, _("Trace rig class code"));
1195 btn_rigtrace->value(progStatus.rigtrace);
1196 btn_rigtrace->callback((Fl_Callback*)cb_btn_rigtrace);
1197 btn_rigtrace->tooltip(_("Enable trace of rig methods"));
1198
1199 btn_gettrace = new Fl_Check_Button(X + 10, Y + 110, 80, 20, _("Trace rig class get code"));
1200 btn_gettrace->value(progStatus.gettrace);
1201 btn_gettrace->callback((Fl_Callback*)cb_btn_gettrace);
1202 btn_gettrace->tooltip(_("Enable trace of rig get methods"));
1203
1204 btn_settrace = new Fl_Check_Button(X + 10, Y + 140, 80, 20, _("Trace rig class set code"));
1205 btn_settrace->value(progStatus.settrace);
1206 btn_settrace->callback((Fl_Callback*)cb_btn_settrace);
1207 btn_settrace->tooltip(_("Enable trace of rig set methods"));
1208
1209 btn_xmltrace = new Fl_Check_Button(X + 240, Y + 20, 80, 20, _("Trace xml_server code"));
1210 btn_xmltrace->value(progStatus.xmltrace);
1211 btn_xmltrace->callback((Fl_Callback*)cb_btn_xmltrace);
1212 btn_xmltrace->tooltip(_("Enable trace of xmlrpc functions"));
1213
1214 btn_rpctrace = new Fl_Check_Button(X + 240, Y + 50, 80, 20, _("Trace xmlrpcpp code"));
1215 btn_rpctrace->value(progStatus.rpctrace);
1216 btn_rpctrace->callback((Fl_Callback*)cb_btn_rpctrace);
1217 btn_rpctrace->tooltip(_("Enable trace of XmlRpc methods"));
1218
1219 btn_start_stop_trace = new Fl_Check_Button(X + 240, Y + 80, 80, 20, _("Trace start/stop code"));
1220 btn_start_stop_trace->value(progStatus.start_stop_trace);
1221 btn_start_stop_trace->callback((Fl_Callback*)cb_btn_start_stop_trace);
1222 btn_start_stop_trace->tooltip(_("Enable trace of start/stop operations"));
1223
1224 selectlevel = new Fl_ComboBox(X + 240, Y + 110, 80, 20, _("XmlRpc trace level"));
1225 selectlevel->add("0|1|2|3|4");
1226 selectlevel->align(FL_ALIGN_RIGHT);
1227 selectlevel->index(progStatus.rpc_level);
1228 selectlevel->tooltip(_("0 = off ... 4 maximum depth"));
1229 selectlevel->readonly();
1230 selectlevel->callback((Fl_Callback*)cb_selectlevel);
1231
1232 btn_viewtrace = new Fl_Button(X + W - 90, Y + H - 30, 85, 24, _("View Trace"));
1233 btn_viewtrace->callback((Fl_Callback*)cb_btn_viewtrace);
1234
1235 tabTRACE->end();
1236
1237 return tabTRACE;
1238 }
1239
createTCPIP(int X,int Y,int W,int H,const char * label)1240 Fl_Group *createTCPIP(int X, int Y, int W, int H, const char *label)
1241 {
1242 Fl_Group * tabTCPIP = new Fl_Group(X, Y, W, H, label);
1243 tabTCPIP->hide();
1244
1245 inp_tcpip_addr = new Fl_Input2(X + 120, Y + 20, 300, 22, _("TCPIP address:"));
1246 inp_tcpip_addr->tooltip(_("remote tcpip server address"));
1247 inp_tcpip_addr->callback((Fl_Callback*)cb_tcpip_addr);
1248 inp_tcpip_addr->value(progStatus.tcpip_addr.c_str());
1249
1250 inp_tcpip_port = new Fl_Input2(X + 120, Y + 44, 100, 22, _("TCPIP port:"));
1251 inp_tcpip_port->tooltip(_("remote tcpip server port"));
1252 inp_tcpip_port->type(2);
1253 inp_tcpip_port->callback((Fl_Callback*)cb_tcpip_port);
1254 inp_tcpip_port->value(progStatus.tcpip_port.c_str());
1255
1256 inp_tcpip_ping_delay = new Fl_Counter(X + 120, Y + 70, 100, 22, _("Ping delay"));
1257 inp_tcpip_ping_delay->tooltip(_("enter round trip ping delay"));
1258 inp_tcpip_ping_delay->callback((Fl_Callback*)cb_tcpip_ping_delay);
1259 inp_tcpip_ping_delay->minimum(0);
1260 inp_tcpip_ping_delay->maximum(500);
1261 inp_tcpip_ping_delay->step(5);
1262 inp_tcpip_ping_delay->lstep(20);
1263 inp_tcpip_ping_delay->value(progStatus.tcpip_ping_delay);
1264 inp_tcpip_ping_delay->align(Fl_Align(FL_ALIGN_LEFT));
1265
1266 chk_use_tcpip = new Fl_Check_Button(X + 120, Y + 95, 18, 18, _("Use tcpip"));
1267 chk_use_tcpip->tooltip(_("Rig control via tcpip"));
1268 chk_use_tcpip->callback((Fl_Callback*)cb_use_tcpip);
1269 chk_use_tcpip->value(progStatus.use_tcpip);
1270 chk_use_tcpip->align(Fl_Align(FL_ALIGN_LEFT));
1271
1272 box_tcpip_connect = new Fl_Box(X + 120, Y + 120, 18, 18, _("Connected"));
1273 box_tcpip_connect->tooltip(_("Lit when connected to remote tcpip"));
1274 box_tcpip_connect->box(FL_DIAMOND_DOWN_BOX);
1275 box_tcpip_connect->color(FL_LIGHT1);
1276 box_tcpip_connect->align(Fl_Align(FL_ALIGN_RIGHT));
1277
1278 cntRetryAfter = new Fl_Counter(X + 120, Y + 145, 100, 20, _("Retry (secs)"));
1279 cntRetryAfter->tooltip(_("Retry connection if lost"));
1280 cntRetryAfter->minimum(1);
1281 cntRetryAfter->maximum(120);
1282 cntRetryAfter->step(1);
1283 cntRetryAfter->lstep(10);
1284 cntRetryAfter->callback((Fl_Callback*)cb_cntRetryAfter);
1285 cntRetryAfter->align(Fl_Align(FL_ALIGN_LEFT));
1286 cntRetryAfter->value(progStatus.tcpip_reconnect_after);
1287
1288 cntDropsAllowed = new Fl_Counter(X + 120, Y + 170, 100, 20, _("Allowed drops"));
1289 cntDropsAllowed->tooltip(_("# tcpip drop-outs before connection declared down"));
1290 cntDropsAllowed->minimum(1);
1291 cntDropsAllowed->maximum(25);
1292 cntDropsAllowed->step(1);
1293 cntDropsAllowed->lstep(5);
1294 cntDropsAllowed->callback((Fl_Callback*)cb_cntDropsAllowed);
1295 cntDropsAllowed->align(Fl_Align(FL_ALIGN_LEFT));
1296 cntDropsAllowed->value(progStatus.tcpip_drops_allowed);
1297
1298 tabTCPIP->end();
1299
1300 return tabTCPIP;
1301 }
1302
createPTT(int X,int Y,int W,int H,const char * label)1303 Fl_Group *createPTT(int X, int Y, int W, int H, const char *label)
1304 {
1305 Fl_Group *tabPTT = new Fl_Group(X, Y, W, H, label);
1306 tabPTT->hide();
1307
1308 Fl_Group *grp_CW_ptt = new Fl_Group(X + 2, Y + 20, W - 4, 30,
1309 _("CW mode PTT"));
1310 grp_CW_ptt->box(FL_ENGRAVED_BOX);
1311 grp_CW_ptt->align(Fl_Align(FL_ALIGN_TOP_LEFT));
1312
1313 Fl_Check_Button *btn_disable_CW_ptt = new Fl_Check_Button(
1314 grp_CW_ptt->x() + 10, grp_CW_ptt->y() + 4, 200, 22,
1315 _("disable PTT in CW mode"));
1316 btn_disable_CW_ptt->value(progStatus.disable_CW_ptt);
1317 btn_disable_CW_ptt->callback((Fl_Callback*)cb_disable_CW_ptt);
1318
1319 grp_CW_ptt->end();
1320
1321 Fl_Group *grp_catptt = new Fl_Group (
1322 grp_CW_ptt->x(), grp_CW_ptt->y() + grp_CW_ptt->h() + 20,
1323 grp_CW_ptt->w(), 60, _("CAT Port PTT options"));
1324 grp_catptt->box(FL_ENGRAVED_BOX);
1325 grp_catptt->align(Fl_Align(FL_ALIGN_TOP_LEFT));
1326
1327 int incr = (grp_CW_ptt->w() - 10) / 4;
1328
1329 btncatptt = new Fl_Check_Button(
1330 grp_catptt->x() + 10, grp_catptt->y() + 5, 100, 22, _("PTT via CAT"));
1331 btncatptt->tooltip(_("PTT is a CAT command (not hardware)"));
1332 btncatptt->callback((Fl_Callback*)cb_btncatptt);
1333 btncatptt->value(progStatus.comm_catptt);
1334
1335 btnrtsptt = new Fl_Check_Button(
1336 btncatptt->x() + incr, grp_catptt->y() + 5, 100, 22, _("PTT via RTS"));
1337 btnrtsptt->tooltip(_("RTS is ptt line"));
1338 btnrtsptt->callback((Fl_Callback*)cb_btnrtsptt);
1339 btnrtsptt->value(progStatus.comm_rtsptt);
1340
1341 btndtrptt = new Fl_Check_Button(
1342 btnrtsptt->x() + incr, grp_catptt->y() + 5, 100, 22, _("PTT via DTR"));
1343 btndtrptt->tooltip(_("DTR is ptt line"));
1344 btndtrptt->callback((Fl_Callback*)cb_btndtrptt);
1345 btndtrptt->value(progStatus.comm_dtrptt);
1346
1347 btnrtsplus = new Fl_Check_Button(
1348 btnrtsptt->x(), btnrtsptt->y() + 24, 102, 21, _("RTS +12 v"));
1349 btnrtsplus->tooltip(_("Initial state of RTS"));
1350 btnrtsplus->callback((Fl_Callback*)cb_btnrtsplus);
1351 btnrtsplus->value(progStatus.comm_rtsplus);
1352
1353 btndtrplus = new Fl_Check_Button(
1354 btndtrptt->x(), btndtrptt->y() + 24, 100, 21, _("DTR +12 v"));
1355 btndtrplus->tooltip(_("Initial state of DTR"));
1356 btndtrplus->callback((Fl_Callback*)cb_btndtrplus);
1357 btndtrplus->value(progStatus.comm_dtrplus);
1358
1359 btn2_init_ser_port = new Fl_Button(
1360 btndtrptt->x() + incr, btndtrplus->y(), 50, 24, _("Init"));
1361 btn2_init_ser_port->callback((Fl_Callback*)cb_init_ser_port);
1362
1363 grp_catptt->end();
1364
1365 Fl_Group *grp_ptt = new Fl_Group(
1366 grp_catptt->x(), grp_catptt->y() + grp_catptt->h() + 20,
1367 grp_catptt->w(), H - (grp_catptt->y() + grp_catptt->h() + 20),
1368 _("PTT control on Separate Serial Port"));
1369 grp_ptt->box(FL_ENGRAVED_BOX);
1370 grp_ptt->align(Fl_Align(FL_ALIGN_TOP_LEFT));
1371
1372 selectSepPTTPort = new Fl_ComboBox(
1373 grp_catptt->x() + 50, grp_ptt->y() + 8,
1374 grp_ptt->w() - 54, 22, _("Port"));
1375 selectSepPTTPort->tooltip(_("Separate PTT serial port"));
1376 selectSepPTTPort->box(FL_DOWN_BOX);
1377 selectSepPTTPort->color(FL_BACKGROUND2_COLOR);
1378 selectSepPTTPort->selection_color(FL_BACKGROUND_COLOR);
1379 selectSepPTTPort->labeltype(FL_NORMAL_LABEL);
1380 selectSepPTTPort->labelfont(0);
1381 selectSepPTTPort->labelsize(14);
1382 selectSepPTTPort->labelcolor(FL_FOREGROUND_COLOR);
1383 selectSepPTTPort->callback((Fl_Callback*)cb_selectSepPTTPort);
1384 selectSepPTTPort->align(Fl_Align(FL_ALIGN_LEFT));
1385 selectSepPTTPort->when(FL_WHEN_RELEASE);
1386 selectSepPTTPort->end();
1387
1388 btnSep_SCU_17 = new Fl_Check_Button(
1389 selectSepPTTPort->x(), selectSepPTTPort->y() + 24,
1390 128, 22, _("SCU-17"));
1391 btnSep_SCU_17->tooltip(_("Port is SCU-17 auxilliary\nSet stop bits to ZERO"));
1392 btnSep_SCU_17->callback((Fl_Callback*)cb_btnSep_SCU_17);
1393 btnSep_SCU_17->value(progStatus.sep_SCU_17);
1394
1395 btnSepRTSptt = new Fl_Check_Button(
1396 btnrtsptt->x(), selectSepPTTPort->y() + 24, 125, 22, _("PTT via RTS"));
1397 btnSepRTSptt->tooltip(_("RTS is ptt line"));
1398 btnSepRTSptt->callback((Fl_Callback*)cb_btnSepRTSptt);
1399 btnSepRTSptt->value(progStatus.sep_rtsptt);
1400
1401 btnSepDTRptt = new Fl_Check_Button(
1402 btndtrptt->x(), btnSepRTSptt->y(), 125, 22, _("PTT via DTR"));
1403 btnSepDTRptt->tooltip(_("DTR is ptt line"));
1404 btnSepDTRptt->callback((Fl_Callback*)cb_btnSepDTRptt);
1405 btnSepDTRptt->value(progStatus.sep_dtrptt);
1406
1407 btnSepRTSplus = new Fl_Check_Button(
1408 btnrtsptt->x(), btnSepRTSptt->y() + 24, 125, 22, _("RTS +12 v"));
1409 btnSepRTSplus->tooltip(_("Initial state of RTS"));
1410 btnSepRTSplus->callback((Fl_Callback*)cb_btnSepRTSplus);
1411 btnSepRTSplus->value(progStatus.sep_rtsplus);
1412
1413 btnSepDTRplus = new Fl_Check_Button(
1414 btndtrptt->x(), btnSepRTSplus->y(), 125, 22, _("DTR +12 v"));
1415 btnSepDTRplus->tooltip(_("Initial state of DTR"));
1416 btnSepDTRplus->callback((Fl_Callback*)cb_btnSepDTRplus);
1417 btnSepDTRplus->value(progStatus.sep_dtrplus);
1418
1419 btnOkSepSerial = new Fl_Button(
1420 btnSepDTRptt->x() + incr, btnSepDTRplus->y(),
1421 50, 22, _("Init"));
1422 btnOkSepSerial->callback((Fl_Callback*)cb_btnOkSepSerial);
1423
1424 grp_ptt->end();
1425
1426 tabPTT->end();
1427
1428 return tabPTT;
1429 }
1430
createAUX(int X,int Y,int W,int H,const char * label)1431 Fl_Group *createAUX(int X, int Y, int W, int H, const char *label)
1432 {
1433 Fl_Group * tabAUX = new Fl_Group(X, Y, W, H, label);
1434 tabAUX->hide();
1435
1436 selectAuxPort = new Fl_ComboBox(X + 130, Y + 60, 240, 22, _("Aux"));
1437 selectAuxPort->tooltip(_("Aux control port"));
1438 selectAuxPort->box(FL_DOWN_BOX);
1439 selectAuxPort->color(FL_BACKGROUND2_COLOR);
1440 selectAuxPort->selection_color(FL_BACKGROUND_COLOR);
1441 selectAuxPort->labeltype(FL_NORMAL_LABEL);
1442 selectAuxPort->labelfont(0);
1443 selectAuxPort->labelsize(14);
1444 selectAuxPort->labelcolor(FL_FOREGROUND_COLOR);
1445 selectAuxPort->callback((Fl_Callback*)cb_selectAuxPort);
1446 selectAuxPort->align(Fl_Align(FL_ALIGN_LEFT));
1447 selectAuxPort->when(FL_WHEN_RELEASE);
1448 selectAuxPort->end();
1449
1450 btnAux_SCU_17 = new Fl_Check_Button(X + 130, Y + 100, 128, 22, _(" SCU-17 auxiliary\n Yaesu 2nd USB port"));
1451 btnAux_SCU_17->tooltip(_("Set stop bits to ZERO"));
1452 btnAux_SCU_17->callback((Fl_Callback*)cb_btnAux_SCU_17);
1453 btnAux_SCU_17->value(progStatus.aux_SCU_17);
1454
1455 Fl_Box *bxsep = new Fl_Box(X + 55, Y + 10, 400, 40,
1456 _("Use only if your setup requires a separate\nSerial Port for a special Control Signals"));
1457 bxsep->box(FL_FLAT_BOX);
1458
1459 btnOkAuxSerial = new Fl_Button(X + W - 60, Y + H - 30, 50, 24, _("Init"));
1460 btnOkAuxSerial->callback((Fl_Callback*)cb_btnOkAuxSerial);
1461
1462 tabAUX->end();
1463
1464 return tabAUX;
1465 }
1466
createSERVER(int X,int Y,int W,int H,const char * label)1467 Fl_Group *createSERVER(int X, int Y, int W, int H, const char *label)
1468 {
1469 Fl_Group * tabSERVER = new Fl_Group(X, Y, W, H, label);
1470 tabSERVER->hide();
1471
1472 server_text = new Fl_Box(X + 30, Y + 10, W - 60, 60,
1473 _("\
1474 Change port if multiple instances of flrig / fldigi will\n\
1475 execute concurrently. Be sure to change the respective\n\
1476 fldigi configuration item for xmlrpc server port."));
1477 server_text->box(FL_FLAT_BOX);
1478 server_text->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
1479
1480 inp_serverport = new Fl_Input2(X + 120, Y + 80, 100, 22, _("Xmlrpc port:"));
1481 inp_serverport->tooltip(_("Socket port for xmlrpc server"));
1482 inp_serverport->type(2);
1483 inp_serverport->callback((Fl_Callback*)cb_server_port);
1484 inp_serverport->value(progStatus.xmlport.c_str());
1485 inp_serverport->when(FL_ENTER);
1486
1487 box_fldigi_connect = new Fl_Box(X + 25, Y + 145, 18, 18, _("Xmlrpc Client Connected"));
1488 box_fldigi_connect->tooltip(_("Lit when connected to external xmlrpc client"));
1489 box_fldigi_connect->box(FL_DIAMOND_DOWN_BOX);
1490 box_fldigi_connect->color(FL_LIGHT1);
1491 box_fldigi_connect->align(Fl_Align(FL_ALIGN_RIGHT));
1492
1493 tabSERVER->end();
1494
1495 return tabSERVER;
1496 }
1497
createPOLLING(int X,int Y,int W,int H,const char * label)1498 Fl_Group *createPOLLING(int X, int Y, int W, int H, const char *label)
1499 {
1500 tabPOLLING = new Fl_Group(X, Y, W, H, label);
1501 tabPOLLING->hide();
1502
1503 Fl_Group* xcvr_grp7 = new Fl_Group(X + 5, Y + 5, W - 10, 45, _("Meters"));
1504 xcvr_grp7->box(FL_ENGRAVED_BOX);
1505 xcvr_grp7->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
1506
1507 poll_smeter = new Fl_Value_Input(X + 10, Y + 25, 30, 20, _("S-mtr"));
1508 poll_smeter->tooltip(_("Poll every Nth interval"));
1509 poll_smeter->maximum(10);
1510 poll_smeter->step(1);
1511 poll_smeter->value(1);
1512 poll_smeter->callback((Fl_Callback*)cb_poll_smeter);
1513 poll_smeter->align(Fl_Align(FL_ALIGN_RIGHT));
1514 poll_smeter->value(progStatus.poll_smeter);
1515
1516 poll_pout = new Fl_Value_Input(X + 100, Y + 25, 30, 20, _("Pwr out"));
1517 poll_pout->tooltip(_("Poll every Nth interval"));
1518 poll_pout->maximum(10);
1519 poll_pout->step(1);
1520 poll_pout->value(1);
1521 poll_pout->callback((Fl_Callback*)cb_poll_pout);
1522 poll_pout->align(Fl_Align(FL_ALIGN_RIGHT));
1523 poll_pout->value(progStatus.poll_pout);
1524
1525 poll_swr = new Fl_Value_Input(X + 190, Y + 25, 30, 20, _("SWR"));
1526 poll_swr->tooltip(_("Poll every Nth interval"));
1527 poll_swr->maximum(10);
1528 poll_swr->step(1);
1529 poll_swr->value(1);
1530 poll_swr->callback((Fl_Callback*)cb_poll_swr);
1531 poll_swr->align(Fl_Align(FL_ALIGN_RIGHT));
1532 poll_swr->value(progStatus.poll_swr);
1533
1534 poll_alc = new Fl_Value_Input(X + 280, Y + 25, 30, 20, _("ALC"));
1535 poll_alc->tooltip(_("Poll every Nth interval"));
1536 poll_alc->maximum(10);
1537 poll_alc->step(1);
1538 poll_alc->value(1);
1539 poll_alc->callback((Fl_Callback*)cb_poll_alc);
1540 poll_alc->align(Fl_Align(FL_ALIGN_RIGHT));
1541 poll_alc->value(progStatus.poll_alc);
1542
1543 btnSetMeters = new Fl_Button(X + 370, Y + 25, 60, 20, _("Set all"));
1544 btnSetMeters->tooltip("Set all meter polls");
1545 btnSetMeters->callback((Fl_Callback*)cb_btnSetMeters);
1546
1547 poll_meters = new Fl_Value_Input(X + 435, Y + 25, 30, 20);
1548 poll_meters->tooltip(_("Poll every Nth interval"));
1549 poll_meters->maximum(10);
1550 poll_meters->step(1);
1551 poll_meters->value(progStatus.poll_meters);
1552 poll_meters->callback((Fl_Callback*)cb_poll_meters);
1553 poll_meters->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
1554 poll_meters->value(progStatus.poll_meters);
1555
1556 xcvr_grp7->end();
1557 Fl_Group* xcvr_grp8 = new Fl_Group(X + 5, Y + 50, W - 10, 45, _("Operating Controls"));
1558 xcvr_grp8->box(FL_ENGRAVED_BOX);
1559 xcvr_grp8->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
1560
1561 poll_frequency = new Fl_Value_Input(X + 10, Y + 70, 30, 20, _("Freq"));
1562 poll_frequency->tooltip(_("Poll xcvr frequency"));
1563 poll_frequency->maximum(10);
1564 poll_frequency->step(1);
1565 poll_frequency->value(1);
1566 poll_frequency->callback((Fl_Callback*)cb_poll_frequency);
1567 poll_frequency->align(Fl_Align(FL_ALIGN_RIGHT));
1568 poll_frequency->value(progStatus.poll_frequency);
1569
1570 poll_mode = new Fl_Value_Input(X + 100, Y + 70, 30, 20, _("Mode"));
1571 poll_mode->tooltip(_("Poll xcvr mode"));
1572 poll_mode->maximum(10);
1573 poll_mode->step(1);
1574 poll_mode->value(1);
1575 poll_mode->callback((Fl_Callback*)cb_poll_mode);
1576 poll_mode->align(Fl_Align(FL_ALIGN_RIGHT));
1577 poll_mode->value(progStatus.poll_mode);
1578
1579 poll_bandwidth = new Fl_Value_Input(X + 190, Y + 70, 30, 20, _("BW"));
1580 poll_bandwidth->tooltip(_("Poll xcvr bandwidth"));
1581 poll_bandwidth->maximum(10);
1582 poll_bandwidth->step(1);
1583 poll_bandwidth->value(1);
1584 poll_bandwidth->callback((Fl_Callback*)cb_poll_bandwidth);
1585 poll_bandwidth->align(Fl_Align(FL_ALIGN_RIGHT));
1586 poll_bandwidth->value(progStatus.poll_bandwidth);
1587
1588 btnSetOps = new Fl_Button(X + 370, Y + 70, 60, 20, _("Set all"));
1589 btnSetOps->tooltip("Poll all operating values");
1590 btnSetOps->callback((Fl_Callback*)cb_btnSetOps);
1591
1592 poll_ops = new Fl_Value_Input(X + 435, Y + 70, 30, 20);
1593 poll_ops->tooltip(_("Poll every Nth interval"));
1594 poll_ops->maximum(10);
1595 poll_ops->step(1);
1596 poll_ops->value(progStatus.poll_ops);
1597 poll_ops->callback((Fl_Callback*)cb_poll_ops);
1598 poll_ops->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
1599 poll_ops->value(progStatus.poll_ops);
1600
1601 xcvr_grp8->end();
1602
1603 Fl_Group* xcvr_grp9 = new Fl_Group(X + 5, Y + 95, W - 10, 130, _("Additional Controls"));
1604 xcvr_grp9->box(FL_ENGRAVED_FRAME);
1605 xcvr_grp9->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
1606
1607 poll_volume = new Fl_Value_Input(X + 10, Y + 115, 30, 20, _("Volume"));
1608 poll_volume->tooltip(_("Volume control"));
1609 poll_volume->maximum(10);
1610 poll_volume->step(1);
1611 poll_volume->callback((Fl_Callback*)cb_poll_volume);
1612 poll_volume->align(Fl_Align(FL_ALIGN_RIGHT));
1613 poll_volume->value(progStatus.poll_volume);
1614
1615 poll_micgain = new Fl_Value_Input(X + 100, Y + 115, 30, 20, _("Mic"));
1616 poll_micgain->tooltip(_("Microphone gain"));
1617 poll_micgain->maximum(10);
1618 poll_micgain->step(1);
1619 poll_micgain->callback((Fl_Callback*)cb_poll_micgain);
1620 poll_micgain->align(Fl_Align(FL_ALIGN_RIGHT));
1621 poll_micgain->value(progStatus.poll_micgain);
1622
1623 poll_rfgain = new Fl_Value_Input(X + 190, Y + 115, 30, 20, _("RF"));
1624 poll_rfgain->tooltip(_("RF gain"));
1625 poll_rfgain->maximum(10);
1626 poll_rfgain->step(1);
1627 poll_rfgain->callback((Fl_Callback*)cb_poll_rfgain);
1628 poll_rfgain->align(Fl_Align(FL_ALIGN_RIGHT));
1629 poll_rfgain->value(progStatus.poll_rfgain);
1630
1631 poll_power_control = new Fl_Value_Input(X + 280, Y + 115, 30, 20, _("Power"));
1632 poll_power_control->tooltip(_("Power output"));
1633 poll_power_control->maximum(10);
1634 poll_power_control->step(1);
1635 poll_power_control->callback((Fl_Callback*)cb_poll_power_control);
1636 poll_power_control->align(Fl_Align(FL_ALIGN_RIGHT));
1637 poll_power_control->value(progStatus.poll_power_control);
1638
1639 poll_ptt = new Fl_Value_Input(X + 370, Y + 115, 30, 20, _("PTT"));
1640 poll_ptt->tooltip(_("Push to talk"));
1641 poll_ptt->maximum(10);
1642 poll_ptt->step(1);
1643 poll_ptt->callback((Fl_Callback*)cb_poll_ptt);
1644 poll_ptt->align(Fl_Align(FL_ALIGN_RIGHT));
1645 poll_ptt->value(progStatus.poll_ptt);
1646
1647 poll_ifshift = new Fl_Value_Input(X + 10, Y + 140, 30, 20, _("IF"));
1648 poll_ifshift->tooltip(_("IF shift"));
1649 poll_ifshift->maximum(10);
1650 poll_ifshift->step(1);
1651 poll_ifshift->callback((Fl_Callback*)cb_poll_ifshift);
1652 poll_ifshift->align(Fl_Align(FL_ALIGN_RIGHT));
1653 poll_ifshift->value(progStatus.poll_ifshift);
1654
1655 poll_notch = new Fl_Value_Input(X + 100, Y + 140, 30, 20, _("Notch"));
1656 poll_notch->tooltip(_("Manual notch"));
1657 poll_notch->maximum(10);
1658 poll_notch->step(1);
1659 poll_notch->callback((Fl_Callback*)cb_poll_notch);
1660 poll_notch->align(Fl_Align(FL_ALIGN_RIGHT));
1661 poll_notch->value(progStatus.poll_notch);
1662
1663 poll_auto_notch = new Fl_Value_Input(X + 190, Y + 140, 30, 20, _("Auto"));
1664 poll_auto_notch->tooltip(_("Auto notch"));
1665 poll_auto_notch->maximum(10);
1666 poll_auto_notch->step(1);
1667 poll_auto_notch->callback((Fl_Callback*)cb_poll_auto_notch);
1668 poll_auto_notch->align(Fl_Align(FL_ALIGN_RIGHT));
1669 poll_auto_notch->value(progStatus.poll_auto_notch);
1670
1671 poll_tuner = new Fl_Value_Input(X + 280, Y + 140, 30, 20, _("Tuner"));
1672 poll_tuner->tooltip(_("Auto Tuner"));
1673 poll_tuner->maximum(10);
1674 poll_tuner->step(1);
1675 poll_tuner->callback((Fl_Callback*)cb_poll_tuner);
1676 poll_tuner->align(Fl_Align(FL_ALIGN_RIGHT));
1677 poll_tuner->value(progStatus.poll_tuner);
1678
1679 poll_pre_att = new Fl_Value_Input(X + 10, Y + 165, 30, 20, _("Pre/Att"));
1680 poll_pre_att->tooltip(_("Preamp / Attenuator"));
1681 poll_pre_att->maximum(10);
1682 poll_pre_att->step(1);
1683 poll_pre_att->callback((Fl_Callback*)cb_poll_pre_att);
1684 poll_pre_att->align(Fl_Align(FL_ALIGN_RIGHT));
1685 poll_pre_att->value(progStatus.poll_pre_att);
1686
1687 poll_squelch = new Fl_Value_Input(X + 100, Y + 165, 30, 20, _("Squelch"));
1688 poll_squelch->tooltip(_("Squelch"));
1689 poll_squelch->maximum(10);
1690 poll_squelch->step(1);
1691 poll_squelch->callback((Fl_Callback*)cb_poll_squelch);
1692 poll_squelch->align(Fl_Align(FL_ALIGN_RIGHT));
1693 poll_squelch->value(progStatus.poll_squelch);
1694
1695 poll_split = new Fl_Value_Input(X + 190, Y + 165, 30, 20, _("Split"));
1696 poll_split->tooltip(_("Split vfo operation"));
1697 poll_split->maximum(10);
1698 poll_split->step(1);
1699 poll_split->callback((Fl_Callback*)cb_poll_split);
1700 poll_split->align(Fl_Align(FL_ALIGN_RIGHT));
1701 poll_split->value(progStatus.poll_split);
1702
1703 poll_noise = new Fl_Value_Input(X + 10, Y + 190, 30, 20, _("Blanker"));
1704 poll_noise->tooltip(_("Noise blanker"));
1705 poll_noise->maximum(10);
1706 poll_noise->step(1);
1707 poll_noise->callback((Fl_Callback*)cb_poll_noise);
1708 poll_noise->align(Fl_Align(FL_ALIGN_RIGHT));
1709 poll_noise->value(progStatus.poll_noise);
1710
1711 poll_nr = new Fl_Value_Input(X + 100, Y + 190, 30, 20, _("Noise red"));
1712 poll_nr->tooltip(_("Noise reduction"));
1713 poll_nr->maximum(10);
1714 poll_nr->step(1);
1715 poll_nr->callback((Fl_Callback*)cb_poll_nr);
1716 poll_nr->align(Fl_Align(FL_ALIGN_RIGHT));
1717 poll_nr->value(progStatus.poll_nr);
1718
1719 poll_compression = new Fl_Value_Input(X + 190, Y + 190, 30, 20, _("Comp'"));
1720 poll_compression->tooltip(_("Compression"));
1721 poll_compression->maximum(10);
1722 poll_compression->step(1);
1723 poll_compression->callback((Fl_Callback*)cb_poll_compression);
1724 poll_compression->align(Fl_Align(FL_ALIGN_RIGHT));
1725 poll_compression->value(progStatus.poll_compression);
1726
1727 poll_break_in = new Fl_Value_Input(X + 280, Y + 165, 30, 20, _("QSK"));
1728 poll_break_in->tooltip(_("Break In"));
1729 poll_break_in->maximum(10);
1730 poll_break_in->step(1);
1731 poll_break_in->callback((Fl_Callback*)cb_poll_break_in);
1732 poll_break_in->align(Fl_Align(FL_ALIGN_RIGHT));
1733 poll_break_in->value(progStatus.poll_break_in);
1734
1735 btnSetAdd = new Fl_Button(X + 370, Y + 190, 60, 20, _("Set all"));
1736 btnSetAdd->callback((Fl_Callback*)cb_btnSetAdd);
1737
1738 poll_all = new Fl_Value_Input(X + 435, Y + 190, 30, 20);
1739 poll_all->tooltip(_("Poll every Nth interval"));
1740 poll_all->maximum(10);
1741 poll_all->step(1);
1742 poll_all->value(4);
1743 poll_all->callback((Fl_Callback*)cb_poll_all);
1744 poll_all->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
1745 poll_all->value(progStatus.poll_all);
1746
1747 xcvr_grp9->end();
1748
1749 tabPOLLING->end();
1750
1751 return tabPOLLING;
1752 }
1753
createSNDCMD(int X,int Y,int W,int H,const char * label)1754 Fl_Group *createSNDCMD(int X, int Y, int W, int H, const char *label)
1755 {
1756 Fl_Group *tabSNDCMD = new Fl_Group(X, Y, W, H, label);
1757 tabSNDCMD->hide();
1758
1759 txt_command = new Fl_Input2(X + 25, Y + 20, 435, 24,
1760 _("Enter text as ASCII string\nOr sequence of hex values, x80 etc separated by spaces"));
1761 txt_command->box(FL_DOWN_BOX);
1762 txt_command->color(FL_BACKGROUND2_COLOR);
1763 txt_command->selection_color(FL_SELECTION_COLOR);
1764 txt_command->labeltype(FL_NORMAL_LABEL);
1765 txt_command->labelfont(0);
1766 txt_command->labelsize(14);
1767 txt_command->labelcolor(FL_FOREGROUND_COLOR);
1768 txt_command->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
1769 txt_command->when(FL_WHEN_RELEASE);
1770
1771 txt_response = new Fl_Output(X + 25, Y + 80, 435, 24, _("Response to the SEND button"));
1772 txt_response->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
1773
1774 btn_icom_pre = new Fl_Button(X + 380, Y + 115, 80, 20, _("ICOM pre"));
1775 btn_icom_pre->callback((Fl_Callback*)cb_btn_icom_pre);
1776
1777 btn_icom_post = new Fl_Button(X + 380, Y + 145, 80, 20, _("ICOM post"));
1778 btn_icom_post->callback((Fl_Callback*)cb_btn_icom_post);
1779
1780 btn_send_command = new Fl_Button(X + 380, Y + 180, 80, 20, _("SEND"));
1781 btn_send_command->callback((Fl_Callback*)cb_btn_send_command);
1782
1783 tabSNDCMD->end();
1784
1785 return tabSNDCMD;
1786 }
1787
createCOMMANDS(int X,int Y,int W,int H,const char * label)1788 Fl_Group *createCOMMANDS(int X, int Y, int W, int H, const char *label)
1789 {
1790 Fl_Group *tabCOMMANDS = new Fl_Group(X, Y, W, H, label);
1791
1792 Fl_Tabs *tabCmds = new Fl_Tabs(X, Y, W, H - 25);
1793
1794 std::string *cmdlbls[] = {
1795 &progStatus.label1, &progStatus.label2, &progStatus.label3, &progStatus.label4,
1796 &progStatus.label5, &progStatus.label6, &progStatus.label7, &progStatus.label8,
1797 &progStatus.label9, &progStatus.label10, &progStatus.label11, &progStatus.label12,
1798 &progStatus.label13, &progStatus.label14, &progStatus.label15, &progStatus.label16,
1799 &progStatus.label17, &progStatus.label18, &progStatus.label19, &progStatus.label20,
1800 &progStatus.label21, &progStatus.label22, &progStatus.label23, &progStatus.label24
1801 };
1802
1803 Fl_Input2 *cmdbtns[] = {
1804 cmdlbl1, cmdlbl2, cmdlbl3, cmdlbl4,
1805 cmdlbl5, cmdlbl6, cmdlbl7, cmdlbl8,
1806 cmdlbl9, cmdlbl10, cmdlbl11, cmdlbl12,
1807 cmdlbl13, cmdlbl14, cmdlbl15, cmdlbl16,
1808 cmdlbl17, cmdlbl18, cmdlbl19, cmdlbl20,
1809 cmdlbl21, cmdlbl22, cmdlbl23, cmdlbl24
1810 };
1811
1812 Fl_Input2 *cmdtexts[] = {
1813 cmdtext1, cmdtext2, cmdtext3, cmdtext4,
1814 cmdtext5, cmdtext6, cmdtext7, cmdtext8,
1815 cmdtext9, cmdtext10, cmdtext11, cmdtext12,
1816 cmdtext13, cmdtext14, cmdtext15, cmdtext16,
1817 cmdtext17, cmdtext18, cmdtext19, cmdtext20,
1818 cmdtext21, cmdtext22, cmdtext23, cmdtext24
1819 };
1820
1821 Fl_Input2 *shftcmdtexts[] = {
1822 shftcmdtext1, shftcmdtext2, shftcmdtext3, shftcmdtext4,
1823 shftcmdtext5, shftcmdtext6, shftcmdtext7, shftcmdtext8,
1824 shftcmdtext9, shftcmdtext10, shftcmdtext11, shftcmdtext12,
1825 shftcmdtext13, shftcmdtext14, shftcmdtext15, shftcmdtext16,
1826 shftcmdtext17, shftcmdtext18, shftcmdtext19, shftcmdtext20,
1827 shftcmdtext21, shftcmdtext22, shftcmdtext23, shftcmdtext24
1828 };
1829
1830 std::string *cmd[] = {
1831 &progStatus.command1, &progStatus.command2, &progStatus.command3, &progStatus.command4,
1832 &progStatus.command5, &progStatus.command6, &progStatus.command7, &progStatus.command8,
1833 &progStatus.command9, &progStatus.command10, &progStatus.command11, &progStatus.command12,
1834 &progStatus.command13, &progStatus.command14, &progStatus.command15, &progStatus.command16,
1835 &progStatus.command17, &progStatus.command18, &progStatus.command19, &progStatus.command20,
1836 &progStatus.command21, &progStatus.command22, &progStatus.command23, &progStatus.command24
1837 };
1838
1839 std::string *shftcmd[] = {
1840 &progStatus.shftcmd1, &progStatus.shftcmd2, &progStatus.shftcmd3, &progStatus.shftcmd4,
1841 &progStatus.shftcmd5, &progStatus.shftcmd6, &progStatus.shftcmd7, &progStatus.shftcmd8,
1842 &progStatus.shftcmd9, &progStatus.shftcmd10, &progStatus.shftcmd11, &progStatus.shftcmd12,
1843 &progStatus.shftcmd13, &progStatus.shftcmd14, &progStatus.shftcmd15, &progStatus.shftcmd16,
1844 &progStatus.shftcmd17, &progStatus.shftcmd18, &progStatus.shftcmd19, &progStatus.shftcmd20,
1845 &progStatus.shftcmd21, &progStatus.shftcmd22, &progStatus.shftcmd23, &progStatus.shftcmd24
1846 };
1847
1848 static const char *lbl[24] = {
1849 "1", "2", "3", "4", "5", "6", "7", "8",
1850 "9", "10", "11", "12", "13", "14", "15", "16",
1851 "17", "18", "19", "20", "21", "22", "23", "24"
1852 };
1853
1854 tabCmds1 = new Fl_Group(X, Y + 20, W, H - 50, _("1-4"));
1855
1856 bx1a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label");
1857 bx1a->box(FL_FLAT_BOX);
1858 bx1a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
1859
1860 bx1b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command");
1861 bx1b->box(FL_FLAT_BOX);
1862 bx1b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
1863
1864 for (int n = 0; n < 4; n++) {
1865 cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]);
1866 cmdbtns[n]->align(FL_ALIGN_LEFT);
1867 cmdbtns[n]->value(cmdlbls[n]->c_str());
1868 cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, (void *)long(n));
1869
1870 cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, "");
1871 cmdtexts[n]->align(FL_ALIGN_LEFT);
1872 cmdtexts[n]->value(cmd[n]->c_str());
1873 cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, (void *)long(n));
1874
1875 shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT");
1876 shftcmdtexts[n]->align(FL_ALIGN_LEFT);
1877 shftcmdtexts[n]->value(shftcmd[n]->c_str());
1878 shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, (void *)long(n));
1879 }
1880
1881 tabCmds1->end();
1882
1883 tabCmds2 = new Fl_Group(X, Y + 20, W, H - 50, _("5-8"));
1884
1885 bx2a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label");
1886 bx2a->box(FL_FLAT_BOX);
1887 bx2a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
1888
1889 bx2b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command");
1890 bx2b->box(FL_FLAT_BOX);
1891 bx2b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
1892
1893 for (int n = 4; n < 8; n++) {
1894 cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]);
1895 cmdbtns[n]->align(FL_ALIGN_LEFT);
1896 cmdbtns[n]->value(cmdlbls[n]->c_str());
1897 cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, (void *)long(n));
1898
1899 cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, "");
1900 cmdtexts[n]->align(FL_ALIGN_LEFT);
1901 cmdtexts[n]->value(cmd[n]->c_str());
1902 cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, (void *)long(n));
1903
1904 shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT");
1905 shftcmdtexts[n]->align(FL_ALIGN_LEFT);
1906 shftcmdtexts[n]->value(shftcmd[n]->c_str());
1907 shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, (void *)long(n));
1908 }
1909
1910 tabCmds2->end();
1911
1912 tabCmds3 = new Fl_Group(X, Y + 20, W, H - 50, _("9-12"));
1913 tabCmds2->hide();
1914
1915 bx3a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label");
1916 bx3a->box(FL_FLAT_BOX);
1917 bx3a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
1918
1919 bx3b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command");
1920 bx3b->box(FL_FLAT_BOX);
1921 bx3b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
1922
1923 for (int n = 8; n < 12; n++) {
1924 cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]);
1925 cmdbtns[n]->align(FL_ALIGN_LEFT);
1926 cmdbtns[n]->value(cmdlbls[n]->c_str());
1927 cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, (void *)long(n));
1928
1929 cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, "");
1930 cmdtexts[n]->align(FL_ALIGN_LEFT);
1931 cmdtexts[n]->value(cmd[n]->c_str());
1932 cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, (void *)long(n));
1933
1934 shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT");
1935 shftcmdtexts[n]->align(FL_ALIGN_LEFT);
1936 shftcmdtexts[n]->value(shftcmd[n]->c_str());
1937 shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, (void *)long(n));
1938 }
1939
1940 tabCmds3->end();
1941
1942 tabCmds4 = new Fl_Group(X, Y + 20, W, H - 50, _("13-16"));
1943
1944 bx4a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label");
1945 bx4a->box(FL_FLAT_BOX);
1946 bx4a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
1947
1948 bx4b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command");
1949 bx4b->box(FL_FLAT_BOX);
1950 bx4b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
1951
1952 for (int n = 12; n < 16; n++) {
1953 cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]);
1954 cmdbtns[n]->align(FL_ALIGN_LEFT);
1955 cmdbtns[n]->value(cmdlbls[n]->c_str());
1956 cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, (void *)long(n));
1957
1958 cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, "");
1959 cmdtexts[n]->align(FL_ALIGN_LEFT);
1960 cmdtexts[n]->value(cmd[n]->c_str());
1961 cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, (void *)long(n));
1962
1963 shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT");
1964 shftcmdtexts[n]->align(FL_ALIGN_LEFT);
1965 shftcmdtexts[n]->value(shftcmd[n]->c_str());
1966 shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, (void *)long(n));
1967 }
1968
1969 tabCmds4->end();
1970
1971 tabCmds5 = new Fl_Group(X, Y + 20, W, H - 50, _("17-20"));
1972
1973 bx5a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label");
1974 bx5a->box(FL_FLAT_BOX);
1975 bx5a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
1976
1977 bx5b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command");
1978 bx5b->box(FL_FLAT_BOX);
1979 bx5b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
1980
1981 for (int n = 16; n < 20; n++) {
1982 cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]);
1983 cmdbtns[n]->align(FL_ALIGN_LEFT);
1984 cmdbtns[n]->value(cmdlbls[n]->c_str());
1985 cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, (void *)long(n));
1986
1987 cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, "");
1988 cmdtexts[n]->align(FL_ALIGN_LEFT);
1989 cmdtexts[n]->value(cmd[n]->c_str());
1990 cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, (void *)long(n));
1991
1992 shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT");
1993 shftcmdtexts[n]->align(FL_ALIGN_LEFT);
1994 shftcmdtexts[n]->value(shftcmd[n]->c_str());
1995 shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, (void *)long(n));
1996 }
1997
1998 tabCmds5->end();
1999
2000 tabCmds6 = new Fl_Group(X, Y + 20, W, H - 50, _("21-24"));
2001
2002 bx6a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label");
2003 bx6a->box(FL_FLAT_BOX);
2004 bx6a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
2005
2006 bx6b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command");
2007 bx6b->box(FL_FLAT_BOX);
2008 bx6b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
2009
2010 for (int n = 20; n < 24; n++) {
2011 cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]);
2012 cmdbtns[n]->align(FL_ALIGN_LEFT);
2013 cmdbtns[n]->value(cmdlbls[n]->c_str());
2014 cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, (void *)long(n));
2015
2016 cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, "");
2017 cmdtexts[n]->align(FL_ALIGN_LEFT);
2018 cmdtexts[n]->value(cmd[n]->c_str());
2019 cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, (void *)long(n));
2020
2021 shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT");
2022 shftcmdtexts[n]->align(FL_ALIGN_LEFT);
2023 shftcmdtexts[n]->value(shftcmd[n]->c_str());
2024 shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, (void *)long(n));
2025 }
2026
2027 tabCmds6->end();
2028
2029 tabCmds->end();
2030
2031 cmdResponse = new Fl_Output(cmdtexts[0]->x(), Y + H - 20, cmdtexts[0]->w(), 20, "Response:");
2032 cmdResponse->align(FL_ALIGN_LEFT);
2033
2034 tabCOMMANDS->end();
2035
2036 return tabCOMMANDS;
2037 }
2038
createRestore(int X,int Y,int W,int H,const char * label)2039 Fl_Group *createRestore(int X, int Y, int W, int H, const char *label)
2040 {
2041 Fl_Group *tabRESTORE = new Fl_Group(X, Y, W, H, label);
2042
2043 tabRESTORE->hide();
2044
2045 Fl_Box *restore_box = new Fl_Box(X + 8, Y + 5, 455, 30,
2046 _("Read / Restore these parameters"));
2047 restore_box->box(FL_ENGRAVED_FRAME);
2048
2049 btnRestoreFrequency = new Fl_Check_Button(X + 8, Y + 40, 20, 20, _("Freq"));
2050 btnRestoreFrequency->tooltip(_("Restore frequency"));
2051 btnRestoreFrequency->callback((Fl_Callback*)cb_restore);
2052 btnRestoreFrequency->align(Fl_Align(FL_ALIGN_RIGHT));
2053 btnRestoreFrequency->value(progStatus.restore_frequency == 1);
2054
2055 btnRestoreMode = new Fl_Check_Button(X + 8, Y + 65, 20, 20, _("Mode"));
2056 btnRestoreMode->tooltip(_("Restore Mode"));
2057 btnRestoreMode->callback((Fl_Callback*)cb_restore);
2058 btnRestoreMode->align(Fl_Align(FL_ALIGN_RIGHT));
2059 btnRestoreMode->value(progStatus.restore_mode == 1);
2060
2061 btnRestoreBandwidth = new Fl_Check_Button(X + 8, Y + 90, 20, 20, _("Bandwidth"));
2062 btnRestoreBandwidth->tooltip(_("Restore bandwidth"));
2063 btnRestoreBandwidth->callback((Fl_Callback*)cb_restore);
2064 btnRestoreBandwidth->align(Fl_Align(FL_ALIGN_RIGHT));
2065 btnRestoreBandwidth->value(progStatus.restore_bandwidth == 1);
2066
2067 btnRestoreVolume = new Fl_Check_Button(X + 8, Y + 115, 20, 20, _("Volume"));
2068 btnRestoreVolume->tooltip(_("Restore volume control"));
2069 btnRestoreVolume->callback((Fl_Callback*)cb_restore);
2070 btnRestoreVolume->align(Fl_Align(FL_ALIGN_RIGHT));
2071 btnRestoreVolume->value(progStatus.restore_volume == 1);
2072
2073 btnRestoreMicGain = new Fl_Check_Button(X + 8, Y + 140, 20, 20, _("Mic gain"));
2074 btnRestoreMicGain->tooltip(_("Restore mic gain"));
2075 btnRestoreMicGain->callback((Fl_Callback*)cb_restore);
2076 btnRestoreMicGain->align(Fl_Align(FL_ALIGN_RIGHT));
2077 btnRestoreMicGain->value(progStatus.restore_mic_gain == 1);
2078
2079 btnRestoreRfGain = new Fl_Check_Button(X + 8, Y + 165, 20, 20, _("RF gain"));
2080 btnRestoreRfGain->tooltip(_("Restore RF gain"));
2081 btnRestoreRfGain->callback((Fl_Callback*)cb_restore);
2082 btnRestoreRfGain->align(Fl_Align(FL_ALIGN_RIGHT));
2083 btnRestoreRfGain->value(progStatus.restore_rf_gain == 1);
2084
2085 btnRestorePowerControl = new Fl_Check_Button(X + 8, Y + 190, 20, 20, _("Pwr level"));
2086 btnRestorePowerControl->tooltip(_("Restore power control"));
2087 btnRestorePowerControl->callback((Fl_Callback*)cb_restore);
2088 btnRestorePowerControl->align(Fl_Align(FL_ALIGN_RIGHT));
2089 btnRestorePowerControl->value(progStatus.restore_power_control == 1);
2090
2091 btnRestoreIFshift = new Fl_Check_Button(X + 128, Y + 40, 20, 20, _("IFshift"));
2092 btnRestoreIFshift->tooltip(_("Restore IF shift control"));
2093 btnRestoreIFshift->callback((Fl_Callback*)cb_restore);
2094 btnRestoreIFshift->align(Fl_Align(FL_ALIGN_RIGHT));
2095 btnRestoreIFshift->value(progStatus.restore_if_shift == 1);
2096
2097 btnRestoreNotch = new Fl_Check_Button(X + 128, Y + 65, 20, 20, _("Notch"));
2098 btnRestoreNotch->tooltip(_("Restore notch control"));
2099 btnRestoreNotch->callback((Fl_Callback*)cb_restore);
2100 btnRestoreNotch->align(Fl_Align(FL_ALIGN_RIGHT));
2101 btnRestoreNotch->value(progStatus.restore_notch == 1);
2102
2103 btnRestoreAutoNotch = new Fl_Check_Button(X + 128, Y + 90, 20, 20, _("Auto Ntch"));
2104 btnRestoreAutoNotch->tooltip(_("Restore auto notch setting"));
2105 btnRestoreAutoNotch->callback((Fl_Callback*)cb_restore);
2106 btnRestoreAutoNotch->align(Fl_Align(FL_ALIGN_RIGHT));
2107 btnRestoreAutoNotch->value(progStatus.restore_auto_notch == 1);
2108
2109 btnRestoreSquelch = new Fl_Check_Button(X + 128, Y + 115, 20, 20, _("Squelch"));
2110 btnRestoreSquelch->tooltip(_("Restore squelch"));
2111 btnRestoreSquelch->callback((Fl_Callback*)cb_restore);
2112 btnRestoreSquelch->align(Fl_Align(FL_ALIGN_RIGHT));
2113 btnRestoreSquelch->value(progStatus.restore_squelch == 1);
2114
2115 btnRestoreSplit = new Fl_Check_Button(X + 128, Y + 140, 20, 20, _("Split"));
2116 btnRestoreSplit->tooltip(_("Restore split"));
2117 btnRestoreSplit->callback((Fl_Callback*)cb_restore);
2118 btnRestoreSplit->align(Fl_Align(FL_ALIGN_RIGHT));
2119 btnRestoreSplit->value(progStatus.restore_split == 1);
2120
2121 btnRestorePreAtt = new Fl_Check_Button(X + 128, Y + 165, 20, 20, _("Pre/Att"));
2122 btnRestorePreAtt->tooltip(_("Restore Pre/Att"));
2123 btnRestorePreAtt->callback((Fl_Callback*)cb_restore);
2124 btnRestorePreAtt->align(Fl_Align(FL_ALIGN_RIGHT));
2125 btnRestorePreAtt->value(progStatus.restore_pre_att == 1);
2126
2127 btnRestoreNoise = new Fl_Check_Button(X + 128, Y + 190, 20, 20, _("Blanker"));
2128 btnRestoreNoise->tooltip(_("Restore noise blanker control"));
2129 btnRestoreNoise->callback((Fl_Callback*)cb_restore);
2130 btnRestoreNoise->align(Fl_Align(FL_ALIGN_RIGHT));
2131 btnRestoreNoise->value(progStatus.restore_noise == 1);
2132
2133 btnRestoreNR = new Fl_Check_Button(X + 248, Y + 40, 20, 20, _("Noise Red'"));
2134 btnRestoreNR->tooltip(_("Restore noise reduction"));
2135 btnRestoreNR->callback((Fl_Callback*)cb_restore);
2136 btnRestoreNR->align(Fl_Align(FL_ALIGN_RIGHT));
2137 btnRestoreNR->value(progStatus.restore_nr == 1);
2138
2139 btnRestoreCompOnOff = new Fl_Check_Button(X + 248, Y + 65, 20, 20, _("Comp On/Off"));
2140 btnRestoreCompOnOff->tooltip(_("Restore Comp On/Off"));
2141 btnRestoreCompOnOff->callback((Fl_Callback*)cb_restore);
2142 btnRestoreCompOnOff->align(Fl_Align(FL_ALIGN_RIGHT));
2143 btnRestoreCompOnOff->value(progStatus.restore_comp_on_off == 1);
2144
2145 btnRestoreCompLevel = new Fl_Check_Button(X + 248, Y + 90, 20, 20, _("Comp Level"));
2146 btnRestoreCompLevel->tooltip(_("Restore comp level"));
2147 btnRestoreCompLevel->callback((Fl_Callback*)cb_restore);
2148 btnRestoreCompLevel->align(Fl_Align(FL_ALIGN_RIGHT));
2149 btnRestoreCompLevel->value(progStatus.restore_comp_level == 1);
2150
2151 btnUseRigData = new Fl_Check_Button(X + 248, Y + 190, 20, 20, _("Use xcvr data"));
2152 btnUseRigData->tooltip(_("Set flrig to xcvr values at startup"));
2153 btnUseRigData->callback((Fl_Callback*)cb_restore);
2154 btnUseRigData->align(Fl_Align(FL_ALIGN_RIGHT));
2155 btnUseRigData->value(progStatus.use_rig_data == 1);
2156
2157 tabRESTORE->end();
2158 return tabRESTORE;
2159 }
2160
2161 #include "gpio.cxx"
2162
2163 #include <vector>
2164
2165 std::vector< Fl_Group* > config_pages;
2166 static Fl_Group *current = 0;
2167 Fl_Tree *tab_tree;
2168
add_tree_item(Fl_Group * g)2169 void add_tree_item(Fl_Group *g) {
2170 config_pages.push_back(g);
2171 tab_tree->add(g->label());
2172 g->hide();
2173 }
2174
cleartabs()2175 void cleartabs()
2176 {
2177 tabXCVR->hide();
2178 tabTRACE->hide();
2179 tabTCPIP->hide();
2180 tabPTT->hide();
2181 tabAUX->hide();
2182 tabGPIO->hide();
2183 tabPOLLING->hide();
2184 tabSNDCMD->hide();
2185 tabCOMMANDS->hide();
2186 tabRESTORE->hide();
2187 Fl_Tree_Item *item = tab_tree->last_selected_item();
2188 if (item) tab_tree->deselect(item,0);
2189 }
2190
select_tab(const char * label)2191 void select_tab(const char *label)
2192 {
2193 cleartabs();
2194 tab_tree->select(label);
2195 dlgXcvrConfig->show();
2196 }
2197
SelectItem_CB(Fl_Widget * w)2198 void SelectItem_CB(Fl_Widget *w) {
2199 cleartabs();
2200 Fl_Tree *tree = (Fl_Tree*)w;
2201 Fl_Tree_Item *item = tree->callback_item();
2202 tree->select_only(item, 0);
2203
2204 if (tree->callback_reason() == FL_TREE_REASON_SELECTED) {
2205 std::string pname;
2206 char pn[200];
2207 tree->item_pathname(pn, 200, item);
2208 pname = pn;
2209 size_t pos = std::string::npos;
2210 for (size_t i = 0; i < config_pages.size(); i++) {
2211 if ((pos = pname.find(config_pages[i]->label())) != std::string::npos) {
2212 if (pname.substr(pos) == config_pages[i]->label()) {
2213 if (current) current->hide();
2214 current = config_pages[i];//->grp;
2215 current->show();
2216 return;
2217 }
2218 }
2219 }
2220 }
2221 }
2222
2223 extern Fl_Double_Window *dlgXcvrConfig;
2224
XcvrDialog()2225 Fl_Double_Window* XcvrDialog() {
2226
2227 int W = 625, H = 240;
2228
2229 Fl_Double_Window* w = new Fl_Double_Window(W, H, _("Configuration"));
2230 w->size_range(W, H, W, H);
2231
2232 int xtree = 2;
2233 int ytree = 2;
2234 int htree = H - 2*ytree;
2235 int wtree = 130;
2236 int wtabs = W - wtree - 2 * xtree;
2237 int xtabs = xtree + wtree;
2238
2239 tab_tree = new Fl_Tree(xtree, ytree, wtree, htree);
2240 tab_tree->callback((Fl_Callback*)SelectItem_CB);
2241 Fl_Group::current()->resizable(tab_tree);
2242 tab_tree->root_label(_("Configure"));
2243 tab_tree->selectmode(FL_TREE_SELECT_SINGLE);
2244 tab_tree->connectorstyle(FL_TREE_CONNECTOR_DOTTED);
2245 tab_tree->connectorwidth(17); // default is 17
2246
2247 tabXCVR = createXCVR(xtabs, ytree, wtabs, htree, _("Xcvr"));
2248 add_tree_item(tabXCVR);
2249
2250 tabTRACE = createTRACE(xtabs, ytree, wtabs, htree, _("Trace"));
2251 add_tree_item(tabTRACE);
2252
2253 tabTCPIP = createTCPIP(xtabs, ytree, wtabs, htree, _("TCPIP"));
2254 add_tree_item(tabTCPIP);
2255
2256 tabPTT = createPTT(xtabs, ytree, wtabs, htree, _("PTT"));
2257 add_tree_item(tabPTT);
2258
2259 tabGPIO = createGPIO(xtabs, ytree, wtabs, htree, _("GPIO"));
2260 add_tree_item(tabGPIO);
2261
2262 tabAUX = createAUX(xtabs, ytree, wtabs, htree, _("Auxiliary"));
2263 add_tree_item(tabAUX);
2264
2265 tabSERVER = createSERVER(xtabs, ytree, wtabs, htree, _("Server"));
2266 add_tree_item(tabSERVER);
2267
2268 tabPOLLING = createPOLLING(xtabs, ytree, wtabs, htree, _("Poll"));
2269 add_tree_item(tabPOLLING);
2270
2271 tabSNDCMD = createSNDCMD(xtabs, ytree, wtabs, htree, _("Send"));
2272 add_tree_item(tabSNDCMD);
2273
2274 tabCOMMANDS = createCOMMANDS(xtabs, ytree, wtabs, htree, _("Cmds"));
2275 add_tree_item(tabCOMMANDS);
2276
2277 tabRESTORE = createRestore(xtabs, ytree, wtabs, htree, _("Restore"));
2278 add_tree_item(tabRESTORE);
2279
2280 w->end();
2281
2282 return w;
2283
2284 }
2285
2286