Tabs/Relay Options/GUI/Fluid

* Save selected Tab panel state on exit
  * Restore selected panel on restart.
  * Corrected Widget Event Settings (FLUID).
  * Add Header/Data Repeat Counters for Relay file transmissions.
  * Add transmit time widget for relay files.
  * Move relay auto save checkboxes to config panel.
  * Corrected default Olivia modem tag names.
  * Add code to correctly restore RX panel data on file selection changes.
This commit is contained in:
kk5vd 2024-01-28 15:45:52 -07:00 committed by dave-w1hkj
parent e00f09b08a
commit afb90bd6d5
12 changed files with 407 additions and 210 deletions

View file

@ -1388,6 +1388,7 @@ void show_rx_amp(void)
{
cAmp * amp = rx_amp.get_amp();
if (!amp) return;
std::string time_size_info;
txt_rx_filename->value(amp->get_rx_fname().c_str());
txt_rx_datetime->value(amp->rx_time_stamp().c_str());
@ -1399,6 +1400,10 @@ void show_rx_amp(void)
txt_rx_missing_blocks->value(amp->rx_missing().c_str());
txt_relay_selected_blocks->value(amp->rx_relay_blocks().c_str());
rx_progress->set(amp->rx_blocks(), amp->rx_nblocks());
cnt_repeat_relay_data->value(progStatus.repeat_relay_data);
cnt_repeat_relay_header->value(progStatus.repeat_relay_header);
estimate_relay();
if (amp->rx_completed() && txt_rx_output->buffer()->length() == 0) {
std::string data = amp->rx_recvd_string();
decompress_maybe(data);
@ -1588,7 +1593,7 @@ void send_relay_data(void)
relay_data.header = amp->xmt_vector_header();
relay_data.data = amp->xmt_vector_data();
} else {
relay_data.serial_data = amp->tx_relay_string(progStatus.my_call, missing_blocks);
relay_data.serial_data = amp->tx_relay_string(progStatus.my_call, missing_blocks, false);
}
results = fl_choice("%s", cancel, yes, (const char *)0, cont);
@ -2456,61 +2461,40 @@ void receive_remove_from_queue(bool all)
}
}
#if 0
/** ********************************************************
*
***********************************************************/
void estimate(cAmp *amp, bool visable) {
std::string calc_string_tx_time(std::string string_data)
{
char sz_xfr_size[100];
float xfr_time = 0;
float oh = 0;
int transfer_size = 0;
static std::string ret_str;
static char sz_xfr_size[50];
float xfr_time = 0;
float oh = 0;
int transfer_size;
int n = 0;
memset(sz_xfr_size, 0, sizeof(sz_xfr_size));
if(tx_amp.size() < 1)
return;
xfr_time = seconds_from_string(cbo_modes->value(), string_data, &oh);
xfr_time += oh;
transfer_size = string_data.size();
if(!amp) {
n = tx_queue->value();
if(n < 1) return;
amp = tx_amp.index2amp(n);
if(!amp) return;
}
if (xfr_time < 60)
snprintf(sz_xfr_size, sizeof(sz_xfr_size), "%d bytes / %d secs",
transfer_size, (int)(xfr_time + 0.5));
else
snprintf(sz_xfr_size, sizeof(sz_xfr_size), "%d bytes / %d m %d s",
transfer_size,
(int)(xfr_time / 60), ((int)xfr_time) % 60);
amp->amp_update();
std::string xmtstr = amp->tx_string(" K\n");
ret_str.assign(sz_xfr_size);
if(visable) {
transfer_size = xmtstr.length();
if (transfer_size == 0) {
txt_transfer_size_time->value("");
return;
}
xfr_time = seconds_from_string(cbo_modes->value(), xmtstr, &oh);
xfr_time += oh;
if (xfr_time < 60)
snprintf(sz_xfr_size, sizeof(sz_xfr_size), "%d bytes / %d secs",
transfer_size, (int)(xfr_time + 0.5));
else
snprintf(sz_xfr_size, sizeof(sz_xfr_size), "%d bytes / %d m %d s",
transfer_size,
(int)(xfr_time / 60), ((int)xfr_time) % 60);
txt_transfer_size_time->value(sz_xfr_size);
txt_tx_numblocks->value(amp->xmt_numblocks().c_str());
}
return ret_str;
}
#else
/** ********************************************************
*
***********************************************************/
void estimate(cAmp *amp, bool visable)
void estimate(cAmp *amp, bool visible)
{
int n = 0;
@ -2526,13 +2510,39 @@ void estimate(cAmp *amp, bool visable)
amp->amp_update();
if(visable) {
if(visible) {
txt_transfer_size_time->value(amp->estimate().c_str());
txt_tx_numblocks->value(amp->xmt_numblocks().c_str());
}
}
#endif
/** ********************************************************
*
***********************************************************/
void estimate_relay(void)
{
cAmp *amp = (cAmp *) 0;
int n = 0;
std::string data;
if(rx_amp.size() < 1)
return;
n = rx_queue->value();
if(n < 1) return;
amp = rx_amp.index2amp(n);
if(!amp) return;
data.assign(txt_relay_selected_blocks->value());
amp->rx_relay_blocks(data);
data = amp->rx_relay_blocks();
data = amp->tx_relay_string(progStatus.my_call, data, false);
data = calc_string_tx_time(data);
txt_transfer_relay_size_time->value(data.c_str());
}
/** ********************************************************
*
@ -3003,6 +3013,9 @@ int main (int argc, char *argv[])
cnt_repeat_nbr->value(progStatus.repeatNN);
cnt_repeat_header->value(progStatus.repeat_header);
cnt_repeat_relay_data->value(progStatus.repeat_relay_data);
cnt_repeat_relay_header->value(progStatus.repeat_relay_header);
tx_buffer.clear();
rx_buffer.clear();
@ -3016,7 +3029,7 @@ int main (int argc, char *argv[])
unproto_widgets(0);
Fl::add_timeout(0.5, check_io_mode);
Fl::add_timeout(1.0, check_io_mode);
return Fl::run();
}
@ -3045,16 +3058,22 @@ void check_io_mode(void *v)
}
}
extern Fl_Group *tab_pointers[];
/** ********************************************************
*
***********************************************************/
void check_call_and_id(void *v)
{
if(progStatus.my_call.empty() || progStatus.my_info.empty()) {
if(tabs && Config_tab) {
tabs->value(Config_tab);
fl_choice2(_("Update Callsign and Info"), _("Okay"), NULL, NULL);
{
if(tabs) {
if(progStatus.my_call.empty() || progStatus.my_info.empty()) {
if(Config_tab) {
tabs->value(Config_tab);
fl_choice2(_("Update Callsign and Info"), _("Okay"), NULL, NULL);
}
} else {
if(tab_pointers[progStatus.tab_saved_state])
tabs->value(tab_pointers[progStatus.tab_saved_state]); // User Selected
}
}
}

View file

@ -25,7 +25,7 @@
#include "dialogs.h"
#include "flamp_dialog.h"
//======================================================================
Fl_Double_Window * main_window = 0;
@ -57,6 +57,8 @@ const char *event_types[] = {
(char *) 0
};
Fl_Group *tab_pointers[tab_count];
/** ********************************************************
*
***********************************************************/
@ -73,6 +75,9 @@ void redraw_rx_panel(void * data)
txt_rx_output->redraw();
txt_relay_selected_blocks->redraw();
rx_progress->redraw();
cnt_repeat_relay_data->redraw();
cnt_repeat_relay_header->redraw();
txt_transfer_relay_size_time->redraw();
}
}
@ -219,9 +224,9 @@ void init_cbo_modes()
"8PSK500F|8PSK1000F|8PSK1200F|BPSK31|BPSK63|BPSK63F|BPSK125|" \
"BPSK250|BPSK500|BPSK1000|DOMX22|DOMX44|DOMX88|MFSK16|MFSK22|MFSK31|" \
"MFSK32|MFSK64|MFSK64L|MFSK128|MFSK128L|MT63-500L|MT63-500S|MT63-1KL|" \
"MT63-1KS|MT63-2KL|MT63-2KS|Olivia-4-250|Olivia-4-500|Olivia-8-250|" \
"Olivia-8-500|Olivia-8-1K|Olivia-16-500|Olivia-16-1K|Olivia-32-1K|" \
"Olivia-64-2K|PSK63RC4|PSK63RC5|PSK63RC10|PSK63RC20|PSK63RC32|PSK125R|" \
"MT63-1KS|MT63-2KL|MT63-2KS|Olivia-4/250|Olivia-4/500|Olivia-8/250|" \
"Olivia-8/500|Olivia-8/1K|Olivia-16/500|Olivia-16/1K|Olivia-32/1K|" \
"Olivia-64/2K|PSK63RC4|PSK63RC5|PSK63RC10|PSK63RC20|PSK63RC32|PSK125R|" \
"PSK125RC4|PSK125RC5|PSK125C12|PSK125RC10|PSK125RC12|PSK125RC16|PSK250R|" \
"PSK250C6|PSK250RC2|PSK250RC3|PSK250RC5|PSK250RC6|PSK250RC7|PSK500R|PSK500C2|" \
"PSK500C4|PSK500RC2|PSK500RC3|PSK500RC4|PSK800C2|PSK800RC2|PSK1000C2|" \
@ -1068,3 +1073,45 @@ void cb_auto_rx_save_local_time(Fl_Check_Button *a, void *b)
{
progStatus.auto_rx_save_local_time = btn_auto_rx_save_local_time->value();
}
/** ********************************************************
*
***********************************************************/
void cb_tab(Fl_Tabs *a, void *b)
{
int index = 0;
Fl_Group *tmp = (Fl_Group *) a->value();
for(index = 0; index < tab_count; index++) {
if(tmp == tab_pointers[index]) {
break;
}
}
progStatus.tab_saved_state = index;
}
/** ********************************************************
*
***********************************************************/
void cb_cnt_repeat_relay_data(Fl_Counter *a, void *b)
{
progStatus.repeat_relay_data = cnt_repeat_relay_data->value();
estimate_relay();
}
/** ********************************************************
*
***********************************************************/
void cb_cnt_repeat_relay_header(Fl_Counter *a, void *b)
{
progStatus.repeat_relay_header = cnt_repeat_relay_header->value();
estimate_relay();
}
/** ********************************************************
*
***********************************************************/
void cb_txt_relay_selected_blocks(Fl_Input2 *a, void *b)
{
estimate_relay();
}

View file

@ -361,7 +361,7 @@ public:
std::string rx_report(void);
std::string rx_stats(void);
std::string rx_time_stamp() { return rxdttm; }
std::string tx_relay_string(std::string callfrom, std::string missig_blocks);
std::string tx_relay_string(std::string callfrom, std::string missig_blocks, bool filesave_flag);
void append_report(std::string s);
void rx_add_data(std::string data);

View file

@ -32,6 +32,7 @@ extern void cb_mnuOnLineHelp(Fl_Menu_*, void*);
extern void cb_mnuCmdLineParams(Fl_Menu_*, void*);
extern void cb_mnuAbout(Fl_Menu_*, void*);
#include <FL/Fl_Tabs.H>
extern void cb_tab(Fl_Tabs*, void*);
extern Fl_Tabs *tabs;
#include <FL/Fl_Group.H>
extern Fl_Group *Rx_tab;
@ -59,13 +60,16 @@ extern void cb_btn_send_relay(Fl_Button*, void*);
extern Fl_Button *btn_send_relay;
extern void cb_btn_parse_relay_blocks(Fl_Button*, void*);
extern Fl_Button *btn_parse_relay_blocks;
extern void cb_txt_relay_selected_blocks(Fl_Input2*, void*);
extern Fl_Input2 *txt_relay_selected_blocks;
#include <FL/Fl_Browser.H>
extern void cb_rx_queue(Fl_Browser*, void*);
extern Fl_Browser *rx_queue;
#include <FL/Fl_Check_Button.H>
extern Fl_Check_Button *btn_auto_rx_save;
extern Fl_Check_Button *btn_relay_retain_data;
extern void cb_cnt_repeat_relay_data(Fl_Counter*, void*);
extern Fl_Counter *cnt_repeat_relay_data;
extern void cb_cnt_repeat_relay_header(Fl_Counter*, void*);
extern Fl_Counter *cnt_repeat_relay_header;
extern Fl_Output *txt_transfer_relay_size_time;
extern Fl_Group *Tx_tab;
extern void cb_tx_send_to(Fl_Input2*, void*);
extern Fl_Input2 *txt_tx_send_to;
@ -84,6 +88,7 @@ extern Fl_ComboBox *encoders;
extern void cb_cbo_modes(Fl_ComboBox*, void*);
extern Fl_ComboBox *cbo_modes;
extern Fl_Output *txt_transfer_size_time;
#include <FL/Fl_Check_Button.H>
extern void cb_use_compression(Fl_Check_Button*, void*);
extern Fl_Check_Button *btn_use_compression;
extern void cb_enable_tx_unproto(Fl_Check_Button*, void*);
@ -185,6 +190,8 @@ extern Fl_Counter *cnt_tx_interval_mins;
extern void cb_rx_interval_secs(Fl_Counter*, void*);
extern Fl_Counter *cnt_rx_interval_secs;
extern Fl_Output *txt_tx_interval;
extern Fl_Check_Button *btn_relay_retain_data;
extern Fl_Check_Button *btn_auto_rx_save;
extern Fl_Group *box_not_connected;
extern Fl_Group *box_connected;
Fl_Double_Window* flamp_dialog();

View file

@ -156,6 +156,7 @@ extern void turn_rsid_on(void);
extern void tx_removefile(bool flag);
extern void update_cAmp_changes(cAmp *amp);
extern void writefile(int);
extern void estimate_relay(void);
extern void xml_execute_script(std::string);
extern int xml_create_script(std::string script_path_name, std::string text);

View file

@ -55,4 +55,14 @@ extern std::string g_header_modem;
extern std::string g_modem;
extern std::string selected_encoder_string;
enum tab_number {
rx_tab_idx = 0,
tx_tab_idx = 1,
events_tab_idx = 2,
config_tab_idx = 3,
tab_count
};
extern Fl_Group *tab_pointers[tab_count];
#endif

View file

@ -28,7 +28,6 @@
#include <string>
struct status {
int mainX;
int mainY;
@ -105,6 +104,11 @@ struct status {
bool auto_rx_save_local_time;
bool relay_retain_data;
int tab_saved_state;
int repeat_relay_data;
int repeat_relay_header;
void saveLastState();
void loadLastState();
};

View file

@ -69,17 +69,11 @@ Fl_Input2 *txt_relay_selected_blocks=(Fl_Input2 *)0;
Fl_Browser *rx_queue=(Fl_Browser *)0;
Fl_Check_Button *btn_auto_rx_save=(Fl_Check_Button *)0;
Fl_Counter *cnt_repeat_relay_data=(Fl_Counter *)0;
static void cb_btn_auto_rx_save(Fl_Check_Button* o, void*) {
progStatus.auto_rx_save = o->value();
}
Fl_Counter *cnt_repeat_relay_header=(Fl_Counter *)0;
Fl_Check_Button *btn_relay_retain_data=(Fl_Check_Button *)0;
static void cb_btn_relay_retain_data(Fl_Check_Button* o, void*) {
progStatus.relay_retain_data = o->value();
}
Fl_Output *txt_transfer_relay_size_time=(Fl_Output *)0;
Fl_Group *Tx_tab=(Fl_Group *)0;
@ -215,19 +209,32 @@ Fl_Counter *cnt_rx_interval_secs=(Fl_Counter *)0;
Fl_Output *txt_tx_interval=(Fl_Output *)0;
Fl_Check_Button *btn_relay_retain_data=(Fl_Check_Button *)0;
static void cb_btn_relay_retain_data(Fl_Check_Button* o, void*) {
progStatus.relay_retain_data = o->value();
}
Fl_Check_Button *btn_auto_rx_save=(Fl_Check_Button *)0;
static void cb_btn_auto_rx_save(Fl_Check_Button* o, void*) {
progStatus.auto_rx_save = o->value();
}
Fl_Group *box_not_connected=(Fl_Group *)0;
Fl_Group *box_connected=(Fl_Group *)0;
Fl_Double_Window* flamp_dialog() {
{ dialog_flamp = new Fl_Double_Window(505, 500, "FLAMP");
{ dialog_flamp = new Fl_Double_Window(505, 524, "FLAMP");
{ mnubar = new Fl_Menu_Bar(0, 0, 505, 24);
mnubar->menu(menu_mnubar);
} // Fl_Menu_Bar* mnubar
{ tabs = new Fl_Tabs(0, 24, 505, 476);
{ tabs = new Fl_Tabs(0, 24, 520, 500);
tabs->selection_color((Fl_Color)246);
{ Rx_tab = new Fl_Group(0, 48, 505, 452, "Receive");
Rx_tab->hide();
tabs->callback((Fl_Callback*)cb_tab);
tabs->when(FL_WHEN_CHANGED);
{ Rx_tab = new Fl_Group(0, 48, 515, 476, "Receive");
{ txt_rx_filename = new Fl_Output(100, 54, 400, 20, "Output:");
} // Fl_Output* txt_rx_filename
{ txt_rx_datetime = new Fl_Output(100, 78, 295, 20, "Date time:");
@ -278,13 +285,13 @@ Fl_Double_Window* flamp_dialog() {
txt_rx_output->align(Fl_Align(FL_ALIGN_TOP_LEFT));
txt_rx_output->when(FL_WHEN_RELEASE);
} // FTextView* txt_rx_output
{ btn_send_relay = new Fl_Button(4, 328, 70, 20, "Relay");
{ btn_send_relay = new Fl_Button(5, 325, 80, 20, "Relay");
btn_send_relay->callback((Fl_Callback*)cb_btn_send_relay);
} // Fl_Button* btn_send_relay
{ btn_parse_relay_blocks = new Fl_Button(80, 328, 70, 20, "Fetch");
{ btn_parse_relay_blocks = new Fl_Button(5, 355, 80, 20, "Fetch");
btn_parse_relay_blocks->callback((Fl_Callback*)cb_btn_parse_relay_blocks);
} // Fl_Button* btn_parse_relay_blocks
{ txt_relay_selected_blocks = new Fl_Input2(210, 328, 290, 20, "blocks:");
{ txt_relay_selected_blocks = new Fl_Input2(145, 355, 355, 20, "blocks:");
txt_relay_selected_blocks->box(FL_DOWN_BOX);
txt_relay_selected_blocks->color(FL_BACKGROUND2_COLOR);
txt_relay_selected_blocks->selection_color(FL_SELECTION_COLOR);
@ -292,27 +299,58 @@ Fl_Double_Window* flamp_dialog() {
txt_relay_selected_blocks->labelfont(0);
txt_relay_selected_blocks->labelsize(14);
txt_relay_selected_blocks->labelcolor(FL_FOREGROUND_COLOR);
txt_relay_selected_blocks->callback((Fl_Callback*)cb_txt_relay_selected_blocks);
txt_relay_selected_blocks->align(Fl_Align(FL_ALIGN_LEFT));
txt_relay_selected_blocks->when(FL_WHEN_RELEASE);
txt_relay_selected_blocks->when(FL_WHEN_CHANGED);
} // Fl_Input2* txt_relay_selected_blocks
{ rx_queue = new Fl_Browser(4, 376, 496, 120, "Receive Queue");
{ rx_queue = new Fl_Browser(4, 395, 496, 125, "Receive Queue");
rx_queue->type(2);
rx_queue->callback((Fl_Callback*)cb_rx_queue);
rx_queue->align(Fl_Align(FL_ALIGN_TOP_LEFT));
} // Fl_Browser* rx_queue
{ Fl_Check_Button* o = btn_auto_rx_save = new Fl_Check_Button(145, 357, 164, 15, "Auto save on 100%");
btn_auto_rx_save->down_box(FL_DOWN_BOX);
btn_auto_rx_save->callback((Fl_Callback*)cb_btn_auto_rx_save);
o->value(progStatus.auto_rx_save);
} // Fl_Check_Button* btn_auto_rx_save
{ Fl_Check_Button* o = btn_relay_retain_data = new Fl_Check_Button(315, 357, 164, 15, "Save Relay On Exit");
btn_relay_retain_data->down_box(FL_DOWN_BOX);
btn_relay_retain_data->callback((Fl_Callback*)cb_btn_relay_retain_data);
o->value(progStatus.relay_retain_data);
} // Fl_Check_Button* btn_relay_retain_data
{ cnt_repeat_relay_data = new Fl_Counter(275, 325, 57, 20, "Data Rpt");
cnt_repeat_relay_data->tooltip("_(\"Repeat transmission specified # times\")");
cnt_repeat_relay_data->type(1);
cnt_repeat_relay_data->box(FL_UP_BOX);
cnt_repeat_relay_data->color(FL_BACKGROUND_COLOR);
cnt_repeat_relay_data->selection_color(FL_INACTIVE_COLOR);
cnt_repeat_relay_data->labeltype(FL_NORMAL_LABEL);
cnt_repeat_relay_data->labelfont(0);
cnt_repeat_relay_data->labelsize(14);
cnt_repeat_relay_data->labelcolor(FL_FOREGROUND_COLOR);
cnt_repeat_relay_data->minimum(1);
cnt_repeat_relay_data->maximum(10);
cnt_repeat_relay_data->step(1);
cnt_repeat_relay_data->value(1);
cnt_repeat_relay_data->callback((Fl_Callback*)cb_cnt_repeat_relay_data);
cnt_repeat_relay_data->align(Fl_Align(FL_ALIGN_LEFT));
cnt_repeat_relay_data->when(FL_WHEN_CHANGED);
} // Fl_Counter* cnt_repeat_relay_data
{ cnt_repeat_relay_header = new Fl_Counter(147, 325, 58, 20, "Hdr Rpt");
cnt_repeat_relay_header->tooltip("_(\"Maximum size of each data block\")");
cnt_repeat_relay_header->type(1);
cnt_repeat_relay_header->box(FL_UP_BOX);
cnt_repeat_relay_header->color(FL_BACKGROUND_COLOR);
cnt_repeat_relay_header->selection_color(FL_INACTIVE_COLOR);
cnt_repeat_relay_header->labeltype(FL_NORMAL_LABEL);
cnt_repeat_relay_header->labelfont(0);
cnt_repeat_relay_header->labelsize(14);
cnt_repeat_relay_header->labelcolor(FL_FOREGROUND_COLOR);
cnt_repeat_relay_header->minimum(1);
cnt_repeat_relay_header->maximum(10);
cnt_repeat_relay_header->step(1);
cnt_repeat_relay_header->value(1);
cnt_repeat_relay_header->callback((Fl_Callback*)cb_cnt_repeat_relay_header);
cnt_repeat_relay_header->align(Fl_Align(FL_ALIGN_LEFT));
cnt_repeat_relay_header->when(FL_WHEN_CHANGED);
} // Fl_Counter* cnt_repeat_relay_header
{ txt_transfer_relay_size_time = new Fl_Output(345, 325, 155, 20);
txt_transfer_relay_size_time->tooltip("_(\"Transfer size / time\")");
} // Fl_Output* txt_transfer_relay_size_time
tab_pointers[rx_tab_idx] = Rx_tab;
Rx_tab->end();
} // Fl_Group* Rx_tab
{ Tx_tab = new Fl_Group(0, 48, 505, 452, "Transmit");
{ Tx_tab = new Fl_Group(0, 48, 505, 476, "Transmit");
Tx_tab->hide();
{ Fl_Input2* o = txt_tx_send_to = new Fl_Input2(70, 59, 430, 20, "Send to:");
txt_tx_send_to->tooltip("_(\"QST (or blank) / Enumerated callsigns\")");
@ -446,7 +484,7 @@ Fl_Double_Window* flamp_dialog() {
btn_enable_tx_unproto->callback((Fl_Callback*)cb_enable_tx_unproto);
o->value(progStatus.enable_tx_unproto);
} // Fl_Check_Button* btn_enable_tx_unproto
{ txt_tx_selected_blocks = new Fl_Input2(70, 220, 331, 20, "blocks");
{ txt_tx_selected_blocks = new Fl_Input2(70, 220, 345, 20, "blocks");
txt_tx_selected_blocks->tooltip("_(\"Clear for all\\nComma separated block #s\")");
txt_tx_selected_blocks->box(FL_DOWN_BOX);
txt_tx_selected_blocks->color(FL_BACKGROUND2_COLOR);
@ -457,21 +495,21 @@ Fl_Double_Window* flamp_dialog() {
txt_tx_selected_blocks->labelcolor(FL_FOREGROUND_COLOR);
txt_tx_selected_blocks->callback((Fl_Callback*)cb_selected_blocks);
txt_tx_selected_blocks->align(Fl_Align(FL_ALIGN_LEFT));
txt_tx_selected_blocks->when(FL_WHEN_RELEASE);
txt_tx_selected_blocks->when(FL_WHEN_CHANGED);
} // Fl_Input2* txt_tx_selected_blocks
{ btn_send_file = new Fl_Button(130, 246, 70, 20, "Xmit");
{ btn_send_file = new Fl_Button(30, 250, 80, 20, "Xmit");
btn_send_file->tooltip("_(\"Fetch & parse fldigi block reports\")");
btn_send_file->callback((Fl_Callback*)cb_btn_send_file);
} // Fl_Button* btn_send_file
{ btn_send_queue = new Fl_Button(205, 246, 70, 20, "Xmt All");
{ btn_send_queue = new Fl_Button(120, 250, 80, 20, "Xmt All");
btn_send_queue->tooltip("_(\"Fetch & parse fldigi block reports\")");
btn_send_queue->callback((Fl_Callback*)cb_btn_send_queue);
} // Fl_Button* btn_send_queue
{ btn_remove_file = new Fl_Button(280, 246, 70, 20, "Remove");
{ btn_remove_file = new Fl_Button(210, 250, 80, 20, "Remove");
btn_remove_file->tooltip("_(\"Fetch & parse fldigi block reports\")");
btn_remove_file->callback((Fl_Callback*)cb_btn_tx_remove_file);
} // Fl_Button* btn_remove_file
{ btn_open_file = new Fl_Button(355, 246, 70, 20, "Add");
{ btn_open_file = new Fl_Button(300, 250, 80, 20, "Add");
btn_open_file->tooltip("_(\"Fetch & parse fldigi block reports\")");
btn_open_file->callback((Fl_Callback*)cb_btn_open_file);
} // Fl_Button* btn_open_file
@ -490,22 +528,24 @@ Fl_Double_Window* flamp_dialog() {
o->cursor_color(fl_rgb_color(244, 255, 255));
o->labelcolor(fl_rgb_color(200, 0, 0));
} // Fl_Input* drop_file
{ btn_parse_blocks = new Fl_Button(430, 245, 70, 20, "Fetch");
{ btn_parse_blocks = new Fl_Button(390, 249, 80, 21, "Fetch");
btn_parse_blocks->tooltip("_(\"Fetch & parse fldigi block reports\")");
btn_parse_blocks->callback((Fl_Callback*)cb_btn_parse_blocks);
} // Fl_Button* btn_parse_blocks
{ tx_queue = new Fl_Browser(5, 270, 495, 225, "Transmit Queue");
{ tx_queue = new Fl_Browser(5, 290, 495, 225, "Transmit Queue");
tx_queue->type(2);
tx_queue->callback((Fl_Callback*)cb_tx_queue);
tx_queue->align(Fl_Align(FL_ALIGN_TOP_LEFT));
} // Fl_Browser* tx_queue
tab_pointers[tx_tab_idx] = Tx_tab;
Tx_tab->end();
} // Fl_Group* Tx_tab
{ Events_tab = new Fl_Group(0, 48, 505, 452, "Events");
{ Events_tab = new Fl_Group(0, 48, 505, 476, "Events");
Events_tab->hide();
{ event_tabs = new Fl_Tabs(0, 48, 505, 452);
{ event_tabs = new Fl_Tabs(0, 48, 505, 476);
event_tabs->selection_color((Fl_Color)246);
{ Timed_Events_tab = new Fl_Group(0, 72, 505, 428, "Timed");
event_tabs->when(FL_WHEN_ENTER_KEY);
{ Timed_Events_tab = new Fl_Group(0, 72, 505, 452, "Timed");
Timed_Events_tab->hide();
{ Fl_Output* o = new Fl_Output(5, 76, 495, 92);
o->type(12);
@ -601,7 +641,7 @@ Fl_Double_Window* flamp_dialog() {
} // Fl_Light_Button* do_events
Timed_Events_tab->end();
} // Fl_Group* Timed_Events_tab
{ Hamcast_Events_tab = new Fl_Group(0, 72, 505, 428, "Hamcast");
{ Hamcast_Events_tab = new Fl_Group(0, 72, 505, 452, "Hamcast");
{ Fl_Group* o = new Fl_Group(4, 94, 496, 151, "Hamcast modem rotation / Queue Transmit Time (on Timed Events)");
o->box(FL_ENGRAVED_BOX);
{ Fl_Check_Button* o = btn_hamcast_mode_cycle = new Fl_Check_Button(16, 106, 70, 15, "Enable modem rotation");
@ -706,9 +746,11 @@ Fl_Double_Window* flamp_dialog() {
} // Fl_Group* Hamcast_Events_tab
event_tabs->end();
} // Fl_Tabs* event_tabs
tab_pointers[events_tab_idx] = Events_tab;
Events_tab->end();
} // Fl_Group* Events_tab
{ Config_tab = new Fl_Group(0, 48, 505, 452, "Configure");
{ Config_tab = new Fl_Group(0, 48, 505, 476, "Configure");
Config_tab->hide();
{ txt_tx_mycall = new Fl_Input2(65, 60, 150, 20, "Callsign");
txt_tx_mycall->tooltip("_(\"Callsign of transmitting station\")");
txt_tx_mycall->box(FL_DOWN_BOX);
@ -735,57 +777,57 @@ Fl_Double_Window* flamp_dialog() {
txt_tx_myinfo->align(Fl_Align(FL_ALIGN_LEFT));
txt_tx_myinfo->when(FL_WHEN_CHANGED);
} // Fl_Input2* txt_tx_myinfo
{ Fl_Check_Button* o = btn_sync_mode_flamp_fldigi = new Fl_Check_Button(70, 118, 297, 15, "Auto sync fldigi to flamp mode selector");
{ Fl_Check_Button* o = btn_sync_mode_flamp_fldigi = new Fl_Check_Button(65, 120, 265, 15, "Auto sync fldigi to flamp mode selector");
btn_sync_mode_flamp_fldigi->down_box(FL_DOWN_BOX);
btn_sync_mode_flamp_fldigi->callback((Fl_Callback*)cb_sync_mode_flamp_fldigi);
o->value(progStatus.sync_mode_flamp_fldigi);
} // Fl_Check_Button* btn_sync_mode_flamp_fldigi
{ Fl_Check_Button* o = btn_sync_mode_fldigi_flamp = new Fl_Check_Button(70, 144, 297, 15, "Auto sync flamp to fldigi mode selector");
{ Fl_Check_Button* o = btn_sync_mode_fldigi_flamp = new Fl_Check_Button(65, 145, 265, 15, "Auto sync flamp to fldigi mode selector");
btn_sync_mode_fldigi_flamp->down_box(FL_DOWN_BOX);
btn_sync_mode_fldigi_flamp->callback((Fl_Callback*)cb_sync_mode_fldigi_flamp);
o->value(progStatus.sync_mode_fldigi_flamp);
} // Fl_Check_Button* btn_sync_mode_fldigi_flamp
{ Fl_Check_Button* o = btn_fldigi_xmt_mode_change = new Fl_Check_Button(70, 170, 297, 15, "Change fldigi mode just prior to transmit");
{ Fl_Check_Button* o = btn_fldigi_xmt_mode_change = new Fl_Check_Button(65, 170, 270, 15, "Change fldigi mode just prior to transmit");
btn_fldigi_xmt_mode_change->down_box(FL_DOWN_BOX);
btn_fldigi_xmt_mode_change->callback((Fl_Callback*)cb_fldigi_xmt_mode_change);
o->value(progStatus.fldigi_xmt_mode_change);
} // Fl_Check_Button* btn_fldigi_xmt_mode_change
{ Fl_Check_Button* o = btn_enable_tx_on_report = new Fl_Check_Button(70, 197, 297, 15, "Enable Tx on Report");
{ Fl_Check_Button* o = btn_enable_tx_on_report = new Fl_Check_Button(65, 195, 150, 15, "Enable Tx on Report");
btn_enable_tx_on_report->down_box(FL_DOWN_BOX);
btn_enable_tx_on_report->callback((Fl_Callback*)cb_enable_tx_on_report);
o->value(progStatus.use_tx_on_report);
} // Fl_Check_Button* btn_enable_tx_on_report
{ Fl_Check_Button* o = btn_enable_delete_warning = new Fl_Check_Button(70, 223, 297, 15, "Warn User when removing files from Queue");
{ Fl_Check_Button* o = btn_enable_delete_warning = new Fl_Check_Button(65, 220, 295, 15, "Warn User when removing files from Queue");
btn_enable_delete_warning->down_box(FL_DOWN_BOX);
btn_enable_delete_warning->callback((Fl_Callback*)cb_enable_delete_warning);
o->value(progStatus.enable_delete_warning);
} // Fl_Check_Button* btn_enable_delete_warning
{ Fl_Check_Button* o = btn_clear_tosend_on_tx_blocks = new Fl_Check_Button(70, 249, 297, 15, "Clear Missing Blocks on Non-Canceled Transmit(s)");
{ Fl_Check_Button* o = btn_clear_tosend_on_tx_blocks = new Fl_Check_Button(65, 245, 340, 15, "Clear Missing Blocks on Non-Canceled Transmit(s)");
btn_clear_tosend_on_tx_blocks->down_box(FL_DOWN_BOX);
btn_clear_tosend_on_tx_blocks->callback((Fl_Callback*)cb_clear_tosend_on_tx_blocks);
o->value(progStatus.clear_tosend_on_tx_blocks);
} // Fl_Check_Button* btn_clear_tosend_on_tx_blocks
{ Fl_Check_Button* o = btn_disable_header_modem_on_block_fills = new Fl_Check_Button(70, 276, 297, 15, "Inhibit header modem on block fills");
{ Fl_Check_Button* o = btn_disable_header_modem_on_block_fills = new Fl_Check_Button(65, 270, 235, 15, "Inhibit header modem on block fills");
btn_disable_header_modem_on_block_fills->down_box(FL_DOWN_BOX);
btn_disable_header_modem_on_block_fills->callback((Fl_Callback*)cb_disable_header_modem_on_block_fills);
o->value(progStatus.disable_header_modem_on_block_fills);
} // Fl_Check_Button* btn_disable_header_modem_on_block_fills
{ Fl_Check_Button* o = btn_enable_unproto_markers = new Fl_Check_Button(70, 302, 297, 15, "Mark start/end of unproto data");
{ Fl_Check_Button* o = btn_enable_unproto_markers = new Fl_Check_Button(65, 295, 210, 15, "Mark start/end of unproto data");
btn_enable_unproto_markers->down_box(FL_DOWN_BOX);
btn_enable_unproto_markers->callback((Fl_Callback*)cb_enable_unproto_markers);
o->value(progStatus.enable_unproto_markers);
} // Fl_Check_Button* btn_enable_unproto_markers
{ Fl_Check_Button* o = btn_auto_rx_save_local_time = new Fl_Check_Button(70, 328, 297, 15, "Auto save subfolders in local time, otherwise UTC");
{ Fl_Check_Button* o = btn_auto_rx_save_local_time = new Fl_Check_Button(65, 320, 330, 15, "Auto save subfolders in local time, otherwise UTC");
btn_auto_rx_save_local_time->down_box(FL_DOWN_BOX);
btn_auto_rx_save_local_time->callback((Fl_Callback*)cb_auto_rx_save_local_time);
o->value(progStatus.auto_rx_save_local_time);
} // Fl_Check_Button* btn_auto_rx_save_local_time
{ Fl_Check_Button* o = btn_enable_header_modem = new Fl_Check_Button(70, 355, 297, 15, "Enable header modem (Sync flamp to fldigi ignored)");
{ Fl_Check_Button* o = btn_enable_header_modem = new Fl_Check_Button(65, 390, 345, 20, "Enable header modem (Sync flamp to fldigi ignored)");
btn_enable_header_modem->down_box(FL_DOWN_BOX);
btn_enable_header_modem->callback((Fl_Callback*)cb_enable_header_modem);
o->value(progStatus.use_header_modem);
} // Fl_Check_Button* btn_enable_header_modem
{ cbo_header_modes = new Fl_ComboBox(90, 380, 135, 20);
{ cbo_header_modes = new Fl_ComboBox(85, 415, 145, 20);
cbo_header_modes->tooltip("_(\"fldigi modem type\")");
cbo_header_modes->box(FL_NO_BOX);
cbo_header_modes->color(FL_BACKGROUND_COLOR);
@ -799,12 +841,12 @@ Fl_Double_Window* flamp_dialog() {
cbo_header_modes->when(FL_WHEN_RELEASE);
cbo_header_modes->end();
} // Fl_ComboBox* cbo_header_modes
{ Fl_Check_Button* o = btn_enable_txrx_interval = new Fl_Check_Button(70, 415, 297, 15, "Enable TX/RX Interval");
{ Fl_Check_Button* o = btn_enable_txrx_interval = new Fl_Check_Button(65, 440, 165, 15, "Enable TX/RX Interval");
btn_enable_txrx_interval->down_box(FL_DOWN_BOX);
btn_enable_txrx_interval->callback((Fl_Callback*)cb_enable_txrx_interval);
o->value(progStatus.use_txrx_interval);
} // Fl_Check_Button* btn_enable_txrx_interval
{ Fl_Counter* o = cnt_tx_interval_mins = new Fl_Counter(90, 440, 100, 20, "Tx Duration Mins");
{ Fl_Counter* o = cnt_tx_interval_mins = new Fl_Counter(85, 465, 100, 20, "Tx Duration Mins");
cnt_tx_interval_mins->tooltip("_(\"Transmit Duration in Minutes\")");
cnt_tx_interval_mins->box(FL_UP_BOX);
cnt_tx_interval_mins->color(FL_BACKGROUND_COLOR);
@ -822,7 +864,7 @@ Fl_Double_Window* flamp_dialog() {
cnt_tx_interval_mins->when(FL_WHEN_CHANGED);
o->value(progStatus.tx_interval_minutes);
} // Fl_Counter* cnt_tx_interval_mins
{ Fl_Counter* o = cnt_rx_interval_secs = new Fl_Counter(105, 470, 70, 20, "Rx Duration Secs");
{ Fl_Counter* o = cnt_rx_interval_secs = new Fl_Counter(100, 490, 70, 20, "Rx Duration Secs");
cnt_rx_interval_secs->tooltip("_(\"Receive Duration in Seconds\")");
cnt_rx_interval_secs->type(1);
cnt_rx_interval_secs->box(FL_UP_BOX);
@ -841,9 +883,20 @@ Fl_Double_Window* flamp_dialog() {
cnt_rx_interval_secs->when(FL_WHEN_CHANGED);
o->value(progStatus.rx_interval_seconds);
} // Fl_Counter* cnt_rx_interval_secs
{ txt_tx_interval = new Fl_Output(331, 440, 50, 20, "mm:ss");
{ txt_tx_interval = new Fl_Output(340, 465, 50, 20, "mm:ss");
txt_tx_interval->align(Fl_Align(FL_ALIGN_RIGHT));
} // Fl_Output* txt_tx_interval
{ Fl_Check_Button* o = btn_relay_retain_data = new Fl_Check_Button(65, 344, 240, 17, "Save Relay Data On Program Exit");
btn_relay_retain_data->down_box(FL_DOWN_BOX);
btn_relay_retain_data->callback((Fl_Callback*)cb_btn_relay_retain_data);
o->value(progStatus.relay_retain_data);
} // Fl_Check_Button* btn_relay_retain_data
{ Fl_Check_Button* o = btn_auto_rx_save = new Fl_Check_Button(65, 369, 265, 17, "Auto save RX Data on 100% reception");
btn_auto_rx_save->down_box(FL_DOWN_BOX);
btn_auto_rx_save->callback((Fl_Callback*)cb_btn_auto_rx_save);
o->value(progStatus.auto_rx_save);
} // Fl_Check_Button* btn_auto_rx_save
tab_pointers[config_tab_idx] = Config_tab;
Config_tab->end();
} // Fl_Group* Config_tab
tabs->end();

View file

@ -63,7 +63,7 @@ Function {flamp_dialog()} {open
} {
Fl_Window dialog_flamp {
label FLAMP open
xywh {1359 463 505 500} type Double hide
xywh {979 122 505 524} type Double visible
} {
Fl_Menu_Bar mnubar {open
xywh {0 0 505 24}
@ -129,12 +129,14 @@ Function {flamp_dialog()} {open
}
}
}
Fl_Tabs tabs {open
xywh {0 24 505 476} selection_color 246
Fl_Tabs tabs {
callback cb_tab open
xywh {0 24 520 500} selection_color 246 when 1
} {
Fl_Group Rx_tab {
label Receive open
xywh {0 48 505 452} hide
label Receive open selected
xywh {0 48 515 476}
code0 {tab_pointers[rx_tab_idx] = Rx_tab;}
} {
Fl_Output txt_rx_filename {
label {Output:}
@ -201,40 +203,45 @@ Function {flamp_dialog()} {open
Fl_Button btn_send_relay {
label Relay
callback cb_btn_send_relay
xywh {4 328 70 20}
xywh {5 325 80 20}
}
Fl_Button btn_parse_relay_blocks {
label Fetch
callback cb_btn_parse_relay_blocks
xywh {80 328 70 20}
xywh {5 355 80 20}
}
Fl_Input txt_relay_selected_blocks {
label {blocks:}
xywh {210 328 290 20}
callback cb_txt_relay_selected_blocks
xywh {145 355 355 20} when 1
class Fl_Input2
}
Fl_Browser rx_queue {
label {Receive Queue}
callback cb_rx_queue
xywh {4 376 496 120} type Hold align 5
xywh {4 395 496 125} type Hold align 5
code0 {extern void cb_rx_queue(Fl_Browser*, void*);}
}
Fl_Check_Button btn_auto_rx_save {
label {Auto save on 100%}
callback {progStatus.auto_rx_save = o->value();}
xywh {145 357 164 15} down_box DOWN_BOX
code0 {o->value(progStatus.auto_rx_save);}
Fl_Counter cnt_repeat_relay_data {
label {Data Rpt}
callback cb_cnt_repeat_relay_data
tooltip {_("Repeat transmission specified \# times")} xywh {275 325 57 20} type Simple align 4 minimum 1 maximum 10 step 1 value 1
class Fl_Counter
}
Fl_Check_Button btn_relay_retain_data {
label {Save Relay On Exit}
callback {progStatus.relay_retain_data = o->value();}
xywh {315 357 164 15} down_box DOWN_BOX
code0 {o->value(progStatus.relay_retain_data);}
Fl_Counter cnt_repeat_relay_header {
label {Hdr Rpt}
callback cb_cnt_repeat_relay_header
tooltip {_("Maximum size of each data block")} xywh {147 325 58 20} type Simple align 4 minimum 1 maximum 10 step 1 value 1
class Fl_Counter
}
Fl_Output txt_transfer_relay_size_time {
tooltip {_("Transfer size / time")} xywh {345 325 155 20}
}
}
Fl_Group Tx_tab {
label Transmit open
xywh {0 48 505 452} hide
xywh {0 48 505 476} hide
code0 {tab_pointers[tx_tab_idx] = Tx_tab;}
} {
Fl_Input txt_tx_send_to {
label {Send to:}
@ -307,28 +314,28 @@ Function {flamp_dialog()} {open
Fl_Input txt_tx_selected_blocks {
label blocks
callback cb_selected_blocks
tooltip {_("Clear for all\\nComma separated block \#s")} xywh {70 220 331 20}
tooltip {_("Clear for all\\nComma separated block \#s")} xywh {70 220 345 20} when 1
class Fl_Input2
}
Fl_Button btn_send_file {
label Xmit
callback cb_btn_send_file
tooltip {_("Fetch & parse fldigi block reports")} xywh {130 246 70 20}
tooltip {_("Fetch & parse fldigi block reports")} xywh {30 250 80 20}
}
Fl_Button btn_send_queue {
label {Xmt All}
callback cb_btn_send_queue
tooltip {_("Fetch & parse fldigi block reports")} xywh {205 246 70 20}
tooltip {_("Fetch & parse fldigi block reports")} xywh {120 250 80 20}
}
Fl_Button btn_remove_file {
label Remove
callback cb_btn_tx_remove_file
tooltip {_("Fetch & parse fldigi block reports")} xywh {280 246 70 20}
tooltip {_("Fetch & parse fldigi block reports")} xywh {210 250 80 20}
}
Fl_Button btn_open_file {
label Add
callback cb_btn_open_file
tooltip {_("Fetch & parse fldigi block reports")} xywh {355 246 70 20}
tooltip {_("Fetch & parse fldigi block reports")} xywh {300 250 80 20}
}
Fl_Input drop_file {
callback cb_drop_file
@ -341,24 +348,25 @@ Function {flamp_dialog()} {open
Fl_Button btn_parse_blocks {
label Fetch
callback cb_btn_parse_blocks
tooltip {_("Fetch & parse fldigi block reports")} xywh {430 245 70 20}
tooltip {_("Fetch & parse fldigi block reports")} xywh {390 249 80 21}
}
Fl_Browser tx_queue {
label {Transmit Queue}
callback cb_tx_queue
xywh {5 270 495 225} type Hold align 5
xywh {5 290 495 225} type Hold align 5
}
}
Fl_Group Events_tab {
label Events open
xywh {0 48 505 452} hide
label Events
xywh {0 48 505 476} hide
code0 {tab_pointers[events_tab_idx] = Events_tab;}
} {
Fl_Tabs event_tabs {open
xywh {0 48 505 452} selection_color 246
Fl_Tabs event_tabs {
xywh {0 48 505 476} selection_color 246 when 8
} {
Fl_Group Timed_Events_tab {
label Timed open
xywh {0 72 505 428} hide
xywh {0 72 505 452} hide
} {
Fl_Output {} {
xywh {5 76 495 92} type Multiline box BORDER_BOX
@ -370,7 +378,7 @@ Function {flamp_dialog()} {open
code1 {o->color(fl_rgb_color(255,250,205));}
}
Fl_Group {} {
label {Timed Events} open
label {Timed Events}
xywh {5 192 495 150} box ENGRAVED_BOX align 5
} {
Fl_Check_Button btn_repeat_at_times {
@ -418,7 +426,7 @@ Function {flamp_dialog()} {open
}
}
Fl_Group {} {
label {Continuous repeat} open
label {Continuous repeat}
xywh {5 369 495 50} box ENGRAVED_BOX align 5
} {
Fl_Check_Button btn_repeat_forever {
@ -439,8 +447,8 @@ Function {flamp_dialog()} {open
}
}
Fl_Group Hamcast_Events_tab {
label Hamcast open
xywh {0 72 505 428}
label Hamcast
xywh {0 72 505 452}
} {
Fl_Group {} {
label {Hamcast modem rotation / Queue Transmit Time (on Timed Events)} open
@ -522,7 +530,8 @@ Function {flamp_dialog()} {open
}
Fl_Group Config_tab {
label Configure open
xywh {0 48 505 452}
xywh {0 48 505 476} hide
code0 {tab_pointers[config_tab_idx] = Config_tab;}
} {
Fl_Input txt_tx_mycall {
label Callsign
@ -539,91 +548,103 @@ Function {flamp_dialog()} {open
Fl_Check_Button btn_sync_mode_flamp_fldigi {
label {Auto sync fldigi to flamp mode selector}
callback cb_sync_mode_flamp_fldigi
xywh {70 118 297 15} down_box DOWN_BOX
xywh {65 120 265 15} down_box DOWN_BOX
code0 {o->value(progStatus.sync_mode_flamp_fldigi);}
}
Fl_Check_Button btn_sync_mode_fldigi_flamp {
label {Auto sync flamp to fldigi mode selector}
callback cb_sync_mode_fldigi_flamp
xywh {70 144 297 15} down_box DOWN_BOX
xywh {65 145 265 15} down_box DOWN_BOX
code0 {o->value(progStatus.sync_mode_fldigi_flamp);}
}
Fl_Check_Button btn_fldigi_xmt_mode_change {
label {Change fldigi mode just prior to transmit}
callback cb_fldigi_xmt_mode_change
xywh {70 170 297 15} down_box DOWN_BOX
xywh {65 170 270 15} down_box DOWN_BOX
code0 {o->value(progStatus.fldigi_xmt_mode_change);}
}
Fl_Check_Button btn_enable_tx_on_report {
label {Enable Tx on Report}
callback cb_enable_tx_on_report
xywh {70 197 297 15} down_box DOWN_BOX
xywh {65 195 150 15} down_box DOWN_BOX
code0 {o->value(progStatus.use_tx_on_report);}
}
Fl_Check_Button btn_enable_delete_warning {
label {Warn User when removing files from Queue}
callback cb_enable_delete_warning
xywh {70 223 297 15} down_box DOWN_BOX
xywh {65 220 295 15} down_box DOWN_BOX
code0 {o->value(progStatus.enable_delete_warning);}
}
Fl_Check_Button btn_clear_tosend_on_tx_blocks {
label {Clear Missing Blocks on Non-Canceled Transmit(s)}
callback cb_clear_tosend_on_tx_blocks
xywh {70 249 297 15} down_box DOWN_BOX
xywh {65 245 340 15} down_box DOWN_BOX
code0 {o->value(progStatus.clear_tosend_on_tx_blocks);}
}
Fl_Check_Button btn_disable_header_modem_on_block_fills {
label {Inhibit header modem on block fills}
callback cb_disable_header_modem_on_block_fills
xywh {70 276 297 15} down_box DOWN_BOX
xywh {65 270 235 15} down_box DOWN_BOX
code0 {o->value(progStatus.disable_header_modem_on_block_fills);}
}
Fl_Check_Button btn_enable_unproto_markers {
label {Mark start/end of unproto data}
callback cb_enable_unproto_markers
xywh {70 302 297 15} down_box DOWN_BOX
xywh {65 295 210 15} down_box DOWN_BOX
code0 {o->value(progStatus.enable_unproto_markers);}
}
Fl_Check_Button btn_auto_rx_save_local_time {
label {Auto save subfolders in local time, otherwise UTC}
callback cb_auto_rx_save_local_time
xywh {70 328 297 15} down_box DOWN_BOX
xywh {65 320 330 15} down_box DOWN_BOX
code0 {o->value(progStatus.auto_rx_save_local_time);}
}
Fl_Check_Button btn_enable_header_modem {
label {Enable header modem (Sync flamp to fldigi ignored)}
callback cb_enable_header_modem
xywh {70 355 297 15} down_box DOWN_BOX
xywh {65 390 345 20} down_box DOWN_BOX
code0 {o->value(progStatus.use_header_modem);}
}
Fl_Group cbo_header_modes {
callback cb_header_modes open
tooltip {_("fldigi modem type")} xywh {90 380 135 20}
tooltip {_("fldigi modem type")} xywh {85 415 145 20}
class Fl_ComboBox
} {}
Fl_Check_Button btn_enable_txrx_interval {
label {Enable TX/RX Interval}
callback cb_enable_txrx_interval
xywh {70 415 297 15} down_box DOWN_BOX
xywh {65 440 165 15} down_box DOWN_BOX
code0 {o->value(progStatus.use_txrx_interval);}
}
Fl_Counter cnt_tx_interval_mins {
label {Tx Duration Mins}
callback cb_tx_interval_mins selected
tooltip {_("Transmit Duration in Minutes")} xywh {90 440 100 20} align 8 minimum 1 maximum 10 step 0.01 value 1
callback cb_tx_interval_mins
tooltip {_("Transmit Duration in Minutes")} xywh {85 465 100 20} align 8 minimum 1 maximum 10 step 0.01 value 1
code0 {o->value(progStatus.tx_interval_minutes);}
class Fl_Counter
}
Fl_Counter cnt_rx_interval_secs {
label {Rx Duration Secs}
callback cb_rx_interval_secs
tooltip {_("Receive Duration in Seconds")} xywh {105 470 70 20} type Simple align 8 minimum 1 maximum 30 step 1 value 1
tooltip {_("Receive Duration in Seconds")} xywh {100 490 70 20} type Simple align 8 minimum 1 maximum 30 step 1 value 1
code0 {o->value(progStatus.rx_interval_seconds);}
class Fl_Counter
}
Fl_Output txt_tx_interval {
label {mm:ss}
xywh {331 440 50 20} align 8
xywh {340 465 50 20} align 8
}
Fl_Check_Button btn_relay_retain_data {
label {Save Relay Data On Program Exit}
callback {progStatus.relay_retain_data = o->value();}
xywh {65 344 240 17} down_box DOWN_BOX
code0 {o->value(progStatus.relay_retain_data);}
}
Fl_Check_Button btn_auto_rx_save {
label {Auto save RX Data on 100% reception}
callback {progStatus.auto_rx_save = o->value();}
xywh {65 369 265 17} down_box DOWN_BOX
code0 {o->value(progStatus.auto_rx_save);}
}
}
}

View file

@ -1352,7 +1352,7 @@ std::string cAmp::reformat_missing_blocks(std::string &missing_blocks)
/** ********************************************************
*
***********************************************************/
std::string cAmp::tx_relay_string(std::string callfrom, std::string missing_blocks)
std::string cAmp::tx_relay_string(std::string callfrom, std::string missing_blocks, bool filesave_flag)
{
lock();
@ -1362,6 +1362,9 @@ std::string cAmp::tx_relay_string(std::string callfrom, std::string missing_bloc
int index = 0;
int blknbr = 0;
int count = 0;
int repeat_index = 0;
int header_repeat = 0;
int data_repeat = 0;
std::string blocks;
std::string the_data;
std::string callto_from;
@ -1372,6 +1375,14 @@ std::string cAmp::tx_relay_string(std::string callfrom, std::string missing_bloc
return xmtstring;
}
if(filesave_flag) {
header_repeat = 1;
data_repeat = 1;
} else {
header_repeat = progStatus.repeat_relay_header;
data_repeat = progStatus.repeat_relay_data;
}
the_data.clear();
xmtstring.clear();
@ -1381,26 +1392,30 @@ std::string cAmp::tx_relay_string(std::string callfrom, std::string missing_bloc
blocks = reformat_missing_blocks(missing_blocks);
if(blocks.empty()) {
if(_rx_raw_prog.size())
the_data.append(_rx_raw_prog).append("\n");
for(repeat_index = 0; repeat_index < header_repeat; repeat_index++) {
if(_rx_raw_prog.size())
the_data.append(_rx_raw_prog).append("\n");
if(_rx_raw_file.size())
the_data.append(_rx_raw_file).append("\n");
if(_rx_raw_file.size())
the_data.append(_rx_raw_file).append("\n");
if(_rx_raw_id.size())
the_data.append(_rx_raw_id).append("\n");
if(_rx_raw_id.size())
the_data.append(_rx_raw_id).append("\n");
if(_rx_raw_size.size())
the_data.append(_rx_raw_size).append("\n");
if(_rx_raw_size.size())
the_data.append(_rx_raw_size).append("\n");
if(_rx_raw_desc.size())
the_data.append(_rx_raw_desc).append("\n");
if(_rx_raw_desc.size())
the_data.append(_rx_raw_desc).append("\n");
}
for (idata = rxblocks.begin(), ihead = rxDataHeader.begin();
((idata != rxblocks.end()) || (ihead != rxDataHeader.end()));
idata++, ihead++) {
the_data.append(ihead->second);
the_data.append(idata->second).append("\n");
for(repeat_index = 0; repeat_index < data_repeat; repeat_index++) {
for (idata = rxblocks.begin(), ihead = rxDataHeader.begin();
((idata != rxblocks.end()) || (ihead != rxDataHeader.end()));
idata++, ihead++) {
the_data.append(ihead->second);
the_data.append(idata->second).append("\n");
}
}
} else {
@ -1436,32 +1451,36 @@ std::string cAmp::tx_relay_string(std::string callfrom, std::string missing_bloc
}
if(block_flags[0]) {
if(_rx_raw_prog.size())
the_data.append(_rx_raw_prog).append("\n");
for(repeat_index = 0; repeat_index < header_repeat; repeat_index++) {
if(_rx_raw_prog.size())
the_data.append(_rx_raw_prog).append("\n");
if(_rx_raw_file.size())
the_data.append(_rx_raw_file).append("\n");
if(_rx_raw_file.size())
the_data.append(_rx_raw_file).append("\n");
if(_rx_raw_id.size())
the_data.append(_rx_raw_id).append("\n");
if(_rx_raw_id.size())
the_data.append(_rx_raw_id).append("\n");
if(_rx_raw_size.size())
the_data.append(_rx_raw_size).append("\n");
if(_rx_raw_size.size())
the_data.append(_rx_raw_size).append("\n");
if(_rx_raw_desc.size())
the_data.append(_rx_raw_desc).append("\n");
if(_rx_raw_desc.size())
the_data.append(_rx_raw_desc).append("\n");
}
}
for(index = 1; index <= count; index++) {
if(block_flags[index]) {
idata = rxblocks.find(index);
ihead = rxDataHeader.find(index);
for(repeat_index = 0; repeat_index < data_repeat; repeat_index++) {
for(index = 1; index <= count; index++) {
if(block_flags[index]) {
idata = rxblocks.find(index);
ihead = rxDataHeader.find(index);
if(idata == rxblocks.end() || ihead == rxDataHeader.end())
continue;
if(idata == rxblocks.end() || ihead == rxDataHeader.end())
continue;
the_data.append(ihead->second);
the_data.append(idata->second).append("\n");
the_data.append(ihead->second);
the_data.append(idata->second).append("\n");
}
}
}

View file

@ -256,7 +256,7 @@ void cAmpGlobal::relay_write_save(cAmp *amp)
temp.clear();
if (file.good()) {
relay_data = amp->tx_relay_string(progStatus.my_call, temp);
relay_data = amp->tx_relay_string(progStatus.my_call, temp, true);
file << relay_data;
}

View file

@ -110,9 +110,13 @@ status progStatus = {
false, // bool hamcast_mode_enable_4
1, // int hamcast_mode_selection_4
true, // bool auto_rx_save
true, // bool auto_rx_save_local_time
true // bool relay_retain_data
true, // bool auto_rx_save
true, // bool auto_rx_save_local_time
true, // bool relay_retain_data
0, // int tab_saved_state
1, // int repeat_relay_data;
1 // int repeat_relay_header;
};
extern std::string selected_encoder_string;
@ -204,6 +208,10 @@ void status::saveLastState()
FLAMPpref.set("relay_retain_data", relay_retain_data);
FLAMPpref.set("tab_saved_state", tab_saved_state);
FLAMPpref.set("repeat_relay_data", repeat_relay_data);
FLAMPpref.set("repeat_relay_header", repeat_relay_header);
}
/** ********************************************************
@ -251,7 +259,6 @@ void status::loadLastState()
FLAMPpref.get("sync_mode_fldigi_flamp", i, sync_mode_fldigi_flamp);
sync_mode_fldigi_flamp = i;
FLAMPpref.get("fldigi_xmt_mode_change", i, fldigi_xmt_mode_change);
fldigi_xmt_mode_change = i;
@ -350,6 +357,15 @@ void status::loadLastState()
FLAMPpref.get("relay_retain_data", i, relay_retain_data);
relay_retain_data = (bool) i;
FLAMPpref.get("tab_saved_state", i, tab_saved_state);
tab_saved_state = (int) i;
FLAMPpref.get("repeat_relay_data", i, repeat_relay_data);
repeat_relay_data = (int) i;
FLAMPpref.get("repeat_relay_header", i, repeat_relay_header);
repeat_relay_header = (int) i;
if(auto_load_queue_path.size() < 1)
auto_load_queue = false;