2016-03-27 11:49:47 +02:00
|
|
|
/*
|
|
|
|
===========================================================================
|
|
|
|
Copyright (C) 2015 the OpenMoHAA team
|
|
|
|
|
|
|
|
This file is part of OpenMoHAA source code.
|
|
|
|
|
|
|
|
OpenMoHAA source code is free software; you can redistribute it
|
|
|
|
and/or modify it under the terms of the GNU General Public License as
|
|
|
|
published by the Free Software Foundation; either version 2 of the License,
|
|
|
|
or (at your option) any later version.
|
|
|
|
|
|
|
|
OpenMoHAA source code is distributed in the hope that it will be
|
|
|
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with OpenMoHAA source code; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
===========================================================================
|
|
|
|
*/
|
|
|
|
|
2023-07-18 00:08:30 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "usignal.h"
|
|
|
|
#include "../qcommon/q_shared.h"
|
|
|
|
#include "../qcommon/str.h"
|
|
|
|
#include "ui_public.h"
|
|
|
|
#include "uirect2d.h"
|
|
|
|
#include "ucolor.h"
|
|
|
|
#include "uifont.h"
|
|
|
|
|
|
|
|
class UIFont;
|
2016-03-27 11:49:47 +02:00
|
|
|
|
|
|
|
class UIReggedMaterial {
|
|
|
|
uihandle_t hMat;
|
|
|
|
str name;
|
|
|
|
bool isSet;
|
|
|
|
bool isGot;
|
|
|
|
|
|
|
|
public:
|
|
|
|
UIReggedMaterial();
|
|
|
|
|
|
|
|
uihandle_t GetMaterial( void );
|
|
|
|
void ReregisterMaterial( void );
|
|
|
|
void CleanupMaterial( void );
|
|
|
|
void SetMaterial( const str& name );
|
|
|
|
void RefreshMaterial( void );
|
|
|
|
str GetName( void );
|
|
|
|
};
|
|
|
|
|
|
|
|
// widget flags
|
|
|
|
#define WF_STRETCH_VERTICAL (1<<0)
|
|
|
|
#define WF_STRETCH_HORIZONTAL (1<<1)
|
|
|
|
#define WF_DIRECTED (1<<2)
|
|
|
|
#define WF_TILESHADER (1<<3)
|
|
|
|
#define WF_ALWAYS_BOTTOM (1<<4)
|
|
|
|
#define WF_ALWAYS_TOP (1<<5)
|
|
|
|
#define WF_NOPARENTADJUST (1<<6)
|
2023-07-30 00:56:54 +02:00
|
|
|
#define WF_DONTLOCALIZE (1<<7)
|
2016-03-27 11:49:47 +02:00
|
|
|
|
|
|
|
// widget alignment flags
|
|
|
|
#define WA_LEFT (1<<0)
|
|
|
|
#define WA_RIGHT (1<<1)
|
|
|
|
#define WA_TOP (1<<3)
|
|
|
|
#define WA_BOTTOM (1<<4)
|
|
|
|
#define WA_CENTERX (1<<5)
|
|
|
|
#define WA_CENTERY (1<<6)
|
|
|
|
#define WA_FULL ( WA_LEFT | WA_RIGHT | WA_TOP | WA_BOTTOM | WA_CENTERX | WA_CENTERY )
|
|
|
|
|
|
|
|
typedef class UIReggedMaterial UIReggedMaterial;
|
2023-07-30 00:56:54 +02:00
|
|
|
typedef enum {
|
|
|
|
border_none,
|
|
|
|
border_3D,
|
|
|
|
border_indent,
|
|
|
|
border_outline
|
|
|
|
} borderstyle_t;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
D_NONE,
|
|
|
|
D_FROM_LEFT,
|
|
|
|
D_FROM_RIGHT,
|
|
|
|
D_FROM_BOTTOM,
|
|
|
|
D_FROM_TOP
|
|
|
|
} direction_t;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
MOTION_IN,
|
|
|
|
MOTION_OUT
|
|
|
|
} motion_t;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
SEQUENCE_NONE,
|
|
|
|
SEQUENCE_STARTING,
|
|
|
|
SEQUENCE_FADEIN,
|
|
|
|
SEQUENCE_HOLD,
|
|
|
|
SEQUENCE_FADEOUT
|
|
|
|
} fadesequence_t;
|
2016-03-27 11:49:47 +02:00
|
|
|
|
|
|
|
class UIWidget : public USignal {
|
|
|
|
friend class Menu;
|
|
|
|
friend class UILayout;
|
|
|
|
friend class UIWindowManager;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
UIRect2D m_frame;
|
|
|
|
vec2_t m_vVirtualScale;
|
|
|
|
UIPoint2D m_startingpos;
|
|
|
|
UIPoint2D m_origin;
|
|
|
|
UIRect2D m_screenframe;
|
|
|
|
UIPoint2D m_screenorigin;
|
|
|
|
UIRect2D m_clippedframe;
|
|
|
|
UIPoint2D m_clippedorigin;
|
|
|
|
UColor m_background_color;
|
|
|
|
UColor m_foreground_color;
|
|
|
|
UBorderColor m_border_color;
|
|
|
|
borderstyle_t m_borderStyle;
|
|
|
|
bool m_visible;
|
|
|
|
bool m_enabled;
|
|
|
|
UIFont *m_font;
|
|
|
|
class UIWidget *m_parent;
|
|
|
|
Container<UIWidget *> m_children;
|
|
|
|
str m_name;
|
|
|
|
bool m_canactivate;
|
|
|
|
str m_cvarname;
|
|
|
|
str m_cvarvalue;
|
|
|
|
str m_command;
|
|
|
|
Container<str *> m_showcommands;
|
|
|
|
Container<str *> m_hidecommands;
|
|
|
|
str m_title;
|
|
|
|
float m_indent;
|
|
|
|
float m_bottomindent;
|
|
|
|
UIReggedMaterial *m_material;
|
|
|
|
UIReggedMaterial *m_hovermaterial;
|
|
|
|
UIReggedMaterial *m_pressedmaterial;
|
|
|
|
bool m_hovermaterial_active;
|
|
|
|
bool m_pressedmaterial_active;
|
|
|
|
direction_t m_direction;
|
|
|
|
direction_t m_direction_orig;
|
|
|
|
motion_t m_motiontype;
|
|
|
|
float m_starttime;
|
|
|
|
float m_fadetime;
|
|
|
|
float m_alpha;
|
|
|
|
float m_local_alpha;
|
|
|
|
float m_motiontime;
|
2023-07-30 00:56:54 +02:00
|
|
|
float m_fadeSequenceDelayStart;
|
|
|
|
float m_fadeSequenceFadeIn;
|
|
|
|
float m_fadeSequenceHold;
|
|
|
|
float m_fadeSequenceFadeOut;
|
|
|
|
float m_fadeSequenceDelayEnd;
|
|
|
|
float m_fadeSequenceAlpha;
|
|
|
|
int m_fadeSequenceState;
|
2016-03-27 11:49:47 +02:00
|
|
|
str m_stopsound;
|
|
|
|
str m_clicksound;
|
|
|
|
int m_align;
|
|
|
|
int m_flags;
|
|
|
|
bool m_dying;
|
|
|
|
int m_ordernum;
|
|
|
|
int m_configstring_index;
|
|
|
|
fonthorzjustify_t m_iFontAlignmentHorizontal;
|
|
|
|
fontvertjustify_t m_iFontAlignmentVertical;
|
|
|
|
qboolean m_bVirtual;
|
|
|
|
str m_enabledCvar;
|
2023-05-29 20:32:22 +02:00
|
|
|
//
|
|
|
|
// New since 2.0
|
|
|
|
//
|
|
|
|
cvar_t* m_scaleCvar;
|
2016-03-27 11:49:47 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
CLASS_PROTOTYPE( UIWidget );
|
|
|
|
|
|
|
|
void( *m_commandhandler ) ( const char *, void * );
|
|
|
|
|
|
|
|
protected:
|
|
|
|
bool addChild( UIWidget *widget );
|
|
|
|
bool removeChild( UIWidget *widget );
|
|
|
|
void PropogateCoordinateSystem( void );
|
|
|
|
void set2D( void );
|
|
|
|
virtual void Draw( void );
|
|
|
|
virtual void FrameInitialized( void );
|
|
|
|
void DrawTitle( float x, float y );
|
|
|
|
void Motion( void );
|
|
|
|
virtual void AlignPosition( void );
|
|
|
|
void Hide( Event *ev );
|
|
|
|
void Activate( Event *ev );
|
|
|
|
void BringToFront( void );
|
|
|
|
static void SplitWidgets( Container<UIWidget*>& src, Container<UIWidget*>& bottom, Container<UIWidget*>& normal, Container<UIWidget*>& top );
|
|
|
|
static void CombineWidgets( Container<UIWidget*>& dst, Container<UIWidget*>& bottom, Container<UIWidget*>& normal, Container<UIWidget*>& top );
|
|
|
|
static void ArrangeWidgetList( Container<UIWidget*>& list );
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
UIWidget();
|
|
|
|
virtual ~UIWidget();
|
|
|
|
|
|
|
|
virtual void Shutdown( void );
|
|
|
|
virtual void InitFrame( UIWidget *parentview, float x, float y, float width, float height, int border = -1, const char *fontname = "verdana-12" );
|
|
|
|
void InitFrame( UIWidget *parentview, const UIRect2D& r, int border, const char *fontname );
|
|
|
|
void LayoutSize( Event *ev );
|
|
|
|
void LayoutRect( Event *ev );
|
|
|
|
void LayoutName( Event *ev );
|
|
|
|
void LayoutTitle( Event *ev );
|
|
|
|
void LayoutFont( Event *ev );
|
|
|
|
void LayoutBgColor( Event *ev );
|
|
|
|
void LayoutFgColor( Event *ev );
|
|
|
|
void LayoutBorderStyle( Event *ev );
|
|
|
|
void LayoutBorderColor( Event *ev );
|
|
|
|
void LayoutShader( Event *ev );
|
|
|
|
void LayoutTileShader( Event *ev );
|
|
|
|
void LayoutHoverShader( Event *ev );
|
|
|
|
void LayoutPressedShader( Event *ev );
|
|
|
|
void LayoutFadeIn( Event *ev );
|
|
|
|
void LayoutStopSound( Event *ev );
|
|
|
|
void LayoutClickSound( Event *ev );
|
|
|
|
void LayoutStretch( Event *ev );
|
|
|
|
void LayoutVirtualRes( Event *ev );
|
|
|
|
void LayoutInitData( Event *ev );
|
|
|
|
void LayoutDirection( Event *ev );
|
|
|
|
void LayoutAlign( Event *ev );
|
|
|
|
void LayoutStuffCommand( Event *ev );
|
|
|
|
void LayoutLinkCvar( Event *ev );
|
|
|
|
void LayoutNoParentClipping( Event *ev );
|
|
|
|
void LayoutNoParentAdjustment( Event *ev );
|
|
|
|
void LayoutOrderNumber( Event *ev );
|
|
|
|
void TextAlignment( Event *ev );
|
|
|
|
void LayoutAliasCache( Event *ev );
|
|
|
|
void SetEnabledCvar( Event *ev );
|
2023-05-29 20:32:22 +02:00
|
|
|
void SetScaleCvar( Event *ev );
|
2023-07-30 00:56:54 +02:00
|
|
|
void SetDontLocalize( Event *ev );
|
|
|
|
void EventFadeSequence( Event *ev );
|
2023-05-29 20:32:22 +02:00
|
|
|
|
|
|
|
void SetVirtualScale(vec2_t out);
|
2023-07-30 00:56:54 +02:00
|
|
|
void SetDontLocalize();
|
2016-03-27 11:49:47 +02:00
|
|
|
void setParent( UIWidget *parent );
|
|
|
|
class UIWidget *getParent( void );
|
|
|
|
class UIWidget *getFirstChild( void );
|
|
|
|
class UIWidget *getNextSibling( void );
|
|
|
|
class UIWidget *getNextChild( UIWidget *child );
|
|
|
|
class UIWidget *getPrevChild( UIWidget *child );
|
|
|
|
class UIWidget *getPrevSibling( void );
|
|
|
|
class UIWidget *getPrevSibling( UIWidget *curr );
|
|
|
|
class UIWidget *getLastSibling( void );
|
|
|
|
class UIWidget *findSibling( str name );
|
2023-05-29 20:32:22 +02:00
|
|
|
|
2016-03-27 11:49:47 +02:00
|
|
|
void Enable( void );
|
|
|
|
void Disable( void );
|
|
|
|
bool isEnabled( void );
|
|
|
|
bool IsDying( void );
|
|
|
|
class UIWidget *FindResponder( const UIPoint2D& pos );
|
|
|
|
void setFont( const char *name );
|
|
|
|
void setFontHorizontalAlignment( fonthorzjustify_t alignment );
|
|
|
|
void setFontVerticalAlignment( fontvertjustify_t alignment );
|
|
|
|
void setShow( bool visible );
|
|
|
|
bool getShow( void );
|
|
|
|
class UColor getBackgroundColor( void );
|
|
|
|
virtual void setBackgroundColor( const UColor& color, bool setbordercolor );
|
|
|
|
class UBorderColor getBorderColor( void );
|
|
|
|
void setBorderColor( const UBorderColor& color );
|
|
|
|
class UColor getForegroundColor( void );
|
|
|
|
virtual void setForegroundColor( const UColor& color );
|
|
|
|
borderstyle_t getBorderStyle( void );
|
|
|
|
void setBorderStyle( borderstyle_t style );
|
|
|
|
class UISize2D getSize( void );
|
|
|
|
void setSize( const UISize2D& newsize );
|
|
|
|
class UIRect2D getFrame( void );
|
|
|
|
void setFrame( const UIRect2D& newframe );
|
|
|
|
class UIPoint2D getOrigin( void );
|
|
|
|
void setOrigin( const UIPoint2D& neworigin );
|
|
|
|
void setName( str name );
|
|
|
|
const char *getName( void );
|
|
|
|
void setTitle( str title );
|
|
|
|
const char *getTitle( void );
|
|
|
|
void setDirection( direction_t dir );
|
|
|
|
direction_t getDirection( void );
|
|
|
|
void setMotionType( motion_t type );
|
|
|
|
motion_t getMotionType( void );
|
|
|
|
void setMotionTime( float time );
|
|
|
|
float getMotionTime( void );
|
|
|
|
void setAlign( int align );
|
|
|
|
int getAlign( void );
|
|
|
|
void setMaterial( UIReggedMaterial *mat );
|
|
|
|
void setHoverMaterial( UIReggedMaterial *mat );
|
|
|
|
void setPressedMaterial( UIReggedMaterial *mat );
|
|
|
|
class UIPoint2D getLocalPoint( const UIPoint2D& pos );
|
|
|
|
class UIPoint2D getGlobalPoint( const UIPoint2D& pos );
|
|
|
|
virtual void setBackgroundAlpha( float f );
|
|
|
|
float getBackgroundAlpha( void );
|
|
|
|
void Display( const UIRect2D& drawframe, float parent_alpha );
|
|
|
|
virtual qboolean KeyEvent( int key, unsigned int time );
|
|
|
|
virtual void CharEvent( int ch );
|
|
|
|
virtual void UpdateData( void );
|
|
|
|
virtual void UpdateUIElement( void );
|
|
|
|
float getTitleWidth( void );
|
|
|
|
float getTitleHeight( void );
|
|
|
|
bool CanActivate( void );
|
|
|
|
void AllowActivate( bool canactivate );
|
|
|
|
bool IsActive( void );
|
|
|
|
bool IsVisible( void );
|
|
|
|
virtual void LinkCvar( str cvarname );
|
|
|
|
void LinkCommand( str cmd );
|
|
|
|
void ExecuteShowCommands( void );
|
|
|
|
void ExecuteHideCommands( void );
|
|
|
|
void InitializeCommandHandler( void( *fcn) ( const char *, void * ) );
|
|
|
|
class UIWidget *FindWidget( str name );
|
|
|
|
void ResetMotion( motion_t type );
|
|
|
|
virtual void Realign( void );
|
|
|
|
void BringToFrontPropogated( void );
|
|
|
|
class UIWidget *IsThisOrChildActive( void );
|
|
|
|
class UIPoint2D MouseEventToClientPoint( Event *ev );
|
|
|
|
class UIRect2D getClientFrame( void );
|
|
|
|
void setAlwaysOnBottom( bool b );
|
|
|
|
void setAlwaysOnTop( bool b );
|
|
|
|
bool getAlwaysOnBottom( void );
|
|
|
|
bool getAlwaysOnTop( void );
|
|
|
|
bool SendSignal( Event& event );
|
|
|
|
void ShowCommand( Event *ev );
|
|
|
|
void HideCommand( Event *ev );
|
|
|
|
void AddFlag( int flag );
|
|
|
|
void SetHovermaterialActive( bool a );
|
|
|
|
void SetPressedmaterialActive( bool a );
|
|
|
|
int getOrderNum( void );
|
|
|
|
class str getCommand( void );
|
|
|
|
void ActivateOrder( void );
|
|
|
|
void EnableEvent( Event *ev );
|
|
|
|
void DisableEvent( Event *ev );
|
|
|
|
void setConfigstringIndex( int cs );
|
|
|
|
int getConfigstringIndex( void );
|
|
|
|
bool PassEventToWidget( str name, Event *ev );
|
|
|
|
};
|
|
|
|
|
|
|
|
class UIWidgetContainer : public UIWidget {
|
|
|
|
UColor m_bgfill;
|
|
|
|
qboolean m_fullscreen;
|
|
|
|
int m_vidmode;
|
|
|
|
int m_currentwidnum;
|
|
|
|
int m_maxordernum;
|
|
|
|
|
|
|
|
public:
|
|
|
|
class UILayout *m_layout;
|
|
|
|
|
|
|
|
CLASS_PROTOTYPE( UIWidgetContainer );
|
|
|
|
|
|
|
|
private:
|
2023-05-11 22:48:26 +02:00
|
|
|
void AlignPosition( void ) override;
|
|
|
|
void Draw( void ) override;
|
2016-03-27 11:49:47 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
UIWidgetContainer();
|
|
|
|
|
2023-05-11 22:48:26 +02:00
|
|
|
void Realign( void ) override;
|
2016-03-27 11:49:47 +02:00
|
|
|
void SetBGFill( Event *ev );
|
|
|
|
void SetFullscreen( Event *ev );
|
|
|
|
void SetVidMode( Event *ev );
|
|
|
|
int getVidMode( void );
|
|
|
|
qboolean isFullscreen( void );
|
|
|
|
UIWidget *GetNextWidgetInOrder( void );
|
|
|
|
UIWidget *GetPrevWidgetInOrder( void );
|
|
|
|
void SetActiveWidgetOrderNum( UIWidget *wid );
|
|
|
|
void SetActiveWidgetOrderNum( int num );
|
|
|
|
void SetLastActiveWidgetOrderNum( void );
|
|
|
|
};
|
|
|
|
|
|
|
|
extern Event W_Destroyed;
|
|
|
|
extern Event W_SizeChanged;
|
|
|
|
extern Event W_FrameChanged;
|
|
|
|
extern Event W_OriginChanged;
|
|
|
|
extern Event W_Activated;
|
|
|
|
extern Event EV_Widget_Activate;
|
|
|
|
extern Event W_Deactivated;
|
|
|
|
extern Event EV_Widget_Hide;
|
|
|
|
extern Event EV_Widget_Enable;
|
|
|
|
extern Event EV_Widget_Disable;
|
|
|
|
extern Event W_RealignWidget;
|
|
|
|
extern Event W_Draw;
|
|
|
|
extern Event EV_Layout_Size;
|
|
|
|
extern Event EV_Layout_Rect;
|
|
|
|
extern Event EV_Layout_Name;
|
|
|
|
extern Event EV_Layout_Title;
|
|
|
|
extern Event EV_Layout_Font;
|
|
|
|
extern Event EV_Layout_BGColor;
|
|
|
|
extern Event EV_Layout_FGColor;
|
|
|
|
extern Event EV_Layout_Borderstyle;
|
|
|
|
extern Event EV_Layout_BorderColor;
|
|
|
|
extern Event EV_Layout_Shader;
|
|
|
|
extern Event EV_Layout_TileShader;
|
|
|
|
extern Event EV_Layout_HoverShader;
|
|
|
|
extern Event EV_Layout_PressedShader;
|
|
|
|
extern Event EV_Layout_FadeIn;
|
|
|
|
extern Event EV_Layout_StopSound;
|
|
|
|
extern Event EV_Layout_ClickSound;
|
|
|
|
extern Event EV_Layout_Stretch;
|
|
|
|
extern Event EV_Layout_VirtualRes;
|
|
|
|
extern Event EV_Layout_InitData;
|
|
|
|
extern Event EV_Layout_Direction;
|
|
|
|
extern Event EV_Layout_Align;
|
|
|
|
extern Event EV_Layout_StuffCommand;
|
|
|
|
extern Event EV_Layout_LinkCvar;
|
|
|
|
extern Event EV_Layout_NoParentClipping;
|
|
|
|
extern Event EV_Layout_NoParentAdjustment;
|
|
|
|
extern Event EV_Widget_HideCommand;
|
|
|
|
extern Event EV_Widget_ShowCommand;
|
|
|
|
extern Event EV_Widget_OrderNumber;
|
|
|
|
extern Event EV_Widget_TextAlignment;
|
|
|
|
extern Event EV_Widget_EnabledCvar;
|
|
|
|
extern Event EV_Layout_AliasCache;
|
|
|
|
extern Event EV_Layout_BGFill;
|
|
|
|
extern Event EV_Layout_Fullscreen;
|
|
|
|
extern Event EV_Layout_VidMode;
|
|
|
|
|
|
|
|
void SetColor( const UColor& color, float alpha );
|
|
|
|
void DrawBox( const UIRect2D& rect, const UColor& color, float alpha );
|
|
|
|
void Draw3DBox( const UIRect2D& rect, bool indent, const UBorderColor& color, float alpha );
|
|
|
|
void DrawBox( float x, float y, float width, float height, const UColor &color, float alpha );
|
|
|
|
void Draw3DBox( float x, float y, float width, float height, bool indent, const UBorderColor& color, float alpha );
|
|
|
|
void DrawMac3DBox( const UIRect2D& rect, bool indent, const UBorderColor& color, int inset, float alpha );
|
|
|
|
void DrawBoxWithSolidBorder( const UIRect2D& rect, const UColor& inside, const UColor& outside, int size, int flags, float alpha );
|