//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef PROPERTYSHEET_H #define PROPERTYSHEET_H #ifdef _WIN32 #pragma once #endif #include "vgui/vgui.h" #include "vgui_controls/EditablePanel.h" #include "vgui_controls/PHandle.h" #include "utlvector.h" namespace vgui { class PageTab; class ImagePanel; //----------------------------------------------------------------------------- // Purpose: Tabbed property sheet. Holds and displays a set of Panel's //----------------------------------------------------------------------------- class PropertySheet : public EditablePanel { DECLARE_CLASS_SIMPLE( PropertySheet, EditablePanel ); public: PropertySheet(Panel *parent, const char *panelName, bool draggableTabs = false ); PropertySheet(Panel *parent, const char *panelName,ComboBox *combo); ~PropertySheet(); virtual bool IsDraggableTab() const; void SetDraggableTabs( bool state ); // Adds a page to the sheet. The first page added becomes the active sheet. virtual void AddPage(Panel *page, const char *title, char const *imageName = NULL, bool showContextMenu = false, int nInsertBefore = -1 ); virtual void SetPageTitle( Panel *page, const char *title ); // sets the current page virtual void SetActivePage(Panel *page); // sets the width, in pixels, of the page tab buttons. virtual void SetTabWidth(int pixels); // Gets a pointer to the currently active page. virtual Panel *GetActivePage(); // Removes (but doesn't delete) all pages virtual void RemoveAllPages(); // Removes all the pages and marks all the pages for deletion. virtual void DeleteAllPages(); // reloads the data in all the property page virtual void ResetAllData(); // writes out any changed data to the doc virtual void ApplyChanges(); // focus handling - passed on to current active page virtual void RequestFocus(int direction = 0); virtual bool RequestFocusPrev(VPANEL panel = NULL); virtual bool RequestFocusNext(VPANEL panel = NULL); // returns the ith panel virtual Panel *GetPage(int i); // deletes this panel from the sheet virtual void DeletePage(Panel *panel); // removes this panel from the sheet, sets its parent to NULL, but does not delete it virtual void RemovePage(Panel *panel); // returns the current activated tab virtual Panel *GetActiveTab(); // returns the title text of the tab virtual void GetActiveTabTitle(char *textOut, int bufferLen); // return tab "i" virtual Panel *GetTab(int i); // returns the title of tab "i" virtual bool GetTabTitle(int i,char *textOut, int bufferLen); // returns the index of the active page virtual int GetActivePageNum(); // returns the number of pages in the sheet virtual int GetNumPages(); // disable the page with title "title" virtual void DisablePage(const char *title); // enable the page with title "title" virtual void EnablePage(const char *title); virtual void SetSmallTabs( bool state ); virtual bool IsSmallTabs() const; virtual void SetShowTabs( bool state ); /* MESSAGES SENT TO PAGES "PageShow" - sent when a page is shown "PageHide" - sent when a page is hidden "ResetData" - sent when the data should be reloaded from doc "ApplyChanges" - sent when data should be written to doc */ virtual void OnPanelDropped( CUtlVector< KeyValues * >& msglist ); virtual bool IsDroppable( CUtlVector< KeyValues * >& msglist ); // Mouse is now over a droppable panel virtual void OnDroppablePanelPaint( CUtlVector< KeyValues * >& msglist, CUtlVector< Panel * >& dragPanels ); void ShowContextButtons( bool state ); bool ShouldShowContextButtons() const; int FindPage( Panel *page ) const; bool PageHasContextMenu( Panel *page ) const; void SetKBNavigationEnabled( bool state ); bool IsKBNavigationEnabled() const; virtual bool HasUserConfigSettings() { return true; } virtual void OnThink(); protected: virtual void PaintBorder(); virtual void PerformLayout(); virtual Panel *HasHotkey(wchar_t key); virtual void ChangeActiveTab(int index); virtual void OnKeyCodeTyped(KeyCode code); virtual void OnCommand(const char *command); virtual void ApplySchemeSettings(IScheme *pScheme); virtual void ApplySettings(KeyValues *inResourceData); // internal message handlers MESSAGE_FUNC_PTR( OnTabPressed, "TabPressed", panel ); MESSAGE_FUNC_PTR_WCHARPTR( OnTextChanged, "TextChanged", panel, text ); MESSAGE_FUNC_PARAMS( OnOpenContextMenu, "OpenContextMenu", params ); MESSAGE_FUNC( OnApplyButtonEnable, "ApplyButtonEnable" ); // called when default button has been set MESSAGE_FUNC_HANDLE( OnDefaultButtonSet, "DefaultButtonSet", button ); // called when the current default button has been set MESSAGE_FUNC_HANDLE( OnCurrentDefaultButtonSet, "CurrentDefaultButtonSet", button); MESSAGE_FUNC( OnFindDefaultButton, "FindDefaultButton" ); virtual void LayoutTabs(); private: // enable/disable the page with title "title" virtual void SetPageEnabled(const char *title,bool state); // Grabs mouse coords and figures out best tab to insert "before" or -1 if insert should be at end of tab section row PageTab *FindInsertBeforeTab(); void AddPageDropTab( char const *pTabName, Panel *pPage ); void ClearPageDropTab(); struct Page_t { Page_t() : page( 0 ), contextMenu( false ) { } Panel *page; bool contextMenu; }; CUtlVector m_Pages; CUtlVector m_PageTabs; Panel *_activePage; PageTab *_activeTab; int _tabWidth; int _activeTabIndex; ComboBox *_combo; bool _showTabs; bool _tabFocus; PHandle m_hPreviouslyActivePage; float m_flPageTransitionEffectTime; bool m_bSmallTabs; HFont m_tabFont; bool m_bDraggableTabs; bool m_bContextButton; bool m_bKBNavigationEnabled; CPanelAnimationVarAliasType( int, m_iTabXIndent, "tabxindent", "0", "proportional_int" ); CPanelAnimationVarAliasType( int, m_iTabXDelta, "tabxdelta", "0", "proportional_int" ); CPanelAnimationVarAliasType( bool, m_bTabFitText, "tabxfittotext", "1", "bool" ); //============================================================================= // HPE_BEGIN: // [tj] These variables have been split into the initially specified size // and the currently set size. This is so we can always recalculate the // new value for resolution changes. //============================================================================= CPanelAnimationVarAliasType( int, m_iSpecifiedTabHeight, "tabheight", "28", "int" ); CPanelAnimationVarAliasType( int, m_iSpecifiedTabHeightSmall, "tabheight_small", "14", "int" ); int m_iTabHeight; int m_iTabHeightSmall; //============================================================================= // HPE_END //============================================================================= KeyValues *m_pTabKV; int m_nPageDropTabVisibleTime; PageTab *m_pDragDropTab; PageTab *m_pTemporarilyRemoved; }; }; // namespace vgui #endif // PROPERTYSHEET_H