Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
XCCalendarMonthView: Removed second constructor (not needed)
[xestiacalendar/.git] / source / widgets / XCCalendarMonthView.cpp
1 // XCCalendarMonthView.cpp - Xestia Calendar XCCalendarMonthView widget class.
2 //
3 // (c) 2016 Xestia Software Development.
4 //
5 // This file is part of Xestia Calendar.
6 //
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.
10 //
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.
15 //
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 "XCCalendarMonthView.h"
21 using namespace std;
23 wxDEFINE_EVENT(XCCALENDARMONTH_DESELECTOTHERENTRIES, wxCommandEvent);
24 wxDEFINE_EVENT(XCCALENDARMONTH_HIDEACCOUNTENTRIES, wxCommandEvent);
25 wxDEFINE_EVENT(XCCALENDARMONTH_SHOWACCOUNTENTRIES, wxCommandEvent);
26 wxDEFINE_EVENT(XCCALENDARMONTH_HIDECALENDARENTRIES, wxCommandEvent);
27 wxDEFINE_EVENT(XCCALENDARMONTH_SHOWCALENDARENTRIES, wxCommandEvent);
28 wxDEFINE_EVENT(XCCALENDARMONTH_DELETECALENDARENTRIES, wxCommandEvent);
29 wxDEFINE_EVENT(XCCALENDARMONTH_DISPLAYEVENTMENU, wxCommandEvent);
30 wxDEFINE_EVENT(XCCALENDARMONTH_DELETEENTRY, wxCommandEvent);
31 wxDEFINE_EVENT(XCCALENDARMONTH_ADDENTRY, wxCommandEvent);
32 wxDEFINE_EVENT(XCCALENDARMONTH_UPDATEENTRY, wxCommandEvent);
33 wxDEFINE_EVENT(XCCALENDARMONTH_UPDATECALENDARCOLOUR, wxCommandEvent);
35 BEGIN_EVENT_TABLE(XCCalendarMonthView, wxPanel)
36 END_EVENT_TABLE()
38 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)
39         : wxPanel(parent, wxID_ANY, pos, size, wxTAB_TRAVERSAL){
40         calendarStorage = dataStorage;
41                 
42         mondayText = new XCCalendarMonthViewDayTitle(this, _("Monday"), wxDefaultPosition, wxDefaultSize);
43         tuesdayText = new XCCalendarMonthViewDayTitle(this, _("Tuesday"), wxDefaultPosition, wxDefaultSize);
44         wednesdayText = new XCCalendarMonthViewDayTitle(this, _("Wednesday"), wxDefaultPosition, wxDefaultSize);
45         thursdayText = new XCCalendarMonthViewDayTitle(this, _("Thursday"), wxDefaultPosition, wxDefaultSize);
46         fridayText = new XCCalendarMonthViewDayTitle(this, _("Friday"), wxDefaultPosition, wxDefaultSize);
47         saturdayText = new XCCalendarMonthViewDayTitle(this, _("Saturday"), wxDefaultPosition, wxDefaultSize);
48         sundayText = new XCCalendarMonthViewDayTitle(this, _("Sunday"), wxDefaultPosition, wxDefaultSize);
49                 
50         eventMenu = new XCEventMenu;
51         
52         windowSizer->Add(mondayText, 1, wxEXPAND|wxALL, 0);
53         windowSizer->Add(tuesdayText, 1, wxEXPAND|wxALL, 0);
54         windowSizer->Add(wednesdayText, 1, wxEXPAND|wxALL, 0);
55         windowSizer->Add(thursdayText, 1, wxEXPAND|wxALL, 0);
56         windowSizer->Add(fridayText, 1, wxEXPAND|wxALL, 0);
57         windowSizer->Add(saturdayText, 1, wxEXPAND|wxALL, 0);   
58         windowSizer->Add(sundayText, 1, wxEXPAND|wxALL, 0);
59         
60         ProcessGrid(grid, hideAccounts, hideCalendars);
61         
62         // Setup the days.
63         
64         // Setup the growable rows and columns.
65         
66         windowSizer->AddGrowableCol(0);
67         windowSizer->AddGrowableCol(1);
68         windowSizer->AddGrowableCol(2);
69         windowSizer->AddGrowableCol(3);
70         windowSizer->AddGrowableCol(4);
71         windowSizer->AddGrowableCol(5); 
72         windowSizer->AddGrowableCol(6);
73         windowSizer->SetFlexibleDirection( wxBOTH );
74         windowSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
75         
76         this->SetSizer(windowSizer);
77         windowSizer->Fit(this);
78         this->Layout();
79         this->SetBackgroundColour(wxColour(0,0,0));
80         
81         // Bind events to the control.
83         Bind(XCCALENDARMONTH_DESELECTOTHERENTRIES, &XCCalendarMonthView::DeselectOthersEvent, this, ID_MONTHVIEWCLEARSELECTION);
84         Bind(XCCALENDARMONTH_HIDEACCOUNTENTRIES, &XCCalendarMonthView::HideAccountEntries, this, ID_HIDEENTRIES);
85         Bind(XCCALENDARMONTH_SHOWACCOUNTENTRIES, &XCCalendarMonthView::ShowAccountEntries, this, ID_SHOWENTRIES);
86         Bind(XCCALENDARMONTH_HIDECALENDARENTRIES, &XCCalendarMonthView::HideCalendarEntries, this, ID_HIDECALENDARENTRIES);
87         Bind(XCCALENDARMONTH_SHOWCALENDARENTRIES, &XCCalendarMonthView::ShowCalendarEntries, this, ID_SHOWCALENDARENTRIES);
88         Bind(XCCALENDARMONTH_DELETECALENDARENTRIES, &XCCalendarMonthView::DeleteCalendarEntries, this, ID_DELETECALENDARENTRIES);
89         Bind(XCCALENDARMONTH_DISPLAYEVENTMENU, &XCCalendarMonthView::ShowEventMenu, this, ID_DISPLAYEVENTMENU);
90         Bind(XCCALENDARMONTH_DELETEENTRY, &XCCalendarMonthView::DeleteCalendarEntry, this, ID_DELETEENTRY);
91         Bind(XCCALENDARMONTH_ADDENTRY, &XCCalendarMonthView::AddCalendarEntry, this, ID_ADDENTRY);
92         Bind(XCCALENDARMONTH_UPDATEENTRY, &XCCalendarMonthView::UpdateCalendarEntry, this, ID_UPDATEENTRY);
93         Bind(XCCALENDARMONTH_UPDATECALENDARCOLOUR, &XCCalendarMonthView::UpdateCalendarColour, this, ID_UPDATECOLOUR);
94 }
96 XCCalendarMonthView::~XCCalendarMonthView(){
97         
98         delete mondayText;
99         delete tuesdayText;
100         delete wednesdayText;
101         delete thursdayText;
102         delete fridayText;
103         delete saturdayText;
104         delete sundayText;
105         
106         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
107                 dayIter != calendarDayList.end(); dayIter++){
108                         
109                 delete ((*dayIter));
110                         
111         }
112         
115 void XCCalendarMonthView::ProcessGrid(XCCalendarMonthViewGrid *grid, std::vector<int> *hideAccounts, std::vector<int> *hideCalendars){
116         
117         // TODO: Delete the old calendar entries.
118         
119         // Add the new calendar entries.
120         
121         int week = 0;
122         
123         for (vector<XCCalendarMonthViewGridDayWeek>::iterator weekIter = grid->weekList.begin();
124                 weekIter != grid->weekList.end(); weekIter++){
125                         
126                 week++;
127                         
128                 for (vector<XCCalendarMonthViewGridDayData>::iterator dayIter = (*weekIter).dayList.begin();
129                         dayIter != (*weekIter).dayList.end(); dayIter++){
130                                 
131                         // Add Calendar entries.
132                                 
133                         XCCalendarDay *calendarDayItem = new XCCalendarDay(this, "XCCalendarMonthView Test", wxPoint(50, 50), wxSize(100,100));
134                         
135                         // Setup the control.
136                                 
137                         calendarDayItem->SetupControl((*dayIter).day, (*dayIter).month, (*dayIter).year, (*dayIter).isInMonth, this, calendarStorage, hideAccounts, hideCalendars);
138                                 
139                         calendarDayList.push_back(calendarDayItem);
140                         windowSizer->Add(calendarDayItem, 1, wxEXPAND, 5);
141                                 
142                 }
143                         
144         }
145         
146         // Add the Growable Rows.
147         
148         for (int weekSeek = 0; weekSeek < week; weekSeek++){
149                 
150                 windowSizer->AddGrowableRow((weekSeek + 1));
151                 
152         }
153         
156 void XCCalendarMonthView::ResizeFrameEvent(wxSizeEvent &SizeEvent){
158         // TODO: Check if window size is less than 120 pixels and if it is,
159         // switch to the small block mode.
160         
161         // Refresh the window.
162         
163         this->Refresh();
164         
167 void XCCalendarMonthView::DeselectOthersEvent(wxCommandEvent &deselectEvent){
168         
169         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
170                 dayIter != calendarDayList.end(); dayIter++){
171                         
172                 if (deselectEvent.GetClientData() != (void*)(*dayIter)){
173                         
174                         wxCommandEvent deselectEvent(XCCALENDARDAY_DESELECTALLENTRIES);
175                         deselectEvent.SetId(ID_DESELECTALLITEMS);
176                         wxPostEvent((*dayIter), deselectEvent);
177                         
178                 }
179                         
180         }
181         
184 void XCCalendarMonthView::HideAccountEntries(wxCommandEvent &accountData){
185         
186         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
187                 dayIter != calendarDayList.end(); dayIter++){
188                         
189                 wxCommandEvent hideEvent(XCCALENDARDAY_HIDEACCOUNTENTRIES);
190                 hideEvent.SetInt(accountData.GetInt());
191                 hideEvent.SetId(ID_HIDEENTRIES);
192                 wxPostEvent((*dayIter), hideEvent);
193                         
194         }
195         
198 void XCCalendarMonthView::ShowAccountEntries(wxCommandEvent &accountData){
199         
200         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
201                 dayIter != calendarDayList.end(); dayIter++){
202                         
203                 wxCommandEvent showEvent(XCCALENDARDAY_SHOWACCOUNTENTRIES);
204                 showEvent.SetInt(accountData.GetInt());
205                 showEvent.SetId(ID_SHOWENTRIES);
206                 wxPostEvent((*dayIter), showEvent);
207                         
208         }
209         
212 void XCCalendarMonthView::HideCalendarEntries(wxCommandEvent &accountData){
213         
214         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
215                 dayIter != calendarDayList.end(); dayIter++){
216                         
217                 wxCommandEvent hideEvent(XCCALENDARDAY_HIDECALENDARENTRIES);
218                 hideEvent.SetInt(accountData.GetInt());
219                 hideEvent.SetId(ID_HIDECALENDARENTRIES);
220                 wxPostEvent((*dayIter), hideEvent);
221                         
222         }
223         
226 void XCCalendarMonthView::ShowCalendarEntries(wxCommandEvent &accountData){
227         
228         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
229                 dayIter != calendarDayList.end(); dayIter++){
230                         
231                 wxCommandEvent hideEvent(XCCALENDARDAY_SHOWCALENDARENTRIES);
232                 hideEvent.SetInt(accountData.GetInt());
233                 hideEvent.SetId(ID_SHOWCALENDARENTRIES);
234                 wxPostEvent((*dayIter), hideEvent);
235                         
236         }
237         
240 void XCCalendarMonthView::DeleteCalendarEntries(wxCommandEvent &calendarData){
241         
242         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
243                 dayIter != calendarDayList.end(); dayIter++){
245                 wxCommandEvent deleteEvent(XCCALENDARDAY_DELETECALENDARENTRIES);
246                 deleteEvent.SetInt(calendarData.GetInt());
247                 deleteEvent.SetId(ID_DELETECALENDARENTRIES);
248                 wxPostEvent((*dayIter), deleteEvent);
249                         
250         }
251         
254 void XCCalendarMonthView::DeleteCalendarEntry(wxCommandEvent &eventData){
255         
256         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
257                 dayIter != calendarDayList.end(); dayIter++){
259                 wxCommandEvent deleteEvent(XCCALENDARDAY_DELETEENTRY);
260                 deleteEvent.SetInt(eventData.GetInt());
261                 deleteEvent.SetId(ID_DELETEENTRY);
262                 wxPostEvent((*dayIter), deleteEvent);
263                         
264         }       
265         
268 void XCCalendarMonthView::AddCalendarEntry(wxCommandEvent &eventData){
269         
270         EventProperties *eventInfo = (EventProperties*)eventData.GetClientData();
271         bool foundDate = false;
272         
273         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
274                 dayIter != calendarDayList.end(); dayIter++){
275                         
276                 // Check if the date matches with the date in the day
277                 // widget. If it does, add the widget.
278                         
279                 if ((*dayIter)->GetCalendarYear() == eventInfo->eventYear &&
280                         (*dayIter)->GetCalendarMonth() == (eventInfo->eventMonth + 1) &&
281                         (*dayIter)->GetCalendarDay() == eventInfo->eventDay){
282                         
283                         wxCommandEvent addEvent(XCCALENDARDAY_ADDENTRY);
284                         addEvent.SetId(ID_ADDENTRY);
285                         addEvent.SetClientData(eventInfo);
286                         wxPostEvent((*dayIter), addEvent);
287                         foundDate = true;
288                         break;
289                         
290                 }
291                         
292         }
293         
294         if (foundDate == false){
295                 
296                 delete eventInfo;
297                 eventInfo = nullptr;
298                 
299         }
300         
303 void XCCalendarMonthView::UpdateCalendarEntry(wxCommandEvent &eventData){
304         
305         EventProperties *eventInfo = (EventProperties*)eventData.GetClientData();
306         bool foundDate = false;
307         
308         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
309                 dayIter != calendarDayList.end(); dayIter++){
310         
311                 wxCommandEvent addEvent(XCCALENDARDAY_DELETEENTRY);
312                 addEvent.SetId(ID_DELETEENTRY);
313                 addEvent.SetInt(eventInfo->eventID);
314                 wxPostEvent((*dayIter), addEvent);
315                         
316         }
317         
318         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
319                 dayIter != calendarDayList.end(); dayIter++){
320                         
321                 // Check if the date matches with the date in the day
322                 // widget. If it does, update the widget.
323                         
324                 if ((*dayIter)->GetCalendarYear() == eventInfo->eventYear &&
325                         (*dayIter)->GetCalendarMonth() == (eventInfo->eventMonth + 1) &&
326                         (*dayIter)->GetCalendarDay() == eventInfo->eventDay){
327                         
328                         wxCommandEvent addEvent(XCCALENDARDAY_ADDENTRY);
329                         addEvent.SetId(ID_ADDENTRY);
330                         addEvent.SetClientData(eventInfo);
331                         wxPostEvent((*dayIter), addEvent);
332                         foundDate = true;
333                         break;
334                         
335                 }
336                         
337         }
338         
339         if (foundDate == false){
340                 
341                 delete eventInfo;
342                 eventInfo = nullptr;
343                 
344         }
345         
348 void XCCalendarMonthView::UpdateCalendarColour(wxCommandEvent &colourData){
349         
350         ColourUpdateProperties *colourDataInfo = (ColourUpdateProperties*)colourData.GetClientData();
351         
352         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
353                 dayIter != calendarDayList.end(); dayIter++){
354                         
355                 // Check if the date matches with the date in the day
356                 // widget. If it does, update the widget.
358                 ColourUpdateProperties *colourDataPassInfo = colourDataInfo;
359                         
360                 wxCommandEvent updateColour(XCCALENDARDAY_UPDATECALENDARCOLOUR);
361                 updateColour.SetId(ID_UPDATECOLOUR);
362                 updateColour.SetClientData(colourDataPassInfo);
363                 wxPostEvent((*dayIter), updateColour);
364                         
365         }
366         
369 void XCCalendarMonthView::ShowEventMenu(wxCommandEvent &eventData){
370         
371         EventProperties *eventInfo = (EventProperties*)eventData.GetClientData();
372         
373         eventMenu->SetEventID(eventInfo->eventID);
374         eventMenu->SetCalendarID(eventInfo->calendarID);
375         eventMenu->SetWindowPointer(this->GetParent()->GetParent());
376         
377         this->PopupMenu(eventMenu, wxDefaultPosition);
378         
379         delete eventInfo;
380         eventInfo = nullptr;
381         
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy