diff --git a/src/news.c b/src/news.c index 69a64a9a..8a5c8d78 100644 --- a/src/news.c +++ b/src/news.c @@ -71,14 +71,17 @@ news_generate_match(const LiveGame *live_game) { new_article.week_number = week; new_article.week_round_number = week_round; + fixture_result_to_buf(live_game->fix, buf, FALSE); sprintf(title_small, "%s %s %s", live_game->fix->teams[0]->name, buf, live_game->fix->teams[1]->name); new_article.title_small = g_strdup(title_small); + new_article.title = g_strdup(title); new_article.subtitle = g_strdup(subtitle); new_article.title_id = title_id; new_article.subtitle_id = subtitle_id; + new_article.user_idx = fixture_user_team_involved(live_game->fix); /* printf("%s / %s -- %d %d\n", title, subtitle, title_id, subtitle_id); */ g_array_append_val(newspaper.articles, new_article); @@ -310,7 +313,8 @@ news_set_streak_tokens(const Fixture *fix) #endif gint i, j, k, - streak_won, streak_lost; + streak_won, streak_lost, streak_unbeaten; + gboolean draw; gint res[2]; gchar buf[SMALL], buf2[SMALL]; GPtrArray *latest_fixtures; @@ -319,16 +323,29 @@ news_set_streak_tokens(const Fixture *fix) { for(k = 0; k < 2; k++) { - latest_fixtures = fixture_get_latest(fix->teams[0], (k == 0)); - streak_won = streak_lost = 0; + latest_fixtures = fixture_get_latest(fix->teams[i], (k == 0)); + streak_won = streak_lost = streak_unbeaten = 0; + draw = FALSE; for(j=latest_fixtures->len - 1;j>=0;j--) - { + { res[0] = math_sum_int_array(((Fixture*)g_ptr_array_index(latest_fixtures, j))->result[0], 3); res[1] = math_sum_int_array(((Fixture*)g_ptr_array_index(latest_fixtures, j))->result[1], 3); +/* printf("%s %s %d %d str %d %d %d\n", ((Fixture*)g_ptr_array_index(latest_fixtures, j))->teams[0]->name, */ +/* ((Fixture*)g_ptr_array_index(latest_fixtures, j))->teams[1]->name, res[0], res[1], */ +/* streak_won, streak_lost, streak_unbeaten); */ + if(res[0] == res[1]) - break; + { + if(streak_lost == 0) + { + draw = TRUE; + streak_unbeaten++; + } + else + break; + } else if(res[(((Fixture*)g_ptr_array_index(latest_fixtures, j))->teams[0] == fix->teams[i])] > res[(((Fixture*)g_ptr_array_index(latest_fixtures, j))->teams[0] != fix->teams[i])]) { @@ -340,7 +357,12 @@ news_set_streak_tokens(const Fixture *fix) else { if(streak_lost == 0) - streak_won++; + { + streak_unbeaten++; + + if(!draw) + streak_won++; + } else break; } @@ -359,7 +381,10 @@ news_set_streak_tokens(const Fixture *fix) misc_token_add(token_rep_news, option_int(buf, &tokens), misc_int_to_char(streak_lost)); - + sprintf(buf, "string_token_streak_%sunbeaten%d", buf2, i); + misc_token_add(token_rep_news, + option_int(buf, &tokens), + misc_int_to_char(streak_unbeaten)); g_ptr_array_free(latest_fixtures, TRUE); } diff --git a/src/treeview2.c b/src/treeview2.c index 7bee4055..17dc281e 100644 --- a/src/treeview2.c +++ b/src/treeview2.c @@ -597,7 +597,7 @@ treeview2_create_news(GtkListStore *ls) sprintf(buf, "\n%s", const_app("string_news_window_title_attribute"), _("No news available.")); - gtk_list_store_set(ls, &iter, 0, buf, -1); + gtk_list_store_set(ls, &iter, 0, buf, 1, NULL, -1); return; } @@ -611,35 +611,22 @@ 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); + gtk_list_store_set(ls, &iter, 0, "", 1, NULL, -1); gtk_list_store_append(ls, &iter); - sprintf(buf2, _("Week %d, Week round %d"), + sprintf(buf2, _("Week %d Round %d"), g_array_index(newspaper.articles, NewsPaperArticle, i).week_number, g_array_index(newspaper.articles, NewsPaperArticle, i).week_round_number); - sprintf(buf, "%s", + sprintf(buf, "%s\n\n", const_app("string_news_window_week_number_attribute"), buf2); - gtk_list_store_set(ls, &iter, 0, buf, -1); + gtk_list_store_set(ls, &iter, 0, buf, 1, &g_array_index(newspaper.articles, NewsPaperArticle, i), -1); } - - gtk_list_store_append(ls, &iter); - sprintf(buf, "%s", - const_app("string_news_window_title_small_attribute"), - g_array_index(newspaper.articles, NewsPaperArticle, i).title_small); - gtk_list_store_set(ls, &iter, 0, buf, -1); - - gtk_list_store_append(ls, &iter); - sprintf(buf, "%s", - const_app("string_news_window_title_attribute"), - g_array_index(newspaper.articles, NewsPaperArticle, i).title); - gtk_list_store_set(ls, &iter, 0, buf, -1); - - gtk_list_store_append(ls, &iter); - sprintf(buf, "%s\n", - const_app("string_news_window_subtitle_attribute"), - g_array_index(newspaper.articles, NewsPaperArticle, i).subtitle); - gtk_list_store_set(ls, &iter, 0, buf, -1); + else + { + gtk_list_store_append(ls, &iter); + gtk_list_store_set(ls, &iter, 0, "", 1, &g_array_index(newspaper.articles, NewsPaperArticle, i), -1); + } } } @@ -656,14 +643,21 @@ treeview2_set_up_news(GtkTreeView *treeview) gtk_tree_selection_set_mode(gtk_tree_view_get_selection(treeview), GTK_SELECTION_NONE); gtk_tree_view_set_headers_visible(treeview, FALSE); - gtk_tree_view_set_rules_hint(treeview, TRUE); + gtk_tree_view_set_rules_hint(treeview, FALSE); col = gtk_tree_view_column_new(); gtk_tree_view_append_column(treeview, col); 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(); + gtk_tree_view_column_pack_start(col, renderer, TRUE); + gtk_tree_view_column_set_cell_data_func(col, renderer, + treeview_helper_news, + NULL, NULL); } /** Show the news in the news treeview. */ @@ -677,7 +671,7 @@ treeview2_show_news(void) GtkTreeView *treeview = GTK_TREE_VIEW(lookup_widget(window.news, "treeview_news")); GtkListStore *model = - gtk_list_store_new(1, G_TYPE_STRING); + gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER); treeview_helper_clear(treeview); diff --git a/src/treeview_helper.c b/src/treeview_helper.c index 16569fb3..bc5454ed 100644 --- a/src/treeview_helper.c +++ b/src/treeview_helper.c @@ -1838,6 +1838,62 @@ treeview_helper_search_equal(GtkTreeModel *model, return return_value; } +void +treeview_helper_news(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]; + GString *news_string; + + gtk_tree_model_get(model, iter, 1, &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; + } + + if(article->user_idx == cur_user) + { + colour_fg = const_app("string_treeview_current_user_fg"); + colour_bg = const_app("string_treeview_current_user_bg"); + } + else if(article->user_idx != -1) + { + colour_fg = const_app("string_treeview_user_fg"); + colour_bg = const_app("string_treeview_user_bg"); + } + + sprintf(buf, "%s", + const_app("string_news_window_title_small_attribute"), + article->title_small); + + news_string = g_string_new(buf); + + g_string_append_printf(news_string, "\n%s", + const_app("string_news_window_title_attribute"), + article->title); + + g_string_append_printf(news_string, "\n%s", + const_app("string_news_window_subtitle_attribute"), + article->subtitle); + + g_object_set(renderer, "markup", news_string->str, + "background", colour_bg, "foreground", colour_fg, NULL); + + g_string_free(news_string, TRUE); +} + void treeview_helper_job_exchange(GtkTreeViewColumn *col, GtkCellRenderer *renderer, diff --git a/src/treeview_helper.h b/src/treeview_helper.h index 80e1b548..e9586e75 100644 --- a/src/treeview_helper.h +++ b/src/treeview_helper.h @@ -229,4 +229,11 @@ treeview_helper_job_exchange(GtkTreeViewColumn *col, gpointer user_data); +void +treeview_helper_news(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 afa9dbe5..7e61111d 100644 --- a/src/xml_loadsave_newspaper.c +++ b/src/xml_loadsave_newspaper.c @@ -42,6 +42,7 @@ enum TAG_NEWS_PAPER_ARTICLE_TITLE_SMALL, TAG_NEWS_PAPER_ARTICLE_TITLE, TAG_NEWS_PAPER_ARTICLE_SUBTITLE, + TAG_NEWS_PAPER_ARTICLE_USER_IDX, TAG_END }; @@ -101,6 +102,7 @@ xml_loadsave_newspaper_end_element (GMarkupParseContext *context, tag == TAG_NEWS_PAPER_ARTICLE_TITLE || 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_SUBTITLE_ID) { state = TAG_NEWS_PAPER_ARTICLE; @@ -143,6 +145,8 @@ xml_loadsave_newspaper_text (GMarkupParseContext *context, new_article.title_id = int_value; else if(state == TAG_NEWS_PAPER_ARTICLE_SUBTITLE_ID) new_article.subtitle_id = int_value; + else if(state == TAG_NEWS_PAPER_ARTICLE_USER_IDX) + new_article.user_idx = int_value; } void @@ -222,6 +226,8 @@ xml_loadsave_newspaper_write(const gchar *prefix) TAG_NEWS_PAPER_ARTICLE_TITLE_ID, I1); xml_write_int(fil, g_array_index(newspaper.articles, NewsPaperArticle, i).subtitle_id, 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); fprintf(fil, "%s\n", I0, TAG_NEWS_PAPER_ARTICLE); } diff --git a/support_files/bygfoot_app b/support_files/bygfoot_app index 5120f9ea..4020cd77 100644 --- a/support_files/bygfoot_app +++ b/support_files/bygfoot_app @@ -235,8 +235,9 @@ string_treeview_helper_color_user_bet_bg lightblue string_treeview_helper_color_job_international_fg black string_treeview_helper_color_job_international_bg lightblue -# font attributes for the news window -string_news_window_week_number_attribute weight='bold' size='x-large' +# attributes for the news window +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 diff --git a/support_files/bygfoot_tokens b/support_files/bygfoot_tokens index 45525e04..fa2bfc89 100644 --- a/support_files/bygfoot_tokens +++ b/support_files/bygfoot_tokens @@ -107,3 +107,7 @@ string_token_streak_league_won0 _LEAGUEWON0_ string_token_streak_league_lost0 _LEAGUELOST0_ string_token_streak_league_won1 _LEAGUEWON1_ string_token_streak_league_lost1 _LEAGUELOST1_ +string_token_streak_unbeaten0 _UNBEATEN0_ +string_token_streak_unbeaten1 _UNBEATEN1_ +string_token_streak_league_unbeaten0 _LEAGUEUNBEATEN0_ +string_token_streak_league_unbeaten1 _LEAGUEUNBEATEN1_ diff --git a/support_files/news/news_de.xml b/support_files/news/news_de.xml index d7f61ce8..36272289 100644 --- a/support_files/news/news_de.xml +++ b/support_files/news/news_de.xml @@ -8,6 +8,7 @@ _TL_ loses again! _TL_ in a world of misery! _LEAGUECUPNAME_: _TL_ loses to _TW_! + _TW_ unbeaten since _UNBEATEN_TWN__ matches. Result: _RE_ _TL_ doesn't stand a chance against a _GOALS_TWN__ goal barrage. _RE_ is flattering for _TL_.