|
|
//========= Copyright 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef LABEL_H
#define LABEL_H
#ifdef _WIN32
#pragma once
#endif
#include "utlvector.h"
#include "vgui/vgui.h"
#include "vgui_controls/Panel.h"
#include "vgui_controls/PHandle.h"
#include "dmxloader/dmxelement.h"
namespace vgui {
//-----------------------------------------------------------------------------
// Purpose: Contains and displays a set of images
// By default starts with one TextImage
//-----------------------------------------------------------------------------
class Label : public Panel { DECLARE_CLASS_SIMPLE( Label, Panel ); DECLARE_DMXELEMENT_UNPACK_NAMESPACE(vgui);
public:
// Constructors
Label(Panel *parent, const char *panelName, const char *text); Label(Panel *parent, const char *panelName, const wchar_t *wszText); ~Label();
public: // Take the string and looks it up in the localization file to convert it to unicode
virtual void SetText(const char *tokenName);
// Set unicode text directly
virtual void SetText(const wchar_t *unicodeString, bool bClearUnlocalizedSymbol = false );
// Get the current text
virtual void GetText(OUT_Z_BYTECAP(bufferLen) char *textOut, int bufferLen); virtual void GetText(OUT_Z_BYTECAP(bufLenInBytes) wchar_t *textOut, int bufLenInBytes);
// Content alignment
// Get the size of the content within the label
virtual void GetContentSize(int &wide, int &tall);
// Set how the content aligns itself within the label
// alignment code, used to determine how the images are layed out within the Label
enum Alignment { a_northwest = 0, a_north, a_northeast, a_west, a_center, a_east, a_southwest, a_south, a_southeast, };
virtual void SetContentAlignment(Alignment alignment); virtual void SetEnabled(bool state); // Additional offset at the Start of the text (from whichever sides it is aligned)
virtual void SetTextInset(int xInset, int yInset); virtual void GetTextInset(int *xInset, int *yInset );
// Text colors
virtual void SetFgColor(Color color); virtual Color GetFgColor();
// colors to use when the label is disabled
virtual void SetDisabledFgColor1(Color color); virtual void SetDisabledFgColor2(Color color); virtual Color GetDisabledFgColor1(); virtual Color GetDisabledFgColor2();
// Set whether the text is displayed bright or dull
enum EColorState { CS_NORMAL, CS_DULL, CS_BRIGHT, }; virtual void SetTextColorState(EColorState state);
// Font
virtual void SetFont(HFont font); virtual HFont GetFont();
// Hotkey
virtual Panel *HasHotkey(wchar_t key); virtual void SetHotkey(wchar_t key); virtual wchar_t GetHotKey();
// Labels can be associated with controls, and alter behaviour based on the associates behaviour
// If the associate is disabled, so are we
// If the associate has focus, we may alter how we draw
// If we get a hotkey press or focus message, we forward the focus to the associate
virtual void SetAssociatedControl(Panel *control);
// Multiple image handling
// Images are drawn from left to right across the label, ordered by index
// By default there is a TextImage in position 0 (see GetTextImage()/SetTextImageIndex())
virtual int AddImage(IImage *image, int preOffset); // Return the index the image was placed in
virtual void SetImage(IImage *image, int preOffset ); // Clears all images and sets the only remaining image to the passed in image
virtual void SetImageAtIndex(int index, IImage *image, int preOffset); virtual void SetImagePreOffset(int index, int preOffset); // Set the offset in pixels before the image
virtual IImage *GetImageAtIndex(int index); virtual int GetImageCount(); virtual void ClearImages(); virtual void ResetToSimpleTextImage(); // fixes the layout bounds of the image within the label
virtual void SetImageBounds(int index, int x, int width);
// Teturns a pointer to the default text image
virtual TextImage *GetTextImage();
// Moves where the default text image is within the image array (it starts in position 0)
// Setting it to -1 removes it from the image list
// Returns the index the default text image was previously in
virtual int SetTextImageIndex(int newIndex);
// Message handling
// outputData - keyName is the name of the attribute requested.
// for Labels "text" is an option that returns the default text image text
// returns true on success in finding the requested value. false on failure.
virtual bool RequestInfo(KeyValues *outputData); /* INFO HANDLING
"GetText" returns: "text" - text contained in the label */
/* CUSTOM MESSAGE HANDLING
"SetText" input: "text" - label text is set to be this string */
virtual void SizeToContents();
// the +8 is padding to the content size
// the code which uses it should really set that itself;
// however a lot of existing code relies on this
enum Padding { Content = 8, };
void SetWrap( bool bWrap ); void SetCenterWrap( bool bWrap );
void SetNoShortcutSyntax( bool bNoShortcutSyntax );
void SetAllCaps( bool bAllCaps );
virtual void GetSizerMinimumSize(int &wide, int &tall);
protected: virtual void PerformLayout(); virtual wchar_t CalculateHotkey(const char *text); virtual wchar_t CalculateHotkey(const wchar_t *text); virtual void ComputeAlignment(int &tx0, int &ty0, int &tx1, int &ty1); virtual void Paint(); MESSAGE_FUNC_PARAMS( OnSetText, "SetText", params ); virtual void DrawDashedLine(int x0, int y0, int x1, int y1, int dashLen, int gapLen); virtual void OnRequestFocus(VPANEL subFocus, VPANEL defaultPanel); MESSAGE_FUNC( OnHotkeyPressed, "Hotkey" ); virtual void OnMousePressed(MouseCode code); virtual void OnSizeChanged(int wide, int tall);
// makes sure that the maxIndex will be a valid index
virtual void EnsureImageCapacity(int maxIndex);
// editing
virtual void ApplySchemeSettings(IScheme *pScheme);
public: virtual void GetSettings( KeyValues *outResourceData ); virtual void ApplySettings( KeyValues *inResourceData );
protected: virtual const char *GetDescription( void );
MESSAGE_FUNC_PARAMS( OnDialogVariablesChanged, "DialogVariables", dialogVariables );
void HandleAutoSizing( void );
// Derived can override to, e.g., recenter text image text if there is space.
virtual void RepositionTextImage( int &x, int &y, TextImage *pTextImage ) {}
Alignment _contentAlignment;
private:
void Init();
TextImage *_textImage; // this is the textImage, if the full text will not
// fit we put as much as we can and add an elipsis (...)
struct TImageInfo { IImage *image; short offset; short xpos; short width; }; CUtlVector<TImageInfo> _imageDar;
int _textInset[2]; Color _disabledFgColor1; Color _disabledFgColor2; Color _associateColor; int _textImageIndex; // index in the image array that the default _textimage resides
EColorState _textColorState;
PHandle _associate; char *_associateName;
char *_fontOverrideName;
wchar_t _hotkey; // the hotkey contained in the text
bool m_bWrap; bool m_bCenterWrap; bool m_bAllCaps; bool m_bAutoWideToContents; bool m_bAutoWideDirty;
bool m_bAutoTallToContents; bool m_bAutoTallDirty; bool m_bNoShortcutSyntax;
bool m_bUseProportionalInsets; };
} // namespace vgui
#endif // LABEL_H
|