commit
79657f6ccb
@ -35,6 +35,53 @@ GtkWidget *ut_window_new(gchar *title, gchar *wmname, gchar *wmclass,
|
||||
}
|
||||
|
||||
|
||||
GtkWidget * gtkutil_dialog_new (char * title,
|
||||
GtkWindow * parent,
|
||||
gboolean resizable,
|
||||
GtkWidget ** main_vbox) /* out */
|
||||
{
|
||||
GtkWidget * dialog;
|
||||
dialog = gtk_dialog_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), title);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (dialog), 4); /* padding */
|
||||
if (parent) {
|
||||
gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
|
||||
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
|
||||
gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
|
||||
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ON_PARENT);
|
||||
gtk_window_set_skip_pager_hint (GTK_WINDOW (dialog), TRUE);
|
||||
gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog), TRUE);
|
||||
}
|
||||
if (!resizable) {
|
||||
// no need to call this if TRUE, unexpected behavior in GTK3 IIRC
|
||||
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
|
||||
}
|
||||
|
||||
if (main_vbox) {
|
||||
*main_vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
|
||||
/* padding */
|
||||
gtk_container_set_border_width (GTK_CONTAINER (*main_vbox), 4);
|
||||
}
|
||||
|
||||
return dialog;
|
||||
}
|
||||
|
||||
|
||||
GtkWidget * gtkutil_frame_vbox (char * label, GtkWidget * parent_box)
|
||||
{
|
||||
GtkWidget * frame;
|
||||
frame = gtk_frame_new (label);
|
||||
gtk_box_pack_start (GTK_BOX (parent_box), frame, FALSE, FALSE, 0);
|
||||
|
||||
GtkWidget * frame_vbox = gtk_vbox_new (FALSE, 5);
|
||||
gtk_container_add (GTK_CONTAINER (frame), frame_vbox);
|
||||
/* padding */
|
||||
gtk_container_set_border_width (GTK_CONTAINER (frame_vbox), 5);
|
||||
|
||||
return frame_vbox;
|
||||
}
|
||||
|
||||
|
||||
GtkWidget *ut_check_button_new(gchar *label, gboolean active, GtkWidget *parent)
|
||||
{
|
||||
GtkWidget *button;
|
||||
@ -60,39 +107,13 @@ GtkWidget *ut_button_new(gchar *label, gpointer func, gpointer func_data, GtkWid
|
||||
}
|
||||
|
||||
|
||||
GtkWidget *ut_button_new_stock(const gchar *stock_id, gpointer func, gpointer func_data, GtkWidget *parent)
|
||||
{
|
||||
GtkWidget *button;
|
||||
|
||||
button = gtk_button_new_from_stock(stock_id);
|
||||
g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(func), func_data);
|
||||
gtk_box_pack_start(GTK_BOX(parent), button, TRUE, TRUE, 0);
|
||||
gtk_widget_set_can_default (button, TRUE);
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
|
||||
GtkWidget *ut_button_new_stock_swap(const gchar *stock_id, gpointer func, gpointer func_data, GtkWidget *parent)
|
||||
{
|
||||
GtkWidget *button;
|
||||
|
||||
button = gtk_button_new_from_stock(stock_id);
|
||||
g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(func), func_data);
|
||||
gtk_box_pack_start(GTK_BOX(parent), button, TRUE, TRUE, 0);
|
||||
gtk_widget_set_can_default (button, TRUE);
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
|
||||
GtkWidget *ut_spin_button_new(gchar *label, gint min, gint max, gint val, GtkWidget *parent)
|
||||
{
|
||||
GtkAdjustment *adj;
|
||||
GtkWidget *button, *hbox, *labelw;
|
||||
|
||||
hbox = gtk_hbox_new(FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(parent), hbox, TRUE, TRUE, 2);
|
||||
gtk_box_pack_start(GTK_BOX(parent), hbox, TRUE, TRUE, 0);
|
||||
|
||||
labelw = gtk_label_new(label);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), labelw, FALSE, FALSE, 5);
|
||||
|
@ -10,6 +10,13 @@ GtkWidget *ut_window_new (gchar *title,
|
||||
gboolean resizable,
|
||||
gint border);
|
||||
|
||||
GtkWidget * gtkutil_dialog_new (char * title,
|
||||
GtkWindow * parent,
|
||||
gboolean resizable,
|
||||
GtkWidget ** main_vbox); /* out */
|
||||
|
||||
GtkWidget * gtkutil_frame_vbox (char * label, GtkWidget * parent_box);
|
||||
|
||||
GtkWidget *ut_check_button_new (gchar *label,
|
||||
gboolean active,
|
||||
GtkWidget *parent);
|
||||
@ -19,16 +26,6 @@ GtkWidget *ut_button_new (gchar *label,
|
||||
gpointer func_data,
|
||||
GtkWidget *parent);
|
||||
|
||||
GtkWidget *ut_button_new_stock (const gchar *stock_id,
|
||||
gpointer func,
|
||||
gpointer func_data,
|
||||
GtkWidget *parent);
|
||||
|
||||
GtkWidget *ut_button_new_stock_swap (const gchar *stock_id,
|
||||
gpointer func,
|
||||
gpointer func_data,
|
||||
GtkWidget *parent);
|
||||
|
||||
GtkWidget *ut_spin_button_new (gchar *label,
|
||||
gint min,
|
||||
gint max,
|
||||
|
@ -13,10 +13,9 @@
|
||||
|
||||
void show_hall_of_fame (GtkWidget *widget, gpointer data, struct score_board b[10])
|
||||
{
|
||||
GtkWidget * hall_of_fame;
|
||||
GtkWidget * dialog;
|
||||
GtkWidget * frame, * sw, * tv;
|
||||
GtkWidget * vbox, * button_box;
|
||||
GtkWidget * close_button;
|
||||
GtkWidget * main_vbox, * vbox;
|
||||
gint i;
|
||||
struct score_board *bs = b;
|
||||
struct score_board bn[10];
|
||||
@ -34,20 +33,14 @@ void show_hall_of_fame (GtkWidget *widget, gpointer data, struct score_board b[1
|
||||
}
|
||||
bs = bn;
|
||||
}
|
||||
hall_of_fame = ut_window_new(_("Hall of Fame"), "GtkBalls_Scores", "GtkBalls", TRUE, TRUE, FALSE, 5);
|
||||
|
||||
vbox = gtk_vbox_new(FALSE, 0);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(vbox), 1);
|
||||
gtk_container_add(GTK_CONTAINER(hall_of_fame), vbox);
|
||||
|
||||
frame = gtk_frame_new(_("Hall of Fame"));
|
||||
gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
|
||||
dialog = gtkutil_dialog_new (_("Hall of Fame"), main_window, FALSE, &main_vbox);
|
||||
vbox = gtkutil_frame_vbox (_("Hall of Fame"), main_vbox);
|
||||
|
||||
sw = gtk_scrolled_window_new(NULL, NULL);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(sw), 5);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
|
||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
|
||||
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN);
|
||||
gtk_container_add(GTK_CONTAINER(frame), sw);
|
||||
|
||||
store = gtk_list_store_new (3,
|
||||
G_TYPE_STRING,
|
||||
@ -90,14 +83,11 @@ void show_hall_of_fame (GtkWidget *widget, gpointer data, struct score_board b[1
|
||||
g_free(str);
|
||||
}
|
||||
|
||||
button_box = gtk_hbox_new(TRUE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), button_box, FALSE, FALSE, 4);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-close", GTK_RESPONSE_CLOSE);
|
||||
g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
|
||||
gtk_widget_grab_focus (gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE));
|
||||
|
||||
close_button = ut_button_new_stock_swap(GTK_STOCK_CLOSE, gtk_widget_destroy, hall_of_fame, button_box);
|
||||
|
||||
gtk_widget_grab_focus (close_button);
|
||||
gtk_widget_grab_default (close_button);
|
||||
gtk_widget_show_all (hall_of_fame);
|
||||
gtk_widget_show_all (dialog);
|
||||
}
|
||||
|
||||
|
||||
|
@ -16,12 +16,10 @@
|
||||
#include "halloffame.h"
|
||||
#include "game.h"
|
||||
|
||||
static GtkWidget *_dialog = NULL;
|
||||
|
||||
static gchar _last_player_name[15] = "";
|
||||
static gint _saved_score = 0;
|
||||
|
||||
void read_entry(GtkWidget *widget, gpointer data)
|
||||
static void read_entry (GtkEntry *entry, gpointer data)
|
||||
{
|
||||
struct score_board current_entry;
|
||||
time_t current_time;
|
||||
@ -32,7 +30,7 @@ void read_entry(GtkWidget *widget, gpointer data)
|
||||
struct score_board b[10];
|
||||
struct score_board_full *bf = NULL;
|
||||
|
||||
tstr = (gchar*)gtk_entry_get_text(GTK_ENTRY(data));
|
||||
tstr = (gchar*)gtk_entry_get_text (entry);
|
||||
strncpy(current_entry.name, tstr && *tstr ? tstr : _("Anonymous"), sizeof(current_entry.name));
|
||||
strncpy(_last_player_name, current_entry.name, sizeof(_last_player_name));
|
||||
current_entry.score = _saved_score;
|
||||
@ -72,14 +70,25 @@ void read_entry(GtkWidget *widget, gpointer data)
|
||||
}
|
||||
}
|
||||
|
||||
gtk_widget_destroy(_dialog);
|
||||
gtk_widget_destroy (GTK_WIDGET (data));
|
||||
/* show scores to let user see if (s)he's on top ;) */
|
||||
}
|
||||
|
||||
static void input_name_response (GtkDialog * dlg, int response, gpointer user_data)
|
||||
{
|
||||
if (response == GTK_RESPONSE_OK) {
|
||||
read_entry (GTK_ENTRY (user_data), dlg);
|
||||
}
|
||||
}
|
||||
|
||||
static void input_name_esc (GtkDialog * dlg, gpointer data)
|
||||
{
|
||||
g_signal_stop_emission_by_name (dlg, "close"); // ignore Esc
|
||||
}
|
||||
|
||||
void input_name_dialog(void)
|
||||
{
|
||||
GtkWidget * prompt_label, * vbox;
|
||||
GtkWidget * dialog, * prompt_label, * vbox;
|
||||
GtkWidget * name;
|
||||
GtkWidget * button;
|
||||
gchar * s;
|
||||
@ -87,18 +96,14 @@ void input_name_dialog(void)
|
||||
/* we have to save score, because they will be set to 0 in new_game() */
|
||||
_saved_score = game_get_score();
|
||||
|
||||
_dialog = gtk_dialog_new();
|
||||
gtk_window_set_role(GTK_WINDOW(_dialog), "GtkBalls_Inputname");
|
||||
|
||||
vbox = gtk_dialog_get_content_area (GTK_DIALOG (_dialog));
|
||||
gtk_container_set_border_width(GTK_CONTAINER(vbox), 2);
|
||||
dialog = gtkutil_dialog_new (NULL, main_window, TRUE, &vbox);
|
||||
|
||||
prompt_label = gtk_label_new(_("Enter your name"));
|
||||
gtk_box_pack_start (GTK_BOX(vbox), prompt_label, TRUE, TRUE, 0);
|
||||
|
||||
name = gtk_entry_new();
|
||||
gtk_entry_set_max_length(GTK_ENTRY(name), 14);
|
||||
g_signal_connect(G_OBJECT(name), "activate", G_CALLBACK(read_entry), name);
|
||||
g_signal_connect(G_OBJECT(name), "activate", G_CALLBACK(read_entry), dialog);
|
||||
|
||||
/* restore the last player's name */
|
||||
if (!(*_last_player_name)) {
|
||||
@ -110,10 +115,9 @@ void input_name_dialog(void)
|
||||
gtk_editable_select_region(GTK_EDITABLE(name), 0, -1);
|
||||
gtk_box_pack_start (GTK_BOX(vbox), name, TRUE, TRUE, 5);
|
||||
|
||||
button=ut_button_new_stock(GTK_STOCK_OK, read_entry, name, GTK_DIALOG(_dialog)->action_area);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-ok", GTK_RESPONSE_OK);
|
||||
g_signal_connect (dialog, "response", G_CALLBACK (input_name_response), name);
|
||||
g_signal_connect (dialog, "close", G_CALLBACK (input_name_esc), name);
|
||||
|
||||
gtk_widget_grab_focus(name);
|
||||
|
||||
gtk_widget_grab_default(button);
|
||||
gtk_widget_show_all(_dialog);
|
||||
gtk_widget_show_all (dialog);
|
||||
}
|
||||
|
@ -18,7 +18,6 @@
|
||||
|
||||
enum
|
||||
{
|
||||
PR_DIALOG,
|
||||
PR_SHOW_NEXT,
|
||||
PR_SHOW_PATH,
|
||||
PR_SHOW_PAWS,
|
||||
@ -33,26 +32,17 @@ enum
|
||||
PR_SIZE
|
||||
};
|
||||
|
||||
void parent_toggled(GtkToggleButton *togglebutton, gpointer data) {
|
||||
static void parent_toggled(GtkToggleButton *togglebutton, gpointer data) {
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(data), gtk_toggle_button_get_active(togglebutton));
|
||||
}
|
||||
|
||||
void preferences_destroy_cb(GtkWidget *widget, gpointer data) {
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
void preferences_cancel(GtkWidget *widget, gpointer data) {
|
||||
GtkWidget **buttons = data;
|
||||
gtk_widget_destroy(buttons[PR_DIALOG]);
|
||||
}
|
||||
|
||||
gboolean fix_draw_next_balls(gpointer data) {
|
||||
static gboolean fix_draw_next_balls(gpointer data) {
|
||||
draw_next_balls();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
void preferences_apply(GtkWidget *widget, gpointer data)
|
||||
static void preferences_apply(gpointer data)
|
||||
{
|
||||
GtkWidget **buttons = data;
|
||||
GtkTreeModel *model;
|
||||
@ -108,22 +98,29 @@ void preferences_apply(GtkWidget *widget, gpointer data)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void preferences_ok(GtkWidget *widget, gpointer data) {
|
||||
GtkWidget **buttons = data;
|
||||
preferences_apply(widget, buttons);
|
||||
gtk_widget_destroy(buttons[PR_DIALOG]);
|
||||
static void prefs_dialog_response (GtkDialog * dlg, int response, gpointer user_data)
|
||||
{
|
||||
switch (response)
|
||||
{
|
||||
case GTK_RESPONSE_APPLY:
|
||||
preferences_apply (user_data);
|
||||
g_signal_stop_emission_by_name (dlg, "response");
|
||||
return;
|
||||
case GTK_RESPONSE_OK:
|
||||
preferences_apply (user_data);
|
||||
break;
|
||||
}
|
||||
gtk_widget_destroy (GTK_WIDGET (dlg));
|
||||
g_free (user_data); /* buttons */
|
||||
}
|
||||
|
||||
|
||||
|
||||
void preferences_dialog (void)
|
||||
{
|
||||
GtkWidget ** buttons;
|
||||
GtkWidget * frame;
|
||||
GtkWidget * big_vbox, * vbox, * buttons_box;
|
||||
GtkWidget * dialog, * frame;
|
||||
GtkWidget * big_vbox, * vbox;
|
||||
GtkWidget * theme_scrolled_window;
|
||||
GtkWidget * separator;
|
||||
gint i, st;
|
||||
GtkListStore * store;
|
||||
GtkTreeIter iter;
|
||||
@ -140,18 +137,8 @@ void preferences_dialog (void)
|
||||
|
||||
buttons = g_malloc (PR_SIZE * sizeof(GtkWidget));
|
||||
|
||||
buttons[PR_DIALOG] = ut_window_new(_("Preferences"), "GtkBalls_Preferences", "GtkBalls", TRUE, TRUE, TRUE, 5);
|
||||
g_signal_connect (G_OBJECT(buttons[PR_DIALOG]), "destroy", G_CALLBACK(preferences_destroy_cb), buttons);
|
||||
|
||||
big_vbox = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER(buttons[PR_DIALOG]), big_vbox);
|
||||
|
||||
frame = gtk_frame_new (_("Preferences"));
|
||||
gtk_box_pack_start (GTK_BOX(big_vbox), frame, FALSE, FALSE, 0);
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER(vbox), 5);
|
||||
gtk_container_add (GTK_CONTAINER(frame), vbox);
|
||||
dialog = gtkutil_dialog_new (_("Preferences"), main_window, TRUE, &big_vbox);
|
||||
vbox = gtkutil_frame_vbox (_("Preferences"), big_vbox);
|
||||
|
||||
buttons[PR_SHOW_NEXT] = ut_check_button_new(_("Show colors that will appear on next turn"), pref_get_show_next_colors(), vbox);
|
||||
buttons[PR_SHOW_PATH] = ut_check_button_new(_("Show path of the ball"), pref_get_show_path(), vbox);
|
||||
@ -212,16 +199,10 @@ void preferences_dialog (void)
|
||||
}
|
||||
g_free (pathstr);
|
||||
|
||||
separator = gtk_hseparator_new ();
|
||||
gtk_box_pack_start (GTK_BOX(big_vbox), separator, FALSE, FALSE, 5);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-apply", GTK_RESPONSE_APPLY);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-ok", GTK_RESPONSE_OK);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-cancel", GTK_RESPONSE_CANCEL);
|
||||
g_signal_connect (dialog, "response", G_CALLBACK (prefs_dialog_response), buttons);
|
||||
|
||||
buttons_box = gtk_hbutton_box_new ();
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX(buttons_box), GTK_BUTTONBOX_SPREAD);
|
||||
gtk_box_pack_start (GTK_BOX(big_vbox), buttons_box, TRUE, TRUE, 0);
|
||||
|
||||
gtk_widget_grab_default (ut_button_new_stock(GTK_STOCK_OK, preferences_ok, buttons, buttons_box));
|
||||
ut_button_new_stock (GTK_STOCK_CANCEL, preferences_cancel, buttons, buttons_box);
|
||||
ut_button_new_stock (GTK_STOCK_APPLY, preferences_apply, buttons, buttons_box);
|
||||
|
||||
gtk_widget_show_all (buttons[PR_DIALOG]);
|
||||
gtk_widget_show_all (dialog);
|
||||
}
|
||||
|
30
src/rules.c
30
src/rules.c
@ -13,24 +13,16 @@
|
||||
/* Show dialog box with game rules*/
|
||||
void show_rules (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
GtkWidget * window;
|
||||
GtkWidget * vbox, * hbox, * button_box;
|
||||
GtkWidget * dialog;
|
||||
GtkWidget * main_vbox, * vbox, * hbox;
|
||||
GtkWidget * label;
|
||||
GtkWidget * frame;
|
||||
GtkWidget * separator;
|
||||
GtkWidget * ok_button;
|
||||
|
||||
window = ut_window_new(_("Rules"), "GtkBalls_Rules", "GtkBalls", TRUE, FALSE, FALSE, 5);
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER(window), vbox);
|
||||
|
||||
frame = gtk_frame_new (_("Rules"));
|
||||
gtk_box_pack_start (GTK_BOX(vbox), frame, TRUE, TRUE, 3);
|
||||
dialog = gtkutil_dialog_new (_("Rules"), main_window, TRUE, &main_vbox);
|
||||
vbox = gtkutil_frame_vbox (_("Rules"), main_vbox);
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER(hbox), 10);
|
||||
gtk_container_add (GTK_CONTAINER(frame), hbox);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
|
||||
|
||||
label = gtk_label_new (_("The standard play area of GtkBalls is a 9x9\n" \
|
||||
"grid (it can be changed through \"Rules\"\n" \
|
||||
@ -64,14 +56,8 @@ void show_rules (GtkWidget *widget, gpointer data)
|
||||
"the grid will be."));
|
||||
gtk_box_pack_start (GTK_BOX(hbox), label, TRUE, TRUE, 5);
|
||||
|
||||
separator = gtk_hseparator_new ();
|
||||
gtk_box_pack_start (GTK_BOX(vbox), separator, FALSE, FALSE, 5);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-close", GTK_RESPONSE_OK);
|
||||
g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
|
||||
|
||||
button_box = gtk_hbox_new (FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX(vbox), button_box, TRUE, TRUE, 2);
|
||||
|
||||
ok_button = ut_button_new_stock_swap (GTK_STOCK_CLOSE, gtk_widget_destroy, window, button_box);
|
||||
|
||||
gtk_widget_grab_default (ok_button);
|
||||
gtk_widget_show_all (window);
|
||||
gtk_widget_show_all (dialog);
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ struct _gtkb_rules_dialog {
|
||||
|
||||
struct _gtkb_rules_dialog _rd;
|
||||
|
||||
void rules_ok(GtkWidget *widget, gpointer data)
|
||||
static void rules_ok (void)
|
||||
{
|
||||
gint oldnext = rules_get_next();
|
||||
gchar *msg;
|
||||
@ -33,9 +33,6 @@ void rules_ok(GtkWidget *widget, gpointer data)
|
||||
|
||||
reinit_board (NULL, NULL, 0, oldnext);
|
||||
|
||||
if(data) {
|
||||
gtk_widget_destroy (GTK_WIDGET(data));
|
||||
}
|
||||
msg = save_preferences ();
|
||||
if(msg) {
|
||||
ut_simple_message_box (msg);
|
||||
@ -44,36 +41,33 @@ void rules_ok(GtkWidget *widget, gpointer data)
|
||||
}
|
||||
|
||||
|
||||
void rules_classic(void)
|
||||
{
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(_rd.xrange), rules_get_classic_width());
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(_rd.yrange), rules_get_classic_height());
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(_rd.crange), rules_get_classic_colors());
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(_rd.nrange), rules_get_classic_next());
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(_rd.drange), rules_get_classic_destroy());
|
||||
}
|
||||
#define BTN_CLASSIC_RULES 100
|
||||
|
||||
static void rules_dialog_response (GtkDialog * dlg, int response, gpointer user_data)
|
||||
{
|
||||
if (response == BTN_CLASSIC_RULES) {
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON(_rd.xrange), rules_get_classic_width());
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON(_rd.yrange), rules_get_classic_height());
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON(_rd.crange), rules_get_classic_colors());
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON(_rd.nrange), rules_get_classic_next());
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON(_rd.drange), rules_get_classic_destroy());
|
||||
g_signal_stop_emission_by_name (dlg, "response");
|
||||
return;
|
||||
}
|
||||
if (response == GTK_RESPONSE_OK) {
|
||||
rules_ok ();
|
||||
}
|
||||
gtk_widget_destroy (GTK_WIDGET (dlg));
|
||||
}
|
||||
|
||||
void rules_dialog (void)
|
||||
{
|
||||
GtkWidget * dialog;
|
||||
GtkWidget * frame;
|
||||
GtkWidget * big_vbox, * vbox, * buttons_box;
|
||||
GtkWidget * separator;
|
||||
GtkWidget * ok_button, * cancel_button, * classic_button;
|
||||
GtkWidget * big_vbox, * vbox, * btn;
|
||||
|
||||
|
||||
dialog = ut_window_new(_("Game rules"), "GtkBalls_Rules", "GtkBalls", TRUE, TRUE, TRUE, 5);
|
||||
|
||||
big_vbox = gtk_vbox_new (FALSE, 5);
|
||||
gtk_container_add (GTK_CONTAINER(dialog), big_vbox);
|
||||
|
||||
frame = gtk_frame_new (_("Game rules"));
|
||||
gtk_box_pack_start (GTK_BOX(big_vbox), frame, FALSE, FALSE, 0);
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER(vbox), 5);
|
||||
gtk_container_add (GTK_CONTAINER(frame), vbox);
|
||||
dialog = gtkutil_dialog_new (_("Game rules"), main_window, TRUE, &big_vbox);
|
||||
vbox = gtkutil_frame_vbox (_("Game rules"), big_vbox);
|
||||
|
||||
_rd.xrange = ut_spin_button_new (_("Board width"), 4, 99, rules_get_width(), vbox);
|
||||
_rd.yrange = ut_spin_button_new (_("Board height"), 4, 99, rules_get_height(), vbox);
|
||||
@ -83,18 +77,11 @@ void rules_dialog (void)
|
||||
_rd.drange = ut_spin_button_new (_("How many balls at line eliminate it"),
|
||||
3, 99, rules_get_destroy(), vbox);
|
||||
|
||||
classic_button = ut_button_new (_("Classic rules"), rules_classic, dialog, big_vbox);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), _("Classic rules"), BTN_CLASSIC_RULES);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-ok", GTK_RESPONSE_OK);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-cancel", GTK_RESPONSE_CANCEL);
|
||||
|
||||
separator = gtk_hseparator_new ();
|
||||
gtk_box_pack_start (GTK_BOX(big_vbox), separator, FALSE, FALSE, 5);
|
||||
|
||||
buttons_box = gtk_hbutton_box_new ();
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX(buttons_box), GTK_BUTTONBOX_SPREAD);
|
||||
gtk_box_pack_start (GTK_BOX(big_vbox), buttons_box, TRUE, TRUE, 0);
|
||||
|
||||
ok_button = ut_button_new_stock (GTK_STOCK_OK, rules_ok, dialog, buttons_box);
|
||||
cancel_button = ut_button_new_stock_swap (GTK_STOCK_CANCEL, gtk_widget_destroy, dialog, buttons_box);
|
||||
|
||||
gtk_widget_grab_default (ok_button);
|
||||
gtk_widget_grab_default (gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK));
|
||||
g_signal_connect (dialog, "response", G_CALLBACK (rules_dialog_response), NULL);
|
||||
gtk_widget_show_all (dialog);
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ void do_load_game(GtkWidget *widget, gpointer data) {
|
||||
}
|
||||
}
|
||||
|
||||
void do_delete_game(GtkWidget *widget, GtkWidget *treeview) {
|
||||
static void do_delete_game (GtkWidget *treeview) {
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter, nextiter;
|
||||
GValue value = {0, };
|
||||
@ -175,6 +175,29 @@ gint game_compare_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpoi
|
||||
}
|
||||
|
||||
|
||||
#define BUTTON_SAVE_GAME 100
|
||||
#define BUTTON_LOAD_GAME 101
|
||||
#define BUTTON_DELETE_GAME 102
|
||||
|
||||
static void save_load_dlg_response (GtkDialog * dlg, int response, gpointer user_data)
|
||||
{
|
||||
GtkWidget * treeview = GTK_WIDGET (user_data);
|
||||
switch (response)
|
||||
{
|
||||
case BUTTON_SAVE_GAME:
|
||||
do_save_game (treeview, dlg);
|
||||
return;
|
||||
case BUTTON_LOAD_GAME:
|
||||
do_load_game (treeview, dlg);
|
||||
return;
|
||||
case BUTTON_DELETE_GAME:
|
||||
do_delete_game (treeview);
|
||||
return;
|
||||
}
|
||||
gtk_widget_destroy (GTK_WIDGET (dlg));
|
||||
}
|
||||
|
||||
|
||||
|
||||
void save_load_game_dialog(gboolean is_save)
|
||||
{
|
||||
@ -184,9 +207,7 @@ void save_load_game_dialog(gboolean is_save)
|
||||
GtkCellRenderer * renderer;
|
||||
GtkTreeViewColumn * column;
|
||||
GtkTreePath * path;
|
||||
GtkWidget * window, * swindow;
|
||||
GtkWidget * vbox, * button_box;
|
||||
GtkWidget * ok_button, * cancel_button, *delete_button;
|
||||
GtkWidget * dialog, * swindow, * main_vbox, * vbox;
|
||||
gint i, num;
|
||||
gchar ** gamelist, str1[20], * str2;
|
||||
|
||||
@ -198,13 +219,8 @@ void save_load_game_dialog(gboolean is_save)
|
||||
return;
|
||||
}
|
||||
|
||||
window = ut_window_new(is_save ? _("Save game") : _("Load game"),
|
||||
is_save ? "GtkBalls_Save" : "GtkBalls_Load",
|
||||
"GtkBalls", TRUE, TRUE, TRUE, 5);
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER(vbox), 1);
|
||||
gtk_container_add (GTK_CONTAINER(window), vbox);
|
||||
dialog = gtkutil_dialog_new (is_save ? _("Save game") : _("Load game"),
|
||||
main_window, TRUE, &vbox);
|
||||
|
||||
swindow = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(swindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||
@ -269,24 +285,21 @@ void save_load_game_dialog(gboolean is_save)
|
||||
}
|
||||
g_object_unref (G_OBJECT(store));
|
||||
|
||||
button_box = gtk_hbox_new (TRUE, 10);
|
||||
if (is_save) {
|
||||
ok_button = ut_button_new (_("Save game"), do_save_game, window, button_box);
|
||||
g_signal_connect (G_OBJECT(treeview), "row_activated", G_CALLBACK(save_row_activated_cb), window);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), _("Save game"), BUTTON_SAVE_GAME);
|
||||
g_signal_connect (G_OBJECT(treeview), "row_activated", G_CALLBACK(save_row_activated_cb), dialog);
|
||||
|
||||
} else {
|
||||
ok_button = ut_button_new (_("Load game"), do_load_game, window, button_box);
|
||||
g_signal_connect(G_OBJECT(treeview), "row_activated", G_CALLBACK(load_row_activated_cb), window);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), _("Load game"), BUTTON_LOAD_GAME);
|
||||
g_signal_connect (G_OBJECT(treeview), "row_activated", G_CALLBACK(load_row_activated_cb), dialog);
|
||||
}
|
||||
delete_button = ut_button_new (_("Delete game"), do_delete_game, treeview, button_box);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), _("Delete game"), BUTTON_DELETE_GAME);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-cancel", GTK_RESPONSE_CANCEL);
|
||||
g_signal_connect (dialog, "response", G_CALLBACK (save_load_dlg_response),
|
||||
treeview);
|
||||
|
||||
cancel_button = ut_button_new_stock_swap (GTK_STOCK_CANCEL, gtk_widget_destroy, window, button_box);
|
||||
gtk_box_pack_start (GTK_BOX(vbox), button_box, FALSE, FALSE, 4);
|
||||
|
||||
gtk_widget_grab_default (ok_button);
|
||||
gtk_widget_grab_focus (ok_button);
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW(window), -1, 300);
|
||||
gtk_widget_show_all (window);
|
||||
gtk_window_set_default_size (GTK_WINDOW(dialog), -1, 300);
|
||||
gtk_widget_show_all (dialog);
|
||||
}
|
||||
|
||||
void save_game_cb(GtkWidget *widget, gpointer data) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user