Skip to content

Commit

Permalink
add an option for appending scan marks to the scheduler
Browse files Browse the repository at this point in the history
  • Loading branch information
kkonradpl committed Nov 19, 2016
1 parent 3a0e28b commit 5f96612
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 5 deletions.
100 changes: 98 additions & 2 deletions scan.c
Expand Up @@ -10,6 +10,8 @@
#include "scan.h"
#include "ui-signal.h"
#include "tuner.h"
#include "settings.h"
#include "scheduler.h"

#define MAP(val, in_min, in_max, out_min, out_max) ((val - in_min) * (out_max - out_min) / (gdouble)(in_max - in_min) + out_min)
#define SCAN_ADD_COLOR(x, y, z, a) cairo_pattern_add_color_stop_rgba(x, y, (((z) & 0xFF0000) >> 16) / 255.0, (((z) & 0xFF00) >> 8) / 255.0, ((z) & 0xFF) / 255.0, (a))
Expand Down Expand Up @@ -108,6 +110,8 @@ static void scan_menu_tuned_toggled(GtkCheckMenuItem*, gpointer);
static void scan_menu_marks_add(GtkMenuItem*, gpointer);
static void scan_menu_marks_add_custom(GtkMenuItem*, gpointer);
static gboolean scan_menu_marks_add_custom_key(GtkWidget*, GdkEventKey*, gpointer);
static void scan_menu_marks_scheduler(GtkMenuItem*, gpointer);
static gboolean scan_menu_marks_scheduler_key(GtkWidget*, GdkEventKey*, gpointer);
static void scan_menu_marks_clear(GtkMenuItem*, gpointer);
static void scan_menu_preset_ccir(GtkMenuItem*, gpointer);
static void scan_menu_preset_oirt(GtkMenuItem*, gpointer);
Expand Down Expand Up @@ -283,7 +287,7 @@ scan_dialog()

scan.canvas = gtk_drawing_area_new();
gtk_widget_add_events(scan.canvas, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
gtk_widget_set_size_request(scan.canvas, 640, -1);
gtk_widget_set_size_request(scan.canvas, 500, 100);
gtk_box_pack_start(GTK_BOX(scan.box), scan.canvas, TRUE, TRUE, 0);

g_signal_connect(scan.canvas, "expose-event", G_CALLBACK(scan_redraw), NULL);
Expand Down Expand Up @@ -393,6 +397,12 @@ scan_menu_main()
gtk_menu_shell_append(GTK_MENU_SHELL(menu), add_custom);
g_signal_connect(add_custom, "activate", G_CALLBACK(scan_menu_marks_add_custom), NULL);

GtkWidget *append_scheduler = gtk_image_menu_item_new_with_label("Add marks to scheduler");
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(append_scheduler),
GTK_WIDGET(gtk_image_new_from_stock(GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_MENU)));
gtk_menu_shell_append(GTK_MENU_SHELL(menu), append_scheduler);
g_signal_connect(append_scheduler, "activate", G_CALLBACK(scan_menu_marks_scheduler), NULL);

GtkWidget *clear_visible = gtk_image_menu_item_new_with_label("Clear visible marks");
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(clear_visible),
GTK_WIDGET(gtk_image_new_from_stock(GTK_STOCK_CLEAR, GTK_ICON_SIZE_MENU)));
Expand Down Expand Up @@ -711,6 +721,93 @@ scan_menu_marks_add_custom_key(GtkWidget *widget,
return FALSE;
}

static void
scan_menu_marks_scheduler(GtkMenuItem *menuitem,
gpointer user_data)
{
GtkWidget *dialog, *spin_button;
GList *ptr;
gint freq_min;
gint freq_max;
gint value;
gint count;
gint freq_time;

if(!scan.data)
goto nothing_to_do;

freq_min = scan.data->signals[0].freq;
freq_max = scan.data->signals[scan.data->len-1].freq;
count = 0;

for(ptr = conf.scan_marks; ptr; ptr = ptr->next)
{
value = GPOINTER_TO_INT(ptr->data);
if(value >= freq_min && value <= freq_max)
count++;
}

if(!count)
goto nothing_to_do;

dialog = gtk_message_dialog_new(NULL,
GTK_DIALOG_MODAL,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_OK_CANCEL,
"Time for each frequency [s]:");
gtk_window_set_title(GTK_WINDOW(dialog), "Scheduler");
spin_button = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(conf.scheduler_default_timeout, 1.0, 99999.0, 1.0, 2.0, 0.0)), 0, 0);
gtk_container_add(GTK_CONTAINER(gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(dialog))), spin_button);
g_signal_connect(dialog, "key-press-event", G_CALLBACK(scan_menu_marks_scheduler_key), spin_button);

