From 33335854f3b65abff9b8fd3a381f5f8b141076df Mon Sep 17 00:00:00 2001 From: David Freese Date: Fri, 29 Jan 2010 13:33:19 -0600 Subject: [PATCH] DUP indicator * Removed label "*** Dup ***" * Added foreground colorization to all Call input fields when duplicate detected. * Added Dup Color selector to Contest configuration panel. --- src/dialogs/confdialog.cxx | 25 +++++++++++++++++++++++++ src/dialogs/confdialog.fl | 21 +++++++++++++++++++-- src/dialogs/fl_digi.cxx | 31 ++++++++++++++++++++----------- src/include/confdialog.h | 3 ++- src/include/configuration.h | 3 +++ src/include/fl_digi.h | 7 +++++-- src/logbook/logsupport.cxx | 15 ++++++++++++++- 7 files changed, 88 insertions(+), 17 deletions(-) diff --git a/src/dialogs/confdialog.cxx b/src/dialogs/confdialog.cxx index 3a116375..43020f52 100644 --- a/src/dialogs/confdialog.cxx +++ b/src/dialogs/confdialog.cxx @@ -291,6 +291,22 @@ static void cb_nbrTimeSpan(Fl_Value_Input* o, void*) { progdefaults.changed = true; } +Fl_Button *btnDupColor=(Fl_Button *)0; + +static void cb_btnDupColor(Fl_Button* o, void*) { + fl_color_chooser("Dup Check", + progdefaults.dup_color.R, + progdefaults.dup_color.G, + progdefaults.dup_color.B); +o->color( + fl_rgb_color( + progdefaults.dup_color.R, + progdefaults.dup_color.G, + progdefaults.dup_color.B)); +o->redraw(); +progdefaults.changed = true; +} + Fl_Group *tabWF_UI=(Fl_Group *)0; Fl_Check_Button *btnWF_UIrev=(Fl_Check_Button *)0; @@ -2725,6 +2741,15 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600 nbrTimeSpan->align(FL_ALIGN_RIGHT); o->value(progdefaults.timespan); } // Fl_Value_Input* nbrTimeSpan + { Fl_Button* o = btnDupColor = new Fl_Button(15, 282, 90, 22, _("Dup Color")); + btnDupColor->tooltip(_("Left click to select dup color")); + btnDupColor->box(FL_DOWN_BOX); + btnDupColor->down_box(FL_DOWN_BOX); + btnDupColor->color((Fl_Color)FL_BACKGROUND2_COLOR); + btnDupColor->selection_color((Fl_Color)FL_BACKGROUND2_COLOR); + btnDupColor->callback((Fl_Callback*)cb_btnDupColor); + o->color(fl_rgb_color(progdefaults.dup_color.R, progdefaults.dup_color.G, progdefaults.dup_color.B)); + } // Fl_Button* btnDupColor o->end(); } // Fl_Group* o tabContest->end(); diff --git a/src/dialogs/confdialog.fl b/src/dialogs/confdialog.fl index 0459fb62..3943a427 100644 --- a/src/dialogs/confdialog.fl +++ b/src/dialogs/confdialog.fl @@ -95,7 +95,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600 } { Fl_Group tabOperator { label Operator - callback {progdefaults.changed = true;} open + callback {progdefaults.changed = true;} open selected tooltip {Operator information} xywh {0 25 500 345} when 1 } { Fl_Group {} { @@ -156,7 +156,7 @@ progdefaults.changed = true;} class Fl_Input2 } Fl_Group grpNoise { - label {Test Signal - Do NOT use with transmitter} open selected + label {Test Signal - Do NOT use with transmitter} open xywh {5 203 490 165} box ENGRAVED_FRAME align 21 hide } { Fl_Check_Button btnNoiseOn { @@ -399,6 +399,23 @@ progdefaults.changed = true;} tooltip {Enter time span in minutes} xywh {285 313 53 20} align 8 maximum 1440 step 1 value 120 code0 {o->value(progdefaults.timespan);} } + Fl_Button btnDupColor { + label {Dup Color} + callback {fl_color_chooser("Dup Check", + progdefaults.dup_color.R, + progdefaults.dup_color.G, + progdefaults.dup_color.B); +o->color( + fl_rgb_color( + progdefaults.dup_color.R, + progdefaults.dup_color.G, + progdefaults.dup_color.B)); +o->redraw(); +progdefaults.changed = true;} + tooltip {Left click to select dup color} xywh {15 282 90 22} box DOWN_BOX down_box DOWN_BOX color 7 selection_color 7 + code0 {o->color(fl_rgb_color(progdefaults.dup_color.R, progdefaults.dup_color.G, progdefaults.dup_color.B));} + code1 {\#include } + } } } Fl_Group tabWF_UI { diff --git a/src/dialogs/fl_digi.cxx b/src/dialogs/fl_digi.cxx index b17ee1bf..07124942 100644 --- a/src/dialogs/fl_digi.cxx +++ b/src/dialogs/fl_digi.cxx @@ -175,7 +175,6 @@ Fl_Input2 *inpCountry; Fl_Input2 *inpSerNo; Fl_Input2 *outSerNo; Fl_Input2 *inpXchgIn; -Fl_Box *lblDup; Fl_Input2 *inpVEprov; Fl_Input2 *inpNotes; Fl_Input2 *inpAZ; // WA5ZNU @@ -1552,9 +1551,16 @@ if (bWF_only) return; inpRstIn1->value("599"); inpRstIn2->value("599"); inpRstOut1->value("599"); inpRstOut2->value("599"); } + inpCall1->color(FL_BACKGROUND2_COLOR); + inpCall2->color(FL_BACKGROUND2_COLOR); + inpCall3->color(FL_BACKGROUND2_COLOR); + inpCall4->color(FL_BACKGROUND2_COLOR); + inpCall1->redraw(); + inpCall2->redraw(); + inpCall3->redraw(); + inpCall4->redraw(); updateOutSerNo(); inpSearchString->value (""); - lblDup->hide(); old_call.clear(); new_call.clear(); oktoclear = true; @@ -1601,6 +1607,7 @@ if (bWF_only) return; inpCall->position(pos); delete [] uc; } + new_call = inpCall->value(); if (inpCall == inpCall1) { @@ -1620,6 +1627,16 @@ if (bWF_only) return; inpCall2->value(new_call.c_str()); inpCall3->value(new_call.c_str()); } + if (inpCall->value()[0] == 0) { + inpCall1->color(FL_BACKGROUND2_COLOR); + inpCall2->color(FL_BACKGROUND2_COLOR); + inpCall3->color(FL_BACKGROUND2_COLOR); + inpCall4->color(FL_BACKGROUND2_COLOR); + inpCall1->redraw(); + inpCall2->redraw(); + inpCall3->redraw(); + inpCall4->redraw(); + } if (progStatus.timer && (Fl::event() != FL_HIDE)) stopMacroTimer(); @@ -1636,11 +1653,9 @@ if (bWF_only) return; else inpTimeOn1->value(inpTimeOn->value()); sDate_on = zdate(); - lblDup->hide(); if (progdefaults.EnableDupCheck) { - if (!lblDup->visible()) - DupCheck(); + DupCheck(); return restoreFocus(w); } @@ -1704,7 +1719,6 @@ void cb_log(Fl_Widget* w, void*) if (inp->value()[0]) oktoclear = false; if (progdefaults.EnableDupCheck) { - lblDup->hide(); DupCheck(); } restoreFocus(w); @@ -3031,10 +3045,6 @@ void create_fl_digi_main_primary() { inpRstOut1->tooltip(""); inpRstOut1->align(FL_ALIGN_TOP | FL_ALIGN_LEFT); - lblDup = new Fl_Box(rightof(inpCall1) - w_inpCall/2 - 40, Hmenu + 1, 80, Hentry, _("*** DUP ***")); - lblDup->labelcolor(FL_RED); - lblDup->hide(); - QsoInfoFrame1A = new Fl_Group (x_qsoframe, y3, wf1, Hentry + pad); Fl_Box *fm1box = new Fl_Box(x_qsoframe, y3, w_fm1, Hentry, _("QTH")); fm1box->align(FL_ALIGN_INSIDE); @@ -3839,7 +3849,6 @@ void noop_controls() // create and then hide all controls not being used inpSerNo = new Fl_Input2(defwidget); inpSerNo->hide(); outSerNo = new Fl_Input2(defwidget); outSerNo->hide(); inpXchgIn = new Fl_Input2(defwidget); inpXchgIn->hide(); - lblDup = new Fl_Box(defwidget); lblDup->hide(); inpVEprov = new Fl_Input2(defwidget); inpVEprov->hide(); inpNotes = new Fl_Input2(defwidget); inpNotes->hide(); inpAZ = new Fl_Input2(defwidget); inpAZ->hide(); diff --git a/src/include/confdialog.h b/src/include/confdialog.h index 8e84f82f..501d2d44 100644 --- a/src/include/confdialog.h +++ b/src/include/confdialog.h @@ -62,6 +62,8 @@ extern Fl_Check_Button *btnDupState; extern Fl_Check_Button *btnDupXchg1; extern Fl_Check_Button *btnDupTimeSpan; extern Fl_Value_Input *nbrTimeSpan; +#include +extern Fl_Button *btnDupColor; extern Fl_Group *tabWF_UI; extern Fl_Check_Button *btnWF_UIrev; extern Fl_Check_Button *btnWF_UIx1; @@ -86,7 +88,6 @@ extern Fl_Button *btnColor[9]; extern Fl_Button *btnLoadPalette; extern Fl_Button *btnSavePalette; extern Fl_Check_Button *btnUseCursorLines; -#include extern Fl_Button *btnCursorBWcolor; extern Fl_Check_Button *btnUseCursorCenterLine; extern Fl_Button *btnCursorCenterLineColor; diff --git a/src/include/configuration.h b/src/include/configuration.h index 0cc05c8d..3fbde412 100644 --- a/src/include/configuration.h +++ b/src/include/configuration.h @@ -771,6 +771,9 @@ ELEM_(bool, cutnbrs, "CUTNBRS", \ "Send CW cut numbers", \ false) \ + ELEM_(RGB, dup_color, "dupcolor", \ + "Callsign background color when duplicate detected", \ + {255, 110, 180}) \ ELEM_(bool, EnableDupCheck, "ENABLEDUPCHECK", \ "Check for duplicates (contest)", \ false) \ diff --git a/src/include/fl_digi.h b/src/include/fl_digi.h index ac389b65..f0b42a60 100644 --- a/src/include/fl_digi.h +++ b/src/include/fl_digi.h @@ -72,7 +72,6 @@ extern Fl_Input2 *inpCountry; extern Fl_Input2 *inpSerNo; extern Fl_Input2 *outSerNo; extern Fl_Input2 *inpXchgIn; -extern Fl_Box *lblDup; extern Fl_Input2 *inpVEprov; extern Fl_Input2 *inpLoc; extern Fl_Input2 *inpNotes; @@ -88,13 +87,17 @@ extern Fl_Input2 *inpFreq2; extern Fl_Input2 *inpTimeOff2; extern Fl_Input2 *inpTimeOn2; extern Fl_Button *btnTimeOn2; -extern Fl_Input2 *inpCall2; extern Fl_Input2 *inpName2; extern Fl_Input2 *inpRstIn2; extern Fl_Input2 *inpRstOut2; extern Fl_Button *qsoClear2; extern Fl_Button *qsoSave2; +extern Fl_Input2 *inpCall1; +extern Fl_Input2 *inpCall2; +extern Fl_Input2 *inpCall3; +extern Fl_Input2 *inpCall4; + extern Fl_Group *qsoFrameView; extern Fl_Group *QsoButtonFrame; extern Fl_Group *QsoInfoFrame; diff --git a/src/logbook/logsupport.cxx b/src/logbook/logsupport.cxx index c6f5bfa2..24e61ba9 100644 --- a/src/logbook/logsupport.cxx +++ b/src/logbook/logsupport.cxx @@ -328,6 +328,7 @@ void cb_SortByFreq (void) { void DupCheck() { + Fl_Color call_clr = FL_BACKGROUND2_COLOR; if (qsodb.duplicate( inpCall->value(), zdate(), ztime(), progdefaults.timespan, progdefaults.duptimespan, @@ -335,8 +336,20 @@ void DupCheck() inpState->value(), progdefaults.dupstate, mode_info[active_modem->get_mode()].adif_name, progdefaults.dupmode, inpXchgIn->value(), progdefaults.dupxchg1 ) ) { - lblDup->show(); + call_clr = fl_rgb_color( + progdefaults.dup_color.R, + progdefaults.dup_color.G, + progdefaults.dup_color.B); } + + inpCall1->color(call_clr); + inpCall2->color(call_clr); + inpCall3->color(call_clr); + inpCall4->color(call_clr); + inpCall1->redraw(); + inpCall2->redraw(); + inpCall3->redraw(); + inpCall4->redraw(); } cQsoRec* SearchLog(const char *callsign)