Rewrite change_modem_param

Add new config menu for waterfall mouse-1 handling

Also incorporate changes from Stephane Fillod, F8CFE, to:

* Change the rig frequency by scrolling the mouse wheel on the waterfall
  frequency scale area when the waterfall-qsy option is enabled

* Change the modem carrier frequency when the wheel is scrolled
  elsewhere on the waterfall, now the default handling
pull/2/head
Stelios Bounanos 2008-10-11 23:57:43 +01:00
rodzic 09fde4d7a2
commit 62b901f7b6
10 zmienionych plików z 131 dodań i 62 usunięć

Wyświetl plik

@ -6,6 +6,7 @@
#include "soundconf.h"
#include "combo.h"
#include "colorsfonts.h"
#include "waterfall.h"
extern void initViewer();
Fl_Double_Window *dlgConfig;
@ -305,6 +306,13 @@ static void cb_inpWaterfallClickText(Fl_Input* o, void*) {
progdefaults.changed = true;
}
Fl_Choice *mnuWaterfallWheelAction=(Fl_Choice *)0;
static void cb_mnuWaterfallWheelAction(Fl_Choice* o, void*) {
progdefaults.WaterfallWheelAction = o->value();
progdefaults.changed = true;
}
Fl_Group *tabVideo=(Fl_Group *)0;
Fl_Check_Button *btnsendid=(Fl_Check_Button *)0;
@ -1720,6 +1728,11 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
} // Fl_Input* inpWaterfallClickText
o->end();
} // Fl_Group* o
{ mnuWaterfallWheelAction = new Fl_Choice(15, 176, 150, 22, "Wheel action");
mnuWaterfallWheelAction->down_box(FL_BORDER_BOX);
mnuWaterfallWheelAction->callback((Fl_Callback*)cb_mnuWaterfallWheelAction);
mnuWaterfallWheelAction->align(FL_ALIGN_RIGHT);
} // Fl_Choice* mnuWaterfallWheelAction
o->end();
} // Fl_Group* o
o->end();

Wyświetl plik

@ -21,6 +21,8 @@ decl {\#include "combo.h"} {}
decl {\#include "colorsfonts.h"} {}
decl {\#include "waterfall.h"} {}
decl {extern void initViewer();} {}
decl {Fl_Double_Window *dlgConfig;} {public
@ -380,6 +382,12 @@ progdefaults.changed = true;}
xywh {15 126 150 40} align 8
}
}
Fl_Choice mnuWaterfallWheelAction {
label {Wheel action}
callback {progdefaults.WaterfallWheelAction = o->value();
progdefaults.changed = true;} open
xywh {15 176 150 22} down_box BORDER_BOX align 8
} {}
}
}
}

Wyświetl plik

