mirror of
https://github.com/bearstonem/openmohaa-vr.git
synced 2026-10-26 19:00:43 +01:00
450 lines
15 KiB
C++
450 lines
15 KiB
C++
/*
|
|
===========================================================================
|
|
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
|
|
===========================================================================
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "usignal.h"
|
|
#include "../qcommon/q_shared.h"
|
|
#include "../corepp/str.h"
|
|
#include "ui_public.h"
|
|
#include "uirect2d.h"
|
|
#include "ucolor.h"
|
|
#include "uifont.h"
|
|
|
|
class UIFont;
|
|
|
|
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)
|
|
#define WF_DONTLOCALIZE (1 << 7)
|
|
|
|
// 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;
|
|
|
|
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;
|
|
|
|
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;
|
|
float m_fadeSequenceDelay;
|
|
float m_fadeSequenceFadeIn;
|
|
float m_fadeSequenceHold;
|
|
float m_fadeSequenceFadeOut;
|
|
float m_fadeSequenceRemainingTime;
|
|
float m_fadeSequenceLastTime;
|
|
int m_fadeSequenceState;
|
|
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;
|
|
//
|
|
// New since 2.0
|
|
//
|
|
cvar_t *m_scaleCvar;
|
|
|
|
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 = "verdana-12");
|
|
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);
|
|
void SetScaleCvar(Event *ev);
|
|
|
|
// Added in 2.0
|
|
//====
|
|
void SetDontLocalize(Event *ev);
|
|
void EventFadeSequence(Event *ev);
|
|
//====
|
|
|
|
void SetVirtualScale(vec2_t out);
|
|
void SetDontLocalize();
|
|
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);
|
|
|
|
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);
|
|
|
|
// Added in OPM
|
|
UIFont *getFont() const;
|
|
bool isVirtual() const;
|
|
const vec2_t& getVirtualScale() const;
|
|
const vec2_t& getHighResScale() const;
|
|
};
|
|
|
|
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:
|
|
void AlignPosition(void) override;
|
|
void Draw(void) override;
|
|
|
|
public:
|
|
UIWidgetContainer();
|
|
|
|
void Realign(void) override;
|
|
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
|
|
);
|