From 27efe36a8f7a090e8fe16a2204958bd875d7bfbc Mon Sep 17 00:00:00 2001 From: gyboth Date: Sun, 27 Mar 2005 17:59:57 +0000 Subject: [PATCH] User management. Preview. --- bygfoot.glade | 107 +++++++++-- bygfoot_misc.glade | 108 +++++------ bygfoot_misc2.glade | 308 ++++++++++++++++++++++++++++++++ bygfoot_options.glade | 129 ++++++++++--- src/Makefile.am | 12 +- src/bygfoot.h | 5 +- src/callback_func.c | 79 +++++--- src/callback_func.h | 6 + src/callbacks.c | 249 ++++++++++++++------------ src/callbacks.h | 86 ++++----- src/enums.h | 4 + src/fixture.c | 68 ++++--- src/fixture.h | 3 + src/game.c | 6 +- src/interface.c | 141 ++++++++++++--- src/interface.h | 1 + src/league.c | 12 +- src/league.h | 3 + src/live_game.c | 14 +- src/main.c | 14 +- src/misc2_callback_func.c | 30 +++- src/misc2_callback_func.h | 3 + src/misc2_callbacks.c | 83 ++++++++- src/misc2_callbacks.h | 26 +++ src/misc2_interface.c | 164 +++++++++++++++++ src/misc2_interface.h | 1 + src/misc_callback_func.c | 19 +- src/misc_callbacks.c | 44 ----- src/misc_callbacks.h | 22 --- src/misc_interface.c | 71 +++----- src/misc_interface.h | 1 - src/options_callbacks.c | 12 ++ src/options_callbacks.h | 4 + src/options_interface.c | 59 +++++- src/table.c | 8 +- src/team.c | 8 +- src/transfer.c | 33 +++- src/transfer.h | 3 + src/treeview.c | 211 +++++++++++++++++++--- src/treeview.h | 27 ++- src/treeview_cell.c | 6 + src/user.c | 13 +- src/user_struct.h | 2 +- src/window.c | 43 +++-- src/window.h | 5 +- support_files/bygfoot_constants | 7 + 46 files changed, 1697 insertions(+), 563 deletions(-) diff --git a/bygfoot.glade b/bygfoot.glade index 9a9744eb..d34f6113 100644 --- a/bygfoot.glade +++ b/bygfoot.glade @@ -110,7 +110,7 @@ - + True gtk-preferences 1 @@ -248,7 +248,7 @@ True All Out Defend True - False + True @@ -258,7 +258,7 @@ True Defend True - False + True menu_all_out_defend @@ -269,7 +269,7 @@ True Balanced True - False + True menu_all_out_defend @@ -280,7 +280,7 @@ True Attack True - False + True menu_all_out_defend @@ -315,7 +315,7 @@ True Best True - False + True @@ -325,7 +325,7 @@ True Good True - False + True menu_scout_best @@ -336,7 +336,7 @@ True Average True - False + True menu_scout_best @@ -371,7 +371,7 @@ True Best True - False + True @@ -381,7 +381,7 @@ True Good True - False + True menu_physio_best @@ -392,7 +392,7 @@ True Average True - False + True menu_physio_best @@ -427,7 +427,7 @@ True On True - False + True @@ -437,7 +437,7 @@ True Off True - False + True menu_boost_on @@ -548,6 +548,21 @@ + + + + True + + + + + + True + Browse players + True + + + @@ -596,7 +611,7 @@ - + True gtk-go-forward 1 @@ -618,7 +633,7 @@ - + True gtk-go-back 1 @@ -640,7 +655,7 @@ - + True gtk-justify-fill 1 @@ -899,11 +914,10 @@ 2 True - Show my last games and a preview of my next games (P or F1) + Show my last games and a preview of my next games (F1) True GTK_RELIEF_NORMAL - @@ -1822,4 +1836,61 @@ + + + + + True + Show info + True + + + + + + + True + Put on transfer list + True + + + + + + + True + Remove from transfer list + True + + + + + + + True + Offer new contract + True + + + + + + + True + Fire + True + + + + + + + True + Shoots penalties + True + + + + + diff --git a/bygfoot_misc.glade b/bygfoot_misc.glade index 92866c16..c454dab6 100644 --- a/bygfoot_misc.glade +++ b/bygfoot_misc.glade @@ -6,11 +6,11 @@ 6 True - Select team and country + GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER False - 500 + 550 600 True False @@ -23,27 +23,66 @@ 0 - - 6 + True True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT + 200 - - 2 + True True - True - True - True - True - True - + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + Click on a player to remove him + True + True + False + False + True + + + + + True + False + + + + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + 2 + True + True + True + True + True + True + True + + + + + + True + True + @@ -1431,43 +1470,6 @@ - - True - Players - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - 250 - 200 - True - False - - - - - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - Click on a player to remove him - True - True - False - False - True - - - - - - - 5 True diff --git a/bygfoot_misc2.glade b/bygfoot_misc2.glade index 438b4b68..e511dc3a 100644 --- a/bygfoot_misc2.glade +++ b/bygfoot_misc2.glade @@ -1432,4 +1432,312 @@ + + 5 + True + window1 + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER + False + 600 + 550 + True + False + + + + True + False + 5 + + + + True + False + 0 + + + + True + True + 200 + + + + True + False + 0 + + + + True + Users -- click to remove + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + True + GTK_POLICY_ALWAYS + GTK_POLICY_ALWAYS + GTK_SHADOW_NONE + GTK_CORNER_TOP_LEFT + + + + True + GTK_SHADOW_IN + + + + True + True + True + False + False + True + + + + + + + + 0 + True + True + + + + + True + False + + + + + + True + False + 0 + + + + True + Available teams + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + True + GTK_POLICY_ALWAYS + GTK_POLICY_ALWAYS + GTK_SHADOW_NONE + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + + + + + + 0 + True + True + + + + + True + True + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + True + False + 5 + + + + True + True + True + True + 0 + + True + * + False + + + + 0 + True + True + + + + + + True + True + GTK_RELIEF_NORMAL + + + + + True + 0.5 + 0.5 + 0 + 0 + + + + True + False + 2 + + + + True + gtk-add + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + Add user + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + + + + 0 + False + False + + + + + 0 + False + False + + + + + + 1 + 10 + True + + + 0 + False + False + + + + + + True + True + gtk-close + True + GTK_RELIEF_NORMAL + + + + 0 + False + False + + + + + + diff --git a/bygfoot_options.glade b/bygfoot_options.glade index 381950ee..de71a737 100644 --- a/bygfoot_options.glade +++ b/bygfoot_options.glade @@ -350,28 +350,6 @@ - - - True - File containing settings which determine a lot of aspects of the game behaviour. DON'T CHANGE THIS UNLESS YOU REALLY KNOW WHAT YOU ARE DOING. - True - True - True - 0 - - True - * - False - - - 1 - 2 - 3 - 4 - - - - True @@ -465,6 +443,113 @@ + + + + True + False + 0 + + + + True + File containing settings which determine a lot of aspects of the game behaviour. DON'T CHANGE THIS UNLESS YOU REALLY KNOW WHAT YOU ARE DOING. + True + True + True + 0 + + True + * + False + + + 0 + True + True + + + + + + True + Reload the constants file + True + GTK_RELIEF_NORMAL + + + + + True + 0.5 + 0.5 + 0 + 0 + + + + True + False + 2 + + + + True + gtk-refresh + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + Reload + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + + + + 0 + False + False + + + + + 1 + 2 + 3 + 4 + fill + fill + + 0 diff --git a/src/Makefile.am b/src/Makefile.am index 46d15012..21fb4966 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,7 +10,7 @@ bin_PROGRAMS = bygfoot bygfoot_SOURCES = \ callback_func.c callback_func.h callbacks.h cup.h finance.h fixture.h game_gui.h league.h live_game.h maths.h misc.h option.h player.h start_end.h team.h transfer.h treeview.h user.h window.h \ - callbacks.c callbacks.h callback_func.h game_gui.h main.h option.h team.h transfer.h treeview.h user.h window.h \ + callbacks.c callbacks.h callback_func.h game_gui.h main.h option.h player.h team.h transfer.h treeview.h user.h window.h \ cup.c cup.h free.h main.h maths.h misc.h team.h variables.h xml_league.h \ file.c file.h free.h main.h misc.h option.h support.h variables.h \ finance.c callbacks.h finance.h game_gui.h maths.h option.h player.h team.h user.h \ @@ -29,22 +29,22 @@ bygfoot_SOURCES = \ misc_callbacks.c free.h misc_callback_func.h misc_callbacks.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_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 support.h transfer.h user.h window.h \ - misc2_callback_func.c 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 \ + 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 \ misc2_interface.c misc2_interface.h misc2_callbacks.h support.h \ option.c option.h variables.h \ option_gui.c file.h option_gui.h option.h support.h user.h variables.h \ - options_callbacks.c options_callbacks.h option_gui.h \ + options_callbacks.c file.h options_callbacks.h options_interface.h option_gui.h support.h variables.h window.h \ options_interface.c options_interface.h options_callbacks.h support.h \ player.c cup.h free.h game_gui.h league.h maths.h misc.h option.h player.h team.h user.h \ start_end.c cup.h file.h finance.h fixture.h game_gui.h gui.h league.h live_game.h main.h maths.h start_end.h table.h team.h transfer.h user.h variables.h xml_name.h \ support.c support.h \ table.c cup.h league.h table.h variables.h \ team.c cup.h fixture.h game.h game_gui.h league.h maths.h misc.h option.h player.h team.h transfer.h user.h \ - transfer.c finance.h free.h maths.h option.h player.h team.h transfer.h user.h \ + transfer.c finance.h free.h game_gui.h maths.h option.h player.h support.h team.h transfer.h treeview.h user.h \ treeview.c cup.h file.h finance.h fixture.h free.h game.h league.h live_game.h maths.h misc.h player.h option.h support.h team.h transfer.h treeview.h treeview_cell.h user.h \ treeview_cell.c misc.h option.h player.h team.h treeview.h treeview_cell.h user.h variables.h \ - user.c fixture.h free.h game_gui.h maths.h misc.h option.h player.h transfer.h user.h window.h \ + user.c fixture.h free.h game_gui.h maths.h misc.h option.h player.h team.h transfer.h user.h window.h \ window.c file.h finance.h free.h game_gui.h gui.h interface.h misc_interface.h misc2_interface.h option.h support.h user.h window.h \ xml_cup.c cup.h file.h misc.h xml_cup.h \ xml_country.c file.h free.h misc.h variables.h xml_cup.h xml_country.h xml_league.h \ diff --git a/src/bygfoot.h b/src/bygfoot.h index 0d3deb54..5a980392 100644 --- a/src/bygfoot.h +++ b/src/bygfoot.h @@ -87,7 +87,6 @@ typedef struct { GtkWidget *main, *startup, - *startup_users, *live, *warning, *progress, @@ -97,7 +96,9 @@ typedef struct *yesno, *options, *font_sel, - *contract; + *contract, + *menu_player, + *user_management; } Windows; /** A struct representing an option or a constant. */ diff --git a/src/callback_func.c b/src/callback_func.c index 5ff33ff3..d6c6fbc4 100644 --- a/src/callback_func.c +++ b/src/callback_func.c @@ -70,8 +70,6 @@ callback_show_next_live_game(void) void callback_player_clicked(gint idx, GdkEventButton *event) { - gchar buf[SMALL]; - /* Only accept single-clicks right now. */ if(event->type != GDK_BUTTON_PRESS) return; @@ -100,29 +98,20 @@ callback_player_clicked(gint idx, GdkEventButton *event) selected_row[0] = -1; treeview_show_user_player_list(); - treeview_show_next_opponent(); + if(stat0 == STATUS_MAIN) + treeview_show_next_opponent(); } else if(event->button == 3) { if(stat0 == STATUS_SHOW_TRANSFER_LIST) { - selected_row[0] = -1; - - if(!query_transfer_player_is_on_list(player_of(current_user.tm, idx))) - { - transfer_add_player(player_of(current_user.tm, idx), - (gint)rint(((gfloat)const_int("int_transfer_time_lower") + - (gfloat)const_int("int_transfer_time_upper")) / 2)); - sprintf(buf, _("%s has been added to the transfer list for %d weeks."), - player_of(current_user.tm, idx)->name->str, - (gint)rint(((gfloat)const_int("int_transfer_time_lower") + - (gfloat)const_int("int_transfer_time_upper")) / 2)); - game_gui_print_message(buf); - } - else - transfer_remove_player_ptr(player_of(current_user.tm, idx)); - - treeview_show_transfer_list(GTK_TREE_VIEW(lookup_widget(window.main, "treeview_right"))); + selected_row[0] = -1; + transfer_add_remove_user_player(player_of(current_user.tm, idx)); + } + else + { + window_show_menu_player((GdkEvent*)event); + selected_row[0] = idx; } } } @@ -350,9 +339,7 @@ callback_show_team(gint type) else stat2 = league_cup_get_previous_clid(stat2); - statp = (gpointer)(stat2 < ID_CUP_START) ? - league_from_clid(stat2)->teams : - cup_from_clid(stat2)->teams; + statp = (gpointer)league_cup_get_teams(stat2); stat1 = 0; tm = &g_array_index((GArray*)statp, Team, stat1); @@ -360,12 +347,52 @@ callback_show_team(gint type) stat0 = STATUS_BROWSE_TEAMS; stat2 = tm->clid; - statp = (gpointer)(tm->clid < ID_CUP_START) ? - league_from_clid(tm->clid)->teams : - cup_from_clid(tm->clid)->teams; + statp = (gpointer)league_cup_get_teams(tm->clid); if(tm != current_user.tm) treeview_show_player_list_team(treeview_right, tm, current_user.scout % 10); else callback_show_team((type == SHOW_PREVIOUS) ? SHOW_PREVIOUS : SHOW_NEXT); } + +/** Show a sortable list of all players in a league or cup. */ +void +callback_show_player_list(gint type) +{ + GArray *teams = NULL; + + switch(type) + { + case SHOW_CURRENT: + stat1 = current_user.tm->clid; + break; + case SHOW_NEXT_LEAGUE: + stat1 = league_cup_get_next_clid(stat1); + break; + case SHOW_PREVIOUS_LEAGUE: + stat1 = league_cup_get_previous_clid(stat1); + break; + } + + teams = league_cup_get_teams(stat1); + + treeview_show_all_players(teams); +} + +/** Fire a player. */ +void +callback_fire_player(gint idx) +{ + gchar buf[SMALL], buf2[SMALL]; + Player *pl = player_of(current_user.tm, idx); + + stat0 = STATUS_FIRE_PLAYER; + stat1 = idx; + stat2 = (gint)rint(pl->wage * const_float("float_player_fire_wage_factor") * pl->contract); + + misc_print_grouped_int(stat2, buf2, FALSE); + + sprintf(buf, _("You want to fire %s. Since his contract expires in %.1f years, he demands a compensation of %s. Do you accept?"), pl->name->str, pl->contract, buf2); + + window_show_yesno(buf, FALSE); +} diff --git a/src/callback_func.h b/src/callback_func.h index 506f99c0..d62da031 100644 --- a/src/callback_func.h +++ b/src/callback_func.h @@ -33,4 +33,10 @@ callback_offer_new_contract(gint idx); void callback_show_team(gint type); +void +callback_show_player_list(gint type); + +void +callback_fire_player(gint idx); + #endif diff --git a/src/callbacks.c b/src/callbacks.c index f78c69d5..4047d5e3 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -3,6 +3,7 @@ #include "game_gui.h" #include "main.h" #include "option.h" +#include "player.h" #include "team.h" #include "transfer.h" #include "treeview.h" @@ -106,7 +107,8 @@ void on_button_preview_clicked (GtkButton *button, gpointer user_data) { - + stat0 = STATUS_SHOW_PREVIEW; + treeview_show_preview(); } @@ -133,8 +135,8 @@ on_player_list1_button_press_event (GtkWidget *widget, { gint idx = -1; - treeview_select_row(GTK_TREE_VIEW(widget), event); - idx = treeview_get_index(GTK_TREE_VIEW(widget), 0); + if(treeview_select_row(GTK_TREE_VIEW(widget), event)) + idx = treeview_get_index(GTK_TREE_VIEW(widget), 0); if(idx < 0 || idx - 1 == selected_row[0]) { @@ -194,6 +196,9 @@ on_button_cl_back_clicked (GtkButton *button, case STATUS_BROWSE_TEAMS: callback_show_team(SHOW_PREVIOUS_LEAGUE); break; + case STATUS_SHOW_PLAYER_LIST: + callback_show_player_list(SHOW_PREVIOUS_LEAGUE); + break; } } @@ -213,6 +218,9 @@ on_button_cl_forward_clicked (GtkButton *button, case STATUS_BROWSE_TEAMS: callback_show_team(SHOW_NEXT_LEAGUE); break; + case STATUS_SHOW_PLAYER_LIST: + callback_show_player_list(SHOW_NEXT_LEAGUE); + break; } } @@ -269,7 +277,15 @@ void on_menu_put_on_transfer_list_activate (GtkMenuItem *menuitem, gpointer user_data) { - + if(selected_row[0] == -1) + game_gui_print_message(_("You haven't selected a player.")); + else if(query_transfer_player_is_on_list(player_of(current_user.tm, selected_row[0]))) + game_gui_print_message(_("The player is already on the list.")); + else + { + transfer_add_remove_user_player(player_of(current_user.tm, selected_row[0])); + selected_row[0] = -1; + } } @@ -277,7 +293,15 @@ void on_menu_remove_from_transfer_list_activate (GtkMenuItem *menuitem, gpointer user_data) { - + if(selected_row[0] == -1) + game_gui_print_message(_("You haven't selected a player.")); + else if(!query_transfer_player_is_on_list(player_of(current_user.tm, selected_row[0]))) + game_gui_print_message(_("The player is not on the list.")); + else + { + transfer_add_remove_user_player(player_of(current_user.tm, selected_row[0])); + selected_row[0] = -1; + } } @@ -285,7 +309,13 @@ void on_menu_fire_activate (GtkMenuItem *menuitem, gpointer user_data) { - + if(selected_row[0] == -1) + game_gui_print_message(_("You haven't selected a player.")); + else + { + callback_fire_player(selected_row[0]); + selected_row[0] = -1; + } } @@ -293,114 +323,30 @@ void on_menu_shoots_penalties_activate (GtkMenuItem *menuitem, gpointer user_data) { + gchar buf[SMALL]; + if(selected_row[0] == -1) + game_gui_print_message(_("You haven't selected a player.")); + else if(player_of(current_user.tm, selected_row[0])->id == + opt_user_int("int_opt_user_penalty_shooter")) + { + opt_user_set_int("int_opt_user_penalty_shooter", -1); + game_gui_print_message(_("Penalty/free kick shooter deselected.")); + treeview_show_user_player_list(); + } + else + { + sprintf(buf, "%s will shoot penalties and free kicks when he plays.", + player_of(current_user.tm, selected_row[0])->name->str); + opt_user_set_int("int_opt_user_penalty_shooter", + player_of(current_user.tm, selected_row[0])->id); + game_gui_print_message(buf); + treeview_show_user_player_list(); + } + + selected_row[0] = -1; } - -void -on_menu_all_out_defend_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_defend_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_balanced_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_attack_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_all_out_attack_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_scout_best_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_scout_good_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_scout_average_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_scout_bad_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_physio_best_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_physio_good_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_physio_average_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_menu_physio_bad_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - void on_menu_my_league_results_activate (GtkMenuItem *menuitem, gpointer user_data) @@ -430,8 +376,10 @@ on_treeview_right_button_press_event (GtkWidget *widget, { gint idx; - treeview_select_row(GTK_TREE_VIEW(widget), event); - idx = treeview_get_index(GTK_TREE_VIEW(widget), 0); + if(treeview_select_row(GTK_TREE_VIEW(widget), event)) + idx = treeview_get_index(GTK_TREE_VIEW(widget), 0); + else + return FALSE; switch(stat0) { @@ -517,7 +465,11 @@ void on_menu_manage_users_activate (GtkMenuItem *menuitem, gpointer user_data) { - + stat0 = STATUS_USER_MANAGEMENT; + window_create(WINDOW_USER_MANAGEMENT); + treeview_show_users(GTK_TREE_VIEW(lookup_widget(window.user_management, "treeview_user_management_users"))); + treeview_show_team_list(GTK_TREE_VIEW(lookup_widget(window.user_management, "treeview_user_management_teams")), + FALSE, FALSE); } @@ -562,7 +514,9 @@ on_eventbox_style_button_press_event (GtkWidget *widget, game_gui_write_meters(); game_gui_write_radio_items(); - treeview_show_next_opponent(); + + if(stat0 == STATUS_MAIN) + treeview_show_next_opponent(); return FALSE; } @@ -591,7 +545,9 @@ on_eventbox_boost_button_press_event (GtkWidget *widget, game_gui_write_meters(); game_gui_write_radio_items(); - treeview_show_next_opponent(); + + if(stat0 == STATUS_MAIN) + treeview_show_next_opponent(); return FALSE; } @@ -650,5 +606,66 @@ on_menu_offer_new_contract_activate (GtkMenuItem *menuitem, } callback_offer_new_contract(selected_row[0]); + selected_row[0] = -1; +} + + +void +on_player_menu_show_info_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + +} + + +void +on_player_menu_put_on_transfer_list_activate + (GtkMenuItem *menuitem, + gpointer user_data) +{ + on_menu_put_on_transfer_list_activate(NULL, NULL); +} + + +void +on_player_menu_remove_from_transfer_list_activate + (GtkMenuItem *menuitem, + gpointer user_data) +{ + on_menu_remove_from_transfer_list_activate(NULL, NULL); +} + + +void +on_player_menu_offer_new_contract_activate + (GtkMenuItem *menuitem, + gpointer user_data) +{ + on_menu_offer_new_contract_activate(NULL, NULL); +} + + +void +on_player_menu_fire_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + on_menu_fire_activate(NULL, NULL); +} + + +void +on_player_menu_shoots_penalties_activate + (GtkMenuItem *menuitem, + gpointer user_data) +{ + on_menu_shoots_penalties_activate(NULL, NULL); +} + +void +on_menu_browse_players_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + callback_show_player_list(SHOW_CURRENT); + stat0 = STATUS_SHOW_PLAYER_LIST; } diff --git a/src/callbacks.h b/src/callbacks.h index 34c04f96..1d2994f4 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -119,58 +119,6 @@ void on_menu_shoots_penalties_activate (GtkMenuItem *menuitem, gpointer user_data); -void -on_menu_all_out_defend_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_defend_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_balanced_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_attack_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_all_out_attack_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_scout_best_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_scout_good_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_scout_average_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_scout_bad_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_physio_best_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_physio_good_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_physio_average_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_menu_physio_bad_activate (GtkMenuItem *menuitem, - gpointer user_data); - void on_menu_my_league_results_activate (GtkMenuItem *menuitem, gpointer user_data); @@ -254,7 +202,6 @@ gboolean on_menu_check_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); -#endif void on_menu_live_game_activate (GtkMenuItem *menuitem, @@ -263,3 +210,36 @@ on_menu_live_game_activate (GtkMenuItem *menuitem, void on_menu_offer_new_contract_activate (GtkMenuItem *menuitem, gpointer user_data); + +void +on_player_menu_show_info_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_player_menu_put_on_transfer_list_activate + (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_player_menu_remove_from_transfer_list_activate + (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_player_menu_offer_new_contract_activate + (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_player_menu_fire_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_player_menu_shoots_penalties_activate + (GtkMenuItem *menuitem, + gpointer user_data); +#endif + +void +on_menu_browse_players_activate (GtkMenuItem *menuitem, + gpointer user_data); diff --git a/src/enums.h b/src/enums.h index 2dec1d97..c5a3a49d 100644 --- a/src/enums.h +++ b/src/enums.h @@ -68,6 +68,10 @@ enum Status0Value STATUS_CUSTOM_STRUCTURE, STATUS_SHOW_LEAGUE_RESULTS, STATUS_CONTRACT_OFFER, + STATUS_SHOW_PLAYER_LIST, + STATUS_FIRE_PLAYER, + STATUS_USER_MANAGEMENT, + STATUS_SHOW_PREVIEW, STATUS_END }; diff --git a/src/fixture.c b/src/fixture.c index 7d5044e5..77a10441 100644 --- a/src/fixture.c +++ b/src/fixture.c @@ -664,9 +664,7 @@ gboolean query_fixture_in_week_round(gint clid, gint week_number, gint week_round_number) { gint i; - GArray *fixtures = (clid < ID_CUP_START) ? - league_from_clid(clid)->fixtures : cup_from_clid(clid)->fixtures; - + GArray *fixtures = league_cup_get_fixtures(clid); for(i=0;ilen;i++) if(g_array_index(fixtures, Fixture, i).week_number == week_number && @@ -707,9 +705,7 @@ GPtrArray* fixture_get_week_round_list(gint clid, gint week_number, gint week_round_number) { gint i; - GArray *fixtures = (clid < ID_CUP_START) ? - league_from_clid(clid)->fixtures : - cup_from_clid(clid)->fixtures; + GArray *fixtures = league_cup_get_fixtures(clid); GPtrArray *fixtures_array = g_ptr_array_new(); for(i=0;ilen;i++) @@ -785,9 +781,7 @@ Fixture* fixture_get_next(gint clid, gint week_number, gint week_round_number) { gint i; - GArray *fixtures = (clid < ID_CUP_START) ? - league_from_clid(clid)->fixtures : - cup_from_clid(clid)->fixtures; + GArray *fixtures = league_cup_get_fixtures(clid); for(i=0;ilen;i++) if(g_array_index(fixtures, Fixture, i).week_number > week_number || @@ -807,9 +801,7 @@ Fixture* fixture_get_previous(gint clid, gint week_number, gint week_round_number) { gint i; - GArray *fixtures = (clid < ID_CUP_START) ? - league_from_clid(clid)->fixtures : - cup_from_clid(clid)->fixtures; + GArray *fixtures = league_cup_get_fixtures(clid); for(i=fixtures->len - 1;i>=0;i--) if(g_array_index(fixtures, Fixture, i).week_number < week_number || @@ -908,21 +900,55 @@ fixture_get_latest(const Team *tm) } if(query_is_in_international_cups(tm)) - for(i=0;ilen;i++) - { - for(j=0;jlen;j++) - if(g_array_index(cp(i).fixtures, Fixture, j).attendance == -1) - break; - else if(g_array_index(cp(i).fixtures, Fixture, j).teams[0] == tm || - g_array_index(cp(i).fixtures, Fixture, j).teams[1] == tm) - g_ptr_array_add(latest, &g_array_index(cp(i).fixtures, Fixture, j)); - } + for(i=0;ilen;i++) + { + for(j=0;jlen;j++) + if(g_array_index(cp(i).fixtures, Fixture, j).attendance == -1) + break; + else if(g_array_index(cp(i).fixtures, Fixture, j).teams[0] == tm || + g_array_index(cp(i).fixtures, Fixture, j).teams[1] == tm) + g_ptr_array_add(latest, &g_array_index(cp(i).fixtures, Fixture, j)); + } g_ptr_array_sort_with_data(latest, fixture_compare_func, GINT_TO_POINTER(FIXTURE_COMPARE_DATE)); return latest; } +/** Return an array with the next fixtures of the team. */ +GPtrArray* +fixture_get_coming(const Team *tm) +{ + gint i, j; + GPtrArray *coming = g_ptr_array_new(); + + for(i=0;ilen;i++) + if(lig(i).id == tm->clid) + { + for(j=lig(i).fixtures->len - 1; j >= 0; j--) + if(g_array_index(lig(i).fixtures, Fixture, j).attendance != -1) + break; + else if(g_array_index(lig(i).fixtures, Fixture, j).teams[0] == tm || + g_array_index(lig(i).fixtures, Fixture, j).teams[1] == tm) + g_ptr_array_add(coming, &g_array_index(lig(i).fixtures, Fixture, j)); + } + + if(query_is_in_international_cups(tm)) + for(i=0;ilen;i++) + { + for(j=cp(i).fixtures->len - 1; j >= 0; j--) + if(g_array_index(cp(i).fixtures, Fixture, j).attendance != -1) + break; + else if(g_array_index(cp(i).fixtures, Fixture, j).teams[0] == tm || + g_array_index(cp(i).fixtures, Fixture, j).teams[1] == tm) + g_ptr_array_add(coming, &g_array_index(cp(i).fixtures, Fixture, j)); + } + + g_ptr_array_sort_with_data(coming, fixture_compare_func, GINT_TO_POINTER(FIXTURE_COMPARE_DATE)); + + return coming; +} + /** Return a pointer array with all the matches featuring the two teams. */ GPtrArray* fixture_get_matches(const Team *tm1, const Team *tm2) diff --git a/src/fixture.h b/src/fixture.h index e04e9a75..505f2f45 100644 --- a/src/fixture.h +++ b/src/fixture.h @@ -106,4 +106,7 @@ fixture_get_matches(const Team *tm1, const Team *tm2); GPtrArray* fixture_get_league_matches(const Team *tm1, const Team *tm2); +GPtrArray* +fixture_get_coming(const Team *tm); + #endif diff --git a/src/game.c b/src/game.c index 49bf1fd6..0cf5ceb2 100644 --- a/src/game.c +++ b/src/game.c @@ -947,10 +947,10 @@ game_update_stats(gpointer live_game, gconstpointer live_game_unit) stats->values[unit->event.values[LIVE_GAME_EVENT_VALUE_TEAM]][LIVE_GAME_STAT_VALUE_REDS]++; game_update_stats_player(live_game, live_game_unit); } - else if(unit->event.type == LIVE_GAME_EVENT_GOAL && - live_game_unit_before(unit, -1)->event.type != LIVE_GAME_EVENT_PENALTY) + else if(unit->event.type == LIVE_GAME_EVENT_GOAL) { - stats->values[unit->event.values[LIVE_GAME_EVENT_VALUE_TEAM]][LIVE_GAME_STAT_VALUE_GOALS_REGULAR]++; + if(live_game_unit_before(unit, -1)->event.type != LIVE_GAME_EVENT_PENALTY) + stats->values[unit->event.values[LIVE_GAME_EVENT_VALUE_TEAM]][LIVE_GAME_STAT_VALUE_GOALS_REGULAR]++; game_update_stats_player(live_game, live_game_unit); } diff --git a/src/interface.c b/src/interface.c index d068f776..f61cdf69 100644 --- a/src/interface.c +++ b/src/interface.c @@ -44,7 +44,7 @@ create_main_window (void) GtkWidget *menu_options; GtkWidget *menu_options_menu; GtkWidget *menu_preferences; - GtkWidget *image258; + GtkWidget *image261; GtkWidget *trennlinie7; GtkWidget *menu_job_offers; GtkWidget *menu_live_game; @@ -97,17 +97,19 @@ create_main_window (void) GtkWidget *menu_offer_new_contract; GtkWidget *menu_fire; GtkWidget *menu_shoots_penalties; + GtkWidget *trennlinie10; + GtkWidget *menu_browse_players; GtkWidget *menu_user; GtkWidget *menu_user_menu; GtkWidget *menu_user_show_last_match; GtkWidget *menu_user_show_last_stats; GtkWidget *trennlinie9; GtkWidget *menu_next_user; - GtkWidget *image259; + GtkWidget *image262; GtkWidget *menu_previous_user; - GtkWidget *image260; + GtkWidget *image263; GtkWidget *menu_manage_users; - GtkWidget *image261; + GtkWidget *image264; GtkWidget *menu_finances_stadium; GtkWidget *menu_finances_stadium_menu; GtkWidget *menu_show_finances; @@ -261,9 +263,9 @@ create_main_window (void) GDK_p, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - image258 = gtk_image_new_from_stock ("gtk-preferences", GTK_ICON_SIZE_MENU); - gtk_widget_show (image258); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_preferences), image258); + image261 = gtk_image_new_from_stock ("gtk-preferences", GTK_ICON_SIZE_MENU); + gtk_widget_show (image261); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_preferences), image261); trennlinie7 = gtk_menu_item_new (); gtk_widget_show (trennlinie7); @@ -336,21 +338,25 @@ create_main_window (void) menu_all_out_defend_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_all_out_defend)); gtk_widget_show (menu_all_out_defend); gtk_container_add (GTK_CONTAINER (menu_playing_style_menu), menu_all_out_defend); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_all_out_defend), TRUE); menu_defend = gtk_radio_menu_item_new_with_mnemonic (menu_all_out_defend_group, _("Defend")); menu_all_out_defend_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_defend)); gtk_widget_show (menu_defend); gtk_container_add (GTK_CONTAINER (menu_playing_style_menu), menu_defend); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_defend), TRUE); menu_balanced = gtk_radio_menu_item_new_with_mnemonic (menu_all_out_defend_group, _("Balanced")); menu_all_out_defend_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_balanced)); gtk_widget_show (menu_balanced); gtk_container_add (GTK_CONTAINER (menu_playing_style_menu), menu_balanced); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_balanced), TRUE); menu_attack = gtk_radio_menu_item_new_with_mnemonic (menu_all_out_defend_group, _("Attack")); menu_all_out_defend_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_attack)); gtk_widget_show (menu_attack); gtk_container_add (GTK_CONTAINER (menu_playing_style_menu), menu_attack); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_attack), TRUE); menu_all_out_attack = gtk_radio_menu_item_new_with_mnemonic (menu_all_out_defend_group, _("All Out Attack")); menu_all_out_defend_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_all_out_attack)); @@ -369,16 +375,19 @@ create_main_window (void) menu_scout_best_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_scout_best)); gtk_widget_show (menu_scout_best); gtk_container_add (GTK_CONTAINER (menu_scout_menu), menu_scout_best); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_scout_best), TRUE); menu_scout_good = gtk_radio_menu_item_new_with_mnemonic (menu_scout_best_group, _("Good")); menu_scout_best_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_scout_good)); gtk_widget_show (menu_scout_good); gtk_container_add (GTK_CONTAINER (menu_scout_menu), menu_scout_good); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_scout_good), TRUE); menu_scout_average = gtk_radio_menu_item_new_with_mnemonic (menu_scout_best_group, _("Average")); menu_scout_best_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_scout_average)); gtk_widget_show (menu_scout_average); gtk_container_add (GTK_CONTAINER (menu_scout_menu), menu_scout_average); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_scout_average), TRUE); menu_scout_bad = gtk_radio_menu_item_new_with_mnemonic (menu_scout_best_group, _("Bad")); menu_scout_best_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_scout_bad)); @@ -397,16 +406,19 @@ create_main_window (void) menu_physio_best_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_physio_best)); gtk_widget_show (menu_physio_best); gtk_container_add (GTK_CONTAINER (menu_physio_menu), menu_physio_best); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_physio_best), TRUE); menu_physio_good = gtk_radio_menu_item_new_with_mnemonic (menu_physio_best_group, _("Good")); menu_physio_best_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_physio_good)); gtk_widget_show (menu_physio_good); gtk_container_add (GTK_CONTAINER (menu_physio_menu), menu_physio_good); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_physio_good), TRUE); menu_physio_average = gtk_radio_menu_item_new_with_mnemonic (menu_physio_best_group, _("Average")); menu_physio_best_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_physio_average)); gtk_widget_show (menu_physio_average); gtk_container_add (GTK_CONTAINER (menu_physio_menu), menu_physio_average); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_physio_average), TRUE); menu_physio_bad = gtk_radio_menu_item_new_with_mnemonic (menu_physio_best_group, _("Bad")); menu_physio_best_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_physio_bad)); @@ -425,11 +437,13 @@ create_main_window (void) menu_boost_on_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_boost_on)); gtk_widget_show (menu_boost_on); gtk_container_add (GTK_CONTAINER (menu_boost_menu), menu_boost_on); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_boost_on), TRUE); menu_boost_off = gtk_radio_menu_item_new_with_mnemonic (menu_boost_on_group, _("Off")); menu_boost_on_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_boost_off)); gtk_widget_show (menu_boost_off); gtk_container_add (GTK_CONTAINER (menu_boost_menu), menu_boost_off); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_boost_off), TRUE); menu_boost_anti = gtk_radio_menu_item_new_with_mnemonic (menu_boost_on_group, _("Anti")); menu_boost_on_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_boost_anti)); @@ -481,6 +495,15 @@ create_main_window (void) gtk_widget_show (menu_shoots_penalties); gtk_container_add (GTK_CONTAINER (menu_player_menu), menu_shoots_penalties); + trennlinie10 = gtk_menu_item_new (); + gtk_widget_show (trennlinie10); + gtk_container_add (GTK_CONTAINER (menu_player_menu), trennlinie10); + gtk_widget_set_sensitive (trennlinie10, FALSE); + + menu_browse_players = gtk_menu_item_new_with_mnemonic (_("Browse players")); + gtk_widget_show (menu_browse_players); + gtk_container_add (GTK_CONTAINER (menu_player_menu), menu_browse_players); + menu_user = gtk_menu_item_new_with_mnemonic (_("User")); gtk_widget_show (menu_user); gtk_container_add (GTK_CONTAINER (menubar1), menu_user); @@ -511,9 +534,9 @@ create_main_window (void) GDK_F9, 0, GTK_ACCEL_VISIBLE); - image259 = gtk_image_new_from_stock ("gtk-go-forward", GTK_ICON_SIZE_MENU); - gtk_widget_show (image259); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_next_user), image259); + image262 = gtk_image_new_from_stock ("gtk-go-forward", GTK_ICON_SIZE_MENU); + gtk_widget_show (image262); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_next_user), image262); menu_previous_user = gtk_image_menu_item_new_with_mnemonic (_("Previous user")); gtk_widget_show (menu_previous_user); @@ -522,9 +545,9 @@ create_main_window (void) GDK_F8, 0, GTK_ACCEL_VISIBLE); - image260 = gtk_image_new_from_stock ("gtk-go-back", GTK_ICON_SIZE_MENU); - gtk_widget_show (image260); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_previous_user), image260); + image263 = gtk_image_new_from_stock ("gtk-go-back", GTK_ICON_SIZE_MENU); + gtk_widget_show (image263); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_previous_user), image263); menu_manage_users = gtk_image_menu_item_new_with_mnemonic (_("Manage users")); gtk_widget_show (menu_manage_users); @@ -533,9 +556,9 @@ create_main_window (void) GDK_F12, 0, GTK_ACCEL_VISIBLE); - image261 = gtk_image_new_from_stock ("gtk-justify-fill", GTK_ICON_SIZE_MENU); - gtk_widget_show (image261); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_manage_users), image261); + image264 = gtk_image_new_from_stock ("gtk-justify-fill", GTK_ICON_SIZE_MENU); + gtk_widget_show (image264); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_manage_users), image264); menu_finances_stadium = gtk_menu_item_new_with_mnemonic (_("FinStad")); gtk_widget_show (menu_finances_stadium); @@ -649,10 +672,7 @@ create_main_window (void) gtk_widget_show (button_preview); gtk_box_pack_start (GTK_BOX (hbox1), button_preview, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (button_preview), 2); - gtk_tooltips_set_tip (tooltips, button_preview, _("Show my last games and a preview of my next games (P or F1)"), NULL); - gtk_widget_add_accelerator (button_preview, "clicked", accel_group, - GDK_p, 0, - GTK_ACCEL_VISIBLE); + gtk_tooltips_set_tip (tooltips, button_preview, _("Show my last games and a preview of my next games (F1)"), NULL); gtk_widget_add_accelerator (button_preview, "clicked", accel_group, GDK_F1, 0, GTK_ACCEL_VISIBLE); @@ -1088,6 +1108,9 @@ create_main_window (void) g_signal_connect ((gpointer) menu_shoots_penalties, "activate", G_CALLBACK (on_menu_shoots_penalties_activate), NULL); + g_signal_connect ((gpointer) menu_browse_players, "activate", + G_CALLBACK (on_menu_browse_players_activate), + NULL); g_signal_connect ((gpointer) menu_user_show_last_match, "activate", G_CALLBACK (on_menu_user_show_last_match_activate), NULL); @@ -1179,7 +1202,7 @@ create_main_window (void) GLADE_HOOKUP_OBJECT (main_window, menu_options, "menu_options"); GLADE_HOOKUP_OBJECT (main_window, menu_options_menu, "menu_options_menu"); GLADE_HOOKUP_OBJECT (main_window, menu_preferences, "menu_preferences"); - GLADE_HOOKUP_OBJECT (main_window, image258, "image258"); + GLADE_HOOKUP_OBJECT (main_window, image261, "image261"); GLADE_HOOKUP_OBJECT (main_window, trennlinie7, "trennlinie7"); GLADE_HOOKUP_OBJECT (main_window, menu_job_offers, "menu_job_offers"); GLADE_HOOKUP_OBJECT (main_window, menu_live_game, "menu_live_game"); @@ -1228,17 +1251,19 @@ create_main_window (void) GLADE_HOOKUP_OBJECT (main_window, menu_offer_new_contract, "menu_offer_new_contract"); GLADE_HOOKUP_OBJECT (main_window, menu_fire, "menu_fire"); GLADE_HOOKUP_OBJECT (main_window, menu_shoots_penalties, "menu_shoots_penalties"); + GLADE_HOOKUP_OBJECT (main_window, trennlinie10, "trennlinie10"); + GLADE_HOOKUP_OBJECT (main_window, menu_browse_players, "menu_browse_players"); GLADE_HOOKUP_OBJECT (main_window, menu_user, "menu_user"); GLADE_HOOKUP_OBJECT (main_window, menu_user_menu, "menu_user_menu"); GLADE_HOOKUP_OBJECT (main_window, menu_user_show_last_match, "menu_user_show_last_match"); GLADE_HOOKUP_OBJECT (main_window, menu_user_show_last_stats, "menu_user_show_last_stats"); GLADE_HOOKUP_OBJECT (main_window, trennlinie9, "trennlinie9"); GLADE_HOOKUP_OBJECT (main_window, menu_next_user, "menu_next_user"); - GLADE_HOOKUP_OBJECT (main_window, image259, "image259"); + GLADE_HOOKUP_OBJECT (main_window, image262, "image262"); GLADE_HOOKUP_OBJECT (main_window, menu_previous_user, "menu_previous_user"); - GLADE_HOOKUP_OBJECT (main_window, image260, "image260"); + GLADE_HOOKUP_OBJECT (main_window, image263, "image263"); GLADE_HOOKUP_OBJECT (main_window, menu_manage_users, "menu_manage_users"); - GLADE_HOOKUP_OBJECT (main_window, image261, "image261"); + GLADE_HOOKUP_OBJECT (main_window, image264, "image264"); GLADE_HOOKUP_OBJECT (main_window, menu_finances_stadium, "menu_finances_stadium"); GLADE_HOOKUP_OBJECT (main_window, menu_finances_stadium_menu, "menu_finances_stadium_menu"); GLADE_HOOKUP_OBJECT (main_window, menu_show_finances, "menu_show_finances"); @@ -1328,3 +1353,71 @@ create_main_window (void) return main_window; } +GtkWidget* +create_menu_player (void) +{ + GtkWidget *menu_player; + GtkWidget *player_menu_show_info; + GtkWidget *player_menu_put_on_transfer_list; + GtkWidget *player_menu_remove_from_transfer_list; + GtkWidget *player_menu_offer_new_contract; + GtkWidget *player_menu_fire; + GtkWidget *player_menu_shoots_penalties; + + menu_player = gtk_menu_new (); + + player_menu_show_info = gtk_menu_item_new_with_mnemonic (_("Show info")); + gtk_widget_show (player_menu_show_info); + gtk_container_add (GTK_CONTAINER (menu_player), player_menu_show_info); + + player_menu_put_on_transfer_list = gtk_menu_item_new_with_mnemonic (_("Put on transfer list")); + gtk_widget_show (player_menu_put_on_transfer_list); + gtk_container_add (GTK_CONTAINER (menu_player), player_menu_put_on_transfer_list); + + player_menu_remove_from_transfer_list = gtk_menu_item_new_with_mnemonic (_("Remove from transfer list")); + gtk_widget_show (player_menu_remove_from_transfer_list); + gtk_container_add (GTK_CONTAINER (menu_player), player_menu_remove_from_transfer_list); + + player_menu_offer_new_contract = gtk_menu_item_new_with_mnemonic (_("Offer new contract")); + gtk_widget_show (player_menu_offer_new_contract); + gtk_container_add (GTK_CONTAINER (menu_player), player_menu_offer_new_contract); + + player_menu_fire = gtk_menu_item_new_with_mnemonic (_("Fire")); + gtk_widget_show (player_menu_fire); + gtk_container_add (GTK_CONTAINER (menu_player), player_menu_fire); + + player_menu_shoots_penalties = gtk_menu_item_new_with_mnemonic (_("Shoots penalties")); + gtk_widget_show (player_menu_shoots_penalties); + gtk_container_add (GTK_CONTAINER (menu_player), player_menu_shoots_penalties); + + g_signal_connect ((gpointer) player_menu_show_info, "activate", + G_CALLBACK (on_player_menu_show_info_activate), + NULL); + g_signal_connect ((gpointer) player_menu_put_on_transfer_list, "activate", + G_CALLBACK (on_player_menu_put_on_transfer_list_activate), + NULL); + g_signal_connect ((gpointer) player_menu_remove_from_transfer_list, "activate", + G_CALLBACK (on_player_menu_remove_from_transfer_list_activate), + NULL); + g_signal_connect ((gpointer) player_menu_offer_new_contract, "activate", + G_CALLBACK (on_player_menu_offer_new_contract_activate), + NULL); + g_signal_connect ((gpointer) player_menu_fire, "activate", + G_CALLBACK (on_player_menu_fire_activate), + NULL); + g_signal_connect ((gpointer) player_menu_shoots_penalties, "activate", + G_CALLBACK (on_player_menu_shoots_penalties_activate), + NULL); + + /* Store pointers to all widgets, for use by lookup_widget(). */ + GLADE_HOOKUP_OBJECT_NO_REF (menu_player, menu_player, "menu_player"); + GLADE_HOOKUP_OBJECT (menu_player, player_menu_show_info, "player_menu_show_info"); + GLADE_HOOKUP_OBJECT (menu_player, player_menu_put_on_transfer_list, "player_menu_put_on_transfer_list"); + GLADE_HOOKUP_OBJECT (menu_player, player_menu_remove_from_transfer_list, "player_menu_remove_from_transfer_list"); + GLADE_HOOKUP_OBJECT (menu_player, player_menu_offer_new_contract, "player_menu_offer_new_contract"); + GLADE_HOOKUP_OBJECT (menu_player, player_menu_fire, "player_menu_fire"); + GLADE_HOOKUP_OBJECT (menu_player, player_menu_shoots_penalties, "player_menu_shoots_penalties"); + + return menu_player; +} + diff --git a/src/interface.h b/src/interface.h index 11c79152..2a95caca 100644 --- a/src/interface.h +++ b/src/interface.h @@ -3,3 +3,4 @@ */ GtkWidget* create_main_window (void); +GtkWidget* create_menu_player (void); diff --git a/src/league.c b/src/league.c index dcd28c0f..e836afb2 100644 --- a/src/league.c +++ b/src/league.c @@ -210,9 +210,7 @@ Fixture* league_cup_get_next_fixture(gint clid, gint week_number, gint week_round_number) { gint i; - GArray *fixtures = (clid < ID_CUP_START) ? - league_from_clid(clid)->fixtures : - cup_from_clid(clid)->fixtures; + GArray *fixtures = league_cup_get_fixtures(clid); for(i=0;ilen;i++) if(g_array_index(fixtures, Fixture, i).week_number > week_number || @@ -230,9 +228,7 @@ Fixture* league_cup_get_previous_fixture(gint clid, gint week_number, gint week_round_number) { gint i; - GArray *fixtures = (clid < ID_CUP_START) ? - league_from_clid(clid)->fixtures : - cup_from_clid(clid)->fixtures; + GArray *fixtures = league_cup_get_fixtures(clid); for(i=fixtures->len - 1;i>=0;i--) if(g_array_index(fixtures, Fixture, i).week_number < week_number || @@ -266,9 +262,7 @@ league_cup_average_capacity(gint clid) { gint i; gfloat sum = 0; - const GArray *teams = (clid < ID_CUP_START) ? - league_from_clid(clid)->teams : - cup_from_clid(clid)->teams; + const GArray *teams = league_cup_get_teams(clid); for(i=0;ilen;i++) if(team_is_user(&g_array_index(teams, Team, i)) == -1) diff --git a/src/league.h b/src/league.h index 7e4079f6..c8b2b87b 100644 --- a/src/league.h +++ b/src/league.h @@ -5,6 +5,9 @@ #include "league_struct.h" #include "fixture_struct.h" +#define league_cup_get_teams(clid) (clid < ID_CUP_START) ? league_from_clid(clid)->teams : cup_from_clid(clid)->teams +#define league_cup_get_fixtures(clid) (clid < ID_CUP_START) ? league_from_clid(clid)->fixtures : cup_from_clid(clid)->fixtures + League league_new(void); diff --git a/src/live_game.c b/src/live_game.c index 72ab5e63..107a7e70 100644 --- a/src/live_game.c +++ b/src/live_game.c @@ -568,7 +568,9 @@ live_game_event_penalty(void) if(team_is_user(tm[last_unit.possession]) != -1 && option_int("int_opt_user_penalty_shooter", - &usr(team_is_user(tm[last_unit.possession])).options) != -1) + &usr(team_is_user(tm[last_unit.possession])).options) != -1 && + player_of_id(tm[last_unit.possession], option_int("int_opt_user_penalty_shooter", + &usr(team_is_user(tm[last_unit.possession])).options)) != NULL) last_unit.event.values[LIVE_GAME_EVENT_VALUE_PLAYER] = option_int("int_opt_user_penalty_shooter", &usr(team_is_user(tm[last_unit.possession])).options); @@ -721,10 +723,12 @@ live_game_event_free_kick(void) new.event.commentary = g_string_new("freekick"); if(team_is_user(tm[new.possession]) != -1 && option_int("int_opt_user_penalty_shooter", - &usr(team_is_user(tm[last_unit.possession])).options) != -1) + &usr(team_is_user(tm[last_unit.possession])).options) != -1 && + player_of_id(tm[new.possession], option_int("int_opt_user_penalty_shooter", + &usr(team_is_user(tm[new.possession])).options)) != NULL) new.event.values[LIVE_GAME_EVENT_VALUE_PLAYER] = option_int("int_opt_user_penalty_shooter", - &usr(team_is_user(tm[last_unit.possession])).options); + &usr(team_is_user(tm[new.possession])).options); else new.event.values[LIVE_GAME_EVENT_VALUE_PLAYER] = game_get_player(tm[new.possession], new.area, 0, -1, TRUE); @@ -1115,7 +1119,7 @@ live_game_unit_before(const LiveGameUnit* unit, gint gap) { gint i; - if(gap < 0) + if(gap > 0) { for(i=unis->len - 1;i>=0;i--) if(&uni(i) == unit) @@ -1131,7 +1135,7 @@ live_game_unit_before(const LiveGameUnit* unit, gint gap) for(i=unis->len - 1;i>=0;i--) if(&uni(i) == unit) { - if(i + gap < unis->len) + if(i + gap < unis->len - 1) return &uni(i + gap); else g_warning("live_game_unit_before: no unit found for gap %d\n", gap); diff --git a/src/main.c b/src/main.c index 0176a7ee..1afb5a5d 100644 --- a/src/main.c +++ b/src/main.c @@ -24,8 +24,11 @@ main_init_variables(void) transfer_list = NULL; player_names = NULL; - window.main = window.startup = window.startup_users = - window.live = window.warning = NULL; + window.main = window.startup = + window.live = window.warning = window.progress = window.digits = + window.stadium = window.job_offer = window.yesno = + window.options = window.font_sel = window.contract = + window.menu_player = window.user_management = NULL; live_game_temp.units = NULL; @@ -78,7 +81,6 @@ main_init(gint argc, gchar *argv[]) gint main (gint argc, gchar *argv[]) { - gint x_pos, y_pos; #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); @@ -91,14 +93,10 @@ main (gint argc, gchar *argv[]) main_init(argc, argv); - window_create(WINDOW_STARTUP_USERS); window_show_startup(); - gtk_window_get_position(GTK_WINDOW(window.startup), &x_pos, &y_pos); - gtk_window_move(GTK_WINDOW(window.startup_users), x_pos, y_pos); stat0 = STATUS_TEAM_SELECTION; /*d*/ - on_button_add_player_clicked(NULL, NULL); - + on_button_add_player_clicked(NULL, NULL); gtk_main (); diff --git a/src/misc2_callback_func.c b/src/misc2_callback_func.c index dc38bd75..0f354d46 100644 --- a/src/misc2_callback_func.c +++ b/src/misc2_callback_func.c @@ -1,3 +1,4 @@ +#include "file.h" #include "finance.h" #include "game_gui.h" #include "maths.h" @@ -107,7 +108,7 @@ misc2_callback_contract_offer(void) { pl->contract += (i + 1); pl->wage = value; - sprintf(buf, _("%s has accepted your offer."), pl->name->str); + sprintf(buf, _("%s accepts your offer."), pl->name->str); game_gui_print_message(buf); window_destroy(&window.contract, FALSE); } @@ -134,3 +135,30 @@ misc2_callback_contract_offer(void) } } } + +/** Add a user to the users array. */ +void +misc2_callback_add_user(void) +{ + GtkTreeView *treeview_user_management_teams = + GTK_TREE_VIEW(lookup_widget(window.user_management, "treeview_user_management_teams")); + GtkEntry *entry_user_management = + GTK_ENTRY(lookup_widget(window.user_management, "entry_user_management")); + const gchar *user_name = gtk_entry_get_text(entry_user_management); + User new_user = user_new(); + + if(strlen(user_name) > 0) + g_string_printf(new_user.name, "%s", user_name); + + gtk_entry_set_text(entry_user_management, ""); + + new_user.tm = treeview_get_pointer(treeview_user_management_teams, 2); + + g_array_append_val(users, new_user); + + user_set_up_team(&usr(users->len - 1)); + file_load_user_conf_file(&usr(users->len - 1)); + + treeview_show_users(GTK_TREE_VIEW(lookup_widget(window.user_management, "treeview_user_management_users"))); + treeview_show_team_list(treeview_user_management_teams, FALSE, FALSE); +} diff --git a/src/misc2_callback_func.h b/src/misc2_callback_func.h index 665b7929..0ac6eae0 100644 --- a/src/misc2_callback_func.h +++ b/src/misc2_callback_func.h @@ -12,5 +12,8 @@ misc2_callback_change_structure(gint structure); void misc2_callback_contract_offer(void); +void +misc2_callback_add_user(void); + #endif diff --git a/src/misc2_callbacks.c b/src/misc2_callbacks.c index 046d7972..db6363be 100644 --- a/src/misc2_callbacks.c +++ b/src/misc2_callbacks.c @@ -4,8 +4,10 @@ #include "misc2_callbacks.h" #include "misc2_callback_func.h" #include "misc2_interface.h" +#include "player.h" #include "support.h" #include "transfer.h" +#include "treeview.h" #include "user.h" #include "window.h" @@ -122,8 +124,9 @@ on_window_yesno_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { + on_button_yesno_no_clicked(NULL, NULL); - return FALSE; + return FALSE; } @@ -147,8 +150,22 @@ on_button_yesno_yes_clicked (GtkButton *button, case STATUS_TRANSFER_OFFER: misc2_callback_transfer_user_player(); break; + case STATUS_FIRE_PLAYER: + player_remove_from_team(current_user.tm, stat1); + current_user.money -= stat2; + current_user.money_out[1][MON_OUT_COMPENSATIONS] -= stat2; + treeview_show_user_player_list(); + break; + case STATUS_USER_MANAGEMENT: + user_remove(stat1, TRUE); + treeview_show_users(GTK_TREE_VIEW(lookup_widget(window.user_management, + "treeview_user_management_users"))); + treeview_show_team_list(GTK_TREE_VIEW(lookup_widget(window.user_management, + "treeview_user_management_teams")), + FALSE, FALSE); + break; } - /*d*/ + window_destroy(&window.yesno, TRUE); } @@ -177,3 +194,65 @@ on_window_contract_delete_event (GtkWidget *widget, return TRUE; } + +void +on_entry_user_management_activate (GtkEntry *entry, + gpointer user_data) +{ + on_button_user_management_add_clicked(NULL, NULL); +} + + +void +on_button_user_management_add_clicked (GtkButton *button, + gpointer user_data) +{ + misc2_callback_add_user(); +} + + +void +on_button_user_management_close_clicked + (GtkButton *button, + gpointer user_data) +{ + window_destroy(&window.user_management, FALSE); +} + + +gboolean +on_treeview_user_management_users_button_press_event + (GtkWidget *widget, + GdkEventButton *event, + gpointer user_data) +{ + gchar buf[SMALL]; + gint idx = -1; + + if(!treeview_select_row(GTK_TREE_VIEW(widget), event)) + return TRUE; + + idx = treeview_get_index(GTK_TREE_VIEW(widget), 0) - 1; + + if(users->len == 1) + { + game_gui_show_warning("You can't play Bygfoot with 0 users!"); + return TRUE; + } + + stat1 = idx; + sprintf(buf, "Remove user %s from the game?", usr(idx).name->str); + window_show_yesno(buf, FALSE); + + return FALSE; +} + +void +on_treeview_user_management_teams_row_activated + (GtkTreeView *treeview, + GtkTreePath *path, + GtkTreeViewColumn *column, + gpointer user_data) +{ + on_button_user_management_add_clicked(NULL, NULL); +} diff --git a/src/misc2_callbacks.h b/src/misc2_callbacks.h index 67d06427..9cf14f9e 100644 --- a/src/misc2_callbacks.h +++ b/src/misc2_callbacks.h @@ -62,3 +62,29 @@ gboolean on_window_contract_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); + +void +on_entry_user_management_activate (GtkEntry *entry, + gpointer user_data); + +void +on_button_user_management_add_clicked (GtkButton *button, + gpointer user_data); + +void +on_button_user_management_close_clicked + (GtkButton *button, + gpointer user_data); + +gboolean +on_treeview_user_management_users_button_press_event + (GtkWidget *widget, + GdkEventButton *event, + gpointer user_data); + +void +on_treeview_user_management_teams_row_activated + (GtkTreeView *treeview, + GtkTreePath *path, + GtkTreeViewColumn *column, + gpointer user_data); diff --git a/src/misc2_interface.c b/src/misc2_interface.c index bea1ab59..17fc44ad 100644 --- a/src/misc2_interface.c +++ b/src/misc2_interface.c @@ -766,3 +766,167 @@ create_window_contract (void) return window_contract; } +GtkWidget* +create_window_user_management (void) +{ + GtkWidget *window_user_management; + GtkWidget *vbox19; + GtkWidget *hbox23; + GtkWidget *hpaned1; + GtkWidget *vbox20; + GtkWidget *label47; + GtkWidget *scrolledwindow2; + GtkWidget *viewport1; + GtkWidget *treeview_user_management_users; + GtkWidget *vbox21; + GtkWidget *label46; + GtkWidget *scrolledwindow3; + GtkWidget *treeview_user_management_teams; + GtkWidget *hbox21; + GtkWidget *entry_user_management; + GtkWidget *button_user_management_add; + GtkWidget *alignment7; + GtkWidget *hbox22; + GtkWidget *image11; + GtkWidget *label45; + GtkWidget *hseparator9; + GtkWidget *button_user_management_close; + + window_user_management = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_container_set_border_width (GTK_CONTAINER (window_user_management), 5); + gtk_window_set_title (GTK_WINDOW (window_user_management), _("window1")); + gtk_window_set_position (GTK_WINDOW (window_user_management), GTK_WIN_POS_CENTER); + gtk_window_set_default_size (GTK_WINDOW (window_user_management), 600, 550); + + vbox19 = gtk_vbox_new (FALSE, 5); + gtk_widget_show (vbox19); + gtk_container_add (GTK_CONTAINER (window_user_management), vbox19); + + hbox23 = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox23); + gtk_box_pack_start (GTK_BOX (vbox19), hbox23, TRUE, TRUE, 0); + + hpaned1 = gtk_hpaned_new (); + gtk_widget_show (hpaned1); + gtk_box_pack_start (GTK_BOX (hbox23), hpaned1, TRUE, TRUE, 0); + gtk_paned_set_position (GTK_PANED (hpaned1), 200); + + vbox20 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox20); + gtk_paned_pack1 (GTK_PANED (hpaned1), vbox20, FALSE, TRUE); + + label47 = gtk_label_new (_("Users -- click to remove")); + gtk_widget_show (label47); + gtk_box_pack_start (GTK_BOX (vbox20), label47, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label47), GTK_JUSTIFY_LEFT); + + scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwindow2); + gtk_box_pack_start (GTK_BOX (vbox20), scrolledwindow2, TRUE, TRUE, 0); + + viewport1 = gtk_viewport_new (NULL, NULL); + gtk_widget_show (viewport1); + gtk_container_add (GTK_CONTAINER (scrolledwindow2), viewport1); + + treeview_user_management_users = gtk_tree_view_new (); + gtk_widget_show (treeview_user_management_users); + gtk_container_add (GTK_CONTAINER (viewport1), treeview_user_management_users); + + vbox21 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox21); + gtk_paned_pack2 (GTK_PANED (hpaned1), vbox21, TRUE, TRUE); + + label46 = gtk_label_new (_("Available teams")); + gtk_widget_show (label46); + gtk_box_pack_start (GTK_BOX (vbox21), label46, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label46), GTK_JUSTIFY_LEFT); + + scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwindow3); + gtk_box_pack_start (GTK_BOX (vbox21), scrolledwindow3, TRUE, TRUE, 0); + + treeview_user_management_teams = gtk_tree_view_new (); + gtk_widget_show (treeview_user_management_teams); + gtk_container_add (GTK_CONTAINER (scrolledwindow3), treeview_user_management_teams); + + hbox21 = gtk_hbox_new (FALSE, 5); + gtk_widget_show (hbox21); + gtk_box_pack_start (GTK_BOX (vbox19), hbox21, FALSE, FALSE, 0); + + entry_user_management = gtk_entry_new (); + gtk_widget_show (entry_user_management); + gtk_box_pack_start (GTK_BOX (hbox21), entry_user_management, TRUE, TRUE, 0); + + button_user_management_add = gtk_button_new (); + gtk_widget_show (button_user_management_add); + gtk_box_pack_start (GTK_BOX (hbox21), button_user_management_add, FALSE, FALSE, 0); + + alignment7 = gtk_alignment_new (0.5, 0.5, 0, 0); + gtk_widget_show (alignment7); + gtk_container_add (GTK_CONTAINER (button_user_management_add), alignment7); + + hbox22 = gtk_hbox_new (FALSE, 2); + gtk_widget_show (hbox22); + gtk_container_add (GTK_CONTAINER (alignment7), hbox22); + + image11 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_BUTTON); + gtk_widget_show (image11); + gtk_box_pack_start (GTK_BOX (hbox22), image11, FALSE, FALSE, 0); + + label45 = gtk_label_new_with_mnemonic (_("Add user")); + gtk_widget_show (label45); + gtk_box_pack_start (GTK_BOX (hbox22), label45, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label45), GTK_JUSTIFY_LEFT); + + hseparator9 = gtk_hseparator_new (); + gtk_widget_show (hseparator9); + gtk_box_pack_start (GTK_BOX (vbox19), hseparator9, FALSE, FALSE, 0); + gtk_widget_set_size_request (hseparator9, 1, 10); + + button_user_management_close = gtk_button_new_from_stock ("gtk-close"); + gtk_widget_show (button_user_management_close); + gtk_box_pack_start (GTK_BOX (vbox19), button_user_management_close, FALSE, FALSE, 0); + + g_signal_connect ((gpointer) treeview_user_management_users, "button_press_event", + G_CALLBACK (on_treeview_user_management_users_button_press_event), + NULL); + g_signal_connect ((gpointer) treeview_user_management_teams, "row_activated", + G_CALLBACK (on_treeview_user_management_teams_row_activated), + NULL); + g_signal_connect ((gpointer) entry_user_management, "activate", + G_CALLBACK (on_entry_user_management_activate), + NULL); + g_signal_connect ((gpointer) button_user_management_add, "clicked", + G_CALLBACK (on_button_user_management_add_clicked), + NULL); + g_signal_connect ((gpointer) button_user_management_close, "clicked", + G_CALLBACK (on_button_user_management_close_clicked), + NULL); + + /* Store pointers to all widgets, for use by lookup_widget(). */ + GLADE_HOOKUP_OBJECT_NO_REF (window_user_management, window_user_management, "window_user_management"); + GLADE_HOOKUP_OBJECT (window_user_management, vbox19, "vbox19"); + GLADE_HOOKUP_OBJECT (window_user_management, hbox23, "hbox23"); + GLADE_HOOKUP_OBJECT (window_user_management, hpaned1, "hpaned1"); + GLADE_HOOKUP_OBJECT (window_user_management, vbox20, "vbox20"); + GLADE_HOOKUP_OBJECT (window_user_management, label47, "label47"); + GLADE_HOOKUP_OBJECT (window_user_management, scrolledwindow2, "scrolledwindow2"); + GLADE_HOOKUP_OBJECT (window_user_management, viewport1, "viewport1"); + GLADE_HOOKUP_OBJECT (window_user_management, treeview_user_management_users, "treeview_user_management_users"); + GLADE_HOOKUP_OBJECT (window_user_management, vbox21, "vbox21"); + GLADE_HOOKUP_OBJECT (window_user_management, label46, "label46"); + GLADE_HOOKUP_OBJECT (window_user_management, scrolledwindow3, "scrolledwindow3"); + GLADE_HOOKUP_OBJECT (window_user_management, treeview_user_management_teams, "treeview_user_management_teams"); + GLADE_HOOKUP_OBJECT (window_user_management, hbox21, "hbox21"); + GLADE_HOOKUP_OBJECT (window_user_management, entry_user_management, "entry_user_management"); + GLADE_HOOKUP_OBJECT (window_user_management, button_user_management_add, "button_user_management_add"); + GLADE_HOOKUP_OBJECT (window_user_management, alignment7, "alignment7"); + GLADE_HOOKUP_OBJECT (window_user_management, hbox22, "hbox22"); + GLADE_HOOKUP_OBJECT (window_user_management, image11, "image11"); + GLADE_HOOKUP_OBJECT (window_user_management, label45, "label45"); + GLADE_HOOKUP_OBJECT (window_user_management, hseparator9, "hseparator9"); + GLADE_HOOKUP_OBJECT (window_user_management, button_user_management_close, "button_user_management_close"); + + return window_user_management; +} + diff --git a/src/misc2_interface.h b/src/misc2_interface.h index 1b9e85c4..e7f7540b 100644 --- a/src/misc2_interface.h +++ b/src/misc2_interface.h @@ -8,3 +8,4 @@ GtkWidget* create_window_warning (void); GtkWidget* create_window_digits (void); GtkWidget* create_window_yesno (void); GtkWidget* create_window_contract (void); +GtkWidget* create_window_user_management (void); diff --git a/src/misc_callback_func.c b/src/misc_callback_func.c index f075d685..df13f4a0 100644 --- a/src/misc_callback_func.c +++ b/src/misc_callback_func.c @@ -68,7 +68,6 @@ misc_callback_start_game(void) user_set_up_team_new_game(&usr(i)); window_destroy(&window.startup, TRUE); - window_destroy(&window.startup_users, TRUE); window_create(WINDOW_MAIN); @@ -83,7 +82,9 @@ misc_callback_add_player(void) GTK_TOGGLE_BUTTON(lookup_widget(window.startup, "team_selection_radio1")); GtkToggleButton *team_selection_radio2 = GTK_TOGGLE_BUTTON(lookup_widget(window.startup, "team_selection_radio2")); - GtkTreeView *treeview = + GtkTreeView *treeview_users = + GTK_TREE_VIEW(lookup_widget(window.startup, "treeview_users")); + GtkTreeView *treeview_startup = GTK_TREE_VIEW(lookup_widget(window.startup, "treeview_startup")); GtkEntry *entry_player_name = GTK_ENTRY(lookup_widget(window.startup, "entry_player_name")); @@ -102,14 +103,13 @@ misc_callback_add_player(void) else new_user.scout = -1; - new_user.tm = treeview_get_pointer(treeview, 2); + new_user.tm = treeview_get_pointer(treeview_startup, 2); g_array_append_val(users, new_user); - treeview_show_users_startup(); + treeview_show_users(treeview_users); - treeview_show_team_list(GTK_TREE_VIEW(lookup_widget(window.startup, "treeview_startup")), - FALSE, FALSE); + treeview_show_team_list(treeview_startup, FALSE, FALSE); if(users->len == 1) { @@ -124,13 +124,14 @@ void misc_callback_remove_user(GdkEventButton *event) { GtkTreeView *treeview = - GTK_TREE_VIEW(lookup_widget(window.startup_users, "treeview_users")); + GTK_TREE_VIEW(lookup_widget(window.startup, "treeview_users")); - treeview_select_row(treeview, event); + if(!treeview_select_row(treeview, event)) + return; user_remove(treeview_get_index(treeview, 0) - 1, FALSE); - treeview_show_users_startup(); + treeview_show_users(treeview); if(users->len == 0) { diff --git a/src/misc_callbacks.c b/src/misc_callbacks.c index 318a35a1..a8985cee 100644 --- a/src/misc_callbacks.c +++ b/src/misc_callbacks.c @@ -50,15 +50,6 @@ on_team_selection_tv_row_activated (GtkTreeView *treeview, on_button_add_player_clicked(NULL, NULL); } - -void -on_radiobutton_country_toggled (GtkToggleButton *togglebutton, - gpointer user_data) -{ - -} - - void on_button_select_country_file_clicked (GtkButton *button, gpointer user_data) @@ -66,31 +57,6 @@ on_button_select_country_file_clicked (GtkButton *button, } - -void -on_checkbutton_load_randomly_toggled (GtkToggleButton *togglebutton, - gpointer user_data) -{ - -} - - -void -on_checkbutton_only_names_toggled (GtkToggleButton *togglebutton, - gpointer user_data) -{ - -} - - -void -on_button_start_editor_clicked (GtkButton *button, - gpointer user_data) -{ - -} - - void on_team_selection_load_clicked (GtkButton *button, gpointer user_data) @@ -312,13 +278,3 @@ on_spinbutton_capacity_button_press_event (GtkWidget *widget, return FALSE; } - -gboolean -on_window_startup_users_delete_event (GtkWidget *widget, - GdkEvent *event, - gpointer user_data) -{ - - return TRUE; -} - diff --git a/src/misc_callbacks.h b/src/misc_callbacks.h index 08775193..5d76f33d 100644 --- a/src/misc_callbacks.h +++ b/src/misc_callbacks.h @@ -14,27 +14,10 @@ on_team_selection_tv_row_activated (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data); - -void -on_radiobutton_country_toggled (GtkToggleButton *togglebutton, - gpointer user_data); - void on_button_select_country_file_clicked (GtkButton *button, gpointer user_data); -void -on_checkbutton_load_randomly_toggled (GtkToggleButton *togglebutton, - gpointer user_data); - -void -on_checkbutton_only_names_toggled (GtkToggleButton *togglebutton, - gpointer user_data); - -void -on_button_start_editor_clicked (GtkButton *button, - gpointer user_data); - void on_team_selection_ok_clicked (GtkButton *button, gpointer user_data); @@ -135,8 +118,3 @@ on_spinbutton_capacity_button_press_event GdkEventButton *event, gpointer user_data); #endif - -gboolean -on_window_startup_users_delete_event (GtkWidget *widget, - GdkEvent *event, - gpointer user_data); diff --git a/src/misc_interface.c b/src/misc_interface.c index 49f65c02..97ea5afe 100644 --- a/src/misc_interface.c +++ b/src/misc_interface.c @@ -31,6 +31,9 @@ create_window_startup (void) { GtkWidget *window_startup; GtkWidget *vbox2; + GtkWidget *hpaned1; + GtkWidget *scrolledwindow10; + GtkWidget *treeview_users; GtkWidget *scrolledwindow1; GtkWidget *treeview_startup; GtkWidget *hseparator10; @@ -88,19 +91,34 @@ create_window_startup (void) window_startup = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window_startup), 6); - gtk_window_set_title (GTK_WINDOW (window_startup), _("Select team and country")); gtk_window_set_position (GTK_WINDOW (window_startup), GTK_WIN_POS_CENTER); - gtk_window_set_default_size (GTK_WINDOW (window_startup), 500, 600); + gtk_window_set_default_size (GTK_WINDOW (window_startup), 550, 600); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox2); gtk_container_add (GTK_CONTAINER (window_startup), vbox2); + hpaned1 = gtk_hpaned_new (); + gtk_widget_show (hpaned1); + gtk_box_pack_start (GTK_BOX (vbox2), hpaned1, TRUE, TRUE, 0); + gtk_paned_set_position (GTK_PANED (hpaned1), 200); + + scrolledwindow10 = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwindow10); + gtk_paned_pack1 (GTK_PANED (hpaned1), scrolledwindow10, FALSE, TRUE); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow10), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow10), GTK_SHADOW_IN); + + treeview_users = gtk_tree_view_new (); + gtk_widget_show (treeview_users); + gtk_container_add (GTK_CONTAINER (scrolledwindow10), treeview_users); + gtk_tooltips_set_tip (tooltips, treeview_users, _("Click on a player to remove him"), NULL); + scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow1); - gtk_box_pack_start (GTK_BOX (vbox2), scrolledwindow1, TRUE, TRUE, 0); - gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow1), 6); + gtk_paned_pack2 (GTK_PANED (hpaned1), scrolledwindow1, TRUE, TRUE); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_IN); treeview_startup = gtk_tree_view_new (); gtk_widget_show (treeview_startup); @@ -339,6 +357,9 @@ create_window_startup (void) g_signal_connect ((gpointer) window_startup, "delete_event", G_CALLBACK (on_team_selection_cancel_clicked), NULL); + g_signal_connect ((gpointer) treeview_users, "button_press_event", + G_CALLBACK (on_treeview_users_button_press_event), + NULL); g_signal_connect ((gpointer) treeview_startup, "row_activated", G_CALLBACK (on_team_selection_tv_row_activated), NULL); @@ -367,6 +388,9 @@ create_window_startup (void) /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (window_startup, window_startup, "window_startup"); GLADE_HOOKUP_OBJECT (window_startup, vbox2, "vbox2"); + GLADE_HOOKUP_OBJECT (window_startup, hpaned1, "hpaned1"); + GLADE_HOOKUP_OBJECT (window_startup, scrolledwindow10, "scrolledwindow10"); + GLADE_HOOKUP_OBJECT (window_startup, treeview_users, "treeview_users"); GLADE_HOOKUP_OBJECT (window_startup, scrolledwindow1, "scrolledwindow1"); GLADE_HOOKUP_OBJECT (window_startup, treeview_startup, "treeview_startup"); GLADE_HOOKUP_OBJECT (window_startup, hseparator10, "hseparator10"); @@ -877,45 +901,6 @@ create_help_window (void) return help_window; } -GtkWidget* -create_window_startup_users (void) -{ - GtkWidget *window_startup_users; - GtkWidget *scrolledwindow10; - GtkWidget *treeview_users; - GtkTooltips *tooltips; - - tooltips = gtk_tooltips_new (); - - window_startup_users = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (window_startup_users), _("Players")); - gtk_window_set_default_size (GTK_WINDOW (window_startup_users), 250, 200); - - scrolledwindow10 = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_show (scrolledwindow10); - gtk_container_add (GTK_CONTAINER (window_startup_users), scrolledwindow10); - - treeview_users = gtk_tree_view_new (); - gtk_widget_show (treeview_users); - gtk_container_add (GTK_CONTAINER (scrolledwindow10), treeview_users); - gtk_tooltips_set_tip (tooltips, treeview_users, _("Click on a player to remove him"), NULL); - - g_signal_connect ((gpointer) window_startup_users, "delete_event", - G_CALLBACK (on_window_startup_users_delete_event), - NULL); - g_signal_connect ((gpointer) treeview_users, "button_press_event", - G_CALLBACK (on_treeview_users_button_press_event), - NULL); - - /* Store pointers to all widgets, for use by lookup_widget(). */ - GLADE_HOOKUP_OBJECT_NO_REF (window_startup_users, window_startup_users, "window_startup_users"); - GLADE_HOOKUP_OBJECT (window_startup_users, scrolledwindow10, "scrolledwindow10"); - GLADE_HOOKUP_OBJECT (window_startup_users, treeview_users, "treeview_users"); - GLADE_HOOKUP_OBJECT_NO_REF (window_startup_users, tooltips, "tooltips"); - - return window_startup_users; -} - GtkWidget* create_window_stadium (void) { diff --git a/src/misc_interface.h b/src/misc_interface.h index 28dd4d80..f584fe14 100644 --- a/src/misc_interface.h +++ b/src/misc_interface.h @@ -7,5 +7,4 @@ GtkWidget* create_fsel_window (void); GtkWidget* create_window_font_sel (void); GtkWidget* create_window_live (void); GtkWidget* create_help_window (void); -GtkWidget* create_window_startup_users (void); GtkWidget* create_window_stadium (void); diff --git a/src/options_callbacks.c b/src/options_callbacks.c index 8d689db9..f26e3caf 100644 --- a/src/options_callbacks.c +++ b/src/options_callbacks.c @@ -4,6 +4,7 @@ #include +#include "file.h" #include "options_callbacks.h" #include "options_interface.h" #include "option_gui.h" @@ -36,3 +37,14 @@ on_button_font_name_clicked (GtkButton *button, window_create(WINDOW_FONT_SEL); } + +void +on_button_reload_constants_clicked (GtkButton *button, + gpointer user_data) +{ + const gchar *constants_file = + gtk_entry_get_text(GTK_ENTRY(lookup_widget(window.options, "entry_constants_file"))); + + file_load_constants_file(constants_file); +} + diff --git a/src/options_callbacks.h b/src/options_callbacks.h index 337f8566..fae0c527 100644 --- a/src/options_callbacks.h +++ b/src/options_callbacks.h @@ -11,3 +11,7 @@ on_button_options_cancel_clicked (GtkButton *button, void on_button_font_name_clicked (GtkButton *button, gpointer user_data); + +void +on_button_reload_constants_clicked (GtkButton *button, + gpointer user_data); diff --git a/src/options_interface.c b/src/options_interface.c index 40b86ccd..2210481e 100644 --- a/src/options_interface.c +++ b/src/options_interface.c @@ -53,13 +53,19 @@ create_window_options (void) GtkObject *spinbutton_refresh_adj; GtkWidget *spinbutton_refresh; GtkWidget *label10; - GtkWidget *entry_constants_file; GtkWidget *button_font_name; GtkWidget *alignment1; GtkWidget *hbox7; GtkWidget *image1; GtkWidget *label34; GtkWidget *entry_font_name; + GtkWidget *hbox8; + GtkWidget *entry_constants_file; + GtkWidget *button_reload_constants; + GtkWidget *alignment2; + GtkWidget *hbox9; + GtkWidget *image2; + GtkWidget *label35; GtkWidget *label1; GtkWidget *hbox4; GtkWidget *vbox4; @@ -276,13 +282,6 @@ create_window_options (void) gtk_label_set_justify (GTK_LABEL (label10), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label10), 1, 0.5); - entry_constants_file = gtk_entry_new (); - gtk_widget_show (entry_constants_file); - gtk_table_attach (GTK_TABLE (table1), entry_constants_file, 1, 2, 3, 4, - (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_tooltips_set_tip (tooltips, entry_constants_file, _("File containing settings which determine a lot of aspects of the game behaviour. DON'T CHANGE THIS UNLESS YOU REALLY KNOW WHAT YOU ARE DOING."), NULL); - button_font_name = gtk_button_new (); gtk_widget_show (button_font_name); gtk_table_attach (GTK_TABLE (table1), button_font_name, 0, 1, 4, 5, @@ -312,6 +311,39 @@ create_window_options (void) (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); + hbox8 = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox8); + gtk_table_attach (GTK_TABLE (table1), hbox8, 1, 2, 3, 4, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (GTK_FILL), 0, 0); + + entry_constants_file = gtk_entry_new (); + gtk_widget_show (entry_constants_file); + gtk_box_pack_start (GTK_BOX (hbox8), entry_constants_file, TRUE, TRUE, 0); + gtk_tooltips_set_tip (tooltips, entry_constants_file, _("File containing settings which determine a lot of aspects of the game behaviour. DON'T CHANGE THIS UNLESS YOU REALLY KNOW WHAT YOU ARE DOING."), NULL); + + button_reload_constants = gtk_button_new (); + gtk_widget_show (button_reload_constants); + gtk_box_pack_start (GTK_BOX (hbox8), button_reload_constants, FALSE, FALSE, 0); + gtk_tooltips_set_tip (tooltips, button_reload_constants, _("Reload the constants file"), NULL); + + alignment2 = gtk_alignment_new (0.5, 0.5, 0, 0); + gtk_widget_show (alignment2); + gtk_container_add (GTK_CONTAINER (button_reload_constants), alignment2); + + hbox9 = gtk_hbox_new (FALSE, 2); + gtk_widget_show (hbox9); + gtk_container_add (GTK_CONTAINER (alignment2), hbox9); + + image2 = gtk_image_new_from_stock ("gtk-refresh", GTK_ICON_SIZE_BUTTON); + gtk_widget_show (image2); + gtk_box_pack_start (GTK_BOX (hbox9), image2, FALSE, FALSE, 0); + + label35 = gtk_label_new_with_mnemonic (_("Reload")); + gtk_widget_show (label35); + gtk_box_pack_start (GTK_BOX (hbox9), label35, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label35), GTK_JUSTIFY_LEFT); + label1 = gtk_label_new (_("Global")); gtk_widget_show (label1); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label1); @@ -866,6 +898,9 @@ create_window_options (void) g_signal_connect ((gpointer) button_font_name, "clicked", G_CALLBACK (on_button_font_name_clicked), NULL); + g_signal_connect ((gpointer) button_reload_constants, "clicked", + G_CALLBACK (on_button_reload_constants_clicked), + NULL); g_signal_connect ((gpointer) button_ok, "clicked", G_CALLBACK (on_button_options_ok_clicked), NULL); @@ -895,13 +930,19 @@ create_window_options (void) GLADE_HOOKUP_OBJECT (window_options, spinbutton_precision, "spinbutton_precision"); GLADE_HOOKUP_OBJECT (window_options, spinbutton_refresh, "spinbutton_refresh"); GLADE_HOOKUP_OBJECT (window_options, label10, "label10"); - GLADE_HOOKUP_OBJECT (window_options, entry_constants_file, "entry_constants_file"); GLADE_HOOKUP_OBJECT (window_options, button_font_name, "button_font_name"); GLADE_HOOKUP_OBJECT (window_options, alignment1, "alignment1"); GLADE_HOOKUP_OBJECT (window_options, hbox7, "hbox7"); GLADE_HOOKUP_OBJECT (window_options, image1, "image1"); GLADE_HOOKUP_OBJECT (window_options, label34, "label34"); GLADE_HOOKUP_OBJECT (window_options, entry_font_name, "entry_font_name"); + GLADE_HOOKUP_OBJECT (window_options, hbox8, "hbox8"); + GLADE_HOOKUP_OBJECT (window_options, entry_constants_file, "entry_constants_file"); + GLADE_HOOKUP_OBJECT (window_options, button_reload_constants, "button_reload_constants"); + GLADE_HOOKUP_OBJECT (window_options, alignment2, "alignment2"); + GLADE_HOOKUP_OBJECT (window_options, hbox9, "hbox9"); + GLADE_HOOKUP_OBJECT (window_options, image2, "image2"); + GLADE_HOOKUP_OBJECT (window_options, label35, "label35"); GLADE_HOOKUP_OBJECT (window_options, label1, "label1"); GLADE_HOOKUP_OBJECT (window_options, hbox4, "hbox4"); GLADE_HOOKUP_OBJECT (window_options, vbox4, "vbox4"); diff --git a/src/table.c b/src/table.c index 575c9f2d..c52e4b17 100644 --- a/src/table.c +++ b/src/table.c @@ -114,16 +114,12 @@ table_element_compare_func(gconstpointer a, return 0; clid = GPOINTER_TO_INT(clid_pointer); + + fixtures = league_cup_get_fixtures(clid); if(clid < ID_CUP_START) - { cup_round = -1; - fixtures = league_from_clid(clid)->fixtures; - } else - { cup_round = g_array_index(cup_from_clid(clid)->tables, Table, 0).round; - fixtures = cup_from_clid(clid)->fixtures; - } /*todo use misc_int_compare*/ if(element1->values[TABLE_PTS] > element2->values[TABLE_PTS]) diff --git a/src/team.c b/src/team.c index c26e4130..b52281e5 100644 --- a/src/team.c +++ b/src/team.c @@ -362,9 +362,9 @@ Team* team_get_pointer_from_ids(gint clid, gint id) { if(clid < ID_CUP_START) - return &g_array_index(lig(clid % 1000).teams, Team, id); + return &g_array_index(lig(league_cup_get_index_from_clid(clid)).teams, Team, id); else - return &g_array_index(cp(clid % 1000).teams, Team, id); + return &g_array_index(cp(league_cup_get_index_from_clid(clid)).teams, Team, id); } /** Return the players of the team in a pointer array. @@ -903,9 +903,7 @@ gint team_get_index(const Team *tm) { gint i; - GArray *teams = (tm->clid < ID_CUP_START) ? - league_from_clid(tm->clid)->teams : - cup_from_clid(tm->clid)->teams; + GArray *teams = league_cup_get_teams(tm->clid); for(i=0;ilen;i++) if(&g_array_index(teams, Team, i) == tm) diff --git a/src/transfer.c b/src/transfer.c index 0f9fe8b3..04acef95 100644 --- a/src/transfer.c +++ b/src/transfer.c @@ -1,10 +1,13 @@ #include "finance.h" #include "free.h" +#include "game_gui.h" #include "maths.h" #include "option.h" #include "player.h" +#include "support.h" #include "team.h" #include "transfer.h" +#include "treeview.h" #include "user.h" /** Weekly update of the transfer list. */ @@ -174,13 +177,6 @@ transfer_evaluate_offers(void) if(idx != -1) { - /*d*/ - printf("%s val %d wa %d fee %d wag %d\n", - player_of_id(trans(i).tm, trans(i).id)->name->str, - player_of_id(trans(i).tm, trans(i).id)->value, - player_of_id(trans(i).tm, trans(i).id)->wage, transoff(i, idx).fee, - transoff(i, idx).wage); - for(j=idx + 1;jlen;j++) user_event_add(user_from_team(transoff(i, j).tm), EVENT_TYPE_TRANSFER_OFFER_REJECTED, -1, -1, @@ -396,3 +392,26 @@ transfer_remove_offer(gint idx, const Team *tm) return FALSE; } + +/** Add or remove a user player from the transfer list. */ +void +transfer_add_remove_user_player(Player *pl) +{ + gchar buf[SMALL]; + + if(!query_transfer_player_is_on_list(pl)) + { + transfer_add_player(pl, + (gint)rint(((gfloat)const_int("int_transfer_time_lower") + + (gfloat)const_int("int_transfer_time_upper")) / 2)); + sprintf(buf, _("%s has been added to the transfer list for %d weeks."), + pl->name->str, + (gint)rint(((gfloat)const_int("int_transfer_time_lower") + + (gfloat)const_int("int_transfer_time_upper")) / 2)); + game_gui_print_message(buf); + } + else + transfer_remove_player_ptr(pl); + + treeview_show_transfer_list(GTK_TREE_VIEW(lookup_widget(window.main, "treeview_right"))); +} diff --git a/src/transfer.h b/src/transfer.h index 0a751f37..6f7a26dc 100644 --- a/src/transfer.h +++ b/src/transfer.h @@ -56,4 +56,7 @@ transfer_team_get_new(void); gint transfer_get_index(const Team *tm, gint id); +void +transfer_add_remove_user_player(Player *pl); + #endif diff --git a/src/treeview.c b/src/treeview.c index d58ba8ba..22d66cb8 100644 --- a/src/treeview.c +++ b/src/treeview.c @@ -18,7 +18,7 @@ #include "user.h" /** Select the row that's been clicked on. */ -void +gboolean treeview_select_row(GtkTreeView *treeview, GdkEventButton *event) { GtkTreeSelection *selection = @@ -28,10 +28,12 @@ treeview_select_row(GtkTreeView *treeview, GdkEventButton *event) if(!gtk_tree_view_get_path_at_pos(treeview, event->x, event->y, &path, NULL, NULL, NULL)) - return; + return FALSE; gtk_tree_selection_select_path(selection, path); gtk_tree_path_free(path); + + return TRUE; } /** Return the number in the 'column'th column of the currently @@ -247,7 +249,8 @@ treeview_team_compare(GtkTreeModel *model, gpointer user_data) { gint type = GPOINTER_TO_INT(user_data); - gpointer *tm1, *tm2; + Team *tm1, *tm2; + gint return_value = 0; gtk_tree_model_get(model, a, 4, &tm1, -1); gtk_tree_model_get(model, b, 4, &tm2, -1); @@ -258,12 +261,12 @@ treeview_team_compare(GtkTreeModel *model, g_warning("treeview_team_compare: unknown type %d.\n", type); break; case TEAM_COMPARE_AV_SKILL: - return misc_float_compare(team_get_average_skill((Team*)tm1, FALSE), - team_get_average_skill((Team*)tm2, FALSE)); + return_value = misc_float_compare(team_get_average_skill(tm1, FALSE), + team_get_average_skill(tm2, FALSE)); break; } - return 0; + return return_value; } /** @@ -434,6 +437,62 @@ treeview_show_team_list(GtkTreeView *treeview, gboolean show_cup_teams, g_object_unref(team_list); } +/** Compare two players in a treeview. */ +gint +treeview_player_compare(GtkTreeModel *model, + GtkTreeIter *a, + GtkTreeIter *b, + gpointer user_data) +{ + gint type = GPOINTER_TO_INT(user_data); + Player *pl1, *pl2; + gint return_value = 0; + + gtk_tree_model_get(model, a, 4, &pl1, -1); + gtk_tree_model_get(model, b, 4, &pl2, -1); + + switch(type) + { + default: + g_warning("treeview_player_compare: unknown type %d.\n", type); + break; + case PLAYER_LIST_ATTRIBUTE_POS: + return_value = misc_int_compare(pl1->pos, pl2->pos); + break; + case PLAYER_LIST_ATTRIBUTE_GOALS: + return_value = misc_int_compare(player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_GOALS), + player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_GOALS)); + break; + case PLAYER_LIST_ATTRIBUTE_SHOTS: + return_value = misc_int_compare(player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_SHOTS), + player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_SHOTS)); + break; + case PLAYER_LIST_ATTRIBUTE_GAMES: + return_value = misc_int_compare(player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_GAMES), + player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_GAMES)); + break; + case PLAYER_LIST_ATTRIBUTE_SKILL: + return_value = misc_float_compare(pl1->skill, pl2->skill); + break; + case PLAYER_LIST_ATTRIBUTE_AGE: + return_value = misc_float_compare(pl1->age, pl2->age); + break; + case PLAYER_LIST_ATTRIBUTE_ETAL: + return_value = misc_float_compare(pl1->etal[current_user.scout % 10], + pl2->etal[current_user.scout % 10]); + break; + case PLAYER_LIST_ATTRIBUTE_VALUE: + return_value = misc_int_compare(pl1->value, pl2->value); + break; + case PLAYER_LIST_ATTRIBUTE_WAGE: + return_value = misc_int_compare(pl1->wage, pl2->wage); + break; + } + + return return_value; + +} + /** Create the list store for a player list. @param players The array containing the players. @param attributes An array containing the attributes we show. @@ -472,12 +531,29 @@ treeview_create_player_list(GPtrArray *players, gint *attributes, gint max, gboo gtk_list_store_set(liststore, &iter, j + 1, g_ptr_array_index(players, i), -1); } + if(!show_separator) + { + for(i=0;ilen;i++) treeview_create_fixture((Fixture*)g_ptr_array_index(fixtures, i), liststore); - free_g_ptr_array(&fixtures); + g_ptr_array_free(fixtures, TRUE); return GTK_TREE_MODEL(liststore); } @@ -1210,7 +1300,7 @@ treeview_set_up_fixtures(GtkTreeView *treeview) gtk_tree_selection_set_mode(gtk_tree_view_get_selection(treeview), GTK_SELECTION_NONE); - gtk_tree_view_set_rules_hint(treeview, TRUE); + gtk_tree_view_set_rules_hint(treeview, FALSE); gtk_tree_view_set_headers_visible(treeview, FALSE); col = gtk_tree_view_column_new(); @@ -1528,7 +1618,8 @@ treeview_create_finances(const User* user) _("Scout"), _("Journey costs"), _("Stadium improvements"), - _("Stadium bills")}; + _("Stadium bills"), + _("Compensations")}; GtkTreeIter iter; GtkListStore *liststore = gtk_list_store_new(3, @@ -1997,3 +2088,73 @@ treeview_show_league_results(GtkTreeView *treeview) gtk_tree_view_set_model(treeview, model); g_object_unref(model); } + +/** Show a list of all players in the teams. */ +void +treeview_show_all_players(GArray *teams) +{ + gint i, j; + GPtrArray *players = g_ptr_array_new(); + + for(i=0;ilen;i++) + if(&g_array_index(teams, Team, i) != current_user.tm) + for(j=0;jlen;j++) + g_ptr_array_add(players, &g_array_index(g_array_index(teams, Team, i).players, + Player, j)); + + treeview_show_player_list(GTK_TREE_VIEW(lookup_widget(window.main, "treeview_right")), + players, + treeview_get_attributes_from_scout(current_user.scout), FALSE); +} + +GtkTreeModel* +treeview_create_preview(void) +{ + gint i; + GtkListStore *liststore; + GPtrArray *fixtures = fixture_get_coming(current_user.tm); + gint max = MIN(const_int("int_treeview_coming_matches"), fixtures->len); + GtkTreeIter iter; + + if(fixtures->len == 0) + { + free_g_ptr_array(&fixtures); + return NULL; + } + + liststore = gtk_list_store_new(5, + GDK_TYPE_PIXBUF, + G_TYPE_STRING, + G_TYPE_STRING, + G_TYPE_STRING, + GDK_TYPE_PIXBUF); + + for(i=0;iname->str); + if(pl->team == current_user.tm && + opt_user_int("int_opt_user_penalty_shooter") == pl->id) + strcat(buf, _(" (P)")); break; case PLAYER_LIST_ATTRIBUTE_CPOS: treeview_cell_player_pos_to_cell(renderer, buf, pl->cpos); diff --git a/src/user.c b/src/user.c index 2f750adb..9372b088 100644 --- a/src/user.c +++ b/src/user.c @@ -5,6 +5,7 @@ #include "misc.h" #include "option.h" #include "player.h" +#include "team.h" #include "transfer.h" #include "user.h" #include "window.h" @@ -125,10 +126,18 @@ user_set_up_finances(User *user) void user_remove(gint idx, gboolean regenerate_team) { + gint i; + + if(regenerate_team) + { + for(i=0;iplayers->len;i++) + free_player(&g_array_index(usr(idx).tm->players, Player, i)); + + team_generate_players_stadium(usr(idx).tm); + } + free_user(&usr(idx)); g_array_remove_index(users, idx); - - /*todo regenerate*/ } void diff --git a/src/user_struct.h b/src/user_struct.h index 7a05660a..ad1210ca 100644 --- a/src/user_struct.h +++ b/src/user_struct.h @@ -26,6 +26,7 @@ enum MonOut MON_OUT_JOURNEY, MON_OUT_STADIUM_IMPROVEMENT, MON_OUT_STADIUM_BILLS, + MON_OUT_COMPENSATIONS, MON_OUT_TRANSFERS, MON_OUT_END }; @@ -41,7 +42,6 @@ enum CounterValue COUNT_USER_WARNING, /**< Whether there was already a warning about rumours (new coach). */ COUNT_USER_INC_CAP, /**< How many weeks until the stadium capacity is increased. */ COUNT_USER_INC_SAF, /**< How often the stadium safety was increased (in a week). */ - COUNT_USER_AUTOSAVE, /**< How often the game is autosaved. */ COUNT_USER_STADIUM_CAPACITY, /**< Counter for building stadium seats. */ COUNT_USER_STADIUM_SAFETY, /**< Counter for increasing stadium safety. */ COUNT_USER_OLD_WAGE1, diff --git a/src/window.c b/src/window.c index d5346b52..202fef6a 100644 --- a/src/window.c +++ b/src/window.c @@ -42,7 +42,6 @@ window_show_startup(void) free_g_string_array(&dir_contents); } - /** Show the options window. */ void window_show_options(void) @@ -52,6 +51,19 @@ window_show_options(void) option_gui_set_up_window(); } +/** Show the player list context menu, triggered by 'event'. */ +void +window_show_menu_player(GdkEvent *event) +{ + if(window.menu_player != NULL) + window_destroy(&window.menu_player, FALSE); + + window.menu_player = create_menu_player(); + + gtk_menu_popup(GTK_MENU(window.menu_player), NULL, NULL, NULL, NULL, + ((GdkEventButton*)event)->button, gdk_event_get_time(event)); +} + /** Show the digits window with the labels and values set according to the arguments. */ void @@ -155,6 +167,14 @@ window_show_stadium(void) gtk_label_set_text(label_stadium_status, _("No improvements currently in progress.")); } +gboolean +window_show(gpointer window) +{ + gtk_widget_show((GtkWidget*)window); + + return FALSE; +} + /** Show the window where the user can select between yes and no. @param text The text shown in the window. @param checkbutton Whether to show the checkbutton. */ @@ -226,17 +246,6 @@ window_create(gint window_type) 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 - { - popups_active++; - window.startup_users = create_window_startup_users(); - } - strcpy(buf, "Users"); - wind = window.startup_users; - break; case WINDOW_WARNING: if(window.warning != NULL) g_warning("window_create: called on already existing window\n"); @@ -324,10 +333,18 @@ window_create(gint window_type) wind = window.contract; strcpy(buf, "Contract offer"); break; + case WINDOW_USER_MANAGEMENT: + if(window.user_management != NULL) + g_warning("window_create: called on already existing window\n"); + else + window.user_management = create_window_user_management(); + wind = window.user_management; + strcpy(buf, "User management"); + break; } gtk_window_set_title(GTK_WINDOW(wind), buf); - gtk_widget_show(wind); + g_timeout_add(20, (GSourceFunc)window_show, (gpointer)wind); if(popups_active != old_popups_active && window.main != NULL) diff --git a/src/window.h b/src/window.h index 5f37a406..630393e6 100644 --- a/src/window.h +++ b/src/window.h @@ -10,7 +10,6 @@ enum Windows WINDOW_MAIN = 0, WINDOW_STARTUP, WINDOW_LIVE, - WINDOW_STARTUP_USERS, WINDOW_WARNING, WINDOW_PROGRESS, WINDOW_DIGITS, @@ -20,6 +19,7 @@ enum Windows WINDOW_OPTIONS, WINDOW_FONT_SEL, WINDOW_CONTRACT, + WINDOW_USER_MANAGEMENT, WINDOW_END }; @@ -44,4 +44,7 @@ window_show_yesno(gchar *text, gboolean checkbutton); void window_show_options(void); +void +window_show_menu_player(GdkEvent *event); + #endif diff --git a/support_files/bygfoot_constants b/support_files/bygfoot_constants index 0d15901f..c8653d20 100644 --- a/support_files/bygfoot_constants +++ b/support_files/bygfoot_constants @@ -159,6 +159,10 @@ float_treeview_cell_limit_player_contract_below1 10000 float_treeview_cell_limit_player_contract_below2 7000 float_treeview_cell_limit_player_contract_below3 4000 +# the factor that determines how much money the user has to pay +# if he fires a player +float_player_fire_wage_factor 100000 + # the integer that the cell data functions will interpret as an empty string. int_treeview_cell_int_empty -5 @@ -166,6 +170,9 @@ int_treeview_cell_int_empty -5 # info int_treeview_latest_results 10 +# number of matches shown in the preview +int_treeview_coming_matches 4 + # number of |'s for an ideal 442 team in the opponent preview int_treeview_max_pipes 50