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