X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fwidgets%2FXCCalendarMonthView.cpp;h=bd297587f86081a9e5b6af55bcc7bc33c1763eda;hb=c5716d0f27f0f917282df9121aa97eab7a1bf6b8;hp=479f59c8c89461c2878bc0b7a605b8930f9abf7b;hpb=12c1ca8d2877104bd61b02ae72ef32314afeaa51;p=xestiacalendar%2F.git diff --git a/source/widgets/XCCalendarMonthView.cpp b/source/widgets/XCCalendarMonthView.cpp index 479f59c..bd29758 100644 --- a/source/widgets/XCCalendarMonthView.cpp +++ b/source/widgets/XCCalendarMonthView.cpp @@ -24,11 +24,9 @@ BEGIN_EVENT_TABLE(XCCalendarMonthView, wxPanel) EVT_PAINT(XCCalendarMonthView::PaintFrameEvent) END_EVENT_TABLE() -XCCalendarMonthView::XCCalendarMonthView(wxWindow *parent, const wxString& title, const wxPoint& pos, const wxSize& size, XCCalendarMonthViewGrid *grid, CalendarDataStorage *dataStorage) +XCCalendarMonthView::XCCalendarMonthView(wxWindow *parent, const wxString& title, const wxPoint& pos, const wxSize& size, XCCalendarMonthViewGrid *grid, CalendarDataStorage *dataStorage, std::vector *hideAccounts, std::vector *hideCalendars) : wxPanel(parent, wxID_ANY, pos, size, wxTAB_TRAVERSAL){ - Connect(ID_MONTHVIEWCLEARSELECTION, XCCALENDARMONTH_DESELECTOTHERENTRIES, wxCommandEventHandler(XCCalendarMonthView::DeselectOthersEvent)); - calendarStorage = dataStorage; MondayText = new XCCalendarMonthViewDayTitle(this, _("Monday"), wxDefaultPosition, wxDefaultSize); @@ -38,6 +36,8 @@ XCCalendarMonthView::XCCalendarMonthView(wxWindow *parent, const wxString& title 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); @@ -47,7 +47,7 @@ XCCalendarMonthView::XCCalendarMonthView(wxWindow *parent, const wxString& title WindowSizer->Add(SaturdayText, 1, wxEXPAND|wxALL, 0); WindowSizer->Add(SundayText, 1, wxEXPAND|wxALL, 0); - ProcessGrid(grid); + ProcessGrid(grid, hideAccounts, hideCalendars); // Setup the days. @@ -68,9 +68,21 @@ XCCalendarMonthView::XCCalendarMonthView(wxWindow *parent, const wxString& title 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) +XCCalendarMonthView::XCCalendarMonthView(XCCalendarMonthViewGrid *grid, CalendarDataStorage *dataStorage, std::vector *hideAccounts, std::vector *hideCalendars) : wxPanel(NULL, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL){ Connect(ID_MONTHVIEWCLEARSELECTION, XCCALENDARMONTH_DESELECTOTHERENTRIES, wxCommandEventHandler(XCCalendarMonthView::DeselectOthersEvent)); @@ -93,7 +105,7 @@ XCCalendarMonthView::XCCalendarMonthView(XCCalendarMonthViewGrid *grid, Calendar WindowSizer->Add(SaturdayText, 1, wxEXPAND|wxALL, 0); WindowSizer->Add(SundayText, 1, wxEXPAND|wxALL, 0); - ProcessGrid(grid); + ProcessGrid(grid, hideAccounts, hideCalendars); // Setup the days. @@ -122,7 +134,7 @@ XCCalendarMonthView::~XCCalendarMonthView(){ } -void XCCalendarMonthView::ProcessGrid(XCCalendarMonthViewGrid *grid){ +void XCCalendarMonthView::ProcessGrid(XCCalendarMonthViewGrid *grid, std::vector *hideAccounts, std::vector *hideCalendars){ // TODO: Delete the old calendar entries. @@ -144,7 +156,7 @@ void XCCalendarMonthView::ProcessGrid(XCCalendarMonthViewGrid *grid){ // Setup the control. - CalendarDayItem->SetupControl((*DayIter).Day, (*DayIter).Month, (*DayIter).Year, (*DayIter).IsInMonth, this, calendarStorage); + CalendarDayItem->SetupControl((*DayIter).Day, (*DayIter).Month, (*DayIter).Year, (*DayIter).IsInMonth, this, calendarStorage, hideAccounts, hideCalendars); CalendarDayList.push_back(CalendarDayItem); WindowSizer->Add(CalendarDayItem, 1, wxEXPAND, 5); @@ -203,4 +215,194 @@ void XCCalendarMonthView::DeselectOthersEvent(wxCommandEvent &DeselectEvent){ } +} + +void XCCalendarMonthView::HideAccountEntries(wxCommandEvent &accountData){ + + for (vector::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::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::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::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::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::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::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::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::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