///////////////////////////////////////////////////////////////////////////// // Name: wxPieCtrl.h // Purpose: wxPieCtrl (v0.1.2) // Author: Volodymir (T-Rex) Tryapichko // Modified by: Frank Weiler, 10.10.2006 // Created: June-07-2005 // RCS-ID: $Id: // Copyright: (c) Volodymir (T-Rex) Tryapichko // Licence: wxWidgets license ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_PIE_CTRL #define _WX_PIE_CTRL #include #include #include #ifndef M_PI #define M_PI 3.14159265358979 #endif #if ! wxCHECK_VERSION(2,8,0) WX_DECLARE_OBJARRAY(double, wxArrayDouble); #endif // ======================================================================== // wxPiePart // ------------------------------------------------------------------------ /// This class is used for storing data in wxPieCtrl. class wxPiePart { double m_Value; wxColour m_Colour; wxString m_Label; public: /// Default constructor wxPiePart(); /// Parametrized constructor /*! \param value used for drawing the pie. Specifies the size of the sector. \param colour specifies the colour of the sector \param label specifies the text to be shown in diagram legend */ wxPiePart(double value, wxColour colour, wxString label = wxEmptyString); /// Copy constructor wxPiePart(const wxPiePart & part); /// Returns the colour of sector wxColour GetColour() {return m_Colour;} /// Sets the colour of sector void SetColour(wxColour colour) {m_Colour = colour;} /// Returns the size of sector double GetValue() {return m_Value;} /// Sets the size of sector void SetValue(double value) {m_Value = fabs(value);} /// Returns the label of sector wxString GetLabel() {return m_Label;} /// Sets the label of sector void SetLabel(wxString value) {m_Label = value;} // }; WX_DECLARE_OBJARRAY(wxPiePart, wxPieSeries); // ======================================================================== // wxPieCtrl // ------------------------------------------------------------------------ /// The component for drawing pie diagrams class wxPieCtrl : public wxWindow { protected: int m_padding; wxBitmap m_CanvasBitmap; wxMemoryDC m_CanvasDC; wxColour m_BackColour; bool m_CanRepaint; bool m_ShowEdges; int m_lastCoveredPart; // parameters affecting legend wxFont m_TitleFont; wxFont m_LabelFont; bool m_LegendIsTransparent; wxColour m_TitleColour; wxColour m_LabelColour; wxColour m_LegendBackColour; unsigned int m_legendHorBorder; unsigned int m_LegendVerBorder; wxString m_szTitle; //internal methods void GetPartAngles(wxArrayDouble & angles); void RecreateCanvas(); int GetCoveredPiePart(int x,int y); void DrawParts(wxRect& pieRect); void DrawLegend(int left, int top); void Draw(wxPaintDC & pdc); #if (defined(__WXMAC__) && wxCHECK_VERSION(2,8,2)) void DrawEllipticArc( wxCoord x, wxCoord y, wxCoord w, wxCoord h, double sa, double ea ); #endif public: /// An array of wxPiePart objects for storing information about sectors wxPieSeries m_Series; wxPieCtrl(wxWindow * parent, wxWindowID id = wxID_ANY, wxPoint pos = wxDefaultPosition, wxSize sz = wxDefaultSize, long style = 0, wxString name = wxT("wxPieCtrl")); wxColour GetBackColour(); void SetBackColour(wxColour colour); bool GetShowEdges(); void SetShowEdges(bool value); void SetPadding(int pad); int GetPadding(); virtual void Refresh(bool eraseBackground = true, const wxRect* rect = NULL); /// Returns transparency flag of legend box bool IsTransparent() {return m_LegendIsTransparent;} /// Sets transparency flag of legend box void SetTransparent(bool value); /// Returns the font used for displaying the labels of sectors wxFont GetLabelFont() {return m_LabelFont;} /// Sets the font used for displaying the labels of sectors void SetLabelFont(wxFont font); /// Returns the size of horizontal border of legend box unsigned int GeHorLegendBorder() {return m_legendHorBorder;} /// Returns the size of vertical border of legend box unsigned int GetVerLegendBorder() {return m_LegendVerBorder;} /// Sets the size of horizontal border of legend box void SetHorLegendBorder(unsigned int value); /// Sets the size of vertical border of legend box void SetVerLegendBorder(unsigned int value); /// Returns the colour used for displaying the labels of sectors wxColour GetLabelColour() {return m_LabelColour;} /// Sets the colour used for displaying the labels of sectors void SetLabelColour(wxColour colour); /// Returns the colour used for displaying lagend box background wxColour GetLegendBackColour() {return m_LegendBackColour;} /// Sets the colour used for displaying legend box background void SetLegendBackColour(wxColour colour); void SetLabel(const wxString& label); DECLARE_EVENT_TABLE() void OnPaint(wxPaintEvent & event); void OnSize(wxSizeEvent & event); void OnMouseMove(wxMouseEvent& ev); void OnEraseBackground(wxEraseEvent & /*event*/); }; #endif