kopia lustrzana https://github.com/jamescoxon/dl-fldigi
Add font browser filter
* Add font browser filter method to show only variable or fixed width fonts * Display simple progress dialog when caching font types * Create a global font browser and remove static variables from various callbackspull/2/head
rodzic
bdcca8c39f
commit
5a1cf7dd84
|
@ -25,11 +25,10 @@ static void adjust_label(Fl_Widget* w) {
|
|||
w->labelcolor(fl_contrast(w->labelcolor(), w->color()));
|
||||
}
|
||||
|
||||
static void cbRxFontBrowser(Fl_Widget* w, void* arg) {
|
||||
Font_Browser *fb= (Font_Browser*)w;
|
||||
Fl_Font font = fb->fontNumber();
|
||||
int size = fb->fontSize();
|
||||
Fl_Color color = fb->fontColor();
|
||||
static void cbRxFontBrowser(Fl_Widget*, void*) {
|
||||
Fl_Font font = font_browser->fontNumber();
|
||||
int size = font_browser->fontSize();
|
||||
Fl_Color color = font_browser->fontColor();
|
||||
|
||||
RxText->textfont(font);
|
||||
RxText->textsize(size);
|
||||
|
@ -44,16 +43,15 @@ static void cbRxFontBrowser(Fl_Widget* w, void* arg) {
|
|||
ReceiveText->setFontSize(size);
|
||||
ReceiveText->setFontColor(progdefaults.RxFontcolor, FTextBase::RECV);
|
||||
|
||||
fb->hide();
|
||||
font_browser->hide();
|
||||
|
||||
progdefaults.changed = true;
|
||||
}
|
||||
|
||||
static void cbTxFontBrowser(Fl_Widget* w, void* arg) {
|
||||
Font_Browser *fb= (Font_Browser*)w;
|
||||
Fl_Font font = fb->fontNumber();
|
||||
int size = fb->fontSize();
|
||||
Fl_Color color = fb->fontColor();
|
||||
static void cbTxFontBrowser(Fl_Widget*, void*) {
|
||||
Fl_Font font = font_browser->fontNumber();
|
||||
int size = font_browser->fontSize();
|
||||
Fl_Color color = font_browser->fontColor();
|
||||
|
||||
TxText->textfont(font);
|
||||
TxText->textsize(size);
|
||||
|
@ -68,21 +66,20 @@ static void cbTxFontBrowser(Fl_Widget* w, void* arg) {
|
|||
TransmitText->setFontSize(size);
|
||||
TransmitText->setFontColor(progdefaults.TxFontcolor, FTextBase::RECV);
|
||||
|
||||
fb->hide();
|
||||
font_browser->hide();
|
||||
|
||||
progdefaults.changed = true;
|
||||
}
|
||||
|
||||
void cbWaterfallFontBrowser(Font_Browser*, void* v) {
|
||||
Font_Browser *ft= (Font_Browser*)v;
|
||||
Fl_Font fnt = ft->fontNumber();
|
||||
int size = ft->fontSize();
|
||||
void cbWaterfallFontBrowser(Fl_Widget*, void*) {
|
||||
Fl_Font fnt = font_browser->fontNumber();
|
||||
int size = font_browser->fontSize();
|
||||
|
||||
progdefaults.WaterfallFontnbr = fnt;
|
||||
progdefaults.WaterfallFontsize = size;
|
||||
progdefaults.changed = true;
|
||||
|
||||
ft->hide();
|
||||
font_browser->hide();
|
||||
}
|
||||
|
||||
Fl_Double_Window *dlgColorFont=(Fl_Double_Window *)0;
|
||||
|
@ -390,29 +387,23 @@ Fl_Input *TxText=(Fl_Input *)0;
|
|||
Fl_Button *btnRxFont=(Fl_Button *)0;
|
||||
|
||||
static void cb_btnRxFont(Fl_Button*, void*) {
|
||||
static Font_Browser* b = 0;
|
||||
if (!b) {
|
||||
b = new Font_Browser;
|
||||
b->fontNumber(progdefaults.RxFontnbr);
|
||||
b->fontSize(progdefaults.RxFontsize);
|
||||
b->fontColor(progdefaults.RxFontcolor);
|
||||
b->callback(cbRxFontBrowser);
|
||||
}
|
||||
b->show();
|
||||
font_browser->fontNumber(progdefaults.RxFontnbr);
|
||||
font_browser->fontSize(progdefaults.RxFontsize);
|
||||
font_browser->fontColor(progdefaults.RxFontcolor);
|
||||
font_browser->fontFilter(Font_Browser::ALL_TYPES);
|
||||
font_browser->callback(cbRxFontBrowser);
|
||||
font_browser->show();
|
||||
}
|
||||
|
||||
Fl_Button *btnTxFont=(Fl_Button *)0;
|
||||
|
||||
static void cb_btnTxFont(Fl_Button*, void*) {
|
||||
static Font_Browser* b = 0;
|
||||
if (!b) {
|
||||
b = new Font_Browser;
|
||||
b->fontNumber(progdefaults.TxFontnbr);
|
||||
b->fontSize(progdefaults.TxFontsize);
|
||||
b->fontColor(progdefaults.TxFontcolor);
|
||||
b->callback(cbTxFontBrowser);
|
||||
}
|
||||
b->show();
|
||||
font_browser->fontNumber(progdefaults.TxFontnbr);
|
||||
font_browser->fontSize(progdefaults.TxFontsize);
|
||||
font_browser->fontColor(progdefaults.TxFontcolor);
|
||||
font_browser->fontFilter(Font_Browser::ALL_TYPES);
|
||||
font_browser->callback(cbTxFontBrowser);
|
||||
font_browser->show();
|
||||
}
|
||||
|
||||
Fl_Button *btnXMIT=(Fl_Button *)0;
|
||||
|
@ -715,6 +706,7 @@ Fl_Box *sql1color=(Fl_Box *)0;
|
|||
Fl_Box *sql2color=(Fl_Box *)0;
|
||||
|
||||
Fl_Double_Window* make_colorsfonts() {
|
||||
font_browser = new Font_Browser;
|
||||
{ dlgColorFont = new Fl_Double_Window(375, 220, _("Colors and Fonts"));
|
||||
{ btnClrFntClose = new Fl_Button(296, 190, 75, 25, _("Close"));
|
||||
btnClrFntClose->callback((Fl_Callback*)cb_btnClrFntClose);
|
||||
|
|
|
@ -41,12 +41,11 @@ Function {adjust_label(Fl_Widget* w)} {open private return_type void
|
|||
code {w->labelcolor(fl_contrast(w->labelcolor(), w->color()));} {}
|
||||
}
|
||||
|
||||
Function {cbRxFontBrowser(Fl_Widget* w, void* arg)} {open private return_type void
|
||||
Function {cbRxFontBrowser(Fl_Widget*, void*)} {open private return_type void
|
||||
} {
|
||||
code {Font_Browser *fb= (Font_Browser*)w;
|
||||
Fl_Font font = fb->fontNumber();
|
||||
int size = fb->fontSize();
|
||||
Fl_Color color = fb->fontColor();
|
||||
code {Fl_Font font = font_browser->fontNumber();
|
||||
int size = font_browser->fontSize();
|
||||
Fl_Color color = font_browser->fontColor();
|
||||
|
||||
RxText->textfont(font);
|
||||
RxText->textsize(size);
|
||||
|
@ -61,17 +60,16 @@ Function {cbRxFontBrowser(Fl_Widget* w, void* arg)} {open private return_type vo
|
|||
ReceiveText->setFontSize(size);
|
||||
ReceiveText->setFontColor(progdefaults.RxFontcolor, FTextBase::RECV);
|
||||
|
||||
fb->hide();
|
||||
font_browser->hide();
|
||||
|
||||
progdefaults.changed = true;} {}
|
||||
}
|
||||
|
||||
Function {cbTxFontBrowser(Fl_Widget* w, void* arg)} {open private return_type void
|
||||
Function {cbTxFontBrowser(Fl_Widget*, void*)} {open private return_type void
|
||||
} {
|
||||
code {Font_Browser *fb= (Font_Browser*)w;
|
||||
Fl_Font font = fb->fontNumber();
|
||||
int size = fb->fontSize();
|
||||
Fl_Color color = fb->fontColor();
|
||||
code {Fl_Font font = font_browser->fontNumber();
|
||||
int size = font_browser->fontSize();
|
||||
Fl_Color color = font_browser->fontColor();
|
||||
|
||||
TxText->textfont(font);
|
||||
TxText->textsize(size);
|
||||
|
@ -86,29 +84,29 @@ Function {cbTxFontBrowser(Fl_Widget* w, void* arg)} {open private return_type vo
|
|||
TransmitText->setFontSize(size);
|
||||
TransmitText->setFontColor(progdefaults.TxFontcolor, FTextBase::RECV);
|
||||
|
||||
fb->hide();
|
||||
font_browser->hide();
|
||||
|
||||
progdefaults.changed = true;} {}
|
||||
}
|
||||
|
||||
Function {cbWaterfallFontBrowser(Font_Browser*, void* v)} {open return_type void
|
||||
Function {cbWaterfallFontBrowser(Fl_Widget*, void*)} {open return_type void
|
||||
} {
|
||||
code {Font_Browser *ft= (Font_Browser*)v;
|
||||
Fl_Font fnt = ft->fontNumber();
|
||||
int size = ft->fontSize();
|
||||
code {Fl_Font fnt = font_browser->fontNumber();
|
||||
int size = font_browser->fontSize();
|
||||
|
||||
progdefaults.WaterfallFontnbr = fnt;
|
||||
progdefaults.WaterfallFontsize = size;
|
||||
progdefaults.changed = true;
|
||||
|
||||
ft->hide();} {}
|
||||
font_browser->hide();} {}
|
||||
}
|
||||
|
||||
Function {make_colorsfonts()} {open
|
||||
} {
|
||||
code {font_browser = new Font_Browser;} {}
|
||||
Fl_Window dlgColorFont {
|
||||
label {Colors and Fonts} open
|
||||
xywh {496 117 375 220} type Double
|
||||
label {Colors and Fonts} open selected
|
||||
xywh {496 125 375 220} type Double
|
||||
code0 {dlgColorFont->xclass(PACKAGE_TARNAME);} visible
|
||||
} {
|
||||
Fl_Button btnClrFntClose {
|
||||
|
@ -120,7 +118,7 @@ Function {make_colorsfonts()} {open
|
|||
xywh {0 5 375 185}
|
||||
} {
|
||||
Fl_Group {} {
|
||||
label {Freq Disp} open selected
|
||||
label {Freq Disp} open
|
||||
xywh {5 30 365 150}
|
||||
} {
|
||||
Fl_Box FDdisplay {
|
||||
|
@ -439,28 +437,22 @@ progdefaults.changed = true;}
|
|||
}
|
||||
Fl_Button btnRxFont {
|
||||
label {Rx font}
|
||||
callback {static Font_Browser* b = 0;
|
||||
if (!b) {
|
||||
b = new Font_Browser;
|
||||
b->fontNumber(progdefaults.RxFontnbr);
|
||||
b->fontSize(progdefaults.RxFontsize);
|
||||
b->fontColor(progdefaults.RxFontcolor);
|
||||
b->callback(cbRxFontBrowser);
|
||||
}
|
||||
b->show();}
|
||||
callback {font_browser->fontNumber(progdefaults.RxFontnbr);
|
||||
font_browser->fontSize(progdefaults.RxFontsize);
|
||||
font_browser->fontColor(progdefaults.RxFontcolor);
|
||||
font_browser->fontFilter(Font_Browser::ALL_TYPES);
|
||||
font_browser->callback(cbRxFontBrowser);
|
||||
font_browser->show();}
|
||||
xywh {275 50 75 20}
|
||||
}
|
||||
Fl_Button btnTxFont {
|
||||
label {Tx font}
|
||||
callback {static Font_Browser* b = 0;
|
||||
if (!b) {
|
||||
b = new Font_Browser;
|
||||
b->fontNumber(progdefaults.TxFontnbr);
|
||||
b->fontSize(progdefaults.TxFontsize);
|
||||
b->fontColor(progdefaults.TxFontcolor);
|
||||
b->callback(cbTxFontBrowser);
|
||||
}
|
||||
b->show();}
|
||||
callback {font_browser->fontNumber(progdefaults.TxFontnbr);
|
||||
font_browser->fontSize(progdefaults.TxFontsize);
|
||||
font_browser->fontColor(progdefaults.TxFontcolor);
|
||||
font_browser->fontFilter(Font_Browser::ALL_TYPES);
|
||||
font_browser->callback(cbTxFontBrowser);
|
||||
font_browser->show();}
|
||||
xywh {275 90 75 20}
|
||||
}
|
||||
Fl_Button btnXMIT {
|
||||
|
|
|
@ -598,14 +598,12 @@ progdefaults.changed = true;
|
|||
Fl_Button *btnWaterfallFont=(Fl_Button *)0;
|
||||
|
||||
static void cb_btnWaterfallFont(Fl_Button*, void*) {
|
||||
static Font_Browser *b = (Font_Browser *)0;
|
||||
if (!b) {
|
||||
b = new Font_Browser;
|
||||
b->fontNumber(progdefaults.WaterfallFontnbr);
|
||||
b->fontSize(progdefaults.WaterfallFontsize);
|
||||
}
|
||||
b->callback((Fl_Callback*)cbWaterfallFontBrowser, (void*)(b));
|
||||
b->show();
|
||||
font_browser->fontNumber(progdefaults.WaterfallFontnbr);
|
||||
font_browser->fontSize(progdefaults.WaterfallFontsize);
|
||||
font_browser->fontColor(FL_FOREGROUND_COLOR);
|
||||
font_browser->fontFilter(Font_Browser::ALL_TYPES);
|
||||
font_browser->callback((Fl_Callback*)cbWaterfallFontBrowser);
|
||||
font_browser->show();
|
||||
}
|
||||
|
||||
Fl_Check_Button *btnViewXmtSignal=(Fl_Check_Button *)0;
|
||||
|
|
|
@ -754,14 +754,12 @@ progdefaults.changed = true;}
|
|||
}
|
||||
Fl_Button btnWaterfallFont {
|
||||
label {Font...}
|
||||
callback {static Font_Browser *b = (Font_Browser *)0;
|
||||
if (!b) {
|
||||
b = new Font_Browser;
|
||||
b->fontNumber(progdefaults.WaterfallFontnbr);
|
||||
b->fontSize(progdefaults.WaterfallFontsize);
|
||||
}
|
||||
b->callback((Fl_Callback*)cbWaterfallFontBrowser, (void*)(b));
|
||||
b->show();}
|
||||
callback {font_browser->fontNumber(progdefaults.WaterfallFontnbr);
|
||||
font_browser->fontSize(progdefaults.WaterfallFontsize);
|
||||
font_browser->fontColor(FL_FOREGROUND_COLOR);
|
||||
font_browser->fontFilter(Font_Browser::ALL_TYPES);
|
||||
font_browser->callback((Fl_Callback*)cbWaterfallFontBrowser);
|
||||
font_browser->show();}
|
||||
tooltip {Select waterfall scale font} xywh {314 252 70 24}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,6 +40,8 @@
|
|||
|
||||
using namespace std;
|
||||
|
||||
Font_Browser* font_browser;
|
||||
|
||||
// Font Color selected
|
||||
|
||||
void Font_Browser::ColorSelect()
|
||||
|
@ -172,11 +174,12 @@ Font_Browser::Font_Browser(int x, int y, int w, int h, const char *lbl )
|
|||
fontnbr = FL_HELVETICA;;
|
||||
fontsize = FL_NORMAL_SIZE; // Font Size to be used
|
||||
fontcolor = FL_FOREGROUND_COLOR;
|
||||
filter = ALL_TYPES;
|
||||
|
||||
lst_Font->value(1);
|
||||
FontNameSelect();
|
||||
|
||||
Fl::focus(lst_Font);
|
||||
//! Fl::focus(lst_Font);
|
||||
|
||||
xclass(PACKAGE_NAME);
|
||||
}
|
||||
|
@ -232,6 +235,86 @@ bool Font_Browser::fixed_width(Fl_Font f)
|
|||
return fl_width('X') == fl_width('i');
|
||||
}
|
||||
|
||||
#include <vector>
|
||||
#include <FL/Fl_Double_Window.H>
|
||||
#include <FL/Fl_Progress.H>
|
||||
|
||||
class Progress_Window : public Fl_Double_Window
|
||||
{
|
||||
public:
|
||||
Progress_Window(float min = 0.0f, float max = 100.0f, const char* l = 0)
|
||||
: Fl_Double_Window(200, 34), ps(5, 5, 190, 24, l)
|
||||
{
|
||||
end();
|
||||
|
||||
range(min, max);
|
||||
ps.align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
|
||||
ps.selection_color(FL_SELECTION_COLOR);
|
||||
set_modal();
|
||||
callback(nop);
|
||||
|
||||
if (l && *l) {
|
||||
fl_font(FL_HELVETICA, FL_NORMAL_SIZE);
|
||||
int s = (int)(fl_width(l) + fl_width('W'));
|
||||
if (s > ps.w()) {
|
||||
ps.size(s, ps.h());
|
||||
size(ps.w() + 10, h());
|
||||
}
|
||||
}
|
||||
position(Fl::event_x_root() - w() / 2, Fl::event_y_root() - h());
|
||||
|
||||
xclass(PACKAGE_TARNAME);
|
||||
show();
|
||||
}
|
||||
void range(float min, float max) { ps.minimum(min); ps.maximum(max); }
|
||||
void value(float val) { ps.value(val); }
|
||||
static void nop(Fl_Widget*, void*) { }
|
||||
private:
|
||||
Fl_Progress ps;
|
||||
};
|
||||
|
||||
void Font_Browser::fontFilter(filter_t filter)
|
||||
{
|
||||
if (this->filter == filter)
|
||||
return;
|
||||
|
||||
int s = lst_Font->size();
|
||||
|
||||
static vector<bool> fixed;
|
||||
if (fixed.empty()) {
|
||||
Progress_Window pw(1, s, _("Reading fonts..."));
|
||||
fixed.resize(s);
|
||||
for (int i = 1; i < s; i++) {
|
||||
fixed[i] = fixed_width((Fl_Font)(intptr_t)(lst_Font->data(i)));
|
||||
pw.value(i);
|
||||
Fl::check();
|
||||
}
|
||||
}
|
||||
|
||||
switch (this->filter = filter) {
|
||||
case FIXED_WIDTH:
|
||||
for (int i = 1; i < s; i++) {
|
||||
if (fixed[i])
|
||||
lst_Font->show(i);
|
||||
else
|
||||
lst_Font->hide(i);
|
||||
}
|
||||
break;
|
||||
case VARIABLE_WIDTH:
|
||||
for (int i = 1; i < s; i++) {
|
||||
if (!fixed[i])
|
||||
lst_Font->show(i);
|
||||
else
|
||||
lst_Font->hide(i);
|
||||
}
|
||||
break;
|
||||
case ALL_TYPES:
|
||||
for (int i = 1; i < s; i++)
|
||||
lst_Font->show(i);
|
||||
break;
|
||||
}
|
||||
lst_Font->topline(lst_Font->value());
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include <FL/Fl.H>
|
||||
#include "font_browser.h"
|
||||
void selectColorsFonts();
|
||||
void cbWaterfallFontBrowser(Font_Browser*, void* v);
|
||||
void cbWaterfallFontBrowser(Fl_Widget*, void*);
|
||||
#include <FL/Fl_Double_Window.H>
|
||||
extern Fl_Double_Window *dlgColorFont;
|
||||
#include <FL/Fl_Button.H>
|
||||
|
|
|
@ -51,11 +51,15 @@ public:
|
|||
// Font browser widget
|
||||
class Font_Browser : public Fl_Window
|
||||
{
|
||||
public:
|
||||
enum filter_t { FIXED_WIDTH, VARIABLE_WIDTH, ALL_TYPES };
|
||||
|
||||
private:
|
||||
int numfonts;
|
||||
Fl_Font fontnbr;
|
||||
int fontsize;
|
||||
Fl_Color fontcolor;
|
||||
Fl_Color fontcolor;
|
||||
filter_t filter;
|
||||
void *data_;
|
||||
|
||||
Fl_Browser *lst_Font;
|
||||
|
@ -88,6 +92,9 @@ public:
|
|||
void fontName(const char* n);
|
||||
|
||||
static bool fixed_width(Fl_Font f);
|
||||
void fontFilter(filter_t filter);
|
||||
};
|
||||
|
||||
extern Font_Browser* font_browser;
|
||||
|
||||
#endif
|
||||
|
|
Ładowanie…
Reference in New Issue