1
1
mirror of https://github.com/tstellar/bygfoot.git synced 2025-02-13 18:10:43 +01:00

"Yet another transfer improvement."

This commit is contained in:
gyboth 2005-05-30 15:54:20 +00:00
parent dc80245c5c
commit 7c1f86ef4f
24 changed files with 630 additions and 137 deletions

View File

@ -2114,4 +2114,193 @@
</child>
</widget>
<widget class="GtkWindow" id="window_transfer_dialog">
<property name="border_width">5</property>
<property name="visible">True</property>
<property name="title" translatable="yes"></property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_CENTER</property>
<property name="modal">True</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<signal name="delete_event" handler="on_window_transfer_dialog_delete_event" last_modification_time="Mon, 30 May 2005 14:25:43 GMT"/>
<child>
<widget class="GtkVBox" id="vbox26">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">5</property>
<child>
<widget class="GtkImage" id="image14">
<property name="visible">True</property>
<property name="stock">gtk-dialog-question</property>
<property name="icon_size">6</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label_transfer_dialog">
<property name="visible">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">True</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox25">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">3</property>
<child>
<widget class="GtkButton" id="button_transfer_yes">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Return</property>
<property name="can_focus">True</property>
<property name="label">gtk-yes</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_button_transfer_yes_clicked" last_modification_time="Mon, 30 May 2005 14:31:32 GMT"/>
<accelerator key="Return" modifiers="0" signal="clicked"/>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_transfer_no">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-no</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_button_transfer_no_clicked" last_modification_time="Mon, 30 May 2005 14:31:36 GMT"/>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_transfer_later">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Esc</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_button_transfer_later_clicked" last_modification_time="Mon, 30 May 2005 14:31:40 GMT"/>
<accelerator key="Escape" modifiers="0" signal="clicked"/>
<child>
<widget class="GtkAlignment" id="alignment8">
<property name="visible">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xscale">0</property>
<property name="yscale">0</property>
<property name="top_padding">0</property>
<property name="bottom_padding">0</property>
<property name="left_padding">0</property>
<property name="right_padding">0</property>
<child>
<widget class="GtkHBox" id="hbox26">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">2</property>
<child>
<widget class="GtkImage" id="image15">
<property name="visible">True</property>
<property name="stock">gtk-go-forward</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label53">
<property name="visible">True</property>
<property name="label" translatable="yes">Decide later</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

View File

@ -31,7 +31,7 @@ bygfoot_SOURCES = \
misc_callbacks.c callbacks.h callback_func.h game.h game_gui.h live_game.h load_save.h main.h misc_callback_func.h misc_callbacks.h option.h user.h variables.h window.h xml_country.h \
misc_callback_func.c callbacks.h finance.h game.h game_gui.h gui.h load_save.h maths.h misc_callback_func.h option.h start_end.h support.h treeview.h user.h variables.h window.h xml_country.h xml_name.h \
misc_interface.c misc_interface.h misc_callbacks.h support.h \
misc2_callbacks.c callback_func.h debug.h finance.h game_gui.h load_save.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_callbacks.c callbacks.h callback_func.h debug.h finance.h game_gui.h load_save.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 callbacks.h 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 \
@ -44,7 +44,7 @@ bygfoot_SOURCES = \
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 cup.h finance.h free.h game_gui.h maths.h option.h player.h support.h team.h transfer.h treeview.h user.h \
transfer.c cup.h finance.h free.h game_gui.h maths.h misc.h option.h player.h support.h team.h transfer.h treeview.h user.h \
treeview.c cup.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_helper.h user.h \
treeview_helper.c cup.h file.h fixture.h free.h league.h misc.h option.h player.h support.h team.h transfer.h treeview.h treeview_helper.h user.h variables.h \
user.c cup.h fixture.h free.h game_gui.h league.h live_game.h maths.h misc.h option.h player.h team.h transfer.h treeview.h user.h window.h \

View File

@ -120,6 +120,7 @@ typedef struct
*menu_player,
*user_management,
*wdebug,
*help;
*help,
*transfer_dialog;
} Windows;
#endif

View File