gtk_widget_show_all(dialog);
if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK)
{
freq_time = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_button));
scheduler_stop();
conf.scheduler_freqs = g_realloc_n(conf.scheduler_freqs, sizeof(gint), conf.scheduler_n+count);
conf.scheduler_timeouts = g_realloc_n(conf.scheduler_timeouts, sizeof(gint), conf.scheduler_n+count);

for(ptr = conf.scan_marks; ptr; ptr = ptr->next)
{
value = GPOINTER_TO_INT(ptr->data);
if(value >= freq_min && value <= freq_max)
{
conf.scheduler_freqs[conf.scheduler_n] = value;
conf.scheduler_timeouts[conf.scheduler_n] = freq_time;
conf.scheduler_n++;
}
}

gtk_widget_destroy(dialog);
settings_dialog(SETTINGS_TAB_SCHEDULER);
}
else
{
gtk_widget_destroy(dialog);
}
return;

nothing_to_do:
ui_dialog(scan.window, GTK_MESSAGE_INFO, "Spectral scan", "There are no visible marks that can be added to the scheduler.");
}

static gboolean
scan_menu_marks_scheduler_key(GtkWidget *widget,
GdkEventKey *event,
gpointer button)
{
guint current = gdk_keyval_to_upper(event->keyval);
if(current == GDK_Return)
{
gtk_spin_button_update(GTK_SPIN_BUTTON(button));
gtk_dialog_response(GTK_DIALOG(widget), GTK_RESPONSE_OK);
return TRUE;
}
return FALSE;
}


static void
scan_menu_marks_clear(GtkMenuItem *menuitem,
gpointer user_data)
Expand Down Expand Up @@ -751,7 +848,6 @@ static void
scan_marks_add(gint step)
{
gint min, max, curr;
printf("step:%d\n", step);
if(scan.data)
{
min = ceil(scan.data->signals[0].freq / (gdouble)step)*step;
Expand Down
6 changes: 4 additions & 2 deletions settings.c
Expand Up @@ -116,7 +116,7 @@ static gboolean settings_scheduler_add_key_idle(gpointer);


void
settings_dialog()
settings_dialog(gint tab_num)
{
gint row, i;
gchar tmp[10];
Expand Down Expand Up @@ -608,7 +608,7 @@ settings_dialog()
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(page_key), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page_key, gtk_label_new("Keyboard"));

table_key = gtk_table_new(17, 2, FALSE);
table_key = gtk_table_new(19, 2, FALSE);
gtk_container_set_border_width(GTK_CONTAINER(table_key), 4);
gtk_table_set_homogeneous(GTK_TABLE(table_key), FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table_key), 1);
Expand Down Expand Up @@ -902,11 +902,13 @@ settings_dialog()
#endif
gtk_box_pack_start(GTK_BOX(page_about), xdr_gtk_link, TRUE, FALSE, 10);


/* HACK: the same background color in the Keyboard page */
gtk_widget_realize(notebook);
gtk_widget_modify_bg(page_key_viewport, GTK_STATE_NORMAL, &gtk_widget_get_style(notebook)->bg[GTK_STATE_NORMAL]);

gtk_widget_show_all(dialog);
gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), tab_num);
#ifdef G_OS_WIN32
i = win32_dialog_workaround(GTK_DIALOG(dialog));
#else
Expand Down
11 changes: 11 additions & 0 deletions settings.h
Expand Up @@ -2,6 +2,17 @@
#define XDR_SETTINGS_H_
#include <gtk/gtk.h>

#define SETTINGS_TAB_DEFAULT 0
#define SETTINGS_TAB_INTERFACE 0
#define SETTINGS_TAB_SIGNAL 1
#define SETTINGS_TAB_RDS 2
#define SETTINGS_TAB_ANTENNA 3
#define SETTINGS_TAB_LOGS 4
#define SETTINGS_TAB_KEYBOARD 5
#define SETTINGS_TAB_PRESETS 6
#define SETTINGS_TAB_SCHEDULER 7
#define SETTINGS_TAB_ABOUT 8

void settings_dialog();

#endif
2 changes: 1 addition & 1 deletion ui.c
Expand Up @@ -329,7 +329,7 @@ ui_init()
gtk_widget_set_name(ui.b_settings, "small-button");
gtk_widget_set_tooltip_text(ui.b_settings, "Settings");
gtk_box_pack_start(GTK_BOX(ui.box_buttons), ui.b_settings, FALSE, FALSE, 0);
g_signal_connect(ui.b_settings, "clicked", G_CALLBACK(settings_dialog), NULL);
g_signal_connect_swapped(ui.b_settings, "clicked", G_CALLBACK(settings_dialog), GINT_TO_POINTER(SETTINGS_TAB_DEFAULT));

ui.b_scheduler = gtk_toggle_button_new();
gtk_button_set_image(GTK_BUTTON(ui.b_scheduler), gtk_image_new_from_icon_name("xdr-gtk-scheduler", GTK_ICON_SIZE_BUTTON));
Expand Down

0 comments on commit 5f96612

Please sign in to comment.