static gboolean list_keypress(GtkWidget * w, GdkEventKey * ev, gpointer user_data) { BkPtDlgData *bpd = user_data; if (ev->type == GDK_KEY_PRESS) { switch (ev->keyval) { case GDK_Return: { gtk_dialog_response(GTK_DIALOG(bpd->dlg), dlgRespClose); break; } case GDK_Delete: { delete_click(w, bpd); break; } case GDK_Insert: { add_click(w, bpd); break; } case GDK_F2: { edit_click(w, bpd); break; } } } return FALSE; }
bool Calibrator::try_restore() { if (!restore_filename) return false; std::ifstream fs; try { fs.open(restore_filename); reset(); int width, height; fs >> width >> height; for (int i = 0; i < 4; ++i) { int x, y; fs >> x >> y; add_click(x, y); } fs.close(); finish(width, height); if (verbose) printf("DEBUG: Configuration restored from file: %s\n", restore_filename); return true; } catch (std::exception& e) { fprintf(stderr, "ERROR: Can't read restore file. %s\n", e.what()); return false; } }
static gboolean on_button_press_event(GtkWidget *widget, GdkEventButton *event, CalibArea *area) { gboolean success; if (area->success) return FALSE; /* Check matching device ID if a device ID was provided */ if (area->device_id > -1) { GdkDevice *device; device = gdk_event_get_source_device ((GdkEvent *) event); if (device != NULL && gdk_x11_device_get_id (device) != area->device_id) return FALSE; } /* Handle click */ area->time_elapsed = 0; success = add_click(&area->calibrator, (int)event->x_root, (int)event->y_root); if (!success && area->calibrator.num_clicks == 0) draw_message(area, N_("Mis-click detected, restarting...")); else draw_message(area, NULL); /* Are we done yet? */ if (area->calibrator.num_clicks >= 4) { set_calibration_status (area); return FALSE; } /* Force a redraw */ redraw(area); return FALSE; }
static void break_dlg(const GSList * frame_list) { gdbui_enable(TRUE); if (has_items(frame_list)) { const GSList *p; GtkTreeIter iter; GtkListStore *store; GtkWidget *listview; GtkTreeViewColumn *column; GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); GtkTreeSelection *selection; GtkWidget *scroll; GtkWidget *delete_btn; GtkWidget *add_btn; GtkWidget *edit_btn; GtkWidget *close_btn; gboolean HaveWhat = FALSE; gboolean HaveFile = FALSE; gboolean HaveLine = FALSE; gboolean HaveFunc = FALSE; gboolean HaveAccess = FALSE; gint resp = 0; const gchar *access_type; BkPtDlgData bpd = { NULL, NULL }; gint rowcount = 0; store = gtk_list_store_new(bcNumCols, G_TYPE_STRING, /*bcNumber*/ G_TYPE_STRING, /*bcEnabled*/ G_TYPE_STRING, /*bcWhat*/ G_TYPE_STRING, /*bcFile*/ G_TYPE_STRING, /*bcLine*/ G_TYPE_STRING, /*bcFunc*/ G_TYPE_STRING, /*bcTimes*/ G_TYPE_STRING, /*bcIgnore*/ G_TYPE_STRING, /*bcCond*/ G_TYPE_STRING, /*bcAccess*/ G_TYPE_POINTER /*bcData*/ ); for (p = frame_list; p; p = p->next) { GdbBreakPointInfo *bpi = p->data; if (bpi) { gboolean iswatch = !g_str_equal("breakpoint", bpi->type); if (is_watchlist != iswatch) { continue; } if (g_str_equal(bpi->number, "1")) { continue; } access_type = access_txt(bpi); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, bcNumber, bpi->number, bcEnabled, bpi->enabled, bcWhat, bpi->what, bcFile, bpi->file, bcLine, bpi->line, bcFunc, bpi->func, bcTimes, bpi->times, bcIgnore, bpi->ignore ? bpi->ignore : "0", bcCond, bpi->cond, bcAccess, access_type, bcData, bpi, -1); HaveWhat = HaveWhat || (bpi->what && *bpi->what); HaveFile = HaveFile || (bpi->file && *bpi->file); HaveLine = HaveLine || (bpi->line && *bpi->line); HaveFunc = HaveFunc || (bpi->func && *bpi->func); HaveAccess = HaveAccess || access_type; rowcount++; } } listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); g_signal_connect(G_OBJECT(listview), "key-press-event", G_CALLBACK(list_keypress), &bpd); column = gtk_tree_view_column_new_with_attributes("#", renderer, "text", bcNumber, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column); column = gtk_tree_view_column_new_with_attributes("on", renderer, "text", bcEnabled, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column); if (HaveWhat) { column = gtk_tree_view_column_new_with_attributes("what", renderer, "text", bcWhat, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column); } if (HaveFile) { column = gtk_tree_view_column_new_with_attributes("filename", renderer, "text", bcFile, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column); } if (HaveLine) { column = gtk_tree_view_column_new_with_attributes("line", renderer, "text", bcLine, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column); } if (HaveFunc) { column = gtk_tree_view_column_new_with_attributes("function", renderer, "text", bcFunc, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column); } if (HaveAccess) { column = gtk_tree_view_column_new_with_attributes("trap", renderer, "text", bcAccess, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column); } column = gtk_tree_view_column_new_with_attributes("times", renderer, "text", bcTimes, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column); column = gtk_tree_view_column_new_with_attributes("skip", renderer, "text", bcIgnore, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column); column = gtk_tree_view_column_new_with_attributes("condition", renderer, "text", bcCond, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(break_select_cb), &bpd); bpd.dlg = gdbui_new_dialog(is_watchlist ? _("Watchpoints") : _("Breakpoints")); scroll = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_usize(scroll, (gdk_screen_get_width(gdk_screen_get_default()) / 3) * 2, (gdk_screen_get_height(gdk_screen_get_default()) / 3) * 1); gtk_container_add(GTK_CONTAINER(scroll), listview); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(bpd.dlg)->vbox), scroll, FALSE, FALSE, 0); delete_btn = gtk_button_new_from_stock(GTK_STOCK_DELETE); g_signal_connect(G_OBJECT(delete_btn), "clicked", G_CALLBACK(delete_click), &bpd); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(bpd.dlg)->action_area), delete_btn); edit_btn = gtk_button_new_from_stock(GTK_STOCK_EDIT); g_signal_connect(G_OBJECT(edit_btn), "clicked", G_CALLBACK(edit_click), &bpd); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(bpd.dlg)->action_area), edit_btn); add_btn = gtk_button_new_from_stock(GTK_STOCK_ADD); g_signal_connect(G_OBJECT(add_btn), "clicked", G_CALLBACK(add_click), &bpd); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(bpd.dlg)->action_area), add_btn); close_btn = gtk_dialog_add_button(GTK_DIALOG(bpd.dlg), GTK_STOCK_CLOSE, dlgRespClose); gtk_widget_set_sensitive(delete_btn, rowcount > 0); gtk_widget_set_sensitive(edit_btn, rowcount > 0); gtk_dialog_set_default_response(GTK_DIALOG(bpd.dlg), dlgRespClose); gtk_widget_show_all(bpd.dlg); do { resp = gtk_dialog_run(GTK_DIALOG(bpd.dlg)); switch (resp) { case dlgRespDeleteConfirmed: { resp = dlgRespClose; gtk_widget_destroy(bpd.dlg); break; } case dlgRespDeleteCancelled: { break; } case dlgRespEditConfirmed: { resp = dlgRespClose; gtk_widget_destroy(bpd.dlg); gdbio_wait(100); gdbui_enable(FALSE); gdbio_show_breaks(break_dlg); break; } case dlgRespEditCancelled: { break; } case dlgRespAddConfirmed: { resp = dlgRespClose; gtk_widget_destroy(bpd.dlg); break; } case dlgRespAddCancelled: { break; } case dlgRespClose: default: { gtk_widget_destroy(bpd.dlg); resp = dlgRespClose; break; } } } while (resp != dlgRespClose); gtk_window_present(GTK_WINDOW(gdbui_setup.main_window)); } else { add_click(NULL, NULL); } }
// **************************************************************************** void process_ch3_clicks(void) { global_flags.gear_changed = 0; if (global_flags.systick) { if (ch3_click_counter) { --ch3_click_counter; } } // Support for CH3 being a button or switch directly connected to the // light controller. Steering and Throttle are still being read from either // the servo reader or the uart reader. // FIXME: it would be great if this would trigger new_channel_data // independently of the other signals, i.e. set it if no other // new_channel_data was seen in a certain amount of systicks if (config.flags.ch3_is_local_switch) { channel[CH3].normalized = HAL_gpio_read(HAL_GPIO_CH3) ? -100 : 100; } if (global_flags.initializing) { ch3_flags.initialized = false; } // Ignore the new channel data flag in STAND ALONE mode, but bail out // if it is set in any other mode. if (config.mode != STAND_ALONE) { if (!global_flags.new_channel_data) { return; } } if (!ch3_flags.initialized) { ch3_flags.initialized = true; ch3_flags.last_state = (channel[CH3].normalized > 0) ? true : false; // Flush the pending switch state, if any HAL_switch_triggered(); return; } // If the local switch has triggered then add a click. // Note that the local switch is only processed when there is a valid // signal from the receiver. if (HAL_switch_triggered()) { add_click(); } if (config.flags.ch3_is_momentary || config.flags.ch3_is_local_switch) { // Code for CH3 having a momentory signal when pressed (Futaba 4PL) // We only care about the switch transition from ch3_flags.last_state // (set upon initialization) to the opposite position, which is when // we add a click. if ((channel[CH3].normalized > 0) != (ch3_flags.last_state)) { // Did we register this transition already? if (!ch3_flags.transitioned) { // No: Register transition and add click ch3_flags.transitioned = true; add_click(); } } else { ch3_flags.transitioned = false; } } else { // Code for CH3 being a two position switch (HK-310, GT3B) or // up/down buttons (X3S, Tactic TTC300; config.flags.ch3_is_two_button) // Check whether ch3 has changed with respect to LAST_STATE if ((channel[CH3].normalized > 0) != (ch3_flags.last_state)) { ch3_flags.last_state = (channel[CH3].normalized > 0); add_click(); } } process_ch3_click_timeout(); }
GtkWidget* gtkstock_create_button( GtkWidget *widget, GtkAccelGroup *accel, const gtkstock_button *button ) { GtkWidget *btn; gboolean link_object = ( button->label[0] == '!' ); gboolean is_stock = !strncmp( button->label, "gtk-", 4 ); if( !accel ) accel = gtkstock_add_accel_group (widget); if( is_stock ) { btn = gtk_button_new_from_stock( button->label + link_object ); /* FIXME: for future use else if( button->shortcut ) { button = gtk_button_new_with_mnemonic( button->label + link_object ) } */ } else { btn = gtk_button_new_with_label( button->label + link_object + ( is_stock ? 4 : 0 ) ); } if( GTK_IS_DIALOG( widget ) ) { gtk_container_add( GTK_CONTAINER( GTK_DIALOG( widget )->action_area ), btn ); } else { gtk_container_add( GTK_CONTAINER( widget ), btn ); } if( button->action ) { if( link_object ) { gtk_signal_connect_object( GTK_OBJECT( btn ), "clicked", button->action, GTK_OBJECT( button->actiondata ) ); } else { gtk_signal_connect( GTK_OBJECT( btn ), "clicked", button->action, button->actiondata ); } } if( button->destroy ) gtk_signal_connect_object( GTK_OBJECT( btn ), "clicked", button->destroy, GTK_OBJECT( widget ) ); if( is_stock ) { if( !strcmp( button->label, GTK_STOCK_CLOSE ) ) add_click( btn, button, accel, GDK_Return, 0, GDK_Escape, 0 ); else if( !strcmp( button->label, GTK_STOCK_OK ) ) add_click( btn, button, accel, GDK_Return, 0, 0, 0 ); else if( !strcmp( button->label, GTK_STOCK_CANCEL ) ) add_click( btn, button, accel, GDK_Escape, 0, 0, 0 ); else if( !strcmp( button->label, GTK_STOCK_SAVE ) ) add_click( btn, button, accel, GDK_S, GDK_MOD1_MASK, 0, 0 ); else if( !strcmp( button->label, GTK_STOCK_YES ) ) add_click( btn, button, accel, GDK_Y, GDK_MOD1_MASK, GDK_Return, 0 ); else if( !strcmp( button->label, GTK_STOCK_NO ) ) add_click( btn, button, accel, GDK_N, GDK_MOD1_MASK, GDK_Escape, 0 ); else add_click( btn, button, accel, 0, 0, 0, 0 ); } else { add_click( btn, button, accel, 0, 0, 0, 0 ); } return btn; }
static gboolean on_button_press_event(ClutterActor *actor, ClutterButtonEvent *event, CalibArea *area) { gint num_clicks; gboolean success; if (area->success) return FALSE; if (event->click_count > 1) return FALSE; /* Check matching device ID if a device ID was provided */ if (area->device_id > -1) { ClutterInputDevice *device; device = clutter_event_get_source_device ((ClutterEvent *) event); if (device != NULL && clutter_input_device_get_device_id (device) != area->device_id) { char *name; g_object_get (G_OBJECT (device), "name", &name, NULL); g_debug ("Ignoring input from device %s (%d)", name, clutter_input_device_get_device_id (device)); g_free (name); return FALSE; } } /* Handle click */ clutter_timeline_stop (CLUTTER_TIMELINE (area->clock_timeline)); clutter_timeline_start (CLUTTER_TIMELINE (area->clock_timeline)); success = add_click(&area->calibrator, (int) event->x, (int) event->y); num_clicks = area->calibrator.num_clicks; if (!success && num_clicks == 0) show_error_message (area); else { gboolean visible; g_object_get (area->error_text, "visible", &visible, NULL); if (visible) hide_error_message (area); } /* Are we done yet? */ if (num_clicks >= 4) { set_calibration_status (area); return FALSE; } cc_target_actor_move_center (CC_TARGET_ACTOR (area->target), area->X[num_clicks], area->Y[num_clicks]); return FALSE; }