#include "stdafx.h"
#include "openttd.h"
#include "gui.h"
#include "window_gui.h"
#include "viewport_func.h"
#include "news.h"
#include "settings_type.h"
#include "transparency.h"
#include "strings_func.h"
#include "window_func.h"
#include "date_func.h"
#include "vehicle_base.h"
#include "sound_func.h"
#include "string_func.h"
#include "widgets/dropdown_func.h"
#include "table/sprites.h"
#include "table/strings.h"
Go to the source code of this file.
Defines | |
| #define | MAX_NEWS 30 |
| Number of news items in the FIFO queue. | |
| #define | NB_WIDG_PER_SETTING 4 |
| #define | INVALID_NEWS 255 |
| #define | NEWS_SETTINGS_LINE(basey, linenum, text) |
| Macro to construct one news-setting line in the news-settings window. | |
Typedefs | |
| typedef byte | NewsID |
Enumerations | |
| enum | { WIDGET_NEWSOPT_DROP_SUMMARY = 4, WIDGET_NEWSOPT_SOUNDTICKER = 6, WIDGET_NEWSOPT_START_OPTION = 8 } |
| News settings window widget offset constants. More... | |
Functions | |
| void | DrawNewsNewVehicleAvail (Window *w) |
| void | DrawNewsBankrupcy (Window *w) |
| static void | MoveToNextItem () |
| Move to the next news item. | |
| StringID | GetNewsStringNewVehicleAvail (const NewsItem *ni) |
| StringID | GetNewsStringBankrupcy (const NewsItem *ni) |
| void | InitNewsItemStructs () |
| Initialize the news-items data structures. | |
| void | DrawNewsBorder (const Window *w) |
| static void | NewsWindowProc (Window *w, WindowEvent *e) |
| static NewsID | increaseIndex (NewsID i) |
| Return the correct index in the pseudo-fifo queue and deals with overflows when increasing the index. | |
| static NewsID | decreaseIndex (NewsID i) |
| Return the correct index in the pseudo-fifo queue and deals with overflows when decreasing the index. | |
| void | AddNewsItem (StringID string, uint32 flags, uint data_a, uint data_b) |
| Add a new newsitem to be shown. | |
| static byte | GetNewsDisplayValue (byte item) |
| Get the value of an item of the news-display settings. | |
| static void | SetNewsDisplayValue (byte item, byte val) |
| Set the value of an item in the news-display settings. | |
| static void | ShowNewspaper (NewsItem *ni) |
| Open up an own newspaper window for the news item. | |
| static void | ShowTicker (const NewsItem *ni) |
| Show news item in the ticker. | |
| static bool | ReadyForNextItem () |
| Are we ready to show another news item? Only if nothing is in the newsticker and no newspaper is displayed. | |
| void | NewsLoop () |
| static void | ShowNewsMessage (NewsID i) |
| Do a forced show of a specific message. | |
| void | ShowLastNewsMessage () |
| Show previous news item. | |
| static NewsID | getNews (NewsID i) |
| static void | DrawNewsString (int x, int y, uint16 color, const NewsItem *ni, uint maxw) |
| Draw an unformatted news message truncated to a maximum length. | |
| static void | MessageHistoryWndProc (Window *w, WindowEvent *e) |
| void | ShowMessageHistory () |
| Display window with news messages history. | |
| static void | SetMessageButtonStates (Window *w, byte value, int element) |
| Setup the disabled/enabled buttons in the message window If the value is 'off' disable the [<] widget, and enable the [>] one Same-wise for all the others. | |
| static void | MessageOptionsWndProc (Window *w, WindowEvent *e) |
| Event handler of the Message Options window. | |
| void | ShowMessageOptions () |
| void | DeleteVehicleNews (VehicleID vid, StringID news) |
| Delete a news item type about a vehicle if the news item type is INVALID_STRING_ID all news about the vehicle get deleted. | |
Variables | |
| NewsItem | _statusbar_news_item |
| uint32 | _news_display_opt |
| bool | _news_ticker_sound |
| static NewsItem | _news_items [MAX_NEWS] |
| The news FIFO queue. | |
| static NewsID | _current_news = INVALID_NEWS |
| points to news item that should be shown next | |
| static NewsID | _oldest_news = 0 |
| points to first item in fifo queue | |
| static NewsID | _latest_news = INVALID_NEWS |
| points to last item in fifo queue | |
| static NewsID | _forced_news = INVALID_NEWS |
| Forced news item. | |
| static byte | _total_news = 0 |
| Number of news items in FIFO queue. | |
| static DrawNewsCallbackProc *const | _draw_news_callback [] |
| GetNewsStringCallbackProc *const | _get_news_string_callback [] |
| static const byte | _news_items_age [NT_END] |
| Maximum age of news items. | |
| static const Widget | _news_type13_widgets [] |
| static WindowDesc | _news_type13_desc |
| static const Widget | _news_type2_widgets [] |
| static WindowDesc | _news_type2_desc |
| static const Widget | _news_type0_widgets [] |
| static WindowDesc | _news_type0_desc |
| static const SoundFx | _news_sounds [NT_END] |
| const char * | _news_display_name [NT_END] |
| static const Widget | _message_history_widgets [] |
| static const WindowDesc | _message_history_desc |
| static const int | NEWS_SETTING_BASELINE_SKIP = 12 |
| Distance between two news-setting lines, should be at least 12. | |
| static const Widget | _message_options_widgets [] |
| static const WindowDesc | _message_options_desc |
Once the array is full, the oldest entry (_oldest_news) is being overwritten by the newest (_latest_news).
* oldest current lastest * | | | * [O------------F-------------C---------L ] * | * forced *
Of course by using an array we can have situations like
* [----L O-----F---------C-----------------] * This is where we have wrapped around the array and have * (MAX_NEWS - O) + L news items *
Definition in file news_gui.cpp.
| #define NEWS_SETTINGS_LINE | ( | basey, | |||
| linenum, | |||||
| text | ) |
Value:
{ WWT_PUSHIMGBTN, RESIZE_NONE, COLOUR_YELLOW, \
4, 12, basey + linenum * NEWS_SETTING_BASELINE_SKIP, basey + 11 + linenum * NEWS_SETTING_BASELINE_SKIP, \
SPR_ARROW_LEFT, STR_HSCROLL_BAR_SCROLLS_LIST}, \
{ WWT_PUSHTXTBTN, RESIZE_NONE, COLOUR_YELLOW, \
13, 89, basey + linenum * NEWS_SETTING_BASELINE_SKIP, basey + 11 + linenum * NEWS_SETTING_BASELINE_SKIP, \
STR_EMPTY, STR_NULL}, \
{ WWT_PUSHIMGBTN, RESIZE_NONE, COLOUR_YELLOW, \
90, 98, basey + linenum * NEWS_SETTING_BASELINE_SKIP, basey + 11 + linenum * NEWS_SETTING_BASELINE_SKIP, \
SPR_ARROW_RIGHT, STR_HSCROLL_BAR_SCROLLS_LIST}, \
{ WWT_TEXT, RESIZE_NONE, COLOUR_YELLOW, \
103, 409, basey + 1 + linenum * NEWS_SETTING_BASELINE_SKIP, basey + 13 + linenum * NEWS_SETTING_BASELINE_SKIP, \
text, STR_NULL}
One line consists of four widgets, namely
NEWS_SETTING_BASELINE_SKIP). Height of one line is 12, with the text label shifted 1 pixel down.First line should be widget number WIDGET_NEWSOPT_START_OPTION
| basey,: | Base Y coordinate | |
| linenum,: | Count, news-setting is the linenum-th line | |
| text,: | StringID for the text label to display |
Definition at line 918 of file news_gui.cpp.
| anonymous enum |
News settings window widget offset constants.
Definition at line 788 of file news_gui.cpp.
| void AddNewsItem | ( | StringID | string, | |
| uint32 | flags, | |||
| uint | data_a, | |||
| uint | data_b | |||
| ) |
Add a new newsitem to be shown.
| string | String to display, can have special values based on parameter flags | |
| flags | various control bits that will show various news-types. See macro NEWS_FLAGS() | |
| data_a | news-specific value based on news type | |
| data_b | news-specific value based on news type |
Definition at line 281 of file news_gui.cpp.
References _current_news, _forced_news, _latest_news, _news_items, _oldest_news, _total_news, increaseIndex(), MAX_NEWS, MoveToNextItem(), NF_INCOLOR, and SetWindowDirty().
Referenced by AircraftEntersTerminal(), ChangeIndustryProduction(), CheckOrders(), CheckSwitchToEuro(), CheckTrainCollision(), CmdBuildIndustry(), CmdPlayerCtrl(), Disaster_CoalMine_Init(), DisasterTick_Airplane(), DisasterTick_Big_Ufo(), DisasterTick_Helicopter(), DisasterTick_Ufo(), DisasterTick_Zeppeliner(), MaybeNewIndustry(), ReportNewsProductionChangeIndustry(), and ShowRejectOrAcceptNews().
| static void DrawNewsString | ( | int | x, | |
| int | y, | |||
| uint16 | color, | |||
| const NewsItem * | ni, | |||
| uint | maxw | |||
| ) | [static] |
Draw an unformatted news message truncated to a maximum length.
If length exceeds maximum length it will be postfixed by '...'
| x,y | position of the string | |
| color | the color the string will be shown in | |
| *ni | NewsItem being printed | |
| maxw | maximum width of string in pixels |
Definition at line 661 of file news_gui.cpp.
References NM_CALLBACK.
| static byte GetNewsDisplayValue | ( | byte | item | ) | [inline, static] |
Get the value of an item of the news-display settings.
This is a little tricky since on/off/summary must use 2 bits to store the value
| item | the item whose value is requested |
Definition at line 443 of file news_gui.cpp.
Referenced by MessageOptionsWndProc(), and MoveToNextItem().
| static void MessageOptionsWndProc | ( | Window * | w, | |
| WindowEvent * | e | |||
| ) | [static] |
Event handler of the Message Options window.
| w | window pointer | |
| e | event been triggered |
Definition at line 816 of file news_gui.cpp.
References GetNewsDisplayValue(), NT_END, SetMessageButtonStates(), SetNewsDisplayValue(), SetWindowDirty(), WIDGET_NEWSOPT_DROP_SUMMARY, WIDGET_NEWSOPT_SOUNDTICKER, and WIDGET_NEWSOPT_START_OPTION.
| static void SetMessageButtonStates | ( | Window * | w, | |
| byte | value, | |||
| int | element | |||
| ) | [static] |
Setup the disabled/enabled buttons in the message window If the value is 'off' disable the [<] widget, and enable the [>] one Same-wise for all the others.
Starting value of 4 is the first widget group. These are grouped as [<][>] .. [<][>], etc.
| w | Window been used | |
| value | to set in the widget | |
| element | index of the group of widget to set |
Definition at line 803 of file news_gui.cpp.
References WIDGET_NEWSOPT_START_OPTION.
Referenced by MessageOptionsWndProc().
| static void SetNewsDisplayValue | ( | byte | item, | |
| byte | val | |||
| ) | [inline, static] |
Set the value of an item in the news-display settings.
This is a little tricky since on/off/summary must use 2 bits to store the value
| item | the item whose value is being set | |
| val | new value |
Definition at line 455 of file news_gui.cpp.
Referenced by MessageOptionsWndProc().
DrawNewsCallbackProc* const _draw_news_callback[] [static] |
Initial value:
{
DrawNewsNewVehicleAvail,
DrawNewsBankrupcy,
}
Definition at line 78 of file news_gui.cpp.
NewsID _forced_news = INVALID_NEWS [static] |
Forced news item.
Users can force an item by accessing the history or "last message". If the message being shown was forced by the user, its index is stored in _forced_news. Otherwise, _forced_news variable is INVALID_NEWS.
Definition at line 67 of file news_gui.cpp.
Referenced by AddNewsItem(), DeleteVehicleNews(), InitNewsItemStructs(), MoveToNextItem(), ReadyForNextItem(), ShowLastNewsMessage(), ShowNewsMessage(), and ShowNewspaper().
| GetNewsStringCallbackProc* const _get_news_string_callback[] |
Initial value:
{
GetNewsStringNewVehicleAvail,
GetNewsStringBankrupcy,
}
Definition at line 84 of file news_gui.cpp.
const WindowDesc _message_history_desc [static] |
Initial value:
{
240, 22, 400, 140, 400, 140,
WC_MESSAGE_HISTORY, WC_NONE,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
_message_history_widgets,
MessageHistoryWndProc
}
Definition at line 759 of file news_gui.cpp.
const Widget _message_history_widgets[] [static] |
Initial value:
{
{ WWT_CLOSEBOX, RESIZE_NONE, 13, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_RIGHT, 13, 11, 387, 0, 13, STR_MESSAGE_HISTORY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_STICKYBOX, RESIZE_LR, 13, 388, 399, 0, 13, 0x0, STR_STICKY_BUTTON},
{ WWT_PANEL, RESIZE_RB, 13, 0, 387, 14, 139, 0x0, STR_MESSAGE_HISTORY_TIP},
{ WWT_SCROLLBAR, RESIZE_LRB, 13, 388, 399, 14, 127, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
{ WWT_RESIZEBOX, RESIZE_LRTB, 13, 388, 399, 128, 139, 0x0, STR_RESIZE_BUTTON},
{ WIDGETS_END},
}
Definition at line 749 of file news_gui.cpp.
const WindowDesc _message_options_desc [static] |
Initial value:
{
270, 22, 410, 65 + NT_END * NEWS_SETTING_BASELINE_SKIP,
410, 65 + NT_END * NEWS_SETTING_BASELINE_SKIP,
WC_GAME_OPTIONS, WC_NONE,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
_message_options_widgets,
MessageOptionsWndProc
}
Definition at line 987 of file news_gui.cpp.
| const char* _news_display_name[NT_END] |
Initial value:
{
"arrival_player",
"arrival_other",
"accident",
"company_info",
"openclose",
"economy",
"production_player",
"production_other",
"production_nobody",
"advice",
"new_vehicles",
"acceptance",
"subsidies",
"general",
}
Definition at line 420 of file news_gui.cpp.
const byte _news_items_age[NT_END] [static] |
Initial value:
{
60,
60,
90,
60,
90,
30,
30,
30,
30,
150,
30,
90,
180,
60
}
Don't show item if it's older than x days, corresponds with NewsType in news.h
Definition at line 341 of file news_gui.cpp.
const SoundFx _news_sounds[NT_END] [static] |
Initial value:
{
SND_1D_APPLAUSE,
SND_1D_APPLAUSE,
SND_BEGIN,
SND_BEGIN,
SND_BEGIN,
SND_BEGIN,
SND_BEGIN,
SND_BEGIN,
SND_BEGIN,
SND_BEGIN,
SND_1E_OOOOH,
SND_BEGIN,
SND_BEGIN,
SND_BEGIN,
}
Definition at line 403 of file news_gui.cpp.
WindowDesc _news_type0_desc [static] |
Initial value:
{
WDP_CENTER, 476, 280, 87, 280, 87,
WC_NEWS_WINDOW, WC_NONE,
WDF_DEF_WIDGET,
_news_type0_widgets,
NewsWindowProc
}
Definition at line 395 of file news_gui.cpp.
const Widget _news_type0_widgets[] [static] |
Initial value:
{
{ WWT_PANEL, RESIZE_NONE, 5, 0, 279, 14, 86, 0x0, STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 5, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 5, 11, 279, 0, 13, STR_012C_MESSAGE, STR_NULL},
{ WWT_INSET, RESIZE_NONE, 5, 2, 277, 16, 64, 0x0, STR_NULL},
{ WIDGETS_END},
}
Definition at line 387 of file news_gui.cpp.
WindowDesc _news_type13_desc [static] |
Initial value:
{
WDP_CENTER, 476, 430, 170, 430, 170,
WC_NEWS_WINDOW, WC_NONE,
WDF_DEF_WIDGET,
_news_type13_widgets,
NewsWindowProc
}
Definition at line 365 of file news_gui.cpp.
const Widget _news_type13_widgets[] [static] |
Initial value:
{
{ WWT_PANEL, RESIZE_NONE, 15, 0, 429, 0, 169, 0x0, STR_NULL},
{ WWT_PANEL, RESIZE_NONE, 15, 0, 10, 0, 11, 0x0, STR_NULL},
{ WIDGETS_END},
}
Definition at line 359 of file news_gui.cpp.
WindowDesc _news_type2_desc [static] |
Initial value:
{
WDP_CENTER, 476, 430, 130, 430, 130,
WC_NEWS_WINDOW, WC_NONE,
WDF_DEF_WIDGET,
_news_type2_widgets,
NewsWindowProc
}
Definition at line 379 of file news_gui.cpp.
const Widget _news_type2_widgets[] [static] |
Initial value:
{
{ WWT_PANEL, RESIZE_NONE, 15, 0, 429, 0, 129, 0x0, STR_NULL},
{ WWT_PANEL, RESIZE_NONE, 15, 0, 10, 0, 11, 0x0, STR_NULL},
{ WIDGETS_END},
}
Definition at line 373 of file news_gui.cpp.
byte _total_news = 0 [static] |
Number of news items in FIFO queue.
Definition at line 69 of file news_gui.cpp.
Referenced by AddNewsItem(), DeleteVehicleNews(), InitNewsItemStructs(), ShowMessageHistory(), and ShowNewsMessage().
1.5.6