diff --git a/bygfoot_misc3.glade b/bygfoot_misc3.glade
index 19ada78b..6e26a9a0 100644
--- a/bygfoot_misc3.glade
+++ b/bygfoot_misc3.glade
@@ -1626,7 +1626,7 @@
GTK_WINDOW_TOPLEVEL
GTK_WIN_POS_CENTER
False
- 560
+ 700
600
True
False
diff --git a/src/free.c b/src/free.c
index d5e9ffbe..c5cdbd6d 100644
--- a/src/free.c
+++ b/src/free.c
@@ -770,11 +770,7 @@ free_newspaper(gboolean reset)
gint i;
for(i = 0; i < newspaper.articles->len; i++)
- {
- g_free(g_array_index(newspaper.articles, NewsPaperArticle, i).title_small);
- g_free(g_array_index(newspaper.articles, NewsPaperArticle, i).title);
- g_free(g_array_index(newspaper.articles, NewsPaperArticle, i).subtitle);
- }
+ free_newspaper_article(&g_array_index(newspaper.articles, NewsPaperArticle, i));
g_array_free(newspaper.articles, TRUE);
@@ -782,6 +778,14 @@ free_newspaper(gboolean reset)
newspaper.articles = g_array_new(FALSE, FALSE, sizeof(NewsPaperArticle));
}
+void
+free_newspaper_article(NewsPaperArticle *article)
+{
+ g_free(article->title_small);
+ g_free(article->title);
+ g_free(article->subtitle);
+}
+
/**
Free a GPtrArray containing strings.
@param array The array to be freed.
diff --git a/src/free.h b/src/free.h
index 62138d46..9bfb7ff9 100644
--- a/src/free.h
+++ b/src/free.h
@@ -32,6 +32,7 @@
#include "league_struct.h"
#include "live_game_struct.h"
#include "name_struct.h"
+#include "news_struct.h"
#include "player_struct.h"
#include "team_struct.h"
#include "user_struct.h"
@@ -152,6 +153,9 @@ free_news(gboolean reset);
void
free_newspaper(gboolean reset);
+void
+free_newspaper_article(NewsPaperArticle *article);
+
void
free_cup_round(CupRound *cup_round);
diff --git a/src/misc3_interface.c b/src/misc3_interface.c
index 42787a9b..2a07a123 100644
--- a/src/misc3_interface.c
+++ b/src/misc3_interface.c
@@ -789,7 +789,7 @@ create_window_news (void)
window_news = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window_news), _("Bygfoot News"));
gtk_window_set_position (GTK_WINDOW (window_news), GTK_WIN_POS_CENTER);
- gtk_window_set_default_size (GTK_WINDOW (window_news), 560, 600);
+ gtk_window_set_default_size (GTK_WINDOW (window_news), 700, 600);
vbox6 = gtk_vbox_new (FALSE, 0);
gtk_widget_show (vbox6);
diff --git a/src/news.c b/src/news.c
index f7566640..00410363 100644
--- a/src/news.c
+++ b/src/news.c
@@ -83,6 +83,7 @@ news_generate_match(const LiveGame *live_game)
new_article.title_id = title_id;
new_article.subtitle_id = subtitle_id;
new_article.user_idx = fixture_user_team_involved(live_game->fix);
+ new_article.clid = live_game->fix->clid;
if(counters[COUNT_NEW_NEWS] == 0)
counters[COUNT_NEW_NEWS] = 2;
diff --git a/src/news_struct.h b/src/news_struct.h
index 76cb7d6c..f79cac13 100644
--- a/src/news_struct.h
+++ b/src/news_struct.h
@@ -78,6 +78,7 @@ typedef struct
{
gint week_number, week_round_number;
gint title_id, subtitle_id;
+ gint clid;
gchar *title_small, *title, *subtitle;
gint id;
gint user_idx;
diff --git a/src/start_end.c b/src/start_end.c
index 891ed153..34eb3a13 100644
--- a/src/start_end.c
+++ b/src/start_end.c
@@ -539,6 +539,13 @@ end_week_round_generate_news(void)
for(i = 0; i < live_games->len; i++)
if(news_check_match_relevant(&g_array_index(live_games, LiveGame, i)))
news_generate_match(&g_array_index(live_games, LiveGame, i));
+
+ /* Get rid of older news. */
+ while(newspaper.articles->len > const_int("int_news_history_length"))
+ {
+ free_newspaper_article(&g_array_index(newspaper.articles, NewsPaperArticle, 0));
+ g_array_remove_index(newspaper.articles, 0);
+ }
}
/** Start a new week round. */
diff --git a/src/treeview2.c b/src/treeview2.c
index 09270cda..ccd49c1c 100644
--- a/src/treeview2.c
+++ b/src/treeview2.c
@@ -590,6 +590,7 @@ treeview2_create_news(GtkListStore *ls)
gint i;
GtkTreeIter iter;
gchar buf[SMALL], buf2[SMALL];
+ gboolean second_column;
if(newspaper.articles->len == 0)
{
@@ -603,6 +604,11 @@ treeview2_create_news(GtkListStore *ls)
for(i = newspaper.articles->len - 1; i >= 0; i--)
{
+ second_column = (i == newspaper.articles->len - 1 ||
+ (i < newspaper.articles->len - 1 &&
+ g_array_index(newspaper.articles, NewsPaperArticle, i).clid !=
+ g_array_index(newspaper.articles, NewsPaperArticle, i + 1).clid));
+
if(!opt_int("int_opt_news_show_recent") ||
g_array_index(newspaper.articles, NewsPaperArticle, i).week_number == week - 1)
{
@@ -614,7 +620,7 @@ treeview2_create_news(GtkListStore *ls)
g_array_index(newspaper.articles, NewsPaperArticle, i + 1).week_round_number)))
{
gtk_list_store_append(ls, &iter);
- gtk_list_store_set(ls, &iter, 0, "", 1, NULL, -1);
+ gtk_list_store_set(ls, &iter, 0, "", 1, NULL, 2, NULL, -1);
gtk_list_store_append(ls, &iter);
sprintf(buf2, _("Week %d Round %d"),
@@ -623,13 +629,25 @@ treeview2_create_news(GtkListStore *ls)
sprintf(buf, "%s\n\n",
const_app("string_news_window_week_number_attribute"),
buf2);
- gtk_list_store_set(ls, &iter, 0, buf, 1, &g_array_index(newspaper.articles, NewsPaperArticle, i), -1);
+
+ second_column = TRUE;
}
else
{
gtk_list_store_append(ls, &iter);
- gtk_list_store_set(ls, &iter, 0, "", 1, &g_array_index(newspaper.articles, NewsPaperArticle, i), -1);
+ strcpy(buf, "");
}
+
+ if(second_column)
+ gtk_list_store_set(ls, &iter,
+ 0, buf,
+ 1, &g_array_index(newspaper.articles, NewsPaperArticle, i),
+ 2, &g_array_index(newspaper.articles, NewsPaperArticle, i), -1);
+ else
+ gtk_list_store_set(ls, &iter,
+ 0, buf,
+ 1, &g_array_index(newspaper.articles, NewsPaperArticle, i),
+ 2, NULL, -1);
}
}
}
@@ -654,7 +672,7 @@ treeview2_set_up_news(GtkTreeView *treeview)
renderer = treeview_helper_cell_renderer_text_new();
gtk_tree_view_column_pack_start(col, renderer, TRUE);
gtk_tree_view_column_add_attribute(col, renderer,
- "markup", 0);
+ "markup", 0);
col = gtk_tree_view_column_new();
gtk_tree_view_append_column(treeview, col);
renderer = treeview_helper_cell_renderer_text_new();
@@ -663,7 +681,16 @@ treeview2_set_up_news(GtkTreeView *treeview)
gtk_tree_view_column_pack_start(col, renderer, TRUE);
gtk_tree_view_column_set_cell_data_func(col, renderer,
treeview_helper_news,
- NULL, NULL);
+ NULL, NULL);
+ col = gtk_tree_view_column_new();
+ gtk_tree_view_append_column(treeview, col);
+ renderer = treeview_helper_cell_renderer_text_new();
+ g_object_set(renderer, "wrap-mode", PANGO_WRAP_WORD, NULL);
+ g_object_set(renderer, "wrap-width", 400, NULL);
+ gtk_tree_view_column_pack_start(col, renderer, TRUE);
+ gtk_tree_view_column_set_cell_data_func(col, renderer,
+ treeview_helper_news_additional,
+ NULL, NULL);
}
/** Show the news in the news treeview. */
@@ -677,7 +704,7 @@ treeview2_show_news(void)
GtkTreeView *treeview =
GTK_TREE_VIEW(lookup_widget(window.news, "treeview_news"));
GtkListStore *model =
- gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
+ gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER);
treeview_helper_clear(treeview);
diff --git a/src/treeview_helper.c b/src/treeview_helper.c
index bc5454ed..1a486241 100644
--- a/src/treeview_helper.c
+++ b/src/treeview_helper.c
@@ -1,26 +1,26 @@
/*
- treeview_helper.c
+ treeview_helper.c
- Bygfoot Football Manager -- a small and simple GTK2-based
- football management game.
+ Bygfoot Football Manager -- a small and simple GTK2-based
+ football management game.
- http://bygfoot.sourceforge.net
+ http://bygfoot.sourceforge.net
- Copyright (C) 2005 Gyözö Both (gyboth@bygfoot.com)
+ Copyright (C) 2005 Gyözö Both (gyboth@bygfoot.com)
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "bet.h"
@@ -305,31 +305,31 @@ treeview_helper_get_user_history_icon(gint history_type)
switch(history_type)
{
- default:
- g_warning("treeview_helper_get_user_history_icon: unknown type %d.\n", history_type);
- return NULL;
- case USER_HISTORY_START_GAME:
- return const_app("string_treeview_helper_user_history_symbol_start_game_icon");
- case USER_HISTORY_FIRE_FINANCE:
- return const_app("string_treeview_helper_user_history_symbol_fire_finances_icon");
- case USER_HISTORY_FIRE_FAILURE:
- return const_app("string_treeview_helper_user_history_symbol_fire_failure_icon");
- case USER_HISTORY_JOB_OFFER_ACCEPTED:
- return const_app("string_treeview_helper_user_history_symbol_job_offer_accepted_icon");
- case USER_HISTORY_END_SEASON:
- return const_app("string_treeview_helper_user_history_symbol_end_season_icon");
- case USER_HISTORY_WIN_FINAL:
- return const_app("string_treeview_helper_user_history_symbol_win_final_icon");
- case USER_HISTORY_LOSE_FINAL:
- return const_app("string_treeview_helper_user_history_symbol_lose_final_icon");
- case USER_HISTORY_PROMOTED:
- return const_app("string_treeview_helper_user_history_symbol_promoted_icon");
- case USER_HISTORY_RELEGATED:
- return const_app("string_treeview_helper_user_history_symbol_relegated_icon");
- case USER_HISTORY_REACH_CUP_ROUND:
- return const_app("string_treeview_helper_user_history_symbol_reach_cup_round_icon");
- case USER_HISTORY_CHAMPION:
- return const_app("string_treeview_helper_user_history_symbol_champion_icon");
+ default:
+ g_warning("treeview_helper_get_user_history_icon: unknown type %d.\n", history_type);
+ return NULL;
+ case USER_HISTORY_START_GAME:
+ return const_app("string_treeview_helper_user_history_symbol_start_game_icon");
+ case USER_HISTORY_FIRE_FINANCE:
+ return const_app("string_treeview_helper_user_history_symbol_fire_finances_icon");
+ case USER_HISTORY_FIRE_FAILURE:
+ return const_app("string_treeview_helper_user_history_symbol_fire_failure_icon");
+ case USER_HISTORY_JOB_OFFER_ACCEPTED:
+ return const_app("string_treeview_helper_user_history_symbol_job_offer_accepted_icon");
+ case USER_HISTORY_END_SEASON:
+ return const_app("string_treeview_helper_user_history_symbol_end_season_icon");
+ case USER_HISTORY_WIN_FINAL:
+ return const_app("string_treeview_helper_user_history_symbol_win_final_icon");
+ case USER_HISTORY_LOSE_FINAL:
+ return const_app("string_treeview_helper_user_history_symbol_lose_final_icon");
+ case USER_HISTORY_PROMOTED:
+ return const_app("string_treeview_helper_user_history_symbol_promoted_icon");
+ case USER_HISTORY_RELEGATED:
+ return const_app("string_treeview_helper_user_history_symbol_relegated_icon");
+ case USER_HISTORY_REACH_CUP_ROUND:
+ return const_app("string_treeview_helper_user_history_symbol_reach_cup_round_icon");
+ case USER_HISTORY_CHAMPION:
+ return const_app("string_treeview_helper_user_history_symbol_champion_icon");
}
return NULL;
@@ -399,9 +399,9 @@ treeview_helper_insert_icon(GtkTreeModel *ls, GtkTreeIter *iter, gint column_nr,
/** Function comparing two teams in a team list treeview. */
gint
treeview_helper_team_compare(GtkTreeModel *model,
- GtkTreeIter *a,
- GtkTreeIter *b,
- gpointer user_data)
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer user_data)
{
#ifdef DEBUG
printf("treeview_helper_team_compare\n");
@@ -416,13 +416,13 @@ treeview_helper_team_compare(GtkTreeModel *model,
switch(type)
{
- default:
- g_warning("treeview_team_compare: unknown type %d.\n", type);
- break;
- case TEAM_COMPARE_AV_SKILL:
- return_value = misc_float_compare(team_get_average_skill(tm1, FALSE),
- team_get_average_skill(tm2, FALSE));
- break;
+ default:
+ g_warning("treeview_team_compare: unknown type %d.\n", type);
+ break;
+ case TEAM_COMPARE_AV_SKILL:
+ return_value = misc_float_compare(team_get_average_skill(tm1, FALSE),
+ team_get_average_skill(tm2, FALSE));
+ break;
}
return return_value;
@@ -456,46 +456,46 @@ treeview_helper_player_compare(GtkTreeModel *model,
{
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:
- if(pl1->pos == 0 && pl2->pos == 0)
- return_value = misc_int_compare(player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_GOALS),
- player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_GOALS));
- else if(pl1->pos == 0 || pl2->pos == 0)
- return_value = (pl1->pos == 0) ? 1 : -1;
- else
- 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;
+ 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:
+ if(pl1->pos == 0 && pl2->pos == 0)
+ return_value = misc_int_compare(player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_GOALS),
+ player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_GOALS));
+ else if(pl1->pos == 0 || pl2->pos == 0)
+ return_value = (pl1->pos == 0) ? 1 : -1;
+ else
+ 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;
}
}
@@ -532,9 +532,9 @@ treeview_helper_get_table_element_colour_cups(const League *league, gint table_i
cup_round = &g_array_index(cp(i).rounds, CupRound, k);
for(j=0;jchoose_teams->len;j++)
if((strcmp(g_array_index(cup_round->choose_teams,
- CupChooseTeam, j).sid, buf) == 0 ||
- strcmp(g_array_index(cup_round->choose_teams,
- CupChooseTeam, j).sid, league->sid) == 0) &&
+ CupChooseTeam, j).sid, buf) == 0 ||
+ strcmp(g_array_index(cup_round->choose_teams,
+ CupChooseTeam, j).sid, league->sid) == 0) &&
g_array_index(cup_round->choose_teams,
CupChooseTeam, j).from_table == table_index)
{
@@ -792,10 +792,10 @@ treeview_helper_team_selection(GtkTreeViewColumn *col,
/** Render an integer. This is only so that we know when to draw nothing. */
void
treeview_helper_int_to_cell(GtkTreeViewColumn *col,
- GtkCellRenderer *renderer,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data)
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
{
#ifdef DEBUG
printf("treeview_helper_int_to_cell\n");
@@ -818,10 +818,10 @@ treeview_helper_int_to_cell(GtkTreeViewColumn *col,
/** Render a cell in the player info view. */
void
treeview_helper_player_ext_info_to_cell(GtkTreeViewColumn *col,
- GtkCellRenderer *renderer,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data)
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
{
#ifdef DEBUG
printf("treeview_helper_player_ext_info_to_cell\n");
@@ -843,78 +843,78 @@ treeview_helper_player_ext_info_to_cell(GtkTreeViewColumn *col,
switch(row_idx)
{
- default:
- g_warning("treeview_helper_player_ext_info_to_cell: unknown row index %d\n",
- row_idx);
- break;
- case PLAYER_INFO_ATTRIBUTE_NAME:
- treeview_helper_player_to_cell(col, renderer, model,
- iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_NAME));
- break;
- case PLAYER_INFO_ATTRIBUTE_POS:
- treeview_helper_player_to_cell(col, renderer, model,
- iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_POS));
- break;
- case PLAYER_INFO_ATTRIBUTE_CPOS:
- treeview_helper_player_to_cell(col, renderer, model,
- iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CPOS));
- break;
- case PLAYER_INFO_ATTRIBUTE_SKILL:
- treeview_helper_player_to_cell(col, renderer, model,
- iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_SKILL));
- break;
- case PLAYER_INFO_ATTRIBUTE_CSKILL:
- treeview_helper_player_to_cell(col, renderer, model,
- iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CSKILL));
- break;
- case PLAYER_INFO_ATTRIBUTE_FITNESS:
- treeview_helper_player_to_cell(col, renderer, model,
- iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_FITNESS));
- break;
- case PLAYER_INFO_ATTRIBUTE_ETAL:
- treeview_helper_player_to_cell(col, renderer, model,
- iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_ETAL));
- break;
- case PLAYER_INFO_ATTRIBUTE_AGE:
- treeview_helper_player_to_cell(col, renderer, model,
- iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_AGE));
- break;
- case PLAYER_INFO_ATTRIBUTE_VALUE:
- treeview_helper_player_to_cell(col, renderer, model,
- iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_VALUE));
- break;
- case PLAYER_INFO_ATTRIBUTE_WAGE:
- treeview_helper_player_to_cell(col, renderer, model,
- iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_WAGE));
- break;
- case PLAYER_INFO_ATTRIBUTE_CONTRACT:
- treeview_helper_player_to_cell(col, renderer, model,
- iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CONTRACT));
- break;
- case PLAYER_INFO_ATTRIBUTE_HEALTH:
- treeview_helper_player_info_health_to_cell(renderer, pl);
- break;
- case PLAYER_INFO_ATTRIBUTE_GAMES_GOALS:
- treeview_helper_player_info_games_goals_to_cell(renderer, pl->games_goals);
- break;
- case PLAYER_INFO_ATTRIBUTE_YELLOW_CARDS:
- treeview_helper_player_info_yellow_to_cell(renderer, pl->cards);
- break;
- case PLAYER_INFO_ATTRIBUTE_BANNED:
- treeview_helper_player_info_banned_to_cell(renderer, pl->cards);
- break;
- case PLAYER_INFO_ATTRIBUTE_STREAK:
- treeview_helper_player_info_streak_to_cell(renderer, pl->streak);
- break;
- case PLAYER_INFO_ATTRIBUTE_CAREER:
- treeview_helper_player_info_career_to_cell(renderer, pl);
- break;
- case PLAYER_INFO_ATTRIBUTE_OFFERS:
- if(pl->offers > 0)
- g_object_set(renderer, "text", _("Player doesn't negotiate anymore"), NULL);
- else
- g_object_set(renderer, "text", _("Player accepts new offers"), NULL);
- break;
+ default:
+ g_warning("treeview_helper_player_ext_info_to_cell: unknown row index %d\n",
+ row_idx);
+ break;
+ case PLAYER_INFO_ATTRIBUTE_NAME:
+ treeview_helper_player_to_cell(col, renderer, model,
+ iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_NAME));
+ break;
+ case PLAYER_INFO_ATTRIBUTE_POS:
+ treeview_helper_player_to_cell(col, renderer, model,
+ iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_POS));
+ break;
+ case PLAYER_INFO_ATTRIBUTE_CPOS:
+ treeview_helper_player_to_cell(col, renderer, model,
+ iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CPOS));
+ break;
+ case PLAYER_INFO_ATTRIBUTE_SKILL:
+ treeview_helper_player_to_cell(col, renderer, model,
+ iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_SKILL));
+ break;
+ case PLAYER_INFO_ATTRIBUTE_CSKILL:
+ treeview_helper_player_to_cell(col, renderer, model,
+ iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CSKILL));
+ break;
+ case PLAYER_INFO_ATTRIBUTE_FITNESS:
+ treeview_helper_player_to_cell(col, renderer, model,
+ iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_FITNESS));
+ break;
+ case PLAYER_INFO_ATTRIBUTE_ETAL:
+ treeview_helper_player_to_cell(col, renderer, model,
+ iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_ETAL));
+ break;
+ case PLAYER_INFO_ATTRIBUTE_AGE:
+ treeview_helper_player_to_cell(col, renderer, model,
+ iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_AGE));
+ break;
+ case PLAYER_INFO_ATTRIBUTE_VALUE:
+ treeview_helper_player_to_cell(col, renderer, model,
+ iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_VALUE));
+ break;
+ case PLAYER_INFO_ATTRIBUTE_WAGE:
+ treeview_helper_player_to_cell(col, renderer, model,
+ iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_WAGE));
+ break;
+ case PLAYER_INFO_ATTRIBUTE_CONTRACT:
+ treeview_helper_player_to_cell(col, renderer, model,
+ iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CONTRACT));
+ break;
+ case PLAYER_INFO_ATTRIBUTE_HEALTH:
+ treeview_helper_player_info_health_to_cell(renderer, pl);
+ break;
+ case PLAYER_INFO_ATTRIBUTE_GAMES_GOALS:
+ treeview_helper_player_info_games_goals_to_cell(renderer, pl->games_goals);
+ break;
+ case PLAYER_INFO_ATTRIBUTE_YELLOW_CARDS:
+ treeview_helper_player_info_yellow_to_cell(renderer, pl->cards);
+ break;
+ case PLAYER_INFO_ATTRIBUTE_BANNED:
+ treeview_helper_player_info_banned_to_cell(renderer, pl->cards);
+ break;
+ case PLAYER_INFO_ATTRIBUTE_STREAK:
+ treeview_helper_player_info_streak_to_cell(renderer, pl->streak);
+ break;
+ case PLAYER_INFO_ATTRIBUTE_CAREER:
+ treeview_helper_player_info_career_to_cell(renderer, pl);
+ break;
+ case PLAYER_INFO_ATTRIBUTE_OFFERS:
+ if(pl->offers > 0)
+ g_object_set(renderer, "text", _("Player doesn't negotiate anymore"), NULL);
+ else
+ g_object_set(renderer, "text", _("Player accepts new offers"), NULL);
+ break;
}
}
@@ -1127,73 +1127,73 @@ treeview_helper_player_to_cell(GtkTreeViewColumn *col,
switch(attribute)
{
- default:
- g_warning("treeview_helper_player_to_cell: unknown attribute %d.\n", attribute);
- break;
- case PLAYER_LIST_ATTRIBUTE_NAME:
- treeview_helper_player_name_to_cell(renderer, buf, pl);
- break;
- case PLAYER_LIST_ATTRIBUTE_CPOS:
- treeview_helper_player_pos_to_cell(renderer, buf, pl,
- PLAYER_LIST_ATTRIBUTE_CPOS);
- break;
- case PLAYER_LIST_ATTRIBUTE_POS:
- treeview_helper_player_pos_to_cell(renderer, buf, pl,
- PLAYER_LIST_ATTRIBUTE_POS);
- break;
- case PLAYER_LIST_ATTRIBUTE_CSKILL:
- treeview_helper_player_cskill_to_cell(renderer, buf, pl);
- break;
- case PLAYER_LIST_ATTRIBUTE_SKILL:
- sprintf(buf, "%.*f", opt_int("int_opt_player_precision"), pl->skill);
- break;
- case PLAYER_LIST_ATTRIBUTE_FITNESS:
- treeview_helper_player_fitness_to_cell(renderer, buf, pl->fitness);
- break;
- case PLAYER_LIST_ATTRIBUTE_GAMES:
- treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_GAMES);
- break;
- case PLAYER_LIST_ATTRIBUTE_GOALS:
- treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_GOALS);
- break;
- case PLAYER_LIST_ATTRIBUTE_SHOTS:
- treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_SHOTS);
- break;
- case PLAYER_LIST_ATTRIBUTE_STATUS:
- treeview_helper_player_status_to_cell(NULL, renderer,
- NULL, NULL, (gpointer)pl);
- break;
- case PLAYER_LIST_ATTRIBUTE_CARDS:
- treeview_helper_player_cards_to_cell(buf, pl);
- break;
- case PLAYER_LIST_ATTRIBUTE_AGE:
- sprintf(buf, "%.*f", opt_int("int_opt_player_precision"), pl->age);
- break;
- case PLAYER_LIST_ATTRIBUTE_ETAL:
- sprintf(buf, "%.*f", opt_int("int_opt_player_precision"),
- pl->etal[current_user.scout % 10]);
- break;
- case PLAYER_LIST_ATTRIBUTE_VALUE:
- misc_print_grouped_int(pl->value, buf);
- break;
- case PLAYER_LIST_ATTRIBUTE_WAGE:
- misc_print_grouped_int(pl->wage, buf);
- break;
- case PLAYER_LIST_ATTRIBUTE_CONTRACT:
- treeview_helper_player_contract_to_cell(renderer, buf, pl->contract);
- break;
- case PLAYER_LIST_ATTRIBUTE_TEAM:
- if(debug < 50)
- sprintf(buf, "%s", pl->team->name);
- else
- sprintf(buf, "%s (%s)", pl->team->name, pl->team->strategy_sid);
- break;
- case PLAYER_LIST_ATTRIBUTE_LEAGUE_CUP:
- idx = job_team_is_on_list(pl->team->id);
- strcpy(buf, (idx == -1) ?
- league_cup_get_name_string(pl->team->clid) :
- g_array_index(jobs, Job, idx).league_name);
- break;
+ default:
+ g_warning("treeview_helper_player_to_cell: unknown attribute %d.\n", attribute);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_NAME:
+ treeview_helper_player_name_to_cell(renderer, buf, pl);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_CPOS:
+ treeview_helper_player_pos_to_cell(renderer, buf, pl,
+ PLAYER_LIST_ATTRIBUTE_CPOS);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_POS:
+ treeview_helper_player_pos_to_cell(renderer, buf, pl,
+ PLAYER_LIST_ATTRIBUTE_POS);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_CSKILL:
+ treeview_helper_player_cskill_to_cell(renderer, buf, pl);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_SKILL:
+ sprintf(buf, "%.*f", opt_int("int_opt_player_precision"), pl->skill);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_FITNESS:
+ treeview_helper_player_fitness_to_cell(renderer, buf, pl->fitness);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_GAMES:
+ treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_GAMES);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_GOALS:
+ treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_GOALS);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_SHOTS:
+ treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_SHOTS);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_STATUS:
+ treeview_helper_player_status_to_cell(NULL, renderer,
+ NULL, NULL, (gpointer)pl);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_CARDS:
+ treeview_helper_player_cards_to_cell(buf, pl);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_AGE:
+ sprintf(buf, "%.*f", opt_int("int_opt_player_precision"), pl->age);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_ETAL:
+ sprintf(buf, "%.*f", opt_int("int_opt_player_precision"),
+ pl->etal[current_user.scout % 10]);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_VALUE:
+ misc_print_grouped_int(pl->value, buf);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_WAGE:
+ misc_print_grouped_int(pl->wage, buf);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_CONTRACT:
+ treeview_helper_player_contract_to_cell(renderer, buf, pl->contract);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_TEAM:
+ if(debug < 50)
+ sprintf(buf, "%s", pl->team->name);
+ else
+ sprintf(buf, "%s (%s)", pl->team->name, pl->team->strategy_sid);
+ break;
+ case PLAYER_LIST_ATTRIBUTE_LEAGUE_CUP:
+ idx = job_team_is_on_list(pl->team->id);
+ strcpy(buf, (idx == -1) ?
+ league_cup_get_name_string(pl->team->clid) :
+ g_array_index(jobs, Job, idx).league_name);
+ break;
}
if(attribute != PLAYER_LIST_ATTRIBUTE_STATUS)
@@ -1238,8 +1238,8 @@ treeview_helper_player_name_to_cell(GtkCellRenderer *renderer, gchar *buf, const
}
else if(query_transfer_current_team_offer(pl))
{
- colour_bg = const_app("string_treeview_helper_color_transfer_offer_bg");
- colour_fg = const_app("string_treeview_helper_color_transfer_offer_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);
@@ -1494,38 +1494,38 @@ treeview_helper_player_pos_to_cell(GtkCellRenderer *renderer, gchar *buf,
switch(pos)
{
- default:
- /* Goalie */
- strcpy(buf, _("G"));
- g_object_set(renderer, "background",
- const_app("string_treeview_helper_color_player_pos_goalie_bg"),
- "foreground",
- const_app("string_treeview_helper_color_player_pos_goalie_fg"), NULL);
- break;
- case PLAYER_POS_DEFENDER:
- /* Defender */
- strcpy(buf, _("D"));
- g_object_set(renderer, "background",
- const_app("string_treeview_helper_color_player_pos_defender_bg"),
- "foreground",
- const_app("string_treeview_helper_color_player_pos_defender_fg"), NULL);
- break;
- case PLAYER_POS_MIDFIELDER:
- /* Midfielder */
- strcpy(buf, _("M"));
- g_object_set(renderer, "background",
- const_app("string_treeview_helper_color_player_pos_midfielder_bg"),
- "foreground",
- const_app("string_treeview_helper_color_player_pos_midfielder_fg"), NULL);
- break;
- case PLAYER_POS_FORWARD:
- /* Forward */
- strcpy(buf, _("F"));
- g_object_set(renderer, "background",
- const_app("string_treeview_helper_color_player_pos_forward_bg"),
- "foreground",
- const_app("string_treeview_helper_color_player_pos_forward_fg"), NULL);
- break;
+ default:
+ /* Goalie */
+ strcpy(buf, _("G"));
+ g_object_set(renderer, "background",
+ const_app("string_treeview_helper_color_player_pos_goalie_bg"),
+ "foreground",
+ const_app("string_treeview_helper_color_player_pos_goalie_fg"), NULL);
+ break;
+ case PLAYER_POS_DEFENDER:
+ /* Defender */
+ strcpy(buf, _("D"));
+ g_object_set(renderer, "background",
+ const_app("string_treeview_helper_color_player_pos_defender_bg"),
+ "foreground",
+ const_app("string_treeview_helper_color_player_pos_defender_fg"), NULL);
+ break;
+ case PLAYER_POS_MIDFIELDER:
+ /* Midfielder */
+ strcpy(buf, _("M"));
+ g_object_set(renderer, "background",
+ const_app("string_treeview_helper_color_player_pos_midfielder_bg"),
+ "foreground",
+ const_app("string_treeview_helper_color_player_pos_midfielder_fg"), NULL);
+ break;
+ case PLAYER_POS_FORWARD:
+ /* Forward */
+ strcpy(buf, _("F"));
+ g_object_set(renderer, "background",
+ const_app("string_treeview_helper_color_player_pos_forward_bg"),
+ "foreground",
+ const_app("string_treeview_helper_color_player_pos_forward_fg"), NULL);
+ break;
}
if(pl->cskill == 0)
@@ -1838,12 +1838,44 @@ treeview_helper_search_equal(GtkTreeModel *model,
return return_value;
}
+void
+treeview_helper_news_additional(GtkTreeViewColumn *col,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+ const NewsPaperArticle *article = NULL;
+ const gchar *colour_fg;
+ const gchar *colour_bg;
+ gchar buf[SMALL];
+
+ gtk_tree_model_get(model, iter, 2, &article, -1);
+
+ colour_fg = const_app("string_treeview_helper_color_default_foreground");
+ colour_bg = const_app("string_treeview_helper_color_default_background");
+
+ if(article == NULL)
+ {
+ g_object_set(renderer, "markup", "",
+ "background", colour_bg, "foreground", colour_fg, NULL);
+ return;
+ }
+
+ sprintf(buf, "%s",
+ const_app("string_news_window_league_cup_attribute"),
+ league_cup_get_name_string(article->clid));
+
+ g_object_set(renderer, "markup", buf,
+ "background", colour_bg, "foreground", colour_fg, NULL);
+}
+
void
treeview_helper_news(GtkTreeViewColumn *col,
- GtkCellRenderer *renderer,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data)
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
{
const NewsPaperArticle *article = NULL;
const gchar *colour_fg;
@@ -1856,7 +1888,7 @@ treeview_helper_news(GtkTreeViewColumn *col,
colour_fg = const_app("string_treeview_helper_color_default_foreground");
colour_bg = const_app("string_treeview_helper_color_default_background");
- if(article == NULL)
+ if(article == NULL)
{
g_object_set(renderer, "markup", "",
"background", colour_bg, "foreground", colour_fg, NULL);
diff --git a/src/treeview_helper.h b/src/treeview_helper.h
index e9586e75..2332172b 100644
--- a/src/treeview_helper.h
+++ b/src/treeview_helper.h
@@ -236,4 +236,11 @@ treeview_helper_news(GtkTreeViewColumn *col,
GtkTreeIter *iter,
gpointer user_data);
+void
+treeview_helper_news_additional(GtkTreeViewColumn *col,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data);
+
#endif
diff --git a/src/xml_loadsave_newspaper.c b/src/xml_loadsave_newspaper.c
index 549405ae..092a2850 100644
--- a/src/xml_loadsave_newspaper.c
+++ b/src/xml_loadsave_newspaper.c
@@ -44,6 +44,7 @@ enum
TAG_NEWS_PAPER_ARTICLE_TITLE,
TAG_NEWS_PAPER_ARTICLE_SUBTITLE,
TAG_NEWS_PAPER_ARTICLE_USER_IDX,
+ TAG_NEWS_PAPER_ARTICLE_CLID,
TAG_END
};
@@ -105,6 +106,7 @@ xml_loadsave_newspaper_end_element (GMarkupParseContext *context,
tag == TAG_NEWS_PAPER_ARTICLE_TITLE_ID ||
tag == TAG_NEWS_PAPER_ARTICLE_SUBTITLE ||
tag == TAG_NEWS_PAPER_ARTICLE_USER_IDX ||
+ tag == TAG_NEWS_PAPER_ARTICLE_CLID ||
tag == TAG_NEWS_PAPER_ARTICLE_SUBTITLE_ID)
{
state = TAG_NEWS_PAPER_ARTICLE;
@@ -151,6 +153,8 @@ xml_loadsave_newspaper_text (GMarkupParseContext *context,
new_article.subtitle_id = int_value;
else if(state == TAG_NEWS_PAPER_ARTICLE_USER_IDX)
new_article.user_idx = int_value;
+ else if(state == TAG_NEWS_PAPER_ARTICLE_CLID)
+ new_article.clid = int_value;
}
void
@@ -234,6 +238,8 @@ xml_loadsave_newspaper_write(const gchar *prefix)
TAG_NEWS_PAPER_ARTICLE_SUBTITLE_ID, I1);
xml_write_int(fil, g_array_index(newspaper.articles, NewsPaperArticle, i).user_idx,
TAG_NEWS_PAPER_ARTICLE_USER_IDX, I1);
+ xml_write_int(fil, g_array_index(newspaper.articles, NewsPaperArticle, i).clid,
+ TAG_NEWS_PAPER_ARTICLE_CLID, I1);
fprintf(fil, "%s\n", I0, TAG_NEWS_PAPER_ARTICLE);
}
diff --git a/support_files/bygfoot_app b/support_files/bygfoot_app
index 4020cd77..45747ab0 100644
--- a/support_files/bygfoot_app
+++ b/support_files/bygfoot_app
@@ -240,4 +240,4 @@ string_news_window_week_number_attribute style='oblique'
string_news_window_title_small_attribute size='small'
string_news_window_title_attribute weight='bold' size='large'
string_news_window_subtitle_attribute style='oblique'
-string_news_window_alternate_background lightgrey
+string_news_window_league_cup_attribute weight='bold'
diff --git a/support_files/bygfoot_constants b/support_files/bygfoot_constants
index 4287641c..fdf5da49 100644
--- a/support_files/bygfoot_constants
+++ b/support_files/bygfoot_constants
@@ -1002,3 +1002,6 @@ int_training_camps_week 2
# to avoid news repetitions
int_news_repetition_min_check_number 3
int_news_repetition_max_check_number 10
+
+# how many news articles to keep in memory
+int_news_history_length 50
diff --git a/support_files/bygfoot_tokens b/support_files/bygfoot_tokens
index 9a0b0452..59dd421c 100644
--- a/support_files/bygfoot_tokens
+++ b/support_files/bygfoot_tokens
@@ -35,7 +35,7 @@ string_token_team_losingn _TLN_ # also for news
string_token_team _TT_
string_token_team_layer0 _TLAYER0_ # also for news
string_token_team_layer1 _TLAYER1_ # also for news
-string_token_team_layerdiff _LAYERDIFF_ # also for news
+string_token_team_layerdiff _TLAYERDIFF_ # also for news
string_token_team_avskill0 _TAVSKILL0_ # also for news
string_token_team_avskill1 _TAVSKILL1_ # also for news
string_token_team_avskilldiff _TAVSKILLDIFF_ # also for news
diff --git a/support_files/news/news_de.xml b/support_files/news/news_de.xml
index cf963a34..3a582eb5 100644
--- a/support_files/news/news_de.xml
+++ b/support_files/news/news_de.xml
@@ -134,13 +134,15 @@
Faire Punkteteilung nach ausgeglichenem Spiel.
Das Remis hilft aber keinem der beiden Teams weiter.
Weder _T0_ noch _T1_ können mit einem Unentschieden zufrieden sein.
+ Zahlreiche der _AT_ Zuschauer sterben an Langeweile während dieses unterirdischen Spiels.
+ Die beiden Teams liefern einen Grottenkick aus der Zeit des Catenaccio.
_AT_ werden trotz Unentschieden beim _RE_ gut unterhalten.
Trainer von [_T0_|_T1_] will sich in den nächsten Wochen auf die Defensive konzentrieren.
Gute Offensivleistung von [_T0_|_T1_] wird durch Leichtsinnsfehler kaputtgemacht.
[_T0_|_T1_] verschenkt durch Fehler in der Verteidigung den Sieg.
Ein Fehler kostet [_T0_|_T1_] den Sieg.
- Mangelhafte Chancenverwertung raubt _T0_ die Chance auf den Sieg.
- Mangelhafte Chancenverwertung raubt _T1_ die Chance auf den Sieg.
+ Mangelhafte Chancenverwertung raubt _T0_ die Chance auf den Sieg.
+ Mangelhafte Chancenverwertung raubt _T1_ die Chance auf den Sieg.
Ein verschenkter Elfmeter wird den Spielern von _T1_ noch lange den Schlaf rauben.
Ein verschenkter Elfmeter wird den Spielern von _T0_ noch lange den Schlaf rauben.
_T0_ holt nur Unentschieden, ist aber seit _UNBEATEN0_ Matches ungeschlagen.
@@ -175,23 +177,47 @@
match
- _LAYERDIFF_ = 0 and _GD_ != 0 and _TAVSKILLDIFF_ > 7
+ _TLAYERDIFF_ = 0 and _GD_ != 0 and _TAVSKILLDIFF_ > 7
_TW_ [besiegt|gewinnt gegen|bezwingt|schlägt] _TL_
- Wie erwartet _TW_ [besiegt|bezwingt|schlägt] _TL_
+ Wie erwartet [besiegt|bezwingt|schlägt] _TW_ _TL_
_TW_ erfüllt Erwartungen der Experten
- _TW_ schlägt _TL_ erwartungsgemäß mit _RE_
+ _TW_ schlägt _TL_ erwartungsgemäß mit _REW_
_TW_ trotzt den Wettquoten und besiegt _TL_
_TW_ schafft kleine Sensation gegen _TL_
_TL_ nominell überlegen, verliert aber _RE_
- Gegen _TW_ war nicht mehr drin für _TL_
+ Gegen _TW_ war nicht mehr drin für _TL_.
_TW_ war auf dem Papier besser als _TL_ - und auf dem Platz auch.
_TW_ hatte die bessere Mannschaft und nutzte den Vorteil gnadenlos.
_TW_ stellt die Fussballwelt auf den Kopf mit dem überraschenden Sieg.
- _TW_ wurde schwächer eingeschätzt, macht die nominellen Nachteile aber mit Leidenschaft mehr als wett.
+ _TW_ wurde schwächer eingeschätzt, macht aber alle Nachteile mit Leidenschaft mehr als wett.
Dank einer cleveren Taktik gewinnt _TW_ gegen einen höher eingeschätzten Gegner.
_TL_ muss sich an den eigenen Kopf fassen nach einer unnötigen Niederlage gegen einen auf dem Papier wesentlich schwächeren Widersacher.
_TW_ demonstriert eindrucksvoll, wie ein homogen agierendes Team einen Gegner mit den besseren Einzelspielern überwältigen kann.
+
+ match
+ _TLAYERDIFF_ > 0
+ _T[_TLAYER0_ L _TLAYER1_]_ schafft überraschendes Unentschieden
+ _T[_TLAYER0_ L _TLAYER1_]_ hält _T[_TLAYER0_ G _TLAYER1_]_ stand
+ _LEAGUECUPNAME_: _T[_TLAYER0_ L _TLAYER1_]_ erkämpft Remis
+ _T[_TLAYER0_ L _TLAYER1_]_ schlägt _T[_TLAYER0_ G _TLAYER1_]_ sensationell
+ _T[_TLAYER0_ L _TLAYER1_]_ schafft Sensation
+ _T[_TLAYER0_ L _TLAYER1_]_ siegt trotz Klassenunterschied
+ _T[_TLAYER0_ L _TLAYER1_]_ muss sich der Übermacht beugen
+ _T[_TLAYER0_ G _TLAYER1_]_ zu gut für _T[_TLAYER0_ L _TLAYER1_]_
+ _T[_TLAYER0_ G _TLAYER1_]_ bezwingt tapferen Gegner
+ _T[_TLAYER0_ L _TLAYER1_]_ hält dem Druck des übermächtigen Gegners stand.
+ Keiner hätte ein solches Ergebnis erwartet - ausser die Spieler und der Trainer von _T[_TLAYER0_ L _TLAYER1_]_.
+ _T[_TLAYER0_ L _TLAYER1_]_ gelingt mit dem _RE_ ein Ergebnis, das kein Experte erwartet hatte.
+ _T[_TLAYER0_ L _TLAYER1_]_ gibt alles, _T[_TLAYER0_ G _TLAYER1_]_ erweist sich jedoch als zu stark.
+ _T[_TLAYER0_ G _TLAYER1_]_ erfüllt die Erwartungen und siegt vor _AT_ Zuschauern.
+ _T[_TLAYER0_ G _TLAYER1_]_ lässt dem unterklassigen Gegner keine Chance.
+ _T[_TLAYER0_ G _TLAYER1_]_ blamiert sich gegen den unterklassigen Gegner bis auf die Knochen.
+ Nach der überraschenden Niederlage nimmt die Polizei Ermittlungen wegen des Verdachts auf Manipulation auf.
+ _T[_TLAYER0_ L _TLAYER1_]_ fügt _T[_TLAYER0_ G _TLAYER1_]_ vor _AT_ Zuschauern eine demütigende Pokalniederlage zu.
+ _T[_TLAYER0_ L _TLAYER1_]_ lässt sich nicht durch den Klassenunterschied verunsichern und siegt _RE_.
+
+