* Added EQSL macro tag - sends current log data to eQSL on line
    - CALL, BAND, MODE, QSO_DATE, QSO_TIME_ON, RST_SENT
    - optional message, <EQSL:message to send>
pull/2/head
David Freese 2011-11-12 07:44:16 -06:00
rodzic 7bae7afae4
commit c2ba559f1c
10 zmienionych plików z 593 dodań i 245 usunięć

Wyświetl plik

@ -2875,6 +2875,38 @@ static void cb_chkDTMFdecode(Fl_Check_Button* o, void*) {
Fl_Group *tabQRZ=(Fl_Group *)0;
Fl_Round_Button *btnQRZnotavailable=(Fl_Round_Button *)0;
static void cb_btnQRZnotavailable(Fl_Round_Button* o, void*) {
set_qrz_buttons(o);
progdefaults.QRZ = QRZNONE;
progdefaults.changed = true;
}
Fl_Round_Button *btnQRZonline=(Fl_Round_Button *)0;
static void cb_btnQRZonline(Fl_Round_Button* o, void*) {
set_qrz_buttons(o);
progdefaults.QRZ = QRZHTML;
progdefaults.changed = true;
}
Fl_Round_Button *btnHAMCALLonline=(Fl_Round_Button *)0;
static void cb_btnHAMCALLonline(Fl_Round_Button* o, void*) {
set_qrz_buttons(o);
progdefaults.QRZ = HAMCALLHTML;
progdefaults.changed = true;
}
Fl_Round_Button *btnCALLOOK=(Fl_Round_Button *)0;
static void cb_btnCALLOOK(Fl_Round_Button* o, void*) {
set_qrz_buttons(o);
progdefaults.QRZ = CALLOOK;
progdefaults.changed = true;
}
Fl_Round_Button *btnQRZcdrom=(Fl_Round_Button *)0;
static void cb_btnQRZcdrom(Fl_Round_Button* o, void*) {
@ -2937,35 +2969,32 @@ progdefaults.QRZ = HAMQTH;
progdefaults.changed = true;
}
Fl_Round_Button *btnQRZnotavailable=(Fl_Round_Button *)0;
Fl_Input2 *inpEQSL_id=(Fl_Input2 *)0;
static void cb_btnQRZnotavailable(Fl_Round_Button* o, void*) {
set_qrz_buttons(o);
progdefaults.QRZ = QRZNONE;
static void cb_inpEQSL_id(Fl_Input2* o, void*) {
progdefaults.eqsl_id = o->value();
progdefaults.changed = true;
}
Fl_Round_Button *btnQRZonline=(Fl_Round_Button *)0;
Fl_Input2 *inpEQSL_pwd=(Fl_Input2 *)0;
static void cb_btnQRZonline(Fl_Round_Button* o, void*) {
set_qrz_buttons(o);
progdefaults.QRZ = QRZHTML;
static void cb_inpEQSL_pwd(Fl_Input2* o, void*) {
progdefaults.eqsl_pwd = o->value();
progdefaults.changed = true;
}
Fl_Round_Button *btnHAMCALLonline=(Fl_Round_Button *)0;
Fl_Button *btnEQSL_pwd_show=(Fl_Button *)0;
static void cb_btnHAMCALLonline(Fl_Round_Button* o, void*) {
set_qrz_buttons(o);
progdefaults.QRZ = HAMCALLHTML;
progdefaults.changed = true;
static void cb_btnEQSL_pwd_show(Fl_Button* o, void*) {
inpEQSL_pwd->type(inpEQSL_pwd->type() ^ FL_SECRET_INPUT);
inpEQSL_pwd->redraw();
o->label((inpEQSL_pwd->type() & FL_SECRET_INPUT) ? "Show" : "Hide");
}
Fl_Round_Button *btnCALLOOK=(Fl_Round_Button *)0;
Fl_Input2 *inpEQSL_nick=(Fl_Input2 *)0;
static void cb_btnCALLOOK(Fl_Round_Button* o, void*) {
set_qrz_buttons(o);
progdefaults.QRZ = CALLOOK;
static void cb_inpEQSL_nick(Fl_Input2* o, void*) {
progdefaults.eqsl_nick = o->value();
progdefaults.changed = true;
}
@ -6499,123 +6528,183 @@ d frequency"));
} // Fl_Tabs* tabsMisc
tabMisc->end();
} // Fl_Group* tabMisc
{ tabQRZ = new Fl_Group(0, 25, 500, 345, _("Callsign DB"));
{ tabQRZ = new Fl_Group(0, 25, 500, 345, _("Web"));
tabQRZ->tooltip(_("Callsign database"));
tabQRZ->hide();
{ Fl_Group* o = new Fl_Group(5, 176, 490, 55, _("CDROM"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Round_Button* o = btnQRZcdrom = new Fl_Round_Button(25, 196, 70, 20, _("QRZ"));
btnQRZcdrom->tooltip(_("Use CD or hard drive CD image"));
btnQRZcdrom->down_box(FL_DOWN_BOX);
btnQRZcdrom->callback((Fl_Callback*)cb_btnQRZcdrom);
o->value(progdefaults.QRZ == QRZCD);
} // Fl_Round_Button* btnQRZcdrom
{ Fl_Input2* o = txtQRZpathname = new Fl_Input2(104, 196, 300, 20, _("at:"));
txtQRZpathname->tooltip(_("ie: /home/dave/CALLBK/ or C:/CALLBK/\nLeave blank to search for database"));
txtQRZpathname->box(FL_DOWN_BOX);
txtQRZpathname->color((Fl_Color)FL_BACKGROUND2_COLOR);
txtQRZpathname->selection_color((Fl_Color)FL_SELECTION_COLOR);
txtQRZpathname->labeltype(FL_NORMAL_LABEL);
txtQRZpathname->labelfont(0);
txtQRZpathname->labelsize(14);
txtQRZpathname->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
txtQRZpathname->callback((Fl_Callback*)cb_txtQRZpathname);
txtQRZpathname->align(FL_ALIGN_LEFT);
txtQRZpathname->when(FL_WHEN_RELEASE);
o->value(progdefaults.QRZpathname.c_str());
txtQRZpathname->labelsize(FL_NORMAL_SIZE);
} // Fl_Input2* txtQRZpathname
{ Fl_Tabs* o = new Fl_Tabs(0, 25, 500, 345);
{ Fl_Group* o = new Fl_Group(0, 46, 500, 324, _("QRZ/etal"));
{ Fl_Group* o = new Fl_Group(5, 55, 490, 120);
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Round_Button* o = btnQRZnotavailable = new Fl_Round_Button(25, 64, 337, 20, _("Not available"));
btnQRZnotavailable->tooltip(_("Do not use callsign database"));
btnQRZnotavailable->down_box(FL_DOWN_BOX);
btnQRZnotavailable->value(1);
btnQRZnotavailable->callback((Fl_Callback*)cb_btnQRZnotavailable);
o->value(progdefaults.QRZ == QRZNONE);
} // Fl_Round_Button* btnQRZnotavailable
{ Fl_Round_Button* o = btnQRZonline = new Fl_Round_Button(25, 92, 337, 20, _("QRZ online via default Internet Browser"));
btnQRZonline->tooltip(_("Visit QRZ web site"));
btnQRZonline->down_box(FL_DOWN_BOX);
btnQRZonline->callback((Fl_Callback*)cb_btnQRZonline);
o->value(progdefaults.QRZ == QRZHTML);
} // Fl_Round_Button* btnQRZonline
{ Fl_Round_Button* o = btnHAMCALLonline = new Fl_Round_Button(25, 120, 337, 20, _("HamCall online via default Internet Browser"));
btnHAMCALLonline->tooltip(_("Visit Hamcall web site"));
btnHAMCALLonline->down_box(FL_DOWN_BOX);
btnHAMCALLonline->callback((Fl_Callback*)cb_btnHAMCALLonline);
o->value(progdefaults.QRZ == HAMCALLHTML);
} // Fl_Round_Button* btnHAMCALLonline
{ Fl_Round_Button* o = btnCALLOOK = new Fl_Round_Button(25, 148, 337, 20, _("Callook.info lookup (US callsigns only)"));
btnCALLOOK->tooltip(_("Visit Hamcall web site"));
btnCALLOOK->down_box(FL_DOWN_BOX);
btnCALLOOK->callback((Fl_Callback*)cb_btnCALLOOK);
o->value(progdefaults.QRZ == CALLOOK);
} // Fl_Round_Button* btnCALLOOK
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(5, 176, 490, 55, _("CDROM"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Round_Button* o = btnQRZcdrom = new Fl_Round_Button(25, 196, 70, 20, _("QRZ"));
btnQRZcdrom->tooltip(_("Use CD or hard drive CD image"));
btnQRZcdrom->down_box(FL_DOWN_BOX);
btnQRZcdrom->callback((Fl_Callback*)cb_btnQRZcdrom);
o->value(progdefaults.QRZ == QRZCD);
} // Fl_Round_Button* btnQRZcdrom
{ Fl_Input2* o = txtQRZpathname = new Fl_Input2(104, 196, 300, 20, _("at:"));
txtQRZpathname->tooltip(_("ie: /home/dave/CALLBK/ or C:/CALLBK/\nLeave blank to search for database"));
txtQRZpathname->box(FL_DOWN_BOX);
txtQRZpathname->color((Fl_Color)FL_BACKGROUND2_COLOR);
txtQRZpathname->selection_color((Fl_Color)FL_SELECTION_COLOR);
txtQRZpathname->labeltype(FL_NORMAL_LABEL);
txtQRZpathname->labelfont(0);
txtQRZpathname->labelsize(14);
txtQRZpathname->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
txtQRZpathname->callback((Fl_Callback*)cb_txtQRZpathname);
txtQRZpathname->align(FL_ALIGN_LEFT);
txtQRZpathname->when(FL_WHEN_RELEASE);
o->value(progdefaults.QRZpathname.c_str());
txtQRZpathname->labelsize(FL_NORMAL_SIZE);
} // Fl_Input2* txtQRZpathname
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(5, 232, 490, 134, _("Subscriber data"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Round_Button* o = btnQRZsub = new Fl_Round_Button(25, 263, 90, 20, _("QRZ.com"));
btnQRZsub->tooltip(_("You need a paid QRZ online\nsubscription to access"));
btnQRZsub->down_box(FL_DOWN_BOX);
btnQRZsub->callback((Fl_Callback*)cb_btnQRZsub);
o->value(progdefaults.QRZ == QRZNET);
} // Fl_Round_Button* btnQRZsub
{ Fl_Round_Button* o = btnHamcall = new Fl_Round_Button(25, 297, 105, 20, _("Hamcall.net"));
btnHamcall->tooltip(_("You need a paid Hamcall online\nsubscription to access"));
btnHamcall->down_box(FL_DOWN_BOX);
btnHamcall->callback((Fl_Callback*)cb_btnHamcall);
o->value(progdefaults.QRZ == HAMCALLNET);
} // Fl_Round_Button* btnHamcall
{ Fl_Input2* o = inpQRZusername = new Fl_Input2(235, 263, 150, 20, _("User name"));
inpQRZusername->tooltip(_("Your login name"));
inpQRZusername->box(FL_DOWN_BOX);
inpQRZusername->color((Fl_Color)FL_BACKGROUND2_COLOR);
inpQRZusername->selection_color((Fl_Color)FL_SELECTION_COLOR);
inpQRZusername->labeltype(FL_NORMAL_LABEL);
inpQRZusername->labelfont(0);
inpQRZusername->labelsize(14);
inpQRZusername->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
inpQRZusername->callback((Fl_Callback*)cb_inpQRZusername);
inpQRZusername->align(FL_ALIGN_LEFT);
inpQRZusername->when(FL_WHEN_RELEASE);
o->value(progdefaults.QRZusername.c_str());
inpQRZusername->labelsize(FL_NORMAL_SIZE);
} // Fl_Input2* inpQRZusername
{ Fl_Input2* o = inpQRZuserpassword = new Fl_Input2(235, 297, 150, 20, _("Password"));
inpQRZuserpassword->tooltip(_("Your login password"));
inpQRZuserpassword->box(FL_DOWN_BOX);
inpQRZuserpassword->color((Fl_Color)FL_BACKGROUND2_COLOR);
inpQRZuserpassword->selection_color((Fl_Color)FL_SELECTION_COLOR);
inpQRZuserpassword->labeltype(FL_NORMAL_LABEL);
inpQRZuserpassword->labelfont(0);
inpQRZuserpassword->labelsize(14);
inpQRZuserpassword->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
inpQRZuserpassword->callback((Fl_Callback*)cb_inpQRZuserpassword);
inpQRZuserpassword->align(FL_ALIGN_LEFT);
inpQRZuserpassword->when(FL_WHEN_RELEASE);
o->value(progdefaults.QRZuserpassword.c_str());
o->type(FL_SECRET_INPUT);
inpQRZuserpassword->labelsize(FL_NORMAL_SIZE);
} // Fl_Input2* inpQRZuserpassword
{ btnQRZpasswordShow = new Fl_Button(395, 297, 70, 20, _("Show"));
btnQRZpasswordShow->tooltip(_("Show password in plain text"));
btnQRZpasswordShow->callback((Fl_Callback*)cb_btnQRZpasswordShow);
} // Fl_Button* btnQRZpasswordShow
{ Fl_Round_Button* o = btnHamQTH = new Fl_Round_Button(26, 332, 121, 20, _("HamQTH.com (free service http://www.hamqth.com)"));
btnHamQTH->tooltip(_("You need a paid Hamcall online\nsubscription to access"));
btnHamQTH->down_box(FL_DOWN_BOX);
btnHamQTH->callback((Fl_Callback*)cb_btnHamQTH);
o->value(progdefaults.QRZ == HAMQTH);
} // Fl_Round_Button* btnHamQTH
o->end();
} // Fl_Group* o
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(0, 50, 500, 320, _("eQSL"));
o->hide();
{ Fl_Input2* o = inpEQSL_id = new Fl_Input2(176, 75, 150, 20, _("User ID"));
inpEQSL_id->tooltip(_("Your login name"));
inpEQSL_id->box(FL_DOWN_BOX);
inpEQSL_id->color((Fl_Color)FL_BACKGROUND2_COLOR);
inpEQSL_id->selection_color((Fl_Color)FL_SELECTION_COLOR);
inpEQSL_id->labeltype(FL_NORMAL_LABEL);
inpEQSL_id->labelfont(0);
inpEQSL_id->labelsize(14);
inpEQSL_id->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
inpEQSL_id->callback((Fl_Callback*)cb_inpEQSL_id);
inpEQSL_id->align(FL_ALIGN_LEFT);
inpEQSL_id->when(FL_WHEN_RELEASE);
o->value(progdefaults.eqsl_id.c_str());
inpEQSL_id->labelsize(FL_NORMAL_SIZE);
} // Fl_Input2* inpEQSL_id
{ Fl_Input2* o = inpEQSL_pwd = new Fl_Input2(176, 106, 150, 20, _("Password"));
inpEQSL_pwd->tooltip(_("Your login password"));
inpEQSL_pwd->box(FL_DOWN_BOX);
inpEQSL_pwd->color((Fl_Color)FL_BACKGROUND2_COLOR);
inpEQSL_pwd->selection_color((Fl_Color)FL_SELECTION_COLOR);
inpEQSL_pwd->labeltype(FL_NORMAL_LABEL);
inpEQSL_pwd->labelfont(0);
inpEQSL_pwd->labelsize(14);
inpEQSL_pwd->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
inpEQSL_pwd->callback((Fl_Callback*)cb_inpEQSL_pwd);
inpEQSL_pwd->align(FL_ALIGN_LEFT);
inpEQSL_pwd->when(FL_WHEN_RELEASE);
o->value(progdefaults.eqsl_pwd.c_str());
o->type(FL_SECRET_INPUT);
inpEQSL_pwd->labelsize(FL_NORMAL_SIZE);
} // Fl_Input2* inpEQSL_pwd
{ btnEQSL_pwd_show = new Fl_Button(344, 106, 70, 20, _("Show"));
btnEQSL_pwd_show->tooltip(_("Show password in plain text"));
btnEQSL_pwd_show->callback((Fl_Callback*)cb_btnEQSL_pwd_show);
} // Fl_Button* btnEQSL_pwd_show
{ Fl_Input2* o = inpEQSL_nick = new Fl_Input2(176, 137, 150, 20, _("QTH Nickname"));
inpEQSL_nick->tooltip(_("Your login name"));
inpEQSL_nick->box(FL_DOWN_BOX);
inpEQSL_nick->color((Fl_Color)FL_BACKGROUND2_COLOR);
inpEQSL_nick->selection_color((Fl_Color)FL_SELECTION_COLOR);
inpEQSL_nick->labeltype(FL_NORMAL_LABEL);
inpEQSL_nick->labelfont(0);
inpEQSL_nick->labelsize(14);
inpEQSL_nick->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
inpEQSL_nick->callback((Fl_Callback*)cb_inpEQSL_nick);
inpEQSL_nick->align(FL_ALIGN_LEFT);
inpEQSL_nick->when(FL_WHEN_RELEASE);
o->value(progdefaults.eqsl_nick.c_str());
inpEQSL_nick->labelsize(FL_NORMAL_SIZE);
} // Fl_Input2* inpEQSL_nick
o->end();
} // Fl_Group* o
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(5, 232, 490, 134, _("Subscriber data"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Round_Button* o = btnQRZsub = new Fl_Round_Button(25, 263, 90, 20, _("QRZ.com"));
btnQRZsub->tooltip(_("You need a paid QRZ online\nsubscription to access"));
btnQRZsub->down_box(FL_DOWN_BOX);
btnQRZsub->callback((Fl_Callback*)cb_btnQRZsub);
o->value(progdefaults.QRZ == QRZNET);
} // Fl_Round_Button* btnQRZsub
{ Fl_Round_Button* o = btnHamcall = new Fl_Round_Button(25, 297, 105, 20, _("Hamcall.net"));
btnHamcall->tooltip(_("You need a paid Hamcall online\nsubscription to access"));
btnHamcall->down_box(FL_DOWN_BOX);
btnHamcall->callback((Fl_Callback*)cb_btnHamcall);
o->value(progdefaults.QRZ == HAMCALLNET);
} // Fl_Round_Button* btnHamcall
{ Fl_Input2* o = inpQRZusername = new Fl_Input2(235, 263, 150, 20, _("User name"));
inpQRZusername->tooltip(_("Your login name"));
inpQRZusername->box(FL_DOWN_BOX);
inpQRZusername->color((Fl_Color)FL_BACKGROUND2_COLOR);
inpQRZusername->selection_color((Fl_Color)FL_SELECTION_COLOR);
inpQRZusername->labeltype(FL_NORMAL_LABEL);
inpQRZusername->labelfont(0);
inpQRZusername->labelsize(14);
inpQRZusername->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
inpQRZusername->callback((Fl_Callback*)cb_inpQRZusername);
inpQRZusername->align(FL_ALIGN_LEFT);
inpQRZusername->when(FL_WHEN_RELEASE);
o->value(progdefaults.QRZusername.c_str());
inpQRZusername->labelsize(FL_NORMAL_SIZE);
} // Fl_Input2* inpQRZusername
{ Fl_Input2* o = inpQRZuserpassword = new Fl_Input2(235, 297, 150, 20, _("Password"));
inpQRZuserpassword->tooltip(_("Your login password"));
inpQRZuserpassword->box(FL_DOWN_BOX);
inpQRZuserpassword->color((Fl_Color)FL_BACKGROUND2_COLOR);
inpQRZuserpassword->selection_color((Fl_Color)FL_SELECTION_COLOR);
inpQRZuserpassword->labeltype(FL_NORMAL_LABEL);
inpQRZuserpassword->labelfont(0);
inpQRZuserpassword->labelsize(14);
inpQRZuserpassword->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
inpQRZuserpassword->callback((Fl_Callback*)cb_inpQRZuserpassword);
inpQRZuserpassword->align(FL_ALIGN_LEFT);
inpQRZuserpassword->when(FL_WHEN_RELEASE);
o->value(progdefaults.QRZuserpassword.c_str());
o->type(FL_SECRET_INPUT);
inpQRZuserpassword->labelsize(FL_NORMAL_SIZE);
} // Fl_Input2* inpQRZuserpassword
{ btnQRZpasswordShow = new Fl_Button(395, 297, 70, 20, _("Show"));
btnQRZpasswordShow->tooltip(_("Show password in plain text"));
btnQRZpasswordShow->callback((Fl_Callback*)cb_btnQRZpasswordShow);
} // Fl_Button* btnQRZpasswordShow
{ Fl_Round_Button* o = btnHamQTH = new Fl_Round_Button(26, 332, 121, 20, _("HamQTH.com"));
btnHamQTH->tooltip(_("You need a paid Hamcall online\nsubscription to access"));
btnHamQTH->down_box(FL_DOWN_BOX);
btnHamQTH->callback((Fl_Callback*)cb_btnHamQTH);
o->value(progdefaults.QRZ == HAMQTH);
} // Fl_Round_Button* btnHamQTH
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(5, 35, 490, 140);
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Round_Button* o = btnQRZnotavailable = new Fl_Round_Button(25, 45, 337, 20, _("Not available"));
btnQRZnotavailable->tooltip(_("Do not use callsign database"));
btnQRZnotavailable->down_box(FL_DOWN_BOX);
btnQRZnotavailable->value(1);
btnQRZnotavailable->callback((Fl_Callback*)cb_btnQRZnotavailable);
o->value(progdefaults.QRZ == QRZNONE);
} // Fl_Round_Button* btnQRZnotavailable
{ Fl_Round_Button* o = btnQRZonline = new Fl_Round_Button(25, 76, 337, 20, _("QRZ online via default Internet Browser"));
btnQRZonline->tooltip(_("Visit QRZ web site"));
btnQRZonline->down_box(FL_DOWN_BOX);
btnQRZonline->callback((Fl_Callback*)cb_btnQRZonline);
o->value(progdefaults.QRZ == QRZHTML);
} // Fl_Round_Button* btnQRZonline
{ Fl_Round_Button* o = btnHAMCALLonline = new Fl_Round_Button(25, 107, 337, 20, _("HamCall online via default Internet Browser"));
btnHAMCALLonline->tooltip(_("Visit Hamcall web site"));
btnHAMCALLonline->down_box(FL_DOWN_BOX);
btnHAMCALLonline->callback((Fl_Callback*)cb_btnHAMCALLonline);
o->value(progdefaults.QRZ == HAMCALLHTML);
} // Fl_Round_Button* btnHAMCALLonline
{ Fl_Round_Button* o = btnCALLOOK = new Fl_Round_Button(25, 139, 337, 20, _("Callook.info lookup (US callsigns only)"));
btnCALLOOK->tooltip(_("Visit Hamcall web site"));
btnCALLOOK->down_box(FL_DOWN_BOX);
btnCALLOOK->callback((Fl_Callback*)cb_btnCALLOOK);
o->value(progdefaults.QRZ == CALLOOK);
} // Fl_Round_Button* btnCALLOOK
o->end();
} // Fl_Group* o
} // Fl_Tabs* o
tabQRZ->end();
} // Fl_Group* tabQRZ
tabsConfigure->end();

Wyświetl plik

@ -3655,125 +3655,174 @@ progdefaults.changed = true;}
}
}
Fl_Group tabQRZ {
label {Callsign DB} open
label Web open
tooltip {Callsign database} xywh {0 25 500 345} hide
} {
Fl_Group {} {
label CDROM open
xywh {5 176 490 55} box ENGRAVED_FRAME align 21
Fl_Tabs {} {open
xywh {0 25 500 345}
} {
Fl_Round_Button btnQRZcdrom {
label QRZ
callback {set_qrz_buttons(o);
progdefaults.QRZ = QRZCD;
progdefaults.changed = true;}
tooltip {Use CD or hard drive CD image} xywh {25 196 70 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == QRZCD);}
}
Fl_Input txtQRZpathname {
label {at:}
callback {progdefaults.QRZpathname = o->value();
progdefaults.QRZchanged = true;
progdefaults.changed = true;}
tooltip {ie: /home/dave/CALLBK/ or C:/CALLBK/
Leave blank to search for database} xywh {104 196 300 20}
code0 {o->value(progdefaults.QRZpathname.c_str());}
code1 {txtQRZpathname->labelsize(FL_NORMAL_SIZE);}
class Fl_Input2
}
}
Fl_Group {} {
label {Subscriber data} open
xywh {5 232 490 134} box ENGRAVED_FRAME align 21
} {
Fl_Round_Button btnQRZsub {
label {QRZ.com}
callback {set_qrz_buttons(o);
progdefaults.QRZ = QRZNET;
progdefaults.changed = true;}
tooltip {You need a paid QRZ online
subscription to access} xywh {25 263 90 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == QRZNET);}
}
Fl_Round_Button btnHamcall {
label {Hamcall.net}
callback {set_qrz_buttons(o);
progdefaults.QRZ = HAMCALLNET;
progdefaults.changed = true;}
tooltip {You need a paid Hamcall online
subscription to access} xywh {25 297 105 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == HAMCALLNET);}
}
Fl_Input inpQRZusername {
label {User name}
callback {progdefaults.QRZusername = o->value();
progdefaults.changed = true;}
tooltip {Your login name} xywh {235 263 150 20}
code0 {o->value(progdefaults.QRZusername.c_str());}
code1 {inpQRZusername->labelsize(FL_NORMAL_SIZE);}
class Fl_Input2
}
Fl_Input inpQRZuserpassword {
label Password
callback {progdefaults.QRZuserpassword = o->value();
progdefaults.changed = true;}
tooltip {Your login password} xywh {235 297 150 20}
code0 {o->value(progdefaults.QRZuserpassword.c_str());}
code1 {o->type(FL_SECRET_INPUT);}
code2 {inpQRZuserpassword->labelsize(FL_NORMAL_SIZE);}
class Fl_Input2
}
Fl_Button btnQRZpasswordShow {
label Show
callback {inpQRZuserpassword->type(inpQRZuserpassword->type() ^ FL_SECRET_INPUT);
inpQRZuserpassword->redraw();
o->label((inpQRZuserpassword->type() & FL_SECRET_INPUT) ? "Show" : "Hide");}
tooltip {Show password in plain text} xywh {395 297 70 20}
}
Fl_Round_Button btnHamQTH {
label {HamQTH.com}
callback {set_qrz_buttons(o);
progdefaults.QRZ = HAMQTH;
progdefaults.changed = true;}
tooltip {You need a paid Hamcall online
subscription to access} xywh {26 332 121 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == HAMQTH);}
}
}
Fl_Group {} {open
xywh {5 35 490 140} box ENGRAVED_FRAME align 21
} {
Fl_Round_Button btnQRZnotavailable {
label {Not available}
callback {set_qrz_buttons(o);
Fl_Group {} {
label {QRZ/etal} open
xywh {0 46 500 324}
} {
Fl_Group {} {open
xywh {5 55 490 120} box ENGRAVED_FRAME align 21
} {
Fl_Round_Button btnQRZnotavailable {
label {Not available}
callback {set_qrz_buttons(o);
progdefaults.QRZ = QRZNONE;
progdefaults.changed = true;}
tooltip {Do not use callsign database} xywh {25 45 337 20} down_box DOWN_BOX value 1
code0 {o->value(progdefaults.QRZ == QRZNONE);}
}
Fl_Round_Button btnQRZonline {
label {QRZ online via default Internet Browser}
callback {set_qrz_buttons(o);
tooltip {Do not use callsign database} xywh {25 64 337 20} down_box DOWN_BOX value 1
code0 {o->value(progdefaults.QRZ == QRZNONE);}
}
Fl_Round_Button btnQRZonline {
label {QRZ online via default Internet Browser}
callback {set_qrz_buttons(o);
progdefaults.QRZ = QRZHTML;
progdefaults.changed = true;}
tooltip {Visit QRZ web site} xywh {25 76 337 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == QRZHTML);}
}
Fl_Round_Button btnHAMCALLonline {
label {HamCall online via default Internet Browser}
callback {set_qrz_buttons(o);
tooltip {Visit QRZ web site} xywh {25 92 337 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == QRZHTML);}
}
Fl_Round_Button btnHAMCALLonline {
label {HamCall online via default Internet Browser}
callback {set_qrz_buttons(o);
progdefaults.QRZ = HAMCALLHTML;
progdefaults.changed = true;}
tooltip {Visit Hamcall web site} xywh {25 107 337 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == HAMCALLHTML);}
}
Fl_Round_Button btnCALLOOK {
label {Callook.info lookup (US callsigns only)}
callback {set_qrz_buttons(o);
tooltip {Visit Hamcall web site} xywh {25 120 337 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == HAMCALLHTML);}
}
Fl_Round_Button btnCALLOOK {
label {Callook.info lookup (US callsigns only)}
callback {set_qrz_buttons(o);
progdefaults.QRZ = CALLOOK;
progdefaults.changed = true;}
tooltip {Visit Hamcall web site} xywh {25 139 337 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == CALLOOK);}
tooltip {Visit Hamcall web site} xywh {25 148 337 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == CALLOOK);}
}
}
Fl_Group {} {
label CDROM open
xywh {5 176 490 55} box ENGRAVED_FRAME align 21
} {
Fl_Round_Button btnQRZcdrom {
label QRZ
callback {set_qrz_buttons(o);
progdefaults.QRZ = QRZCD;
progdefaults.changed = true;}
tooltip {Use CD or hard drive CD image} xywh {25 196 70 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == QRZCD);}
}
Fl_Input txtQRZpathname {
label {at:}
callback {progdefaults.QRZpathname = o->value();
progdefaults.QRZchanged = true;
progdefaults.changed = true;}
tooltip {ie: /home/dave/CALLBK/ or C:/CALLBK/
Leave blank to search for database} xywh {104 196 300 20}
code0 {o->value(progdefaults.QRZpathname.c_str());}
code1 {txtQRZpathname->labelsize(FL_NORMAL_SIZE);}
class Fl_Input2
}
}
Fl_Group {} {
label {Subscriber data} open
xywh {5 232 490 134} box ENGRAVED_FRAME align 21
} {
Fl_Round_Button btnQRZsub {
label {QRZ.com}
callback {set_qrz_buttons(o);
progdefaults.QRZ = QRZNET;
progdefaults.changed = true;}
tooltip {You need a paid QRZ online
subscription to access} xywh {25 263 90 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == QRZNET);}
}
Fl_Round_Button btnHamcall {
label {Hamcall.net}
callback {set_qrz_buttons(o);
progdefaults.QRZ = HAMCALLNET;
progdefaults.changed = true;}
tooltip {You need a paid Hamcall online
subscription to access} xywh {25 297 105 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == HAMCALLNET);}
}
Fl_Input inpQRZusername {
label {User name}
callback {progdefaults.QRZusername = o->value();
progdefaults.changed = true;}
tooltip {Your login name} xywh {235 263 150 20}
code0 {o->value(progdefaults.QRZusername.c_str());}
code1 {inpQRZusername->labelsize(FL_NORMAL_SIZE);}
class Fl_Input2
}
Fl_Input inpQRZuserpassword {
label Password
callback {progdefaults.QRZuserpassword = o->value();
progdefaults.changed = true;}
tooltip {Your login password} xywh {235 297 150 20}
code0 {o->value(progdefaults.QRZuserpassword.c_str());}
code1 {o->type(FL_SECRET_INPUT);}
code2 {inpQRZuserpassword->labelsize(FL_NORMAL_SIZE);}
class Fl_Input2
}
Fl_Button btnQRZpasswordShow {
label Show
callback {inpQRZuserpassword->type(inpQRZuserpassword->type() ^ FL_SECRET_INPUT);
inpQRZuserpassword->redraw();
o->label((inpQRZuserpassword->type() & FL_SECRET_INPUT) ? "Show" : "Hide");}
tooltip {Show password in plain text} xywh {395 297 70 20}
}
Fl_Round_Button btnHamQTH {
label {HamQTH.com (free service http://www.hamqth.com)}
callback {set_qrz_buttons(o);
progdefaults.QRZ = HAMQTH;
progdefaults.changed = true;}
tooltip {You need a paid Hamcall online
subscription to access} xywh {26 332 121 20} down_box DOWN_BOX
code0 {o->value(progdefaults.QRZ == HAMQTH);}
}
}
}
Fl_Group {} {
label eQSL open
xywh {0 50 500 320} hide
} {
Fl_Input inpEQSL_id {
label {User ID}
callback {progdefaults.eqsl_id = o->value();
progdefaults.changed = true;}
tooltip {Your login name} xywh {176 75 150 20}
code0 {o->value(progdefaults.eqsl_id.c_str());}
code1 {inpEQSL_id->labelsize(FL_NORMAL_SIZE);}
class Fl_Input2
}
Fl_Input inpEQSL_pwd {
label Password
callback {progdefaults.eqsl_pwd = o->value();
progdefaults.changed = true;}
tooltip {Your login password} xywh {176 106 150 20}
code0 {o->value(progdefaults.eqsl_pwd.c_str());}
code1 {o->type(FL_SECRET_INPUT);}
code2 {inpEQSL_pwd->labelsize(FL_NORMAL_SIZE);}
class Fl_Input2
}
Fl_Button btnEQSL_pwd_show {
label Show
callback {inpEQSL_pwd->type(inpEQSL_pwd->type() ^ FL_SECRET_INPUT);
inpEQSL_pwd->redraw();
o->label((inpEQSL_pwd->type() & FL_SECRET_INPUT) ? "Show" : "Hide");}
tooltip {Show password in plain text} xywh {344 106 70 20}
}
Fl_Input inpEQSL_nick {
label {QTH Nickname}
callback {progdefaults.eqsl_nick = o->value();
progdefaults.changed = true;}
tooltip {Your login name} xywh {176 137 150 20}
code0 {o->value(progdefaults.eqsl_nick.c_str());}
code1 {inpEQSL_nick->labelsize(FL_NORMAL_SIZE);}
class Fl_Input2
}
}
}
}

