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;
}