src/news_gui.cpp
author rubidium
Fri, 18 Apr 2008 04:54:09 +0000
changeset 10230 bf81856a1101
parent 10218 aa6d38761cc4
child 10253 1627c1fef7c8
permissions -rw-r--r--
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
     3
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     4
#include "stdafx.h"
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1688
diff changeset
     5
#include "openttd.h"
3155
b2cd7bc9f90f (svn r3778) - Fix crash when resizing news history window.
peter1138
parents: 3143
diff changeset
     6
#include "gui.h"
8603
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8602
diff changeset
     7
#include "window_gui.h"
8720
4e60c30e2006 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8710
diff changeset
     8
#include "viewport_func.h"
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
     9
#include "news_func.h"
8766
c86cfa3a7580 (svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents: 8764
diff changeset
    10
#include "settings_type.h"
8345
6caa3fdb972c (svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas
parents: 8320
diff changeset
    11
#include "transparency.h"
8610
17cc343a23dd (svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents: 8603
diff changeset
    12
#include "strings_func.h"
8627
448ebf3a8291 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 8617
diff changeset
    13
#include "window_func.h"
8636
2b158acb649c (svn r11702) -Codechange: move all date related stuff to date*.
rubidium
parents: 8627
diff changeset
    14
#include "date_func.h"
8640
1e93b81e96d2 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
    15
#include "vehicle_base.h"
8653
a83f7a536919 (svn r11719) -Codechange: split sound.h in a header with types and one with functions.
rubidium
parents: 8640
diff changeset
    16
#include "sound_func.h"
8710
52015340050c (svn r11777) -Codechange: split the string header and make do not include it when it's not necessary.
rubidium
parents: 8653
diff changeset
    17
#include "string_func.h"
8780
6f3f3ec6c69a (svn r11848) -Codechange: New class-based drop down list functionality. Lists are now dynamically generated, and can include parameters, or be extended however needed.
peter1138
parents: 8766
diff changeset
    18
#include "widgets/dropdown_func.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    19
8760
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8720
diff changeset
    20
#include "table/sprites.h"
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8720
diff changeset
    21
#include "table/strings.h"
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8720
diff changeset
    22
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    23
/** @file news_gui.cpp
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    24
 *
4549
60410aa1aa88 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4345
diff changeset
    25
 * News system is realized as a FIFO queue (in an array)
60410aa1aa88 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4345
diff changeset
    26
 * The positions in the queue can't be rearranged, we only access
60410aa1aa88 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4345
diff changeset
    27
 * the array elements through pointers to the elements. Once the
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    28
 * array is full, the oldest entry (\a _oldest_news) is being overwritten
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    29
 * by the newest (\a _latest_news).
4549
60410aa1aa88 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4345
diff changeset
    30
 *
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    31
 * \verbatim
4549
60410aa1aa88 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4345
diff changeset
    32
 * oldest                   current   lastest
60410aa1aa88 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4345
diff changeset
    33
 *  |                          |         |
60410aa1aa88 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4345
diff changeset
    34
 * [O------------F-------------C---------L           ]
60410aa1aa88 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4345
diff changeset
    35
 *               |
60410aa1aa88 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4345
diff changeset
    36
 *            forced
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    37
 * \endverbatim
5254
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
    38
 *
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
    39
 * Of course by using an array we can have situations like
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
    40
 *
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    41
 * \verbatim
5254
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
    42
 * [----L          O-----F---------C-----------------]
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
    43
 * This is where we have wrapped around the array and have
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
    44
 * (MAX_NEWS - O) + L news items
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    45
 * \endverbatim
4549
60410aa1aa88 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4345
diff changeset
    46
 */
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
    47
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    48
/** Number of news items in the FIFO queue */
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
    49
#define MAX_NEWS 30
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
    50
#define NB_WIDG_PER_SETTING 4
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
    51
5246
29224c621fd6 (svn r7370) -Cleanup: Use NewsID instead of byte for news identifiers, and some minor other things
Darkvater
parents: 5245
diff changeset
    52
typedef byte NewsID;
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
    53
#define INVALID_NEWS 255
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
    54
8764
65746a5248ec (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium
parents: 8760
diff changeset
    55
NewsItem _statusbar_news_item;
8766
c86cfa3a7580 (svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents: 8764
diff changeset
    56
uint32 _news_display_opt;
c86cfa3a7580 (svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents: 8764
diff changeset
    57
bool _news_ticker_sound;
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    58
static NewsItem _news_items[MAX_NEWS];      ///< The news FIFO queue
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    59
static NewsID _current_news = INVALID_NEWS; ///< points to news item that should be shown next
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    60
static NewsID _oldest_news = 0;             ///< points to first item in fifo queue
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    61
static NewsID _latest_news = INVALID_NEWS;  ///< points to last item in fifo queue
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    62
10218
aa6d38761cc4 (svn r12750) -Fix (r12749): viewport for industry new messages was not shown properly.
rubidium
parents: 10152
diff changeset
    63
struct news_d : vp_d {
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
    64
	uint16 follow_vehicle;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
    65
	int32 scrollpos_x;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
    66
	int32 scrollpos_y;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
    67
	int32 dest_scrollpos_x;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
    68
	int32 dest_scrollpos_y;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
    69
	NewsItem *ni;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
    70
};
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
    71
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(news_d));
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
    72
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    73
/** Forced news item.
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    74
 * Users can force an item by accessing the history or "last message".
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    75
 * If the message being shown was forced by the user, its index is stored in
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    76
 * _forced_news. Otherwise, \a _forced_news variable is INVALID_NEWS. */
5246
29224c621fd6 (svn r7370) -Cleanup: Use NewsID instead of byte for news identifiers, and some minor other things
Darkvater
parents: 5245
diff changeset
    77
static NewsID _forced_news = INVALID_NEWS;
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
    78
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    79
static byte _total_news = 0; ///< Number of news items in FIFO queue @see _news_items
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    80
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
    81
void DrawNewsNewVehicleAvail(Window *w, const NewsItem *ni);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
    82
void DrawNewsBankrupcy(Window *w, const NewsItem *ni);
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6535
diff changeset
    83
static void MoveToNextItem();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    84
6535
1a5437f36d78 (svn r9001) -Codechange: remove duplication of functions and strings with respect to the news of new vehicles.
rubidium
parents: 6523
diff changeset
    85
StringID GetNewsStringNewVehicleAvail(const NewsItem *ni);
2101
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
    86
StringID GetNewsStringBankrupcy(const NewsItem *ni);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    87
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    88
static DrawNewsCallbackProc * const _draw_news_callback[] = {
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    89
	DrawNewsNewVehicleAvail,  ///< DNC_VEHICLEAVAIL
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    90
	DrawNewsBankrupcy,        ///< DNC_BANKRUPCY
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    91
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    92
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
    93
extern GetNewsStringCallbackProc * const _get_news_string_callback[];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    94
GetNewsStringCallbackProc * const _get_news_string_callback[] = {
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
    95
	GetNewsStringNewVehicleAvail,  ///< DNC_VEHICLEAVAIL
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
    96
	GetNewsStringBankrupcy,        ///< DNC_BANKRUPCY
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    97
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    98
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
    99
/** Initialize the news-items data structures */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6535
diff changeset
   100
void InitNewsItemStructs()
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   101
{
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   102
	memset(_news_items, 0, sizeof(_news_items));
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   103
	_current_news = INVALID_NEWS;
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   104
	_oldest_news = 0;
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   105
	_latest_news = INVALID_NEWS;
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   106
	_forced_news = INVALID_NEWS;
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   107
	_total_news = 0;
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   108
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   109
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   110
void DrawNewsBorder(const Window *w)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   111
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   112
	int left = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   113
	int right = w->width - 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   114
	int top = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   115
	int bottom = w->height - 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   116
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   117
	GfxFillRect(left, top, right, bottom, 0xF);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 176
diff changeset
   118
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   119
	GfxFillRect(left, top, left, bottom, 0xD7);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   120
	GfxFillRect(right, top, right, bottom, 0xD7);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   121
	GfxFillRect(left, top, right, top, 0xD7);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   122
	GfxFillRect(left, bottom, right, bottom, 0xD7);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 176
diff changeset
   123
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8094
diff changeset
   124
	DrawString(left + 2, top + 1, STR_00C6, TC_FROMSTRING);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   125
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   126
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   127
static void NewsWindowProc(Window *w, WindowEvent *e)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   128
{
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   129
	switch (e->event) {
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   130
		case WE_CREATE: { // If chatbar is open at creation time, we need to go above it
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   131
			const Window *w1 = FindWindowById(WC_SEND_NETWORK_MSG, 0);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   132
			w->message.msg = (w1 != NULL) ? w1->height : 0;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   133
		} break;
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   134
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   135
		case WE_PAINT: {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   136
			const NewsItem *ni = WP(w, news_d).ni;
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   137
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   138
			switch (ni->display_mode) {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   139
				case NM_NORMAL:
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   140
				case NM_THIN: {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   141
					DrawNewsBorder(w);
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   142
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   143
					DrawString(2, 1, STR_00C6, TC_FROMSTRING);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   144
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   145
					SetDParam(0, ni->date);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   146
					DrawStringRightAligned(428, 1, STR_01FF, TC_FROMSTRING);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   147
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   148
					if (!(ni->flags & NF_VIEWPORT)) {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   149
						CopyInDParam(0, ni->params, lengthof(ni->params));
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   150
						DrawStringMultiCenter(215, ni->display_mode == NM_NORMAL ? 76 : 56,
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   151
							ni->string_id, w->width - 4);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   152
					} else {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   153
						/* Back up transparency options to draw news view */
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   154
						TransparencyOptionBits to_backup = _transparency_opt;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   155
						_transparency_opt = 0;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   156
						DrawWindowViewport(w);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   157
						_transparency_opt = to_backup;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   158
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   159
						/* Shade the viewport into gray, or color*/
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   160
						ViewPort *vp = w->viewport;
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   161
						GfxFillRect(vp->left - w->left, vp->top - w->top,
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   162
							vp->left - w->left + vp->width - 1, vp->top - w->top + vp->height - 1,
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   163
							(ni->flags & NF_INCOLOR ? PALETTE_TO_TRANSPARENT : PALETTE_TO_STRUCT_GREY) | (1 << USE_COLORTABLE)
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   164
						);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   165
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   166
						CopyInDParam(0, ni->params, lengthof(ni->params));
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   167
						DrawStringMultiCenter(w->width / 2, 20, ni->string_id, w->width - 4);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   168
					}
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   169
					break;
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   170
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   171
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   172
				case NM_CALLBACK:
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   173
					_draw_news_callback[ni->callback](w, ni);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   174
					break;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   175
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   176
				default:
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   177
					DrawWindowWidgets(w);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   178
					if (!(ni->flags & NF_VIEWPORT)) {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   179
						CopyInDParam(0, ni->params, lengthof(ni->params));
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   180
						DrawStringMultiCenter(140, 38, ni->string_id, 276);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   181
					} else {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   182
						DrawWindowViewport(w);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   183
						CopyInDParam(0, ni->params, lengthof(ni->params));
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   184
						DrawStringMultiCenter(w->width / 2, w->height - 16, ni->string_id, w->width - 4);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   185
					}
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   186
					break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   187
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   188
		} break;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   189
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   190
		case WE_CLICK: {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   191
			switch (e->we.click.widget) {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   192
			case 1: {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   193
				NewsItem *ni = WP(w, news_d).ni;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   194
				DeleteWindow(w);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   195
				ni->duration = 0;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   196
				_forced_news = INVALID_NEWS;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   197
			} break;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   198
			case 0: {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   199
				NewsItem *ni = WP(w, news_d).ni;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   200
				if (ni->flags & NF_VEHICLE) {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   201
					Vehicle *v = GetVehicle(ni->data_a);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   202
					ScrollMainWindowTo(v->x_pos, v->y_pos);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   203
				} else if (ni->flags & NF_TILE) {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   204
					if (!ScrollMainWindowToTile(ni->data_a) && ni->data_b != 0)
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   205
						ScrollMainWindowToTile(ni->data_b);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   206
				}
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   207
			} break;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   208
			}
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   209
		} break;
1648
747061dca705 (svn r2152) - Fix: Chatbar in MP games is now on-top of the news window.
darkvater
parents: 1390
diff changeset
   210
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   211
		case WE_KEYPRESS:
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   212
			if (e->we.keypress.keycode == WKC_SPACE) {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   213
				/* Don't continue. */
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   214
				e->we.keypress.cont = false;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   215
				DeleteWindow(w);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   216
			}
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   217
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   218
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   219
		case WE_MESSAGE: // The chatbar has notified us that is was either created or closed
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   220
			switch (e->we.message.msg) {
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   221
				case WE_CREATE: w->message.msg = e->we.message.wparam; break;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   222
				case WE_DESTROY: w->message.msg = 0; break;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   223
			}
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   224
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   225
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   226
		case WE_TICK: { // Scroll up newsmessages from the bottom in steps of 4 pixels
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   227
			int diff;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   228
			int y = max(w->top - 4, _screen.height - w->height - 12 - w->message.msg);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   229
			if (y == w->top) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   230
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   231
			if (w->viewport != NULL)
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   232
				w->viewport->top += y - w->top;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   233
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   234
			diff = Delta(w->top, y);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   235
			w->top = y;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   236
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   237
			SetDirtyBlocks(w->left, w->top - diff, w->left + w->width, w->top + w->height);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   238
		} break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   239
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   240
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   241
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   242
/**
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   243
 * Return the correct index in the pseudo-fifo
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   244
 * queue and deals with overflows when increasing the index
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   245
 */
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   246
static inline NewsID IncreaseIndex(NewsID i)
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   247
{
5258
eae66ac02803 (svn r7388) -Fix (r7384 / r7368 / r3757): When adding a new news item for the first time (_latest_news
Darkvater
parents: 5254
diff changeset
   248
	assert(i != INVALID_NEWS);
5245
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   249
	return (i + 1) % MAX_NEWS;
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   250
}
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   251
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   252
/**
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   253
 * Return the correct index in the pseudo-fifo
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   254
 * queue and deals with overflows when decreasing the index
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   255
 */
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   256
static inline NewsID DecreaseIndex(NewsID i)
5245
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   257
{
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   258
	assert(i != INVALID_NEWS);
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   259
	return (i + MAX_NEWS - 1) % MAX_NEWS;
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   260
}
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   261
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   262
/**
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   263
 * Add a new newsitem to be shown.
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   264
 * @param string String to display, can have special values based on parameter \a display_mode
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   265
 * @param display_mode, any of the NewsMode enums (NM_)
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   266
 * @param flags any of the NewsFlag enums (NF_)
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   267
 * @param type news category, any of the NewsType enums (NT_)
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   268
 * @param callback news callback function, any of the NewsCallback enums (DNC_)
4873
7cb19235cf60 (svn r6803) -Codechange: Substitute magic numbers by an enum for the news windows
Darkvater
parents: 4719
diff changeset
   269
 * @param data_a news-specific value based on news type
7cb19235cf60 (svn r6803) -Codechange: Substitute magic numbers by an enum for the news windows
Darkvater
parents: 4719
diff changeset
   270
 * @param data_b news-specific value based on news type
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   271
 *
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   272
 * @note If the display mode is NM_CALLBACK, special news is shown and parameter
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   273
 * \a string has a special meaning.
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   274
 *  - For DNC_TRAINAVAIL, DNC_ROADAVAIL, DNC_SHIPAVAIL, DNC_AIRCRAFTAVAIL messages: StringID is
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   275
 *    the index of the engine that is shown
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   276
 *
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   277
 *  - For DNC_BANKRUPCY: bytes 0-3 of StringID contains the player that is in trouble,
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   278
 *    and 4-7 contains what kind of bankrupcy message is shown.
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   279
 *    @see NewsBankrupcy
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   280
 *
4873
7cb19235cf60 (svn r6803) -Codechange: Substitute magic numbers by an enum for the news windows
Darkvater
parents: 4719
diff changeset
   281
 * @see NewsMode
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   282
 * @see NewsFlag
4873
7cb19235cf60 (svn r6803) -Codechange: Substitute magic numbers by an enum for the news windows
Darkvater
parents: 4719
diff changeset
   283
 * @see NewsType
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   284
 * @see NewsCallback
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   285
 */
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   286
void AddNewsItem(StringID string, NewsMode display_mode, NewsFlag flags, NewsType type, NewsCallback callback, uint data_a, uint data_b)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   287
{
4000
bab1ebc37da0 (svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents: 3155
diff changeset
   288
	if (_game_mode == GM_MENU) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   289
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
   290
	/* check the rare case that the oldest (to be overwritten) news item is open */
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   291
	if (_total_news == MAX_NEWS && (_oldest_news == _current_news || _oldest_news == _forced_news)) {
5253
a9775de4e6b6 (svn r7383) -Codechange: fix up typo in news-gui s/MoveToNexItem/MoveToNextItem/.
Darkvater
parents: 5246
diff changeset
   292
		MoveToNextItem();
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   293
	}
102
1d277a07f1f1 (svn r103) Fix: rare newspaper crash with too many messages [ 1009976 ] (thx to blathij)s
dominik
parents: 94
diff changeset
   294
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   295
	if (_total_news < MAX_NEWS) _total_news++;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 176
diff changeset
   296
5258
eae66ac02803 (svn r7388) -Fix (r7384 / r7368 / r3757): When adding a new news item for the first time (_latest_news
Darkvater
parents: 5254
diff changeset
   297
	/* Increase _latest_news. If we have no news yet, use _oldest news as an
eae66ac02803 (svn r7388) -Fix (r7384 / r7368 / r3757): When adding a new news item for the first time (_latest_news
Darkvater
parents: 5254
diff changeset
   298
	 * index. We cannot use 0 as _oldest_news can jump around due to
eae66ac02803 (svn r7388) -Fix (r7384 / r7368 / r3757): When adding a new news item for the first time (_latest_news
Darkvater
parents: 5254
diff changeset
   299
	 * DeleteVehicleNews */
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   300
	NewsID l_news = _latest_news;
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   301
	_latest_news = (_latest_news == INVALID_NEWS) ? _oldest_news : IncreaseIndex(_latest_news);
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   302
5244
e110f52333e8 (svn r7368) -Fix: [FS#332] Vehicle Deletion Crash [News Window Related?] (r3757).
Darkvater
parents: 5108
diff changeset
   303
	/* If the fifo-buffer is full, overwrite the oldest entry */
5245
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   304
	if (l_news != INVALID_NEWS && _latest_news == _oldest_news) {
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   305
		assert(_total_news == MAX_NEWS);
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   306
		_oldest_news = IncreaseIndex(_oldest_news);
5245
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   307
	}
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   308
5846
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   309
	/*DEBUG(misc, 0, "+cur %3d, old %2d, lat %3d, for %3d, tot %2d",
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   310
	  _current_news, _oldest_news, _latest_news, _forced_news, _total_news);*/
5771
7288d4e4bfba (svn r7823) -Fix (r7384 / r7368 / r3757 / r7388): News windows could still cause crashes because
Darkvater
parents: 5726
diff changeset
   311
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
   312
	/* Add news to _latest_news */
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   313
	NewsItem *ni = &_news_items[_latest_news];
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   314
	memset(ni, 0, sizeof(*ni));
5245
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   315
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   316
	ni->string_id = string;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   317
	ni->display_mode = display_mode;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   318
	ni->flags = flags;
5245
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   319
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   320
	/* show this news message in color? */
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   321
	if (_cur_year >= _patches.colored_news_year) ni->flags |= NF_INCOLOR;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   322
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   323
	ni->type = type;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   324
	ni->callback = callback;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   325
	ni->data_a = data_a;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   326
	ni->data_b = data_b;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   327
	ni->date = _date;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   328
	CopyOutDParam(ni->params, 0, lengthof(ni->params));
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   329
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   330
	Window *w = FindWindowById(WC_MESSAGE_HISTORY, 0);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   331
	if (w == NULL) return;
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   332
	SetWindowDirty(w);
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   333
	w->vscroll.count = _total_news;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   334
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   335
715
83805642c830 (svn r1167) Feature: Added the possibility to add validation functions to NewsItems. This is now done for "Train in depot" messages. Before displaying such a message, it checks if the train really still is in the depot. Can be applied to other news items as well.
dominik
parents: 541
diff changeset
   336
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   337
/**
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   338
 * Maximum age of news items.
9259
088d3649dd4f (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents: 8839
diff changeset
   339
 * Don't show item if it's older than x days, corresponds with NewsType in news_type.h
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   340
 * @see NewsType
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   341
 */
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   342
static const byte _news_items_age[NT_END] = {
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   343
	60,  ///< NT_ARRIVAL_PLAYER
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   344
	60,  ///< NT_ARRIVAL_OTHER
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   345
	90,  ///< NT_ACCIDENT
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   346
	60,  ///< NT_COMPANY_INFO
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   347
	90,  ///< NT_OPENCLOSE
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   348
	30,  ///< NT_ECONOMY
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   349
	30,  ///< NT_INDUSTRY_PLAYER
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   350
	30,  ///< NT_INDUSTRY_OTHER
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   351
	30,  ///< NT_INDUSTRY_NOBODY
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   352
	150, ///< NT_ADVICE
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   353
	30,  ///< NT_NEW_VEHICLES
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   354
	90,  ///< NT_ACCEPTANCE
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   355
	180, ///< NT_SUBSIDIES
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   356
	60   ///< NT_GENERAL
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   357
};
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   358
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   359
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   360
static const Widget _news_type13_widgets[] = {
867
581154a08a78 (svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents: 745
diff changeset
   361
{      WWT_PANEL,   RESIZE_NONE,    15,     0,   429,     0,   169, 0x0, STR_NULL},
581154a08a78 (svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents: 745
diff changeset
   362
{      WWT_PANEL,   RESIZE_NONE,    15,     0,    10,     0,    11, 0x0, STR_NULL},
176
84990c4b9212 (svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents: 102
diff changeset
   363
{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   364
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   365
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   366
static WindowDesc _news_type13_desc = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7762
diff changeset
   367
	WDP_CENTER, 476, 430, 170, 430, 170,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6090
diff changeset
   368
	WC_NEWS_WINDOW, WC_NONE,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   369
	WDF_DEF_WIDGET,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   370
	_news_type13_widgets,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   371
	NewsWindowProc
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   372
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   373
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   374
static const Widget _news_type2_widgets[] = {
867
581154a08a78 (svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents: 745
diff changeset
   375
{      WWT_PANEL,   RESIZE_NONE,    15,     0,   429,     0,   129, 0x0, STR_NULL},
581154a08a78 (svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents: 745
diff changeset
   376
{      WWT_PANEL,   RESIZE_NONE,    15,     0,    10,     0,    11, 0x0, STR_NULL},
176
84990c4b9212 (svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents: 102
diff changeset
   377
{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   378
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   379
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   380
static WindowDesc _news_type2_desc = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7762
diff changeset
   381
	WDP_CENTER, 476, 430, 130, 430, 130,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6090
diff changeset
   382
	WC_NEWS_WINDOW, WC_NONE,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   383
	WDF_DEF_WIDGET,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   384
	_news_type2_widgets,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   385
	NewsWindowProc
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   386
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   387
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   388
static const Widget _news_type0_widgets[] = {
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4293
diff changeset
   389
{      WWT_PANEL,   RESIZE_NONE,     5,     0,   279,    14,    86, 0x0,              STR_NULL},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4293
diff changeset
   390
{   WWT_CLOSEBOX,   RESIZE_NONE,     5,     0,    10,     0,    13, STR_00C5,         STR_018B_CLOSE_WINDOW},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4293
diff changeset
   391
{    WWT_CAPTION,   RESIZE_NONE,     5,    11,   279,     0,    13, STR_012C_MESSAGE, STR_NULL},
4939
ede0f6777b3c (svn r6926) -Codechange: Rename WWT_4 to WWT_TEXTBTN_2 and WWT_6 to WWT_INSET (credits to peter1138
Darkvater
parents: 4938
diff changeset
   392
{      WWT_INSET,   RESIZE_NONE,     5,     2,   277,    16,    64, 0x0,              STR_NULL},
176
84990c4b9212 (svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents: 102
diff changeset
   393
{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   394
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   395
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   396
static WindowDesc _news_type0_desc = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7762
diff changeset
   397
	WDP_CENTER, 476, 280, 87, 280, 87,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6090
diff changeset
   398
	WC_NEWS_WINDOW, WC_NONE,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   399
	WDF_DEF_WIDGET,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   400
	_news_type0_widgets,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   401
	NewsWindowProc
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   402
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   403
6609
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   404
static const SoundFx _news_sounds[NT_END] = {
10230
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   405
	SND_1D_APPLAUSE, ///< NT_ARRIVAL_PLAYER
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   406
	SND_1D_APPLAUSE, ///< NT_ARRIVAL_OTHER
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   407
	SND_BEGIN,       ///< NT_ACCIDENT
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   408
	SND_BEGIN,       ///< NT_COMPANY_INFO
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   409
	SND_BEGIN,       ///< NT_OPENCLOSE
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   410
	SND_BEGIN,       ///< NT_ECONOMY
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   411
	SND_BEGIN,       ///< NT_INDUSTRY_PLAYER
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   412
	SND_BEGIN,       ///< NT_INDUSTRY_OTHER
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   413
	SND_BEGIN,       ///< NT_INDUSTRY_NOBODY
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   414
	SND_BEGIN,       ///< NT_ADVICE
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   415
	SND_1E_OOOOH,    ///< NT_NEW_VEHICLES
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   416
	SND_BEGIN,       ///< NT_ACCEPTANCE
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   417
	SND_BEGIN,       ///< NT_SUBSIDIES
bf81856a1101 (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents: 10218
diff changeset
   418
	SND_BEGIN,       ///< NT_GENERAL
6609
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   419
};
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   420
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   421
const char *_news_display_name[NT_END] = {
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   422
	"arrival_player",
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   423
	"arrival_other",
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   424
	"accident",
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   425
	"company_info",
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   426
	"openclose",
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   427
	"economy",
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   428
	"production_player",
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   429
	"production_other",
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   430
	"production_nobody",
6609
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   431
	"advice",
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   432
	"new_vehicles",
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   433
	"acceptance",
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   434
	"subsidies",
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   435
	"general",
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   436
};
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   437
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   438
/**
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   439
 * Get the value of an item of the news-display settings. This is
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   440
 * a little tricky since on/off/summary must use 2 bits to store the value
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   441
 * @param item the item whose value is requested
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   442
 * @return return the found value which is between 0-2
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   443
 */
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   444
static inline byte GetNewsDisplayValue(byte item)
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   445
{
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   446
	assert(item < NT_END && GB(_news_display_opt, item * 2, 2) <= 2);
2549
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2498
diff changeset
   447
	return GB(_news_display_opt, item * 2, 2);
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   448
}
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   449
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   450
/**
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   451
 * Set the value of an item in the news-display settings. This is
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   452
 * a little tricky since on/off/summary must use 2 bits to store the value
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   453
 * @param item the item whose value is being set
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   454
 * @param val new value
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   455
 */
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   456
static inline void SetNewsDisplayValue(byte item, byte val)
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   457
{
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   458
	assert(item < NT_END && val <= 2);
2549
f1d3b383d557 (svn r3078) Some more stuff, which piled up:
tron
parents: 2498
diff changeset
   459
	SB(_news_display_opt, item * 2, 2, val);
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   460
}
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   461
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   462
/** Open up an own newspaper window for the news item */
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   463
static void ShowNewspaper(NewsItem *ni)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   464
{
4874
b95cdd66085f (svn r6804) -Codechange: Remove the unused NF_NOEXPIRE flag.
Darkvater
parents: 4873
diff changeset
   465
	ni->flags &= ~NF_FORCE_BIG;
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   466
	ni->duration = 555;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   467
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   468
	SoundFx sound = _news_sounds[ni->type];
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   469
	if (sound != 0) SndPlayFx(sound);
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   470
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   471
	int top = _screen.height;
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   472
	Window *w;
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   473
	switch (ni->display_mode) {
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   474
		case NM_NORMAL:
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   475
		case NM_CALLBACK:
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   476
			_news_type13_desc.top = top;
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   477
			w = AllocateWindowDesc(&_news_type13_desc);
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   478
			if (ni->flags & NF_VIEWPORT) {
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   479
				AssignWindowViewport(w, 2, 58, 0x1AA, 0x6E,
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7038
diff changeset
   480
					ni->data_a | (ni->flags & NF_VEHICLE ? 0x80000000 : 0), ZOOM_LVL_NEWS);
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   481
			}
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   482
			break;
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   483
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   484
		case NM_THIN:
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   485
			_news_type2_desc.top = top;
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   486
			w = AllocateWindowDesc(&_news_type2_desc);
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   487
			if (ni->flags & NF_VIEWPORT) {
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   488
				AssignWindowViewport(w, 2, 58, 0x1AA, 0x46,
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7038
diff changeset
   489
					ni->data_a | (ni->flags & NF_VEHICLE ? 0x80000000 : 0), ZOOM_LVL_NEWS);
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   490
			}
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   491
			break;
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   492
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   493
		default:
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   494
			_news_type0_desc.top = top;
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   495
			w = AllocateWindowDesc(&_news_type0_desc);
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   496
			if (ni->flags & NF_VIEWPORT) {
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   497
				AssignWindowViewport(w, 3, 17, 0x112, 0x2F,
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7038
diff changeset
   498
					ni->data_a | (ni->flags & NF_VEHICLE ? 0x80000000 : 0), ZOOM_LVL_NEWS);
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   499
			}
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   500
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   501
	}
5771
7288d4e4bfba (svn r7823) -Fix (r7384 / r7368 / r3757 / r7388): News windows could still cause crashes because
Darkvater
parents: 5726
diff changeset
   502
5846
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   503
	/*DEBUG(misc, 0, " cur %3d, old %2d, lat %3d, for %3d, tot %2d",
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   504
	  _current_news, _oldest_news, _latest_news, _forced_news, _total_news);*/
5771
7288d4e4bfba (svn r7823) -Fix (r7384 / r7368 / r3757 / r7388): News windows could still cause crashes because
Darkvater
parents: 5726
diff changeset
   505
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   506
	WP(w, news_d).ni = &_news_items[_forced_news == INVALID_NEWS ? _current_news : _forced_news];
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   507
	w->flags4 |= WF_DISABLE_VP_SCROLL;
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   508
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   509
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   510
/** Show news item in the ticker */
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   511
static void ShowTicker(const NewsItem *ni)
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   512
{
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   513
	if (_news_ticker_sound) SndPlayFx(SND_16_MORSE);
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   514
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   515
	_statusbar_news_item = *ni;
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   516
	Window *w = FindWindowById(WC_STATUS_BAR, 0);
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   517
	if (w != NULL) WP(w, def_d).data_1 = 360;
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   518
}
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   519
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   520
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   521
/**
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   522
 * Are we ready to show another news item?
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   523
 * Only if nothing is in the newsticker and no newspaper is displayed
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   524
 */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6535
diff changeset
   525
static bool ReadyForNextItem()
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   526
{
5246
29224c621fd6 (svn r7370) -Cleanup: Use NewsID instead of byte for news identifiers, and some minor other things
Darkvater
parents: 5245
diff changeset
   527
	NewsID item = (_forced_news == INVALID_NEWS) ? _current_news : _forced_news;
92
20b4c7536349 (svn r93) Fix: memory leak in news system (blathijs)
dominik
parents: 89
diff changeset
   528
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   529
	if (item >= MAX_NEWS) return true;
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   530
	NewsItem *ni = &_news_items[item];
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   531
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
   532
	/* Ticker message
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
   533
	 * Check if the status bar message is still being displayed? */
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   534
	const Window *w = FindWindowById(WC_STATUS_BAR, 0);
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   535
	if (w != NULL && WP(w, const def_d).data_1 > -1280) return false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   536
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
   537
	/* Newspaper message, decrement duration counter */
5264
b2b3c60af210 (svn r7402) -Fix: [FS#255] Long Delay for Message Windows to Appear. Immediately show a new message
Darkvater
parents: 5258
diff changeset
   538
	if (ni->duration != 0) ni->duration--;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   539
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
   540
	/* neither newsticker nor newspaper are running */
5264
b2b3c60af210 (svn r7402) -Fix: [FS#255] Long Delay for Message Windows to Appear. Immediately show a new message
Darkvater
parents: 5258
diff changeset
   541
	return (ni->duration == 0 || FindWindowById(WC_NEWS_WINDOW, 0) == NULL);
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   542
}
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   543
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   544
/** Move to the next news item */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6535
diff changeset
   545
static void MoveToNextItem()
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   546
{
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   547
	DeleteWindowById(WC_NEWS_WINDOW, 0);
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   548
	_forced_news = INVALID_NEWS;
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   549
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
   550
	/* if we're not at the last item, then move on */
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   551
	if (_current_news != _latest_news) {
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   552
		_current_news = (_current_news == INVALID_NEWS) ? _oldest_news : IncreaseIndex(_current_news);
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   553
		NewsItem *ni = &_news_items[_current_news];
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   554
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
   555
		/* check the date, don't show too old items */
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   556
		if (_date - _news_items_age[ni->type] > ni->date) return;
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   557
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   558
		switch (GetNewsDisplayValue(ni->type)) {
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   559
			default: NOT_REACHED();
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   560
			case 0: { // Off - show nothing only a small reminder in the status bar
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   561
				Window *w = FindWindowById(WC_STATUS_BAR, 0);
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   562
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   563
				if (w != NULL) {
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   564
					WP(w, def_d).data_2 = 91;
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   565
					SetWindowDirty(w);
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   566
				}
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   567
				break;
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   568
			}
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   569
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   570
			case 1: // Summary - show ticker, but if forced big, cascade to full
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   571
				if (!(ni->flags & NF_FORCE_BIG)) {
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   572
					ShowTicker(ni);
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   573
					break;
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   574
				}
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   575
				/* Fallthrough */
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   576
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   577
			case 2: // Full - show newspaper
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   578
				ShowNewspaper(ni);
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   579
				break;
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   580
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   581
	}
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   582
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   583
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6535
diff changeset
   584
void NewsLoop()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   585
{
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
   586
	/* no news item yet */
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   587
	if (_total_news == 0) return;
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   588
5253
a9775de4e6b6 (svn r7383) -Codechange: fix up typo in news-gui s/MoveToNexItem/MoveToNextItem/.
Darkvater
parents: 5246
diff changeset
   589
	if (ReadyForNextItem()) MoveToNextItem();
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   590
}
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   591
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   592
/** Do a forced show of a specific message */
5246
29224c621fd6 (svn r7370) -Cleanup: Use NewsID instead of byte for news identifiers, and some minor other things
Darkvater
parents: 5245
diff changeset
   593
static void ShowNewsMessage(NewsID i)
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   594
{
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   595
	if (_total_news == 0) return;
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   596
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
   597
	/* Delete the news window */
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   598
	DeleteWindowById(WC_NEWS_WINDOW, 0);
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   599
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6628
diff changeset
   600
	/* setup forced news item */
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   601
	_forced_news = i;
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   602
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   603
	if (_forced_news != INVALID_NEWS) {
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   604
		NewsItem *ni = &_news_items[_forced_news];
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   605
		ni->duration = 555;
4874
b95cdd66085f (svn r6804) -Codechange: Remove the unused NF_NOEXPIRE flag.
Darkvater
parents: 4873
diff changeset
   606
		ni->flags |= NF_FORCE_BIG;
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   607
		DeleteWindowById(WC_NEWS_WINDOW, 0);
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   608
		ShowNewspaper(ni);
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   609
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   610
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   611
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   612
/** Show previous news item */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6535
diff changeset
   613
void ShowLastNewsMessage()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   614
{
5846
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   615
	if (_forced_news == INVALID_NEWS) {
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   616
		/* Not forced any news yet, show the current one, unless a news window is
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   617
		 * open (which can only be the current one), then show the previous item */
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   618
		const Window *w = FindWindowById(WC_NEWS_WINDOW, 0);
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   619
		ShowNewsMessage((w == NULL || (_current_news == _oldest_news)) ? _current_news : DecreaseIndex(_current_news));
5846
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   620
	} else if (_forced_news == _oldest_news) {
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   621
		/* We have reached the oldest news, start anew with the latest */
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   622
		ShowNewsMessage(_latest_news);
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   623
	} else {
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   624
		/* 'Scrolling' through news history show each one in turn */
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   625
		ShowNewsMessage(DecreaseIndex(_forced_news));
83
bd21afea96d8 (svn r84) Improved news system code a little to avoid potential memory leaks
dominik
parents: 80
diff changeset
   626
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   627
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   628
79
15e3eef5f73d (svn r80) New internal news system (implemented with fifo queue)
dominik
parents: 0
diff changeset
   629
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   630
/* return news by number, with 0 being the most
4549
60410aa1aa88 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4345
diff changeset
   631
 * recent news. Returns INVALID_NEWS if end of queue reached. */
5246
29224c621fd6 (svn r7370) -Cleanup: Use NewsID instead of byte for news identifiers, and some minor other things
Darkvater
parents: 5245
diff changeset
   632
static NewsID getNews(NewsID i)
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   633
{
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   634
	if (i >= _total_news) return INVALID_NEWS;
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   635
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   636
	if (_latest_news < i) {
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   637
		i = _latest_news + MAX_NEWS - i;
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   638
	} else {
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   639
		i = _latest_news - i;
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2549
diff changeset
   640
	}
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   641
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   642
	i %= MAX_NEWS;
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   643
	return i;
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   644
}
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   645
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   646
/**
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   647
 * Draw an unformatted news message truncated to a maximum length. If
2101
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   648
 * length exceeds maximum length it will be postfixed by '...'
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   649
 * @param x,y position of the string
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   650
 * @param color the color the string will be shown in
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   651
 * @param *ni NewsItem being printed
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   652
 * @param maxw maximum width of string in pixels
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   653
 */
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   654
static void DrawNewsString(int x, int y, uint16 color, const NewsItem *ni, uint maxw)
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   655
{
2101
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   656
	char buffer[512], buffer2[512];
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   657
	StringID str;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 176
diff changeset
   658
8350
4cdf7891188e (svn r11404) -Codechange: remove 2 magical numbers
belugas
parents: 8345
diff changeset
   659
	if (ni->display_mode == NM_CALLBACK) {
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   660
		str = _get_news_string_callback[ni->callback](ni);
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   661
	} else {
7762
03721db0ac1c (svn r10587) -Codechange: move the string/dparam related stuff from variables.h to strings.h
rubidium
parents: 7120
diff changeset
   662
		CopyInDParam(0, ni->params, lengthof(ni->params));
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 176
diff changeset
   663
		str = ni->string_id;
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   664
	}
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   665
4912
d04b3f2bca70 (svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents: 4874
diff changeset
   666
	GetString(buffer, str, lastof(buffer));
2101
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   667
	/* Copy the just gotten string to another buffer to remove any formatting
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   668
	 * from it such as big fonts, etc. */
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   669
	const char *ptr = buffer;
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   670
	char *dest = buffer2;
7038
60b0e082723c (svn r9731) -Fix [FS#677]: in news history, newlines weren't replaced with spaces, making it look ugly from time to time
truelight
parents: 6977
diff changeset
   671
	WChar c_last = '\0';
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 4939
diff changeset
   672
	for (;;) {
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 4939
diff changeset
   673
		WChar c = Utf8Consume(&ptr);
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 4939
diff changeset
   674
		if (c == 0) break;
7038
60b0e082723c (svn r9731) -Fix [FS#677]: in news history, newlines weren't replaced with spaces, making it look ugly from time to time
truelight
parents: 6977
diff changeset
   675
		/* Make a space from a newline, but ignore multiple newlines */
60b0e082723c (svn r9731) -Fix [FS#677]: in news history, newlines weren't replaced with spaces, making it look ugly from time to time
truelight
parents: 6977
diff changeset
   676
		if (c == '\n' && c_last != '\n') {
60b0e082723c (svn r9731) -Fix [FS#677]: in news history, newlines weren't replaced with spaces, making it look ugly from time to time
truelight
parents: 6977
diff changeset
   677
			dest[0] = ' ';
60b0e082723c (svn r9731) -Fix [FS#677]: in news history, newlines weren't replaced with spaces, making it look ugly from time to time
truelight
parents: 6977
diff changeset
   678
			dest++;
60b0e082723c (svn r9731) -Fix [FS#677]: in news history, newlines weren't replaced with spaces, making it look ugly from time to time
truelight
parents: 6977
diff changeset
   679
		} else if (c == '\r') {
2101
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   680
			dest[0] = dest[1] = dest[2] = dest[3] = ' ';
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   681
			dest += 4;
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 4939
diff changeset
   682
		} else if (IsPrintable(c)) {
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 4939
diff changeset
   683
			dest += Utf8Encode(dest, c);
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   684
		}
7038
60b0e082723c (svn r9731) -Fix [FS#677]: in news history, newlines weren't replaced with spaces, making it look ugly from time to time
truelight
parents: 6977
diff changeset
   685
		c_last = c;
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   686
	}
2101
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   687
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   688
	*dest = '\0';
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   689
	/* Truncate and show string; postfixed by '...' if neccessary */
763d0d48f39c (svn r2611) - CodeChange: use standardized truncutation with the newsmessage-history window as well
Darkvater
parents: 1959
diff changeset
   690
	DoDrawStringTruncated(buffer2, x, y, color, maxw);
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   691
}
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   692
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   693
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   694
static void MessageHistoryWndProc(Window *w, WindowEvent *e)
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   695
{
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   696
	switch (e->event) {
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   697
		case WE_PAINT: {
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   698
			int y = 19;
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   699
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   700
			SetVScrollCount(w, _total_news);
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   701
			DrawWindowWidgets(w);
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   702
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   703
			if (_total_news == 0) break;
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   704
			NewsID show = min(_total_news, w->vscroll.cap);
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   705
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   706
			for (NewsID p = w->vscroll.pos; p < w->vscroll.pos + show; p++) {
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   707
				/* get news in correct order */
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   708
				const NewsItem *ni = &_news_items[getNews(p)];
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   709
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   710
				SetDParam(0, ni->date);
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   711
				DrawString(4, y, STR_SHORT_DATE, TC_WHITE);
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   712
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   713
				DrawNewsString(82, y, TC_WHITE, ni, w->width - 95);
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   714
				y += 12;
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   715
			}
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   716
			break;
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   717
		}
1097
653c846fb5d9 (svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents: 1095
diff changeset
   718
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   719
		case WE_CLICK:
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   720
			if (e->we.click.widget == 3) {
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   721
				int y = (e->we.click.pt.y - 19) / 12;
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   722
				NewsID p = getNews(y + w->vscroll.pos);
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   723
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   724
				if (p != INVALID_NEWS) ShowNewsMessage(p);
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   725
			}
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   726
			break;
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   727
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   728
		case WE_RESIZE:
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   729
			w->vscroll.cap += e->we.sizing.diff.y / 12;
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   730
			break;
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   731
	}
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   732
}
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   733
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   734
static const Widget _message_history_widgets[] = {
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4293
diff changeset
   735
{   WWT_CLOSEBOX,   RESIZE_NONE,    13,     0,    10,     0,    13, STR_00C5,            STR_018B_CLOSE_WINDOW},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4293
diff changeset
   736
{    WWT_CAPTION,  RESIZE_RIGHT,    13,    11,   387,     0,    13, STR_MESSAGE_HISTORY, STR_018C_WINDOW_TITLE_DRAG_THIS},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4293
diff changeset
   737
{  WWT_STICKYBOX,     RESIZE_LR,    13,   388,   399,     0,    13, 0x0,                 STR_STICKY_BUTTON},
4938
074f734a91ca (svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents: 4912
diff changeset
   738
{      WWT_PANEL,     RESIZE_RB,    13,     0,   387,    14,   139, 0x0,                 STR_MESSAGE_HISTORY_TIP},
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4293
diff changeset
   739
{  WWT_SCROLLBAR,    RESIZE_LRB,    13,   388,   399,    14,   127, 0x0,                 STR_0190_SCROLL_BAR_SCROLLS_LIST},
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4293
diff changeset
   740
{  WWT_RESIZEBOX,   RESIZE_LRTB,    13,   388,   399,   128,   139, 0x0,                 STR_RESIZE_BUTTON},
176
84990c4b9212 (svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents: 102
diff changeset
   741
{   WIDGETS_END},
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   742
};
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   743
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   744
static const WindowDesc _message_history_desc = {
7837
65d7362153a6 (svn r10704) -Codechange: provide an infrastructure to have resizable windows that are smaller than the default window size.
rubidium
parents: 7762
diff changeset
   745
	240, 22, 400, 140, 400, 140,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6090
diff changeset
   746
	WC_MESSAGE_HISTORY, WC_NONE,
1097
653c846fb5d9 (svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents: 1095
diff changeset
   747
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   748
	_message_history_widgets,
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   749
	MessageHistoryWndProc
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   750
};
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   751
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   752
/** Display window with news messages history */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6535
diff changeset
   753
void ShowMessageHistory()
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   754
{
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   755
	DeleteWindowById(WC_MESSAGE_HISTORY, 0);
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   756
	Window *w = AllocateWindowDesc(&_message_history_desc);
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   757
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   758
	if (w != NULL) {
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   759
		w->vscroll.cap = 10;
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   760
		w->vscroll.count = _total_news;
1097
653c846fb5d9 (svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents: 1095
diff changeset
   761
		w->resize.step_height = 12;
653c846fb5d9 (svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents: 1095
diff changeset
   762
		w->resize.height = w->height - 12 * 6; // minimum of 4 items in the list, each item 12 high
653c846fb5d9 (svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents: 1095
diff changeset
   763
		w->resize.step_width = 1;
653c846fb5d9 (svn r1598) Feature: Message history now is stickyable and resizeable
dominik
parents: 1095
diff changeset
   764
		w->resize.width = 200; // can't make window any smaller than 200 pixel
89
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   765
		SetWindowDirty(w);
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   766
	}
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   767
}
b4a7784217ab (svn r90) Fix: Some news system bugfixes
dominik
parents: 83
diff changeset
   768
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   769
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   770
/** News settings window widget offset constants */
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   771
enum {
8839
bd8a5bb77cd7 (svn r11909) -Codechange: use dropdown widget for player livery, network lobby/setup and news settings windows
peter1138
parents: 8780
diff changeset
   772
	WIDGET_NEWSOPT_DROP_SUMMARY = 4,  ///< Dropdown that adjusts at once the level for all settings
bd8a5bb77cd7 (svn r11909) -Codechange: use dropdown widget for player livery, network lobby/setup and news settings windows
peter1138
parents: 8780
diff changeset
   773
	WIDGET_NEWSOPT_SOUNDTICKER  = 6,  ///< Button activating sound on events
bd8a5bb77cd7 (svn r11909) -Codechange: use dropdown widget for player livery, network lobby/setup and news settings windows
peter1138
parents: 8780
diff changeset
   774
	WIDGET_NEWSOPT_START_OPTION = 8,  ///< First widget that is part of a group [<] .. [.]
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   775
};
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   776
8094
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   777
/**
58a8fe00746a (svn r11125) -Documentation: add/update the documentation of news*. Based on a patch by Progman.
rubidium
parents: 7837
diff changeset
   778
 * Setup the disabled/enabled buttons in the message window
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   779
 * If the value is 'off' disable the [<] widget, and enable the [>] one
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   780
 * Same-wise for all the others. Starting value of 4 is the first widget
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   781
 * group. These are grouped as [<][>] .. [<][>], etc.
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   782
 * @param w Window been used
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   783
 * @param value to set in the widget
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   784
 * @param element index of the group of widget to set
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   785
 */
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   786
static void SetMessageButtonStates(Window *w, byte value, int element)
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   787
{
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   788
	element *= NB_WIDG_PER_SETTING;
4709
eff35edfb653 (svn r6619) -Codechange: Use accessors for disabled_state.
belugas
parents: 4634
diff changeset
   789
8493
3ab458f7cff4 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 8466
diff changeset
   790
	w->SetWidgetDisabledState(element + WIDGET_NEWSOPT_START_OPTION, value == 0);
3ab458f7cff4 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 8466
diff changeset
   791
	w->SetWidgetDisabledState(element + WIDGET_NEWSOPT_START_OPTION + 2, value == 2);
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   792
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   793
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   794
/**
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   795
 * Event handler of the Message Options window
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   796
 * @param w window pointer
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   797
 * @param e event been triggered
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   798
 */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   799
static void MessageOptionsWndProc(Window *w, WindowEvent *e)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   800
{
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   801
	static const StringID message_opt[] = {STR_OFF, STR_SUMMARY, STR_FULL, INVALID_STRING_ID};
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   802
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   803
	/* WP(w, def_d).data_1 stores state of the ALL on/off/summary button */
427
d87c7d677d2f (svn r626) Merge r438 to trunk:
tron
parents: 337
diff changeset
   804
	switch (e->event) {
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   805
		case WE_CREATE: {
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   806
			uint32 val = _news_display_opt;
6628
2b97a7deed52 (svn r9137) -Fix: if all news-setting buttons show 'full', make the ALL-button show 'full' too
truelight
parents: 6609
diff changeset
   807
			uint32 all_val;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   808
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   809
			/* Set up the initial disabled buttons in the case of 'off' or 'full' */
6628
2b97a7deed52 (svn r9137) -Fix: if all news-setting buttons show 'full', make the ALL-button show 'full' too
truelight
parents: 6609
diff changeset
   810
			all_val = val & 0x3;
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   811
			for (int i = 0; i < NT_END; i++, val >>= 2) {
6628
2b97a7deed52 (svn r9137) -Fix: if all news-setting buttons show 'full', make the ALL-button show 'full' too
truelight
parents: 6609
diff changeset
   812
				SetMessageButtonStates(w, val & 0x3, i);
2b97a7deed52 (svn r9137) -Fix: if all news-setting buttons show 'full', make the ALL-button show 'full' too
truelight
parents: 6609
diff changeset
   813
				/* If the value doesn't match the ALL-button value, set the ALL-button value to 'off' */
2b97a7deed52 (svn r9137) -Fix: if all news-setting buttons show 'full', make the ALL-button show 'full' too
truelight
parents: 6609
diff changeset
   814
				if ((val & 0x3) != all_val) all_val = 0;
2b97a7deed52 (svn r9137) -Fix: if all news-setting buttons show 'full', make the ALL-button show 'full' too
truelight
parents: 6609
diff changeset
   815
			}
2b97a7deed52 (svn r9137) -Fix: if all news-setting buttons show 'full', make the ALL-button show 'full' too
truelight
parents: 6609
diff changeset
   816
			/* If all values are the same value, the ALL-button will take over this value */
2b97a7deed52 (svn r9137) -Fix: if all news-setting buttons show 'full', make the ALL-button show 'full' too
truelight
parents: 6609
diff changeset
   817
			WP(w, def_d).data_1 = all_val;
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   818
		} break;
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   819
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   820
		case WE_PAINT: {
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   821
			uint32 val = _news_display_opt;
4709
eff35edfb653 (svn r6619) -Codechange: Use accessors for disabled_state.
belugas
parents: 4634
diff changeset
   822
8493
3ab458f7cff4 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 8466
diff changeset
   823
			if (_news_ticker_sound) w->LowerWidget(WIDGET_NEWSOPT_SOUNDTICKER);
8839
bd8a5bb77cd7 (svn r11909) -Codechange: use dropdown widget for player livery, network lobby/setup and news settings windows
peter1138
parents: 8780
diff changeset
   824
bd8a5bb77cd7 (svn r11909) -Codechange: use dropdown widget for player livery, network lobby/setup and news settings windows
peter1138
parents: 8780
diff changeset
   825
			w->widget[WIDGET_NEWSOPT_DROP_SUMMARY].data = message_opt[WP(w, def_d).data_1];
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   826
			DrawWindowWidgets(w);
1688
787400219027 (svn r2192) - Add greater control to the 'message options' window. Now you can turn off the telegraphc ticker sound for summarized messages, or turn off news-messages altogether (you get a red blot to notify you though). The [<][>] set the settings in one way, while clicking on the option itself, cycles it. This commit also 'fixes' bugs [1166973], [1121484] and patch [1169930].
Darkvater
parents: 1648
diff changeset
   827
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   828
			/* Draw the string of each setting on each button. */
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   829
			for (int i = 0, y = 26; i < NT_END; i++, y += 12, val >>= 2) {
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   830
				/* 51 comes from 13 + 89 (left and right of the button)+1, shiefted by one as to get division,
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   831
				 * which will give centered position */
8320
6ffad7a5d242 (svn r11374) -Codechange: Give meaning to the magical number that specifies the color of the text in a DrawString call.
belugas
parents: 8094
diff changeset
   832
				DrawStringCentered(51, y + 1, message_opt[val & 0x3], TC_BLACK);
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   833
			}
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   834
		} break;
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   835
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   836
		case WE_CLICK:
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   837
			switch (e->we.click.widget) {
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   838
				case WIDGET_NEWSOPT_DROP_SUMMARY: // Dropdown menu for all settings
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   839
					ShowDropDownMenu(w, message_opt, WP(w, def_d).data_1, WIDGET_NEWSOPT_DROP_SUMMARY, 0, 0);
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   840
					break;
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   841
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   842
				case WIDGET_NEWSOPT_SOUNDTICKER: // Change ticker sound on/off
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   843
					_news_ticker_sound ^= 1;
8493
3ab458f7cff4 (svn r11555) -Codechange: use the new members introduced in r11551.
rubidium
parents: 8466
diff changeset
   844
					w->ToggleWidgetLoweredState(e->we.click.widget);
8524
baf4ab1ba18d (svn r11588) -Codechange: use the new member introduced in r11551
glx
parents: 8493
diff changeset
   845
					w->InvalidateWidget(e->we.click.widget);
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   846
					break;
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   847
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   848
				default: { // Clicked on the [<] .. [>] widgets
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   849
					int wid = e->we.click.widget - WIDGET_NEWSOPT_START_OPTION;
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   850
					if (wid >= 0 && wid < (NB_WIDG_PER_SETTING * NT_END)) {
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   851
						int element = wid / NB_WIDG_PER_SETTING;
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   852
						byte val = (GetNewsDisplayValue(element) + ((wid % NB_WIDG_PER_SETTING) ? 1 : -1)) % 3;
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   853
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   854
						SetMessageButtonStates(w, val, element);
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   855
						SetNewsDisplayValue(element, val);
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   856
						SetWindowDirty(w);
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   857
					}
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   858
				} break;
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   859
			}
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   860
			break;
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   861
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   862
		case WE_DROPDOWN_SELECT: // Select all settings for newsmessages
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   863
			WP(w, def_d).data_1 = e->we.dropdown.index;
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   864
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   865
			for (int i = 0; i < NT_END; i++) {
6609
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   866
				SetMessageButtonStates(w, e->we.dropdown.index, i);
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   867
				SetNewsDisplayValue(i, e->we.dropdown.index);
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   868
			}
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   869
			SetWindowDirty(w);
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   870
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   871
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   872
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   873
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   874
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   875
/*
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   876
* The news settings window widgets
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   877
*
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   878
* Main part of the window is a list of news-setting lines, one for each news category.
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   879
* Each line is constructed by an expansion of the \c NEWS_SETTINGS_LINE macro
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   880
*/
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   881
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   882
/**
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   883
* Macro to construct one news-setting line in the news-settings window.
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   884
* One line consists of four widgets, namely
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   885
* - A [<] button
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   886
* - A [...] label
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   887
* - A [>] button
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   888
* - A text label describing the news category
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   889
* Horizontal positions of the widgets are hard-coded, vertical start position is (\a basey + \a linenum * \c NEWS_SETTING_BASELINE_SKIP).
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   890
* Height of one line is 12, with the text label shifted 1 pixel down.
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   891
*
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   892
* First line should be widget number WIDGET_NEWSOPT_START_OPTION
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   893
*
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   894
* @param basey: Base Y coordinate
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   895
* @param linenum: Count, news-setting is the \a linenum-th line
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   896
* @param text: StringID for the text label to display
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   897
*/
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   898
#define NEWS_SETTINGS_LINE(basey, linenum, text) \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   899
	{ WWT_PUSHIMGBTN, RESIZE_NONE, COLOUR_YELLOW, \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   900
	    4,  12,  basey     + linenum * NEWS_SETTING_BASELINE_SKIP,  basey + 11 + linenum * NEWS_SETTING_BASELINE_SKIP, \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   901
	  SPR_ARROW_LEFT, STR_HSCROLL_BAR_SCROLLS_LIST}, \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   902
	{ WWT_PUSHTXTBTN, RESIZE_NONE, COLOUR_YELLOW, \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   903
	   13,  89,  basey     + linenum * NEWS_SETTING_BASELINE_SKIP,  basey + 11 + linenum * NEWS_SETTING_BASELINE_SKIP, \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   904
	  STR_EMPTY, STR_NULL}, \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   905
	{ WWT_PUSHIMGBTN, RESIZE_NONE, COLOUR_YELLOW, \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   906
	   90,  98,  basey     + linenum * NEWS_SETTING_BASELINE_SKIP,  basey + 11 + linenum * NEWS_SETTING_BASELINE_SKIP, \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   907
	  SPR_ARROW_RIGHT, STR_HSCROLL_BAR_SCROLLS_LIST}, \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   908
        { WWT_TEXT, RESIZE_NONE, COLOUR_YELLOW, \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   909
	  103, 409,  basey + 1 + linenum * NEWS_SETTING_BASELINE_SKIP,  basey + 13 + linenum * NEWS_SETTING_BASELINE_SKIP, \
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   910
	  text, STR_NULL}
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   911
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   912
static const int NEWS_SETTING_BASELINE_SKIP = 12; ///< Distance between two news-setting lines, should be at least 12
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   913
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   914
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   915
static const Widget _message_options_widgets[] = {
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   916
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_BROWN,   0,  10,  0, 13,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   917
	STR_00C5,                 STR_018B_CLOSE_WINDOW},
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   918
{  WWT_CAPTION, RESIZE_NONE, COLOUR_BROWN,  11, 409,  0, 13,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   919
	STR_0204_MESSAGE_OPTIONS, STR_018C_WINDOW_TITLE_DRAG_THIS},
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   920
{    WWT_PANEL, RESIZE_NONE, COLOUR_BROWN,   0, 409, 14, 64 + NT_END * NEWS_SETTING_BASELINE_SKIP,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   921
	0x0,                      STR_NULL},
4344
5d0e40cd67b9 (svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents: 4293
diff changeset
   922
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   923
/* Text at the top of the main panel, in black */
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   924
{    WWT_LABEL, RESIZE_NONE, COLOUR_BROWN,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   925
	  0, 409, 13, 26,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   926
	STR_0205_MESSAGE_TYPES,   STR_NULL},
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   927
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   928
/* General drop down and sound button, widgets WIDGET_NEWSOPT_BTN_SUMMARY and WIDGET_NEWSOPT_DROP_SUMMARY */
8839
bd8a5bb77cd7 (svn r11909) -Codechange: use dropdown widget for player livery, network lobby/setup and news settings windows
peter1138
parents: 8780
diff changeset
   929
{  WWT_DROPDOWN, RESIZE_NONE, COLOUR_YELLOW,
bd8a5bb77cd7 (svn r11909) -Codechange: use dropdown widget for player livery, network lobby/setup and news settings windows
peter1138
parents: 8780
diff changeset
   930
	  4,  98,  34 + NT_END * NEWS_SETTING_BASELINE_SKIP,  45 + NT_END * NEWS_SETTING_BASELINE_SKIP,
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   931
	0x0, STR_NULL},
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   932
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   933
{      WWT_TEXT, RESIZE_NONE, COLOUR_YELLOW,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   934
	103, 409,  35 + NT_END * NEWS_SETTING_BASELINE_SKIP,  47 + NT_END * NEWS_SETTING_BASELINE_SKIP,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   935
	STR_MESSAGES_ALL, STR_NULL},
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   936
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   937
/* Below is widget WIDGET_NEWSOPT_SOUNDTICKER */
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   938
{ WWT_TEXTBTN_2, RESIZE_NONE, COLOUR_YELLOW,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   939
	  4,  98,  46 + NT_END * NEWS_SETTING_BASELINE_SKIP,  57 + NT_END * NEWS_SETTING_BASELINE_SKIP,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   940
	STR_02DB_OFF,  STR_NULL},
6609
7c466c7c850a (svn r9097) -Fix [FS#525]: open and close messages now have their own setting, so you can hide economy changes, but do show open/close of industries
truelight
parents: 6605
diff changeset
   941
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   942
{      WWT_TEXT, RESIZE_NONE, COLOUR_YELLOW,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   943
	103, 409,  47 + NT_END * NEWS_SETTING_BASELINE_SKIP,  59 + NT_END * NEWS_SETTING_BASELINE_SKIP,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   944
	STR_MESSAGE_SOUND, STR_NULL},
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   945
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   946
/* List of news-setting lines (4 widgets for each line).
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   947
 * First widget must be number WIDGET_NEWSOPT_START_OPTION
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   948
 */
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   949
NEWS_SETTINGS_LINE(26, NT_ARRIVAL_PLAYER, STR_0206_ARRIVAL_OF_FIRST_VEHICLE),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   950
NEWS_SETTINGS_LINE(26, NT_ARRIVAL_OTHER,  STR_0207_ARRIVAL_OF_FIRST_VEHICLE),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   951
NEWS_SETTINGS_LINE(26, NT_ACCIDENT, STR_0208_ACCIDENTS_DISASTERS),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   952
NEWS_SETTINGS_LINE(26, NT_COMPANY_INFO, STR_0209_COMPANY_INFORMATION),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   953
NEWS_SETTINGS_LINE(26, NT_OPENCLOSE, STR_NEWS_OPEN_CLOSE),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   954
NEWS_SETTINGS_LINE(26, NT_ECONOMY, STR_020A_ECONOMY_CHANGES),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   955
NEWS_SETTINGS_LINE(26, NT_INDUSTRY_PLAYER, STR_INDUSTRY_CHANGES_SERVED_BY_PLAYER),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   956
NEWS_SETTINGS_LINE(26, NT_INDUSTRY_OTHER, STR_INDUSTRY_CHANGES_SERVED_BY_OTHER),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   957
NEWS_SETTINGS_LINE(26, NT_INDUSTRY_NOBODY, STR_OTHER_INDUSTRY_PRODUCTION_CHANGES),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   958
NEWS_SETTINGS_LINE(26, NT_ADVICE, STR_020B_ADVICE_INFORMATION_ON_PLAYER),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   959
NEWS_SETTINGS_LINE(26, NT_NEW_VEHICLES, STR_020C_NEW_VEHICLES),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   960
NEWS_SETTINGS_LINE(26, NT_ACCEPTANCE, STR_020D_CHANGES_OF_CARGO_ACCEPTANCE),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   961
NEWS_SETTINGS_LINE(26, NT_SUBSIDIES, STR_020E_SUBSIDIES),
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   962
NEWS_SETTINGS_LINE(26, NT_GENERAL, STR_020F_GENERAL_INFORMATION),
6605
0d727f17ee17 (svn r9089) -Codechange: Remove the 32 widgets limit on News Options window.
belugas
parents: 6573
diff changeset
   963
176
84990c4b9212 (svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents: 102
diff changeset
   964
{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   965
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   966
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   967
static const WindowDesc _message_options_desc = {
8387
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   968
	270,  22,  410,  65 + NT_END * NEWS_SETTING_BASELINE_SKIP,
30f519812d62 (svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents: 8350
diff changeset
   969
	           410,  65 + NT_END * NEWS_SETTING_BASELINE_SKIP,
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 6090
diff changeset
   970
	WC_GAME_OPTIONS, WC_NONE,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   971
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   972
	_message_options_widgets,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   973
	MessageOptionsWndProc
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   974
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   975
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6535
diff changeset
   976
void ShowMessageOptions()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   977
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   978
	DeleteWindowById(WC_GAME_OPTIONS, 0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   979
	AllocateWindowDesc(&_message_options_desc);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   980
}
3139
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
   981
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
   982
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
   983
void DeleteVehicleNews(VehicleID vid, StringID news)
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
   984
{
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
   985
	for (NewsID n = _oldest_news; _latest_news != INVALID_NEWS; n = IncreaseIndex(n)) {
5245
5f1a514e8bfe (svn r7369) -Cleanup: Some coding style, usage of increaseIndex and decreaseIndex to loop through the
Darkvater
parents: 5244
diff changeset
   986
		const NewsItem *ni = &_news_items[n];
3139
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
   987
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
   988
		if (ni->flags & NF_VEHICLE &&
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
   989
				ni->data_a == vid &&
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
   990
				(news == INVALID_STRING_ID || ni->string_id == news)) {
5846
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   991
			/* If we delete a forced news and it is just before the current news
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   992
			 * then we need to advance to the next news (if any) */
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   993
			if (_forced_news == n) MoveToNextItem();
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
   994
			if (_forced_news == INVALID_NEWS && _current_news == n) MoveToNextItem();
5254
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
   995
			_total_news--;
3139
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
   996
5771
7288d4e4bfba (svn r7823) -Fix (r7384 / r7368 / r3757 / r7388): News windows could still cause crashes because
Darkvater
parents: 5726
diff changeset
   997
			/* If this is the last news item, invalidate _latest_news */
7288d4e4bfba (svn r7823) -Fix (r7384 / r7368 / r3757 / r7388): News windows could still cause crashes because
Darkvater
parents: 5726
diff changeset
   998
			if (_total_news == 0) {
7288d4e4bfba (svn r7823) -Fix (r7384 / r7368 / r3757 / r7388): News windows could still cause crashes because
Darkvater
parents: 5726
diff changeset
   999
				assert(_latest_news == _oldest_news);
5254
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1000
				_latest_news = INVALID_NEWS;
10152
919cffdd5d2e (svn r12683) -Fix [FS#1906]: in some cases a news messages would not be shown.
rubidium
parents: 9272
diff changeset
  1001
				_current_news = INVALID_NEWS;
5254
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1002
			}
3139
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
  1003
5254
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1004
			/* Since we only imitate a FIFO removing an arbitrary element does need
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1005
			 * some magic. Remove the item by shifting head towards the tail. eg
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1006
			 *    oldest    remove  last
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1007
			 *        |        |     |
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1008
			 * [------O--------n-----L--]
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1009
			 * will become (change dramatized to make clear)
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1010
			 * [---------O-----------L--]
5771
7288d4e4bfba (svn r7823) -Fix (r7384 / r7368 / r3757 / r7388): News windows could still cause crashes because
Darkvater
parents: 5726
diff changeset
  1011
			 * We also need an update of the current, forced and visible (open window)
7288d4e4bfba (svn r7823) -Fix (r7384 / r7368 / r3757 / r7388): News windows could still cause crashes because
Darkvater
parents: 5726
diff changeset
  1012
			 * news's as this shifting could change the items they were pointing to */
5254
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1013
			if (_total_news != 0) {
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
  1014
				Window *w = FindWindowById(WC_NEWS_WINDOW, 0);
5846
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
  1015
				NewsID visible_news = (w != NULL) ? (NewsID)(WP(w, news_d).ni - _news_items) : INVALID_NEWS;
5771
7288d4e4bfba (svn r7823) -Fix (r7384 / r7368 / r3757 / r7388): News windows could still cause crashes because
Darkvater
parents: 5726
diff changeset
  1016
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
  1017
				for (NewsID i = n;; i = DecreaseIndex(i)) {
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
  1018
					_news_items[i] = _news_items[DecreaseIndex(i)];
5254
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1019
6090
21f2934dee5c (svn r8409) -Regression (r8049): When the latest news was deleted, the news queue wrapped back to the oldest item, showing all news again.
Darkvater
parents: 5919
diff changeset
  1020
					if (i != _latest_news) {
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
  1021
						if (i == _current_news) _current_news = IncreaseIndex(_current_news);
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
  1022
						if (i == _forced_news) _forced_news = IncreaseIndex(_forced_news);
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
  1023
						if (i == visible_news) WP(w, news_d).ni = &_news_items[IncreaseIndex(visible_news)];
6090
21f2934dee5c (svn r8409) -Regression (r8049): When the latest news was deleted, the news queue wrapped back to the oldest item, showing all news again.
Darkvater
parents: 5919
diff changeset
  1024
					}
5771
7288d4e4bfba (svn r7823) -Fix (r7384 / r7368 / r3757 / r7388): News windows could still cause crashes because
Darkvater
parents: 5726
diff changeset
  1025
5784
33ed39422ae6 (svn r7861) -Fix (r7823): Crash when oldest news was deleted. First check the index for oldest news
Darkvater
parents: 5771
diff changeset
  1026
					if (i == _oldest_news) break;
33ed39422ae6 (svn r7861) -Fix (r7823): Crash when oldest news was deleted. First check the index for oldest news
Darkvater
parents: 5771
diff changeset
  1027
				}
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
  1028
				_oldest_news = IncreaseIndex(_oldest_news);
3139
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
  1029
			}
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
  1030
5846
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
  1031
			/*DEBUG(misc, 0, "-cur %3d, old %2d, lat %3d, for %3d, tot %2d",
55f4c68b7616 (svn r8049) -Regression (r7369): Removing certain news windows could cause a crash due to only
Darkvater
parents: 5838
diff changeset
  1032
			  _current_news, _oldest_news, _latest_news, _forced_news, _total_news);*/
5771
7288d4e4bfba (svn r7823) -Fix (r7384 / r7368 / r3757 / r7388): News windows could still cause crashes because
Darkvater
parents: 5726
diff changeset
  1033
9272
83630e52b5fe (svn r12475) -Codechange: cleanup coding style in news_gui.cpp.
rubidium
parents: 9259
diff changeset
  1034
			Window *w = FindWindowById(WC_MESSAGE_HISTORY, 0);
3143
30fa7ff401f8 (svn r3761) Fix two bugs in r3757
tron
parents: 3140
diff changeset
  1035
			if (w != NULL) {
30fa7ff401f8 (svn r3761) Fix two bugs in r3757
tron
parents: 3140
diff changeset
  1036
				SetWindowDirty(w);
30fa7ff401f8 (svn r3761) Fix two bugs in r3757
tron
parents: 3140
diff changeset
  1037
				w->vscroll.count = _total_news;
30fa7ff401f8 (svn r3761) Fix two bugs in r3757
tron
parents: 3140
diff changeset
  1038
			}
3139
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
  1039
		}
5254
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1040
0cf8d2dcc848 (svn r7384) -Fix: No vehicle was removed in DeleteVehicleNews when the fifo-array was full. Update the
Darkvater
parents: 5253
diff changeset
  1041
		if (n == _latest_news) break;
3139
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
  1042
	}
4c950c7ec5c9 (svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents: 2791
diff changeset
  1043
}