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 "font_browser.h"
22 
23 Fl_Button *btnAddFreq=(Fl_Button *)0;
24 Fl_Button *btnPickFreq=(Fl_Button *)0;
25 Fl_Button *btnDelFreq=(Fl_Button *)0;
26 Fl_Button *btnClearList=(Fl_Button *)0;
27 Fl_Browser2 *FreqSelect=(Fl_Browser2 *)0;
28 Fl_Input *inAlphaTag=(Fl_Input *)0;
29 
cb_btnAddFreq(Fl_Button *,void *)30 static void cb_btnAddFreq(Fl_Button*, void*) {
31 	addFreq();
32 }
33 
cb_btnPickFreq(Fl_Button *,void *)34 static void cb_btnPickFreq(Fl_Button*, void*) {
35 	if (FreqSelect->value())
36 		selectFreq();
37 }
38 
cb_btnDelFreq(Fl_Button *,void *)39 static void cb_btnDelFreq(Fl_Button*, void*) {
40 	delFreq();
41 }
42 
cb_btnClearList(Fl_Button *,void *)43 static void cb_btnClearList(Fl_Button*, void*) {
44 	clearList();
45 }
46 
cb_Close(Fl_Button *,void *)47 static void cb_Close(Fl_Button*, void*) {
48 	cbCloseMemory();
49 }
50 
cb_FreqSelect(Fl_Browser * o,void *)51 static void cb_FreqSelect(Fl_Browser* o, void*) {
52 	select_and_close();
53 }
54 
cb_inAlphaTag(Fl_Input *,void *)55 static void cb_inAlphaTag(Fl_Input*, void*) {
56 	editAlphaTag();
57 }
58 
59 static Font_Browser  *fntSelectbrowser = 0;
60 static Fl_Browser *header = 0;
61 static int freq_sel_widths[] = {140, 15, 70, 15, 80, 15, 0};
62 
63 extern void updateSelect();
64 
cbFreqSelectFontBrowser(Fl_Widget *,void *)65 void cbFreqSelectFontBrowser(Fl_Widget*, void*) {
66 	progStatus.memfontnbr = fntSelectbrowser->fontNumber();
67 	progStatus.memfontsize = fntSelectbrowser->fontSize();
68 	if (progStatus.memfontsize > 18) progStatus.memfontsize = 18;
69 	if (progStatus.memfontsize < 10) progStatus.memfontsize = 10;
70 	fntSelectbrowser->hide();
71 
72 	char hdrline[256];
73 	header->clear();
74 	snprintf(hdrline, sizeof(hdrline),
75 			"\
76 @F%d@S%d@B%d@cFrequency\t\
77 @F%d@S%d@B%d|\t\
78 @F%d@S%d@B%d@cBW\t\
79 @F%d@S%d@B%d|\t\
80 @F%d@S%d@B%d@cMode\t\
81 @F%d@S%d@B%d|\t\
82 @F%d@S%d@B%d@cComments",
83 		progStatus.memfontnbr, progStatus.memfontsize, 247,
84 		progStatus.memfontnbr, progStatus.memfontsize, 247,
85 		progStatus.memfontnbr, progStatus.memfontsize, 247,
86 		progStatus.memfontnbr, progStatus.memfontsize, 247,
87 		progStatus.memfontnbr, progStatus.memfontsize, 247,
88 		progStatus.memfontnbr, progStatus.memfontsize, 247,
89 		progStatus.memfontnbr, progStatus.memfontsize, 247 );
90 	header->add(hdrline);
91 	header->redraw();
92 
93 	updateSelect();
94 
95 }
96 
cbFreqFontBrowser()97 void cbFreqFontBrowser()
98 {
99 	fntSelectbrowser = new Font_Browser;
100 	fntSelectbrowser->fontNumber(progStatus.memfontnbr);
101 	fntSelectbrowser->fontSize(progStatus.memfontsize);
102 	fntSelectbrowser->callback(cbFreqSelectFontBrowser);
103 	fntSelectbrowser->show();
104 }
105 
Memory_Dialog()106 Fl_Double_Window* Memory_Dialog() {
107 	Fl_Double_Window* w = new Fl_Double_Window(600, 182, _("Flrig Memory"));
108 
109 	Fl_Group* mm_grp1 = new Fl_Group(0, 0, 600, 155);
110 		mm_grp1->box(FL_FLAT_BOX);
111 
112 		Fl_Group* mm_grp1a = new Fl_Group(0, 0, 64, 156);
113 			mm_grp1a->box(FL_FLAT_BOX);
114 
115 			btnAddFreq = new Fl_Button(2, 1, 60, 22, _("Add @-1>"));
116 			btnAddFreq->tooltip(_("Add to list"));
117 			btnAddFreq->down_box(FL_DOWN_BOX);
118 			btnAddFreq->labelsize(14);
119 			btnAddFreq->callback((Fl_Callback*)cb_btnAddFreq);
120 			btnAddFreq->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
121 
122 			btnPickFreq = new Fl_Button(2, 25, 60, 22, _("Pick @-1<"));
123 			btnPickFreq->tooltip(_("Use selected data"));
124 			btnPickFreq->down_box(FL_DOWN_BOX);
125 			btnPickFreq->labelsize(14);
126 			btnPickFreq->callback((Fl_Callback*)cb_btnPickFreq);
127 			btnPickFreq->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
128 
129 			btnDelFreq = new Fl_Button(2, 49, 60, 22, _("Del @-11+"));
130 			btnDelFreq->tooltip(_("Delete from list"));
131 			btnDelFreq->down_box(FL_DOWN_BOX);
132 			btnDelFreq->labelsize(14);
133 			btnDelFreq->callback((Fl_Callback*)cb_btnDelFreq);
134 			btnDelFreq->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
135 
136 			btnClearList = new Fl_Button(2, 73, 60, 22, _("Clr @-2square"));
137 			btnClearList->tooltip(_("Clear list"));
138 			btnClearList->down_box(FL_DOWN_BOX);
139 			btnClearList->labelsize(14);
140 			btnClearList->callback((Fl_Callback*)cb_btnClearList);
141 			btnClearList->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
142 
143 			Fl_Button * btnFontSel = new Fl_Button(2, 97, 60, 22, _("Font"));
144 			btnFontSel->tooltip(_("Select Font/Size"));
145 			btnFontSel->down_box(FL_DOWN_BOX);
146 			btnFontSel->labelsize(14);
147 			btnFontSel->callback((Fl_Callback*)cbFreqFontBrowser);
148 			btnFontSel->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
149 
150 			Fl_Button* close = new Fl_Button(2, 121, 60, 22, _("Close"));
151 			close->tooltip(_("Close Memory dialog"));
152 			close->labelsize(14);
153 			close->callback((Fl_Callback*)cb_Close);
154 			close->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
155 
156 			Fl_Box *bx1a = new Fl_Box(0, 143, 66, 2, "");
157 			bx1a->box(FL_NO_BOX);
158 
159 		mm_grp1a->end();
160 		mm_grp1a->resizable(bx1a);
161 
162 		Fl_Group *mm_grp1b = new Fl_Group(66, 0, 534, 155);
163 		mm_grp1b->box(FL_FLAT_BOX);
164 
165 		header = new Fl_Browser(66, 0, 532, 24, "");
166 		header->column_widths(freq_sel_widths);
167 		header->color(247);
168 		char hdrline[256];
169 		snprintf(hdrline, sizeof(hdrline),
170 			"\
171 @F%d@S%d@B%d@cFrequency\t\
172 @F%d@S%d@B%d|\t\
173 @F%d@S%d@B%d@cBW\t\
174 @F%d@S%d@B%d|\t\
175 @F%d@S%d@B%d@cMode\t\
176 @F%d@S%d@B%d|\t\
177 @F%d@S%d@B%d@cComments",
178 			progStatus.memfontnbr, progStatus.memfontsize, 247,
179 			progStatus.memfontnbr, progStatus.memfontsize, 247,
180 			progStatus.memfontnbr, progStatus.memfontsize, 247,
181 			progStatus.memfontnbr, progStatus.memfontsize, 247,
182 			progStatus.memfontnbr, progStatus.memfontsize, 247,
183 			progStatus.memfontnbr, progStatus.memfontsize, 247,
184 			progStatus.memfontnbr, progStatus.memfontsize, 247 );
185 		header->add(hdrline);
186 
187 		FreqSelect = new Fl_Browser2(66, 24, 532, 131);
188 		FreqSelect->tooltip(
189 		_("\
190 Left Click:     high light\n\
191 Dbl Left Click: select\n\
192 Right click:    select"));
193 		FreqSelect->type(2);
194 		FreqSelect->labelfont(4);
195 		FreqSelect->labelsize(14);
196 		FreqSelect->textfont(4);
197 		FreqSelect->textsize(14);
198 		FreqSelect->column_widths(freq_sel_widths);
199 		FreqSelect->callback((Fl_Callback*)cb_FreqSelect);
200 //		FreqSelect->has_scrollbar(Fl_Browser_::BOTH_ALWAYS);
201 
202 		mm_grp1b->end();
203 		mm_grp1b->resizable(FreqSelect);
204 
205 	mm_grp1->end();
206 	mm_grp1->resizable(mm_grp1b);
207 
208 	Fl_Group* mm_grp2 = new Fl_Group(0, 155, 600, 26);
209 
210 		inAlphaTag = new Fl_Input(66, 156, 532, 24, _("Tag:"));
211 		inAlphaTag->tooltip(
212 _("Left click => in Tag field to edit\n[Enter] => when done to update"));
213 		inAlphaTag->callback((Fl_Callback*)cb_inAlphaTag);
214 		inAlphaTag->when(FL_WHEN_ENTER_KEY_ALWAYS);
215 		inAlphaTag->textfont(4);
216 		inAlphaTag->textsize(14);
217 
218 	mm_grp2->end();
219 	mm_grp2->resizable(inAlphaTag);
220 
221 	w->end();
222 	w->resizable(mm_grp1);
223 
224 	w->size_range(w->w(), w->h(), 0, 0);
225 	w->resize(
226 		progStatus.memX, progStatus.memY,
227 		progStatus.memW, progStatus.memH);
228 	w->init_sizes();
229 
230 	return w;
231 }
232 
233