<?xml version="1.0" encoding="utf-8"?>
<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="el">
  <info>
    <title type="text">Κουμπί εναλλαγής (ToggleButton) (C)</title>
    <link type="guide" xref="beginner.c#buttons"/>
    <link type="seealso" xref="grid.c"/>
    <link type="seealso" xref="switch.c"/>


    <revision version="0.1" date="2012-06-12" status="draft"/>

    <credit type="author copyright">
      <name>Monica Kochofar</name>
      <email its:translate="no">monicakochofar@gmail.com</email>
      <years>2012</years>
    </credit>

    <desc>Ένα κουμπί που κρατά κατάσταση</desc>
  
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
      <mal:name>Ελληνική μεταφραστική ομάδα GNOME</mal:name>
      <mal:email>team@gnome.gr</mal:email>
      <mal:years>2012-2014</mal:years>
    </mal:credit>
  
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
      <mal:name>Δημήτρης Σπίγγος</mal:name>
      <mal:email>dmtrs32@gmail.com</mal:email>
      <mal:years>2012, 2013</mal:years>
    </mal:credit>
  
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
      <mal:name>Μαρία Θουκιδίδου</mal:name>
      <mal:email>marablack3@gmail.com</mal:email>
      <mal:years>2014</mal:years>
    </mal:credit>
  
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
      <mal:name>Θάνος Τρυφωνίδης</mal:name>
      <mal:email>tomtryf@gmail.com</mal:email>
      <mal:years>2014</mal:years>
    </mal:credit>
  </info>

  <title>Κουμπί εναλλαγής (ToggleButton)</title>

  <media type="image" mime="image/png" src="media/togglebutton.png"/>
  <p>Όταν αυτό το ToggleButton είναι ενεργό, ο μετρητής περιστρέφεται.</p>

      <code mime="text/x-csrc" style="numbered">
#περιλαμβάνει &lt;gtk/gtk.h&gt;



/*Αυτή είναι μια συνάρτηση επανάκλησης. Είναι μια συνάρτηση χειριστή 
που αντιδρά στο σήμα. Σε αυτήν την περίπτωση, θα προκαλέσει στον μετρητή 
να αρχίσει και να σταματήσει σύμφωνα με τον αριθμό των φορών 
που ο χρήστης πατά το κουμπί.*/
static void
button_toggled_cb (GtkWidget *button,
                   gpointer   user_data)
{
  GtkWidget *spinner = user_data;

  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button)))
          gtk_spinner_start (GTK_SPINNER (spinner));
  else {
          gtk_spinner_stop (GTK_SPINNER (spinner));
  }
}



static void
activate (GtkApplication *app,
          gpointer        user_data)
{
  GtkWidget *window;
  GtkWidget *button;
  GtkWidget *grid;
  GtkWidget *spinner;

  /*Δημιουργία παραθύρου με τίτλο, πλάτος περιγράμματος και προεπιλεγμένο μέγεθος*/
  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "ToggleButton Example");
  gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
  gtk_container_set_border_width(GTK_CONTAINER(window), 30);

  /*Δημιουργία ενός διακόπτη εναλλαγής με ετικέτα*/
  button = gtk_toggle_button_new_with_label ("Start/Stop");

  /*Δημιουργία μετρητή, με πρόσθετο οριζόντιο και κάθετο χώρο*/
  spinner = gtk_spinner_new ();
  gtk_widget_set_hexpand (spinner, TRUE);
  gtk_widget_set_vexpand (spinner, TRUE);

  /*Δημιουργία ενός πλέγματος και ορισμός του διάκενου γραμμής, προσάρτηση του πλήκτρου εναλλαγής 
  και μετρητή στο πλέγμα και κατάλληλη τοποθέτησή τους*/
  grid = gtk_grid_new();
  gtk_grid_set_row_homogeneous (GTK_GRID (grid), FALSE);
  gtk_grid_set_row_spacing (GTK_GRID (grid), 15);
  gtk_grid_attach (GTK_GRID (grid), spinner, 0, 0, 1, 1);
  gtk_grid_attach (GTK_GRID (grid), button, 0, 1, 1, 1);
  
  gtk_container_add (GTK_CONTAINER (window), grid);

  /*Σύνδεση του εναλλασσόμενου σήματος με την επανάκληση*/
  g_signal_connect (GTK_TOGGLE_BUTTON (button), "toggled", 
                    G_CALLBACK (button_toggled_cb), spinner);

  gtk_widget_show_all (window);
}



int
main (int argc, char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}
</code>
<p>Σε αυτό το παράδειγμα χρησιμοποιήσαμε τα παρακάτω:</p>
<list>
  <item><p><link href="http://developer.gnome.org/gtk3/3.4/GtkApplication.html">GtkApplication</link></p></item>
  <item><p><link href="http://developer.gnome.org/gtk3/3.4/GtkWindow.html">GtkWindow</link></p></item>
  <item><p><link href="http://developer.gnome.org/gtk3/stable/GtkSpinner.html">GtkSpinner</link></p></item>
  <item><p><link href="http://developer.gnome.org/gtk3/stable/GtkToggleButton.html">GtkTogglebutton</link></p></item>
  <item><p><link href="http://developer.gnome.org/gtk3/stable/GtkGrid.html">GtkGrid</link></p></item>
</list>
</page>