@ -24,6 +24,9 @@ callback_show_next_live_game(void)
{
gint i, j;
for(i=0;i<users->len;i++)
usr(i).counters[COUNT_USER_TOOK_TURN] = 0;
for(i=0;i<ligs->len;i++)
for(j=0;j<lig(i).fixtures->len;j++)
if(g_array_index(lig(i).fixtures, Fixture, j).week_number == week &&
@ -293,7 +296,10 @@ callback_transfer_list_user(gint button, gint idx)
else if(button == 1)
{
if(trans(idx).offers->len == 0)
game_gui_print_message("There are no offers for the player.");
game_gui_print_message(_("There are no offers for the player."));
else if(trans(idx).offers->len > 0 &&
!transoff(idx, 0).accepted)
game_gui_print_message(_("There are some offers for the player which you will see next week."));
else
{
misc_print_grouped_int(transoff(idx, 0).fee, buf2, FALSE);
@ -311,7 +317,7 @@ callback_transfer_list_user(gint button, gint idx)
buf2, buf3);
stat1 = STATUS_TRANSFER_OFFER_USER;
stat2 = idx;
window_show_yesno(buf);
window_show_transfer_dialog(buf);
}
}
}
@ -329,8 +335,11 @@ callback_transfer_list_cpu(gint button, gint idx)
if(button == 3)
{
g_array_remove_index(trans(idx).offers, 0);
trans(idx).locked = FALSE;
if(trans(idx).offers->len > 0)
transfer_offers_notify(&trans(idx), FALSE);
game_gui_print_message(_("Your offer has been removed."));
on_button_transfers_clicked(NULL, NULL);
return;
}
@ -347,7 +356,7 @@ callback_transfer_list_cpu(gint button, gint idx)
buf2, buf3, player_of_id_team(trans(idx).tm, trans(idx).id)->name->str);
stat1 = STATUS_TRANSFER_OFFER_CPU;
stat2 = idx;
window_show_yesno(buf);
window_show_transfer_dialog(buf);
}
/** Handle a click on the transfer list.
@ -364,12 +373,17 @@ callback_transfer_list_clicked(gint button, gint idx)
callback_transfer_list_user(button, idx);
return;
}
else if(tr->locked)
else if(tr->offers->len > 0 &&
transoff(idx, 0).accepted)
{
if(transoff(idx, 0).tm == current_user.tm)
{
if(team_is_user(tr->tm) != -1)
game_gui_print_message(_("The team owners are considering your offer currently."));
{
sprintf(buf, _("User %s didn't consider your offer yet."),
user_from_team(tr->tm)->name->str);
game_gui_print_message(buf);
}
else
callback_transfer_list_cpu(button, idx);
}

View File

@ -166,17 +166,24 @@ void
on_button_new_week_clicked (GtkButton *button,
gpointer user_data)
{
if(!opt_int("int_opt_confirm_unfit") ||
!query_user_teams_have_unfit())
if(transfer_offers_pending())
game_gui_show_warning(_("You still have some transfer business to manage."));
else if(query_user_no_turn())
{
load_save_autosave();
callback_show_next_live_game();
stat1 = STATUS_QUERY_USER_NO_TURN;
window_show_yesno(_("At least one user didn't take his turn this week. Continue?"));
}
else
else if(opt_int("int_opt_confirm_unfit") &&
query_user_teams_have_unfit())
{
stat1 = STATUS_QUERY_UNFIT;
window_show_yesno(_("There are injured or banned players in one of the user teams. Continue?"));
}
else
{
load_save_autosave();
callback_show_next_live_game();
}
}
@ -519,7 +526,7 @@ on_treeview_right_button_press_event (GtkWidget *widget,
{
case STATUS_SHOW_TRANSFER_LIST:
if(trans(idx - 1).tm == current_user.tm ||
trans(idx - 1).locked ||
(trans(idx - 1).offers->len > 0 && transoff(idx - 1, 0).accepted) ||
event->button == 1)
callback_transfer_list_clicked(event->button, idx - 1);
else if(event->button == 3)
@ -551,8 +558,13 @@ void
on_menu_next_user_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
cur_user = (cur_user + 1) % users->len;
if(transfer_offers_pending())
{
game_gui_show_warning(_("You still have some transfer business to manage."));
return;
}
cur_user = (cur_user + 1) % users->len;
user_event_show_next();
on_button_back_to_main_clicked(NULL, NULL);
@ -563,8 +575,13 @@ void
on_menu_previous_user_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
cur_user = (cur_user == 0) ? users->len - 1 : cur_user - 1;
if(transfer_offers_pending())
{
game_gui_show_warning(_("You still have some transfer business to manage."));
return;
}
cur_user = (cur_user == 0) ? users->len - 1 : cur_user - 1;
user_event_show_next();
on_button_back_to_main_clicked(NULL, NULL);

View File

@ -98,6 +98,7 @@ enum Status0Value
STATUS_LOAD_GAME_TEAM_SELECTION,
STATUS_QUERY_UNFIT,
STATUS_QUERY_QUIT,
STATUS_QUERY_USER_NO_TURN,
STATUS_END
};

View File

@ -182,15 +182,18 @@ game_gui_get_radio_items(GtkWidget **style, GtkWidget **scout,
void
game_gui_set_main_window_header(void)
{
gint i;
gchar buf[SMALL];
GtkLabel *label_user= GTK_LABEL(lookup_widget(window.main, "label_user"));
GtkLabel *label_season= GTK_LABEL(lookup_widget(window.main, "label_season"));
GtkLabel *label_week= GTK_LABEL(lookup_widget(window.main, "label_week"));
GtkLabel *label_round= GTK_LABEL(lookup_widget(window.main, "label_round"));
GtkLabel *label_team= GTK_LABEL(lookup_widget(window.main, "label_team"));
GtkLabel *label_league= GTK_LABEL(lookup_widget(window.main, "label_league"));
GtkLabel *label_rank= GTK_LABEL(lookup_widget(window.main, "label_rank"));
GtkLabel *label_money= GTK_LABEL(lookup_widget(window.main, "label_money"));
GtkLabel *label_user= GTK_LABEL(lookup_widget(window.main, "label_user")),
*label_season= GTK_LABEL(lookup_widget(window.main, "label_season")),
*label_week= GTK_LABEL(lookup_widget(window.main, "label_week")),
*label_round= GTK_LABEL(lookup_widget(window.main, "label_round")),
*label_team= GTK_LABEL(lookup_widget(window.main, "label_team")),
*label_league= GTK_LABEL(lookup_widget(window.main, "label_league")),
*label_rank= GTK_LABEL(lookup_widget(window.main, "label_rank")),
*label_money= GTK_LABEL(lookup_widget(window.main, "label_money"));
GtkWidget *menu_users[2] = {lookup_widget(window.main, "menu_next_user"),
lookup_widget(window.main, "menu_previous_user")};
gtk_label_set_text(label_user, current_user.name->str);
gui_label_set_text_from_int(label_season, season, FALSE);
@ -207,6 +210,9 @@ game_gui_set_main_window_header(void)
gtk_label_set_text(label_team, current_user.tm->name->str);
gtk_label_set_text(label_league, league_from_clid(current_user.tm->clid)->name->str);
for(i=0;i<2;i++)
gtk_widget_set_sensitive(menu_users[i], (users->len > 1));
game_gui_write_av_skills();
game_gui_write_radio_items();
@ -322,6 +328,8 @@ game_gui_show_main(void)
game_gui_set_main_window_header();
treeview_show_user_player_list();
current_user.counters[COUNT_USER_TOOK_TURN] = 1;
if(current_user.counters[COUNT_USER_SHOW_RES] && stat0 != STATUS_LIVE_GAME_PAUSE)
{
on_menu_user_show_last_stats_activate(NULL, NULL);
@ -363,7 +371,6 @@ game_gui_clear_entry_message(gpointer data)
enum MainWindowInensitiveItems
{
INSENSITIVE_ITEM_TOOLBAR = 0,
/* INSENSITIVE_ITEM_PLAYER_LIST2, */
INSENSITIVE_ITEM_MENU_FILE,
INSENSITIVE_ITEM_MENU_OPTIONS,
INSENSITIVE_ITEM_MENU_FIGURES,
@ -403,8 +410,6 @@ game_gui_set_main_window_sensitivity(gboolean value)
insensitive_items[INSENSITIVE_ITEM_TOOLBAR] =
lookup_widget(window.main, "hbox1");
/* insensitive_items[INSENSITIVE_ITEM_PLAYER_LIST2] = */
/* lookup_widget(window.main, "vbox8"); */
insensitive_items[INSENSITIVE_ITEM_MENU_FILE] =
lookup_widget(window.main, "menu_file");
insensitive_items[INSENSITIVE_ITEM_MENU_OPTIONS] =

