etqw-sdk/source/game/guis/UINews.h

183 lines
5.3 KiB
C++

#ifndef __GAME_GUIS_USERINTERFACENEWS_H__
#define __GAME_GUIS_USERINTERFACENEWS_H__
#include "UserInterfaceTypes.h"
/*
============
sdUINews
============
*/
class sdUINews : public sdUIWindow {
public:
SD_UI_DECLARE_CLASS( sdUINews )
typedef enum windowEvent_e {
NE_NOOP = sdUIWindow::WE_NUM_EVENTS + 1,
NE_DRAW_BUTTON,
NE_MOUSE_ENTER_PREV,
NE_MOUSE_EXIT_PREV,
NE_MOUSE_ENTER_NEXT,
NE_MOUSE_EXIT_NEXT,
NE_MOUSE_BUTTON_DOWN_PREV,
NE_MOUSE_BUTTON_UP_PREV,
NE_MOUSE_BUTTON_DOWN_NEXT,
NE_MOUSE_BUTTON_UP_NEXT,
NE_MOUSE_UP_TEXT,
NE_MOUSE_DOWN_TEXT,
NE_NUM_EVENTS,
} windowEvent_t;
enum eFadeType { FT_VSCROLL, FT_FADE };
enum eItemState { IS_INVALID, IS_SCROLLIN, IS_FIXED, IS_SCROLLOUT };
enum eButtonRect { BR_NONE = -1, BR_PREV, BR_NEXT, BR_TEXT };
enum eUnderlineState { US_NONE, US_LINK, US_HIGHLIGHTED_LINK };
sdUINews( void );
virtual ~sdUINews( void );
virtual const char* GetScopeClassName() const { return "sdUINews"; }
virtual sdUIFunctionInstance* GetFunction( const char* name );
static void InitFunctions();
static void ShutdownFunctions( void ) { newsFunctions.DeleteContents(); }
virtual void ApplyLayout();
virtual void DrawLocal();
virtual void CacheEvents();
void EnumerateEvents( const char* name, const idList<unsigned short>& flags, idList< sdUIEventInfo >& events, const idTokenCache& tokenCache );
virtual int GetMaxEventTypes( void ) const { return NE_NUM_EVENTS; }
virtual const char* GetEventNameForType( int event ) const { return ( event < ( WE_NUM_EVENTS + 1 )) ? sdUIWindow::GetEventNameForType( event ): eventNames[ event - WE_NUM_EVENTS - 1 ]; }
virtual bool PostEvent( const sdSysEvent* event );
void Script_PrevNewsItem( sdUIFunctionStack& stack );
void Script_NextNewsItem( sdUIFunctionStack& stack );
void Script_GotoURL( sdUIFunctionStack& stack );
protected:
static const sdUITemplateFunction< sdUINews >* FindFunction( const char* name );
void CalcOffsets();
bool HasNewsItem() { return ( currentItem >= 0 && currentItem < items.Num() && items.Num() > 0 ); }
void SetNewsItem( int index );
void MakeDefaultMotD();
void FillNewsList();
void DrawButtons();
bool CheckButtonMouseOver( const sdSysEvent* event, const idVec2& point );
bool CheckButtonClick( const sdSysEvent* event, const idVec2& point );
eButtonRect GetButtonForPoint( const idVec2& point ) const;
private:
static idHashMap< sdUITemplateFunction< sdUINews >* > newsFunctions;
static const char* eventNames[ NE_NUM_EVENTS - WE_NUM_EVENTS ];
typedef sdPair< idWStr, idStr > motdItem_t;
idList< motdItem_t > items;
int scrollStartTime;
int scrollTargetTime;
int currentItem;
int textWidth;
int textHeight;
idVec2 scrollOffset;
int displayStartTime;
float alphaMul;
idVec4 buttonRect[ 2 ];
eButtonRect currentButton;
eButtonRect currentClickedButton;
sdUIEventHandle drawButtonHandle;
SD_UI_PROPERTY_TAG(
title = "Drawing/Marquee/Speed";
desc = "How quickly the contents scroll/How quickly the contents fade.";
editor = "edit";
datatype = "float";
)
sdFloatProperty speed;
// ===========================================
SD_UI_PROPERTY_TAG(
title = "Drawing/News/FadeType";
desc = "Type of fading on change between news items. See FT_* defines.";
editor = "edit";
datatype = "float";
)
sdFloatProperty fadeType;
// ===========================================
SD_UI_PROPERTY_TAG(
title = "Drawing/News/DisplayTime";
desc = "For how long to display a news item.";
editor = "edit";
datatype = "float";
)
sdFloatProperty displayTime;
// ===========================================
SD_UI_PROPERTY_TAG(
title = "Drawing/News/ColorLink";
desc = "Color of highlighted link.";
editor = "edit";
datatype = "vec4";
)
sdVec4Property colorLink;
// ===========================================
SD_UI_PROPERTY_TAG(
title = "Drawing/News/LinkState";
desc = "Text has link. See US_* defines.";
editor = "edit";
datatype = "float";
)
sdFloatProperty linkState;
// ===========================================
SD_UI_PROPERTY_TAG(
title = "Drawing/News/NewsText";
desc = "News text displayed.";
editor = "edit";
datatype = "wstring";
)
sdWStringProperty newsText;
// ===========================================
SD_UI_PROPERTY_TAG(
title = "Drawing/News/PauseNews";
desc = "Pause news ticker.";
editor = "edit";
datatype = "float";
)
sdFloatProperty pauseNews;
// ===========================================
SD_UI_PROPERTY_TAG(
title = "Drawing/News/ScrollState";
desc = "State of text. See IS_* defines.";
editor = "edit";
datatype = "float";
)
sdFloatProperty itemState;
// ===========================================
SD_UI_PROPERTY_TAG(
title = "Drawing/News/Url";
desc = "Read only property. URL to go to if clicking link.";
editor = "edit";
datatype = "wstring";
)
sdWStringProperty url;
// ===========================================
};
#endif