(svn r13114) -Codechange: use InvalidateData instead of direct window access to modify the state of the statusbar from outside the statusbar.

This commit is contained in:
rubidium 2008-05-16 07:08:04 +00:00
parent 7c7a4de3e5
commit 7491b792e2
8 changed files with 55 additions and 17 deletions

View File

@ -1439,6 +1439,10 @@
RelativePath=".\..\src\station_type.h" RelativePath=".\..\src\station_type.h"
> >
</File> </File>
<File
RelativePath=".\..\src\statusbar_gui.h"
>
</File>
<File <File
RelativePath=".\..\src\stdafx.h" RelativePath=".\..\src\stdafx.h"
> >

View File

@ -1436,6 +1436,10 @@
RelativePath=".\..\src\station_type.h" RelativePath=".\..\src\station_type.h"
> >
</File> </File>
<File
RelativePath=".\..\src\statusbar_gui.h"
>
</File>
<File <File
RelativePath=".\..\src\stdafx.h" RelativePath=".\..\src\stdafx.h"
> >

View File

@ -285,6 +285,7 @@ station_base.h
station_func.h station_func.h
station_gui.h station_gui.h
station_type.h station_type.h
statusbar_gui.h
stdafx.h stdafx.h
string_func.h string_func.h
string_type.h string_type.h

View File

@ -29,6 +29,7 @@
#include "player_gui.h" #include "player_gui.h"
#include "settings_type.h" #include "settings_type.h"
#include "toolbar_gui.h" #include "toolbar_gui.h"
#include "statusbar_gui.h"
#include "variables.h" #include "variables.h"
#include "tilehighlight_func.h" #include "tilehighlight_func.h"
@ -431,8 +432,6 @@ void SetupColorsAndInitialWindow()
} }
} }
extern void ShowStatusBar();
void ShowVitalWindows() void ShowVitalWindows()
{ {
AllocateToolbar(); AllocateToolbar();

View File

@ -18,6 +18,7 @@
#include "string_func.h" #include "string_func.h"
#include "widgets/dropdown_func.h" #include "widgets/dropdown_func.h"
#include "map_func.h" #include "map_func.h"
#include "statusbar_gui.h"
#include "table/sprites.h" #include "table/sprites.h"
#include "table/strings.h" #include "table/strings.h"
@ -472,8 +473,7 @@ static void ShowTicker(const NewsItem *ni)
if (_news_ticker_sound) SndPlayFx(SND_16_MORSE); if (_news_ticker_sound) SndPlayFx(SND_16_MORSE);
_statusbar_news_item = *ni; _statusbar_news_item = *ni;
Window *w = FindWindowById(WC_STATUS_BAR, 0); InvalidateWindowData(WC_STATUS_BAR, 0, SBI_SHOW_TICKER);
if (w != NULL) WP(w, def_d).data_1 = 360;
} }
@ -490,8 +490,7 @@ static bool ReadyForNextItem()
/* Ticker message /* Ticker message
* Check if the status bar message is still being displayed? */ * Check if the status bar message is still being displayed? */
const Window *w = FindWindowById(WC_STATUS_BAR, 0); if (IsNewsTickerShown()) return false;
if (w != NULL && WP(w, const def_d).data_1 > -1280) return false;
/* Newspaper message, decrement duration counter */ /* Newspaper message, decrement duration counter */
if (ni->duration != 0) ni->duration--; if (ni->duration != 0) ni->duration--;
@ -517,15 +516,9 @@ static void MoveToNextItem()
switch (_news_type_data[type].display) { switch (_news_type_data[type].display) {
default: NOT_REACHED(); default: NOT_REACHED();
case ND_OFF: { // Off - show nothing only a small reminder in the status bar case ND_OFF: // Off - show nothing only a small reminder in the status bar
Window *w = FindWindowById(WC_STATUS_BAR, 0); InvalidateWindowData(WC_STATUS_BAR, 0, SBI_SHOW_REMINDER);
if (w != NULL) {
WP(w, def_d).data_2 = 91;
w->SetDirty();
}
break; break;
}
case ND_SUMMARY: // Summary - show ticker, but if forced big, cascade to full case ND_SUMMARY: // Summary - show ticker, but if forced big, cascade to full
if (!(ni->flags & NF_FORCE_BIG)) { if (!(ni->flags & NF_FORCE_BIG)) {

View File

@ -30,6 +30,7 @@
#include "core/endian_func.hpp" #include "core/endian_func.hpp"
#include "vehicle_base.h" #include "vehicle_base.h"
#include "autoreplace_base.h" #include "autoreplace_base.h"
#include "statusbar_gui.h"
#include <list> #include <list>
#include "table/strings.h" #include "table/strings.h"
@ -1493,7 +1494,7 @@ static void SaveFileStart()
_fast_forward = 0; _fast_forward = 0;
if (_cursor.sprite == SPR_CURSOR_MOUSE) SetMouseCursor(SPR_CURSOR_ZZZ, PAL_NONE); if (_cursor.sprite == SPR_CURSOR_MOUSE) SetMouseCursor(SPR_CURSOR_ZZZ, PAL_NONE);
InvalidateWindowData(WC_STATUS_BAR, 0, true); InvalidateWindowData(WC_STATUS_BAR, 0, SBI_SAVELOAD_START);
_ts.saveinprogress = true; _ts.saveinprogress = true;
} }
@ -1504,7 +1505,7 @@ static void SaveFileDone()
_fast_forward = _ts.ff_state; _fast_forward = _ts.ff_state;
if (_cursor.sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE); if (_cursor.sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE);
InvalidateWindowData(WC_STATUS_BAR, 0, false); InvalidateWindowData(WC_STATUS_BAR, 0, SBI_SAVELOAD_FINISH);
_ts.saveinprogress = false; _ts.saveinprogress = false;
} }

