gwidgets.h
来自「一个由Mike Gashler完成的机器学习方面的includes neural」· C头文件 代码 · 共 1,090 行 · 第 1/2 页
H
1,090 行
/* 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 GIntArray;class GPointerArray;class GWidgetAtomic;class GWidgetCanvas;class GWidgetGroup;class GWidget;class GWidgetListBox;class GWidgetTextButton;class GWidgetTextTab;class GWidgetImageButton;class GWidgetVCRButton;class GWidgetHorizScrollBar;class GWidgetVertScrollBar;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; GImage m_bufferImage;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, GColor col = 0xff0000ff); void DrawHorizCurvedInSurface(GImage* pImage, int x, int y, int w, int h, GColor col = 0xff0000ff); void DrawVertCurvedOutSurface(GImage* pImage, int x, int y, int w, int h, GColor col = 0xff0000ff); void DrawVertCurvedInSurface(GImage* pImage, int x, int y, int w, int h, GColor col = 0xff0000ff); void DrawCursor(GImage* pImage, int x, int y, int w, int h); // This method lets you draw a widget clipped by some rect. Note that // it uses a persistent buffer image to facilitate this. It doesn't // clear the image, so if your widget doesn't draw over its entire // rect, you'll see garbage from previous uses void DrawClipped(GImage* pCanvas, int x, int y, GWidget* pWidget, GRect* pClipRect);};// The base class of all GUI widgetsclass GWidget{friend class GWidgetGroup;public: enum WidgetType { Animation, Canvas, CheckBox, Custom, Dialog, FileSystemBrowser, Grid, HScrollBar, ListBox, ListBoxItem, PolarChart, ProgressBar, SliderTab, TextBox, TextButton, TextLabel, TextTab, 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(GImage* pCanvas, int x, int y) = 0; void SetPos(int x, int y); GRect* GetRect() { return &m_rect; } int GetID() { return m_nID; } 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 OnChar(char c); virtual void OnMouseMove(int dx, int dy); virtual void OnGetFocus() {} virtual void OnLoseFocus() {}protected: virtual void Grab(int button, int x, int y) {} virtual void Release(int button) {}};// 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; GPointerArray* m_pDirtyChildren; GIntArray* m_pDirtyBits;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 Tattle(GWidget* pChild); virtual void OnPushTextButton(GWidgetTextButton* pButton) { if(m_pParent) m_pParent->OnPushTextButton(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); } virtual void OnCanvasMouseDown(GWidgetCanvas* pCanvas, int button, int x, int y) { if(m_pParent) m_pParent->OnCanvasMouseDown(pCanvas, button, x, y); } virtual void OnCanvasMouseUp(GWidgetCanvas* pCanvas, int button, int x, int y) { if(m_pParent) m_pParent->OnCanvasMouseUp(pCanvas, button, x, y); } virtual void OnCanvasMouseMove(GWidgetCanvas* pCanvas, int x, int y, bool bPressed) { if(m_pParent) m_pParent->OnCanvasMouseMove(pCanvas, x, y, bPressed); } virtual void OnSelectTextTab(GWidgetTextTab* pTab) { if(m_pParent) m_pParent->OnSelectTextTab(pTab); }protected: void AddWidget(GWidget* pWidget); //void UpdateChildOntoMyCanvas(GWidget* pChild, GColor cBackground); bool GetDirtyBit(int nBit); void SetDirtyBit(int nBit, bool bValue); void SetClean();};// A form or dialogclass GWidgetDialog : public GWidgetGroup{protected: GImage m_image; 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 button, int mouseX, int mouseY); void SetFocusWidget(GWidgetAtomic* pWidget); void ReleaseWidget(int button); virtual void OnDestroyWidget(GWidget* pWidget); void HandleChar(char c); bool HandleMousePos(int x, int y); virtual void Draw(GImage* pCanvas, int x, int y); GImage* GetImage();};// A button with text on itclass GWidgetTextButton : public GWidgetAtomic{protected: GString m_text; bool m_pressed;public: GWidgetTextButton(GWidgetGroup* pParent, int x, int y, int w, int h, GString* pText); GWidgetTextButton(GWidgetGroup* pParent, int x, int y, int w, int h, const char* szText); virtual ~GWidgetTextButton(); virtual WidgetType GetType() { return TextButton; } virtual void Draw(GImage* pCanvas, int x, int y); void SetText(GString* pText); void SetText(const char* szText); bool IsPressed() { return m_pressed; }protected: virtual void Grab(int button, int x, int y); virtual void Release(int button);};// Represents a tab (ie for tabbed menus, etc.)class GWidgetTextTab : public GWidgetAtomic{protected: GString m_text; GColor m_cBackground; bool m_selected;public: GWidgetTextTab(GWidgetGroup* pParent, int x, int y, int w, int h, const char* szText, GColor cBackground = 0xff6600aa); virtual ~GWidgetTextTab(); virtual WidgetType GetType() { return TextTab; } virtual void Draw(GImage* pCanvas, int x, int y); void SetText(GString* pText); void SetText(const char* szText); bool IsSelected() { return m_selected; } void SetSelected(bool selected);protected: virtual void Grab(int button, int x, int y); virtual void Release(int button);};// 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 void Draw(GImage* pCanvas, int x, int y); bool IsPressed() { return m_pressed; }protected: virtual void Grab(int button, int x, int y); virtual void Release(int button);};// 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 void Draw(GImage* pCanvas, int x, int y); void SetFrame(int nFrame);};// A text labelclass GWidgetTextLabel : public GWidgetAtomic{protected: GString m_text; bool m_alignLeft; GColor m_cBackground; GColor m_cForeground;public: GWidgetTextLabel(GWidgetGroup* pParent, int x, int y, int w, int h, GString* pText, GColor c = 0xffffffff, GColor background = 0x00000000); GWidgetTextLabel(GWidgetGroup* pParent, int x, int y, int w, int h, const char* szText, GColor c = 0xffffffff, GColor background = 0x00000000); virtual ~GWidgetTextLabel(); virtual WidgetType GetType() { return TextLabel; } virtual void Draw(GImage* pCanvas, int x, int y); GString* GetText() { return &m_text; } void SetText(GString* pText); void SetText(const char* szText); // Sets the text color void SetForegroundColor(GColor 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); // Specifies whether the text is left-justified (true) or right-justified (false) void SetAlignLeft(bool bAlignLeft);protected: virtual void Grab(int button, int x, int y); virtual void Release(int button);};// A button with a common icon on itclass GWidgetVCRButton : public GWidgetAtomic{public: enum VCR_Type { ArrowLeft, ArrowRight, // Play ArrowUp, ArrowDown, Square, // Stop };protected: VCR_Type m_eType; bool m_pressed;public: GWidgetVCRButton(GWidgetGroup* pParent, int x, int y, int w, int h, VCR_Type eType); virtual ~GWidgetVCRButton(); virtual WidgetType GetType() { return VCRButton; } virtual void Draw(GImage* pCanvas, int x, int y); void SetType(VCR_Type eType); bool IsPressed() { return m_pressed; }protected: virtual void Grab(int button, int x, int y); virtual void Release(int button); void DrawIcon(GImage* pCanvas, int nHorizOfs, int nVertOfs);};class GWidgetProgressBar : public GWidgetAtomic{protected: float m_fProgress;public: GWidgetProgressBar(GWidgetGroup* pParent, int x, int y, int w, int h); virtual ~GWidgetProgressBar(); virtual WidgetType GetType() { return ProgressBar; } virtual void Draw(GImage* pCanvas, int x, int y); void SetProgress(float fProgress);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?