//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //============================================================================= #ifndef COLORPICKERPANEL_H #define COLORPICKERPANEL_H #ifdef _WIN32 #pragma once #endif #include "vgui_controls/EditablePanel.h" #include "vgui_controls/Frame.h" #include "vgui_controls/Button.h" #include "bitmap/imageformat.h" #include "mathlib/vector.h" //----------------------------------------------------------------------------- // Forward declarations //----------------------------------------------------------------------------- class CColorXYPreview; class CColorZPreview; namespace vgui { class RadioButton; class TextEntry; class IScheme; } //----------------------------------------------------------------------------- // // Color picker panel // //----------------------------------------------------------------------------- class CColorPickerPanel : public vgui::EditablePanel { DECLARE_CLASS_SIMPLE( CColorPickerPanel, vgui::EditablePanel ); public: // constructor CColorPickerPanel( vgui::Panel *pParent, const char *pName ); void SetInitialColor( Color initialColor ); void GetCurrentColor( Color *pColor ); void GetInitialColor( Color *pColor ); // Inherited from Panel virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void OnMousePressed( vgui::MouseCode code ); private: MESSAGE_FUNC_PARAMS( OnRadioButtonChecked, "RadioButtonChecked", kv ); MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data ); MESSAGE_FUNC_PARAMS( OnHSVSelected, "HSVSelected", data ); MESSAGE_FUNC_PARAMS( OnColorSelected, "ColorSelected", data ); // Called when the color changes void OnColorChanged( vgui::TextEntry *pChanged = NULL ); // Updates the preview colors void UpdatePreviewColors(); CColorXYPreview *m_pColorXYPreview; CColorZPreview *m_pColorZPreview; vgui::RadioButton* m_pHueRadio; vgui::RadioButton* m_pSaturationRadio; vgui::RadioButton* m_pValueRadio; vgui::RadioButton* m_pRedRadio; vgui::RadioButton* m_pGreenRadio; vgui::RadioButton* m_pBlueRadio; vgui::TextEntry* m_pHueText; vgui::TextEntry* m_pSaturationText; vgui::TextEntry* m_pValueText; vgui::TextEntry* m_pRedText; vgui::TextEntry* m_pGreenText; vgui::TextEntry* m_pBlueText; vgui::Panel* m_pInitialColor; vgui::Panel* m_pCurrentColor; vgui::TextEntry* m_pAlphaText; RGB888_t m_InitialColor; RGB888_t m_CurrentColor; unsigned char m_InitialAlpha; unsigned char m_CurrentAlpha; Vector m_CurrentHSVColor; }; //----------------------------------------------------------------------------- // Purpose: Modal dialog for picker //----------------------------------------------------------------------------- class CColorPickerFrame : public vgui::Frame { DECLARE_CLASS_SIMPLE( CColorPickerFrame, vgui::Frame ); public: CColorPickerFrame( vgui::Panel *pParent, const char *pTitle ); ~CColorPickerFrame(); // Inherited from Frame virtual void OnCommand( const char *pCommand ); // Purpose: Activate the dialog // If a color is picked, the message 'ColorPickerPicked' is sent with the "color" field set to the color // If cancel is hit, the message 'ColorPickerCancel' is sent // If the color is changed in the preview, the message 'ColorPickerPreview' is sent with the "color" field set to the color void DoModal( Color initialColor, KeyValues *pContextKeys = NULL ); // Gets the initial color void GetInitialColor( Color *pColor ); private: void CleanUpMessage(); CColorPickerPanel *m_pPicker; vgui::Button *m_pOpenButton; vgui::Button *m_pCancelButton; KeyValues *m_pContextKeys; }; //----------------------------------------------------------------------------- // Purpose: A button which brings up the color picker //----------------------------------------------------------------------------- class CColorPickerButton : public vgui::Button { DECLARE_CLASS_SIMPLE( CColorPickerButton, vgui::Button ); /* NOTE: Sends ColorPickerPicked message when a color is picked color - picked color Sends ColorPickerPreview message when a color is previewed color - current preview color Sends ColorPickerCancelled message when the cancel button was hit startingColor - color before the picking occurred */ public: CColorPickerButton( vgui::Panel *pParent, const char *pName, vgui::Panel *pActionSignalTarget = NULL ); ~CColorPickerButton(); virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); virtual void DoClick(); void SetColor( const Color& clr ); void SetColor( int r, int g, int b, int a ); Color GetColor( void ) { return m_CurrentColor; } private: MESSAGE_FUNC_PARAMS( OnPicked, "ColorPickerPicked", data ); MESSAGE_FUNC_PARAMS( OnPreview, "ColorPickerPreview", data ); MESSAGE_FUNC( OnCancelled, "ColorPickerCancel" ); void UpdateButtonColor(); Color m_CurrentColor; }; #endif // COLORPICKERPANEL_H