Add rudimentary contest functionality

1. Added automatic time update to time field
	a.update occurs in thread arq_loop
2. Modified date format transferred to logbook YYYYMMDD
3. Changed textfont to font(0) for all logbook dialog widgets
4. Logbook path/name saved in fldigi_def.xml
5. New logbook clears all entries in logbook dialog
6. Logbook dialog titlebar updates with change in logbook file
7. Added contest functionality
	a. additional log fields for various contest exchanges
	   fields switchable between rag-chew and contest views
	b. duplicate checking
	c. cut number transmit for CW
	d. additional macro tags for sending contest specific exchanges
	e. additional macro tag to send current qso-log-time
	f. changed qso-log-time to an automated clock
pull/2/head
David Freese 2008-12-04 15:36:36 +00:00 zatwierdzone przez Stelios Bounanos
rodzic 163acfea1b
commit 154952f14e
27 zmienionych plików z 2103 dodań i 1380 usunięć

Wyświetl plik

@ -99,6 +99,13 @@ Change Log:
34) Color changes for Frequency Control now applied to both docked and
floating rig control.
35) Added fl_logbook functionality as a built-in feature
36) Added rudimentary contest functionality
a. additional log fields for various contest exchanges
b. duplicate checking
c. cut number transmit for CW
d. additional macro tags for sending contest specific exchanges
e. additional macro tag to send current qso-log-time
f. changed qso-log-time to an automated clock
3.03
1) Changes to socket server to correct shutdown process

Wyświetl plik