View File

@ -18,6 +18,7 @@
#include "window_gui.h" #include "window_gui.h"
#include "variables.h" #include "variables.h"
#include "window_func.h" #include "window_func.h"
#include "statusbar_gui.h"
#include "table/strings.h" #include "table/strings.h"
#include "table/sprites.h" #include "table/sprites.h"
@ -107,7 +108,13 @@ static void StatusBarWndProc(Window *w, WindowEvent *e)
} break; } break;
case WE_INVALIDATE_DATA: case WE_INVALIDATE_DATA:
WP(w, def_d).data_3 = e->we.invalidate.data; switch (e->we.invalidate.data) {
default: NOT_REACHED();
case SBI_SAVELOAD_START: WP(w, def_d).data_3 = true; break;
case SBI_SAVELOAD_FINISH: WP(w, def_d).data_3 = false; break;
case SBI_SHOW_TICKER: WP(w, def_d).data_1 = 360; break;
case SBI_SHOW_REMINDER: WP(w, def_d).data_2 = 91; break;
}
break; break;
case WE_CLICK: case WE_CLICK:
@ -152,6 +159,15 @@ static WindowDesc _main_status_desc = {
StatusBarWndProc StatusBarWndProc
}; };
/**
* Checks whether the news ticker is currently being used.
*/
bool IsNewsTickerShown()
{
const Window *w = FindWindowById(WC_STATUS_BAR, 0);
return w != NULL && WP(w, const def_d).data_1 > -1280;
}
void ShowStatusBar() void ShowStatusBar()
{ {
_main_status_desc.top = _screen.height - 12; _main_status_desc.top = _screen.height - 12;

20
src/statusbar_gui.h Normal file
View File

@ -0,0 +1,20 @@
/* $Id$ */
/** @file statusbar_gui.h Functions, definitions and such used only by the GUI. */
#ifndef STATUSBAR_GUI_H
#define STATUSBAR_GUI_H
enum StatusBarInvalidate
{
SBI_SAVELOAD_START,
SBI_SAVELOAD_FINISH,
SBI_SHOW_TICKER,
SBI_SHOW_REMINDER,
SBI_END
};
bool IsNewsTickerShown();
void ShowStatusBar();
#endif /* STATUSBAR_GUI_H */