View File

@ -50,6 +50,8 @@ misc2_callback_transfer_user_player(void)
player_of_id_team(trans(stat2).tm, trans(stat2).id)->name->str);
user_event_add(user_from_team(new_team), EVENT_TYPE_WARNING, -1, -1, NULL, buf);
g_array_remove_index(trans(stat2).offers, 0);
if(trans(stat2).offers->len > 0)
transoff(stat2, 0).accepted = TRUE;
}
}
else

View File

@ -1,3 +1,4 @@
#include "callbacks.h"
#include "callback_func.h"
#include "debug.h"
#include "finance.h"
@ -160,12 +161,6 @@ on_button_yesno_yes_clicked (GtkButton *button,
default:
g_warning("on_button_yesno_yes_clicked: unknown status %d\n", stat1);
break;
case STATUS_TRANSFER_OFFER_USER:
misc2_callback_transfer_user_player();
break;
case STATUS_TRANSFER_OFFER_CPU:
misc2_callback_transfer_cpu_player();
break;
case STATUS_FIRE_PLAYER:
player_remove_from_team(current_user.tm, stat2);
current_user.money -= stat3;
@ -188,6 +183,10 @@ on_button_yesno_yes_clicked (GtkButton *button,
case STATUS_QUERY_QUIT:
main_exit_program(EXIT_OK, NULL);
break;
case STATUS_QUERY_USER_NO_TURN:
load_save_autosave();
callback_show_next_live_game();
break;
}
if(stat4 == STATUS_SHOW_EVENT)
@ -395,3 +394,50 @@ on_spinbutton2_activate (GtkEntry *entry,
on_button_digits_ok_clicked(NULL, NULL);
}
gboolean
on_window_transfer_dialog_delete_event (GtkWidget *widget,
GdkEvent *event,
gpointer user_data)
{
on_button_transfer_later_clicked(NULL, NULL);
return FALSE;
}
void
on_button_transfer_yes_clicked (GtkButton *button,
gpointer user_data)
{
if(stat1 == STATUS_TRANSFER_OFFER_USER)
misc2_callback_transfer_user_player();
else if(STATUS_TRANSFER_OFFER_CPU)
misc2_callback_transfer_cpu_player();
window_destroy(&window.transfer_dialog, FALSE);
}
void
on_button_transfer_no_clicked (GtkButton *button,
gpointer user_data)
{
g_array_remove_index(trans(stat2).offers, 0);
if(trans(stat2).offers->len > 0)
transfer_offers_notify(&trans(stat2), FALSE);
treeview_show_user_player_list();
game_gui_set_main_window_header();
on_button_transfers_clicked(NULL, NULL);
window_destroy(&window.transfer_dialog, FALSE);
}
void
on_button_transfer_later_clicked (GtkButton *button,
gpointer user_data)
{
window_destroy(&window.transfer_dialog, FALSE);
}

View File

@ -124,7 +124,6 @@ on_window_help_delete_event (GtkWidget *widget,
void
on_button_help_close_clicked (GtkButton *button,
gpointer user_data);
#endif
void
on_spinbutton1_activate (GtkEntry *entry,
@ -133,3 +132,21 @@ on_spinbutton1_activate (GtkEntry *entry,
void
on_spinbutton2_activate (GtkEntry *entry,
gpointer user_data);
gboolean
on_window_transfer_dialog_delete_event (GtkWidget *widget,
GdkEvent *event,
gpointer user_data);
void
on_button_transfer_yes_clicked (GtkButton *button,
gpointer user_data);
void
on_button_transfer_no_clicked (GtkButton *button,
gpointer user_data);
void
on_button_transfer_later_clicked (GtkButton *button,
gpointer user_data);
#endif

View File

@ -1094,3 +1094,116 @@ create_window_help (void)
return window_help;
}
GtkWidget*
create_window_transfer_dialog (void)
{
GtkWidget *window_transfer_dialog;
GtkWidget *vbox26;
GtkWidget *image14;
GtkWidget *label_transfer_dialog;
GtkWidget *hbox25;
GtkWidget *button_transfer_yes;
GtkWidget *button_transfer_no;
GtkWidget *button_transfer_later;
GtkWidget *alignment8;
GtkWidget *hbox26;
GtkWidget *image15;
GtkWidget *label53;
GtkAccelGroup *accel_group;
GtkTooltips *tooltips;
tooltips = gtk_tooltips_new ();
accel_group = gtk_accel_group_new ();
window_transfer_dialog = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width (GTK_CONTAINER (window_transfer_dialog), 5);
gtk_window_set_position (GTK_WINDOW (window_transfer_dialog), GTK_WIN_POS_CENTER);
gtk_window_set_modal (GTK_WINDOW (window_transfer_dialog), TRUE);
vbox26 = gtk_vbox_new (FALSE, 5);
gtk_widget_show (vbox26);
gtk_container_add (GTK_CONTAINER (window_transfer_dialog), vbox26);
image14 = gtk_image_new_from_stock ("gtk-dialog-question", GTK_ICON_SIZE_DIALOG);
gtk_widget_show (image14);
gtk_box_pack_start (GTK_BOX (vbox26), image14, FALSE, TRUE, 0);
label_transfer_dialog = gtk_label_new ("");
gtk_widget_show (label_transfer_dialog);
gtk_box_pack_start (GTK_BOX (vbox26), label_transfer_dialog, FALSE, FALSE, 0);
gtk_label_set_line_wrap (GTK_LABEL (label_transfer_dialog), TRUE);
hbox25 = gtk_hbox_new (FALSE, 3);
gtk_widget_show (hbox25);
gtk_box_pack_start (GTK_BOX (vbox26), hbox25, FALSE, FALSE, 0);
button_transfer_yes = gtk_button_new_from_stock ("gtk-yes");
gtk_widget_show (button_transfer_yes);
gtk_box_pack_start (GTK_BOX (hbox25), button_transfer_yes, TRUE, TRUE, 0);
gtk_tooltips_set_tip (tooltips, button_transfer_yes, _("Return"), NULL);
gtk_widget_add_accelerator (button_transfer_yes, "clicked", accel_group,
GDK_Return, 0,
GTK_ACCEL_VISIBLE);
button_transfer_no = gtk_button_new_from_stock ("gtk-no");
gtk_widget_show (button_transfer_no);
gtk_box_pack_start (GTK_BOX (hbox25), button_transfer_no, TRUE, TRUE, 0);
button_transfer_later = gtk_button_new ();
gtk_widget_show (button_transfer_later);
gtk_box_pack_start (GTK_BOX (hbox25), button_transfer_later, TRUE, TRUE, 0);
gtk_tooltips_set_tip (tooltips, button_transfer_later, _("Esc"), NULL);
gtk_widget_add_accelerator (button_transfer_later, "clicked", accel_group,
GDK_Escape, 0,
GTK_ACCEL_VISIBLE);
alignment8 = gtk_alignment_new (0.5, 0.5, 0, 0);
gtk_widget_show (alignment8);
gtk_container_add (GTK_CONTAINER (button_transfer_later), alignment8);
hbox26 = gtk_hbox_new (FALSE, 2);
gtk_widget_show (hbox26);
gtk_container_add (GTK_CONTAINER (alignment8), hbox26);
image15 = gtk_image_new_from_stock ("gtk-go-forward", GTK_ICON_SIZE_BUTTON);
gtk_widget_show (image15);
gtk_box_pack_start (GTK_BOX (hbox26), image15, FALSE, FALSE, 0);
label53 = gtk_label_new_with_mnemonic (_("Decide later"));
gtk_widget_show (label53);
gtk_box_pack_start (GTK_BOX (hbox26), label53, FALSE, FALSE, 0);
g_signal_connect ((gpointer) window_transfer_dialog, "delete_event",
G_CALLBACK (on_window_transfer_dialog_delete_event),
NULL);
g_signal_connect ((gpointer) button_transfer_yes, "clicked",
G_CALLBACK (on_button_transfer_yes_clicked),
NULL);
g_signal_connect ((gpointer) button_transfer_no, "clicked",
G_CALLBACK (on_button_transfer_no_clicked),
NULL);
g_signal_connect ((gpointer) button_transfer_later, "clicked",
G_CALLBACK (on_button_transfer_later_clicked),
NULL);
/* Store pointers to all widgets, for use by lookup_widget(). */
GLADE_HOOKUP_OBJECT_NO_REF (window_transfer_dialog, window_transfer_dialog, "window_transfer_dialog");
GLADE_HOOKUP_OBJECT (window_transfer_dialog, vbox26, "vbox26");
GLADE_HOOKUP_OBJECT (window_transfer_dialog, image14, "image14");
GLADE_HOOKUP_OBJECT (window_transfer_dialog, label_transfer_dialog, "label_transfer_dialog");
GLADE_HOOKUP_OBJECT (window_transfer_dialog, hbox25, "hbox25");
GLADE_HOOKUP_OBJECT (window_transfer_dialog, button_transfer_yes, "button_transfer_yes");
GLADE_HOOKUP_OBJECT (window_transfer_dialog, button_transfer_no, "button_transfer_no");
GLADE_HOOKUP_OBJECT (window_transfer_dialog, button_transfer_later, "button_transfer_later");
GLADE_HOOKUP_OBJECT (window_transfer_dialog, alignment8, "alignment8");
GLADE_HOOKUP_OBJECT (window_transfer_dialog, hbox26, "hbox26");
GLADE_HOOKUP_OBJECT (window_transfer_dialog, image15, "image15");
GLADE_HOOKUP_OBJECT (window_transfer_dialog, label53, "label53");
GLADE_HOOKUP_OBJECT_NO_REF (window_transfer_dialog, tooltips, "tooltips");
gtk_window_add_accel_group (GTK_WINDOW (window_transfer_dialog), accel_group);
return window_transfer_dialog;
}

View File

@ -11,3 +11,4 @@ GtkWidget* create_window_contract (void);
GtkWidget* create_window_user_management (void);
GtkWidget* create_window_debug (void);
GtkWidget* create_window_help (void);
GtkWidget* create_window_transfer_dialog (void);

View File

@ -3,6 +3,7 @@
#include "free.h"
#include "game_gui.h"
#include "maths.h"
#include "misc.h"
#include "option.h"
#include "player.h"
#include "support.h"
@ -28,14 +29,10 @@ transfer_update(void)
}
for(i=transfer_list->len - 1;i>=0;i--)
{
for(j=trans(i).offers->len - 1;j>=0;j--)
if(trans(i).locked || team_is_user(transoff(i, j).tm) == -1)
if(transoff(i, j).accepted || team_is_user(transoff(i, j).tm) == -1)
g_array_remove_index(trans(i).offers, j);
trans(i).locked = FALSE;
}
transfer_add_new_players();
transfer_add_cpu_offers();
transfer_evaluate_offers();
@ -110,82 +107,37 @@ transfer_offer_compare_func(gconstpointer a, gconstpointer b)
*tr2 = (const TransferOffer*)b;
gint return_value;
if(tr1->fee > tr2->fee)
return_value = -1;
else if(tr2->fee > tr1->fee)
return_value = 1;
else if(tr1->wage > tr2->wage)
return_value = -1;
else if(tr2->wage > tr1->wage)
return_value = 1;
else
return_value = 0;
return_value = (tr1->fee != tr2->fee) ?
misc_int_compare(tr1->fee, tr2->fee) :
misc_int_compare(tr1->wage, tr2->wage);
return return_value;
}
/** Send notification events about rejected transfer offers for
/** Send notification events about accepted transfer offers for
user players. */
void
transfer_offers_notify(Transfer *tr)
transfer_offers_notify(Transfer *tr, gboolean sort)
{
gint i;
gboolean valid_offer = FALSE;
TransferOffer *off = NULL;
g_array_sort(tr->offers, transfer_offer_compare_func);
if(sort)
g_array_sort(tr->offers, transfer_offer_compare_func);
off = &g_array_index(tr->offers, TransferOffer, 0);
for(i=tr->offers->len - 1; i >= 1; i--)
{
if(team_is_user(g_array_index(tr->offers, TransferOffer, i).tm) != -1)
user_event_add(user_from_team(g_array_index(tr->offers, TransferOffer, i).tm),
EVENT_TYPE_TRANSFER_OFFER_REJECTED_BETTER_OFFER,
g_array_index(tr->offers, TransferOffer, i).fee,
g_array_index(tr->offers, TransferOffer, i).wage,
tr->tm, player_of_id_team(tr->tm, tr->id)->name->str);
g_array_remove_index(tr->offers, i);
}
off->accepted = TRUE;
if(team_is_user(tr->tm) != -1)
{
user_event_add(user_from_team(tr->tm), EVENT_TYPE_TRANSFER_OFFER_USER,
-1, -1, NULL, player_of_id_team(tr->tm, tr->id)->name->str);
valid_offer = TRUE;
tr->locked = TRUE;
}
else if(player_of_id_team(tr->tm, tr->id)->value > off->fee &&
player_of_id_team(tr->tm, tr->id)->wage > off->wage)
user_event_add(user_from_team(off->tm),
EVENT_TYPE_TRANSFER_OFFER_REJECTED_FEE_WAGE,
off->fee, off->wage,
tr->tm, player_of_id_team(tr->tm, tr->id)->name->str);
else if(player_of_id_team(tr->tm, tr->id)->value > off->fee)
user_event_add(user_from_team(off->tm),
EVENT_TYPE_TRANSFER_OFFER_REJECTED_FEE,
off->fee, off->wage,
tr->tm, player_of_id_team(tr->tm, tr->id)->name->str);
else if(player_of_id_team(tr->tm, tr->id)->wage > off->wage)
user_event_add(user_from_team(off->tm),
EVENT_TYPE_TRANSFER_OFFER_REJECTED_WAGE,
off->fee, off->wage,
tr->tm, player_of_id_team(tr->tm, tr->id)->name->str);
else if(off->tm->players->len >= const_int("int_team_max_players"))
user_event_add(user_from_team(off->tm),
EVENT_TYPE_TRANSFER_OFFER_ROSTER, -1, -1,
tr->tm, player_of_id_team(tr->tm, tr->id)->name->str);
else
{
user_event_add(user_from_team(off->tm),
EVENT_TYPE_TRANSFER_OFFER_CPU, -1, -1,
NULL, player_of_id_team(tr->tm, tr->id)->name->str);
valid_offer = TRUE;
tr->locked = TRUE;
}
if(!valid_offer)
g_array_remove_index(tr->offers, 0);
if(!sort)
user_event_show_next();
}
/** Move players to the users' teams if their offer
@ -198,18 +150,40 @@ transfer_evaluate_offers(void)
for(i=transfer_list->len - 1;i>=0;i--)
if(trans(i).offers->len > 0)
{
for(j=trans(i).offers->len - 1;j >= 0; j--)
if(team_is_user(transoff(i, j).tm) != -1 &&
transoff(i, j).fee > BUDGET(team_is_user(transoff(i, j).tm)))
if(team_is_user(trans(i).tm) == -1)
{
for(j=trans(i).offers->len - 1; j >= 0; j--)
{
user_event_add(user_from_team(transoff(i, j).tm),
EVENT_TYPE_TRANSFER_OFFER_MONEY, -1, -1,
trans(i).tm, player_of_id_team(trans(i).tm, trans(i).id)->name->str);
g_array_remove_index(trans(i).offers, j);
if(player_of_id_team(trans(i).tm, trans(i).id)->value > transoff(i, j).fee &&
player_of_id_team(trans(i).tm, trans(i).id)->wage > transoff(i, j).wage)
{
user_event_add(user_from_team(transoff(i, j).tm),
EVENT_TYPE_TRANSFER_OFFER_REJECTED_FEE_WAGE,
transoff(i, j).fee, transoff(i, j).wage,
trans(i).tm, player_of_id_team(trans(i).tm, trans(i).id)->name->str);
g_array_remove_index(trans(i).offers, j);
}
else if(player_of_id_team(trans(i).tm, trans(i).id)->value > transoff(i, j).fee)
{
user_event_add(user_from_team(transoff(i, j).tm),
EVENT_TYPE_TRANSFER_OFFER_REJECTED_FEE,
transoff(i, j).fee, transoff(i, j).wage,
trans(i).tm, player_of_id_team(trans(i).tm, trans(i).id)->name->str);
g_array_remove_index(trans(i).offers, j);
}
else if(player_of_id_team(trans(i).tm, trans(i).id)->wage > transoff(i, j).wage)
{
user_event_add(user_from_team(transoff(i, j).tm),
EVENT_TYPE_TRANSFER_OFFER_REJECTED_WAGE,
transoff(i, j).fee, transoff(i, j).wage,
trans(i).tm, player_of_id_team(trans(i).tm, trans(i).id)->name->str);
g_array_remove_index(trans(i).offers, j);
}
}
}
if(trans(i).offers->len > 0)
transfer_offers_notify(&trans(i));
transfer_offers_notify(&trans(i), TRUE);
}
}
@ -267,7 +241,6 @@ transfer_add_player(Player *pl, gint time)
new.id = pl->id;
new.time = time;
new.offers = g_array_new(FALSE, FALSE, sizeof(TransferOffer));
new.locked = FALSE;
for(i=0;i<4;i++)
{
@ -360,7 +333,8 @@ transfer_player_has_offer(const Player *pl)
for(i=0;i<transfer_list->len;i++)
if(trans(i).tm == pl->team &&
trans(i).id == pl->id &&
trans(i).locked)
trans(i).offers->len > 0 &&
transoff(i, 0).accepted)
return &transoff(i, 0);
return NULL;
@ -374,10 +348,6 @@ transfer_add_offer(gint idx, Team *tm, gint fee, gint wage)
gint i;
TransferOffer new;
new.tm = tm;
new.fee = fee;
new.wage = wage;
for(i=0;i<trans(idx).offers->len;i++)
if(transoff(idx, i).tm == tm)
{
@ -386,6 +356,11 @@ transfer_add_offer(gint idx, Team *tm, gint fee, gint wage)
return TRUE;
}
new.tm = tm;
new.fee = fee;
new.wage = wage;
new.accepted = FALSE;
g_array_append_val(trans(idx).offers, new);
return FALSE;
@ -445,3 +420,24 @@ transfer_add_remove_user_player(Player *pl)
treeview_show_transfer_list(GTK_TREE_VIEW(lookup_widget(window.main, "treeview_right")));
}
/** Find out whether the current user has to do
some transfer business before a user change or
a new week. */
gboolean
transfer_offers_pending(void)
{
gint i;
for(i=0;i<transfer_list->len;i++)
if((trans(i).tm == current_user.tm &&
trans(i).offers->len > 0 &&
transoff(i, 0).accepted) ||
(team_is_user(trans(i).tm) == -1 &&
trans(i).offers->len > 0 &&
transoff(i, 0).tm == current_user.tm &&
transoff(i, 0).accepted))
return TRUE;
return FALSE;
}

View File

@ -60,7 +60,7 @@ void
transfer_add_remove_user_player(Player *pl);
void
transfer_offers_notify(Transfer *trans);
transfer_offers_notify(Transfer *trans, gboolean sort);
const TransferOffer*
transfer_player_has_offer(const Player *pl);
@ -68,4 +68,7 @@ transfer_player_has_offer(const Player *pl);
gboolean
query_transfer_current_team_offer(const Player *pl);
gboolean
transfer_offers_pending(void);
#endif

View File

@ -18,8 +18,6 @@ typedef struct
gint fee[QUALITY_END], wage[QUALITY_END];
/** Offers for the player. */
GArray *offers;
/** This is true if an accepted offer is pending. */
gboolean locked;
} Transfer;
typedef struct
@ -28,7 +26,8 @@ typedef struct
Team *tm;
/** Transfer fee and wage offer. */
gint fee, wage;
/** Whether the offer got accepted. */
gboolean accepted;
} TransferOffer;
#endif

