You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
260 lines
8.3 KiB
260 lines
8.3 KiB
//========= 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
|