using namespace std;
-BEGIN_EVENT_TABLE(XCCalendarMonthView, wxFrame)
+BEGIN_EVENT_TABLE(XCCalendarMonthView, wxPanel)
EVT_PAINT(XCCalendarMonthView::PaintFrameEvent)
END_EVENT_TABLE()
-XCCalendarMonthView::XCCalendarMonthView(const wxString& title, const wxPoint& pos, const wxSize& size, XCCalendarMonthViewGrid *grid)
- : wxFrame(NULL, wxID_ANY, title, pos, size){
+XCCalendarMonthView::XCCalendarMonthView(wxWindow *parent, const wxString& title, const wxPoint& pos, const wxSize& size, XCCalendarMonthViewGrid *grid, CalendarDataStorage *dataStorage, std::vector<int> *hideAccounts, std::vector<int> *hideCalendars)
+ : wxPanel(parent, wxID_ANY, pos, size, wxTAB_TRAVERSAL){
+ calendarStorage = dataStorage;
+
MondayText = new XCCalendarMonthViewDayTitle(this, _("Monday"), wxDefaultPosition, wxDefaultSize);
TuesdayText = new XCCalendarMonthViewDayTitle(this, _("Tuesday"), wxDefaultPosition, wxDefaultSize);
WednesdayText = new XCCalendarMonthViewDayTitle(this, _("Wednesday"), wxDefaultPosition, wxDefaultSize);
FridayText = new XCCalendarMonthViewDayTitle(this, _("Friday"), wxDefaultPosition, wxDefaultSize);
SaturdayText = new XCCalendarMonthViewDayTitle(this, _("Saturday"), wxDefaultPosition, wxDefaultSize);
SundayText = new XCCalendarMonthViewDayTitle(this, _("Sunday"), wxDefaultPosition, wxDefaultSize);
+
+ eventMenu = new XCEventMenu;
WindowSizer->Add(MondayText, 1, wxEXPAND|wxALL, 0);
WindowSizer->Add(TuesdayText, 1, wxEXPAND|wxALL, 0);
WindowSizer->Add(SaturdayText, 1, wxEXPAND|wxALL, 0);
WindowSizer->Add(SundayText, 1, wxEXPAND|wxALL, 0);
- ProcessGrid(grid);
+ ProcessGrid(grid, hideAccounts, hideCalendars);
+
+ // Setup the days.
+
+ // Setup the growable rows and columns.
+
+ WindowSizer->AddGrowableCol(0);
+ WindowSizer->AddGrowableCol(1);
+ WindowSizer->AddGrowableCol(2);
+ WindowSizer->AddGrowableCol(3);
+ WindowSizer->AddGrowableCol(4);
+ WindowSizer->AddGrowableCol(5);
+ WindowSizer->AddGrowableCol(6);
+ WindowSizer->SetFlexibleDirection( wxBOTH );
+ WindowSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ this->SetSizer(WindowSizer);
+ WindowSizer->Fit(this);
+ this->Layout();
+ this->SetBackgroundColour(wxColour(0,0,0));
+
+ Connect(ID_MONTHVIEWCLEARSELECTION, XCCALENDARMONTH_DESELECTOTHERENTRIES, wxCommandEventHandler(XCCalendarMonthView::DeselectOthersEvent));
+ Connect(ID_HIDEENTRIES, XCCALENDARMONTH_HIDEACCOUNTENTRIES, wxCommandEventHandler(XCCalendarMonthView::HideAccountEntries));
+ Connect(ID_SHOWENTRIES, XCCALENDARMONTH_SHOWACCOUNTENTRIES, wxCommandEventHandler(XCCalendarMonthView::ShowAccountEntries));
+ Connect(ID_HIDECALENDARENTRIES, XCCALENDARMONTH_HIDECALENDARENTRIES, wxCommandEventHandler(XCCalendarMonthView::HideCalendarEntries));
+ Connect(ID_SHOWCALENDARENTRIES, XCCALENDARMONTH_SHOWCALENDARENTRIES, wxCommandEventHandler(XCCalendarMonthView::ShowCalendarEntries));
+ Connect(ID_DELETECALENDARENTRIES, XCCALENDARMONTH_DELETECALENDARENTRIES, wxCommandEventHandler(XCCalendarMonthView::DeleteCalendarEntries));
+ Connect(ID_DISPLAYEVENTMENU, XCCALENDARMONTH_DISPLAYEVENTMENU, wxCommandEventHandler(XCCalendarMonthView::ShowEventMenu));
+ Connect(ID_DELETEENTRY, XCCALENDARMONTH_DELETEENTRY, wxCommandEventHandler(XCCalendarMonthView::DeleteCalendarEntry));
+ Connect(ID_ADDENTRY, XCCALENDARMONTH_ADDENTRY, wxCommandEventHandler(XCCalendarMonthView::AddCalendarEntry));
+ Connect(ID_UPDATEENTRY, XCCALENDARMONTH_UPDATEENTRY, wxCommandEventHandler(XCCalendarMonthView::UpdateCalendarEntry));
+ Connect(ID_UPDATECOLOUR, XCCALENDARMONTH_UPDATECALENDARCOLOUR, wxCommandEventHandler(XCCalendarMonthView::UpdateCalendarColour));
+
+}
+
+XCCalendarMonthView::XCCalendarMonthView(XCCalendarMonthViewGrid *grid, CalendarDataStorage *dataStorage, std::vector<int> *hideAccounts, std::vector<int> *hideCalendars)
+ : wxPanel(NULL, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL){
+
+ Connect(ID_MONTHVIEWCLEARSELECTION, XCCALENDARMONTH_DESELECTOTHERENTRIES, wxCommandEventHandler(XCCalendarMonthView::DeselectOthersEvent));
+
+ calendarStorage = dataStorage;
+
+ MondayText = new XCCalendarMonthViewDayTitle(this, _("Monday"), wxDefaultPosition, wxDefaultSize);
+ TuesdayText = new XCCalendarMonthViewDayTitle(this, _("Tuesday"), wxDefaultPosition, wxDefaultSize);
+ WednesdayText = new XCCalendarMonthViewDayTitle(this, _("Wednesday"), wxDefaultPosition, wxDefaultSize);
+ ThursdayText = new XCCalendarMonthViewDayTitle(this, _("Thursday"), wxDefaultPosition, wxDefaultSize);
+ FridayText = new XCCalendarMonthViewDayTitle(this, _("Friday"), wxDefaultPosition, wxDefaultSize);
+ SaturdayText = new XCCalendarMonthViewDayTitle(this, _("Saturday"), wxDefaultPosition, wxDefaultSize);
+ SundayText = new XCCalendarMonthViewDayTitle(this, _("Sunday"), wxDefaultPosition, wxDefaultSize);
+
+ WindowSizer->Add(MondayText, 1, wxEXPAND|wxALL, 0);
+ WindowSizer->Add(TuesdayText, 1, wxEXPAND|wxALL, 0);
+ WindowSizer->Add(WednesdayText, 1, wxEXPAND|wxALL, 0);
+ WindowSizer->Add(ThursdayText, 1, wxEXPAND|wxALL, 0);
+ WindowSizer->Add(FridayText, 1, wxEXPAND|wxALL, 0);
+ WindowSizer->Add(SaturdayText, 1, wxEXPAND|wxALL, 0);
+ WindowSizer->Add(SundayText, 1, wxEXPAND|wxALL, 0);
+
+ ProcessGrid(grid, hideAccounts, hideCalendars);
// Setup the days.
WindowSizer->AddGrowableCol(4);
WindowSizer->AddGrowableCol(5);
WindowSizer->AddGrowableCol(6);
- WindowSizer->AddGrowableRow(1);
- WindowSizer->AddGrowableRow(2);
- WindowSizer->AddGrowableRow(3);
- WindowSizer->AddGrowableRow(4);
- WindowSizer->AddGrowableRow(5);
WindowSizer->SetFlexibleDirection( wxBOTH );
WindowSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
}
-void XCCalendarMonthView::ProcessGrid(XCCalendarMonthViewGrid *grid){
+void XCCalendarMonthView::ProcessGrid(XCCalendarMonthViewGrid *grid, std::vector<int> *hideAccounts, std::vector<int> *hideCalendars){
// TODO: Delete the old calendar entries.
// Add the new calendar entries.
+ int Week = 0;
+
for (vector<XCCalendarMonthViewGridDayWeek>::iterator WeekIter = grid->WeekList.begin();
WeekIter != grid->WeekList.end(); WeekIter++){
-
+
+ Week++;
+
for (vector<XCCalendarMonthViewGridDayData>::iterator DayIter = (*WeekIter).DayList.begin();
DayIter != (*WeekIter).DayList.end(); DayIter++){
// Setup the control.
- CalendarDayItem->SetupControl((*DayIter).Day, (*DayIter).Month, (*DayIter).Year, (*DayIter).IsInMonth);
+ CalendarDayItem->SetupControl((*DayIter).Day, (*DayIter).Month, (*DayIter).Year, (*DayIter).IsInMonth, this, calendarStorage, hideAccounts, hideCalendars);
CalendarDayList.push_back(CalendarDayItem);
WindowSizer->Add(CalendarDayItem, 1, wxEXPAND, 5);
}
+ // Add the Growable Rows.
+
+ for (int WeekSeek = 0; WeekSeek < Week; WeekSeek++){
+
+ WindowSizer->AddGrowableRow((WeekSeek + 1));
+
+ }
+
}
void XCCalendarMonthView::Repaint(){
this->Refresh();
+}
+
+void XCCalendarMonthView::DeselectOthersEvent(wxCommandEvent &DeselectEvent){
+
+ for (vector<XCCalendarDay*>::iterator DayIter = CalendarDayList.begin();
+ DayIter != CalendarDayList.end(); DayIter++){
+
+ if (DeselectEvent.GetClientData() != (void*)(*DayIter)){
+
+ wxCommandEvent DeselectEvent(XCCALENDARDAY_DESELECTALLENTRIES);
+ DeselectEvent.SetId(ID_DESELECTALLITEMS);
+ wxPostEvent((*DayIter), DeselectEvent);
+
+ }
+
+ }
+
+}
+
+void XCCalendarMonthView::HideAccountEntries(wxCommandEvent &accountData){
+
+ for (vector<XCCalendarDay*>::iterator DayIter = CalendarDayList.begin();
+ DayIter != CalendarDayList.end(); DayIter++){
+
+ wxCommandEvent HideEvent(XCCALENDARDAY_HIDEACCOUNTENTRIES);
+ HideEvent.SetInt(accountData.GetInt());
+ HideEvent.SetId(ID_HIDEENTRIES);
+ wxPostEvent((*DayIter), HideEvent);
+
+ }
+
+}
+
+void XCCalendarMonthView::ShowAccountEntries(wxCommandEvent &accountData){
+
+ for (vector<XCCalendarDay*>::iterator DayIter = CalendarDayList.begin();
+ DayIter != CalendarDayList.end(); DayIter++){
+
+ wxCommandEvent ShowEvent(XCCALENDARDAY_SHOWACCOUNTENTRIES);
+ ShowEvent.SetInt(accountData.GetInt());
+ ShowEvent.SetId(ID_SHOWENTRIES);
+ wxPostEvent((*DayIter), ShowEvent);
+
+ }
+
+}
+
+void XCCalendarMonthView::HideCalendarEntries(wxCommandEvent &accountData){
+
+ for (vector<XCCalendarDay*>::iterator DayIter = CalendarDayList.begin();
+ DayIter != CalendarDayList.end(); DayIter++){
+
+ wxCommandEvent HideEvent(XCCALENDARDAY_HIDECALENDARENTRIES);
+ HideEvent.SetInt(accountData.GetInt());
+ HideEvent.SetId(ID_HIDECALENDARENTRIES);
+ wxPostEvent((*DayIter), HideEvent);
+
+ }
+
+}
+
+void XCCalendarMonthView::ShowCalendarEntries(wxCommandEvent &accountData){
+
+ for (vector<XCCalendarDay*>::iterator DayIter = CalendarDayList.begin();
+ DayIter != CalendarDayList.end(); DayIter++){
+
+ wxCommandEvent HideEvent(XCCALENDARDAY_SHOWCALENDARENTRIES);
+ HideEvent.SetInt(accountData.GetInt());
+ HideEvent.SetId(ID_SHOWCALENDARENTRIES);
+ wxPostEvent((*DayIter), HideEvent);
+
+ }
+
+}
+
+void XCCalendarMonthView::DeleteCalendarEntries(wxCommandEvent &calendarData){
+
+ for (vector<XCCalendarDay*>::iterator DayIter = CalendarDayList.begin();
+ DayIter != CalendarDayList.end(); DayIter++){
+
+ wxCommandEvent deleteEvent(XCCALENDARDAY_DELETECALENDARENTRIES);
+ deleteEvent.SetInt(calendarData.GetInt());
+ deleteEvent.SetId(ID_DELETECALENDARENTRIES);
+ wxPostEvent((*DayIter), deleteEvent);
+
+ }
+
+}
+
+void XCCalendarMonthView::DeleteCalendarEntry(wxCommandEvent &eventData){
+
+ for (vector<XCCalendarDay*>::iterator DayIter = CalendarDayList.begin();
+ DayIter != CalendarDayList.end(); DayIter++){
+
+ wxCommandEvent deleteEvent(XCCALENDARDAY_DELETEENTRY);
+ deleteEvent.SetInt(eventData.GetInt());
+ deleteEvent.SetId(ID_DELETEENTRY);
+ wxPostEvent((*DayIter), deleteEvent);
+
+ }
+
+}
+
+void XCCalendarMonthView::AddCalendarEntry(wxCommandEvent &eventData){
+
+ EventProperties *eventInfo = (EventProperties*)eventData.GetClientData();
+ bool foundDate = false;
+
+ for (vector<XCCalendarDay*>::iterator DayIter = CalendarDayList.begin();
+ DayIter != CalendarDayList.end(); DayIter++){
+
+ // Check if the date matches with the date in the day
+ // widget. If it does, add the widget.
+
+ if ((*DayIter)->GetCalendarYear() == eventInfo->eventYear &&
+ (*DayIter)->GetCalendarMonth() == (eventInfo->eventMonth + 1) &&
+ (*DayIter)->GetCalendarDay() == eventInfo->eventDay){
+
+ wxCommandEvent addEvent(XCCALENDARDAY_ADDENTRY);
+ addEvent.SetId(ID_ADDENTRY);
+ addEvent.SetClientData(eventInfo);
+ wxPostEvent((*DayIter), addEvent);
+ foundDate = true;
+ break;
+
+ }
+
+ }
+
+ if (foundDate == false){
+
+ delete eventInfo;
+ eventInfo = nullptr;
+
+ }
+
+}
+
+void XCCalendarMonthView::UpdateCalendarEntry(wxCommandEvent &eventData){
+
+ EventProperties *eventInfo = (EventProperties*)eventData.GetClientData();
+ bool foundDate = false;
+
+ for (vector<XCCalendarDay*>::iterator DayIter = CalendarDayList.begin();
+ DayIter != CalendarDayList.end(); DayIter++){
+
+ // Check if the date matches with the date in the day
+ // widget. If it does, update the widget.
+
+ if ((*DayIter)->GetCalendarYear() == eventInfo->eventYear &&
+ (*DayIter)->GetCalendarMonth() == (eventInfo->eventMonth + 1) &&
+ (*DayIter)->GetCalendarDay() == eventInfo->eventDay){
+
+ wxCommandEvent addEvent(XCCALENDARDAY_UPDATEENTRY);
+ addEvent.SetId(ID_UPDATEENTRY);
+ addEvent.SetClientData(eventInfo);
+ wxPostEvent((*DayIter), addEvent);
+ foundDate = true;
+ break;
+
+ }
+
+ }
+
+ if (foundDate == false){
+
+ delete eventInfo;
+ eventInfo = nullptr;
+
+ }
+
+}
+
+void XCCalendarMonthView::UpdateCalendarColour(wxCommandEvent &colourData){
+
+ ColourUpdateProperties *colourDataInfo = (ColourUpdateProperties*)colourData.GetClientData();
+
+ for (vector<XCCalendarDay*>::iterator DayIter = CalendarDayList.begin();
+ DayIter != CalendarDayList.end(); DayIter++){
+
+ // Check if the date matches with the date in the day
+ // widget. If it does, update the widget.
+
+ ColourUpdateProperties *colourDataPassInfo = colourDataInfo;
+
+ wxCommandEvent updateColour(XCCALENDARDAY_UPDATECALENDARCOLOUR);
+ updateColour.SetId(ID_UPDATECOLOUR);
+ updateColour.SetClientData(colourDataPassInfo);
+ wxPostEvent((*DayIter), updateColour);
+
+ }
+
+}
+
+void XCCalendarMonthView::ShowEventMenu(wxCommandEvent &eventData){
+
+ EventProperties *eventInfo = (EventProperties*)eventData.GetClientData();
+
+ eventMenu->SetEventID(eventInfo->eventID);
+ eventMenu->SetCalendarID(eventInfo->calendarID);
+ eventMenu->SetWindowPointer(this->GetParent()->GetParent());
+
+ this->PopupMenu(eventMenu, wxDefaultPosition);
+
+ delete eventInfo;
+ eventInfo = nullptr;
+
}
\ No newline at end of file