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
+
+
+
+