diff --git a/bygfoot_misc.glade b/bygfoot_misc.glade index d4931d80..f9afc0d5 100644 --- a/bygfoot_misc.glade +++ b/bygfoot_misc.glade @@ -673,6 +673,76 @@ True + + + + True + True + GTK_RELIEF_NORMAL + + + + + True + 0.5 + 0.5 + 0 + 0 + + + + True + False + 2 + + + + True + gtk-jump-to + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + Resume last game + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + + + + 0 + False + False + + diff --git a/src/Makefile.am b/src/Makefile.am index 0ec4bd00..853c8183 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -26,8 +26,8 @@ bygfoot_SOURCES = \ main.c cup_struct.h misc_callbacks.h file.h free.h league_struct.h live_game.h main.h transfer_struct.h variables.h window.h \ maths.c maths.h misc.h \ misc.c main.h maths.h misc.h \ - misc_callbacks.c callbacks.h callback_func.h game.h game_gui.h live_game.h load_save.h main.h misc_callback_func.h misc_callbacks.h option.h user.h variables.h window.h xml_name.h \ - misc_callback_func.c misc_callback_func.h start_end.h support.h team.h treeview.h user.h variables.h xml_country.h \ + misc_callbacks.c callbacks.h callback_func.h game.h game_gui.h live_game.h load_save.h main.h misc_callback_func.h misc_callbacks.h option.h user.h variables.h window.h \ + misc_callback_func.c callbacks.h finance.h game.h game_gui.h gui.h load_save.h maths.h misc_callback_func.h option.h start_end.h support.h treeview.h user.h variables.h window.h xml_country.h xml_name.h \ misc_interface.c misc_interface.h misc_callbacks.h support.h \ misc2_callbacks.c finance.h game_gui.h main.h misc2_callbacks.h misc2_callback_func.h misc2_interface.h player.h support.h transfer.h treeview.h user.h window.h \ misc2_callback_func.c file.h finance.h game_gui.h maths.h misc2_callback_func.h option.h player.h support.h team.h treeview.h transfer.h user.h window.h \ diff --git a/src/league.c b/src/league.c index 51e15f4a..69e6e0f2 100644 --- a/src/league.c +++ b/src/league.c @@ -149,7 +149,7 @@ league_cup_get_next_clid(gint clid) else if(cps->len > 0) return_value = cp(0).id; else - return_value = clid; + return_value = lig(0).id; } else { @@ -185,7 +185,7 @@ league_cup_get_previous_clid(gint clid) else if(cps->len > 0) return_value = cp(cps->len - 1).id; else - return_value = clid; + return_value = lig(ligs->len - 1).id; } else { diff --git a/src/league_struct.h b/src/league_struct.h index 69e4dc42..336ccbc3 100644 --- a/src/league_struct.h +++ b/src/league_struct.h @@ -35,7 +35,9 @@ typedef struct { /** The id of the league the promotion games winner gets promoted to. Default "" */ GString *prom_games_dest_sid; - + /** Number of teams that advance from the promotion games. */ + gint prom_games_number_of_advance; + /** Array with promotion/relegation rules. @see PromRelElement */ diff --git a/src/load_save.c b/src/load_save.c index fb2656ae..5b5ae1ea 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -79,6 +79,8 @@ load_save_save_game(const gchar *filename) gui_show_progress(1, "Done."); + load_save_last_save_set(fullname); + g_free(prefix); g_free(fullname); @@ -146,3 +148,41 @@ load_save_load_game(const gchar* filename) gui_show_progress(-1, ""); } + +/** Store the name of the last savegame in the users home dir. */ +void +load_save_last_save_set(const gchar *filename) +{ + gchar buf[SMALL]; + const gchar *home = g_get_home_dir(); + FILE *fil = NULL; + + sprintf(buf, "%s/%s/saves/last_save", home, HOMEDIRNAME); + + if(!file_my_fopen(buf, "w", &fil, FALSE)) + return; + + fprintf(fil, "%s", filename); + + fclose(fil); +} + +/** Return the filename of the last savegame. */ +gchar* +load_save_last_save_get(void) +{ + gchar buf[SMALL]; + const gchar *home = g_get_home_dir(); + FILE *fil = NULL; + + sprintf(buf, "%s/%s/saves/last_save", home, HOMEDIRNAME); + + if(!file_my_fopen(buf, "r", &fil, FALSE)) + return NULL; + + fscanf(fil, "%s", buf); + + fclose(fil); + + return g_strdup(buf); +} diff --git a/src/load_save.h b/src/load_save.h index e922d4eb..79285d8a 100644 --- a/src/load_save.h +++ b/src/load_save.h @@ -9,5 +9,10 @@ load_save_save_game(const gchar* filename); void load_save_load_game(const gchar* filename); +void +load_save_last_save_set(const gchar *filename); + +gchar* +load_save_last_save_get(void); #endif diff --git a/src/misc_callback_func.c b/src/misc_callback_func.c index 01d8b880..13aa7682 100644 --- a/src/misc_callback_func.c +++ b/src/misc_callback_func.c @@ -1,9 +1,12 @@ +#include "callbacks.h" #include "finance.h" #include "game.h" #include "game_gui.h" #include "gui.h" +#include "load_save.h" #include "maths.h" #include "misc_callback_func.h" +#include "option.h" #include "start_end.h" #include "support.h" #include "treeview.h" @@ -11,6 +14,7 @@ #include "variables.h" #include "window.h" #include "xml_country.h" +#include "xml_name.h" /* show the teams from the leagues in the country in the startup window */ @@ -206,3 +210,15 @@ misc_callback_improve_stadium(void) window_destroy(&window.stadium, TRUE); game_gui_set_main_window_header(); } + +/** Load a savegame directly from the startup window. */ +void +misc_callback_startup_load(const gchar *filename) +{ + window_destroy(&window.startup, TRUE); + window_create(WINDOW_MAIN); + xml_name_read(opt_str("string_opt_player_names_file"), 1000); + load_save_load_game(filename); + cur_user = 0; + on_button_back_to_main_clicked(NULL, NULL); +} diff --git a/src/misc_callback_func.h b/src/misc_callback_func.h index 4489c068..6b00c07c 100644 --- a/src/misc_callback_func.h +++ b/src/misc_callback_func.h @@ -24,4 +24,7 @@ misc_callback_improve_stadium(void); void misc_callback_update_stadium_window(gboolean capacity); +void +misc_callback_startup_load(const gchar *filename); + #endif diff --git a/src/misc_callbacks.c b/src/misc_callbacks.c index a2eb8c2d..5476c58c 100644 --- a/src/misc_callbacks.c +++ b/src/misc_callbacks.c @@ -12,7 +12,6 @@ #include "user.h" #include "variables.h" #include "window.h" -#include "xml_name.h" void on_button_add_player_clicked (GtkButton *button, @@ -97,14 +96,7 @@ on_button_fsel_ok_clicked (GtkButton *button, on_button_back_to_main_clicked(NULL, NULL); } else if(stat1 == STATUS_LOAD_GAME_TEAM_SELECTION) - { - window_destroy(&window.startup, TRUE); - window_create(WINDOW_MAIN); - xml_name_read(opt_str("string_opt_player_names_file"), 1000); - load_save_load_game(filename); - cur_user = 0; - on_button_back_to_main_clicked(NULL, NULL); - } + misc_callback_startup_load(filename); window_destroy(&window.file_sel, FALSE); } @@ -305,3 +297,18 @@ on_spinbutton_capacity_button_press_event (GtkWidget *widget, return FALSE; } + +void +on_button_startup_resume_clicked (GtkButton *button, + gpointer user_data) +{ + gchar *last_save = load_save_last_save_get(); + + if(last_save == NULL) + return; + + misc_callback_startup_load(last_save); + + g_free(last_save); +} + diff --git a/src/misc_callbacks.h b/src/misc_callbacks.h index 5d76f33d..f932fb45 100644 --- a/src/misc_callbacks.h +++ b/src/misc_callbacks.h @@ -117,4 +117,8 @@ on_spinbutton_capacity_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); + +void +on_button_startup_resume_clicked (GtkButton *button, + gpointer user_data); #endif diff --git a/src/misc_interface.c b/src/misc_interface.c index 1fea54b3..ac1d33d1 100644 --- a/src/misc_interface.c +++ b/src/misc_interface.c @@ -75,6 +75,11 @@ create_window_startup (void) GtkWidget *hbox6; GtkWidget *image4; GtkWidget *label5; + GtkWidget *button_startup_resume; + GtkWidget *alignment21; + GtkWidget *hbox68; + GtkWidget *image61; + GtkWidget *label108; GtkAccelGroup *accel_group; GtkTooltips *tooltips; @@ -315,6 +320,27 @@ create_window_startup (void) gtk_box_pack_start (GTK_BOX (hbox6), label5, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (label5), GTK_JUSTIFY_LEFT); + button_startup_resume = gtk_button_new (); + gtk_widget_show (button_startup_resume); + gtk_box_pack_start (GTK_BOX (vbox2), button_startup_resume, FALSE, FALSE, 0); + + alignment21 = gtk_alignment_new (0.5, 0.5, 0, 0); + gtk_widget_show (alignment21); + gtk_container_add (GTK_CONTAINER (button_startup_resume), alignment21); + + hbox68 = gtk_hbox_new (FALSE, 2); + gtk_widget_show (hbox68); + gtk_container_add (GTK_CONTAINER (alignment21), hbox68); + + image61 = gtk_image_new_from_stock ("gtk-jump-to", GTK_ICON_SIZE_BUTTON); + gtk_widget_show (image61); + gtk_box_pack_start (GTK_BOX (hbox68), image61, FALSE, FALSE, 0); + + label108 = gtk_label_new_with_mnemonic (_("Resume last game")); + gtk_widget_show (label108); + gtk_box_pack_start (GTK_BOX (hbox68), label108, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label108), GTK_JUSTIFY_LEFT); + g_signal_connect ((gpointer) window_startup, "delete_event", G_CALLBACK (on_team_selection_cancel_clicked), NULL); @@ -342,6 +368,9 @@ create_window_startup (void) g_signal_connect ((gpointer) team_selection_load, "clicked", G_CALLBACK (on_team_selection_load_clicked), NULL); + g_signal_connect ((gpointer) button_startup_resume, "clicked", + G_CALLBACK (on_button_startup_resume_clicked), + NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (window_startup, window_startup, "window_startup"); @@ -389,6 +418,11 @@ create_window_startup (void) GLADE_HOOKUP_OBJECT (window_startup, hbox6, "hbox6"); GLADE_HOOKUP_OBJECT (window_startup, image4, "image4"); GLADE_HOOKUP_OBJECT (window_startup, label5, "label5"); + GLADE_HOOKUP_OBJECT (window_startup, button_startup_resume, "button_startup_resume"); + GLADE_HOOKUP_OBJECT (window_startup, alignment21, "alignment21"); + GLADE_HOOKUP_OBJECT (window_startup, hbox68, "hbox68"); + GLADE_HOOKUP_OBJECT (window_startup, image61, "image61"); + GLADE_HOOKUP_OBJECT (window_startup, label108, "label108"); GLADE_HOOKUP_OBJECT_NO_REF (window_startup, tooltips, "tooltips"); gtk_widget_grab_focus (treeview_startup); diff --git a/src/xml_league.c b/src/xml_league.c index 5e6aabd9..222c5977 100644 --- a/src/xml_league.c +++ b/src/xml_league.c @@ -24,6 +24,7 @@ #define TAG_PROM_REL "prom_rel" #define TAG_PROM_GAMES "prom_games" #define TAG_PROM_GAMES_DEST_SID "prom_games_dest_sid" +#define TAG_PROM_GAMES_NUMBER_OF_ADVANCE "prom_games_number_of_advance" #define TAG_PROM_GAMES_CUP "cup" #define TAG_PROM_REL_ELEMENT "prom_rel_element" #define TAG_PROM_REL_ELEMENT_RANK_START "rank_start" @@ -51,6 +52,7 @@ enum XmlLeagueStates STATE_PROM_REL, STATE_PROM_GAMES, STATE_PROM_GAMES_DEST_SID, + STATE_PROM_GAMES_NUMBER_OF_ADVANCE, STATE_PROM_GAMES_CUP, STATE_PROM_REL_ELEMENT, STATE_PROM_REL_ELEMENT_RANK_START, @@ -117,6 +119,8 @@ xml_league_read_start_element (GMarkupParseContext *context, state = STATE_PROM_GAMES; else if(strcmp(element_name, TAG_PROM_GAMES_DEST_SID) == 0) state = STATE_PROM_GAMES_DEST_SID; + else if(strcmp(element_name, TAG_PROM_GAMES_NUMBER_OF_ADVANCE) == 0) + state = STATE_PROM_GAMES_NUMBER_OF_ADVANCE; else if(strcmp(element_name, TAG_PROM_GAMES_CUP) == 0) state = STATE_PROM_GAMES_CUP; else if(strcmp(element_name, TAG_PROM_REL_ELEMENT) == 0) @@ -178,6 +182,7 @@ xml_league_read_end_element (GMarkupParseContext *context, strcmp(element_name, TAG_PROM_REL_ELEMENT) == 0) state = STATE_PROM_REL; else if(strcmp(element_name, TAG_PROM_GAMES_DEST_SID) == 0 || + strcmp(element_name, TAG_PROM_GAMES_NUMBER_OF_ADVANCE) == 0 || strcmp(element_name, TAG_PROM_GAMES_CUP) == 0) state = STATE_PROM_GAMES; else if(strcmp(element_name, TAG_PROM_REL_ELEMENT_RANK_START) == 0 || @@ -237,6 +242,8 @@ xml_league_read_text (GMarkupParseContext *context, new_league.average_skill = value; else if(state == STATE_PROM_GAMES_DEST_SID) g_string_printf(new_league.prom_rel.prom_games_dest_sid, "%s", buf); + else if(state == STATE_PROM_GAMES_NUMBER_OF_ADVANCE) + new_league.prom_rel.prom_games_number_of_advance = value; else if(state == STATE_PROM_GAMES_CUP) { strcat(buf, ".xml"); diff --git a/support_files/definitions/country_brazil.xml b/support_files/definitions/country_brazil.xml new file mode 100644 index 00000000..f3e54c5c --- /dev/null +++ b/support_files/definitions/country_brazil.xml @@ -0,0 +1,22 @@ + + + Brasil + flag_br.png + brazil + + brazil1 + brazil2 + brazil3 + brazil4 + brazil5 + brazil6 + + + + + + champ_league + cwc + uefa + + diff --git a/support_files/definitions/league_brazil1.xml b/support_files/definitions/league_brazil1.xml new file mode 100644 index 00000000..4ba77224 --- /dev/null +++ b/support_files/definitions/league_brazil1.xml @@ -0,0 +1,89 @@ + + + + brazil1 + Primeira Divisão + Primeira Divisão + flag_br.png + 1 + 1 + 8000 + + + + 20 + 22 + brazil2 + relegation + + + + + + Atlético Mineiro + + + Atlético Paranaense + + + Botafogo + + + Braziliense + + + Corinthians + + + Coritiba + + + Cruzeiro + + + Figueirense + + + Flamengo + + + Fluminense + + + Fortaleza + + + Goiás + + + Internacional + + + Juventude + + + Palmeiras + + + Paraná Clube + + + Paysandu + + + Ponte Preta + + + Santos + + + São Caetano + + + São Paulo + + + Vasco da Gama + + + diff --git a/support_files/definitions/league_brazil2.xml b/support_files/definitions/league_brazil2.xml new file mode 100644 index 00000000..4ef2c991 --- /dev/null +++ b/support_files/definitions/league_brazil2.xml @@ -0,0 +1,97 @@ + + + + brazil2 + Segunda Divisão + Segunda Divisão + flag_br.png + 1 + 1 + 7000 + + + + + brazil1 + cup_brazil_prom_games + + + + 19 + 20 + brazil3 + relegation + + + + + + + Anápolina + + + Avaí + + + Bahia + + + Caxias + + + Ceará + + + CRB + + + Criciúma + + + Gama + + + Grêmio + + + Guarani + + + Ituano + + + Marília + + + Náutico + + + Paulista + + + Portuguesa + + + Santa Cruz + + + Santo André + + + São Raimundo + + + Sport Clube Recife + + + União Barbarense + + + Vila Nova-GO + + + Vitória + + + + diff --git a/support_files/definitions/league_brazil3.xml b/support_files/definitions/league_brazil3.xml new file mode 100644 index 00000000..8121c947 --- /dev/null +++ b/support_files/definitions/league_brazil3.xml @@ -0,0 +1,91 @@ + + + + brazil3 + Terceira Divisão + Terceira Divisão + flag_br.png + 1 + 1 + 6000 + + + + + brazil3 + cup_brazil_prom_games + + + + 19 + 20 + brazil4 + relegation + + + + + + + Americano-RJ + + + Confiança + + + CRAC + + + Gama + + + Grêmio Coariense + + + Hermann Ainchinger + + + Iraty + + + Itacuruba + + + Limoeiro + + + Moto Club + + + Palmas + + + Parnahyba + + + Porto + + + Rio Branco-AC + + + Rio Branco-SP + + + Sampaio Corrêa + + + Serra + + + Treze + + + União Barbarense + + + Villa Nova-MG + + + + diff --git a/support_files/definitions/league_brazil4.xml b/support_files/definitions/league_brazil4.xml new file mode 100644 index 00000000..265eab83 --- /dev/null +++ b/support_files/definitions/league_brazil4.xml @@ -0,0 +1,91 @@ + + + + brazil4 + Quarta Divisão + Quarta Divisão + flag_br.png + 1 + 1 + 5000 + + + + + brazil4 + cup_brazil_prom_games + + + + 19 + 20 + brazil5 + relegation + + + + + + + Atlético-BA + + + Atlético Roraima + + + Atlético Sorocaba + + + Castanhal Campinense + + + Ceilândia + + + CENE + + + CFZ-DF + + + Tuna Luso + + + Cuiabá + + + Ferroviário + + + Gurupi + + + Novo Hamburgo + + + Portuguesa santista + + + Potiguar de Mossoró + + + Sergipe + + + Ulbra + + + União-MT + + + Tupi-MG + + + Portuguesa-RJ + + + Nacional-PR + + + + diff --git a/support_files/definitions/league_brazil5.xml b/support_files/definitions/league_brazil5.xml new file mode 100644 index 00000000..f7b227cb --- /dev/null +++ b/support_files/definitions/league_brazil5.xml @@ -0,0 +1,87 @@ + + + + england5 + Quinta Divisão + Nat. Conf. + flag_br.png + 1 + 1 + 4000 + + + brazil4 + cup_brazil_prom_games + + + + 19 + 20 + brazil6 + relegation + + + + + América-RJ + + + América-SP + + + Baraúnas + + + Catuense + + + Cianorte-PR + + + Corinthians-AL + + + Coruripe-AL + + + Esportivo-RS + + + Estrela do Norte + + + Friburguense + + + Ipatinga + + + Jataiense + + + Ji-Paraná-RO + + + Lages-SC + + + Nacional-AM + + + Nacional-PR + + + River + + + SERC-MS + + + Trem-AP + + + União São João + + + + diff --git a/support_files/definitions/league_brazil6.xml b/support_files/definitions/league_brazil6.xml new file mode 100644 index 00000000..c8502f66 --- /dev/null +++ b/support_files/definitions/league_brazil6.xml @@ -0,0 +1,84 @@ + + + + brazil6 + Sexta Divisão + Sexta Divisão + flag_br.png + 1 + 1 + 3000 + + + + + brazil6 + cup_brazil_prom_games + + + + + + + Bangu + + + Botafogo-SP + + + Brasil + + + Cabofriense + + + Caxias + + + Fortaleza + + + Glória + + + Internacional de Limeira + + + Juventus + + + Oeste + + + Olaria + + + Madureira + + + Mamoré + + + Matonense + + + Noroeste + + + Roma + + + Bragantino + + + Tiradentes + + + URT + + + Valeriodoce + + + +