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 Fl_Radio_Light_Button *btn_wide_ui=(Fl_Radio_Light_Button *)0;
22 Fl_Radio_Light_Button *btn_narrow_ui=(Fl_Radio_Light_Button *)0;
23 Fl_Radio_Light_Button *btn_touch_ui=(Fl_Radio_Light_Button *)0;
24 
25 Fl_Box *lblTest=(Fl_Box *)0;
26 Fl_Button *prefFont=(Fl_Button *)0;
27 Fl_Button *prefForeground=(Fl_Button *)0;
28 Fl_Button *btnBacklight=(Fl_Button *)0;
29 Fl_Group *grpMeterColor=(Fl_Group *)0;
30 Fl_Box *scaleSmeterColor=(Fl_Box *)0;
31 Fl_SigBar *sldrRcvSignalColor=(Fl_SigBar *)0;
32 Fl_SigBar *sldrSWRcolor=(Fl_SigBar *)0;
33 Fl_Box *scaleSWRcolor=(Fl_Box *)0;
34 Fl_SigBar *sldrPWRcolor=(Fl_SigBar *)0;
35 Fl_Box *scalePWRcolor=(Fl_Box *)0;
36 Fl_Button *btMeterColor=(Fl_Button *)0;
37 Fl_Button *btnSWRColor=(Fl_Button *)0;
38 Fl_Button *btnPwrColor=(Fl_Button *)0;
39 Fl_Button *btnPeakColor=(Fl_Button *)0;
40 Fl_Choice *mnuScheme=(Fl_Choice *)0;
41 Fl_Button *pref_sys_foreground=(Fl_Button *)0;
42 Fl_Button *pref_sys_background=(Fl_Button *)0;
43 Fl_Button *prefsys_background2=(Fl_Button *)0;
44 Fl_Button *prefsys_defaults=(Fl_Button *)0;
45 Fl_Wheel_Value_Slider *sldrColors=(Fl_Wheel_Value_Slider *)0;
46 Fl_Button *pref_slider_background=(Fl_Button *)0;
47 Fl_Button *pref_slider_select=(Fl_Button *)0;
48 Fl_Button *prefslider_defaults=(Fl_Button *)0;
49 Fl_Button *btnReset=(Fl_Button *)0;
50 Fl_Button *btnCancel=(Fl_Button *)0;
51 Fl_Return_Button *btnOkDisplayDialog=(Fl_Return_Button *)0;
52 Fl_Light_Button *btn_lighted=(Fl_Light_Button *)0;
53 Fl_Button *btn_lighted_default=(Fl_Button *)0;
54 Fl_Check_Button *chk_hrd_button = (Fl_Check_Button *)0;
55 Fl_Check_Button *chk_sliders_button = (Fl_Check_Button *)0;
56 
cb_btn_ui(Fl_Radio_Light_Button * o,void *)57 static void cb_btn_ui(Fl_Radio_Light_Button* o, void*) {
58 	if (o == btn_wide_ui) progStatus.UIsize = wide_ui;
59 	else if (o == btn_narrow_ui) progStatus.UIsize = small_ui;
60 	else progStatus.UIsize = touch_ui;
61 	progStatus.UIchanged = true;
62 }
63 
cb_prefFont(Fl_Button *,void *)64 static void cb_prefFont(Fl_Button*, void*) {
65 	cbPrefFont();
66 }
67 
cb_prefForeground(Fl_Button *,void *)68 static void cb_prefForeground(Fl_Button*, void*) {
69 	cbPrefForeground();
70 }
71 
cb_btnBacklight(Fl_Button *,void *)72 static void cb_btnBacklight(Fl_Button*, void*) {
73 	cbBacklightColor();
74 }
75 
cb_btMeterColor(Fl_Button *,void *)76 static void cb_btMeterColor(Fl_Button*, void*) {
77 	cbSMeterColor();
78 }
79 
cb_btnSWRColor(Fl_Button *,void *)80 static void cb_btnSWRColor(Fl_Button*, void*) {
81 	cbSWRMeterColor();
82 }
83 
cb_btnPwrColor(Fl_Button *,void *)84 static void cb_btnPwrColor(Fl_Button*, void*) {
85 	cbPwrMeterColor();
86 }
87 
cb_btnPeakColor(Fl_Button *,void *)88 static void cb_btnPeakColor(Fl_Button*, void*) {
89 	cbPeakMeterColor();
90 }
91 
cb_mnuScheme(Fl_Choice * o,void *)92 static void cb_mnuScheme(Fl_Choice* o, void*) {
93 	progStatus.ui_scheme = o->text();
94 	Fl::scheme(progStatus.ui_scheme.c_str());
95 }
96 
cb_pref_sys_foreground(Fl_Button *,void *)97 static void cb_pref_sys_foreground(Fl_Button*, void*) {
98 	cb_sys_foreground();
99 }
100 
cb_pref_sys_background(Fl_Button *,void *)101 static void cb_pref_sys_background(Fl_Button*, void*) {
102 	cb_sys_background();
103 }
104 
cb_prefsys_background2(Fl_Button *,void *)105 static void cb_prefsys_background2(Fl_Button*, void*) {
106 	cb_sys_background2();
107 }
108 
cb_prefsys_defaults(Fl_Button *,void *)109 static void cb_prefsys_defaults(Fl_Button*, void*) {
110 	cb_sys_defaults();
111 }
112 
cb_pref_slider_background(Fl_Button *,void *)113 static void cb_pref_slider_background(Fl_Button*, void*) {
114 	cb_slider_background();
115 }
116 
cb_pref_slider_select(Fl_Button *,void *)117 static void cb_pref_slider_select(Fl_Button*, void*) {
118 	cb_slider_select();
119 }
120 
cb_prefslider_defaults(Fl_Button *,void *)121 static void cb_prefslider_defaults(Fl_Button*, void*) {
122 	cb_slider_defaults();
123 }
124 
cb_btnReset(Fl_Button *,void *)125 static void cb_btnReset(Fl_Button*, void*) {
126 	cb_reset_display_dialog();
127 }
128 
cb_btnCancel(Fl_Button *,void *)129 static void cb_btnCancel(Fl_Button*, void*) {
130 	cbCancelDisplayDialog();
131 }
132 
cb_btnOkDisplayDialog(Fl_Return_Button *,void *)133 static void cb_btnOkDisplayDialog(Fl_Return_Button*, void*) {
134 	cbOkDisplayDialog();
135 }
136 
cb_btn_lighted(Fl_Light_Button *,void *)137 static void cb_btn_lighted(Fl_Light_Button*, void*) {
138 	cb_lighted_button();
139 }
140 
cb_btn_lighted_default(Fl_Button *,void *)141 static void cb_btn_lighted_default(Fl_Button*, void*) {
142 	cb_lighted_default();
143 }
144 
cb_hrd_button(Fl_Check_Button *,void *)145 static void cb_hrd_button(Fl_Check_Button*, void*) {
146 	cb_change_hrd_button();
147 }
148 
cb_sliders_button(Fl_Check_Button *,void *)149 static void cb_sliders_button(Fl_Check_Button*, void*) {
150 	cb_change_sliders_button();
151 }
152 
DisplayDialog()153 Fl_Double_Window* DisplayDialog() {
154 	Fl_Double_Window* w = new Fl_Double_Window(424, 280, _("Flrig User Interface"));
155 
156 	Fl_Group* su_grp1 = new Fl_Group(2, 2, 420, 40, _("Main Dialog Aspect Ratio (change requires restart)"));
157 		su_grp1->box(FL_ENGRAVED_FRAME);
158 		su_grp1->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
159 
160 		btn_narrow_ui = new Fl_Radio_Light_Button(
161 			su_grp1->w()/2 - 160, 20, 100, 18, _("Narrow UI"));
162 		btn_narrow_ui->down_box(FL_DOWN_BOX);
163 		btn_narrow_ui->callback((Fl_Callback*)cb_btn_ui);
164 		btn_narrow_ui->value(progStatus.UIsize == small_ui);
165 
166 		btn_wide_ui = new Fl_Radio_Light_Button(
167 			btn_narrow_ui->x() + 110, 20, 100, 18, _("Wide UI"));
168 		btn_wide_ui->down_box(FL_DOWN_BOX);
169 		btn_wide_ui->callback((Fl_Callback*)cb_btn_ui);
170 		btn_wide_ui->value(progStatus.UIsize == wide_ui);
171 
172 		btn_touch_ui = new Fl_Radio_Light_Button(
173 			btn_wide_ui->x() + 110, 20, 100, 18, _("Touch UI"));
174 		btn_touch_ui->down_box(FL_DOWN_BOX);
175 		btn_touch_ui->callback((Fl_Callback*)cb_btn_ui);
176 		btn_touch_ui->value(progStatus.UIsize == touch_ui);
177 
178 	su_grp1->end();
179 
180 	Fl_Group* su_grp_hrd = new Fl_Group(
181 		su_grp1->x(), su_grp1->y() + su_grp1->h(),
182 		su_grp1->w(), 30);
183 		su_grp_hrd->box(FL_ENGRAVED_FRAME);
184 		chk_hrd_button = new Fl_Check_Button(
185 			10, su_grp_hrd->y() + su_grp_hrd->h()/2 - 10,
186 			50, 20, _("Freq top/bottom left click"));
187 		chk_hrd_button->value(progStatus.hrd_buttons);
188 		chk_hrd_button->callback((Fl_Callback*)cb_hrd_button);
189 		chk_hrd_button->tooltip(_("Off - left/right click paradigm"));
190 
191 		chk_sliders_button = new Fl_Check_Button(
192 			su_grp_hrd->w() / 2, su_grp_hrd->y() + su_grp_hrd->h()/2 - 10,
193 			50, 20, _("Xcvr follows slider drag"));
194 		chk_sliders_button->value(progStatus.hrd_buttons);
195 		chk_sliders_button->callback((Fl_Callback*)cb_sliders_button);
196 		chk_sliders_button->value(progStatus.sliders_button == FL_WHEN_CHANGED);
197 		chk_sliders_button->tooltip(_("ON  send all slider changes to xcvr\nOFF wait for slider control release"));
198 
199 	su_grp_hrd->end();
200 
201 	Fl_Group* su_grp2 = new Fl_Group(
202 		2, su_grp_hrd->y() + su_grp_hrd->h(),
203 		218, 70);
204 		su_grp2->box(FL_ENGRAVED_FRAME);
205 
206 		Fl_Group* su_grp2a = new Fl_Group(
207 			5, su_grp2->y() + 2,
208 			210, 35);
209 			su_grp2a->box(FL_DOWN_BOX);
210 
211 			lblTest = new Fl_Box(
212 				su_grp2a->x() + 2, su_grp2a->y() + 2, 206, 31, _("14070.000"));
213 			lblTest->box(FL_FLAT_BOX);
214 			lblTest->labelfont(progStatus.fontnbr);
215 			lblTest->labelsize(32);
216 		su_grp2a->end();
217 
218 		prefFont = new Fl_Button(
219 			10, lblTest->y() + lblTest->h() + 4, 60, 22, _("Font"));
220 		prefFont->callback((Fl_Callback*)cb_prefFont);
221 
222 		prefForeground = new Fl_Button(
223 			78, prefFont->y(), 60, 22, _("Color"));
224 		prefForeground->callback((Fl_Callback*)cb_prefForeground);
225 
226 		btnBacklight = new Fl_Button(
227 			146, prefFont->y(), 60, 22, _("Back"));
228 		btnBacklight->callback((Fl_Callback*)cb_btnBacklight);
229 
230 	su_grp2->end();
231 
232 	Fl_Group* su_grp3 = new Fl_Group(
233 		2, su_grp2->y() + su_grp2->h(), 284, 107);
234 
235 		Fl_Group* su_grp3a = new Fl_Group(
236 			5, su_grp3->y() + 5, 210, 100);
237 			su_grp3a->box(FL_DOWN_BOX);
238 
239 			grpMeterColor = new Fl_Group(
240 				7, su_grp3a->y() + 2, 206, 96);
241 				grpMeterColor->box(FL_FLAT_BOX);
242 
243 				scaleSmeterColor = new Fl_Box(
244 					8, grpMeterColor->y(), 205, 20);
245 				scaleSmeterColor->box(FL_FLAT_BOX);
246 				scaleSmeterColor->image(image_S60);
247 				scaleSmeterColor->color(scaleSmeter->color());
248 
249 				sldrRcvSignalColor = new Fl_SigBar(
250 					10, grpMeterColor->y() + 20, 200, 6);
251 				sldrRcvSignalColor->box(FL_FLAT_BOX);
252 				sldrRcvSignalColor->color(FL_BACKGROUND_COLOR);
253 				sldrRcvSignalColor->selection_color(FL_BACKGROUND_COLOR);
254 				sldrRcvSignalColor->labeltype(FL_NORMAL_LABEL);
255 				sldrRcvSignalColor->labelfont(0);
256 				sldrRcvSignalColor->labelsize(14);
257 				sldrRcvSignalColor->labelcolor(FL_FOREGROUND_COLOR);
258 				sldrRcvSignalColor->align(Fl_Align(FL_ALIGN_CENTER));
259 				sldrRcvSignalColor->when(FL_WHEN_RELEASE);
260 
261 				sldrSWRcolor = new Fl_SigBar(
262 					10, grpMeterColor->y() + 51, 200, 6);
263 				sldrSWRcolor->box(FL_FLAT_BOX);
264 				sldrSWRcolor->color(FL_BACKGROUND_COLOR);
265 				sldrSWRcolor->selection_color(FL_BACKGROUND_COLOR);
266 				sldrSWRcolor->labeltype(FL_NORMAL_LABEL);
267 				sldrSWRcolor->labelfont(0);
268 				sldrSWRcolor->labelsize(14);
269 				sldrSWRcolor->labelcolor(FL_FOREGROUND_COLOR);
270 				sldrSWRcolor->align(Fl_Align(FL_ALIGN_CENTER));
271 				sldrSWRcolor->when(FL_WHEN_RELEASE);
272 				sldrSWRcolor->minimum(0);
273 				sldrSWRcolor->maximum(100);
274 
275 				scaleSWRcolor = new Fl_Box(
276 					8, grpMeterColor->y() + 31, 205, 20);
277 				scaleSWRcolor->box(FL_FLAT_BOX);
278 				scaleSWRcolor->image(image_SWR);
279 
280 				sldrPWRcolor = new Fl_SigBar(
281 					8, grpMeterColor->y() + 68, 200, 6);
282 				sldrPWRcolor->box(FL_FLAT_BOX);
283 				sldrPWRcolor->color(FL_BACKGROUND_COLOR);
284 				sldrPWRcolor->selection_color(FL_BACKGROUND_COLOR);
285 				sldrPWRcolor->labeltype(FL_NORMAL_LABEL);
286 				sldrPWRcolor->labelfont(0);
287 				sldrPWRcolor->labelsize(14);
288 				sldrPWRcolor->labelcolor(FL_FOREGROUND_COLOR);
289 				sldrPWRcolor->align(Fl_Align(FL_ALIGN_CENTER));
290 				sldrPWRcolor->when(FL_WHEN_RELEASE);
291 				sldrPWRcolor->minimum(0);
292 				sldrPWRcolor->maximum(100);
293 
294 				scalePWRcolor = new Fl_Box(
295 					8, grpMeterColor->y() + 74, 205, 20);
296 				scalePWRcolor->box(FL_FLAT_BOX);
297 				scalePWRcolor->image(image_P100);
298 
299 			grpMeterColor->end();
300 
301 		su_grp3a->end();
302 
303 		btMeterColor = new Fl_Button(
304 			grpMeterColor->x() + grpMeterColor->w() + 5, grpMeterColor->y(),
305 			60, 22, _("Smeter"));
306 		btMeterColor->callback((Fl_Callback*)cb_btMeterColor);
307 
308 		btnSWRColor = new Fl_Button(
309 			btMeterColor->x(), btMeterColor->y() + btMeterColor->h() + 4,
310 			60, 22, _("SWR"));
311 		btnSWRColor->callback((Fl_Callback*)cb_btnSWRColor);
312 
313 		btnPwrColor = new Fl_Button(
314 			btnSWRColor->x(), btnSWRColor->y() + btnSWRColor->h() + 4,
315 			60, 22, _("Pwr"));
316 		btnPwrColor->callback((Fl_Callback*)cb_btnPwrColor);
317 
318 		btnPeakColor = new Fl_Button(
319 			btnPwrColor->x(), btnPwrColor->y() + btnPwrColor->h() + 4,
320 			60, 22, _("Peak"));
321 		btnPeakColor->callback((Fl_Callback*)cb_btnPeakColor);
322 
323 	su_grp3->end();
324 
325 	Fl_Group* su_grp4 = new Fl_Group(
326 		su_grp2->x() + su_grp2->w() + 2, su_grp2->y(),
327 		202, 70, _("System"));
328 		su_grp4->box(FL_ENGRAVED_FRAME);
329 		su_grp4->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
330 
331 		mnuScheme = new Fl_Choice(
332 			su_grp4->x() + 8, su_grp4->y() + 20,
333 			80, 22, _("UI"));
334 		mnuScheme->tooltip(_("Change application look and feel"));
335 		mnuScheme->down_box(FL_BORDER_BOX);
336 		mnuScheme->callback((Fl_Callback*)cb_mnuScheme);
337 		mnuScheme->align(Fl_Align(FL_ALIGN_RIGHT));
338 		mnuScheme->add("base");
339 		mnuScheme->add("gtk+");
340 		mnuScheme->add("plastic");
341 		mnuScheme->value(mnuScheme->find_item(progStatus.ui_scheme.c_str()));
342 
343 		pref_sys_foreground = new Fl_Button(
344 			mnuScheme->x(), mnuScheme->y() + mnuScheme->h() + 2,
345 			60, 22, _("Fgnd"));
346 		pref_sys_foreground->tooltip(_("Label color"));
347 		pref_sys_foreground->callback((Fl_Callback*)cb_pref_sys_foreground);
348 
349 		pref_sys_background = new Fl_Button(
350 			pref_sys_foreground->x() + pref_sys_foreground->w() + 2,
351 			pref_sys_foreground->y(),
352 			60, 22, _("Bngd"));
353 		pref_sys_background->tooltip(_("Background - normal"));
354 		pref_sys_background->callback((Fl_Callback*)cb_pref_sys_background);
355 
356 		prefsys_background2 = new Fl_Button(
357 			pref_sys_background->x() + pref_sys_background->w() + 2,
358 			pref_sys_background->y(),
359 			60, 22, _("Bgnd2"));
360 		prefsys_background2->tooltip(_("Background - selected"));
361 		prefsys_background2->callback((Fl_Callback*)cb_prefsys_background2);
362 
363 		prefsys_defaults = new Fl_Button(
364 			prefsys_background2->x(), mnuScheme->y(),
365 			60, 22, _("Default"));
366 		prefsys_defaults->tooltip(_("Background - selected"));
367 		prefsys_defaults->callback((Fl_Callback*)cb_prefsys_defaults);
368 
369 	su_grp4->end();
370 
371 	Fl_Group* su_grp5 = new Fl_Group(
372 		su_grp3->x() + su_grp3->w() + 2, su_grp3->y(),
373 		134, 88);
374 		su_grp5->box(FL_ENGRAVED_FRAME);
375 
376 		sldrColors = new Fl_Wheel_Value_Slider(
377 			su_grp5->x() + 4, su_grp5->y() + 4,
378 			125, 20);
379 		sldrColors->tooltip(_("Adjust power level"));
380 		sldrColors->type(5);
381 		sldrColors->box(FL_THIN_DOWN_BOX);
382 		sldrColors->color(FL_BACKGROUND_COLOR);
383 		sldrColors->selection_color(FL_BACKGROUND_COLOR);
384 		sldrColors->labeltype(FL_NORMAL_LABEL);
385 		sldrColors->labelfont(0);
386 		sldrColors->labelsize(14);
387 		sldrColors->labelcolor(FL_FOREGROUND_COLOR);
388 		sldrColors->maximum(100);
389 		sldrColors->step(1);
390 		sldrColors->value(15);
391 		sldrColors->textsize(12);
392 		sldrColors->align(Fl_Align(FL_ALIGN_CENTER));
393 		sldrColors->when(FL_WHEN_CHANGED);
394         sldrColors->reverse(true);
395 
396 		pref_slider_background = new Fl_Button(
397 			sldrColors->x(), sldrColors->y() + sldrColors->h() + 5,
398 			60, 22, _("Bngd"));
399 		pref_slider_background->tooltip(_("Background - normal"));
400 		pref_slider_background->callback((Fl_Callback*)cb_pref_slider_background);
401 
402 		pref_slider_select = new Fl_Button(
403 			pref_slider_background->x() + pref_slider_background->w() + 3,
404 			pref_slider_background->y(),
405 			60, 22, _("Button"));
406 		pref_slider_select->tooltip(_("Background - normal"));
407 		pref_slider_select->callback((Fl_Callback*)cb_pref_slider_select);
408 
409 		prefslider_defaults = new Fl_Button(
410 			pref_slider_background->x() + pref_slider_background->w()/2,
411 			pref_slider_select->y() + pref_slider_select->h() + 4,
412 			60, 22, _("Default"));
413 		prefslider_defaults->tooltip(_("Background - selected"));
414 		prefslider_defaults->callback((Fl_Callback*)cb_prefslider_defaults);
415 
416 	su_grp5->end();
417 
418 	btnReset = new Fl_Button(
419 		25, su_grp3a->y() + su_grp3a->h() + 5,
420 		60, 22, _("Reset"));
421 	btnReset->tooltip(_("Restore all flrig defaults"));
422 	btnReset->callback((Fl_Callback*)cb_btnReset);
423 
424 	btnCancel = new Fl_Button(
425 		113, btnReset->y(),
426 		60, 22, _("Cancel"));
427 	btnCancel->tooltip(_("Discard current changes"));
428 	btnCancel->callback((Fl_Callback*)cb_btnCancel);
429 
430 	btnOkDisplayDialog = new Fl_Return_Button(
431 		201, btnReset->y(),
432 		60, 22, _("OK"));
433 	btnOkDisplayDialog->tooltip(_("Save Current Changes"));
434 	btnOkDisplayDialog->callback((Fl_Callback*)cb_btnOkDisplayDialog);
435 
436 	Fl_Group* su_grp6 = new Fl_Group(
437 		su_grp5->x(), su_grp5->y() + su_grp5->h(), 134, 45);
438 		su_grp6->box(FL_ENGRAVED_FRAME);
439 
440 		btn_lighted = new Fl_Light_Button(
441 			su_grp6->x() + 5, su_grp6->y() + 10,
442 			60, 22, _("Lt Btn"));
443 		btn_lighted->callback((Fl_Callback*)cb_btn_lighted);
444 
445 		btn_lighted_default = new Fl_Button(
446 			btn_lighted->x() + btn_lighted->w() + 2, btn_lighted->y(),
447 			60, 22, _("Default"));
448 		btn_lighted_default->tooltip(_("Background - selected"));
449 		btn_lighted_default->callback((Fl_Callback*)cb_btn_lighted_default);
450 
451 	su_grp6->end();
452 
453 	w->end();
454 
455 	w->position( progStatus.ddX, progStatus.ddY );
456 
457 	return w;
458 }
459 
460