#include "wx/settings.h"
#include "wx/brush.h"
#include "wx/combobox.h"
- #include "wx/listbox"
+ #include "wx/listbox.h"
#include "wx/stattext.h"
#include "wx/textctrl.h"
#endif //WX_PRECOMP
#include "wx/spinctrl.h"
+// if wxDatePickerCtrl code doesn't define the date event, do it here as we
+// need it as well
+#if !wxUSE_DATEPICKCTRL
+ #define _WX_DEFINE_DATE_EVENTS_
+#endif
+
#include "wx/calctrl.h"
#define DEBUG_PAINT 0
#else
IMPLEMENT_DYNAMIC_CLASS(wxCalendarCtrl, wxControl)
#endif
-IMPLEMENT_DYNAMIC_CLASS(wxCalendarEvent, wxCommandEvent)
+IMPLEMENT_DYNAMIC_CLASS(wxCalendarEvent, wxDateEvent)
// ----------------------------------------------------------------------------
// events
}
SetSelection(m_cal->GetDate().GetMonth());
- SetSize(wxDefaultPosition.x,
- wxDefaultPosition.y,
- wxDefaultSize.x,
- wxDefaultSize.y,
+ SetSize(wxDefaultCoord,
+ wxDefaultCoord,
+ wxDefaultCoord,
+ wxDefaultCoord,
wxSIZE_AUTO_WIDTH|wxSIZE_AUTO_HEIGHT);
}
// above it
SetBestSize(size);
SetPosition(pos);
-
+
+ // Since we don't paint the whole background make sure that the platform
+ // will use the right one.
+ SetBackgroundColour(GetBackgroundColour());
+
SetHolidayAttrs();
return true;
height += m_spinYear->GetBestSize().y;
}
+ wxCoord w2= m_comboMonth->GetBestSize().x + HORZ_MARGIN + GetCharWidth()*6;
+ if (width < w2)
+ width=w2;
+
if ( !HasFlag(wxBORDER_NONE) )
{
// the border would clip the last line otherwise
wxSize best(width, height);
CacheBestSize(best);
- return best;
+ return best;
}
void wxCalendarCtrl::DoSetSize(int x, int y,
wxSize sizeStatic = m_staticMonth->GetSize();
wxSize sizeSpin = m_spinYear->GetSize();
int dy = (sizeCombo.y - sizeStatic.y) / 2;
-/*
-In the calender the size of the combobox for the year
-is just defined by a margin from the month combobox to
-the left border. While in wxUniv the year control can't
-show all 4 digits, in wxMsw it show almost twice as
-much. Instead the year should use it's best size and be
-left aligned to the calendar. Just in case the month in
-any language is longer than it has space in the
-calendar it is shortend.This way the year always can
-show the 4 digits.
-
-This patch relies on the fact that a combobox has a
-good best size implementation. This is not the case
-with wxMSW but I don't know why.
-
-Otto Wyss
-*/
-
-#ifdef __WXUNIVERSAL__
- if (sizeCombo.x + HORZ_MARGIN - sizeSpin.x > width)
- {
- m_comboMonth->SetSize(x, y, width - HORZ_MARGIN - sizeSpin.x, sizeCombo.y);
- }
- else
- {
- m_comboMonth->Move(x, y);
- }
- m_staticMonth->Move(x, y + dy);
- m_spinYear->Move(x + width - sizeSpin.x, y);
- m_staticYear->Move(x + width - sizeSpin.x, y + dy);
-#else
m_comboMonth->Move(x, y);
m_staticMonth->SetSize(x, y + dy, sizeCombo.x, sizeStatic.y);
m_spinYear->SetSize(x + xDiff, y, width - xDiff, sizeCombo.y);
m_staticYear->SetSize(x + xDiff, y + dy, width - xDiff, sizeStatic.y);
-#endif
+
yDiff = wxMax(sizeSpin.y, sizeCombo.y) + VERT_MARGIN;
}
else // no controls on the top
#endif
wxCoord y = 0;
+ wxCoord x0 = (GetSize().x - m_widthCol*7) /2;
+ if (x0 < 0) x0 = 0;
if ( HasFlag(wxCAL_SEQUENTIAL_MONTH_SELECTION) )
{
dc.SetTextForeground(*wxBLACK);
dc.SetBrush(wxBrush(m_colHeaderBg, wxSOLID));
dc.SetPen(wxPen(m_colHeaderBg, 1, wxSOLID));
- dc.DrawRectangle(0, y, GetClientSize().x, m_heightRow);
+ dc.DrawRectangle(x0, y, GetClientSize().x, m_heightRow);
// Get extent of month-name + year
wxCoord monthw, monthh;
dc.GetTextExtent(headertext, &monthw, &monthh);
// draw month-name centered above weekdays
- wxCoord monthx = ((m_widthCol * 7) - monthw) / 2;
+ wxCoord monthx = ((m_widthCol * 7) - monthw) / 2 + x0;
wxCoord monthy = ((m_heightRow - monthh) / 2) + y;
dc.DrawText(headertext, monthx, monthy);
leftarrow[1] = wxPoint(arrowheight / 2, 0);
leftarrow[2] = wxPoint(arrowheight / 2, arrowheight - 1);
- rightarrow[0] = wxPoint(0, 0);
+ rightarrow[0] = wxPoint(0,0);
rightarrow[1] = wxPoint(arrowheight / 2, arrowheight / 2);
rightarrow[2] = wxPoint(0, arrowheight - 1);
// draw the "month-arrows"
wxCoord arrowy = (m_heightRow - arrowheight) / 2;
- wxCoord larrowx = (m_widthCol - (arrowheight / 2)) / 2;
- wxCoord rarrowx = ((m_widthCol - (arrowheight / 2)) / 2) + m_widthCol*6;
- m_leftArrowRect = wxRect(0, 0, 0, 0);
- m_rightArrowRect = wxRect(0, 0, 0, 0);
+ wxCoord larrowx = (m_widthCol - (arrowheight / 2)) / 2 + x0;
+ wxCoord rarrowx = ((m_widthCol - (arrowheight / 2)) / 2) + m_widthCol*6 + x0;
+ m_leftArrowRect = m_rightArrowRect = wxRect(0,0,0,0);
if ( AllowMonthChange() )
{
}
// first draw the week days
- if ( IsExposed(0, y, 7*m_widthCol, m_heightRow) )
+ if ( IsExposed(x0, y, 7*m_widthCol, m_heightRow) )
{
#if DEBUG_PAINT
wxLogDebug("painting the header");
n = wd;
wxCoord dayw, dayh;
dc.GetTextExtent(m_weekdays[n], &dayw, &dayh);
- dc.DrawText(m_weekdays[n], (wd*m_widthCol) + ((m_widthCol- dayw) / 2), y); // center the day-name
+ dc.DrawText(m_weekdays[n], x0 + (wd*m_widthCol) + ((m_widthCol- dayw) / 2), y); // center the day-name
}
}
}
}
- wxCoord x = wd*m_widthCol + (m_widthCol - width) / 2;
+ wxCoord x = wd*m_widthCol + (m_widthCol - width) / 2 + x0;
dc.DrawText(dayStr, x, y + 1);
if ( !isSel && attr && attr->HasBorder() )
return wxListBox::GetClassDefaultAttributes(variant);
}
-
-// ----------------------------------------------------------------------------
-// wxCalendarEvent
-// ----------------------------------------------------------------------------
-
-void wxCalendarEvent::Init()
-{
- m_wday = wxDateTime::Inv_WeekDay;
-}
-
-wxCalendarEvent::wxCalendarEvent(wxCalendarCtrl *cal, wxEventType type)
- : wxCommandEvent(type, cal->GetId())
-{
- m_date = cal->GetDate();
- SetEventObject(cal);
-}
-
#endif // wxUSE_CALENDARCTRL