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.
121 lines
3.3 KiB
121 lines
3.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef VGUI_GRID_H |
|
#define VGUI_GRID_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
|
|
#include <vgui_controls/Panel.h> |
|
|
|
namespace vgui |
|
{ |
|
|
|
// The grid control simply manages a grid of panels. You can adjust column sizes and spacings and |
|
// configure and fill the panels however you want. |
|
// To use this control, call SetDimensions, SetSpacing and fill the controls. |
|
class CGrid : public Panel |
|
{ |
|
public: |
|
CGrid(); |
|
virtual ~CGrid(); |
|
|
|
bool SetDimensions(int xCols, int yRows); // Set how many columns and rows in the grid. |
|
void Term(); |
|
|
|
Panel* GetEntry(int x, int y); // Get the panel associated with a grid entry. |
|
bool SetEntry(int x, int y, Panel *pPanel); |
|
|
|
int GetXSpacing(); |
|
int GetYSpacing(); |
|
void SetSpacing(int xSpacing, int ySpacing); // Set spacing between rows and columns. |
|
|
|
bool SetColumnWidth(int iColumn, int width); // Set a column's width. |
|
bool SetRowHeight(int iRow, int height); // Set a row's height. |
|
|
|
int GetColumnWidth(int iColumn); |
|
int GetRowHeight(int iRow); |
|
|
|
int CalcFitColumnWidth(int iColumn); // Returns the maximum width of all panels in the column. |
|
int CalcFitRowHeight(int iRow); // Returns the maximum height of all panels in the row. |
|
|
|
int CalcDrawHeight(); // Returns how many pixels high the grid control should be |
|
// for all of its contents to be visible (based on its row heights |
|
// and y spacing). |
|
|
|
void AutoSetRowHeights(); // Just does SetRowHeight(iRow, CalcFitRowHeight(iRow)) for all rows. |
|
|
|
bool GetEntryBox( // Returns the bounding box for the specified entry. |
|
int col, int row, int &x, int &y, int &w, int &h); |
|
|
|
bool CopyColumnWidths(CGrid *pOther); // Copy the column widths from the other grid. Fails if the |
|
// column count is different. |
|
|
|
void RepositionContents(); // Sets the size and position of all the grid entries based |
|
// on current spacings and row/column widths. |
|
// You usually only want to call this while setting up the control |
|
// if you want to get the position or dimensions of the child |
|
// controls. This will set them. |
|
|
|
void SetRowUnderline(int row, bool enabled, int offset, int r, int g, int b, int a); // sets underline color for a particular row |
|
|
|
// returns the true if found, false otherwise |
|
bool GetCellAtPoint(int worldX, int worldY, int &row, int &col); |
|
|
|
// Panel overrides. |
|
public: |
|
|
|
virtual void Paint(); |
|
virtual void PaintBackground(); |
|
|
|
protected: |
|
|
|
class CGridEntry |
|
{ |
|
public: |
|
CGridEntry(); |
|
~CGridEntry(); |
|
|
|
Panel *m_pPanel; |
|
|
|
bool m_bUnderline; |
|
short m_UnderlineColor[4]; |
|
int m_iUnderlineOffset; |
|
}; |
|
|
|
void Clear(); |
|
CGridEntry* GridEntry(int x, int y); |
|
|
|
void CalcColOffsets(int iStart); |
|
void CalcRowOffsets(int iStart); |
|
|
|
|
|
protected: |
|
|
|
bool m_bDirty; // Set when controls will need to be repositioned. |
|
|
|
int m_xCols; |
|
int m_yRows; |
|
|
|
int m_xSpacing; |
|
int m_ySpacing; |
|
|
|
int *m_Widths; |
|
int *m_Heights; |
|
int *m_ColOffsets; |
|
int *m_RowOffsets; |
|
|
|
CGridEntry *m_GridEntries; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
#endif // VGUI_GRID_H
|
|
|