VGUI PanelListPanel: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
No edit summary
Line 19: Line 19:
PanelListPanels can be created via the c++ keyword new with a simple call to PanelListPanel:
PanelListPanels can be created via the c++ keyword new with a simple call to PanelListPanel:


  vgui::PanelListPanel* myPanel = new PanelListPanel(this, "myPanel");
  PanelListPanel* myPanel = new PanelListPanel(this, "myPanel");




Line 30: Line 30:
         //Create Image
         //Create Image
  Q_snprintf(buffer, sizeof(buffer), "image%i", i);
  Q_snprintf(buffer, sizeof(buffer), "image%i", i);
  vgui::ImagePanel* imagePanel = new ImagePanel( this, buffer );
  ImagePanel* imagePanel = new ImagePanel( this, buffer );
  imagePanel->SetImage(scheme()->GetImage("", false));
  imagePanel->SetImage(scheme()->GetImage("", false));
   
   
         //Create Label
         //Create Label
  Q_snprintf(buffer, sizeof(buffer), "label%i", i);
  Q_snprintf(buffer, sizeof(buffer), "label%i", i);
  vgui::Label* label = new Label( this, buffer, buffer );
  Label* label = new Label( this, buffer, buffer );
  label->SetText(buffer);
  label->SetText(buffer);
   
   

Revision as of 12:41, 7 June 2009

A PanelListPanel is a vgui2 element defined in the vgui_controls library, in the file PanelListPanel.cpp. PanelListPanels are available in all source games. PanelListPanels display a list of user specified label, control pairs.

This is a screenshot of a skeleton PanelListPanel using ImagePanels as the added controls.

Example Usage

Before creating anything, we first need to include our header files and use the vgui namespace.

#include <vgui_controls/Label.h>
#include <vgui_controls/ImagePanel.h>
#include <vgui_controls/PanelListPanel.h>
using namespace vgui;


These next two blocks of code generally should be added to the constructor.


PanelListPanels can be created via the c++ keyword new with a simple call to PanelListPanel:

PanelListPanel* myPanel = new PanelListPanel(this, "myPanel");


Once we have our PanelListPanel created, we can now add controls to it:

char buffer [40];

for (int i = 0; i < 5; i++)
{
       //Create Image
	Q_snprintf(buffer, sizeof(buffer), "image%i", i);
	ImagePanel* imagePanel = new ImagePanel( this, buffer );
	imagePanel->SetImage(scheme()->GetImage("", false));

       //Create Label
	Q_snprintf(buffer, sizeof(buffer), "label%i", i);
	Label* label = new Label( this, buffer, buffer );
	label->SetText(buffer);

       //Add Label and Image to PanelListPanel
	m_pList->AddItem(label, imagePanel);
}

With m_pList being a pointer to the PanelListPanel.

Its also important to note that scheme()->GetImage begins from "materials/vgui" and no extensions should be provided. So, scheme()->GetImage("vgui/eye", false) would really point to "materials/vgui/vgui/eye.vmt".


Lastly we'll set the control size and make it visible.

void CExample::PerformLayout()
{
	BaseClass::PerformLayout();

	m_pList->SetBounds( 280, 300, 200, 200 ); //posX, posY, width, height
       m_pList->SetVisible( true );
}


And we're done!