Пример #1
0
static void
add_child (GtkStackSwitcher *self,
           GtkWidget        *widget)
{
  GtkWidget *button;
  GList *group;

  button = gtk_radio_button_new (NULL);
  gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE);

  update_button (self, widget, button);

  group = gtk_container_get_children (GTK_CONTAINER (self));
  if (group != NULL)
    {
      gtk_radio_button_join_group (GTK_RADIO_BUTTON (button), GTK_RADIO_BUTTON (group->data));
      g_list_free (group);
    }

  gtk_container_add (GTK_CONTAINER (self), button);

  g_object_set_data (G_OBJECT (button), "stack-child", widget);
  g_signal_connect (button, "clicked", G_CALLBACK (on_button_clicked), self);
  g_signal_connect (widget, "child-notify::title", G_CALLBACK (on_title_icon_updated), self);
  g_signal_connect (widget, "child-notify::icon-name", G_CALLBACK (on_title_icon_updated), self);
  g_signal_connect (widget, "child-notify::position", G_CALLBACK (on_position_updated), self);

  g_hash_table_insert (self->priv->buttons, widget, button);
}
Пример #2
0
/** \brief  Create widget to control Printer[device]TextDevice resource
 *
 * \param[in]   device  device number
 *
 * \return  GtkGrid
 */
GtkWidget *printer_output_mode_widget_create(int device)
{
    GtkWidget *grid;
    GtkWidget *radio_text;
    GtkWidget *radio_gfx;
    GSList *group = NULL;
    char resource[256];
    const char *value;

    /* can't use the resource base widgets here, since for some reason this
     * resource is a string with two possible values: "text" and "graphics"
     */

    grid = uihelpers_create_grid_with_label("Output mode", 1);

    g_snprintf(resource, 256, "Printer%dOutput", device);
    resource_widget_set_resource_name(grid, resource);

    radio_text = gtk_radio_button_new_with_label(group, "Text");
    g_object_set(radio_text, "margin-left", 16, NULL);
    radio_gfx = gtk_radio_button_new_with_label(group, "Graphics");
    g_object_set(radio_gfx, "margin-left", 16, NULL);
    gtk_radio_button_join_group(GTK_RADIO_BUTTON(radio_gfx),
            GTK_RADIO_BUTTON(radio_text));

    resources_get_string(resource, &value);
    if (strcmp(value, "text") == 0) {
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_text), TRUE);
    } else {
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_gfx), TRUE);
    }

    gtk_grid_attach(GTK_GRID(grid), radio_text, 0, 1, 1, 1);
    gtk_grid_attach(GTK_GRID(grid), radio_gfx, 0, 2, 1, 1);

    g_signal_connect(radio_text, "toggled", G_CALLBACK(on_radio_toggled),
            (gpointer)"text");
    g_signal_connect(radio_gfx, "toggled", G_CALLBACK(on_radio_toggled),
            (gpointer)"graphics");

    g_signal_connect(grid, "destroy", G_CALLBACK(on_widget_destroy), NULL);

    gtk_widget_show_all(grid);
    return grid;
}
Пример #3
0
/** \brief  Create printer driver selection widget
 *
 * Creates a group of radio buttons to select the driver of printer # \a device.
 * Uses a custom property "DeviceNumber" for the radio buttons and the widget
 * itself to pass the device number to the event handler and to allow
 * printer_driver_widget_update() to select the proper radio button index.
 *
 * Printer 4/5: [ascii, mps803, nl10, raw]
 * Printer 6  : [1520, raw]
 *
 * \param[in]   device  device number (4-6)
 *
 * \return  GtkGrid
 */
GtkWidget *printer_driver_widget_create(int device)
{
    GtkWidget *grid;
    GtkWidget *radio_ascii = NULL;
    GtkWidget *radio_mps803 = NULL;
    GtkWidget *radio_nl10 = NULL;
    GtkWidget *radio_raw = NULL;
    GtkWidget *radio_1520 = NULL;
    GSList *group = NULL;
    const char *driver;

    /* build grid */
    grid = uihelpers_create_grid_with_label("Driver", 1);
    /* set DeviceNumber property to allow the update function to work */
    resource_widget_set_int(grid, "DeviceNumber", device);

    if (device == 4 || device == 5) {
        /* 'normal' printers */

        /* ASCII */
        radio_ascii = gtk_radio_button_new_with_label(group, "ASCII");
        g_object_set_data(G_OBJECT(radio_ascii), "DeviceNumber",
                GINT_TO_POINTER(device));
        g_object_set(radio_ascii, "margin-left", 16, NULL);
        gtk_grid_attach(GTK_GRID(grid), radio_ascii, 0, 1, 1, 1);

        /* MPS803 */
        radio_mps803 = gtk_radio_button_new_with_label(group, "MPS-803");
        gtk_radio_button_join_group(GTK_RADIO_BUTTON(radio_mps803),
                GTK_RADIO_BUTTON(radio_ascii));
        g_object_set_data(G_OBJECT(radio_mps803), "DeviceNumber",
                GINT_TO_POINTER(device));
        g_object_set(radio_mps803, "margin-left", 16, NULL);
        gtk_grid_attach(GTK_GRID(grid), radio_mps803, 0, 2, 1, 1);

        /* NL10 */
        radio_nl10 = gtk_radio_button_new_with_label(group, "NL10");
        gtk_radio_button_join_group(GTK_RADIO_BUTTON(radio_nl10),
                GTK_RADIO_BUTTON(radio_mps803));
        g_object_set_data(G_OBJECT(radio_nl10), "DeviceNumber",
                GINT_TO_POINTER(device));
        g_object_set(radio_nl10, "margin-left", 16, NULL);
        gtk_grid_attach(GTK_GRID(grid), radio_nl10, 0, 3, 1, 1);

        /* RAW */
        radio_raw = gtk_radio_button_new_with_label(group, "RAW");
        gtk_radio_button_join_group(GTK_RADIO_BUTTON(radio_raw),
                GTK_RADIO_BUTTON(radio_nl10));
        g_object_set_data(G_OBJECT(radio_raw), "DeviceNumber",
                GINT_TO_POINTER(device));
        g_object_set(radio_raw, "margin-left", 16, NULL);
        gtk_grid_attach(GTK_GRID(grid), radio_raw, 0, 4, 1, 1);
    } else if (device == 6) {
        /* plotter */

        /* 1520 */
        radio_1520 = gtk_radio_button_new_with_label(group, "1520");
        g_object_set_data(G_OBJECT(radio_1520), "DeviceNumber",
                GINT_TO_POINTER(device));
        g_object_set(radio_1520, "margin-left", 16, NULL);
        gtk_grid_attach(GTK_GRID(grid), radio_1520, 0, 1, 1, 1);

        /* RAW */
        radio_raw = gtk_radio_button_new_with_label(group, "RAW");
        gtk_radio_button_join_group(GTK_RADIO_BUTTON(radio_raw),
                GTK_RADIO_BUTTON(radio_1520));
        g_object_set_data(G_OBJECT(radio_raw), "DeviceNumber",
                GINT_TO_POINTER(device));
        g_object_set(radio_raw, "margin-left", 16, NULL);
        gtk_grid_attach(GTK_GRID(grid), radio_raw, 0, 2, 1, 1);
    } else {
        fprintf(stderr, "%s:%d:%s(): invalid device #%d\n",
                __FILE__, __LINE__, __func__, device);
        archdep_vice_exit(1);
    }


    /* set current driver from resource */
    resources_get_string_sprintf("Printer%dDriver", &driver, device);
    printer_driver_widget_update(grid, driver);

    /* connect signal handlers */
    g_signal_connect(radio_raw, "toggled", G_CALLBACK(on_radio_toggled),
            (gpointer)"raw");

    if (device == 4 || device == 5) {
        g_signal_connect(radio_ascii, "toggled", G_CALLBACK(on_radio_toggled),
                (gpointer)"ascii");
        g_signal_connect(radio_mps803, "toggled", G_CALLBACK(on_radio_toggled),
                (gpointer)"mps803");
        g_signal_connect(radio_nl10, "toggled", G_CALLBACK(on_radio_toggled),
                (gpointer)"nl10");
    } else if (device == 6) {
        g_signal_connect(radio_1520, "toggled", G_CALLBACK(on_radio_toggled),
                (gpointer)"1520");
    }

    gtk_widget_show_all(grid);
    return grid;
}
Пример #4
0
static void
add_choice (GtkWidget *box,
            GVariant *choice,
            GHashTable *table)
{
  const char *id;
  const char *name;
  g_autoptr(GVariant) options = NULL;
  const char *selected;

  g_variant_get (choice, "(&s&s@a(ss)&s)", &id, &name, &options, &selected);

  if (g_variant_n_children (options) == 0)
    {
      GtkWidget *button;

      button = gtk_check_button_new_with_label (name);
      g_object_set (button, "margin-top", 10, NULL);
      gtk_widget_show (button);
      if (strcmp (selected, "true") == 0)
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
      gtk_container_add (GTK_CONTAINER (box), button);
      g_hash_table_insert (table, g_strdup (id), button);
    }
  else
    {
      GtkWidget *label;
      GtkWidget *group = NULL;
      int i;

      label = gtk_label_new (name);
      gtk_widget_show (label);
      gtk_widget_set_halign (label, GTK_ALIGN_START);
      g_object_set (label, "margin-top", 10, NULL);
      gtk_style_context_add_class (gtk_widget_get_style_context (label), "dim-label");
      gtk_container_add (GTK_CONTAINER (box), label);

      for (i = 0; i < g_variant_n_children (options); i++)
        {
          const char *option_id;
          const char *option_name;
          GtkWidget *radio;

          g_variant_get_child (options, i, "(&s&s)", &option_id, &option_name);

          radio = gtk_radio_button_new_with_label (NULL, option_name);
          gtk_widget_show (radio);

          g_hash_table_insert (table, g_strconcat (id, ":", option_id, NULL), radio);

          if (group)
            gtk_radio_button_join_group (GTK_RADIO_BUTTON (radio),
                                         GTK_RADIO_BUTTON (group));
          else
            group = radio;
          gtk_container_add (GTK_CONTAINER (box), radio);
          if (strcmp (selected, option_id) == 0)
            gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE);
        }
    }
}