PanelList h
Jump to navigation
Jump to search
/////////// Copyright © 2007, Mark Chandler. All rights reserved. ///////////
//
// Description:
// Header file for the panel list.
// Also includes the base panel class for the sub panels
//
//
// Mark Chandler 2007 admin@lodle.net
//
////////////////////////////////////////////////////////////////////////////////
#ifndef PD_PANELLIST_H
#define PD_PANELLIST_H
#ifdef _WIN32
#pragma once
#endif
#include <vgui_controls/panel.h>
#include <vgui_controls/ImagePanel.h>
#include <vgui_controls/ScrollBar.h>
#include <vgui_controls/Label.h>
#include <vgui/VGUI.h>
#include "Keyvalues.h"
#include <vgui/ISurface.h>
#include <vgui/IScheme.h>
using namespace vgui;
#define TITLEHIEGHT 25
class PD_BasePanel : public vgui::Panel
{
DECLARE_CLASS_SIMPLE( PD_BasePanel, vgui::Panel );
public:
Color* bgColor;
PD_BasePanel(Panel *parent, const char *name) : Panel(parent, name)
{
this->SetMouseInputEnabled(true);
this->SetKeyBoardInputEnabled(false);
bgColor = new Color(200,200,200,255);
}
virtual void OnMousePressed(MouseCode code)
{
if (code == MOUSE_LEFT)
{
PostActionSignal(new KeyValues("ItemClick","name", this->GetName()));
}
}
virtual void OnMouseDoublePressed(MouseCode code)
{
//Msg("XXX Code is: %d \n", code);
if (code == MOUSE_LEFT)
{
PostActionSignal(new KeyValues("ItemDoubleClick","name", this->GetName()));
}
}
void PaintBackground()
{
int wide, tall;
GetSize(wide, tall);
vgui::surface()->DrawSetColor(*bgColor);
vgui::surface()->DrawFilledRect(0, 0, wide, tall);
}
};
#define HEADERIMG "menu/sub_title"
class PD_HeaderPanel : public PD_BasePanel
{
DECLARE_CLASS_SIMPLE( PD_HeaderPanel, PD_BasePanel );
PD_HeaderPanel(Panel *parent, const char *name);
void SetTitleText(char * text){;};
void OnSizeChanged(int newWide, int newTall);
void OnThink( void );
protected:
void PaintBackground();
private:
vgui::Label *m_pTitle;
vgui::ImagePanel *m_pTitleBG;
vgui::ImagePanel *m_pBodyBG;
bool m_bNeedsUpdate;
char m_szTitle[256];
};
struct panelInfo
{
int iHeader;
vgui::Panel* pPanel;
bool isSelectable;
};
//struct headerInfo
//{
// char* szTitle;
// vgui::Panel* pPanel;
//};
class PD_PanelList : public vgui::Panel
{
DECLARE_CLASS_SIMPLE( PD_PanelList, vgui::Panel );
public:
PD_PanelList(Panel *parent, const char *name);
~PD_PanelList();
// void RemovePanel( int index );
int AddPanel( Panel* pPanel, bool isSelectable = true);
int AddPanel( Panel* pPanel, char* header, bool isSelectable = true);
Panel * GetPanel( int index )
{
if (index <0 || index > m_pPanelList.Count()-1)
return NULL;
else
return m_pPanelList[index]->pPanel;
}
int GetSelected( void ){return m_iSelected;}
void SetSelected( int index );
void ShowSelected(bool val){m_bShowSelected=val;};
void SetMargen( int amount );
void SetHeight( int amount );
void PurgeAll( void );
int Count( void ){ return m_pPanelList.Count(); }
void Reset();
void ResetAllChildPos();
void SetHeaderEnabled(bool state){m_bHeaderDisabled=!state;}
void SetFixedHeight(bool state){m_bFixedSize = state;}
virtual void OnSizeChanged(int newWide, int newTall);
virtual void OnThink( void );
virtual void Update( void );
MESSAGE_FUNC_INT( OnSliderMoved, "ScrollBarSliderMoved", position );
MESSAGE_FUNC_CHARPTR( OnSetSelected, "SetSelected", name );
MESSAGE_FUNC_CHARPTR( OnRequestUpdate, "NeedsUpdate", name );
MESSAGE_FUNC_CHARPTR( OnItemClicked, "ItemClick", name );
MESSAGE_FUNC_CHARPTR( OnItemDoubleClicked, "ItemDoubleClick", name );
MESSAGE_FUNC_INT_INT( OnCursorMoved, "OnCursorMoved", x, y );
//void OnMouseDoublePressed(MouseCode code);
void OnKeyCodeTyped(KeyCode code);
void PrintLoc();
void OnMouseWheeled(int delta);
void OnCommand(char* command);
void UpdateSelected();
virtual void SetPaintBackgroundEnabled( bool state ){ m_bPaintBg = state; }
protected:
virtual void PaintBackground();
virtual void Paint();
virtual void PaintBorder();
void updateSize( void );
int FindItemUsingIdent(const char *pszIdent);
int FindHeaderUsingIdent(const char *pszIdent);
void MoveBy( int amount, bool slider = false );
void ResetSelected();
private:
int m_iMargen;
int m_iGroupMargen;
int m_iHeight;
int m_iMaxSliderVal;
int m_iSelected;
bool m_bHeaderDisabled;
bool m_bShowSelected;
bool m_bFixedSize;
bool m_bRejectSliderMove;
CUtlVector<panelInfo *> m_pPanelList;
CUtlVector<vgui::Panel *> m_pHeaderList;
vgui::ScrollBar *m_pScrollBar;
PD_BasePanel *m_pSelImage;
bool m_bPaintBg;
};
#endif