X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fdda2df62d5055abd263186deb6a859d85a73fd3..14862aeb884ef1d43a19527baf05572c059b0972:/src/generic/calctrl.cpp diff --git a/src/generic/calctrl.cpp b/src/generic/calctrl.cpp index 79943136ec..810fa252f5 100644 --- a/src/generic/calctrl.cpp +++ b/src/generic/calctrl.cpp @@ -169,9 +169,8 @@ void wxCalendarCtrl::Init() m_attrs[n] = NULL; } - wxSystemSettings ss; - m_colHighlightFg = ss.GetSystemColour(wxSYS_COLOUR_HIGHLIGHTTEXT); - m_colHighlightBg = ss.GetSystemColour(wxSYS_COLOUR_HIGHLIGHT); + m_colHighlightFg = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); + m_colHighlightBg = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT); m_colHolidayFg = *wxRED; // don't set m_colHolidayBg - by default, same as our bg colour @@ -203,7 +202,7 @@ bool wxCalendarCtrl::Create(wxWindow *parent, m_lowdate = wxDefaultDateTime; m_highdate = wxDefaultDateTime; - if ( !(GetWindowStyle() & wxCAL_SEQUENTIAL_MONTH_SELECTION) ) + if ( !HasFlag(wxCAL_SEQUENTIAL_MONTH_SELECTION) ) { m_spinYear = new wxYearSpinCtrl(this); m_staticYear = new wxStaticText(GetParent(), -1, m_date.Format(_T("%Y")), @@ -232,7 +231,10 @@ bool wxCalendarCtrl::Create(wxWindow *parent, sizeReal = size; } - SetSize(sizeReal); + // we need to set the position as well because the main control position + // is not the same as the one specified in pos if we have the controls + // above it + SetSize(pos.x, pos.y, sizeReal.x, sizeReal.y); SetBackgroundColour(*wxWHITE); SetFont(*wxSWISS_FONT); @@ -254,6 +256,18 @@ wxCalendarCtrl::~wxCalendarCtrl() // forward wxWin functions to subcontrols // ---------------------------------------------------------------------------- +bool wxCalendarCtrl::Destroy() +{ + if( m_staticYear ) m_staticYear->Destroy(); + if( m_spinYear ) m_spinYear->Destroy(); + if( m_comboMonth ) m_comboMonth->Destroy(); + if( m_staticMonth ) m_staticMonth->Destroy(); + + m_staticYear = 0; m_spinYear = 0; m_comboMonth = 0; m_staticMonth = 0; + + return wxControl::Destroy(); +} + bool wxCalendarCtrl::Show(bool show) { if ( !wxControl::Show(show) ) @@ -295,7 +309,7 @@ bool wxCalendarCtrl::Enable(bool enable) void wxCalendarCtrl::ShowCurrentControls() { - if ( !(GetWindowStyle() & wxCAL_SEQUENTIAL_MONTH_SELECTION) ) + if ( !HasFlag(wxCAL_SEQUENTIAL_MONTH_SELECTION) ) { if ( AllowMonthChange() ) { @@ -666,30 +680,27 @@ size_t wxCalendarCtrl::GetWeek(const wxDateTime& date) const // the constants used for the layout #define VERT_MARGIN 5 // distance between combo and calendar +#ifdef __WXMAC__ +#define HORZ_MARGIN 5 // spin +#else #define HORZ_MARGIN 15 // spin - +#endif wxSize wxCalendarCtrl::DoGetBestSize() const { // calc the size of the calendar ((wxCalendarCtrl *)this)->RecalcGeometry(); // const_cast wxCoord width = 7*m_widthCol, - height = 7*m_heightRow + m_rowOffset; + height = 7*m_heightRow + m_rowOffset + VERT_MARGIN; - // the combobox doesn't report its height correctly (it returns the - // height including the drop down list) so don't use it - - if ( !(GetWindowStyle() & wxCAL_SEQUENTIAL_MONTH_SELECTION) ) + if ( !HasFlag(wxCAL_SEQUENTIAL_MONTH_SELECTION) ) { - height += VERT_MARGIN + m_spinYear->GetBestSize().y; - } - else - { - height += VERT_MARGIN; + // the combobox doesn't report its height correctly (it returns the + // height including the drop down list) so don't use it + height += m_spinYear->GetBestSize().y; } -// if ( GetWindowStyle() & (wxRAISED_BORDER | wxSUNKEN_BORDER) ) // This doesn't work. Default is wxBORDER_DEFAULT (0) - if ( !(GetWindowStyle() & wxBORDER_NONE) ) + if ( !HasFlag(wxBORDER_NONE) ) { // the border would clip the last line otherwise height += 6; @@ -708,10 +719,9 @@ void wxCalendarCtrl::DoSetSize(int x, int y, void wxCalendarCtrl::DoMoveWindow(int x, int y, int width, int height) { - int xDiff = 0; - int yDiff = 0; + int yDiff; - if ( !(GetWindowStyle() & wxCAL_SEQUENTIAL_MONTH_SELECTION) ) + if ( !HasFlag(wxCAL_SEQUENTIAL_MONTH_SELECTION) ) { wxSize sizeCombo = m_comboMonth->GetSize(); wxSize sizeStatic = m_staticMonth->GetSize(); @@ -721,7 +731,7 @@ void wxCalendarCtrl::DoMoveWindow(int x, int y, int width, int height) m_comboMonth->Move(x, y); m_staticMonth->SetSize(x, y + dy, sizeCombo.x, sizeStatic.y); - xDiff = sizeCombo.x + HORZ_MARGIN; + int xDiff = sizeCombo.x + HORZ_MARGIN; m_spinYear->SetSize(x + xDiff, y, width - xDiff, sizeCombo.y); m_staticYear->SetSize(x + xDiff, y + dy, width - xDiff, sizeStatic.y); @@ -729,6 +739,10 @@ void wxCalendarCtrl::DoMoveWindow(int x, int y, int width, int height) wxSize sizeSpin = m_spinYear->GetSize(); yDiff = wxMax(sizeSpin.y, sizeCombo.y) + VERT_MARGIN; } + else // no controls on the top + { + yDiff = 0; + } wxControl::DoMoveWindow(x, y + yDiff, width, height - yDiff); } @@ -811,9 +825,7 @@ void wxCalendarCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) wxCoord y = 0; -///////////////////////////////////////////////////////////////////////////////////////// - - if ( (GetWindowStyle() & wxCAL_SEQUENTIAL_MONTH_SELECTION) ) + if ( HasFlag(wxCAL_SEQUENTIAL_MONTH_SELECTION) ) { // draw the sequential month-selector @@ -883,8 +895,6 @@ void wxCalendarCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) y += m_heightRow; } -///////////////////////////////////////////////////////////////////////////////////////// - // first draw the week days if ( IsExposed(0, y, 7*m_widthCol, m_heightRow) ) { @@ -896,7 +906,7 @@ void wxCalendarCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) dc.SetTextForeground(m_colHeaderFg); dc.SetBrush(wxBrush(m_colHeaderBg, wxSOLID)); dc.SetPen(wxPen(m_colHeaderBg, 1, wxSOLID)); - dc.DrawRectangle(0, y, 7*m_widthCol, m_heightRow); + dc.DrawRectangle(0, y, GetClientSize().x, m_heightRow); bool startOnMonday = (GetWindowStyle() & wxCAL_MONDAY_FIRST) != 0; for ( size_t wd = 0; wd < 7; wd++ ) @@ -908,7 +918,6 @@ void wxCalendarCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) n = wd; wxCoord dayw, dayh; dc.GetTextExtent(m_weekdays[n], &dayw, &dayh); -// dc.DrawText(m_weekdays[n], wd*m_widthCol + 1, y); dc.DrawText(m_weekdays[n], (wd*m_widthCol) + ((m_widthCol- dayw) / 2), y); // center the day-name } }