View File

@ -963,14 +963,19 @@ treeview_helper_player_name_to_cell(GtkCellRenderer *renderer, gchar *buf, const
}
else if(off->tm == current_user.tm)
{
colour_bg = const_app("string_treeview_helper_color_transfer_offer_locked_cpu_bg");
colour_fg = const_app("string_treeview_helper_color_transfer_offer_locked_cpu_fg");
colour_bg = const_app("string_treeview_helper_color_transfer_offer_accepted_current_bg");
colour_fg = const_app("string_treeview_helper_color_transfer_offer_accepted_current_fg");
}
else
{
colour_bg = const_app("string_treeview_helper_color_transfer_offer_accepted_other_bg");
colour_fg = const_app("string_treeview_helper_color_transfer_offer_accepted_other_fg");
}
}
else if(query_transfer_current_team_offer(pl))
{
colour_bg = const_app("string_treeview_helper_color_transfer_offer_cpu_bg");
colour_fg = const_app("string_treeview_helper_color_transfer_offer_cpu_fg");
colour_bg = const_app("string_treeview_helper_color_transfer_offer_bg");
colour_fg = const_app("string_treeview_helper_color_transfer_offer_fg");
}
g_object_set(renderer, "background", colour_bg, NULL);

View File

@ -765,3 +765,17 @@ user_history_to_string(const UserHistory *history, gchar *buf)
break;
}
}
/** Find out whether there's a user who
didn't have his turn before a new week round begins. */
gboolean
query_user_no_turn(void)
{
gint i;
for(i=0;i<users->len;i++)
if(!usr(i).counters[COUNT_USER_TOOK_TURN])
return TRUE;
return FALSE;
}

