#include "file.h" #include "free.h" #include "game_gui.h" #include "interface.h" #include "main.h" #include "misc_interface.h" #include "option.h" #include "support.h" #include "user.h" #include "variables.h" #include "window.h" /** Show the country selection window. All files with prefix 'country_' from $HOME/.bygfoot/definitions are appended to a combo box. */ void window_show_startup(void) { GtkWidget *window_startup = window_create(WINDOW_STARTUP); GtkWidget *combo_country = lookup_widget(window_startup, "combo_country"); gchar country_dir[SMALL]; GPtrArray *dir_contents = NULL; GList *combo_strings = NULL; gint i; file_get_definitions_dir(country_dir); dir_contents = file_dir_get_contents((const gchar*)country_dir, "country_"); for(i=0;ilen;i++) combo_strings = g_list_append(combo_strings, ((GString*)g_ptr_array_index(dir_contents, i))->str); gtk_combo_set_popdown_strings(GTK_COMBO(combo_country), combo_strings); free_g_string_array(&dir_contents); } /** Set 'Bygfoot x.y.z' into the title of a window. @param window The window widget pointer. @see #VERS */ GtkWidget* window_set_version(GtkWidget *wind) { gchar buf[SMALL]; sprintf(buf, "Bygfoot Football Manager %s", VERS); gtk_window_set_title(GTK_WINDOW(wind), buf); return wind; } /** Create and show a window. Which one depends on the argument. @param window_type An integer telling us which window to create. @return The pointer to the new window. @see #Windows */ GtkWidget* window_create(gint window_type) { GtkWidget *wind = NULL; popups_active++; switch(window_type) { default: if(window.main == NULL) { window.main = create_main_window(); popups_active--; wind = window.main; game_gui_print_message("Welcome to Bygfoot "VERS); } else wind = window.main; break; case WINDOW_STARTUP: if(window.startup != NULL) g_warning("window_create: called on already existing window\n"); else window.startup = create_window_startup(); wind = window.startup; break; case WINDOW_LIVE: if(window.live != NULL) g_warning("window_create: called on already existing window\n"); else window.live = create_window_live(); wind = window.live; gtk_spin_button_set_value( GTK_SPIN_BUTTON(lookup_widget(wind, "spinbutton_speed")), (gfloat)option_int("int_opt_user_live_game_speed", usr(stat2).options)); break; case WINDOW_STARTUP_USERS: if(window.startup_users != NULL) g_warning("window_create: called on already existing window\n"); else window.startup_users = create_window_startup_users(); wind = window.startup_users; break; } window_set_version(wind); gtk_widget_show(wind); if(popups_active != 0 && window.main != NULL) gtk_widget_set_sensitive(window.main, FALSE); return wind; } /** Destroy a window widget and set the popups and main window sensitivity correctly. @param window The window we destroy. */ void window_destroy(GtkWidget **wind) { if(*wind == NULL) return; if(*wind != window.main) { popups_active--; if(popups_active == 0 && window.main != NULL) gtk_widget_set_sensitive(window.main, TRUE); } gtk_widget_destroy(*wind); *wind = NULL; }