gint set_data_source(GtkWidget *widget, gpointer data) { if (GTK_TOGGLE_BUTTON(widget)->active) { /* its pressed */ draw_stop(); input_thread_stopper(data_handle); close_datasource(data_handle); data_source = (DataSource) GPOINTER_TO_INT(data); /* start even if none previously opened (in case previous sound source was bad) */ if ((data_handle=open_datasource(data_source)) >= 0) { #ifdef USING_FFTW2 plan = fftw_create_plan(nsamp, FFTW_FORWARD, FFTW_ESTIMATE); #elif USING_FFTW3 plan = fftw_plan_r2r_1d(nsamp, raw_fft_in, raw_fft_out, FFTW_R2HC, FFTW_ESTIMATE); #endif ring_rate_changed(); /* Fix all gui controls that depend on * ring_rate (adjustments and such */ input_thread_starter(data_handle); draw_start(); } } return TRUE; }
void draw_start() { if (!paused) { /* Check to make sure its not already running */ if (display_id) { printf("Bug detected, display already running NON-fatal\n"); draw_stop(); } if (mode == STARS) display_id = gtk_timeout_add( (int) ((1.0/(float)refresh_rate)*1000.0), (GtkFunction)kt_stars_update_func, stars); else display_id = gtk_timeout_add( (int) ((1.0/(float)refresh_rate)*1000.0), (GtkFunction)draw, NULL); } else printf("Display in paused state, click on \"Resume Display\" in the Options Panel\n"); }
void leave(GtkWidget *widget, gpointer *data) { draw_stop(); save_config(widget); input_thread_stopper(data_handle); close_datasource(data_handle); /* Free all buffers */ mem_dealloc(); gtk_main_quit(); }
gint slider_changed(GtkWidget *widget, gpointer data) { switch ((Slider) GPOINTER_TO_INT(data)) { case BANDS: bands = GTK_ADJUSTMENT(widget)->value; recalc_scale = TRUE; /* MUST recaluclate scalefactor */ recalc_markers = TRUE; /* recalculate marker values */ break; case SENSITIVITY: multiplier = GTK_ADJUSTMENT(widget)->value; break; case BAR_DECAY: bar_decay_speed = GTK_ADJUSTMENT(widget)->value; break; case PEAK_DECAY: peak_decay_speed = GTK_ADJUSTMENT(widget)->value; break; case PEAK_HOLD: peak_hold_time = GTK_ADJUSTMENT(widget)->value; break; case LAG: lag = (float)GTK_ADJUSTMENT(widget)->value; break; case NOISE_FLOOR: noise_floor = (float)GTK_ADJUSTMENT(widget)->value; break; case TAPE_SCROLL: tape_scroll = GTK_ADJUSTMENT(widget)->value; // update_time_markers(); break; case REFRESH_RATE: refresh_rate = GTK_ADJUSTMENT(widget)->value; draw_stop(); draw_start(); break; case LOW_LIMIT: low_freq = GTK_ADJUSTMENT(widget)->value; ring_rate_changed(); display_markers = TRUE; break; case HIGH_LIMIT: high_freq = GTK_ADJUSTMENT(widget)->value; ring_rate_changed(); display_markers = TRUE; break; case SCOPE_ZOOM: scope_zoom = GTK_ADJUSTMENT(widget)->value; break; default: break; } return 0; }
void reinit_extace(int new_nsamp) { /* Stop drawing the display */ draw_stop(); if(data_handle != -1) /* stop if previously opened */ { input_thread_stopper(data_handle); close_datasource(data_handle); } /* Free all buffers */ mem_dealloc(); scope_begin_l = 0; scope_begin_l = 0; /* auto shift lag slightly to maintain good sync * The idea is the shift the lag slighly so that the "on-time" data * is in the MIDDLE of the window function for better eye/ear matchup */ nsamp = new_nsamp; convolve_factor = floor(nsamp/width) < 3 ? floor(nsamp/width) : 3 ; if (convolve_factor == 0) convolve_factor = 1; recalc_markers = TRUE; recalc_scale = TRUE; mem_alloc(); setup_datawindow(NULL,(WindowFunction)window_func); ring_rate_changed(); ring_pos=0; /* only start if it has been stopped above */ if(data_handle != -1 && (data_handle=open_datasource(data_source)) >= 0) { #ifdef USING_FFTW2 fftw_destroy_plan(plan); plan = fftw_create_plan(nsamp, FFTW_FORWARD, FFTW_ESTIMATE); #elif USING_FFTW3 fftw_cleanup(); plan = fftw_plan_r2r_1d(nsamp, raw_fft_in, raw_fft_out,FFTW_R2HC, FFTW_ESTIMATE); #endif input_thread_starter(data_handle); ring_rate_changed(); /* Fix all gui controls that depend on * ring_rate (adjustments and such */ draw_start(); } }
gint set_data_source() { draw_stop(); input_thread_stopper(data_handle); close_datasource(data_handle); if ((data_handle=open_datasource(data_source)) >= 0) { #ifdef USING_FFTW2 plan = fftw_create_plan(nsamp, FFTW_FORWARD, FFTW_ESTIMATE); #elif USING_FFTW3 plan = fftw_plan_r2r_1d(nsamp, raw_fft_in, raw_fft_out, FFTW_R2HC, FFTW_ESTIMATE); #endif ring_rate_changed(); /* Fix all gui controls that depend on * ring_rate (adjustments and such */ input_thread_starter(data_handle); draw_start(); } return TRUE; }
gint change_display_mode(GtkWidget *widget, gpointer data) { gint enable_dir_win = 0; draw_stop(); /* stop the display */ /* Clear the screen to remove stray stuff */ gdk_draw_rectangle(main_pixmap, main_display->style->black_gc, TRUE, 0,0, width,height); gdk_draw_rectangle(main_display->window, main_display->style->black_gc, TRUE, 0,0, width,height); gdk_window_clear(main_display->window); switch ((DisplayMode) GPOINTER_TO_INT(data)) { case WIRE_3D: mode = LAND_3D; sub_mode_3D = WIRE_3D; enable_dir_win = 1; break; case FILL_3D: mode = LAND_3D; sub_mode_3D = FILL_3D; enable_dir_win = 1; break; case EQ_2D: mode = EQ_2D; enable_dir_win = 0; break; case LINE_EQ: mode = LINE_EQ; enable_dir_win = 0; break; case SCOPE: mode = SCOPE; enable_dir_win = 0; break; case HORIZ_SPECGRAM: mode = HORIZ_SPECGRAM; if (horiz_spec_start < 60) horiz_spec_start = 60; if (horiz_spec_start > width) horiz_spec_start = width-10; enable_dir_win = 0; display_markers = 1; break; case VERT_SPECGRAM: case VERT_SPECGRAM2: mode = (DisplayMode) GPOINTER_TO_INT(data); if (vert_spec_start > height) vert_spec_start = height-10; if (vert_spec_start < 120) vert_spec_start = 120; display_markers = 1; break; case SPIKE_3D: mode = SPIKE_3D; enable_dir_win = 1; break; case STARS: mode = STARS; enable_dir_win = 0; if (!stars) { GdkPixmap *pm = NULL, *mk = NULL; stars = (GtkWidget *)kt_stars_new( main_display, main_pixmap); pm = gdk_pixmap_create_from_xpm_d( stars-> window, &mk, NULL, logo_xpm); kt_stars_set_logo_pixmp(stars, pm, mk); } break; default: break; } if (enable_dir_win) /* enable direction control widget */ { if (!dir_win_present) { gtk_widget_show(dir_win); gtk_widget_set_uposition(dir_win, dir_x_origin,dir_y_origin); dir_win_present = TRUE; } update_dircontrol(dir_area); } else /* if enabled, disable it */ { if (dir_win_present) { gtk_widget_hide(dir_win); dir_win_present = FALSE; } } draw_start(); return TRUE; }
gint button_handle(GtkWidget *widget, gpointer data) { if (GTK_TOGGLE_BUTTON(widget)->active) /* its pressed */ { switch((ToggleButton) GPOINTER_TO_INT(data)) { case OPTIONS: gtk_widget_show(options_win_ptr); break; case LEADING_EDGE: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Leading Edge Shown"); show_leader = TRUE; break; case USE_BAR_DECAY: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Bar Decay Enabled"); bar_decay = TRUE; break; case USE_PEAK_DECAY: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Peak Decay Enabled"); peak_decay = TRUE; break; case OUTLINED: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Outlined 3D Landform"); outlined = TRUE; break; case STABILIZED: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Trace Stabilizer Enabled"); stabilized = TRUE; break; case GRATICULE: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Scope Graticule Enabled"); show_graticule = TRUE; break; case LAND_PERS_TILT: landtilt = TRUE; gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Landform Perspective Tilt Enabled"); break; case SPIKE_PERS_TILT: spiketilt = TRUE; gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Spikes Perspective Tilt Enabled"); break; case LANDFLIP: landflip = TRUE; break; case SPIKEFLIP: spikeflip = TRUE; break; case PAUSE_DISP: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Resume Display"); paused = TRUE; draw_stop(); //input_thread_stopper(data_handle); break; default: break; } } else { switch((ToggleButton) GPOINTER_TO_INT(data)) { case OPTIONS: gtk_widget_hide(options_win_ptr); break; case LEADING_EDGE: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Leading Edge Hidden"); show_leader = FALSE; break; case USE_BAR_DECAY: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Bar Decay Disabled"); bar_decay = FALSE; break; case USE_PEAK_DECAY: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Peak Decay Disabled"); peak_decay = FALSE; break; case OUTLINED: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Smooth 3D Landform"); outlined = FALSE; break; case STABILIZED: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Trace Stabilizer Disabled"); stabilized = FALSE; /* gotta clear the screen to prevent old data from * laying around.... */ gdk_draw_rectangle(main_display->window, main_display->style->black_gc, TRUE, 0,0, width,height); break; case GRATICULE: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Scope Graticule Disabled"); show_graticule = FALSE; /* gotta clear the screen to prevent old data from * laying around.... */ gdk_draw_rectangle(main_display->window, main_display->style->black_gc, TRUE, 0,0, width,height); break; case LAND_PERS_TILT: landtilt = FALSE; gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Landform Perspective Tilt Disabled"); break; case SPIKE_PERS_TILT: spiketilt = FALSE; gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Spikes Perspective Tilt Disabled"); break; case LANDFLIP: landflip = FALSE; break; case SPIKEFLIP: spikeflip = FALSE; break; case PAUSE_DISP: gtk_label_set_text(GTK_LABEL(GTK_BIN (widget)->child), "Pause Display"); paused = FALSE; if (data_handle >= 0) { //input_thread_starter(data_handle); draw_start(); } break; default: break; } } return 0; }