Wyświetl plik

@ -3086,7 +3086,7 @@ Fl_Menu_Item menu_[] = {
{ make_icon_label(_("Misc")), 0, (Fl_Callback*)cb_mnuConfigMisc, 0, 0, _FL_MULTI_LABEL, 0, 14, 0},
{ make_icon_label(_("Notifications")), 0, (Fl_Callback*)cb_mnuConfigNotify, 0, 0, _FL_MULTI_LABEL, 0, 14, 0},
{ make_icon_label(CONTEST_MLABEL), 0, (Fl_Callback*)cb_mnuConfigContest, 0, 0, _FL_MULTI_LABEL, 0, 14, 0},
{ make_icon_label(_("QRZ"), net_icon), 0, (Fl_Callback*)cb_mnuConfigQRZ, 0, FL_MENU_DIVIDER, _FL_MULTI_LABEL, 0, 14, 0},
{ make_icon_label(_("QRZ/eQSL"), net_icon), 0, (Fl_Callback*)cb_mnuConfigQRZ, 0, FL_MENU_DIVIDER, _FL_MULTI_LABEL, 0, 14, 0},
{ make_icon_label(_("Save Config"), save_icon), 0, (Fl_Callback*)cb_mnuSaveConfig, 0, 0, _FL_MULTI_LABEL, 0, 14, 0},
{0,0,0,0,0,0,0,0,0},

Wyświetl plik

@ -404,6 +404,10 @@ extern Fl_Check_Button *chkRxStream;
extern Fl_Group *tabDTMF;
extern Fl_Check_Button *chkDTMFdecode;
extern Fl_Group *tabQRZ;
extern Fl_Round_Button *btnQRZnotavailable;
extern Fl_Round_Button *btnQRZonline;
extern Fl_Round_Button *btnHAMCALLonline;
extern Fl_Round_Button *btnCALLOOK;
extern Fl_Round_Button *btnQRZcdrom;
extern Fl_Input2 *txtQRZpathname;
extern Fl_Round_Button *btnQRZsub;
@ -412,10 +416,10 @@ extern Fl_Input2 *inpQRZusername;
extern Fl_Input2 *inpQRZuserpassword;
extern Fl_Button *btnQRZpasswordShow;
extern Fl_Round_Button *btnHamQTH;
extern Fl_Round_Button *btnQRZnotavailable;
extern Fl_Round_Button *btnQRZonline;
extern Fl_Round_Button *btnHAMCALLonline;
extern Fl_Round_Button *btnCALLOOK;
extern Fl_Input2 *inpEQSL_id;
extern Fl_Input2 *inpEQSL_pwd;
extern Fl_Button *btnEQSL_pwd_show;
extern Fl_Input2 *inpEQSL_nick;
extern Fl_Button *btnSaveConfig;
#include <FL/Fl_Return_Button.H>
extern Fl_Return_Button *btnCloseConfig;

Wyświetl plik

@ -662,6 +662,16 @@
"QRZ or HamCall subscriber password", \
"") \
ELEM_(bool, QRZchanged, "", "", false) \
/* eQSL */ \
ELEM_(std::string, eqsl_id, "EQSL_ID", \
"eQSL login id", \
"") \
ELEM_(std::string, eqsl_pwd, "EQSL_PASSWORD", \
"eQSL login password", \
"") \
ELEM_(std::string, eqsl_nick, "EQSL_NICKNAME", \
"eQSL nickname", \
"") \
/* Rig control */ \
ELEM_(bool, btnusb, "BTNUSB", \
"This setting is currently unused", \

Wyświetl plik

@ -18,4 +18,6 @@ extern void clear_Lookup();
extern void CALLSIGNquery();
enum qrz_query_t { QRZ_EXIT = -1, QRZNONE, QRZNET, QRZCD, HAMCALLNET, QRZHTML, HAMCALLHTML, CALLOOK, HAMQTH };
extern void sendEQSL(const char *url);
#endif

Wyświetl plik

@ -49,7 +49,7 @@ int pthread_cond_timedwait_rel(pthread_cond_t* cond, pthread_mutex_t* mutex, dou
//};
enum {
INVALID_TID = -1,
TRX_TID, QRZ_TID, RIGCTL_TID, NORIGCTL_TID,
TRX_TID, QRZ_TID, RIGCTL_TID, NORIGCTL_TID, EQSL_TID,
#if USE_XMLRPC
XMLRPC_TID,
#endif

Wyświetl plik

@ -1005,3 +1005,98 @@ void CALLSIGNquery()
pthread_cond_signal(&qrz_cond);
pthread_mutex_unlock(&qrz_mutex);
}
//======================================================================
// thread to support sending log entry to eQSL
//======================================================================
pthread_t* EQSLthread = 0;
pthread_mutex_t EQSLmutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t EQSLcond = PTHREAD_COND_INITIALIZER;
static void *EQSL_loop(void *args);
static void EQSL_init(void);
void EQSL_close(void);
void EQSL_send();
static std::string EQSL_url = "";
static std::string EQSL_xmlpage = "";
static bool EQSLEXIT = false;
static void *EQSL_loop(void *args)
{
SET_THREAD_ID(EQSL_TID);
SET_THREAD_CANCEL();
for (;;) {
TEST_THREAD_CANCEL();
pthread_mutex_lock(&EQSLmutex);
pthread_cond_wait(&EQSLcond, &EQSLmutex);
pthread_mutex_unlock(&EQSLmutex);
if (EQSLEXIT)
return NULL;
size_t p;
if (fetch_http(EQSL_url, EQSL_xmlpage, 5.0) == -1)
LOG_ERROR("%s", "eQSL not available");
else if ((p = EQSL_xmlpage.find("Error:")) != std::string::npos) {
size_t p2 = EQSL_xmlpage.find('\n', p);
LOG_ERROR("%s", EQSL_xmlpage.substr(p, p2 - p - 1).c_str());
} else
LOG_INFO("eQSL logged %s", EQSL_url.c_str());
}
return NULL;
}
void EQSL_close(void)
{
ENSURE_THREAD(FLMAIN_TID);
if (!EQSLthread)
return;
CANCEL_THREAD(*EQSLthread);
pthread_mutex_lock(&qrz_mutex);
EQSLEXIT = true;
pthread_cond_signal(&qrz_cond);
pthread_mutex_unlock(&qrz_mutex);
pthread_join(*QRZ_thread, NULL);
delete QRZ_thread;
QRZ_thread = 0;
}
static void EQSL_init(void)
{
ENSURE_THREAD(FLMAIN_TID);
if (EQSLthread)
return;
EQSLthread = new pthread_t;
EQSLEXIT = false;
if (pthread_create(EQSLthread, NULL, EQSL_loop, NULL) != 0) {
LOG_PERROR("pthread_create");
return;
}
MilliSleep(10);
}
void sendEQSL(const char *url)
{
ENSURE_THREAD(FLMAIN_TID);
if (!EQSLthread)
EQSL_init();
pthread_mutex_lock(&EQSLmutex);
EQSL_url = url;
pthread_cond_signal(&EQSLcond);
pthread_mutex_unlock(&EQSLmutex);
}

Wyświetl plik

@ -104,6 +104,7 @@ void loadBrowser(Fl_Widget *widget) {
w->add(_("<LOG>\tsave QSO data"));
w->add(_("<LNW>\tlog at xmt time"));
w->add(_("<CLRLOG>\tclear log fields"));
w->add(_("<EQSL:[msg]>\tlog eQSL optional msg"));
w->add(LINE_SEP);
w->add(_("<QSOTIME>\tQSO time (HHMM))"));

Wyświetl plik

@ -44,6 +44,9 @@
#include "qrunner.h"
#include "waterfall.h"
#include "rigsupport.h"
#include "network.h"
#include "logsupport.h"
#include "icons.h"
#include <FL/Fl.H>
#include <FL/filename.H>
@ -1666,6 +1669,100 @@ static void pEXEC(std::string& s, size_t& i, size_t endbracket)
}
#endif // !__MINGW32__
static void pEQSL(std::string& s, size_t& i, size_t endbracket)
{
if (within_exec) {
s.replace(i, endbracket - i + 1, "");
return;
}
size_t start = s.find(':', i);
std::string msg = "";
if (start != std::string::npos)
msg = s.substr(start + 1, endbracket-start-1);
char sztemp[100];
std::string tempstr;
std::string eQSL_url;
// eqsl url header
eQSL_url = "http://www.eqsl.cc/qslcard/importADIF.cfm?ADIFdata=upload <adIF_ver:5>2.1.9";
snprintf(sztemp, sizeof(sztemp),"<EQSL_USER:%d>%s<EQSL_PSWD:%d>%s",
progdefaults.eqsl_id.length(), progdefaults.eqsl_id.c_str(),
progdefaults.eqsl_pwd.length(), progdefaults.eqsl_pwd.c_str());
eQSL_url.append(sztemp);
// eqsl nickname
if (!progdefaults.eqsl_nick.empty()) {
snprintf(sztemp, sizeof(sztemp), "<APP_EQSL_QTH_NICKNAME:%d>%s",
progdefaults.eqsl_nick.length(), progdefaults.eqsl_nick.c_str());
eQSL_url.append(sztemp);
}
eQSL_url.append("<PROGRAMID:6>FLDIGI<EOH>");
// band
tempstr = band_name(band(wf->rfcarrier()));
snprintf(sztemp, sizeof(sztemp), "<BAND:%d>%s", tempstr.length(), tempstr.c_str());
eQSL_url.append(sztemp);
// call
tempstr = inpCall->value();
snprintf(sztemp, sizeof(sztemp), "<CALL:%d>%s", tempstr.length(), tempstr.c_str());
eQSL_url.append(sztemp);
// mode
tempstr = mode_info[active_modem->get_mode()].adif_name;
// test for modes not supported by eQSL
if ((tempstr.find("MFSK4") != std::string::npos) ||
(tempstr.find("MFSK11") != std::string::npos) ||
(tempstr.find("MFSK22") != std::string::npos) ||
(tempstr.find("MFSK31") != std::string::npos) ||
(tempstr.find("MFSK32") != std::string::npos) ||
(tempstr.find("MFSK64") != std::string::npos) )
tempstr = "MFSK16";
if ((tempstr.find("PSK250") != std::string::npos) ||
(tempstr.find("PSK500") != std::string::npos) ||
(tempstr.find("PSK125R") != std::string::npos) ||
(tempstr.find("PSK250R") != std::string::npos) ||
(tempstr.find("PSK500R") != std::string::npos))
tempstr = "PSK125";
if ((tempstr.find("QPSK250") != std::string::npos) ||
(tempstr.find("QPSK500") != std::string::npos) ||
(tempstr.find("QPSK125R") != std::string::npos) ||
(tempstr.find("QPSK250R") != std::string::npos) ||
(tempstr.find("QPSK500R") != std::string::npos))
tempstr = "QPSK125";
snprintf(sztemp, sizeof(sztemp), "<MODE:%d>%s", tempstr.length(), tempstr.c_str());
eQSL_url.append(sztemp);
// qso date
snprintf(sztemp, sizeof(sztemp), "<QSO_DATE:%d>%s", sDate_on.length(), sDate_on.c_str());
eQSL_url.append(sztemp);
// qso time
tempstr = inpTimeOn->value();
snprintf(sztemp, sizeof(sztemp), "<TIME_ON:%d>%s", tempstr.length(), tempstr.c_str());
eQSL_url.append(sztemp);
// rst sent
tempstr = inpRstOut->value();
snprintf(sztemp, sizeof(sztemp), "<RST_SENT:%d>%s", tempstr.length(), tempstr.c_str());
eQSL_url.append(sztemp);
// message
if (!msg.empty()) {
snprintf(sztemp, sizeof(sztemp), "<QSLMSG:%d>%s", msg.length(), msg.c_str());
eQSL_url.append(sztemp);
}
eQSL_url.append("<EOR>");
tempstr.clear();
for (size_t n = 0; n < eQSL_url.length(); n++) {
if (eQSL_url[n] == ' ') tempstr.append("%20");
else if (eQSL_url[n] == '<') tempstr.append("%3c");
else if (eQSL_url[n] == '>') tempstr.append("%3e");
else tempstr += eQSL_url[n];
}
sendEQSL(tempstr.c_str());
s.replace(i, endbracket - i + 1, "");
return;
}
static void MAPIT(int how)
{
float lat = 0, lon = 0;
@ -1860,6 +1957,7 @@ static const MTAGS mtags[] = {
{"<LOG>", pLOG},
{"<LNW>", pLNW},
{"<CLRLOG>", pCLRLOG},
{"<EQSL:", pEQSL},
{"<TIMER:", pTIMER},
{"<IDLE:", pIDLE},
{"<TUNE:", pTUNE},