📄 gwidgets.h
字号:
/* Copyright (C) 2006, Mike Gashler This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. see http://www.gnu.org/copyleft/lesser.html*/#ifndef __GWIDGETS_H__#define __GWIDGETS_H__#include "GImage.h"#include "GString.h"class GPointerArray;class GWidgetAtomic;class GWidgetGroup;class GWidget;class GWidgetListBox;class GWidgetTextButton;class GWidgetImageButton;class GWidgetVCRButton;class GWidgetHorizScrollBar;class GWidgetVertScrollBar;class GWidgetGroupWithCanvas;class GWidgetTextLabel;class GWidgetFileSystemBrowser;class GWidgetSliderTab;class GWidgetTextBox;class GWidgetPolarLineGraph;class GWidgetPolarBarGraph;class GWidgetVertSlider;class GWidgetStyle{protected: int m_nButtonFontSize; int m_nLabelFontSize; float m_fButtonFontWidth; float m_fLabelFontWidth; GColor m_cButtonTextColor; GColor m_cLabelTextColor; GColor m_cButtonPressedTextColor; GColor m_cTextBoxBorderColor; GColor m_cTextBoxTextColor;public: GWidgetStyle(); ~GWidgetStyle(); GColor GetTextBoxBorderColor() { return m_cTextBoxBorderColor; } GColor GetTextBoxTextColor() { return m_cTextBoxBorderColor; } GColor GetTextBoxSelectedTextColor() { return m_cButtonTextColor; } int GetListBoxLineHeight() { return 16; } int GetDefaultScrollBarSize() { return 16; } void DrawButtonText(GImage* pImage, int x, int y, int w, int h, GString* pString, bool pressed); void DrawLabelText(GImage* pImage, int x, int y, int w, int h, GString* pString, bool alignLeft, GColor c); void DrawHorizCurvedOutSurface(GImage* pImage, int x, int y, int w, int h); void DrawHorizCurvedInSurface(GImage* pImage, int x, int y, int w, int h, int colorMaskRed = 0, int colorMaskGreen = 0, int colorMaskBlue = 255); void DrawVertCurvedOutSurface(GImage* pImage, int x, int y, int w, int h); void DrawVertCurvedInSurface(GImage* pImage, int x, int y, int w, int h); void DrawCursor(GImage* pImage, int x, int y, int w, int h);};// The base class of all GUI widgetsclass GWidget{friend class GWidgetGroup;friend class GWidgetGroupWithCanvas;public: enum WidgetType { Animation, CheckBox, Custom, Dialog, FileSystemBrowser, Grid, HScrollBar, ListBox, ListBoxItem, PolarChart, ProgressBar, SliderTab, TextBox, TextButton, TextLabel, VCRButton, VertSlider, VScrollBar, };protected: GRect m_rect; GWidgetGroup* m_pParent; GWidgetStyle* m_pStyle; int m_nID; // for use by the owning parent#ifdef _DEBUG unsigned int m_nDebugCheck;#endif // _DEBUGpublic: GWidget(GWidgetGroup* m_pParent, int x, int y, int w, int h); virtual ~GWidget(); virtual WidgetType GetType() = 0; virtual bool IsAtomicWidget() = 0; virtual void Draw(GWidgetGroupWithCanvas* pTarget) = 0; virtual GImage* GetImage(GRect* pOutRect) = 0; void SetPos(int x, int y); GRect* GetRect() { return &m_rect; } GWidgetGroup* GetParent() { return m_pParent; }#ifdef _DEBUG bool DebugCheck();#endif // _DEBUG};// The base class of all atomic widgets (widgets that are not composed of other widgets).class GWidgetAtomic : public GWidget{friend class GWidgetDialog;public: GWidgetAtomic(GWidgetGroup* pParent, int x, int y, int w, int h); virtual ~GWidgetAtomic(); virtual bool IsAtomicWidget() { return true; } virtual void Draw(GWidgetGroupWithCanvas* pTarget); virtual void OnChar(char c); virtual void OnMouseMove(int dx, int dy); virtual void OnGetFocus() {} virtual void OnLoseFocus() {}protected: virtual void Grab(int x, int y) = 0; virtual void Release() = 0;};// The base class of all widgets that are composed of other widgetsclass GWidgetGroup : public GWidget{friend class GWidget;friend class GWidgetAtomic;protected: GPointerArray* m_pWidgets; bool m_dirty;public: GWidgetGroup(GWidgetGroup* pParent, int x, int y, int w, int h); virtual ~GWidgetGroup(); virtual bool IsAtomicWidget() { return false; } virtual GWidgetStyle* GetStyle() { return m_pParent->GetStyle(); } virtual GWidgetAtomic* FindAtomicWidget(int x, int y); virtual void OnDestroyWidget(GWidget* pWidget); int GetChildWidgetCount(); GWidget* GetChildWidget(int n); virtual void OnPushTextButton(GWidgetTextButton* pButton) { if(m_pParent) m_pParent->OnReleaseTextButton(pButton); } virtual void OnReleaseTextButton(GWidgetTextButton* pButton) { if(m_pParent) m_pParent->OnReleaseTextButton(pButton); } virtual void OnReleaseImageButton(GWidgetImageButton* pButton) { if(m_pParent) m_pParent->OnReleaseImageButton(pButton); } virtual void OnPushVCRButton(GWidgetVCRButton* pButton) { if(m_pParent) m_pParent->OnPushVCRButton(pButton); } virtual void OnHorizScroll(GWidgetHorizScrollBar* pScrollBar) { if(m_pParent) m_pParent->OnHorizScroll(pScrollBar); } virtual void OnVertScroll(GWidgetVertScrollBar* pScrollBar) { if(m_pParent) m_pParent->OnVertScroll(pScrollBar); } virtual void OnClickTextLabel(GWidgetTextLabel* pLabel) { if(m_pParent) m_pParent->OnClickTextLabel(pLabel); } virtual void OnSelectFilename(GWidgetFileSystemBrowser* pBrowser, const char* szFilename) { if(m_pParent) m_pParent->OnSelectFilename(pBrowser, szFilename); } virtual void OnChangeListSelection(GWidgetListBox* pListBox) { if(m_pParent) m_pParent->OnChangeListSelection(pListBox); } virtual void OnTextBoxTextChanged(GWidgetTextBox* pTextBox) { if(m_pParent) m_pParent->OnTextBoxTextChanged(pTextBox); } virtual void OnTextBoxPressEnter(GWidgetTextBox* pTextBox) { if(m_pParent) m_pParent->OnTextBoxPressEnter(pTextBox); } virtual void OnChar(char c) { if(m_pParent) m_pParent->OnChar(c); } virtual void OnClickTab(GWidgetSliderTab* pTab) { if(m_pParent) m_pParent->OnClickTab(pTab); } virtual void OnSlideTab(GWidgetSliderTab* pTab, int dx, int dy) { if(m_pParent) m_pParent->OnSlideTab(pTab, dx, dy); } virtual void OnChangePolarLineGraphSelection(GWidgetPolarLineGraph* pChart) { if(m_pParent) m_pParent->OnChangePolarLineGraphSelection(pChart); } virtual void OnChangePolarBarGraphSelection(GWidgetPolarBarGraph* pChart) { if(m_pParent) m_pParent->OnChangePolarBarGraphSelection(pChart); } virtual void OnVertSliderMove(GWidgetVertSlider* pSlider) { if(m_pParent) m_pParent->OnVertSliderMove(pSlider); }protected: void AddWidget(GWidget* pWidget);};class GWidgetGroupWithCanvas : public GWidgetGroup{protected: GImage m_image;public: GWidgetGroupWithCanvas(GWidgetGroup* pParent, int x, int y, int w, int h); virtual ~GWidgetGroupWithCanvas(); virtual GImage* GetImage(GRect* pOutRect); virtual void Draw(GWidgetGroupWithCanvas* pTarget);protected: virtual void Update() = 0;};// A form or dialogclass GWidgetDialog : public GWidgetGroupWithCanvas{protected: GWidgetAtomic* m_pGrabbedWidget; GWidgetAtomic* m_pFocusWidget; GColor m_cBackground; int m_prevMouseX; int m_prevMouseY;public: GWidgetDialog(int w, int h, GColor cBackground); virtual ~GWidgetDialog(); virtual WidgetType GetType() { return Dialog; } virtual GWidgetStyle* GetStyle() { return m_pStyle; } GWidgetAtomic* GetGrabbedWidget() { return m_pGrabbedWidget; } GWidgetAtomic* GetFocusWidget() { return m_pFocusWidget; } void GrabWidget(GWidgetAtomic* pWidget, int mouseX, int mouseY); void SetFocusWidget(GWidgetAtomic* pWidget); void ReleaseWidget(); virtual void OnDestroyWidget(GWidget* pWidget); void HandleChar(char c); bool HandleMousePos(int x, int y); virtual void Update();};// A button with text on itclass GWidgetTextButton : public GWidgetAtomic{protected: GImage m_image; GString m_text; bool m_pressed; bool m_dirty;public: GWidgetTextButton(GWidgetGroup* pParent, int x, int y, int w, int h, GString* pText); virtual ~GWidgetTextButton(); virtual WidgetType GetType() { return TextButton; } virtual GImage* GetImage(GRect* pOutRect); void SetSize(int w, int h); void SetText(GString* pText); void SetText(const char* szText); bool IsPressed() { return m_pressed; }protected: void Update(); virtual void Grab(int x, int y); virtual void Release();};// A button with an image on it. The left half of the image is the// unpressed image and the right half is the pressed image.class GWidgetImageButton : public GWidgetAtomic{protected: GImage m_image; bool m_pressed;public: GWidgetImageButton(GWidgetGroup* pParent, int x, int y, GImage* pImage); virtual ~GWidgetImageButton(); virtual WidgetType GetType() { return TextButton; } virtual GImage* GetImage(GRect* pOutRect); bool IsPressed() { return m_pressed; }protected: virtual void Grab(int x, int y); virtual void Release();};// An image with multiple framesclass GWidgetAnimation : public GWidgetAtomic{protected: GImage m_image; int m_nFrames; int m_nFrame;public: GWidgetAnimation(GWidgetGroup* pParent, int x, int y, GImage* pImage, int nFrames); virtual ~GWidgetAnimation(); virtual WidgetType GetType() { return Animation; } virtual GImage* GetImage(GRect* pOutRect); void SetFrame(int nFrame);protected: virtual void Grab(int x, int y); virtual void Release();};// A text labelclass GWidgetTextLabel : public GWidgetAtomic{protected: GImage m_image; GString m_text; bool m_alignLeft; bool m_dirty; GColor m_cBackground; GColor m_cForeground;public: GWidgetTextLabel(GWidgetGroup* pParent, int x, int y, int w, int h, GString* pText, GColor c); virtual ~GWidgetTextLabel(); virtual WidgetType GetType() { return TextLabel; } virtual GImage* GetImage(GRect* pOutRect); void SetSize(int w, int h); GString* GetText() { return &m_text; } void SetText(GString* pText); void SetText(const char* szText); // Sets the text color void SetForegroundColor(GColor c) { m_cForeground = c; } // The default background color is transparent. If you want an opaque // or semi-opaque background then you should call this method. void SetBackgroundColor(GColor c) { m_cBackground = c; } // Specifies whether the text is left-justified (true) or right-justified (false) void SetAlignLeft(bool bAlignLeft) { m_alignLeft = bAlignLeft; m_dirty = true; }protected: void Update(); virtual void Grab(int x, int y); virtual void Release();};// A button with a common icon on itclass GWidgetVCRButton : public GWidgetAtomic{public: enum VCR_Type { ArrowLeft, ArrowRight, // Play ArrowUp, ArrowDown, Square, // Stop };protected: GImage m_image; VCR_Type m_eType; bool m_pressed; bool m_dirty;public: GWidgetVCRButton(GWidgetGroup* pParent, int x, int y, int w, int h, VCR_Type eType); virtual ~GWidgetVCRButton(); virtual WidgetType GetType() { return VCRButton; } virtual GImage* GetImage(GRect* pOutRect); void SetSize(int w, int h); void SetType(VCR_Type eType); bool IsPressed() { return m_pressed; }protected: void Update(); virtual void Grab(int x, int y); virtual void Release(); void DrawIcon(int nHorizOfs, int nVertOfs);};class GWidgetProgressBar : public GWidgetAtomic{protected: GImage m_image; float m_fProgress; bool m_dirty;public: GWidgetProgressBar(GWidgetGroup* pParent, int x, int y, int w, int h); virtual ~GWidgetProgressBar(); virtual WidgetType GetType() { return ProgressBar; } virtual GImage* GetImage(GRect* pOutRect); void SetSize(int w, int h); void SetProgress(float fProgress); float GetProgress() { return m_fProgress; }protected: void Update(); virtual void Grab(int x, int y); virtual void Release();};class GWidgetCheckBox : public GWidgetAtomic{protected:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -