Blame platform-demos/de/togglebutton.c.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="togglebutton.c" xml:lang="de">
Packit 1470ea
  <info>
Packit 1470ea
    <title type="text">ToggleButton (C)</title>
Packit 1470ea
    <link type="guide" xref="c#buttons"/>
Packit 1470ea
    <link type="seealso" xref="grid.c"/>
Packit 1470ea
    <link type="seealso" xref="switch.c"/>
Packit 1470ea
Packit 1470ea
Packit 1470ea
    <revision version="0.1" date="2012-06-12" status="draft"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Monica Kochofar</name>
Packit 1470ea
      <email its:translate="no">monicakochofar@gmail.com</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>A button which retains state</desc>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Mario Blättermann</mal:name>
Packit 1470ea
      <mal:email>mario.blaettermann@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2011, 2013</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>ToggleButton</title>
Packit 1470ea
Packit 1470ea
  <media type="image" mime="image/png" src="media/togglebutton.png"/>
Packit 1470ea
  

When this ToggleButton is in an active state, the spinner spins.

Packit 1470ea
Packit 1470ea
      
Packit 1470ea
#include <gtk/gtk.h>
Packit 1470ea
Packit 1470ea
Packit 1470ea
Packit 1470ea
/*This is the callback function. It is a handler function 
Packit 1470ea
which reacts to the signal. In this case, it will cause the 
Packit 1470ea
spinner to start and stop according to how many times the user 
Packit 1470ea
presses the button.*/
Packit 1470ea
static void
Packit 1470ea
button_toggled_cb (GtkWidget *button,
Packit 1470ea
                   gpointer   user_data)
Packit 1470ea
{
Packit 1470ea
  GtkWidget *spinner = user_data;
Packit 1470ea
Packit 1470ea
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button)))
Packit 1470ea
          gtk_spinner_start (GTK_SPINNER (spinner));
Packit 1470ea
  else {
Packit 1470ea
          gtk_spinner_stop (GTK_SPINNER (spinner));
Packit 1470ea
  }
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
Packit 1470ea
Packit 1470ea
static void
Packit 1470ea
activate (GtkApplication *app,
Packit 1470ea
          gpointer        user_data)
Packit 1470ea
{
Packit 1470ea
  GtkWidget *window;
Packit 1470ea
  GtkWidget *button;
Packit 1470ea
  GtkWidget *grid;
Packit 1470ea
  GtkWidget *spinner;
Packit 1470ea
Packit 1470ea
  /*Create a window with a title, border width and a default size*/
Packit 1470ea
  window = gtk_application_window_new (app);
Packit 1470ea
  gtk_window_set_title (GTK_WINDOW (window), "ToggleButton Example");
Packit 1470ea
  gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
Packit 1470ea
  gtk_container_set_border_width(GTK_CONTAINER(window), 30);
Packit 1470ea
Packit 1470ea
  /*Create a togglebutton with a label*/
Packit 1470ea
  button = gtk_toggle_button_new_with_label ("Start/Stop");
Packit 1470ea
Packit 1470ea
  /*Create a spinner, with extra horizontal and vertical space*/
Packit 1470ea
  spinner = gtk_spinner_new ();
Packit 1470ea
  gtk_widget_set_hexpand (spinner, TRUE);
Packit 1470ea
  gtk_widget_set_vexpand (spinner, TRUE);
Packit 1470ea
Packit 1470ea
  /*Create a grid and set the row spacing, attach the togglebutton 
Packit 1470ea
  and spinner onto the grid and position them accordingly*/
Packit 1470ea
  grid = gtk_grid_new();
Packit 1470ea
  gtk_grid_set_row_homogeneous (GTK_GRID (grid), FALSE);
Packit 1470ea
  gtk_grid_set_row_spacing (GTK_GRID (grid), 15);
Packit 1470ea
  gtk_grid_attach (GTK_GRID (grid), spinner, 0, 0, 1, 1);
Packit 1470ea
  gtk_grid_attach (GTK_GRID (grid), button, 0, 1, 1, 1);
Packit 1470ea
  
Packit 1470ea
  gtk_container_add (GTK_CONTAINER (window), grid);
Packit 1470ea
Packit 1470ea
  /*Connecting the toggled signal to the callback*/
Packit 1470ea
  g_signal_connect (GTK_TOGGLE_BUTTON (button), "toggled", 
Packit 1470ea
                    G_CALLBACK (button_toggled_cb), spinner);
Packit 1470ea
Packit 1470ea
  gtk_widget_show_all (window);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
Packit 1470ea
Packit 1470ea
int
Packit 1470ea
main (int argc, char **argv)
Packit 1470ea
{
Packit 1470ea
  GtkApplication *app;
Packit 1470ea
  int status;
Packit 1470ea
Packit 1470ea
  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
Packit 1470ea
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
Packit 1470ea
  status = g_application_run (G_APPLICATION (app), argc, argv);
Packit 1470ea
  g_object_unref (app);
Packit 1470ea
Packit 1470ea
  return status;
Packit 1470ea
}
Packit 1470ea
Packit 1470ea

Packit 1470ea
  In this sample we used the following:
Packit 1470ea

Packit 1470ea
<list>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/3.4/GtkApplication.html">GtkApplication</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/3.4/GtkWindow.html">GtkWindow</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/stable/GtkSpinner.html">GtkSpinner</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/stable/GtkToggleButton.html">GtkTogglebutton</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/stable/GtkGrid.html">GtkGrid</link>

</item>
Packit 1470ea
</list>
Packit 1470ea
</page>