@ -9,7 +9,7 @@ dnl major and minor must be integers; patch may
dnl contain other characters or be empty
m4_define(FLDIGI_MAJOR, [3])
m4_define(FLDIGI_MINOR, [0])
m4_define(FLDIGI_PATCH, [4BF])
m4_define(FLDIGI_PATCH, [4BG])
AC_INIT([fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[FLDIGI_PATCH], [w1hkj AT w1hkj DOT com])

Plik diff jest za duży Load Diff

1033
po/fr.po

Plik diff jest za duży Load Diff

Wyświetl plik

@ -682,15 +682,21 @@ void cw::send_symbol(int bits)
// sends a morse character and the space afterwards
//=======================================================================
char cutnumbers[] = "T12345678N";
void cw::send_ch(int ch)
{
int code;
int chout = ch;
sync_parameters();
// handle word space separately (7 dots spacing)
// last char already had 2 elements of inter-character spacing
if ((ch == ' ') || (ch == '\n')) {
if (progdefaults.cutnbrs && (ch >= '0' && ch <= '9'))
chout = cutnumbers[ch - '0'];
if ((chout == ' ') || (chout == '\n')) {
firstelement = false;
send_symbol(0);
send_symbol(0);
@ -702,8 +708,8 @@ void cw::send_ch(int ch)
}
// convert character code to a morse representation
if ((ch < 256) && (ch >= 0)) {
code = tx_lookup(ch); //cw_tx_lookup(ch);
if ((chout < 256) && (chout >= 0)) {
code = tx_lookup(chout); //cw_tx_lookup(ch);
firstelement = true;
} else {
code = 0x04; // two extra dot spaces

Wyświetl plik

@ -15,6 +15,7 @@
#include "Viewer.h"
#include "pskrep.h"
#include "flinput2.h"
#include "logsupport.h"
Fl_Double_Window *dlgConfig;
void set_qrz_buttons(Fl_Button* b) {
@ -72,27 +73,6 @@ static void cb_inpMyLocator(Fl_Input2* o, void*) {
progdefaults.changed = true;
}
Fl_Check_Button *btnUseLeadingZeros=(Fl_Check_Button *)0;
static void cb_btnUseLeadingZeros(Fl_Check_Button* o, void*) {
progdefaults.UseLeadingZeros = o->value();
progdefaults.changed = true;
}
Fl_Value_Input *nbrContestStart=(Fl_Value_Input *)0;
static void cb_nbrContestStart(Fl_Value_Input* o, void*) {
progdefaults.ContestStart = (int)o->value();
progdefaults.changed = true;
}
Fl_Value_Input *nbrContestDigits=(Fl_Value_Input *)0;
static void cb_nbrContestDigits(Fl_Value_Input* o, void*) {
progdefaults.ContestDigits = (int)o->value();
progdefaults.changed = true;
}
Fl_Input2 *inpMyAntenna=(Fl_Input2 *)0;
static void cb_inpMyAntenna(Fl_Input2* o, void*) {
@ -191,27 +171,117 @@ progdefaults.changed = true;
Fl_Group *tabContest=(Fl_Group *)0;
Fl_Box *lblLabels=(Fl_Box *)0;
Fl_Input2 *inpXch1=(Fl_Input2 *)0;
Fl_Input2 *inpXch2=(Fl_Input2 *)0;
Fl_Input2 *inpXch3=(Fl_Input2 *)0;
Fl_Input2 *inpXch4=(Fl_Input2 *)0;
Fl_Box *lblSend=(Fl_Box *)0;
Fl_Input2 *inpSend1=(Fl_Input2 *)0;
static void cb_inpSend1(Fl_Input2* o, void*) {
progdefaults.Xchg1=o->value();
progdefaults.changed = true;
}
Fl_Input2 *inpSend2=(Fl_Input2 *)0;
static void cb_inpSend2(Fl_Input2* o, void*) {
progdefaults.Xchg2=o->value();
progdefaults.changed = true;
}
Fl_Input2 *inpSend3=(Fl_Input2 *)0;
Fl_Input2 *inpSend4=(Fl_Input2 *)0;
static void cb_inpSend3(Fl_Input2* o, void*) {
progdefaults.Xchg3=o->value();
progdefaults.changed = true;
}
Fl_Check_Button *chk599=(Fl_Check_Button *)0;
Fl_Check_Button *btn599=(Fl_Check_Button *)0;
static void cb_btn599(Fl_Check_Button* o, void*) {
progdefaults.fixed599 = o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnCutNbrs=(Fl_Check_Button *)0;
static void cb_btnCutNbrs(Fl_Check_Button* o, void*) {
progdefaults.cutnbrs=o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnUseLeadingZeros=(Fl_Check_Button *)0;
static void cb_btnUseLeadingZeros(Fl_Check_Button* o, void*) {
progdefaults.UseLeadingZeros = o->value();
progdefaults.changed = true;
}
Fl_Value_Input *nbrContestStart=(Fl_Value_Input *)0;
static void cb_nbrContestStart(Fl_Value_Input* o, void*) {
progdefaults.ContestStart = (int)o->value();
progdefaults.changed = true;
}
Fl_Value_Input *nbrContestDigits=(Fl_Value_Input *)0;
static void cb_nbrContestDigits(Fl_Value_Input* o, void*) {
progdefaults.ContestDigits = (int)o->value();
progdefaults.changed = true;
}
Fl_Button *btnResetSerNbr=(Fl_Button *)0;
static void cb_btnResetSerNbr(Fl_Button*, void*) {
cb_ResetSerNbr();
}
Fl_Check_Button *btnDupBand=(Fl_Check_Button *)0;
static void cb_btnDupBand(Fl_Check_Button* o, void*) {
progdefaults.dupband = o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnDupState=(Fl_Check_Button *)0;
static void cb_btnDupState(Fl_Check_Button* o, void*) {
progdefaults.dupstate = o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnDupXchg1=(Fl_Check_Button *)0;
static void cb_btnDupXchg1(Fl_Check_Button* o, void*) {
progdefaults.dupxchg1 = o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnDupXchg2=(Fl_Check_Button *)0;
static void cb_btnDupXchg2(Fl_Check_Button* o, void*) {
progdefaults.dupxchg2 = o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnDupXchg3=(Fl_Check_Button *)0;
static void cb_btnDupXchg3(Fl_Check_Button* o, void*) {
progdefaults.dupxchg3 = o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnDupMode=(Fl_Check_Button *)0;
static void cb_btnDupMode(Fl_Check_Button* o, void*) {
progdefaults.dupmode = o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnDupCheckOn=(Fl_Check_Button *)0;
static void cb_btnDupCheckOn(Fl_Check_Button* o, void*) {
EnableDupCheck = o->value();
}
Fl_Group *tabWaterfall=(Fl_Group *)0;
@ -1953,6 +2023,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
{ tabOperator = new Fl_Group(0, 25, 500, 345, _("Operator"));
tabOperator->callback((Fl_Callback*)cb_tabOperator);
tabOperator->when(FL_WHEN_CHANGED);
tabOperator->hide();
{ Fl_Group* o = new Fl_Group(5, 35, 490, 165, _("Station"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
@ -2006,32 +2077,6 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
} // Fl_Input2* inpMyLocator
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(5, 200, 490, 70, _("Contest Setup"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ btnUseLeadingZeros = new Fl_Check_Button(42, 232, 154, 20, _("Use leading zeros"));
btnUseLeadingZeros->down_box(FL_DOWN_BOX);
btnUseLeadingZeros->value(1);
btnUseLeadingZeros->callback((Fl_Callback*)cb_btnUseLeadingZeros);
} // Fl_Check_Button* btnUseLeadingZeros
{ nbrContestStart = new Fl_Value_Input(221, 232, 45, 20, _("Starting #:"));
nbrContestStart->minimum(1);
nbrContestStart->maximum(10000);
nbrContestStart->step(1);
nbrContestStart->value(1);
nbrContestStart->callback((Fl_Callback*)cb_nbrContestStart);
nbrContestStart->align(FL_ALIGN_TOP);
} // Fl_Value_Input* nbrContestStart
{ nbrContestDigits = new Fl_Value_Input(303, 232, 45, 20, _("# of digits:"));
nbrContestDigits->minimum(1);
nbrContestDigits->maximum(5);
nbrContestDigits->step(1);
nbrContestDigits->value(3);
nbrContestDigits->callback((Fl_Callback*)cb_nbrContestDigits);
nbrContestDigits->align(FL_ALIGN_TOP);
} // Fl_Value_Input* nbrContestDigits
o->end();
} // Fl_Group* o
{ inpMyAntenna = new Fl_Input2(110, 132, 320, 24, _("Antenna:"));
inpMyAntenna->box(FL_DOWN_BOX);
inpMyAntenna->color(FL_BACKGROUND2_COLOR);
@ -2047,10 +2092,10 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
tabOperator->end();
} // Fl_Group* tabOperator
{ tabUI = new Fl_Group(0, 25, 500, 345, _("UI"));
tabUI->hide();
{ tabsUI = new Fl_Tabs(0, 25, 500, 345);
tabsUI->selection_color(FL_LIGHT1);
{ tabUserInterface = new Fl_Group(0, 50, 500, 320, _("General"));
tabUserInterface->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 490, 195);
o->box(FL_ENGRAVED_FRAME);
{ Fl_Check_Button* o = btnShowTooltips = new Fl_Check_Button(15, 70, 120, 20, _("Show tooltips"));
@ -2149,59 +2194,12 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
tabWfallRestart->end();
} // Fl_Group* tabWfallRestart
{ tabContest = new Fl_Group(0, 50, 500, 320, _("Contest"));
tabContest->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 490, 160, _("Exchanges"));
{ Fl_Group* o = new Fl_Group(5, 60, 490, 80, _("Exchanges"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ lblLabels = new Fl_Box(15, 103, 55, 25, _("Labels:"));
} // Fl_Box* lblLabels
{ inpXch1 = new Fl_Input2(80, 103, 70, 25, _("1"));
inpXch1->box(FL_DOWN_BOX);
inpXch1->color(FL_BACKGROUND2_COLOR);
inpXch1->selection_color(FL_SELECTION_COLOR);
inpXch1->labeltype(FL_NORMAL_LABEL);
inpXch1->labelfont(0);
inpXch1->labelsize(14);
inpXch1->labelcolor(FL_FOREGROUND_COLOR);
inpXch1->align(FL_ALIGN_TOP);
inpXch1->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpXch1
{ inpXch2 = new Fl_Input2(158, 103, 70, 25, _("2"));
inpXch2->box(FL_DOWN_BOX);
inpXch2->color(FL_BACKGROUND2_COLOR);
inpXch2->selection_color(FL_SELECTION_COLOR);
inpXch2->labeltype(FL_NORMAL_LABEL);
inpXch2->labelfont(0);
inpXch2->labelsize(14);
inpXch2->labelcolor(FL_FOREGROUND_COLOR);
inpXch2->align(FL_ALIGN_TOP);
inpXch2->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpXch2
{ inpXch3 = new Fl_Input2(238, 103, 70, 25, _("3"));
inpXch3->box(FL_DOWN_BOX);
inpXch3->color(FL_BACKGROUND2_COLOR);
inpXch3->selection_color(FL_SELECTION_COLOR);
inpXch3->labeltype(FL_NORMAL_LABEL);
inpXch3->labelfont(0);
inpXch3->labelsize(14);
inpXch3->labelcolor(FL_FOREGROUND_COLOR);
inpXch3->align(FL_ALIGN_TOP);
inpXch3->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpXch3
{ inpXch4 = new Fl_Input2(315, 103, 70, 25, _("4"));
inpXch4->box(FL_DOWN_BOX);
inpXch4->color(FL_BACKGROUND2_COLOR);
inpXch4->selection_color(FL_SELECTION_COLOR);
inpXch4->labeltype(FL_NORMAL_LABEL);
inpXch4->labelfont(0);
inpXch4->labelsize(14);
inpXch4->labelcolor(FL_FOREGROUND_COLOR);
inpXch4->align(FL_ALIGN_TOP);
inpXch4->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpXch4
{ lblSend = new Fl_Box(13, 149, 55, 25, _("Send:"));
{ lblSend = new Fl_Box(26, 95, 55, 25, _("Send:"));
} // Fl_Box* lblSend
{ inpSend1 = new Fl_Input2(80, 149, 70, 25);
{ Fl_Input2* o = inpSend1 = new Fl_Input2(81, 95, 70, 25, _("Xchg 1"));
inpSend1->box(FL_DOWN_BOX);
inpSend1->color(FL_BACKGROUND2_COLOR);
inpSend1->selection_color(FL_SELECTION_COLOR);
@ -2209,10 +2207,12 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
inpSend1->labelfont(0);
inpSend1->labelsize(14);
inpSend1->labelcolor(FL_FOREGROUND_COLOR);
inpSend1->align(FL_ALIGN_LEFT);
inpSend1->callback((Fl_Callback*)cb_inpSend1);
inpSend1->align(FL_ALIGN_TOP);
inpSend1->when(FL_WHEN_RELEASE);
o->value(progdefaults.Xchg1.c_str());
} // Fl_Input2* inpSend1
{ inpSend2 = new Fl_Input2(158, 150, 70, 25);
{ Fl_Input2* o = inpSend2 = new Fl_Input2(159, 95, 70, 25, _("Xchg 2"));
inpSend2->box(FL_DOWN_BOX);
inpSend2->color(FL_BACKGROUND2_COLOR);
inpSend2->selection_color(FL_SELECTION_COLOR);
@ -2220,10 +2220,12 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
inpSend2->labelfont(0);
inpSend2->labelsize(14);
inpSend2->labelcolor(FL_FOREGROUND_COLOR);
inpSend2->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
inpSend2->callback((Fl_Callback*)cb_inpSend2);
inpSend2->align(FL_ALIGN_TOP);
inpSend2->when(FL_WHEN_RELEASE);
o->value(progdefaults.Xchg2.c_str());
} // Fl_Input2* inpSend2
{ inpSend3 = new Fl_Input2(238, 150, 70, 25);
{ Fl_Input2* o = inpSend3 = new Fl_Input2(239, 95, 70, 25, _("Xchg 3"));
inpSend3->box(FL_DOWN_BOX);
inpSend3->color(FL_BACKGROUND2_COLOR);
inpSend3->selection_color(FL_SELECTION_COLOR);
@ -2231,23 +2233,91 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
inpSend3->labelfont(0);
inpSend3->labelsize(14);
inpSend3->labelcolor(FL_FOREGROUND_COLOR);
inpSend3->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
inpSend3->callback((Fl_Callback*)cb_inpSend3);
inpSend3->align(FL_ALIGN_TOP);
inpSend3->when(FL_WHEN_RELEASE);
o->value(progdefaults.Xchg3.c_str());
} // Fl_Input2* inpSend3
{ inpSend4 = new Fl_Input2(315, 149, 70, 25);
inpSend4->box(FL_DOWN_BOX);
inpSend4->color(FL_BACKGROUND2_COLOR);
inpSend4->selection_color(FL_SELECTION_COLOR);
inpSend4->labeltype(FL_NORMAL_LABEL);
inpSend4->labelfont(0);
inpSend4->labelsize(14);
inpSend4->labelcolor(FL_FOREGROUND_COLOR);
inpSend4->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
inpSend4->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpSend4
{ chk599 = new Fl_Check_Button(80, 190, 130, 20, _("RST always 599"));
chk599->down_box(FL_DOWN_BOX);
} // Fl_Check_Button* chk599
{ Fl_Check_Button* o = btn599 = new Fl_Check_Button(326, 75, 130, 20, _("RST always 599"));
btn599->down_box(FL_DOWN_BOX);
btn599->callback((Fl_Callback*)cb_btn599);
o->value(progdefaults.fixed599);
} // Fl_Check_Button* btn599
{ Fl_Check_Button* o = btnCutNbrs = new Fl_Check_Button(326, 110, 70, 15, _("Send CW cut #\'s"));
btnCutNbrs->down_box(FL_DOWN_BOX);
btnCutNbrs->callback((Fl_Callback*)cb_btnCutNbrs);
o->value(progdefaults.cutnbrs);
} // Fl_Check_Button* btnCutNbrs
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(5, 150, 490, 65, _("Serial Number"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ btnUseLeadingZeros = new Fl_Check_Button(26, 176, 154, 20, _("Use leading zeros"));
btnUseLeadingZeros->down_box(FL_DOWN_BOX);
btnUseLeadingZeros->value(1);
btnUseLeadingZeros->callback((Fl_Callback*)cb_btnUseLeadingZeros);
} // Fl_Check_Button* btnUseLeadingZeros
{ Fl_Value_Input* o = nbrContestStart = new Fl_Value_Input(221, 176, 45, 20, _("Starting #"));
nbrContestStart->maximum(10000);
nbrContestStart->step(1);
nbrContestStart->callback((Fl_Callback*)cb_nbrContestStart);
nbrContestStart->align(FL_ALIGN_TOP);
o->value(progdefaults.ContestStart);
} // Fl_Value_Input* nbrContestStart
{ nbrContestDigits = new Fl_Value_Input(303, 175, 45, 20, _("# of digits"));
nbrContestDigits->minimum(1);
nbrContestDigits->maximum(5);
nbrContestDigits->step(1);
nbrContestDigits->value(3);
nbrContestDigits->callback((Fl_Callback*)cb_nbrContestDigits);
nbrContestDigits->align(FL_ALIGN_TOP);
} // Fl_Value_Input* nbrContestDigits
{ btnResetSerNbr = new Fl_Button(395, 176, 70, 20, _("Reset"));
btnResetSerNbr->callback((Fl_Callback*)cb_btnResetSerNbr);
} // Fl_Button* btnResetSerNbr
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(5, 225, 490, 85, _("Dup Check"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Check_Button* o = btnDupBand = new Fl_Check_Button(135, 252, 70, 15, _("Band"));
btnDupBand->down_box(FL_DOWN_BOX);
btnDupBand->callback((Fl_Callback*)cb_btnDupBand);
o->value(progdefaults.dupband);
} // Fl_Check_Button* btnDupBand
{ Fl_Check_Button* o = btnDupState = new Fl_Check_Button(215, 252, 70, 15, _("State"));
btnDupState->down_box(FL_DOWN_BOX);
btnDupState->callback((Fl_Callback*)cb_btnDupState);
o->value(progdefaults.dupstate);
} // Fl_Check_Button* btnDupState
{ Fl_Check_Button* o = btnDupXchg1 = new Fl_Check_Button(55, 280, 70, 15, _("Xchg 1"));
btnDupXchg1->down_box(FL_DOWN_BOX);
btnDupXchg1->callback((Fl_Callback*)cb_btnDupXchg1);
o->value(progdefaults.dupxchg1);
} // Fl_Check_Button* btnDupXchg1
{ Fl_Check_Button* o = btnDupXchg2 = new Fl_Check_Button(135, 280, 70, 15, _("Xchg 2"));
btnDupXchg2->down_box(FL_DOWN_BOX);
btnDupXchg2->callback((Fl_Callback*)cb_btnDupXchg2);
o->value(progdefaults.dupxchg2);
} // Fl_Check_Button* btnDupXchg2
{ Fl_Check_Button* o = btnDupXchg3 = new Fl_Check_Button(215, 280, 70, 15, _("Xchg 3"));
btnDupXchg3->down_box(FL_DOWN_BOX);
btnDupXchg3->callback((Fl_Callback*)cb_btnDupXchg3);
o->value(progdefaults.dupxchg3);
} // Fl_Check_Button* btnDupXchg3
{ Fl_Check_Button* o = btnDupMode = new Fl_Check_Button(295, 252, 70, 15, _("Mode"));
btnDupMode->down_box(FL_DOWN_BOX);
btnDupMode->callback((Fl_Callback*)cb_btnDupMode);
o->value(progdefaults.dupmode);
} // Fl_Check_Button* btnDupMode
{ Fl_Check_Button* o = btnDupCheckOn = new Fl_Check_Button(365, 279, 90, 15, _("Dup Check On"));
btnDupCheckOn->down_box(FL_DOWN_BOX);
btnDupCheckOn->callback((Fl_Callback*)cb_btnDupCheckOn);
o->value(0);
} // Fl_Check_Button* btnDupCheckOn
{ new Fl_Box(51, 248, 59, 22, _("Call +"));
} // Fl_Box* o
o->end();
} // Fl_Group* o
tabContest->end();
@ -2855,7 +2925,6 @@ an merging"));
tabOlivia->end();
} // Fl_Group* tabOlivia
{ tabPSK = new Fl_Group(0, 50, 500, 320, _("PSK"));
tabPSK->hide();
{ tabsPSK = new Fl_Tabs(0, 50, 500, 320);
tabsPSK->selection_color(FL_LIGHT1);
{ Fl_Group* o = new Fl_Group(0, 75, 500, 295, _("General"));
@ -3101,6 +3170,7 @@ an merging"));
tabRTTY->end();
} // Fl_Group* tabRTTY
{ tabTHOR = new Fl_Group(0, 50, 500, 320, _("Thor"));
tabTHOR->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 490, 190);
o->box(FL_ENGRAVED_FRAME);
{ txtTHORSecondary = new Fl_Input2(15, 87, 360, 40, _("Secondary Text"));

Wyświetl plik

@ -42,6 +42,8 @@ decl {\#include "pskrep.h"} {global
decl {\#include "flinput2.h"} {global
}
decl {\#include "logsupport.h"} {}
decl {Fl_Double_Window *dlgConfig;} {public
}
@ -67,7 +69,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
code {} {}
Fl_Window {} {
label {Fldigi configuration} open
xywh {559 69 500 400} type Double color 45 selection_color 51 labelsize 18 align 80 visible
xywh {557 72 500 400} type Double color 45 selection_color 51 labelsize 18 align 80 visible
} {
Fl_Tabs tabsConfigure {open
xywh {0 0 500 372} color 50 selection_color 50
@ -75,7 +77,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
Fl_Group tabOperator {
label Operator
callback {progdefaults.changed = true;} open
xywh {0 25 500 345} when 1
xywh {0 25 500 345} when 1 hide
} {
Fl_Group {} {
label Station open
@ -121,29 +123,6 @@ progdefaults.changed = true;}
class Fl_Input2
}
}
Fl_Group {} {
label {Contest Setup} open
xywh {5 200 490 70} box ENGRAVED_FRAME align 21
} {
Fl_Check_Button btnUseLeadingZeros {
label {Use leading zeros}
callback {progdefaults.UseLeadingZeros = o->value();
progdefaults.changed = true;}
xywh {42 232 154 20} down_box DOWN_BOX value 1
}
Fl_Value_Input nbrContestStart {
label {Starting \#:}
callback {progdefaults.ContestStart = (int)o->value();
progdefaults.changed = true;}
xywh {221 232 45 20} align 1 minimum 1 maximum 10000 step 1 value 1
}
Fl_Value_Input nbrContestDigits {
label {\# of digits:}
callback {progdefaults.ContestDigits = (int)o->value();
progdefaults.changed = true;}
xywh {303 232 45 20} align 1 minimum 1 maximum 5 step 1 value 3
}
}
Fl_Input inpMyAntenna {
label {Antenna:}
callback {progdefaults.myAntenna = o->value();
@ -154,14 +133,14 @@ progdefaults.changed = true;}
}
Fl_Group tabUI {
label UI open
xywh {0 25 500 345} hide
xywh {0 25 500 345}
} {
Fl_Tabs tabsUI {
Fl_Tabs tabsUI {open
xywh {0 25 500 345} selection_color 50
} {
Fl_Group tabUserInterface {
label General open
xywh {0 50 500 320}
xywh {0 50 500 320} hide
} {
Fl_Group {} {open
xywh {5 60 490 195} box ENGRAVED_FRAME
@ -269,66 +248,146 @@ progdefaults.changed = true;}
}
Fl_Group tabContest {
label Contest open
xywh {0 50 500 320} hide
xywh {0 50 500 320}
} {
Fl_Group {} {
label Exchanges open
xywh {5 60 490 160} box ENGRAVED_FRAME align 21
xywh {5 60 490 80} box ENGRAVED_FRAME align 21
} {
Fl_Box lblLabels {
label {Labels:}
xywh {15 103 55 25}
}
Fl_Input inpXch1 {
label 1
xywh {80 103 70 25} align 1
class Fl_Input2
}
Fl_Input inpXch2 {
label 2
xywh {158 103 70 25} align 1
class Fl_Input2
}
Fl_Input inpXch3 {
label 3
xywh {238 103 70 25} align 1
class Fl_Input2
}
Fl_Input inpXch4 {
label 4
xywh {315 103 70 25} align 1
class Fl_Input2
}
Fl_Box lblSend {
label {Send:}
xywh {13 149 55 25}
xywh {26 95 55 25}
}
Fl_Input inpSend1 {
xywh {80 149 70 25}
label {Xchg 1}
callback {progdefaults.Xchg1=o->value();
progdefaults.changed = true;}
xywh {81 95 70 25} align 1
code0 {o->value(progdefaults.Xchg1.c_str());}
class Fl_Input2
}
Fl_Input inpSend2 {
xywh {158 150 70 25} align 20
label {Xchg 2}
callback {progdefaults.Xchg2=o->value();
progdefaults.changed = true;}
xywh {159 95 70 25} align 1
code0 {o->value(progdefaults.Xchg2.c_str());}
class Fl_Input2
}
Fl_Input inpSend3 {
xywh {238 150 70 25} align 20
label {Xchg 3}
callback {progdefaults.Xchg3=o->value();
progdefaults.changed = true;}
xywh {239 95 70 25} align 1
code0 {o->value(progdefaults.Xchg3.c_str());}
class Fl_Input2
}
Fl_Input inpSend4 {
xywh {315 149 70 25} align 20
class Fl_Input2
}
Fl_Check_Button chk599 {
Fl_Check_Button btn599 {
label {RST always 599}
xywh {80 190 130 20} down_box DOWN_BOX
callback {progdefaults.fixed599 = o->value();
progdefaults.changed = true;}
xywh {326 75 130 20} down_box DOWN_BOX
code0 {o->value(progdefaults.fixed599);}
}
Fl_Check_Button btnCutNbrs {
label {Send CW cut \#'s}
callback {progdefaults.cutnbrs=o->value();
progdefaults.changed = true;}
xywh {326 110 70 15} down_box DOWN_BOX
code0 {o->value(progdefaults.cutnbrs);}
}
}
Fl_Group {} {
label {Serial Number} open
xywh {5 150 490 65} box ENGRAVED_FRAME align 21
} {
Fl_Check_Button btnUseLeadingZeros {
label {Use leading zeros}
callback {progdefaults.UseLeadingZeros = o->value();
progdefaults.changed = true;}
xywh {26 176 154 20} down_box DOWN_BOX value 1
}
Fl_Value_Input nbrContestStart {
label {Starting \#}
callback {progdefaults.ContestStart = (int)o->value();
progdefaults.changed = true;}
xywh {221 176 45 20} align 1 maximum 10000 step 1
code0 {o->value(progdefaults.ContestStart);}
}
Fl_Value_Input nbrContestDigits {
label {\# of digits}
callback {progdefaults.ContestDigits = (int)o->value();
progdefaults.changed = true;}
xywh {303 175 45 20} align 1 minimum 1 maximum 5 step 1 value 3
}
Fl_Button btnResetSerNbr {
label Reset
callback {cb_ResetSerNbr();}
xywh {395 176 70 20}
}
}
Fl_Group {} {
label {Dup Check} open selected
xywh {5 225 490 85} box ENGRAVED_FRAME align 21
} {
Fl_Check_Button btnDupBand {
label Band
callback {progdefaults.dupband = o->value();
progdefaults.changed = true;}
xywh {135 252 70 15} down_box DOWN_BOX
code0 {o->value(progdefaults.dupband);}
}
Fl_Check_Button btnDupState {
label State
callback {progdefaults.dupstate = o->value();
progdefaults.changed = true;}
xywh {215 252 70 15} down_box DOWN_BOX
code0 {o->value(progdefaults.dupstate);}
}
Fl_Check_Button btnDupXchg1 {
label {Xchg 1}
callback {progdefaults.dupxchg1 = o->value();
progdefaults.changed = true;}
xywh {55 280 70 15} down_box DOWN_BOX
code0 {o->value(progdefaults.dupxchg1);}
}
Fl_Check_Button btnDupXchg2 {
label {Xchg 2}
callback {progdefaults.dupxchg2 = o->value();
progdefaults.changed = true;}
xywh {135 280 70 15} down_box DOWN_BOX
code0 {o->value(progdefaults.dupxchg2);}
}
Fl_Check_Button btnDupXchg3 {
label {Xchg 3}
callback {progdefaults.dupxchg3 = o->value();
progdefaults.changed = true;}
xywh {215 280 70 15} down_box DOWN_BOX
code0 {o->value(progdefaults.dupxchg3);}
}
Fl_Check_Button btnDupMode {
label Mode
callback {progdefaults.dupmode = o->value();
progdefaults.changed = true;}
xywh {295 252 70 15} down_box DOWN_BOX
code0 {o->value(progdefaults.dupmode);}
}
Fl_Check_Button btnDupCheckOn {
label {Dup Check On}
callback {EnableDupCheck = o->value();}
xywh {365 279 90 15} down_box DOWN_BOX
code0 {o->value(0);}
}
Fl_Box {} {
label {Call +}
xywh {51 248 59 22}
}
}
}
}
}
Fl_Group tabWaterfall {
label Waterfall open selected
label Waterfall open
xywh {0 25 500 347} hide
} {
Fl_Tabs tabsWaterfall {open
@ -968,7 +1027,7 @@ progdefaults.changed = true;}
}
Fl_Group tabPSK {
label PSK open
xywh {0 50 500 320} hide
xywh {0 50 500 320}
} {
Fl_Tabs tabsPSK {open
xywh {0 50 500 320} selection_color 50
@ -1234,7 +1293,7 @@ progdefaults.changed = true;}
}
Fl_Group tabTHOR {
label Thor open
xywh {0 50 500 320}
xywh {0 50 500 320} hide
} {
Fl_Group {} {open
xywh {5 60 490 190} box ENGRAVED_FRAME

Wyświetl plik

@ -149,7 +149,7 @@ Fl_Button *btnAltMacros;
Fl_Button *btn_afconoff;
Fl_Button *btn_sqlonoff;
Fl_Input2 *inpFreq;
Fl_Input2 *inpTime;
Fl_Output *inpTime;
Fl_Input2 *inpCall;
Fl_Input2 *inpName;
Fl_Input2 *inpRstIn;
@ -158,6 +158,11 @@ Fl_Input2 *inpQth;
Fl_Input2 *inpLoc;
Fl_Input2 *inpCnty;
Fl_Input2 *inpSerNo;
Fl_Output *outSerNo;
Fl_Input2 *inpXchg1;
Fl_Input2 *inpXchg2;
Fl_Input2 *inpXchg3;
Fl_Box *lblDup;
Fl_Input2 *inpVEprov;
Fl_Input2 *inpNotes;
Fl_Input2 *inpAZ; // WA5ZNU
@ -175,6 +180,8 @@ Fl_Group *RigControlFrame = (Fl_Group *)0;
Fl_Group *RigViewerFrame = (Fl_Group *)0;
Fl_Group *QsoInfoFrame = (Fl_Group *)0;
Fl_Group *QsoInfoFrame1 = (Fl_Group *)0;
Fl_Group *QsoInfoFrame1A = (Fl_Group *)0;
Fl_Group *QsoInfoFrame1B = (Fl_Group *)0;
Fl_Group *QsoInfoFrameLeft = (Fl_Group *)0;
Fl_Group *QsoInfoFrameCenter = (Fl_Group *)0;
Fl_Group *QsoInfoFrameRight = (Fl_Group *)0;
@ -196,20 +203,18 @@ AFCind *AFCindicator;
#define FREQWIDTH 172 // FREQWIDTH should be a multiple of 9 + 10
#define FREQHEIGHT 30
#define BTNWIDTH 30
int pad = 1; //wSpace;
int pad = 1;
int x_qsoframe = BTNWIDTH;
int w_inpFreq = 80;
int w_inpTime = 38;
int w_qsoTime = 24;
int w_inpTime = 40;
int w_inpCall = 120;
int w_inpName = 60;
int w_inpName = 120;
int w_inpRstIn = 30;
int w_inpRstOut = 30;
int w_inpSerNo = 40;
int wf1 = pad + w_inpFreq + pad + w_inpTime + w_qsoTime + pad + w_inpCall +
pad + w_inpName + pad + w_inpRstIn + pad + w_inpRstOut +
pad + w_inpSerNo;
int w_SerNo = 40;
int wf1 = pad + w_inpFreq + pad + w_inpTime + pad + w_inpCall +
pad + w_inpName + pad + w_inpRstIn + pad + w_inpRstOut;
int w_fm1 = 25;
int w_fm2 = 20;
@ -222,6 +227,8 @@ int w_inpLOC = 65;
int w_inpAZ = 30;
int w_inpQth = wf1 - w_fm1 - w_fm2 - w_fm3 - w_fm4 - w_fm5 -
w_inpCnty - w_inpProv - w_inpLOC - w_inpAZ;
int w_fm6 = 30;
int w_Xchg = (wf1 - 5*w_fm6 - 4*pad - 2 * w_SerNo) / 3;
int qh = Hqsoframe / 2;
int rig_control_width = FREQWIDTH + 4;
@ -789,6 +796,13 @@ void cb_mnuUI(Fl_Menu_*, void *) {
dlgConfig->show();
}
void cb_mnuConfigContest(Fl_Menu_*, void*) {
progdefaults.loadDefaults();
tabsConfigure->value(tabUI);
tabsUI->value(tabContest);
dlgConfig->show();
}
void cb_mnuConfigRigCtrl(Fl_Menu_*, void*) {
progdefaults.loadDefaults();
tabsConfigure->value(tabRig);
@ -1175,6 +1189,16 @@ void cb_mnuViewer(Fl_Menu_ *, void *) {
openViewer();
}
void cb_mnuContest(Fl_Menu_ *, void *) {
if (QsoInfoFrame1A->visible()) {
QsoInfoFrame1A->hide();
QsoInfoFrame1B->show();
} else {
QsoInfoFrame1B->hide();
QsoInfoFrame1A->show();
}
}
void cb_mnuPicViewer(Fl_Menu_ *, void *) {
if (picRxWin) {
picRx->redraw();
@ -1191,37 +1215,56 @@ void cb_sldrSquelch(Fl_Slider* o, void*) {
restoreFocus();
}
const char *zuluTime()
char zuluLogTime[5];
char zuluLogDate[9];
void zuluDateTime()
{
time_t t;
struct tm tm;
static char logtime[5];
if ((t = time(NULL)) != (time_t)-1 && gmtime_r(&t, &tm) &&
strftime(logtime, sizeof(logtime), "%H%M", &tm))
return logtime;
else
return NULL;
zuluLogTime[0] = 0;
zuluLogDate[0] = 0;
if ((t = time(NULL)) != (time_t)-1 && gmtime_r(&t, &tm)) {
snprintf(zuluLogTime, sizeof(zuluLogTime), "%02d%02d",
tm.tm_hour, tm.tm_min);
snprintf (zuluLogDate, sizeof(zuluLogDate), "%4d%02d%02d",
1900 + tm.tm_year, tm.tm_mon + 1, tm.tm_mday);
}
}
bool oktoclear = true;
void qsoTime_cb(Fl_Widget *b, void *)
void updateOutSerNo()
{
string qsotime = zuluTime();
LOG_INFO(qsotime.c_str());
inpTime->value(qsotime.c_str());
// inpTime->value(zuluTime());
// oktoclear = false;
restoreFocus();
if (contest_count.count) {
char szcnt[10] = "";
contest_count.Format(progdefaults.ContestDigits, progdefaults.UseLeadingZeros);
snprintf(szcnt, sizeof(szcnt), contest_count.fmt.c_str(), contest_count.count);
outSerNo->value(szcnt);
} else
outSerNo->value("");
}
void clearQSO()
{
Fl_Input* in[] = { inpCall, inpName, inpRstIn, inpRstOut,
inpQth, inpNotes, inpLoc, inpAZ, inpSerNo, inpVEprov, inpCnty };
Fl_Input* in[] = {
inpCall, inpName, inpRstIn, inpRstOut,
inpQth, inpLoc, inpAZ, inpCnty, inpVEprov,
inpSerNo, outSerNo, inpXchg1, inpXchg2, inpXchg3, inpNotes };
for (size_t i = 0; i < sizeof(in)/sizeof(*in); i++)
in[i]->value("");
inpTime->value(zuluTime());
if (progdefaults.fixed599) {
inpRstIn->value("599");
inpRstOut->value("599");
}
updateOutSerNo();
lblDup->hide();
}
void cb_ResetSerNbr()
{
contest_count.count = progdefaults.ContestStart;
updateOutSerNo();
}
void cb_log(Fl_Widget* w, void*)
@ -1231,19 +1274,8 @@ void cb_log(Fl_Widget* w, void*)
SearchLastQSO(inpCall->value());
}
void showsizes()
{
std::cout << fl_digi_main->w() << std::endl;
std::cout << fl_digi_main->h() << std::endl;
std::cout << wf1 << std::endl;
std::cout << QsoInfoFrame->x() << ", " << QsoInfoFrame->w() << std::endl;
std::cout << QsoInfoFrame1->x() << ", " << QsoInfoFrame1->w() << std::endl;
std::cout << QsoInfoFrame2->x() << ", " << QsoInfoFrame2->w() << std::endl;
}
void qsoClear_cb(Fl_Widget *b, void *)
{
// showsizes();
if (progdefaults.NagMe) {
if (oktoclear || fl_choice(_("Clear log fields?"), _("Cancel"), _("OK"), NULL) == 1) {
clearQSO();
@ -1467,6 +1499,7 @@ bool clean_exit(void) {
#define RIGCONTROL_MLABEL _("Rig Control")
#define VIEW_MLABEL _("View")
#define MFSK_IMAGE_MLABEL _("MFSK Image")
#define CONTEST_MLABEL _("Contest")
Fl_Menu_Item menu_[] = {
{_("&Files"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL, 0, 14, 0},
@ -1609,6 +1642,13 @@ Fl_Menu_Item menu_[] = {
{ make_icon_label(_("PSK Browser")), 0, (Fl_Callback*)cb_mnuViewer, 0, 0, _FL_MULTI_LABEL, 0, 14, 0},
{ make_icon_label(RIGCONTROL_MLABEL, multimedia_player_icon), 0, (Fl_Callback*)cb_mnuRig, 0, 0, _FL_MULTI_LABEL, 0, 14, 0},
{ make_icon_label(_("Logbook")), 0, (Fl_Callback*)cb_mnuShowLogbook, 0, 0, _FL_MULTI_LABEL, 0, 14, 0},
{0,0,0,0,0,0,0,0,0},
{ CONTEST_MLABEL, 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL, 0, 14, 0},
{ _("On/Off"), 0, (Fl_Callback*)cb_mnuContest, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ _("Config"), 0, (Fl_Callback*)cb_mnuConfigContest, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
{0,0,0,0,0,0,0,0,0},
{" ", 0, 0, 0, FL_MENU_INACTIVE, FL_NORMAL_LABEL, 0, 14, 0},
@ -2145,67 +2185,98 @@ void create_fl_digi_main() {
WNOM - rightof(QsoButtonFrame) - pad, Hqsoframe + Hnotes);
QsoInfoFrame1 = new Fl_Group(x_qsoframe, Hmenu, wf1, Hqsoframe + Hnotes);
// QsoInfoFrame1->box(FL_BORDER_BOX);
inpFreq = new Fl_Input2(x_qsoframe + pad, y2, w_inpFreq, qh - pad, _("QSO Freq"));
inpFreq->type(FL_NORMAL_OUTPUT);
inpFreq->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpTime = new Fl_Input2(rightof(inpFreq) + pad, y2, w_inpTime, qh - pad, _("Time"));
inpTime = new Fl_Output(rightof(inpFreq) + pad, y2, w_inpTime, qh - pad, _("Time"));
inpTime->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
qsoTime = new Fl_Button(rightof(inpTime), y2, w_qsoTime, qh - pad);
qsoTime->image(new Fl_Pixmap(time_icon));
qsoTime->callback(qsoTime_cb, 0);
inpCall = new Fl_Input2(rightof(qsoTime) + pad, y2, w_inpCall, qh - pad, _("Call"));
inpCall = new Fl_Input2(rightof(inpTime) + pad, y2, w_inpCall, qh - pad, _("Call"));
inpCall->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpName = new Fl_Input2(rightof(inpCall) + pad, y2, w_inpName, qh - pad, _("Name"));
inpName->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpRstIn = new Fl_Input2(rightof(inpName) + pad, y2, w_inpRstIn, qh - pad, "In");
inpRstIn = new Fl_Input2(rightof(inpName) + pad, y2, w_inpRstIn, qh - pad, _("In"));
inpRstIn->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpRstOut = new Fl_Input2(rightof(inpRstIn) + pad, y2, w_inpRstOut, qh - pad, "Out");
inpRstOut = new Fl_Input2(rightof(inpRstIn) + pad, y2, w_inpRstOut, qh - pad, _("Out"));
inpRstOut->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
lblDup = new Fl_Box(rightof(inpCall) - w_inpCall/2 - 40, Hmenu + 1, 80, qh - pad, _("*** DUP ***"));
lblDup->labelcolor(FL_RED);
lblDup->hide();
inpSerNo = new Fl_Input2(rightof(inpRstOut) + pad, y2, w_inpSerNo, qh - pad, "##");
inpSerNo->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
Fl_Box *fm1box = new Fl_Box(x_qsoframe, y3, w_fm1, qh - pad, "QTH");
fm1box->align(FL_ALIGN_INSIDE);
inpQth = new Fl_Input2( rightof(fm1box), y3, w_inpQth, qh - pad, "");
inpQth->align(FL_ALIGN_INSIDE);
QsoInfoFrame1A = new Fl_Group (x_qsoframe, y3 - 1, wf1, Hnotes);
Fl_Box *fm1box = new Fl_Box(x_qsoframe, y3, w_fm1, qh - pad, _("QTH"));
fm1box->align(FL_ALIGN_INSIDE);
inpQth = new Fl_Input2( rightof(fm1box), y3, w_inpQth, qh - pad, "");
inpQth->align(FL_ALIGN_INSIDE);
Fl_Box *fm2box = new Fl_Box(rightof(inpQth), y3, w_fm2, qh - pad, "St");
fm2box->align(FL_ALIGN_INSIDE);
inpCnty = new Fl_Input2(rightof(fm2box), y3, w_inpCnty, qh - pad, "");
inpCnty->tooltip("US State or Country");
inpCnty->align(FL_ALIGN_INSIDE);
Fl_Box *fm2box = new Fl_Box(rightof(inpQth), y3, w_fm2, qh - pad, _("St"));
fm2box->align(FL_ALIGN_INSIDE);
inpCnty = new Fl_Input2(rightof(fm2box), y3, w_inpCnty, qh - pad, "");
inpCnty->tooltip(_("US State or Country"));
inpCnty->align(FL_ALIGN_INSIDE);
Fl_Box *fm3box = new Fl_Box(rightof(inpCnty), y3, w_fm3, qh - pad, "Pr");
fm3box->align(FL_ALIGN_INSIDE);
inpVEprov = new Fl_Input2(rightof(fm3box), y3, w_inpProv, qh - pad, "");
inpVEprov->tooltip("Can. Province");
inpVEprov->align(FL_ALIGN_INSIDE);
Fl_Box *fm3box = new Fl_Box(rightof(inpCnty), y3, w_fm3, qh - pad, _("Pr"));
fm3box->align(FL_ALIGN_INSIDE);
inpVEprov = new Fl_Input2(rightof(fm3box), y3, w_inpProv, qh - pad, "");
inpVEprov->tooltip(_("Can. Province"));
inpVEprov->align(FL_ALIGN_INSIDE);
Fl_Box *fm4box = new Fl_Box(rightof(inpVEprov), y3, w_fm4, qh - pad, "Loc");
fm4box->align(FL_ALIGN_INSIDE);
inpLoc = new Fl_Input2(rightof(fm4box), y3, w_inpLOC, qh - pad, "");
inpLoc->align(FL_ALIGN_INSIDE);
Fl_Box *fm4box = new Fl_Box(rightof(inpVEprov), y3, w_fm4, qh - pad, _("Loc"));
fm4box->align(FL_ALIGN_INSIDE);
inpLoc = new Fl_Input2(rightof(fm4box), y3, w_inpLOC, qh - pad, "");
inpLoc->align(FL_ALIGN_INSIDE);
Fl_Box *fm5box = new Fl_Box(rightof(inpLoc), y3, w_fm5, qh - pad, "Az");
fm5box->align(FL_ALIGN_INSIDE);
inpAZ = new Fl_Input2(rightof(fm5box), y3, w_inpAZ, qh - pad, "");
inpAZ->align(FL_ALIGN_INSIDE);
Fl_Box *fm5box = new Fl_Box(rightof(inpLoc), y3, w_fm5, qh - pad, _("Az"));
fm5box->align(FL_ALIGN_INSIDE);
inpAZ = new Fl_Input2(rightof(fm5box), y3, w_inpAZ, qh - pad, "");
inpAZ->align(FL_ALIGN_INSIDE);
QsoInfoFrame1A->end();
QsoInfoFrame1B = new Fl_Group (x_qsoframe, y3 - 1, wf1, Hnotes);
Fl_Box *fm6box = new Fl_Box(x_qsoframe, y3, w_fm6, qh - pad, _("#In"));
fm6box->align(FL_ALIGN_INSIDE);
inpSerNo = new Fl_Input2(rightof(fm6box), y3, w_SerNo, qh - pad, "");
inpSerNo->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpSerNo->tooltip(_("Received serial number"));
Fl_Box *fm7box = new Fl_Box(rightof(inpSerNo) + pad, y3, w_fm6, qh - pad, _("#Out"));
fm7box->align(FL_ALIGN_INSIDE);
outSerNo = new Fl_Output(rightof(fm7box), y3, w_SerNo, qh - pad, "");
outSerNo->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
outSerNo->tooltip(_("Sent serial number (read only)"));
Fl_Box *fm8box = new Fl_Box(rightof(outSerNo) + pad, y3, w_fm6, qh - pad, _("X_1"));
fm7box->align(FL_ALIGN_INSIDE);
inpXchg1 = new Fl_Input2(rightof(fm8box), y3, w_Xchg, qh - pad, "");
inpXchg1->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpXchg1->tooltip(_("Contest exchange #1"));
Fl_Box *fm9box = new Fl_Box(rightof(inpXchg1) + pad, y3, w_fm6, qh - pad, _("X_2"));
fm9box->align(FL_ALIGN_INSIDE);
inpXchg2 = new Fl_Input2(rightof(fm9box), y3, w_Xchg, qh - pad, "");
inpXchg2->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpXchg2->tooltip(_("Contest exchange #2"));
Fl_Box *fm10box = new Fl_Box(rightof(inpXchg2) + pad, y3, w_fm6, qh - pad, _("X_3"));
fm10box->align(FL_ALIGN_INSIDE);
inpXchg3 = new Fl_Input2(rightof(fm10box), y3, w_Xchg, qh - pad, "");
inpXchg3->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpXchg3->tooltip(_("Contest exchange #3"));
QsoInfoFrame1B->end();
QsoInfoFrame1B->hide();
QsoInfoFrame1->resizable(NULL);
QsoInfoFrame1->end();
QsoInfoFrame2 = new Fl_Group(x_qsoframe + wf1 + pad, Hmenu,
WNOM - rightof(QsoInfoFrame1) - 2*pad, Hqsoframe + Hnotes);
// QsoInfoFrame2->box(FL_BORDER_BOX);
inpNotes = new Fl_Input2(x_qsoframe + wf1 + pad, y2,
WNOM - rightof(QsoInfoFrame1) - 2*pad, qh + Hnotes - pad, _("Notes"));
@ -2224,7 +2295,6 @@ void create_fl_digi_main() {
Y = Hmenu + Hqsoframe + Hnotes + pad;
// Fl_Widget* logfields[] = { inpFreq, inpTime, inpCall, inpName, inpRstIn,
Fl_Widget* logfields[] = { inpCall, inpName, inpRstIn,
inpRstOut, inpQth, inpAZ, inpLoc, inpNotes };
for (size_t i = 0; i < sizeof(logfields)/sizeof(*logfields); i++)

Wyświetl plik

@ -115,8 +115,10 @@ public:
protected:
enum { RX_MENU_QRZ_THIS, RX_MENU_CALL, RX_MENU_NAME, RX_MENU_QTH,
RX_MENU_STATE, RX_MENU_PROVINCE, RX_MENU_SERIAL,
RX_MENU_LOC, RX_MENU_RST_IN, RX_MENU_DIV, RX_MENU_COPY,
RX_MENU_STATE, RX_MENU_PROVINCE,
RX_MENU_LOC, RX_MENU_RST_IN,
RX_MENU_SERIAL, RX_MENU_X1, RX_MENU_X2, RX_MENU_X3,
RX_MENU_DIV, RX_MENU_COPY,
RX_MENU_CLEAR, RX_MENU_SELECT_ALL,
#if 0 //#ifndef NDEBUG
RX_MENU_READ,

Wyświetl plik

@ -17,15 +17,11 @@ extern Fl_Input2 *inpMyCallsign;
extern Fl_Input2 *inpMyName;
extern Fl_Input2 *inpMyQth;
extern Fl_Input2 *inpMyLocator;
#include <FL/Fl_Check_Button.H>
extern Fl_Check_Button *btnUseLeadingZeros;
#include <FL/Fl_Value_Input.H>
extern Fl_Value_Input *nbrContestStart;
extern Fl_Value_Input *nbrContestDigits;
extern Fl_Input2 *inpMyAntenna;
extern Fl_Group *tabUI;
extern Fl_Tabs *tabsUI;
extern Fl_Group *tabUserInterface;
#include <FL/Fl_Check_Button.H>
extern Fl_Check_Button *btnShowTooltips;
extern Fl_Check_Button *chkMenuIcons;
#include <FL/Fl_Choice.H>
@ -42,22 +38,29 @@ extern Fl_Check_Button *btnDockedRigControl;
extern Fl_Check_Button *btnCheckButtons;
extern Fl_Group *tabContest;
#include <FL/Fl_Box.H>
extern Fl_Box *lblLabels;
extern Fl_Input2 *inpXch1;
extern Fl_Input2 *inpXch2;
extern Fl_Input2 *inpXch3;
extern Fl_Input2 *inpXch4;
extern Fl_Box *lblSend;
extern Fl_Input2 *inpSend1;
extern Fl_Input2 *inpSend2;
extern Fl_Input2 *inpSend3;
extern Fl_Input2 *inpSend4;
extern Fl_Check_Button *chk599;
extern Fl_Check_Button *btn599;
extern Fl_Check_Button *btnCutNbrs;
extern Fl_Check_Button *btnUseLeadingZeros;
#include <FL/Fl_Value_Input.H>
extern Fl_Value_Input *nbrContestStart;
extern Fl_Value_Input *nbrContestDigits;
#include <FL/Fl_Button.H>
extern Fl_Button *btnResetSerNbr;
extern Fl_Check_Button *btnDupBand;
extern Fl_Check_Button *btnDupState;
extern Fl_Check_Button *btnDupXchg1;
extern Fl_Check_Button *btnDupXchg2;
extern Fl_Check_Button *btnDupXchg3;
extern Fl_Check_Button *btnDupMode;
extern Fl_Check_Button *btnDupCheckOn;
extern Fl_Group *tabWaterfall;
extern Fl_Tabs *tabsWaterfall;
#include "colorbox.h"
extern colorbox *WF_Palette;
#include <FL/Fl_Button.H>
extern Fl_Button *btnColor[9];
extern Fl_Button *btnLoadPalette;
extern Fl_Button *btnSavePalette;

Wyświetl plik

@ -230,10 +230,22 @@
ELEM_(int, RX_corr, "RXCORR", 0) \
ELEM_(int, TX_corr, "TXCORR", 0) \
ELEM_(int, TxOffset, "TXOFFSET", 0) \
/* Contest controls */ \
/* Contest controls and Logbook */ \
ELEM_(std::string, logbookfilename, "LOGBOOKFILENAME", "") \
ELEM_(bool, fixed599, "FIXED599", false) \
ELEM_(bool, UseLeadingZeros, "USELEADINGZEROS", true) \
ELEM_(bool, cutnbrs, "CUTNBRS", false) \
ELEM_(bool, dupmode, "DUPMODE", true) \
ELEM_(bool, dupband, "DUPBAND", true) \
ELEM_(bool, dupstate, "DUPSTATE", false) \
ELEM_(bool, dupxchg1, "DUPXCHG1", false) \
ELEM_(bool, dupxchg2, "DUPXCHG2", false) \
ELEM_(bool, dupxchg3, "DUPXCHG3", false) \
ELEM_(int, ContestStart, "CONTESTSTART", 0) \
ELEM_(int, ContestDigits, "CONTESTDIGITS", 4) \
ELEM_(std::string, Xchg1, "XCGH1", "") \
ELEM_(std::string, Xchg2, "XCGH2", "") \
ELEM_(std::string, Xchg3, "XCGH3", "") \
/* Macro timer constants and controls */ \
ELEM_(bool, useTimer, "USETIMER", false) \
ELEM_(int, macronumber, "MACRONUMBER", 0) \

Wyświetl plik

@ -46,7 +46,11 @@ enum ADIF_FIELD_POS {
SRX,
TEN_TEN,
VE_PROV,
EXPORT, // internal use in fl_logbook
// following fields are specific to fldigi's logbook
XCHG1, // contest exchange field #1
XCHG2, // contest exchange field #2
XCHG3, // contest exchange field #3
EXPORT, // flag used internally in fldigi's logbook
NUMFIELDS // counter for number of fields in enum
};

Wyświetl plik

@ -70,7 +70,7 @@ extern Fl_Slider *sldrSquelch;
extern Progress *pgrsSquelch;
extern Fl_Button *btnMacro[];
extern Fl_Input2 *inpFreq;
extern Fl_Input2 *inpTime;
extern Fl_Output *inpTime;
extern Fl_Input2 *inpCall;
extern Fl_Input2 *inpName;
extern Fl_Input2 *inpRstIn;
@ -78,6 +78,11 @@ extern Fl_Input2 *inpRstOut;
extern Fl_Input2 *inpQth;
extern Fl_Input2 *inpCnty;
extern Fl_Input2 *inpSerNo;
extern Fl_Output *outSerNo;
extern Fl_Input2 *inpXchg1;
extern Fl_Input2 *inpXchg2;
extern Fl_Input2 *inpXchg3;
extern Fl_Box *lblDup;
extern Fl_Input2 *inpVEprov;
extern Fl_Input2 *inpLoc;
extern Fl_Input2 *inpNotes;
@ -194,6 +199,12 @@ extern void set_rtty_tab_widgets();
extern void set_olivia_tab_widgets();
extern void stopMacroTimer();
extern void cb_ResetSerNbr();
extern void updateOutSerNo();
extern void zuluDateTime();
extern char zuluLogTime[];
extern char zuluLogDate[];
Fl_Color adjust_color(Fl_Color fg, Fl_Color bg);

Wyświetl plik

@ -38,10 +38,13 @@ extern Fl_Button *bUpdateCancel;
extern void cb_btnDelete(Fl_Button*, void*);
extern Fl_Button *bDelete;
extern Fl_Input2 *txtNbrRecs_log;
extern Fl_Input2 *inpSerNoOut_log;
extern Fl_Input2 *inpSerNoIn_log;
extern Fl_Input2 *inpCnty_log;
extern Fl_Input2 *inpVE_Prov_log;
extern Fl_Input2 *inpSerNoOut_log;
extern Fl_Input2 *inpSerNoIn_log;
extern Fl_Input2 *inpXchg1_log;
extern Fl_Input2 *inpXchg2_log;
extern Fl_Input2 *inpXchg3_log;
extern Fl_Input2 *inpSearchString;
extern void cb_search(Fl_Button*, void*);
extern Fl_Button *bSearchPrev;

Wyświetl plik

@ -17,6 +17,8 @@ extern cQsoDb qsodb;
extern cAdifIO adifFile;
extern std::string logbook_filename;
extern bool EnableDupCheck;
extern void loadBrowser();
extern void Export_log();

Wyświetl plik

@ -51,32 +51,42 @@ public:
class cQsoDb {
private:
cQsoRec * qsorec;
int maxrecs;
int nbrrecs;
int dirty;
cQsoRec * qsorec;
int maxrecs;
int nbrrecs;
int dirty;
public:
cQsoDb ();
~cQsoDb ();
static bool reverse;
void deleteRecs();
void clearDatabase();
void isdirty(int n) {dirty = n;}
int isdirty() {return dirty;}
void qsoNewRec (cQsoRec *);
void qsoDelRec (int);
void qsoUpdRec (int, cQsoRec *);
int qsoFindRec (cQsoRec *);
cQsoRec *getRec (int n) {return &qsorec[n];};
int nbrRecs () {return nbrrecs;};
bool qsoIsValidFile(const char *);
int qsoReadFile (const char *);
int qsoWriteFile (const char *);
void SortByDate();
void SortByCall ();
void SortByMode ();
void SortByFreq ();
void sort_reverse(bool rev) { reverse = rev;}
cQsoDb ();
~cQsoDb ();
static bool reverse;
void deleteRecs();
void clearDatabase();
void isdirty(int n) {dirty = n;}
int isdirty() {return dirty;}
void qsoNewRec (cQsoRec *);
void qsoDelRec (int);
void qsoUpdRec (int, cQsoRec *);
int qsoFindRec (cQsoRec *);
cQsoRec *getRec (int n) {return &qsorec[n];};
int nbrRecs () {return nbrrecs;};
bool qsoIsValidFile(const char *);
int qsoReadFile (const char *);
int qsoWriteFile (const char *);
void SortByDate();
void SortByCall ();
void SortByMode ();
void SortByFreq ();
void sort_reverse(bool rev) { reverse = rev;}
bool duplicate(
const char *callsign,
const char *freq, bool chkfreq,
const char *state, bool chkstate,
const char *mode, bool chkmode,
const char *xchg1, bool chkxchg1,
const char *xchg2, bool chkxchg2,
const char *xchg3, bool chkxchg3 );
};
#endif

Wyświetl plik

@ -52,6 +52,10 @@ FIELD fields[] = {
{SRX, "SRX", 5}, // 33 - received serial number for a contest QSO
{TEN_TEN, "TEN_TEN", 10}, // 36 - ten ten # of other station
{VE_PROV, "VE_PROV", 2}, // 40 - 2 letter abbreviation for Canadian Province
// fldigi specific fields
{XCHG1, "XCHG1", 20}, // 41 - contest exchange #1
{XCHG2, "XCHG2", 20}, // 41 - contest exchange #2
{XCHG3, "XCHG3", 20}, // 41 - contest exchange #3
{EXPORT, "EXPORT", 1} // 41 - used to indicate record is to be exported
};

Wyświetl plik

@ -73,13 +73,19 @@ Fl_Button *bDelete=(Fl_Button *)0;
Fl_Input2 *txtNbrRecs_log=(Fl_Input2 *)0;
Fl_Input2 *inpCnty_log=(Fl_Input2 *)0;
Fl_Input2 *inpVE_Prov_log=(Fl_Input2 *)0;
Fl_Input2 *inpSerNoOut_log=(Fl_Input2 *)0;
Fl_Input2 *inpSerNoIn_log=(Fl_Input2 *)0;
Fl_Input2 *inpCnty_log=(Fl_Input2 *)0;
Fl_Input2 *inpXchg1_log=(Fl_Input2 *)0;
Fl_Input2 *inpVE_Prov_log=(Fl_Input2 *)0;
Fl_Input2 *inpXchg2_log=(Fl_Input2 *)0;
Fl_Input2 *inpXchg3_log=(Fl_Input2 *)0;
Fl_Input2 *inpSearchString=(Fl_Input2 *)0;
@ -108,13 +114,13 @@ void create_logbook_dialogs() {
wExport->set_modal();
wExport->end();
} // Fl_Double_Window* wExport
{ dlgLogbook = new Fl_Double_Window(570, 324, _("Logbook"));
{ dlgLogbook = new Fl_Double_Window(570, 320, _("Logbook"));
dlgLogbook->color(FL_DARK1);
{ editGroup = new Fl_Group(2, 4, 565, 193);
{ editGroup = new Fl_Group(2, 2, 565, 200);
editGroup->box(FL_ENGRAVED_FRAME);
editGroup->color(FL_LIGHT2);
editGroup->labelsize(12);
{ inpDate_log = new Fl_DateInput(5, 22, 100, 22, _("Date"));
{ inpDate_log = new Fl_DateInput(5, 20, 100, 22, _("Date"));
inpDate_log->box(FL_DOWN_BOX);
inpDate_log->color(FL_BACKGROUND2_COLOR);
inpDate_log->selection_color(FL_SELECTION_COLOR);
@ -122,13 +128,12 @@ void create_logbook_dialogs() {
inpDate_log->labelfont(0);
inpDate_log->labelsize(12);
inpDate_log->labelcolor(FL_FOREGROUND_COLOR);
inpDate_log->textfont(13);
inpDate_log->textsize(12);
inpDate_log->align(FL_ALIGN_TOP_LEFT);
inpDate_log->when(FL_WHEN_RELEASE);
inpDate_log->format(2);
} // Fl_DateInput* inpDate_log
{ inpTime_log = new Fl_Input2(107, 22, 40, 22, _("Time"));
{ inpTime_log = new Fl_Input2(107, 20, 40, 22, _("Time"));
inpTime_log->box(FL_DOWN_BOX);
inpTime_log->color(FL_BACKGROUND2_COLOR);
inpTime_log->selection_color(FL_SELECTION_COLOR);
@ -136,12 +141,11 @@ void create_logbook_dialogs() {
inpTime_log->labelfont(0);
inpTime_log->labelsize(12);
inpTime_log->labelcolor(FL_FOREGROUND_COLOR);
inpTime_log->textfont(13);
inpTime_log->textsize(12);
inpTime_log->align(FL_ALIGN_TOP_LEFT);
inpTime_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpTime_log
{ inpCall_log = new Fl_Input2(149, 22, 105, 22, _("Call"));
{ inpCall_log = new Fl_Input2(149, 20, 105, 22, _("Call"));
inpCall_log->box(FL_DOWN_BOX);
inpCall_log->color(FL_BACKGROUND2_COLOR);
inpCall_log->selection_color(FL_SELECTION_COLOR);
@ -149,12 +153,11 @@ void create_logbook_dialogs() {
inpCall_log->labelfont(0);
inpCall_log->labelsize(12);
inpCall_log->labelcolor(FL_FOREGROUND_COLOR);
inpCall_log->textfont(13);
inpCall_log->textsize(12);
inpCall_log->align(FL_ALIGN_TOP_LEFT);
inpCall_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpCall_log
{ inpName_log = new Fl_Input2(256, 22, 60, 22, _("Name"));
{ inpName_log = new Fl_Input2(256, 20, 60, 22, _("Name"));
inpName_log->box(FL_DOWN_BOX);
inpName_log->color(FL_BACKGROUND2_COLOR);
inpName_log->selection_color(FL_SELECTION_COLOR);
@ -162,12 +165,11 @@ void create_logbook_dialogs() {
inpName_log->labelfont(0);
inpName_log->labelsize(12);
inpName_log->labelcolor(FL_FOREGROUND_COLOR);
inpName_log->textfont(13);
inpName_log->textsize(12);
inpName_log->align(FL_ALIGN_TOP_LEFT);
inpName_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpName_log
{ inpFreq_log = new Fl_Input2(317, 22, 80, 22, _("Freq."));
{ inpFreq_log = new Fl_Input2(317, 20, 80, 22, _("Freq."));
inpFreq_log->box(FL_DOWN_BOX);
inpFreq_log->color(FL_BACKGROUND2_COLOR);
inpFreq_log->selection_color(FL_SELECTION_COLOR);
@ -175,12 +177,11 @@ void create_logbook_dialogs() {
inpFreq_log->labelfont(0);
inpFreq_log->labelsize(12);
inpFreq_log->labelcolor(FL_FOREGROUND_COLOR);
inpFreq_log->textfont(13);
inpFreq_log->textsize(12);
inpFreq_log->align(FL_ALIGN_TOP_LEFT);
inpFreq_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpFreq_log
{ inpMode_log = new Fl_Input2(398, 22, 80, 22, _("Mode"));
{ inpMode_log = new Fl_Input2(398, 20, 80, 22, _("Mode"));
inpMode_log->box(FL_DOWN_BOX);
inpMode_log->color(FL_BACKGROUND2_COLOR);
inpMode_log->selection_color(FL_SELECTION_COLOR);
@ -188,12 +189,11 @@ void create_logbook_dialogs() {
inpMode_log->labelfont(0);
inpMode_log->labelsize(12);
inpMode_log->labelcolor(FL_FOREGROUND_COLOR);
inpMode_log->textfont(13);
inpMode_log->textsize(12);
inpMode_log->align(FL_ALIGN_TOP_LEFT);
inpMode_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpMode_log
{ inpRstR_log = new Fl_Input2(479, 22, 40, 22, _("Rst-R"));
{ inpRstR_log = new Fl_Input2(479, 20, 40, 22, _("Rst-R"));
inpRstR_log->box(FL_DOWN_BOX);
inpRstR_log->color(FL_BACKGROUND2_COLOR);
inpRstR_log->selection_color(FL_SELECTION_COLOR);
@ -201,12 +201,11 @@ void create_logbook_dialogs() {
inpRstR_log->labelfont(0);
inpRstR_log->labelsize(12);
inpRstR_log->labelcolor(FL_FOREGROUND_COLOR);
inpRstR_log->textfont(13);
inpRstR_log->textsize(12);
inpRstR_log->align(FL_ALIGN_TOP_LEFT);
inpRstR_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpRstR_log
{ inpRstS_log = new Fl_Input2(521, 22, 40, 22, _("Rst-S"));
{ inpRstS_log = new Fl_Input2(521, 20, 40, 22, _("Rst-S"));
inpRstS_log->box(FL_DOWN_BOX);
inpRstS_log->color(FL_BACKGROUND2_COLOR);
inpRstS_log->selection_color(FL_SELECTION_COLOR);
@ -214,12 +213,11 @@ void create_logbook_dialogs() {
inpRstS_log->labelfont(0);
inpRstS_log->labelsize(12);
inpRstS_log->labelcolor(FL_FOREGROUND_COLOR);
inpRstS_log->textfont(13);
inpRstS_log->textsize(12);
inpRstS_log->align(FL_ALIGN_TOP_LEFT);
inpRstS_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpRstS_log
{ inpQth_log = new Fl_Input2(5, 58, 135, 22, _("Qth"));
{ inpQth_log = new Fl_Input2(5, 56, 135, 22, _("Qth"));
inpQth_log->box(FL_DOWN_BOX);
inpQth_log->color(FL_BACKGROUND2_COLOR);
inpQth_log->selection_color(FL_SELECTION_COLOR);
@ -227,12 +225,11 @@ void create_logbook_dialogs() {
inpQth_log->labelfont(0);
inpQth_log->labelsize(12);
inpQth_log->labelcolor(FL_FOREGROUND_COLOR);
inpQth_log->textfont(13);
inpQth_log->textsize(12);
inpQth_log->align(FL_ALIGN_TOP_LEFT);
inpQth_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpQth_log
{ inpLoc_log = new Fl_Input2(283, 58, 75, 22, _("Loc"));
{ inpLoc_log = new Fl_Input2(283, 56, 75, 22, _("Loc"));
inpLoc_log->tooltip(_("Stations grid square"));
inpLoc_log->box(FL_DOWN_BOX);
inpLoc_log->color(FL_BACKGROUND2_COLOR);
@ -245,7 +242,7 @@ void create_logbook_dialogs() {
inpLoc_log->align(FL_ALIGN_TOP_LEFT);
inpLoc_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpLoc_log
{ inpComment_log = new Fl_Input2(5, 129, 438, 40, _("Comment"));
{ inpComment_log = new Fl_Input2(5, 94, 438, 30, _("Comment"));
inpComment_log->type(4);
inpComment_log->box(FL_DOWN_BOX);
inpComment_log->color(FL_BACKGROUND2_COLOR);
@ -259,7 +256,7 @@ void create_logbook_dialogs() {
inpComment_log->align(FL_ALIGN_TOP_LEFT);
inpComment_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpComment_log
{ Fl_DateInput* o = inpQSLrcvddate_log = new Fl_DateInput(359, 58, 100, 22, _("QSL-rcvd"));
{ Fl_DateInput* o = inpQSLrcvddate_log = new Fl_DateInput(359, 56, 100, 22, _("QSL-rcvd"));
inpQSLrcvddate_log->box(FL_DOWN_BOX);
inpQSLrcvddate_log->color(FL_BACKGROUND2_COLOR);
inpQSLrcvddate_log->selection_color(FL_SELECTION_COLOR);
@ -267,13 +264,12 @@ void create_logbook_dialogs() {
inpQSLrcvddate_log->labelfont(0);
inpQSLrcvddate_log->labelsize(12);
inpQSLrcvddate_log->labelcolor(FL_FOREGROUND_COLOR);
inpQSLrcvddate_log->textfont(13);
inpQSLrcvddate_log->textsize(12);
inpQSLrcvddate_log->align(FL_ALIGN_TOP_LEFT);
inpQSLrcvddate_log->when(FL_WHEN_RELEASE);
o->format(2);
} // Fl_DateInput* inpQSLrcvddate_log
{ Fl_DateInput* o = inpQSLsentdate_log = new Fl_DateInput(461, 58, 100, 22, _("QSL-sent"));
{ Fl_DateInput* o = inpQSLsentdate_log = new Fl_DateInput(461, 56, 100, 22, _("QSL-sent"));
inpQSLsentdate_log->box(FL_DOWN_BOX);
inpQSLsentdate_log->color(FL_BACKGROUND2_COLOR);
inpQSLsentdate_log->selection_color(FL_SELECTION_COLOR);
@ -281,34 +277,33 @@ void create_logbook_dialogs() {
inpQSLsentdate_log->labelfont(0);
inpQSLsentdate_log->labelsize(12);
inpQSLsentdate_log->labelcolor(FL_FOREGROUND_COLOR);
inpQSLsentdate_log->textfont(13);
inpQSLsentdate_log->textsize(12);
inpQSLsentdate_log->align(FL_ALIGN_TOP_LEFT);
inpQSLsentdate_log->when(FL_WHEN_RELEASE);
o->format(2);
} // Fl_DateInput* inpQSLsentdate_log
{ bNewSave = new Fl_Button(120, 171, 55, 22, _("New"));
{ bNewSave = new Fl_Button(120, 175, 55, 22, _("New"));
bNewSave->shortcut(0x8004e);
bNewSave->color(FL_LIGHT1);
bNewSave->selection_color((Fl_Color)48);
bNewSave->labelsize(12);
bNewSave->callback((Fl_Callback*)cb_btnNewSave);
} // Fl_Button* bNewSave
{ bUpdateCancel = new Fl_Button(192, 171, 55, 22, _("Update"));
{ bUpdateCancel = new Fl_Button(192, 175, 55, 22, _("Update"));
bUpdateCancel->shortcut(0x80055);
bUpdateCancel->color(FL_LIGHT1);
bUpdateCancel->selection_color((Fl_Color)48);
bUpdateCancel->labelsize(12);
bUpdateCancel->callback((Fl_Callback*)cb_btnUpdateCancel);
} // Fl_Button* bUpdateCancel
{ bDelete = new Fl_Button(264, 171, 55, 22, _("Delete"));
{ bDelete = new Fl_Button(264, 175, 55, 22, _("Delete"));
bDelete->shortcut(0x80044);
bDelete->color(FL_LIGHT1);
bDelete->selection_color((Fl_Color)48);
bDelete->labelsize(12);
bDelete->callback((Fl_Callback*)cb_btnDelete);
} // Fl_Button* bDelete
{ txtNbrRecs_log = new Fl_Input2(38, 171, 65, 22, _("Recs"));
{ txtNbrRecs_log = new Fl_Input2(38, 175, 65, 22, _("Recs"));
txtNbrRecs_log->box(FL_DOWN_BOX);
txtNbrRecs_log->color(FL_BACKGROUND2_COLOR);
txtNbrRecs_log->selection_color(FL_SELECTION_COLOR);
@ -320,33 +315,7 @@ void create_logbook_dialogs() {
txtNbrRecs_log->align(FL_ALIGN_LEFT);
txtNbrRecs_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* txtNbrRecs_log
{ inpSerNoOut_log = new Fl_Input2(5, 93, 75, 22, _("Ser# Sent"));
inpSerNoOut_log->tooltip(_("Contest seral # sent"));
inpSerNoOut_log->box(FL_DOWN_BOX);
inpSerNoOut_log->color(FL_BACKGROUND2_COLOR);
inpSerNoOut_log->selection_color(FL_SELECTION_COLOR);
inpSerNoOut_log->labeltype(FL_NORMAL_LABEL);
inpSerNoOut_log->labelfont(0);
inpSerNoOut_log->labelsize(12);
inpSerNoOut_log->labelcolor(FL_FOREGROUND_COLOR);
inpSerNoOut_log->textsize(12);
inpSerNoOut_log->align(FL_ALIGN_TOP_LEFT);
inpSerNoOut_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpSerNoOut_log
{ inpSerNoIn_log = new Fl_Input2(84, 93, 75, 22, _("Ser# Rcvd"));
inpSerNoIn_log->tooltip(_("Contest serial # received"));
inpSerNoIn_log->box(FL_DOWN_BOX);
inpSerNoIn_log->color(FL_BACKGROUND2_COLOR);
inpSerNoIn_log->selection_color(FL_SELECTION_COLOR);
inpSerNoIn_log->labeltype(FL_NORMAL_LABEL);
inpSerNoIn_log->labelfont(0);
inpSerNoIn_log->labelsize(12);
inpSerNoIn_log->labelcolor(FL_FOREGROUND_COLOR);
inpSerNoIn_log->textsize(12);
inpSerNoIn_log->align(FL_ALIGN_TOP_LEFT);
inpSerNoIn_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpSerNoIn_log
{ inpCnty_log = new Fl_Input2(142, 58, 110, 22, _("St. / Ctry."));
{ inpCnty_log = new Fl_Input2(142, 56, 110, 22, _("St. / Ctry."));
inpCnty_log->box(FL_DOWN_BOX);
inpCnty_log->color(FL_BACKGROUND2_COLOR);
inpCnty_log->selection_color(FL_SELECTION_COLOR);
@ -354,12 +323,11 @@ void create_logbook_dialogs() {
inpCnty_log->labelfont(0);
inpCnty_log->labelsize(12);
inpCnty_log->labelcolor(FL_FOREGROUND_COLOR);
inpCnty_log->textfont(13);
inpCnty_log->textsize(12);
inpCnty_log->align(FL_ALIGN_TOP_LEFT);
inpCnty_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpCnty_log
{ inpVE_Prov_log = new Fl_Input2(253, 58, 30, 22, _("Pr.."));
{ inpVE_Prov_log = new Fl_Input2(253, 56, 30, 22, _("Pr.."));
inpVE_Prov_log->box(FL_DOWN_BOX);
inpVE_Prov_log->color(FL_BACKGROUND2_COLOR);
inpVE_Prov_log->selection_color(FL_SELECTION_COLOR);
@ -367,14 +335,82 @@ void create_logbook_dialogs() {
inpVE_Prov_log->labelfont(0);
inpVE_Prov_log->labelsize(12);
inpVE_Prov_log->labelcolor(FL_FOREGROUND_COLOR);
inpVE_Prov_log->textfont(13);
inpVE_Prov_log->textsize(12);
inpVE_Prov_log->align(FL_ALIGN_TOP_LEFT);
inpVE_Prov_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpVE_Prov_log
{ Fl_Group* o = new Fl_Group(445, 91, 116, 78);
{ Fl_Group* o = new Fl_Group(5, 128, 440, 44);
o->box(FL_ENGRAVED_FRAME);
{ inpSearchString = new Fl_Input2(450, 114, 105, 22, _("Call Search"));
{ inpSerNoOut_log = new Fl_Input2(8, 145, 60, 22, _("Ser# out"));
inpSerNoOut_log->tooltip(_("Contest seral # sent"));
inpSerNoOut_log->box(FL_DOWN_BOX);
inpSerNoOut_log->color(FL_BACKGROUND2_COLOR);
inpSerNoOut_log->selection_color(FL_SELECTION_COLOR);
inpSerNoOut_log->labeltype(FL_NORMAL_LABEL);
inpSerNoOut_log->labelfont(0);
inpSerNoOut_log->labelsize(12);
inpSerNoOut_log->labelcolor(FL_FOREGROUND_COLOR);
inpSerNoOut_log->textsize(12);
inpSerNoOut_log->align(FL_ALIGN_TOP_LEFT);
inpSerNoOut_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpSerNoOut_log
{ inpSerNoIn_log = new Fl_Input2(71, 145, 60, 22, _("Ser# in"));
inpSerNoIn_log->tooltip(_("Contest serial # received"));
inpSerNoIn_log->box(FL_DOWN_BOX);
inpSerNoIn_log->color(FL_BACKGROUND2_COLOR);
inpSerNoIn_log->selection_color(FL_SELECTION_COLOR);
inpSerNoIn_log->labeltype(FL_NORMAL_LABEL);
inpSerNoIn_log->labelfont(0);
inpSerNoIn_log->labelsize(12);
inpSerNoIn_log->labelcolor(FL_FOREGROUND_COLOR);
inpSerNoIn_log->textsize(12);
inpSerNoIn_log->align(FL_ALIGN_TOP_LEFT);
inpSerNoIn_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpSerNoIn_log
{ inpXchg1_log = new Fl_Input2(135, 145, 100, 22, _("Xchg #1"));
inpXchg1_log->tooltip(_("Exchange #1"));
inpXchg1_log->box(FL_DOWN_BOX);
inpXchg1_log->color(FL_BACKGROUND2_COLOR);
inpXchg1_log->selection_color(FL_SELECTION_COLOR);
inpXchg1_log->labeltype(FL_NORMAL_LABEL);
inpXchg1_log->labelfont(0);
inpXchg1_log->labelsize(12);
inpXchg1_log->labelcolor(FL_FOREGROUND_COLOR);
inpXchg1_log->textsize(12);
inpXchg1_log->align(FL_ALIGN_TOP_LEFT);
inpXchg1_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpXchg1_log
{ inpXchg2_log = new Fl_Input2(239, 145, 100, 22, _("Xchg #2"));
inpXchg2_log->tooltip(_("Exchange #2"));
inpXchg2_log->box(FL_DOWN_BOX);
inpXchg2_log->color(FL_BACKGROUND2_COLOR);
inpXchg2_log->selection_color(FL_SELECTION_COLOR);
inpXchg2_log->labeltype(FL_NORMAL_LABEL);
inpXchg2_log->labelfont(0);
inpXchg2_log->labelsize(12);
inpXchg2_log->labelcolor(FL_FOREGROUND_COLOR);
inpXchg2_log->textsize(12);
inpXchg2_log->align(FL_ALIGN_TOP_LEFT);
inpXchg2_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpXchg2_log
{ inpXchg3_log = new Fl_Input2(343, 145, 100, 22, _("Xchg #3"));
inpXchg3_log->tooltip(_("Exchange #3"));
inpXchg3_log->box(FL_DOWN_BOX);
inpXchg3_log->color(FL_BACKGROUND2_COLOR);
inpXchg3_log->selection_color(FL_SELECTION_COLOR);
inpXchg3_log->labeltype(FL_NORMAL_LABEL);
inpXchg3_log->labelfont(0);
inpXchg3_log->labelsize(12);
inpXchg3_log->labelcolor(FL_FOREGROUND_COLOR);
inpXchg3_log->textsize(12);
inpXchg3_log->align(FL_ALIGN_TOP_LEFT);
inpXchg3_log->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpXchg3_log
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(445, 94, 116, 78);
o->box(FL_ENGRAVED_FRAME);
{ inpSearchString = new Fl_Input2(450, 118, 105, 22, _("Call Search"));
inpSearchString->box(FL_DOWN_BOX);
inpSearchString->color(FL_BACKGROUND2_COLOR);
inpSearchString->selection_color(FL_SELECTION_COLOR);
@ -382,12 +418,11 @@ void create_logbook_dialogs() {
inpSearchString->labelfont(0);
inpSearchString->labelsize(12);
inpSearchString->labelcolor(FL_FOREGROUND_COLOR);
inpSearchString->textfont(13);
inpSearchString->textsize(12);
inpSearchString->align(FL_ALIGN_TOP_LEFT);
inpSearchString->when(FL_WHEN_RELEASE);
} // Fl_Input2* inpSearchString
{ bSearchPrev = new Fl_Button(450, 139, 24, 22);
{ bSearchPrev = new Fl_Button(450, 143, 24, 22);
bSearchPrev->tooltip(_("Find previous"));
bSearchPrev->color(FL_LIGHT1);
bSearchPrev->selection_color((Fl_Color)48);
@ -396,7 +431,7 @@ void create_logbook_dialogs() {
bSearchPrev->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
bSearchPrev->image(new Fl_Pixmap(left_arrow_icon));
} // Fl_Button* bSearchPrev
{ bSearchNext = new Fl_Button(531, 139, 24, 22);
{ bSearchNext = new Fl_Button(531, 143, 24, 22);
bSearchNext->tooltip(_("Find next"));
bSearchNext->color(FL_LIGHT1);
bSearchNext->selection_color((Fl_Color)48);
@ -409,7 +444,7 @@ void create_logbook_dialogs() {
} // Fl_Group* o
editGroup->end();
} // Fl_Group* editGroup
{ wBrowser = new Table(2, 200, 565, 120);
{ wBrowser = new Table(2, 205, 565, 115);
wBrowser->box(FL_DOWN_FRAME);
wBrowser->color(FL_BACKGROUND2_COLOR);
wBrowser->selection_color(FL_SELECTION_COLOR);

Wyświetl plik

@ -47,142 +47,161 @@ Export_log();}
}
Fl_Window dlgLogbook {
label Logbook open
xywh {440 119 570 324} type Double color 47 resizable visible
xywh {541 111 570 320} type Double color 47 resizable visible
} {
Fl_Group editGroup {open selected
xywh {2 4 565 193} box ENGRAVED_FRAME color 52 labelsize 12
Fl_Group editGroup {open
xywh {2 2 565 200} box ENGRAVED_FRAME color 52 labelsize 12
} {
Fl_Input inpDate_log {
label Date
xywh {5 22 100 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {5 20 100 22} labelsize 12 align 5 textsize 12
code0 {\#include "calendar.h"}
code1 {inpDate_log->format(2);}
class Fl_DateInput
}
Fl_Input inpTime_log {
label Time
xywh {107 22 40 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {107 20 40 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpCall_log {
label Call
xywh {149 22 105 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {149 20 105 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpName_log {
label Name
xywh {256 22 60 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {256 20 60 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpFreq_log {
label {Freq.}
xywh {317 22 80 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {317 20 80 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpMode_log {
label Mode
xywh {398 22 80 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {398 20 80 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpRstR_log {
label {Rst-R}
xywh {479 22 40 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {479 20 40 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpRstS_log {
label {Rst-S}
xywh {521 22 40 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {521 20 40 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpQth_log {
label Qth
xywh {5 58 135 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {5 56 135 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpLoc_log {
label Loc
tooltip {Stations grid square} xywh {283 58 75 22} labelsize 12 align 5 textsize 12
tooltip {Stations grid square} xywh {283 56 75 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpComment_log {
label Comment
xywh {5 129 438 40} type Multiline labelsize 12 align 5 textfont 13 textsize 12
xywh {5 94 438 30} type Multiline labelsize 12 align 5 textfont 13 textsize 12
class Fl_Input2
}
Fl_Input inpQSLrcvddate_log {
label {QSL-rcvd}
xywh {359 58 100 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {359 56 100 22} labelsize 12 align 5 textsize 12
code1 {o->format(2);}
class Fl_DateInput
}
Fl_Input inpQSLsentdate_log {
label {QSL-sent}
xywh {461 58 100 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {461 56 100 22} labelsize 12 align 5 textsize 12
code1 {o->format(2);}
class Fl_DateInput
}
Fl_Button bNewSave {
label New
callback cb_btnNewSave
xywh {120 171 55 22} shortcut 0x8004e color 50 selection_color 48 labelsize 12
xywh {120 175 55 22} shortcut 0x8004e color 50 selection_color 48 labelsize 12
}
Fl_Button bUpdateCancel {
label Update
callback cb_btnUpdateCancel
xywh {192 171 55 22} shortcut 0x80055 color 50 selection_color 48 labelsize 12
xywh {192 175 55 22} shortcut 0x80055 color 50 selection_color 48 labelsize 12
}
Fl_Button bDelete {
label Delete
callback cb_btnDelete
xywh {264 171 55 22} shortcut 0x80044 color 50 selection_color 48 labelsize 12
xywh {264 175 55 22} shortcut 0x80044 color 50 selection_color 48 labelsize 12
}
Fl_Input txtNbrRecs_log {
label Recs
xywh {38 171 65 22} labelsize 12 textsize 12
class Fl_Input2
}
Fl_Input inpSerNoOut_log {
label {Ser\# Sent}
tooltip {Contest seral \# sent} xywh {5 93 75 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpSerNoIn_log {
label {Ser\# Rcvd}
tooltip {Contest serial \# received} xywh {84 93 75 22} labelsize 12 align 5 textsize 12
xywh {38 175 65 22} labelsize 12 textsize 12
class Fl_Input2
}
Fl_Input inpCnty_log {
label {St. / Ctry.}
xywh {142 58 110 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {142 56 110 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpVE_Prov_log {
label {Pr..}
xywh {253 58 30 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {253 56 30 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Group {} {open
xywh {445 91 116 78} box ENGRAVED_FRAME
xywh {5 128 440 44} box ENGRAVED_FRAME
} {
Fl_Input inpSerNoOut_log {
label {Ser\# out}
tooltip {Contest seral \# sent} xywh {8 145 60 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpSerNoIn_log {
label {Ser\# in}
tooltip {Contest serial \# received} xywh {71 145 60 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpXchg1_log {
label {Xchg \#1}
tooltip {Exchange \#1} xywh {135 145 100 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpXchg2_log {
label {Xchg \#2}
tooltip {Exchange \#2} xywh {239 145 100 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Input inpXchg3_log {
label {Xchg \#3} selected
tooltip {Exchange \#3} xywh {343 145 100 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
}
Fl_Group {} {open
xywh {445 94 116 78} box ENGRAVED_FRAME
} {
Fl_Input inpSearchString {
label {Call Search}
xywh {450 114 105 22} labelsize 12 align 5 textfont 13 textsize 12
xywh {450 118 105 22} labelsize 12 align 5 textsize 12
class Fl_Input2
}
Fl_Button bSearchPrev {
callback cb_search
tooltip {Find previous} xywh {450 139 24 22} color 50 selection_color 48 labelsize 12 align 16
tooltip {Find previous} xywh {450 143 24 22} color 50 selection_color 48 labelsize 12 align 16
code0 {bSearchPrev->image(new Fl_Pixmap(left_arrow_icon));}
}
Fl_Button bSearchNext {
callback cb_search
tooltip {Find next} xywh {531 139 24 22} color 50 selection_color 48 labelsize 12 align 16
tooltip {Find next} xywh {531 143 24 22} color 50 selection_color 48 labelsize 12 align 16
code0 {bSearchNext->image(new Fl_Pixmap(right_arrow_icon));}
}
}
}
Fl_Group wBrowser {
xywh {2 200 565 120} box DOWN_FRAME color 7 selection_color 15 labelsize 12 resizable
xywh {2 205 565 115} box DOWN_FRAME color 7 selection_color 15 labelsize 12 resizable
code0 {\#include "table.h"}
class Table
} {}

Wyświetl plik

@ -17,13 +17,19 @@
#include "main.h"
#include "logbook.h"
#include "configuration.h"
void start_logbook ()
{
create_logbook_dialogs();
logbook_filename = HomeDir;
logbook_filename.append("logbook." ADIF_SUFFIX);
if (progdefaults.logbookfilename.empty()) {
logbook_filename = HomeDir;
logbook_filename.append("logbook." ADIF_SUFFIX);
progdefaults.logbookfilename = logbook_filename;
progdefaults.changed = true;
} else
logbook_filename = progdefaults.logbookfilename;
adifFile.readFile (logbook_filename.c_str(), &qsodb);
dlgLogbook->copy_label(fl_filename_name(logbook_filename.c_str()));

Wyświetl plik

@ -23,7 +23,6 @@
#include <FL/fl_ask.H>
// remove after testing
extern string HomeDir;
using namespace std;
@ -34,6 +33,8 @@ cTextFile txtFile;
string logbook_filename;
bool EnableDupCheck = false;
enum savetype {ADIF, TEXT, LO};
void Export_log()
@ -85,8 +86,12 @@ void cb_mnuNewLogbook(Fl_Menu_* m, void* d){
logbook_filename = HomeDir;
logbook_filename.append("newlog." ADIF_SUFFIX);
progdefaults.logbookfilename = logbook_filename;
dlgLogbook->label(fl_filename_name(logbook_filename.c_str()));
progdefaults.changed = true;
qsodb.deleteRecs();
wBrowser->clear();
clearRecord();
}
void cb_mnuOpenLogbook(Fl_Menu_* m, void* d)
@ -97,9 +102,12 @@ void cb_mnuOpenLogbook(Fl_Menu_* m, void* d)
qsodb.deleteRecs();
logbook_filename = p;
progdefaults.logbookfilename = logbook_filename;
progdefaults.changed = true;
adifFile.readFile (logbook_filename.c_str(), &qsodb);
loadBrowser();
qsodb.isdirty(0);
dlgLogbook->label(fl_filename_name(logbook_filename.c_str()));
}
}
@ -242,6 +250,20 @@ void cb_SortByFreq (void) {
loadBrowser();
}
void DupCheck(const char *callsign)
{
if (qsodb.duplicate(
callsign,
inpFreq->value(), progdefaults.dupband,
inpCnty->value(), progdefaults.dupstate,
mode_info[active_modem->get_mode()].adif_name, progdefaults.dupmode,
inpXchg1->value(), progdefaults.dupxchg1,
inpXchg2->value(), progdefaults.dupxchg2,
inpXchg3->value(), progdefaults.dupxchg3 ) )
lblDup->show();
}
void SearchLastQSO(const char *callsign)
{
size_t len = strlen(callsign);
@ -252,6 +274,8 @@ void SearchLastQSO(const char *callsign)
if (wBrowser->search(row, col, !cQsoDb::reverse, re)) {
wBrowser->GotoRow(row);
inpName->value(inpName_log->value());
if (EnableDupCheck)
DupCheck(callsign);
}
delete [] re;
@ -305,12 +329,15 @@ void clearRecord() {
inpMode_log->value ("");
inpQth_log->value ("");
inpCnty_log->value ("");
inpSerNoOut_log->value ("");
inpSerNoIn_log->value ("");
inpVE_Prov_log->value ("");
inpLoc_log->value ("");
inpQSLrcvddate_log->value ("");
inpQSLsentdate_log->value ("");
inpSerNoOut_log->value ("");
inpSerNoIn_log->value ("");
inpXchg1_log->value("");
inpXchg2_log->value("");
inpXchg3_log->value("");
inpComment_log->value ("");
editGroup->show();
}
@ -325,8 +352,6 @@ cQsoRec rec;
rec.putField(MODE, inpMode_log->value());
rec.putField(QTH, inpQth_log->value());
rec.putField(CNTY, inpCnty_log->value());
rec.putField(SRX, inpSerNoIn_log->value());
rec.putField(STX, inpSerNoOut_log->value());
rec.putField(VE_PROV, inpVE_Prov_log->value());
rec.putField(GRIDSQUARE, inpLoc_log->value());
rec.putField(COMMENT, inpComment_log->value());
@ -334,6 +359,11 @@ cQsoRec rec;
rec.putField(QSLSDATE, inpQSLsentdate_log->value());
rec.putField(RST_RCVD, inpRstR_log->value ());
rec.putField(RST_SENT, inpRstS_log->value ());
rec.putField(SRX, inpSerNoIn_log->value());
rec.putField(STX, inpSerNoOut_log->value());
rec.putField(XCHG1, inpXchg1_log->value());
rec.putField(XCHG2, inpXchg2_log->value());
rec.putField(XCHG3, inpXchg3_log->value());
qsodb.qsoNewRec (&rec);
}
@ -349,8 +379,6 @@ cQsoRec rec;
rec.putField(MODE, inpMode_log->value());
rec.putField(QTH, inpQth_log->value());
rec.putField(CNTY, inpCnty_log->value());
rec.putField(SRX, inpSerNoIn_log->value());
rec.putField(STX, inpSerNoOut_log->value());
rec.putField(VE_PROV, inpVE_Prov_log->value());
rec.putField(GRIDSQUARE, inpLoc_log->value());
rec.putField(COMMENT, inpComment_log->value());
@ -358,10 +386,13 @@ cQsoRec rec;
rec.putField(QSLSDATE, inpQSLsentdate_log->value());
rec.putField(RST_RCVD, inpRstR_log->value ());
rec.putField(RST_SENT, inpRstS_log->value ());
rec.putField(SRX, inpSerNoIn_log->value());
rec.putField(STX, inpSerNoOut_log->value());
rec.putField(XCHG1, inpXchg1_log->value());
rec.putField(XCHG2, inpXchg2_log->value());
rec.putField(XCHG3, inpXchg3_log->value());
qsodb.qsoUpdRec (editNbr, &rec);
qsodb.isdirty(1);
// qsodb.qsoWriteFile(logbook_filename.c_str());
// qsodb.isdirty(0);
}
void deleteRecord () {
@ -372,8 +403,6 @@ void deleteRecord () {
qsodb.qsoDelRec(editNbr);
loadBrowser();
qsodb.isdirty(1);
// qsodb.qsoWriteFile(logbook_filename.c_str());
// qsodb.isdirty(0);
}
void EditRecord( int i )
@ -392,33 +421,39 @@ void EditRecord( int i )
inpMode_log->value (editQSO->getField(MODE));
inpCnty_log->value (editQSO->getField(CNTY));
inpVE_Prov_log->value (editQSO->getField(VE_PROV));
inpSerNoIn_log->value(editQSO->getField(SRX));
inpSerNoOut_log->value(editQSO->getField(STX));
inpQth_log->value (editQSO->getField(QTH));
inpLoc_log->value (editQSO->getField(GRIDSQUARE));
inpQSLrcvddate_log->value (editQSO->getField(QSLRDATE));
inpQSLsentdate_log->value (editQSO->getField(QSLSDATE));
inpComment_log->value (editQSO->getField(COMMENT));
inpSerNoIn_log->value(editQSO->getField(SRX));
inpSerNoOut_log->value(editQSO->getField(STX));
inpXchg1_log->value(editQSO->getField(XCHG1));
inpXchg2_log->value(editQSO->getField(XCHG2));
inpXchg3_log->value(editQSO->getField(XCHG3));
editGroup->show();
}
void AddRecord ()
{
// zuluDateTime();
inpCall_log->value(inpCall->value());
inpName_log->value (inpName->value());
inpDate_log->value (logdate);
inpTime_log->value (logtime);
inpDate_log->value (zuluLogDate);
inpTime_log->value (zuluLogTime);
inpRstR_log->value (inpRstIn->value());
inpRstS_log->value (inpRstOut->value());
inpFreq_log->value (inpFreq->value());
inpMode_log->value (logmode);
inpCnty_log->value (inpCnty->value());
inpVE_Prov_log->value (inpVEprov->value());
inpSerNoIn_log->value(inpSerNo->value());
char szcnt[5] = "";
if (contest_count.count)
snprintf(szcnt, sizeof(szcnt), "%04d", contest_count.count);
inpSerNoOut_log->value(szcnt);
inpSerNoOut_log->value(outSerNo->value());
inpXchg1_log->value(inpXchg1->value());
inpXchg2_log->value(inpXchg2->value());
inpXchg3_log->value(inpXchg3->value());
inpQth_log->value (inpQth->value());
inpLoc_log->value (inpLoc->value());
inpQSLrcvddate_log->value ("");

Wyświetl plik

@ -341,4 +341,49 @@ int cQsoDb::qsoWriteFile (const char *fname) {
return 0;
}
bool cQsoDb::duplicate(
const char *callsign,
const char *freq, bool chkfreq,
const char *state, bool chkstate,
const char *mode, bool chkmode,
const char *xchg1, bool chkxchg1,
const char *xchg2, bool chkxchg2,
const char *xchg3, bool chkxchg3 )
{
int f1, f2;
f1 = (int)atof(freq);
bool b_freq = false, b_state = false, b_mode = false,
b_xchg1 = false, b_xchg2 = false, b_xchg3 = false;
for (int i = 0; i < nbrrecs; i++) {
if (strcasecmp(qsorec[i].getField(CALL), callsign) == 0) {
// found callsign duplicate
// check frequency field
if (!chkfreq) b_freq = true;
else {
f2 = (int)atof(qsorec[i].getField(FREQ));
if (f1 == f2) b_freq = true;
}
// check state
if (!chkstate) b_state = true;
else
if (strcasecmp(qsorec[i].getField(STATE), state) == 0) b_state = true;
if (!chkmode) b_mode = true;
if (strcasecmp(qsorec[i].getField(MODE), mode) == 0) b_mode = true;
if (!chkxchg1) b_xchg1 = true;
else
if (strcasecmp(qsorec[i].getField(XCHG1), xchg1) == 0) b_xchg1 = true;
if (!chkxchg2) b_xchg2 = true;
else
if (strcasecmp(qsorec[i].getField(XCHG2), xchg2) == 0) b_xchg2 = true;
if (!chkxchg3) b_xchg3 = true;
else
if (strcasecmp(qsorec[i].getField(XCHG3), xchg3) == 0) b_xchg3 = true;
// all must be true for a dup.
if (b_freq && b_state && b_mode && b_xchg1 && b_xchg2 && b_xchg3)
return true;
}
}
return false;
}

Wyświetl plik

@ -133,12 +133,12 @@ int submit_log(void)
log_msg = "";
log_msg = log_msg + "program:" + PACKAGE_NAME + " v " + PACKAGE_VERSION + LOG_MSEPARATOR;
log_msg = log_msg + "version:" + LOG_MVERSION + LOG_MSEPARATOR;
log_msg = log_msg + "date:" + logdate + LOG_MSEPARATOR;
putadif(QSO_DATE, adifdate);
log_msg = log_msg + "time:" + inpTime->value() + LOG_MSEPARATOR;
putadif(TIME_ON, inpTime->value());
log_msg = log_msg + "endtime:" + logtime + LOG_MSEPARATOR;
putadif(TIME_OFF, logtime);
log_msg = log_msg + "date:" + zuluLogDate + LOG_MSEPARATOR;
putadif(QSO_DATE, zuluLogDate);
// log_msg = log_msg + "time:" + zuluLogTime + LOG_MSEPARATOR;
// putadif(TIME_ON, zuluLogTime);
log_msg = log_msg + "endtime:" + zuluLogTime + LOG_MSEPARATOR;
putadif(TIME_OFF, zuluLogTime);
log_msg = log_msg + "call:" + inpCall->value() + LOG_MSEPARATOR;
putadif(CALL, inpCall->value());
log_msg = log_msg + "mhz:" + strFreqMhz + LOG_MSEPARATOR;
@ -159,13 +159,34 @@ int submit_log(void)
putadif(VE_PROV, inpVEprov->value());
log_msg = log_msg + "locator:" + inpLoc->value() + LOG_MSEPARATOR;
putadif(GRIDSQUARE, inpLoc->value());
char szcnt[5] = "";
if (contest_count.count)
snprintf(szcnt, sizeof(szcnt), "%04d", contest_count.count);
log_msg = log_msg + "serialout:" + szcnt + LOG_MSEPARATOR;
putadif(STX, szcnt);
log_msg = log_msg + "serialin:" + inpSerNo->value() + LOG_MSEPARATOR;
putadif(SRX, inpSerNo->value());
string fieldstr;
fieldstr = outSerNo->value();
if (!fieldstr.empty()) {
log_msg = log_msg + "serialout:" + fieldstr.c_str() + LOG_MSEPARATOR;
putadif(STX, fieldstr.c_str());
}
fieldstr = inpSerNo->value();
if (!fieldstr.empty()) {
log_msg = log_msg + "serialin:" + fieldstr.c_str() + LOG_MSEPARATOR;
putadif(SRX, fieldstr.c_str());
}
fieldstr = inpXchg1->value();
if (!fieldstr.empty()) {
log_msg = log_msg + "xchg1:" + fieldstr.c_str() + LOG_MSEPARATOR;
putadif(XCHG1, fieldstr.c_str());
}
fieldstr = inpXchg2->value();
if (!fieldstr.empty()) {
log_msg = log_msg + "xchg2:" + fieldstr.c_str() + LOG_MSEPARATOR;
putadif(XCHG2, fieldstr.c_str());
}
fieldstr = inpXchg3->value();
if (!fieldstr.empty()) {
log_msg = log_msg + "xchg3:" + fieldstr.c_str() + LOG_MSEPARATOR;
putadif(XCHG2, fieldstr.c_str());
}
log_msg = log_msg + "notes:" + inpNotes->value() + LOG_MSEPARATOR;
putadif(NOTES, inpNotes->value());

Wyświetl plik

@ -591,6 +591,8 @@ char arq_get_char()
// ============================================================================
// Implementation using thread vice the fldigi timeout facility
// ============================================================================
static string timestr = "";
static string clocktime = "";
static pthread_t arq_thread;
@ -621,6 +623,14 @@ static void *arq_loop(void *args)
TLF_arqRx();
#endif
// delay for 50 msec interval
// check for updating the time display on fldigi main dialog
zuluDateTime();
clocktime = zuluLogTime;
if (timestr.empty() || timestr != clocktime) {
timestr = clocktime;
inpTime->value(timestr.c_str());
}
MilliSleep(50);
}
// exit the arq thread

Wyświetl plik

@ -38,6 +38,7 @@ void loadBrowser(Fl_Widget *widget) {
w->add("<MYNAME>\tmy name");
w->add("<MYQTH>\tmy qth");
w->add("<MYRST>\tmy RST");
w->add("<QSOTIME>\tqso HHMM");
w->add(LINE_SEP);
w->add("<CALL>\tother call");
@ -65,6 +66,9 @@ void loadBrowser(Fl_Widget *widget) {
w->add("<CNTR>\tcontest cnt");
w->add("<DECR>\tdecr cnt");
w->add("<INCR>\tincr cnt");
w->add("<X1>\teXchange 1");
w->add("<X2>\teXchange 2");
w->add("<X3>\teXchange 3");
w->add(LINE_SEP);
w->add("<ID>\tMode ID'r");

Wyświetl plik

@ -42,6 +42,7 @@ void pMYLOC(string &, size_t &);
void pMYNAME(string &, size_t &);
void pMYQTH(string &, size_t &);
void pMYRST(string &, size_t &);
void pQSOTIME(string &, size_t &);
void pLDT(string &, size_t &);
void pILDT(string &, size_t &);
void pZDT(string &, size_t &);
@ -55,6 +56,9 @@ void pVER(string &, size_t &);
void pCNTR(string &, size_t &);
void pDECR(string &, size_t &);
void pINCR(string &, size_t &);
void pX1(string &, size_t &);
void pX2(string &, size_t &);
void pX3(string &, size_t &);
void pLOG(string &, size_t &);
void pTIMER(string &, size_t &);
void pIDLE(string &, size_t &);
@ -79,6 +83,7 @@ MTAGS mtags[] = {
{"<MYNAME>", pMYNAME},
{"<MYQTH>", pMYQTH},
{"<MYRST>", pMYRST},
{"<QSOTIME>", pQSOTIME},
{"<INFO1>", pINFO1},
{"<INFO2>", pINFO2},
{"<LDT>", pLDT},
@ -94,6 +99,9 @@ MTAGS mtags[] = {
{"<CNTR>", pCNTR},
{"<DECR>", pDECR},
{"<INCR>", pINCR},
{"<X1>", pX1},
{"<X2>", pX2},
{"<X3>", pX3},
{"<LOG>", pLOG},
{"<TIMER>", pTIMER},
{"<IDLE>", pIDLE},
@ -161,6 +169,11 @@ void pQTH(string &s, size_t &i)
s.replace( i,5, inpQth->value() );
}
void pQSOTIME(string &s, size_t &i)
{
s.replace( i, 9, inpTime->value() );
}
void pRST(string &s, size_t &i)
{
s.replace( i, 5, inpRstOut->value() );
@ -275,32 +288,47 @@ void pVER(string &s, size_t &i)
void pCNTR(string &s, size_t &i)
{
int contestval;
contestval = contest_count.count + progdefaults.ContestStart;
contest_count.Format(progdefaults.ContestDigits, progdefaults.UseLeadingZeros);
snprintf(contest_count.szCount, sizeof(contest_count.szCount), contest_count.fmt.c_str(), contestval);
s.replace (i, 6, contest_count.szCount);
contestval = contest_count.count;
if (contestval) {
contest_count.Format(progdefaults.ContestDigits, progdefaults.UseLeadingZeros);
snprintf(contest_count.szCount, sizeof(contest_count.szCount), contest_count.fmt.c_str(), contestval);
s.replace (i, 6, contest_count.szCount);
} else
s.replace (i, 6, "");
}
void pDECR(string &s, size_t &i)
{
int contestval;
contest_count.count--;
contestval = contest_count.count + progdefaults.ContestStart;
if (contest_count.count < 0) contest_count.count = 0;
contestval = contest_count.count;
s.replace (i, 6, "");
snprintf(contest_count.szCount, sizeof(contest_count.szCount), contest_count.fmt.c_str(), contestval);
snprintf(contest_count.szDisp, sizeof(contest_count.szDisp), "Next Nbr: %s", contest_count.szCount);
put_status(contest_count.szDisp);
updateOutSerNo();
}
void pINCR(string &s, size_t &i)
{
int contestval;
contest_count.count++;
contestval = contest_count.count + progdefaults.ContestStart;
contestval = contest_count.count;
s.replace (i, 6, "");
snprintf(contest_count.szCount, sizeof(contest_count.szCount), contest_count.fmt.c_str(), contestval);
snprintf(contest_count.szDisp, sizeof(contest_count.szDisp), "Next Nbr: %s", contest_count.szCount);
put_status(contest_count.szDisp);
updateOutSerNo();
}
void pX1(string &s, size_t &i)
{
s.replace (i, 4, progdefaults.Xchg1);
}
void pX2(string &s, size_t &i)
{
s.replace (i, 4, progdefaults.Xchg2);
}
void pX3(string &s, size_t &i)
{
s.replace (i, 4, progdefaults.Xchg3);
}
void pLOG(string &s, size_t &i)

Wyświetl plik

@ -388,9 +388,12 @@ Fl_Menu_Item FTextView::view_menu[] = {
{ make_icon_label(ENTER_SYMBOL "QT&H", enter_key_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
{ make_icon_label(ENTER_SYMBOL "&State", enter_key_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
{ make_icon_label(ENTER_SYMBOL "&Province", enter_key_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
{ make_icon_label(ENTER_SYMBOL "Serial Nr", enter_key_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
{ make_icon_label(ENTER_SYMBOL "&Locator", enter_key_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
{ make_icon_label(ENTER_SYMBOL "&RST(r)", enter_key_icon), 0, 0, 0, FL_MENU_DIVIDER, _FL_MULTI_LABEL },
{ make_icon_label(ENTER_SYMBOL "&RST(r)", enter_key_icon), 0, 0, 0, FL_MENU_DIVIDER, _FL_MULTI_LABEL },
{ make_icon_label(ENTER_SYMBOL "Serial Nr", enter_key_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
{ make_icon_label(ENTER_SYMBOL "Xchg &1", enter_key_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
{ make_icon_label(ENTER_SYMBOL "Xchg &2", enter_key_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
{ make_icon_label(ENTER_SYMBOL "Xchg &3", enter_key_icon), 0, 0, 0, FL_MENU_DIVIDER, _FL_MULTI_LABEL },
{ make_icon_label("Insert divider", insert_link_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
{ make_icon_label("&Copy", edit_copy_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
{ make_icon_label("C&lear", edit_clear_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
@ -701,9 +704,19 @@ void FTextView::menu_cb(int val)
case RX_MENU_LOC:
input = inpLoc;
break;
case RX_MENU_RST_IN:
input = inpRstIn;
break;
case RX_MENU_X1:
input = inpXchg1;
break;
case RX_MENU_X2:
input = inpXchg2;
break;
case RX_MENU_X3:
input = inpXchg3;
break;
case RX_MENU_DIV:
note_qrg(false, '\n', '\n');