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.
98 lines
2.5 KiB
98 lines
2.5 KiB
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//===========================================================================//
|
|
|
|
#ifndef SPLITTER_H
|
|
#define SPLITTER_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include <vgui_controls/EditablePanel.h>
|
|
|
|
namespace vgui
|
|
{
|
|
|
|
enum SplitterMode_t
|
|
{
|
|
SPLITTER_MODE_HORIZONTAL = 0,
|
|
SPLITTER_MODE_VERTICAL
|
|
};
|
|
|
|
|
|
class SplitterHandle;
|
|
class SplitterChildPanel;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Thin line used to divide sections, can be moved dragged!
|
|
//-----------------------------------------------------------------------------
|
|
class Splitter : public EditablePanel
|
|
{
|
|
DECLARE_CLASS_SIMPLE( Splitter, EditablePanel );
|
|
|
|
public:
|
|
// nCount is the number of splitters to create.
|
|
// NOTE: The constructor here will create (nCount+1) EditablePanel children
|
|
// and name them child0...childN for .res file purposes.
|
|
Splitter( Panel *parent, const char *name, SplitterMode_t mode, int nCount );
|
|
~Splitter();
|
|
|
|
// Evenly respace all splitters
|
|
void EvenlyRespaceSplitters();
|
|
|
|
// respace splitters using given fractions (must sum to 1)
|
|
void RespaceSplitters( float *flFractions );
|
|
|
|
// Inherited from Panel
|
|
virtual void ApplySettings(KeyValues *inResourceData);
|
|
virtual void GetSettings( KeyValues *outResourceData );
|
|
virtual void PerformLayout();
|
|
virtual void OnSizeChanged(int newWide, int newTall);
|
|
virtual void ApplyUserConfigSettings(KeyValues *userConfig);
|
|
virtual void GetUserConfigSettings(KeyValues *userConfig);
|
|
virtual bool HasUserConfigSettings() { return true; }
|
|
|
|
// Sets the splitter color
|
|
void SetSplitterColor( Color c );
|
|
|
|
// Enables borders on the splitters
|
|
void EnableBorders( bool bEnable );
|
|
|
|
// Locks the size of a particular child in pixels.
|
|
void LockChildSize( int nChildIndex, int nSize );
|
|
void UnlockChildSize( int nChildIndex );
|
|
|
|
private:
|
|
void RecreateSplitters( int nCount );
|
|
|
|
struct SplitterInfo_t
|
|
{
|
|
SplitterChildPanel *m_pPanel; // This panel is to the left or above the handle
|
|
SplitterHandle *m_pHandle;
|
|
float m_flPos;
|
|
bool m_bLocked;
|
|
int m_nLockedSize;
|
|
};
|
|
|
|
int GetPosRange();
|
|
int GetSplitterCount() const;
|
|
int GetSplitterPosition( int nIndex );
|
|
void SetSplitterPosition( int nIndex, int nPos );
|
|
int GetSubPanelCount() const;
|
|
int ComputeLockedSize( int nStartingIndex );
|
|
|
|
CUtlVector< SplitterInfo_t > m_Splitters;
|
|
SplitterMode_t m_Mode;
|
|
|
|
friend class SplitterHandle;
|
|
};
|
|
|
|
|
|
} // namespace vgui
|
|
|
|
|
|
#endif // SPLITTER_H
|