Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
XCCalendar widgets: Removed painting of controls
[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(XCCalendarMonthViewGrid *grid, CalendarDataStorage *dataStorage, std::vector<int> *hideAccounts, std::vector<int> *hideCalendars)
97         : wxPanel(NULL, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL){
98         
99         Connect(ID_MONTHVIEWCLEARSELECTION, XCCALENDARMONTH_DESELECTOTHERENTRIES, wxCommandEventHandler(XCCalendarMonthView::DeselectOthersEvent));
100         
101         calendarStorage = dataStorage;
102                 
103         mondayText = new XCCalendarMonthViewDayTitle(this, _("Monday"), wxDefaultPosition, wxDefaultSize);
104         tuesdayText = new XCCalendarMonthViewDayTitle(this, _("Tuesday"), wxDefaultPosition, wxDefaultSize);
105         wednesdayText = new XCCalendarMonthViewDayTitle(this, _("Wednesday"), wxDefaultPosition, wxDefaultSize);
106         thursdayText = new XCCalendarMonthViewDayTitle(this, _("Thursday"), wxDefaultPosition, wxDefaultSize);
107         fridayText = new XCCalendarMonthViewDayTitle(this, _("Friday"), wxDefaultPosition, wxDefaultSize);
108         saturdayText = new XCCalendarMonthViewDayTitle(this, _("Saturday"), wxDefaultPosition, wxDefaultSize);
109         sundayText = new XCCalendarMonthViewDayTitle(this, _("Sunday"), wxDefaultPosition, wxDefaultSize);
110         
111         windowSizer->Add(mondayText, 1, wxEXPAND|wxALL, 0);
112         windowSizer->Add(tuesdayText, 1, wxEXPAND|wxALL, 0);
113         windowSizer->Add(wednesdayText, 1, wxEXPAND|wxALL, 0);
114         windowSizer->Add(thursdayText, 1, wxEXPAND|wxALL, 0);
115         windowSizer->Add(fridayText, 1, wxEXPAND|wxALL, 0);
116         windowSizer->Add(saturdayText, 1, wxEXPAND|wxALL, 0);   
117         windowSizer->Add(sundayText, 1, wxEXPAND|wxALL, 0);
118         
119         ProcessGrid(grid, hideAccounts, hideCalendars);
120         
121         // Setup the days.
122         
123         // Setup the growable rows and columns.
124         
125         windowSizer->AddGrowableCol(0);
126         windowSizer->AddGrowableCol(1);
127         windowSizer->AddGrowableCol(2);
128         windowSizer->AddGrowableCol(3);
129         windowSizer->AddGrowableCol(4);
130         windowSizer->AddGrowableCol(5); 
131         windowSizer->AddGrowableCol(6);
132         windowSizer->SetFlexibleDirection( wxBOTH );
133         windowSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
134         
135         this->SetSizer(windowSizer);
136         windowSizer->Fit(this);
137         this->Layout();
138         this->SetBackgroundColour(wxColour(0,0,0));
139         
142 XCCalendarMonthView::~XCCalendarMonthView(){
143         
144         delete mondayText;
145         delete tuesdayText;
146         delete wednesdayText;
147         delete thursdayText;
148         delete fridayText;
149         delete saturdayText;
150         delete sundayText;
151         
152         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
153                 dayIter != calendarDayList.end(); dayIter++){
154                         
155                 delete ((*dayIter));
156                         
157         }
158         
161 void XCCalendarMonthView::ProcessGrid(XCCalendarMonthViewGrid *grid, std::vector<int> *hideAccounts, std::vector<int> *hideCalendars){
162         
163         // TODO: Delete the old calendar entries.
164         
165         // Add the new calendar entries.
166         
167         int week = 0;
168         
169         for (vector<XCCalendarMonthViewGridDayWeek>::iterator weekIter = grid->weekList.begin();
170                 weekIter != grid->weekList.end(); weekIter++){
171                         
172                 week++;
173                         
174                 for (vector<XCCalendarMonthViewGridDayData>::iterator dayIter = (*weekIter).dayList.begin();
175                         dayIter != (*weekIter).dayList.end(); dayIter++){
176                                 
177                         // Add Calendar entries.
178                                 
179                         XCCalendarDay *calendarDayItem = new XCCalendarDay(this, "XCCalendarMonthView Test", wxPoint(50, 50), wxSize(100,100));
180                         
181                         // Setup the control.
182                                 
183                         calendarDayItem->SetupControl((*dayIter).day, (*dayIter).month, (*dayIter).year, (*dayIter).isInMonth, this, calendarStorage, hideAccounts, hideCalendars);
184                                 
185                         calendarDayList.push_back(calendarDayItem);
186                         windowSizer->Add(calendarDayItem, 1, wxEXPAND, 5);
187                                 
188                 }
189                         
190         }
191         
192         // Add the Growable Rows.
193         
194         for (int weekSeek = 0; weekSeek < week; weekSeek++){
195                 
196                 windowSizer->AddGrowableRow((weekSeek + 1));
197                 
198         }
199         
202 void XCCalendarMonthView::ResizeFrameEvent(wxSizeEvent &SizeEvent){
204         // TODO: Check if window size is less than 120 pixels and if it is,
205         // switch to the small block mode.
206         
207         // Refresh the window.
208         
209         this->Refresh();
210         
213 void XCCalendarMonthView::DeselectOthersEvent(wxCommandEvent &deselectEvent){
214         
215         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
216                 dayIter != calendarDayList.end(); dayIter++){
217                         
218                 if (deselectEvent.GetClientData() != (void*)(*dayIter)){
219                         
220                         wxCommandEvent deselectEvent(XCCALENDARDAY_DESELECTALLENTRIES);
221                         deselectEvent.SetId(ID_DESELECTALLITEMS);
222                         wxPostEvent((*dayIter), deselectEvent);
223                         
224                 }
225                         
226         }
227         
230 void XCCalendarMonthView::HideAccountEntries(wxCommandEvent &accountData){
231         
232         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
233                 dayIter != calendarDayList.end(); dayIter++){
234                         
235                 wxCommandEvent hideEvent(XCCALENDARDAY_HIDEACCOUNTENTRIES);
236                 hideEvent.SetInt(accountData.GetInt());
237                 hideEvent.SetId(ID_HIDEENTRIES);
238                 wxPostEvent((*dayIter), hideEvent);
239                         
240         }
241         
244 void XCCalendarMonthView::ShowAccountEntries(wxCommandEvent &accountData){
245         
246         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
247                 dayIter != calendarDayList.end(); dayIter++){
248                         
249                 wxCommandEvent showEvent(XCCALENDARDAY_SHOWACCOUNTENTRIES);
250                 showEvent.SetInt(accountData.GetInt());
251                 showEvent.SetId(ID_SHOWENTRIES);
252                 wxPostEvent((*dayIter), showEvent);
253                         
254         }
255         
258 void XCCalendarMonthView::HideCalendarEntries(wxCommandEvent &accountData){
259         
260         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
261                 dayIter != calendarDayList.end(); dayIter++){
262                         
263                 wxCommandEvent hideEvent(XCCALENDARDAY_HIDECALENDARENTRIES);
264                 hideEvent.SetInt(accountData.GetInt());
265                 hideEvent.SetId(ID_HIDECALENDARENTRIES);
266                 wxPostEvent((*dayIter), hideEvent);
267                         
268         }
269         
272 void XCCalendarMonthView::ShowCalendarEntries(wxCommandEvent &accountData){
273         
274         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
275                 dayIter != calendarDayList.end(); dayIter++){
276                         
277                 wxCommandEvent hideEvent(XCCALENDARDAY_SHOWCALENDARENTRIES);
278                 hideEvent.SetInt(accountData.GetInt());
279                 hideEvent.SetId(ID_SHOWCALENDARENTRIES);
280                 wxPostEvent((*dayIter), hideEvent);
281                         
282         }
283         
286 void XCCalendarMonthView::DeleteCalendarEntries(wxCommandEvent &calendarData){
287         
288         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
289                 dayIter != calendarDayList.end(); dayIter++){
291                 wxCommandEvent deleteEvent(XCCALENDARDAY_DELETECALENDARENTRIES);
292                 deleteEvent.SetInt(calendarData.GetInt());
293                 deleteEvent.SetId(ID_DELETECALENDARENTRIES);
294                 wxPostEvent((*dayIter), deleteEvent);
295                         
296         }
297         
300 void XCCalendarMonthView::DeleteCalendarEntry(wxCommandEvent &eventData){
301         
302         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
303                 dayIter != calendarDayList.end(); dayIter++){
305                 wxCommandEvent deleteEvent(XCCALENDARDAY_DELETEENTRY);
306                 deleteEvent.SetInt(eventData.GetInt());
307                 deleteEvent.SetId(ID_DELETEENTRY);
308                 wxPostEvent((*dayIter), deleteEvent);
309                         
310         }       
311         
314 void XCCalendarMonthView::AddCalendarEntry(wxCommandEvent &eventData){
315         
316         EventProperties *eventInfo = (EventProperties*)eventData.GetClientData();
317         bool foundDate = false;
318         
319         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
320                 dayIter != calendarDayList.end(); dayIter++){
321                         
322                 // Check if the date matches with the date in the day
323                 // widget. If it does, add the widget.
324                         
325                 if ((*dayIter)->GetCalendarYear() == eventInfo->eventYear &&
326                         (*dayIter)->GetCalendarMonth() == (eventInfo->eventMonth + 1) &&
327                         (*dayIter)->GetCalendarDay() == eventInfo->eventDay){
328                         
329                         wxCommandEvent addEvent(XCCALENDARDAY_ADDENTRY);
330                         addEvent.SetId(ID_ADDENTRY);
331                         addEvent.SetClientData(eventInfo);
332                         wxPostEvent((*dayIter), addEvent);
333                         foundDate = true;
334                         break;
335                         
336                 }
337                         
338         }
339         
340         if (foundDate == false){
341                 
342                 delete eventInfo;
343                 eventInfo = nullptr;
344                 
345         }
346         
349 void XCCalendarMonthView::UpdateCalendarEntry(wxCommandEvent &eventData){
350         
351         EventProperties *eventInfo = (EventProperties*)eventData.GetClientData();
352         bool foundDate = false;
353         
354         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
355                 dayIter != calendarDayList.end(); dayIter++){
356         
357                 wxCommandEvent addEvent(XCCALENDARDAY_DELETEENTRY);
358                 addEvent.SetId(ID_DELETEENTRY);
359                 addEvent.SetInt(eventInfo->eventID);
360                 wxPostEvent((*dayIter), addEvent);
361                         
362         }
363         
364         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
365                 dayIter != calendarDayList.end(); dayIter++){
366                         
367                 // Check if the date matches with the date in the day
368                 // widget. If it does, update the widget.
369                         
370                 if ((*dayIter)->GetCalendarYear() == eventInfo->eventYear &&
371                         (*dayIter)->GetCalendarMonth() == (eventInfo->eventMonth + 1) &&
372                         (*dayIter)->GetCalendarDay() == eventInfo->eventDay){
373                         
374                         wxCommandEvent addEvent(XCCALENDARDAY_ADDENTRY);
375                         addEvent.SetId(ID_ADDENTRY);
376                         addEvent.SetClientData(eventInfo);
377                         wxPostEvent((*dayIter), addEvent);
378                         foundDate = true;
379                         break;
380                         
381                 }
382                         
383         }
384         
385         if (foundDate == false){
386                 
387                 delete eventInfo;
388                 eventInfo = nullptr;
389                 
390         }
391         
394 void XCCalendarMonthView::UpdateCalendarColour(wxCommandEvent &colourData){
395         
396         ColourUpdateProperties *colourDataInfo = (ColourUpdateProperties*)colourData.GetClientData();
397         
398         for (vector<XCCalendarDay*>::iterator dayIter = calendarDayList.begin();
399                 dayIter != calendarDayList.end(); dayIter++){
400                         
401                 // Check if the date matches with the date in the day
402                 // widget. If it does, update the widget.
404                 ColourUpdateProperties *colourDataPassInfo = colourDataInfo;
405                         
406                 wxCommandEvent updateColour(XCCALENDARDAY_UPDATECALENDARCOLOUR);
407                 updateColour.SetId(ID_UPDATECOLOUR);
408                 updateColour.SetClientData(colourDataPassInfo);
409                 wxPostEvent((*dayIter), updateColour);
410                         
411         }
412         
415 void XCCalendarMonthView::ShowEventMenu(wxCommandEvent &eventData){
416         
417         EventProperties *eventInfo = (EventProperties*)eventData.GetClientData();
418         
419         eventMenu->SetEventID(eventInfo->eventID);
420         eventMenu->SetCalendarID(eventInfo->calendarID);
421         eventMenu->SetWindowPointer(this->GetParent()->GetParent());
422         
423         this->PopupMenu(eventMenu, wxDefaultPosition);
424         
425         delete eventInfo;
426         eventInfo = nullptr;
427         
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