source-engine/public/vgui_controls/Frame.h

261 lines
8.3 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef VGUI_FRAME_H
#define VGUI_FRAME_H
#ifdef _WIN32
#pragma once
#endif
#include <vgui/VGUI.h>
#include <vgui/Dar.h>
#include <vgui_controls/Panel.h>
#include <vgui_controls/EditablePanel.h>
#include <vgui_controls/FocusNavGroup.h>
namespace vgui
{
class FrameButton;
class FrameSystemButton;
//-----------------------------------------------------------------------------
// Purpose: Windowed frame
//-----------------------------------------------------------------------------
class Frame : public EditablePanel
{
DECLARE_CLASS_SIMPLE( Frame, EditablePanel );
public:
Frame(Panel *parent, const char *panelName, bool showTaskbarIcon = true, bool bPopup = true );
virtual ~Frame();
// Set the text in the title bar. Set surfaceTitle=true if you want this to be the taskbar text as well.
virtual void SetTitle(const char *title, bool surfaceTitle);
virtual void SetTitle(const wchar_t *title, bool surfaceTitle);
// Bring the frame to the front and requests focus, ensures it's not minimized
virtual void Activate();
// activates the dialog; if dialog is not currently visible it starts it minimized and flashing in the taskbar
virtual void ActivateMinimized();
// closes the dialog
MESSAGE_FUNC( Close, "Close" );
MESSAGE_FUNC( CloseModal, "CloseModal" );
// sets the dialog to delete self on close
virtual void SetDeleteSelfOnClose( bool state );
// Move the dialog to the center of the screen
virtual void MoveToCenterOfScreen();
// Set the movability of the panel
virtual void SetMoveable(bool state);
// Check the movability of the panel
virtual bool IsMoveable();
// Set the resizability of the panel
virtual void SetSizeable(bool state);
// Check the resizability of the panel
virtual bool IsSizeable();
// Toggle visibility of the system menu button
virtual void SetMenuButtonVisible(bool state);
void SetMenuButtonResponsive(bool state);
// Toggle visibility of the minimize button
virtual void SetMinimizeButtonVisible(bool state);
// Toggle visibility of the maximize button
virtual void SetMaximizeButtonVisible(bool state);
// Toggles visibility of the minimize-to-systray icon (defaults to false)
virtual void SetMinimizeToSysTrayButtonVisible(bool state);
// Toggle visibility of the close button
virtual void SetCloseButtonVisible(bool state);
// returns true if the dialog is currently minimized
virtual bool IsMinimized();
// Flash the window system tray button until the frame gets focus
virtual void FlashWindow();
// Stops any window flashing
virtual void FlashWindowStop();
// command handling
virtual void OnCommand(const char *command);
// Get the system menu
virtual Menu *GetSysMenu();
// Set the system menu
virtual void SetSysMenu(Menu *menu);
// Set the system menu images
void SetImages( const char *pEnabledImage, const char *pDisabledImage = NULL );
// set whether the title bar should be rendered
virtual void SetTitleBarVisible( bool state );
// When moving via caption, don't let any part of window go outside parent's bounds
virtual void SetClipToParent( bool state );
virtual bool GetClipToParent() const;
// Set to true to make the caption height small
virtual void SetSmallCaption( bool state );
virtual bool IsSmallCaption() const;
virtual int GetDraggerSize();
virtual int GetCornerSize();
virtual int GetBottomRightSize();
virtual int GetCaptionHeight();
/* CUSTOM MESSAGE HANDLING
"SetTitle"
input: "text" - string to set the title to be
*/
// Load the control settings
virtual void LoadControlSettings( const char *dialogResourceName, const char *pathID = NULL, KeyValues *pPreloadedKeyValues = NULL, KeyValues *pConditions = NULL );
void SetChainKeysToParent( bool state );
bool CanChainKeysToParent() const;
// Shows the dialog in a modal fashion
virtual void DoModal();
void PlaceUnderCursor( );
// Disables the fade-in/out-effect even if configured in the scheme settings
void DisableFadeEffect( void );
// Temporarily enables or disables the fade effect rather than zeroing the fade times as done in DisableFadeEffect
void SetFadeEffectDisableOverride( bool disabled );
protected:
// Respond to mouse presses
virtual void OnMousePressed(MouseCode code);
// Respond to Key typing
virtual void OnKeyCodeTyped(KeyCode code);
virtual void OnKeyTyped(wchar_t unichar);
// Respond to Key releases
virtual void OnKeyCodeReleased(KeyCode code);
// Respond to Key focus ticks
virtual void OnKeyFocusTicked();
virtual void ApplySchemeSettings(IScheme *pScheme);
// Recalculate the position of all items
virtual void PerformLayout();
// Respond when a close message is recieved. Can be called directly to close a frame.
virtual void OnClose();
// Respond to a window finishing its closure. i.e. when a fading window has fully finished its fadeout.
virtual void OnFinishedClose();
// Minimize the window on the taskbar.
MESSAGE_FUNC( OnMinimize, "Minimize" );
// Called when minimize-to-systray button is pressed (does nothing by default)
virtual void OnMinimizeToSysTray();
// the frame close button was pressed
MESSAGE_FUNC( OnCloseFrameButtonPressed, "CloseFrameButtonPressed" );
// Add the child to the focus nav group
virtual void OnChildAdded(VPANEL child);
// settings
virtual void ApplySettings(KeyValues *inResourceData);
// records the settings into the resource data
virtual void GetSettings(KeyValues *outResourceData);
virtual const char *GetDescription( void );
// gets the default position and size on the screen to appear the first time (defaults to centered)
virtual bool GetDefaultScreenPosition(int &x, int &y, int &wide, int &tall);
// painting
virtual void PaintBackground();
// per-frame thinking, used for transition effects
virtual void OnThink();
// screen size
virtual void OnScreenSizeChanged(int iOldWide, int iOldTall);
// Get the size of the panel inside the frame edges.
virtual void GetClientArea(int &x, int &y, int &wide, int &tall);
// user configuration settings
// this is used for any control details the user wants saved between sessions
// eg. dialog positions, last directory opened, list column width
virtual void ApplyUserConfigSettings(KeyValues *userConfig);
// returns user config settings for this control
virtual void GetUserConfigSettings(KeyValues *userConfig);
// optimization, return true if this control has any user config settings
virtual bool HasUserConfigSettings();
private:
MESSAGE_FUNC_CHARPTR( InternalSetTitle, "SetTitle", text );
MESSAGE_FUNC( InternalFlashWindow, "FlashWindow" );
MESSAGE_FUNC_PARAMS( OnDialogVariablesChanged, "DialogVariables", dialogVariables );
void SetupResizeCursors();
void LayoutProportional( FrameButton *bt);
void FinishClose();
void OnFrameFocusChanged(bool bHasFocus);
Color _titleBarBgColor;
Color _titleBarDisabledBgColor;
Color _titleBarFgColor;
Color _titleBarDisabledFgColor;
Color m_InFocusBgColor;
Color m_OutOfFocusBgColor;
TextImage *_title;
#if !defined( _X360 )
Panel *_topGrip;
Panel *_bottomGrip;
Panel *_leftGrip;
Panel *_rightGrip;
Panel *_topLeftGrip;
Panel *_topRightGrip;
Panel *_bottomLeftGrip;
Panel *_bottomRightGrip;
Panel *_captionGrip;
FrameButton *_minimizeButton;
FrameButton *_maximizeButton;
FrameButton *_minimizeToSysTrayButton;
FrameButton *_closeButton;
FrameSystemButton *_menuButton;
Menu *_sysMenu;
#endif
float m_flTransitionEffectTime;
float m_flFocusTransitionEffectTime;
int m_iClientInsetX;
int m_iClientInsetY;
int m_iTitleTextInsetX;
int m_nGripperWidth;
VPANEL m_hPreviousModal;
HFont m_hCustomTitleFont;
bool _sizeable : 1;
bool _moveable : 1;
bool m_bHasFocus : 1;
bool _flashWindow : 1;
bool _nextFlashState : 1;
bool _drawTitleBar : 1;
bool m_bPreviouslyVisible : 1;
bool m_bFadingOut : 1;
bool m_bDeleteSelfOnClose : 1;
bool m_bDisableFadeEffect : 1;
bool m_bClipToParent : 1;
bool m_bSmallCaption : 1;
bool m_bChainKeysToParent : 1;
bool m_bPrimed : 1;
bool m_iClientInsetXOverridden : 1;
CPanelAnimationVarAliasType( int, m_iTitleTextInsetXOverride, "titletextinsetX", "0", "proportional_int" );
CPanelAnimationVar( int, m_iTitleTextInsetYOverride, "titletextinsetY", "0" );
};
} // namespace vgui
#endif // VGUI_FRAME_H