View File

@ -82,4 +82,7 @@ user_history_compare(gconstpointer a, gconstpointer b);
void
user_job_offer(User *user);
gboolean
query_user_no_turn(void);
#endif

View File

@ -45,6 +45,7 @@ enum CounterValue
COUNT_USER_STADIUM_CAPACITY, /**< Counter for building stadium seats. */
COUNT_USER_STADIUM_SAFETY, /**< Counter for increasing stadium safety. */
COUNT_USER_SHOW_RES, /**< Whether the latest result is shown when the main window gets refreshed. */
COUNT_USER_TOOK_TURN, /**< Whether the user took his turn in a week round. */
COUNT_USER_END
};

View File

@ -134,7 +134,8 @@ window_show_menu_player(GdkEvent *event)
/** Show the digits window with the labels and values set
according to the arguments. */
void
window_show_digits(gchar *text_main, gchar* text1, gint value1, gchar* text2, gint value2)
window_show_digits(const gchar *text_main, const gchar* text1, gint value1,
const gchar* text2, gint value2)
{
GtkLabel *label_main, *label_1, *label_2;
GtkSpinButton *spinbutton1, *spinbutton2;
@ -232,16 +233,23 @@ window_show(gpointer window)
}
/** 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. */
@param text The text shown in the window. */
void
window_show_yesno(gchar *text)
window_show_yesno(const gchar *text)
{
window_create(WINDOW_YESNO);
gtk_label_set_text(GTK_LABEL(lookup_widget(window.yesno, "label_yesno")), text);
}
/** Show the transfer dialog (yes/no/later).
@param text The text to put into the label. */
void
window_show_transfer_dialog(const gchar *text)
{
window_create(WINDOW_TRANSFER_DIALOG);
gtk_label_set_text(GTK_LABEL(lookup_widget(window.transfer_dialog, "label_transfer_dialog")), text);
}
/** Set the spinbuttons in the live window
to the correct values. */
void
@ -428,6 +436,14 @@ window_create(gint window_type)
window.help = create_window_help();
wind = window.help;
break;
case WINDOW_TRANSFER_DIALOG:
if(window.transfer_dialog != NULL)
g_warning("window_create: called on already existing window\n");
else
window.transfer_dialog = create_window_transfer_dialog();
wind = window.transfer_dialog;
strcpy(buf, "Transfer offer");
break;
}
gtk_window_set_title(GTK_WINDOW(wind), buf);

