Cześć. Niedawno zacząłem uczyć się biblioteki GTK+. Mam zaimplementować uproszczoną wersję gry GO.
Mój pomysł jest taki: program po uruchomieniu wyswietla okienko z lista radio buttons, służącą do wyboru rozmiaru planszy. Zależnie od wyboru rozmiaru będę tworzył planszę w drugim okienku (pierwsze po naciśnięciu przycisku "wybierz" powinno się zamknąć. Moje pytania:

  • jak przerobić ten kod, aby okienko wyboru planszy zamykało się?
  • jak po wyborze rozmiaru przechować go w jakiejś innej zmiennej, na przykład w incie? (przyklad: użytkownik wybiera rozmiar 9x9, więc po naciśnięciu przycisku "wybierz" okienko zamyka się, a wartosc "9" jest przypisywana do jakiejś zmiennej?

Oto kod:

#include <gtk/gtk.h> 
#include <glib.h>
#include <stdlib.h>
#include <stdio.h>

GtkWidget *okno, *okno2, *box1w, *box2w, *bw, *bw1, *bw2, *bw3, *separator, *statbar, *box3, *tekst;
GSList *group;

gboolean close_application(GtkWidget *widget, GdkEvent  *event, gpointer   data )
{
  gtk_main_quit ();
  return FALSE;
}

GdkPixbuf *create_pixbuf(const gchar * filename)
{
   GdkPixbuf *pixbuf;
   GError *error = NULL;
   pixbuf = gdk_pixbuf_new_from_file(filename, &error);
   if(!pixbuf)
   {
      fprintf(stderr, "%s\n", error->message);
      g_error_free(error);
   }

   return pixbuf;
}


int main(int argc, char **argv)
{
   gtk_init(&argc, &argv);       
   
   // okienko wyboru rozmiaru
   okno2 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   gtk_window_set_title(GTK_WINDOW(okno2), "Wybierz rozmiar planszy");
   gtk_container_set_border_width(GTK_CONTAINER(okno2), 10); 
   gtk_window_set_default_size(GTK_WINDOW(okno2), 230, 180);
   gtk_window_set_position(GTK_WINDOW(okno2), GTK_WIN_POS_CENTER); 
   gtk_window_set_icon(GTK_WINDOW(okno2), create_pixbuf("icon.jpg"));
   
   box1w = gtk_vbox_new(FALSE, 0);
   gtk_container_add(GTK_CONTAINER(okno2), box1w);
   
   box2w = gtk_vbox_new(FALSE, 10);
   gtk_container_set_border_width(GTK_CONTAINER(box2w), 10);
   gtk_box_pack_start(GTK_BOX(box1w), box2w, TRUE, TRUE, 0);
   
   tekst = gtk_label_new("Wybierz rozmiar planszy: \n");
   gtk_label_set_justify(GTK_LABEL(tekst), GTK_JUSTIFY_CENTER);
   gtk_box_pack_start (GTK_BOX (box2w), tekst, TRUE, TRUE, 0);

   bw1 = gtk_radio_button_new_with_label(NULL, "9x9");
   gtk_box_pack_start(GTK_BOX(box2w), bw1, TRUE, TRUE, 0);
   
   group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(bw1));
   bw2 = gtk_radio_button_new_with_label(group, "12x12");
   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bw2), TRUE);
   gtk_box_pack_start(GTK_BOX(box2w), bw2, TRUE, TRUE, 0);
   
   bw3 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(bw2), "19x19");
   gtk_box_pack_start (GTK_BOX (box2w), bw3, TRUE, TRUE, 0);
   
   separator = gtk_hseparator_new ();
   gtk_box_pack_start(GTK_BOX (box1w), separator, FALSE, TRUE, 0);
   
   box2w = gtk_vbox_new(FALSE, 10);
   gtk_container_set_border_width(GTK_CONTAINER (box2w), 10);
   gtk_box_pack_start(GTK_BOX(box1w), box2w, FALSE, TRUE, 0);

   bw = gtk_button_new_with_label("Wybierz");
   g_signal_connect_swapped (G_OBJECT (bw), "clicked", G_CALLBACK (close_application), G_OBJECT (okno2));
   gtk_box_pack_start (GTK_BOX (box2w), bw, TRUE, TRUE, 0);   
   
   gtk_widget_show_all(okno2);
   
   gtk_main();
      
   //glowne okno gry
   okno = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   gtk_window_set_title(GTK_WINDOW(okno), "GO!");
   gtk_container_set_border_width(GTK_CONTAINER(okno), 10);
   gtk_window_set_default_size(GTK_WINDOW(okno), 400, 400);
   gtk_window_set_icon(GTK_WINDOW(okno), create_pixbuf("icon.jpg"));
   
   box3 = gtk_vbox_new(FALSE, 0);
   gtk_container_add(GTK_CONTAINER(okno), box3);
      
   statbar = gtk_statusbar_new();
   gtk_box_pack_end(GTK_BOX(box3), statbar, FALSE, TRUE, 1);

   
   gtk_widget_show_all(okno);
   
   
   gtk_main();
   
   
   return 0;
}