1 // XCCalendarCtrl.cpp - Xestia Calendar XCCalendarCtrl widget class.
3 // (c) 2016 Xestia Software Development.
5 // This file is part of Xestia Calendar.
7 // Xestia Address Book is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by the
9 // Free Software Foundation, version 3 of the license.
11 // Xestia Address Book is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with Xestia Calendar. If not, see <http://www.gnu.org/licenses/>
19 #include "XCCalendarCtrl.h"
21 wxDEFINE_EVENT(XCCALENDARCTRL_CHANGEGRID, wxCommandEvent);
22 wxDEFINE_EVENT(XCCALENDARCTRL_HIDEACCOUNTENTRIES, wxCommandEvent);
23 wxDEFINE_EVENT(XCCALENDARCTRL_SHOWACCOUNTENTRIES, wxCommandEvent);
24 wxDEFINE_EVENT(XCCALENDARCTRL_HIDECALENDARENTRIES, wxCommandEvent);
25 wxDEFINE_EVENT(XCCALENDARCTRL_SHOWCALENDARENTRIES, wxCommandEvent);
26 wxDEFINE_EVENT(XCCALENDARCTRL_DELETECALENDARENTRIES, wxCommandEvent);
27 wxDEFINE_EVENT(XCCALENDARCTRL_ADDENTRY, wxCommandEvent);
28 wxDEFINE_EVENT(XCCALENDARCTRL_UPDATEENTRY, wxCommandEvent);
29 wxDEFINE_EVENT(XCCALENDARCTRL_UPDATECALENDARCOLOUR, wxCommandEvent);
30 wxDEFINE_EVENT(XCCALENDARCTRL_DELETEENTRY, wxCommandEvent);
34 XCCalendarCtrl::XCCalendarCtrl(wxWindow *parent, CalendarDataStorage *dataStorage)
35 : wxPanel (parent, wxID_ANY, wxDefaultPosition, wxDefaultSize){
36 // Setup the pointers.
38 calendarStorage = dataStorage;
40 // Setup the main sizer.
42 szrMain = new wxFlexGridSizer(2, 1, 0, 0);
43 szrMain->AddGrowableCol(0);
44 szrMain->AddGrowableRow(1);
45 szrMain->SetFlexibleDirection(wxBOTH);
46 szrMain->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
47 this->SetSizer(szrMain);
49 // Setup the top menu.
51 manipulatorCtrl = new XCCalendarManipulator(this, "XCCalendarManipulator Test", wxDefaultPosition, wxDefaultSize, calendarStorage);
53 // Setup the month view grid.
55 wxDateTime dtNow = wxDateTime::Now();
56 int currentMonth = ((int)dtNow.GetMonth() + 1);
57 int currentYear = dtNow.GetYear();
59 XCCalendarMonthViewGrid CurrentMonthGrid = GenerateMonthGrid(currentMonth, currentYear);
60 szrMain->Add(manipulatorCtrl, 1, wxEXPAND, 5);
62 // Get the list of hidden accounts and calendars.
64 vector<int> hideAccountsList = manipulatorCtrl->GetHiddenAccountsList();
65 vector<int> hideCalendarsList = manipulatorCtrl->GetHiddenCalendarsList();
67 monthViewCtrl = new XCCalendarMonthView(this, "XCCalendarMonthView Test", wxDefaultPosition, wxDefaultSize, &CurrentMonthGrid, calendarStorage, &hideAccountsList, &hideCalendarsList);
68 szrMain->Add(monthViewCtrl, 1, wxEXPAND, 5);
70 // Bind events to the control.
72 Bind(XCCALENDARCTRL_CHANGEGRID, &XCCalendarCtrl::UpdateGrid, this, ID_CHANGEGRID);
73 Bind(XCCALENDARCTRL_HIDEACCOUNTENTRIES, &XCCalendarCtrl::HideAccountEntries, this, ID_HIDEENTRIES);
74 Bind(XCCALENDARCTRL_SHOWACCOUNTENTRIES, &XCCalendarCtrl::ShowAccountEntries, this, ID_SHOWENTRIES);
75 Bind(XCCALENDARCTRL_HIDECALENDARENTRIES, &XCCalendarCtrl::HideCalendarEntries, this, ID_HIDECALENDARENTRIES);
76 Bind(XCCALENDARCTRL_SHOWCALENDARENTRIES, &XCCalendarCtrl::ShowCalendarEntries, this, ID_SHOWCALENDARENTRIES);
77 Bind(XCCALENDARCTRL_DELETECALENDARENTRIES, &XCCalendarCtrl::DeleteCalendarEntries, this, ID_DELETECALENDARENTRIES);
78 Bind(XCCALENDARCTRL_DELETEENTRY, &XCCalendarCtrl::DeleteCalendarEntry, this, ID_DELETEENTRY);
79 Bind(XCCALENDARCTRL_ADDENTRY, &XCCalendarCtrl::AddCalendarEntry, this, ID_ADDENTRY);
80 Bind(XCCALENDARCTRL_UPDATEENTRY, &XCCalendarCtrl::UpdateCalendarEntry, this, ID_UPDATEENTRY);
81 Bind(XCCALENDARCTRL_DELETEENTRY, &XCCalendarCtrl::DeleteCalendarEntry, this, ID_DELETEENTRY);
82 Bind(XCCALENDARCTRL_UPDATECALENDARCOLOUR, &XCCalendarCtrl::UpdateCalendarColour, this, ID_UPDATECOLOUR);
85 XCCalendarCtrl::~XCCalendarCtrl(){
87 // Destory the controls in the XCCalendarCtrl class.
91 void XCCalendarCtrl::UpdateGrid(wxCommandEvent &event){
93 XCCalendarMonthView *oldGrid = nullptr;
97 oldGrid = monthViewCtrl;
99 // Get the list of hidden accounts and calendars.
101 vector<int> hideAccountsList = manipulatorCtrl->GetHiddenAccountsList();
102 vector<int> hideCalendarsList = manipulatorCtrl->GetHiddenCalendarsList();
104 // Create a new grid.
106 XCCalendarMonthViewGrid NewGrid = GenerateMonthGrid(manipulatorCtrl->GetMonth(), manipulatorCtrl->GetYear());
107 monthViewCtrl = new XCCalendarMonthView(this, _(""), wxDefaultPosition, wxDefaultSize, &NewGrid, calendarStorage, &hideAccountsList, &hideCalendarsList);
109 // Detach the old grid and attach the new one.
112 oldGrid->Show(false);
113 szrMain->Add(monthViewCtrl, 1, wxEXPAND, 5);
116 // Delete the old grid.
123 void XCCalendarCtrl::HideAccountEntries(wxCommandEvent &accountData){
125 // Get the list of calendar IDs for the account and go through
126 // the list of entries in each day control.
128 wxCommandEvent event(XCCALENDARMONTH_HIDEACCOUNTENTRIES);
129 event.SetInt(accountData.GetInt());
130 event.SetId(ID_HIDEENTRIES);
131 wxPostEvent(monthViewCtrl, event);
135 void XCCalendarCtrl::ShowAccountEntries(wxCommandEvent &accountData){
137 // Get the list of calendar IDs for the account and go through
138 // the list of entries in each day control.
140 wxCommandEvent event(XCCALENDARMONTH_SHOWACCOUNTENTRIES);
141 event.SetInt(accountData.GetInt());
142 event.SetId(ID_SHOWENTRIES);
143 wxPostEvent(monthViewCtrl, event);
147 void XCCalendarCtrl::HideCalendarEntries(wxCommandEvent &calendarData){
149 // Get the list of calendar IDs for the account and go through
150 // the list of entries in each day control.
152 wxCommandEvent event(XCCALENDARMONTH_HIDECALENDARENTRIES);
153 event.SetInt(calendarData.GetInt());
154 event.SetId(ID_HIDECALENDARENTRIES);
155 wxPostEvent(monthViewCtrl, event);
159 void XCCalendarCtrl::ShowCalendarEntries(wxCommandEvent &calendarData){
161 // Get the list of calendar IDs for the account and go through
162 // the list of entries in each day control.
164 wxCommandEvent event(XCCALENDARMONTH_SHOWCALENDARENTRIES);
165 event.SetInt(calendarData.GetInt());
166 event.SetId(ID_SHOWCALENDARENTRIES);
167 wxPostEvent(monthViewCtrl, event);
171 void XCCalendarCtrl::DeleteCalendarEntries(wxCommandEvent &calendarData){
173 wxCommandEvent event(XCCALENDARMONTH_DELETECALENDARENTRIES);
174 event.SetInt(calendarData.GetInt());
175 event.SetId(ID_DELETECALENDARENTRIES);
176 wxPostEvent(monthViewCtrl, event);
180 void XCCalendarCtrl::DeleteCalendarEntry(wxCommandEvent &eventData){
182 wxCommandEvent event(XCCALENDARMONTH_DELETEENTRY);
183 event.SetInt(eventData.GetInt());
184 event.SetId(ID_DELETEENTRY);
185 wxPostEvent(monthViewCtrl, event);
189 void XCCalendarCtrl::AddCalendarEntry(wxCommandEvent &eventData){
191 EventProperties *eventInfo = (EventProperties*)eventData.GetClientData();
193 eventInfo->hideAccountsList = manipulatorCtrl->GetHiddenAccountsList();
194 eventInfo->hideCalendarsList = manipulatorCtrl->GetHiddenCalendarsList();
196 wxCommandEvent addEvent(XCCALENDARMONTH_ADDENTRY);
197 addEvent.SetId(ID_ADDENTRY);
198 addEvent.SetClientData(eventInfo);
199 wxPostEvent(monthViewCtrl, addEvent);
203 void XCCalendarCtrl::UpdateCalendarEntry(wxCommandEvent &eventData){
205 EventProperties *eventInfo = (EventProperties*)eventData.GetClientData();
207 wxCommandEvent addEvent(XCCALENDARMONTH_UPDATEENTRY);
208 addEvent.SetId(ID_UPDATEENTRY);
209 addEvent.SetClientData(eventInfo);
210 wxPostEvent(monthViewCtrl, addEvent);
214 void XCCalendarCtrl::UpdateCalendarColour(wxCommandEvent &colourData){
216 ColourUpdateProperties *colourInfo = (ColourUpdateProperties*)colourData.GetClientData();
218 wxCommandEvent colourEvent(XCCALENDARMONTH_UPDATECALENDARCOLOUR);
219 colourEvent.SetId(ID_UPDATECOLOUR);
220 colourEvent.SetClientData(colourInfo);
221 wxPostEvent(monthViewCtrl, colourEvent);