示例#1
0
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;
}
示例#2
0
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;
}
示例#4
0
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();
}
示例#6
0
文件: stock.c 项目: CiaranG/ZXdroid
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;
}