View File

@ -23,6 +23,7 @@ enum Windows
WINDOW_USER_MANAGEMENT,
WINDOW_DEBUG,
WINDOW_HELP,
WINDOW_TRANSFER_DIALOG,
WINDOW_END
};
@ -39,7 +40,8 @@ void
window_destroy(GtkWidget **wind, gboolean count_popups);
void
window_show_digits(gchar *text_main, gchar* text1, gint value1, gchar* text2, gint value2);
window_show_digits(const gchar *text_main, const gchar* text1,
gint value1, const gchar* text2, gint value2);
void
window_show_file_sel(void);
@ -48,7 +50,7 @@ void
window_show_stadium(void);
void
window_show_yesno(gchar *text);
window_show_yesno(const gchar *text);
void
window_show_options(void);
@ -59,4 +61,7 @@ window_show_menu_player(GdkEvent *event);
void
window_live_set_spinbuttons(void);
void
window_show_transfer_dialog(const gchar *text);
#endif

View File

@ -10,7 +10,6 @@ enum
TAG_TRANSFERS = TAG_START_TRANSFERS,
TAG_TRANSFER,
TAG_TRANSFER_PLAYER_ID,
TAG_TRANSFER_LOCKED,
TAG_TRANSFER_TIME,
TAG_TRANSFER_FEE,
TAG_TRANSFER_WAGE,
@ -18,6 +17,7 @@ enum
TAG_TRANSFER_OFFER_TEAM_ID,
TAG_TRANSFER_OFFER_FEE,
TAG_TRANSFER_OFFER_WAGE,
TAG_TRANSFER_OFFER_ACCEPTED,
TAG_END
};
@ -77,7 +77,6 @@ xml_loadsave_transfers_end_element (GMarkupParseContext *context,
}
else if(tag == TAG_TEAM_ID ||
tag == TAG_TRANSFER_PLAYER_ID ||
tag == TAG_TRANSFER_LOCKED ||
tag == TAG_TRANSFER_TIME ||
tag == TAG_TRANSFER_FEE ||
tag == TAG_TRANSFER_OFFER ||
@ -93,6 +92,7 @@ xml_loadsave_transfers_end_element (GMarkupParseContext *context,
}
else if(tag == TAG_TRANSFER_OFFER_WAGE ||
tag == TAG_TRANSFER_OFFER_FEE ||
tag == TAG_TRANSFER_OFFER_ACCEPTED ||
tag == TAG_TRANSFER_OFFER_TEAM_ID)
state = TAG_TRANSFER_OFFER;
else if(tag != TAG_TRANSFERS)
@ -119,8 +119,6 @@ xml_loadsave_transfers_text (GMarkupParseContext *context,
new_transfer.tm = team_of_id(int_value);
else if(state == TAG_TRANSFER_PLAYER_ID)
new_transfer.id = int_value;
else if(state == TAG_TRANSFER_LOCKED)
new_transfer.locked = int_value;
else if(state == TAG_TRANSFER_TIME)
new_transfer.time = int_value;
else if(state == TAG_TRANSFER_FEE)
@ -131,6 +129,8 @@ xml_loadsave_transfers_text (GMarkupParseContext *context,
new_offer.tm = team_of_id(int_value);
else if(state == TAG_TRANSFER_OFFER_WAGE)
new_offer.wage = int_value;
else if(state == TAG_TRANSFER_OFFER_ACCEPTED)
new_offer.accepted = int_value;
else if(state == TAG_TRANSFER_OFFER_FEE)
new_offer.fee = int_value;
}
@ -187,7 +187,6 @@ xml_loadsave_transfers_write(const gchar *prefix)
xml_write_int(fil, trans(i).tm->id, TAG_TEAM_ID, I1);
xml_write_int(fil, trans(i).id, TAG_TRANSFER_PLAYER_ID, I1);
xml_write_int(fil, trans(i).locked, TAG_TRANSFER_LOCKED, I1);
xml_write_int(fil, trans(i).time, TAG_TRANSFER_TIME, I1);
for(j=0;j<QUALITY_END;j++)
@ -204,6 +203,8 @@ xml_loadsave_transfers_write(const gchar *prefix)
TAG_TRANSFER_OFFER_TEAM_ID, I2);
xml_write_int(fil, transoff(i, j).wage,
TAG_TRANSFER_OFFER_WAGE, I2);
xml_write_int(fil, transoff(i, j).accepted,
TAG_TRANSFER_OFFER_ACCEPTED, I2);
xml_write_int(fil, transoff(i, j).fee,
TAG_TRANSFER_OFFER_FEE, I2);

View File

@ -28,12 +28,18 @@ enum
TAG_USER_HISTORY_VALUE1,
TAG_USER_HISTORY_VALUE2,
TAG_USER_HISTORY_VALUE_STRING,
TAG_USER_EVENT,
TAG_USER_EVENT_TYPE,
TAG_USER_EVENT_VALUE1,
TAG_USER_EVENT_VALUE2,
TAG_USER_EVENT_VALUE_STRING,
TAG_END
};
gint state, idx_mon_in, idx_mon_out, idx;
User new_user;
UserHistory new_history;
Event new_event;
void
xml_loadsave_users_start_element (GMarkupParseContext *context,
@ -98,7 +104,8 @@ xml_loadsave_users_end_element (GMarkupParseContext *context,
tag == TAG_USER_PHYSIO ||
tag == TAG_NAME ||
tag == TAG_TEAM_ID ||
tag == TAG_USER_HISTORY)
tag == TAG_USER_HISTORY ||
tag == TAG_USER_EVENT)
{
state = TAG_USER;
if(tag == TAG_USER_COUNTER)
@ -109,6 +116,8 @@ xml_loadsave_users_end_element (GMarkupParseContext *context,
idx_mon_in++;
else if(tag == TAG_USER_HISTORY)
g_array_append_val(new_user.history, new_history);
else if(tag == TAG_USER_EVENT)
g_array_append_val(new_user.events, new_event);
}
else if(tag == TAG_USER_MONEY_OUT)
{
@ -128,6 +137,11 @@ xml_loadsave_users_end_element (GMarkupParseContext *context,
tag == TAG_USER_HISTORY_VALUE2 ||
tag == TAG_USER_HISTORY_VALUE_STRING)
state = TAG_USER_HISTORY;
else if(tag == TAG_USER_EVENT_TYPE ||
tag == TAG_USER_EVENT_VALUE1 ||
tag == TAG_USER_EVENT_VALUE2 ||
tag == TAG_USER_EVENT_VALUE_STRING)
state = TAG_USER_EVENT;
else if(tag != TAG_USERS)
g_warning("xml_loadsave_users_end_element: unknown tag: %s; I'm in state %d\n",
element_name, state);
@ -183,6 +197,14 @@ xml_loadsave_users_text (GMarkupParseContext *context,
new_history.value2 = int_value;
else if(state == TAG_USER_HISTORY_VALUE_STRING)
new_history.value_string = g_string_new(buf);
else if(state == TAG_USER_EVENT_TYPE)
new_event.type = int_value;
else if(state == TAG_USER_EVENT_VALUE1)
new_event.value1 = int_value;
else if(state == TAG_USER_EVENT_VALUE2)
new_event.value2 = int_value;
else if(state == TAG_USER_EVENT_VALUE_STRING)
new_event.value_string = g_string_new(buf);
}
void
@ -294,6 +316,22 @@ xml_loadsave_users_write(const gchar *prefix)
fprintf(fil, "%s</_%d>\n", I1, TAG_USER_HISTORY);
}
for(j=0;j<usr(i).events->len;j++)
{
fprintf(fil, "%s<_%d>\n", I1, TAG_USER_EVENT);
xml_write_int(fil, g_array_index(usr(i).events, Event, j).type,
TAG_USER_EVENT_TYPE, I2);
xml_write_int(fil, g_array_index(usr(i).events, Event, j).value1,
TAG_USER_EVENT_VALUE1, I2);
xml_write_int(fil, g_array_index(usr(i).events, Event, j).value2,
TAG_USER_EVENT_VALUE2, I2);
xml_write_g_string(fil, g_array_index(usr(i).events, Event, j).value_string,
TAG_USER_EVENT_VALUE_STRING, I2);
fprintf(fil, "%s</_%d>\n", I1, TAG_USER_EVENT);
}
fprintf(fil, "</_%d>\n", TAG_USER);
}