@ -2506,57 +2506,6 @@ void setReverse(int rev) {
active_modem->set_reverse(rev);
}
void change_modem_param(int state)
{
int d;
if ( !((d = Fl::event_dy()) || (d = Fl::event_dx())) )
return;
if (state & (FL_META | FL_ALT)) {
if (d > 0)
active_modem->searchUp();
else if (d < 0)
active_modem->searchDown();
return;
}
if (!(state & (FL_CTRL | FL_SHIFT)))
return; // suggestions?
Fl_Valuator *val;
if (state & FL_CTRL) {
trx_mode m = active_modem->get_mode();
if (m >= MODE_PSK_FIRST && m <= MODE_PSK_LAST)
val = mailserver ? cntServerOffset : cntSearchRange;
else if (m >= MODE_HELL_FIRST && m <= MODE_HELL_LAST)
val = sldrHellBW;
else if (m == MODE_CW)
val = sldrCWbandwidth;
else
return;
}
else if (state & FL_SHIFT) {
val = sldrSquelch;
if (!twoscopes)
d = -d;
}
val->value(val->clamp(val->increment(val->value(), -d)));
bool changed_save = progdefaults.changed;
val->do_callback();
progdefaults.changed = changed_save;
if (val == cntServerOffset || val == cntSearchRange)
active_modem->set_sigsearch(SIGSEARCH);
else if (val == sldrSquelch) // sldrSquelch gives focus to TextWidget
wf->take_focus();
char msg[60];
if (val != sldrSquelch)
snprintf(msg, sizeof(msg), "%s = %2.0f Hz", val->label(), val->value());
else
snprintf(msg, sizeof(msg), "Squelch = %2.0f %%", val->value());
put_status(msg, 2);
}
void start_tx()
{
if (progdefaults.rsid == true) return;

Wyświetl plik

@ -48,6 +48,8 @@ extern Fl_Button *btnBwTracksColor;
extern Fl_Check_Button *btnWaterfallHistoryDefault;
extern Fl_Check_Button *btnWaterfallQSY;
extern Fl_Input *inpWaterfallClickText;
#include <FL/Fl_Choice.H>
extern Fl_Choice *mnuWaterfallWheelAction;
extern Fl_Group *tabVideo;
extern Fl_Check_Button *btnsendid;
extern Fl_Check_Button *btnsendvideotext;
@ -71,7 +73,6 @@ extern Fl_Input_Choice *inpTTYdev;
extern Fl_Round_Button *btnPTT[5];
extern Fl_Check_Button *chkUSEHAMLIB;
extern Fl_ComboBox *cboHamlibRig;
#include <FL/Fl_Choice.H>
extern Fl_Choice *mnuBaudRate;
extern Fl_Input_Choice *inpRIGdev;
extern Fl_Check_Button *chkUSERIGCAT;

Wyświetl plik

@ -29,6 +29,7 @@ struct configuration {
bool WaterfallHistoryDefault;
bool WaterfallQSY;
string WaterfallClickText;
int WaterfallWheelAction;
// for PSK & PSK mail interface
bool PSKmailSweetSpot;
int SearchRange;

Wyświetl plik

@ -156,8 +156,6 @@ extern bool QuerySqlOnOff();
extern void init_modem(trx_mode mode);
extern void init_modem_sync(trx_mode mode);
extern void change_modem_param(int state);
extern void start_tx();
extern void abort_tx();

Wyświetl plik

@ -158,7 +158,6 @@ public:
void draw();
// void resize (int, int, int, int);
int handle(int event);
void handle_mouse_wheel(int event);
void update_sigmap();
void update_waterfall();
void checkoffset();
@ -365,8 +364,12 @@ public:
double Pwr(int i) { return wfdisp->Pwr(i); }
int handle(int event);
/*
*/
enum { WF_NOP, WF_AFC_BW, WF_SIGNAL_SEARCH, WF_SQUELCH,
WF_CARRIER, WF_MODEM, WF_SCROLL };
static const char wf_wheel_action[];
void handle_mouse_wheel(int what, int d);
Fl_Button *btnRev;
Fl_Counter *wfcarrier;
Fl_Counter *wfRefLevel;

Wyświetl plik

@ -4,6 +4,7 @@
#include "confdialog.h"
#include "xmlreader.h"
#include "soundconf.h"
#include "waterfall.h"
#if USE_HAMLIB
#include "hamlib.h"
@ -47,6 +48,7 @@ configuration progdefaults = {
false, // bool WaterfallHistoryDefault;
false, // bool WaterfallQSY;
"", // string WaterfallClickText;
waterfall::WF_CARRIER, // int WaterfallWheelAction;
// for PSK mail interface
false, // bool PSKmailSweetSpot;
@ -292,7 +294,7 @@ enum TAG { \
IGNORE,
MYCALL, MYNAME, MYQTH, MYLOC,
SQUELCH, WFREFLEVEL, WFAMPSPAN, LOWFREQCUTOFF,
WATERFALLHISTORYDEFAULT, WATERFALLQSY, WATERFALLCLICKTEXT,
WATERFALLHISTORYDEFAULT, WATERFALLQSY, WATERFALLCLICKTEXT, WATERFALLWHEELACTION,
STARTATSWEETSPOT, PSKMAILSWEETSPOT,
PSKSEARCHRANGE, PSKSERVEROFFSET,
ACQSN,
@ -430,6 +432,7 @@ void configuration::writeDefaultsXML()
writeXMLbool(f, "WATERFALLHISTORYDEFAULT", WaterfallHistoryDefault);
writeXMLbool(f, "WATERFALLQSY", WaterfallQSY);
writeXMLstr(f, "WATERFALLCLICKTEXT", WaterfallClickText);
writeXMLint(f, "WATERFALLWHEELACTION", WaterfallWheelAction);
writeXMLbool(f, "STARTATSWEETSPOT", StartAtSweetSpot);
writeXMLbool(f, "PSKMAILSWEETSPOT", PSKmailSweetSpot);
writeXMLint(f, "PSKSEARCHRANGE", SearchRange);
@ -679,6 +682,9 @@ bool configuration::readDefaultsXML()
case WATERFALLCLICKTEXT :
WaterfallClickText = getstring(xml);
break;
case WATERFALLWHEELACTION :
WaterfallWheelAction = atoi(getstring(xml).c_str());
break;
case STARTATSWEETSPOT :
StartAtSweetSpot = atoi(getstring(xml).c_str());
break;
@ -1224,6 +1230,7 @@ bool configuration::readDefaultsXML()
else if (!strcmp("WATERFALLHISTORYDEFAULT", nodeName)) tag = WATERFALLHISTORYDEFAULT;
else if (!strcmp("WATERFALLQSY", nodeName)) tag = WATERFALLQSY;
else if (!strcmp("WATERFALLCLICKTEXT", nodeName)) tag = WATERFALLCLICKTEXT;
else if (!strcmp("WATERFALLWHEELACTION", nodeName)) tag = WATERFALLWHEELACTION;
else if (!strcmp("STARTATSWEETSPOT", nodeName)) tag = STARTATSWEETSPOT;
else if (!strcmp("PSKMAILSWEETSPOT", nodeName)) tag = PSKMAILSWEETSPOT;
else if (!strcmp("PSKSEARCHRANGE", nodeName)) tag = PSKSEARCHRANGE;
@ -1565,6 +1572,10 @@ int configuration::setDefaults() {
btnWaterfallQSY->value(WaterfallQSY);
inpWaterfallClickText->input_type(FL_MULTILINE_INPUT);
inpWaterfallClickText->value(WaterfallClickText.c_str());
mnuWaterfallWheelAction->add(waterfall::wf_wheel_action);
mnuWaterfallWheelAction->value(WaterfallWheelAction);
btnStartAtSweetSpot->value(StartAtSweetSpot);
btnPSKmailSweetSpot->value(PSKmailSweetSpot);
cntSearchRange->value(SearchRange);

Wyświetl plik

@ -472,7 +472,8 @@ int Digiscope::handle(int event)
}
return 1;
case FL_MOUSEWHEEL:
change_modem_param(FL_CTRL);
if ((event = Fl::event_dy()) || (event = Fl::event_dx()))
wf->handle_mouse_wheel(waterfall::WF_AFC_BW, event);
break;
default:
break;

Wyświetl plik

@ -48,6 +48,7 @@
#include "Viewer.h"
#include "macros.h"
#include "arq_io.h"
#include "confdialog.h"
extern modem *active_modem;
@ -1551,10 +1552,25 @@ int WFdisp::handle(int event)
break;
case FL_MOUSEWHEEL:
change_modem_param(Fl::event_state());
{
int d;
if ( !((d = Fl::event_dy()) || (d = Fl::event_dx())) )
break;
int state = Fl::event_state();
if (state & FL_CTRL)
wf->handle_mouse_wheel(waterfall::WF_AFC_BW, d);
else if (state & (FL_META | FL_ALT))
wf->handle_mouse_wheel(waterfall::WF_SIGNAL_SEARCH, d);
else if (state & FL_SHIFT)
wf->handle_mouse_wheel(waterfall::WF_SQUELCH, d);
else {
if (progdefaults.WaterfallQSY && Fl::event_inside(x(), y(), w(), WFTEXT+WFSCALE+WFMARKER))
qsy(wf->rfcarrier() - 500*d);
else
wf->handle_mouse_wheel(progdefaults.WaterfallWheelAction, d);
}
return handle(FL_MOVE);
break;
}
case FL_SHORTCUT:
if (Fl::event_inside(this))
take_focus();
@ -1606,3 +1622,71 @@ int WFdisp::handle(int event)
return 1;
}
void waterfall::handle_mouse_wheel(int what, int d)
{
if (d == 0)
return;
Fl_Valuator *val = 0;
const char* msg_fmt = 0, *msg_label = 0;
switch (what) {
case WF_NOP:
return;
case WF_AFC_BW:
{
trx_mode m = active_modem->get_mode();
if (m >= MODE_PSK_FIRST && m <= MODE_PSK_LAST)
val = mailserver ? cntServerOffset : cntSearchRange;
else if (m >= MODE_HELL_FIRST && m <= MODE_HELL_LAST)
val = sldrHellBW;
else if (m == MODE_CW)
val = sldrCWbandwidth;
msg_fmt = "%s = %2.0f Hz";
msg_label = val->label();
break;
}
case WF_SIGNAL_SEARCH:
if (d > 0)
active_modem->searchDown();
else
active_modem->searchUp();
return;
case WF_SQUELCH:
val = sldrSquelch;
if (!twoscopes)
d = -d;
msg_fmt = "%s = %2.0f %%";
msg_label = "Squelch";
break;
case WF_CARRIER:
val = wfcarrier;
break;
case WF_MODEM:
init_modem(d > 0 ? MODE_NEXT : MODE_PREV);
return;
case WF_SCROLL:
(d > 0 ? right : left)->do_callback();
return;
}
val->value(val->clamp(val->increment(val->value(), -d)));
bool changed_save = progdefaults.changed;
val->do_callback();
progdefaults.changed = changed_save;
if (val == cntServerOffset || val == cntSearchRange)
active_modem->set_sigsearch(SIGSEARCH);
else if (val == sldrSquelch) // sldrSquelch gives focus to TransmitText
take_focus();
if (msg_fmt) {
char msg[60];
snprintf(msg, sizeof(msg), msg_fmt, msg_label, val->value());
put_status(msg, 2.0);
}
}
const char waterfall::wf_wheel_action[] = "None|AFC range or BW|"
"Signal search|Squelch level|"
"Modem carrier|Modem|Scroll";