View File

@ -28,16 +28,22 @@ string_treeview_helper_color_default_foreground black
string_treeview_helper_color_transfer_offer_user_fg white
string_treeview_helper_color_transfer_offer_user_bg darkgreen
# colours for cpu players on the list that have
# a valid (locked) offer
string_treeview_helper_color_transfer_offer_locked_cpu_fg white
string_treeview_helper_color_transfer_offer_locked_cpu_bg darkorange
# colours for players on the list that have
# an accepted offer by the current user
string_treeview_helper_color_transfer_offer_accepted_current_fg white
string_treeview_helper_color_transfer_offer_accepted_current_bg darkorange
# colours for players on the list that have
# an accepted offer by another user
string_treeview_helper_color_transfer_offer_accepted_other_fg white
string_treeview_helper_color_transfer_offer_accepted_other_bg darkred
# colours for cpu players for which the user just
# placed an offer
string_treeview_helper_color_transfer_offer_cpu_fg black
string_treeview_helper_color_transfer_offer_cpu_bg lightblue
string_treeview_helper_color_transfer_offer_fg black
string_treeview_helper_color_transfer_offer_bg lightblue
# player attribute colours
string_treeview_helper_color_player_pos_goalie_bg black
string_treeview_helper_color_player_pos_goalie_fg white
string_treeview_helper_color_player_pos_defender_bg darkgreen