#include "XCCalendarDayEntry.h"
+wxDEFINE_EVENT(XCCALENDARDAYENTRY_DESELECT, wxCommandEvent);
+
BEGIN_EVENT_TABLE(XCCalendarDayEntry, wxPanel)
-EVT_PAINT(XCCalendarDayEntry::PaintFrameEvent)
EVT_SIZE(XCCalendarDayEntry::ResizeFrameEvent)
-EVT_LEFT_DOWN(XCCalendarDayEntry::LeftClick)
+EVT_LEFT_UP(XCCalendarDayEntry::LeftClick)
+EVT_RIGHT_UP(XCCalendarDayEntry::RightClick)
END_EVENT_TABLE()
using namespace std;
XCCalendarDayEntry::XCCalendarDayEntry(wxWindow* parent, const wxString& title, const wxPoint& pos, const wxSize& size, const int id)
- : wxPanel(parent, wxID_ANY, pos, size, wxTAB_TRAVERSAL, title)
-{
-
- Connect(wxID_ANY, XCCALENDARDAYENTRY_DESELECT, wxCommandEventHandler(XCCalendarDayEntry::Deselect));
-
- DayPanel = parent->GetParent();
- EntryID = id;
+ : wxPanel(parent, wxID_ANY, pos, size, wxTAB_TRAVERSAL, title){
+ dayPanel = parent->GetParent();
+ eventID = id;
this->SetMinSize(wxSize(65, 30));
+
+ // Setup the main panel and main sizer.
- EventTextData = title.mb_str();
- EventText = new wxStaticText(this, wxID_ANY, title, wxPoint(49, 8), wxDefaultSize, wxST_ELLIPSIZE_END);
+ mainPanel = new wxPanel(this, wxID_ANY, wxPoint(0,0), this->GetSize(), wxTAB_TRAVERSAL|wxSIMPLE_BORDER);
+ mainSizer = new wxBoxSizer( wxVERTICAL );
+
+ // Setup the calendar colour.
- AlarmIconBitmap.LoadFile("AlertIcon.png", wxBITMAP_DEFAULT_TYPE);
- PriorityIconBitmap.LoadFile("PriorityIcon.png", wxBITMAP_DEFAULT_TYPE);
+ calendarColour = new wxPanel(mainPanel, wxID_ANY, wxPoint(0,0), wxSize(10, 30), wxTAB_TRAVERSAL|wxEXPAND, "Calendar Colour");
+ calendarColour->SetBackgroundColour(wxColour(80, 40, 40, 100));
+
+ // Setup the event text.
+
+ eventTextData = title.mb_str();
+ eventText = new wxStaticText(mainPanel, wxID_ANY, title, wxPoint(49, 14), wxDefaultSize, wxST_ELLIPSIZE_END);
+ eventTime = new wxStaticText(mainPanel, wxID_ANY, wxT("Time"), wxPoint(49,3), wxDefaultSize, 0);
+
+ wxFont eventTimeFont = eventTime->GetFont();
+ eventTimeFont.MakeBold();
+ eventTime->SetFont(eventTimeFont);
+
+ // Setup the images.
+
+ wxMemoryInputStream alerticon(icons_alert_png, sizeof(icons_alert_png));
+ wxMemoryInputStream priorityicon(icons_priority_png, sizeof(icons_priority_png));
+
+ wxImage icons_alert_png(alerticon, wxBITMAP_TYPE_PNG);
+ alarmIconBitmap = wxBitmap(icons_alert_png, -1);
- AlarmIcon->SetBitmap(AlarmIconBitmap);
- HighPriorityIcon->SetBitmap(PriorityIconBitmap);
+ wxImage icons_priority_png(priorityicon, wxBITMAP_TYPE_PNG);
+ priorityIconBitmap = wxBitmap(icons_priority_png, -1);
+
+ alarmIcon->SetBitmap(alarmIconBitmap);
+ highPriorityIcon->SetBitmap(priorityIconBitmap);
+
+ // Setup the connections for the control.
+ calendarColour->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
+ alarmIcon->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
+ highPriorityIcon->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
+ eventText->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
+ eventTime->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
+ dayPanel->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
+
+ calendarColour->Connect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
+ alarmIcon->Connect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
+ highPriorityIcon->Connect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
+ eventText->Connect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
+ eventTime->Connect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
+ dayPanel->Connect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
+
UpdateInformation();
+ // Bind events to the control.
+
+ Bind(XCCALENDARDAYENTRY_DESELECT, &XCCalendarDayEntry::Deselect, this, ID_ENTRYDESELECT);
+
+ // Set the control's sizer.
+
+ this->SetSizer(mainSizer);
+ mainSizer->Add(mainPanel, 0, wxEXPAND, 1);
}
XCCalendarDayEntry::~XCCalendarDayEntry(){
// Destory the controls from the widget.
-}
-
-void XCCalendarDayEntry::Repaint(){
+ // Disconnect and unbind.
- wxPaintDC dc(this);
-
- // Get the wxSizerItem for the top date and the entries part.
+ calendarColour->Disconnect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
+ alarmIcon->Disconnect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
+ highPriorityIcon->Disconnect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
+ eventText->Disconnect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
+ eventTime->Disconnect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
+ dayPanel->Disconnect(wxEVT_LEFT_UP, wxMouseEventHandler(XCCalendarDayEntry::LeftClick), NULL, this);
- dc.SetBrush(wxBrush(wxColor(0,0,0), wxBRUSHSTYLE_TRANSPARENT));
+ calendarColour->Disconnect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
+ alarmIcon->Disconnect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
+ highPriorityIcon->Disconnect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
+ eventText->Disconnect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
+ eventTime->Disconnect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
+ dayPanel->Disconnect(wxEVT_RIGHT_UP, wxMouseEventHandler(XCCalendarDayEntry::RightClick), NULL, this);
- /*wxRect Test;
+ Unbind(XCCALENDARDAYENTRY_DESELECT, &XCCalendarDayEntry::Deselect, this, ID_ENTRYDESELECT);
- Test.SetX(this->GetClientRect().GetX());
- Test.SetY(this->GetClientRect().GetY());
- Test.SetHeight(this->GetClientRect().GetHeight());
- Test.SetWidth(this->GetClientRect().GetWidth());
+ // Delete the controls.
- cout << Test.GetX() << "|" << Test.GetY() << "|" << Test.GetHeight() << "|" << Test.GetWidth() << "|" << endl;*/
+ mainSizer->Clear();
- dc.DrawRectangle(this->GetClientRect());
+ delete eventText;
+ eventText = nullptr;
- // Draw the calendar colour.
+ delete eventTime;
+ eventTime = nullptr;
- dc.SetPen(wxPen(wxColor(255,255,255), 0, wxPENSTYLE_TRANSPARENT));
- dc.SetBrush(wxBrush(wxColor(EntryColour.red,
- EntryColour.green,
- EntryColour.blue), wxBRUSHSTYLE_SOLID));
- dc.DrawRectangle(wxRect(1,1,10,28));
+ delete calendarColour;
+ calendarColour = nullptr;
+
+ delete mainPanel;
+ mainPanel = nullptr;
+
+ delete highPriorityIcon;
+ delete alarmIcon;
+
+ this->SetSizer(nullptr, true);
}
void XCCalendarDayEntry::UpdateInformation(){
- PositionMode = 0;
+ positionMode = 0;
// Check if the high priority icon needs to be displayed.
- if (HasHighPriority == true){
+ if (hasHighPriority == true){
- HighPriorityIcon->SetPosition(wxPoint(FirstPosition,7));
+ highPriorityIcon->SetPosition(wxPoint(firstPosition,7));
- HighPriorityIcon->Show(true);
+ highPriorityIcon->Show(true);
- PositionMode++;
+ positionMode++;
} else {
- HighPriorityIcon->Show(false);
+ highPriorityIcon->Show(false);
}
// Check if the alarm icon needs to be displayed.
- if (HasAlarm == true){
+ if (hasAlarm == true){
- switch(PositionMode){
+ switch(positionMode){
case 0:
- AlarmIcon->SetPosition(wxPoint(FirstPosition,7));
+ alarmIcon->SetPosition(wxPoint(firstPosition,7));
break;
case 1:
- AlarmIcon->SetPosition(wxPoint(SecondPosition,7));
+ alarmIcon->SetPosition(wxPoint(secondPosition,7));
break;
}
- AlarmIcon->Show(true);
+ alarmIcon->Show(true);
- PositionMode++;
+ positionMode++;
} else {
- AlarmIcon->Show(false);
+ alarmIcon->Show(false);
}
// Now set the text.
- switch(PositionMode){
+ switch(positionMode){
case 0:
- EventText->SetPosition(wxPoint(FirstPosition,8));
+ eventText->SetPosition(wxPoint(firstPosition,14));
+ eventTime->SetPosition(wxPoint(firstPosition,3));
break;
case 1:
- EventText->SetPosition(wxPoint(SecondPosition,8));
+ eventText->SetPosition(wxPoint(secondPosition,14));
+ eventTime->SetPosition(wxPoint(firstPosition,3));
break;
case 2:
- EventText->SetPosition(wxPoint(ThirdPosition,8));
+ eventText->SetPosition(wxPoint(thirdPosition,14));
+ eventTime->SetPosition(wxPoint(firstPosition,3));
break;
}
}
-void XCCalendarDayEntry::PaintFrameEvent(wxPaintEvent &PaintEvent)
-{
-
- Repaint();
-
-}
-
-void XCCalendarDayEntry::ResizeFrameEvent(wxSizeEvent &SizeEvent)
-{
+void XCCalendarDayEntry::ResizeFrameEvent(wxSizeEvent &sizeEvent){
// Adjust the Event text so it is displayed properly.
- switch(PositionMode){
+ switch(positionMode){
case 0:
- EventText->SetSize(wxSize((this->GetClientRect().width - FirstPosition - 5),15));
+ eventText->SetSize(wxSize((this->GetClientRect().width - firstPosition - 5),15));
+ eventTime->SetSize(wxSize((this->GetClientRect().width - firstPosition - 5),15));
break;
case 1:
- EventText->SetSize(wxSize((this->GetClientRect().width - SecondPosition - 5),15));
+ eventText->SetSize(wxSize((this->GetClientRect().width - secondPosition - 5),15));
+ eventTime->SetSize(wxSize((this->GetClientRect().width - secondPosition - 5),15));
break;
case 2:
- EventText->SetSize(wxSize((this->GetClientRect().width - ThirdPosition - 5),15));
+ eventText->SetSize(wxSize((this->GetClientRect().width - thirdPosition - 5),14));
+ eventTime->SetSize(wxSize((this->GetClientRect().width - thirdPosition - 5),15));
break;
}
+ // Resize the main panel.
+
+ mainPanel->SetSize(this->GetSize());
+
// Refresh the window.
this->Refresh();
}
-void XCCalendarDayEntry::LeftClick(wxMouseEvent &MouseEvent)
-{
+void XCCalendarDayEntry::LeftClick(wxMouseEvent &mouseEvent){
// Change the background of the widget to mark
// the entry as selected.
- this->SetBackgroundColour(wxColor(255,215,0));
- wxCommandEvent DeselectOthersEvent(XCCALENDARDAY_DESELECTOTHERENTRIES);
- DeselectOthersEvent.SetInt(EntryID);
- wxPostEvent(DayPanel, DeselectOthersEvent);
+ mainPanel->SetBackgroundColour(wxColor(255,215,0));
+ wxCommandEvent deselectOthersEvent(XCCALENDARDAY_DESELECTOTHERENTRIES);
+ deselectOthersEvent.SetInt(eventID);
+ deselectOthersEvent.SetId(ID_DESELECTOTHERENTRIES);
+ wxPostEvent(dayPanel, deselectOthersEvent);
+ this->Refresh();
+
+}
+
+void XCCalendarDayEntry::RightClick(wxMouseEvent &MouseEvent){
+
+ // Sent an event to the month view control.
+
+ EventProperties *eventData = new EventProperties;
+ eventData->calendarID = calendarID;
+ eventData->eventID = eventID;
+
+ wxCommandEvent eventMenu(XCCALENDARMONTH_DISPLAYEVENTMENU);
+ eventMenu.SetClientData(eventData);
+ eventMenu.SetId(ID_DISPLAYEVENTMENU);
+ wxPostEvent(this->GetParent()->GetParent(), eventMenu);
}
void XCCalendarDayEntry::Deselect(wxCommandEvent &DeselectEvent){
- this->SetBackgroundColour(wxNullColour);
+ mainPanel->SetBackgroundColour(wxNullColour);
+ this->Refresh();
}
-void XCCalendarDayEntry::SetColour(Colour *ColourIn){
+void XCCalendarDayEntry::SetTime(int timeHour, int timeMinute, int timeSecond){
- EntryColour = *ColourIn;
+ this->timeHour = timeHour;
+ this->timeMinute = timeMinute;
+ this->timeSecond = timeSecond;
+
+ string timeOutput = BuildEventTime(timeHour, timeMinute);
+ eventTime->SetLabel(timeOutput);
}
-void XCCalendarDayEntry::SetDisplayAlarm(bool DisplayValue){
+void XCCalendarDayEntry::SetColour(Colour *colourIn){
- HasAlarm = DisplayValue;
+ calendarColour->SetBackgroundColour(wxColour(colourIn->red, colourIn->green, colourIn->blue, colourIn->alpha));
+ this->Refresh();
+
+}
+
+void XCCalendarDayEntry::SetDisplayAlarm(bool displayValue){
+
+ hasAlarm = displayValue;
UpdateInformation();
}
-void XCCalendarDayEntry::SetDisplayHighPriority(bool DisplayValue){
+void XCCalendarDayEntry::SetDisplayHighPriority(bool displayValue){
- HasHighPriority = DisplayValue;
+ hasHighPriority = displayValue;
UpdateInformation();
}
bool XCCalendarDayEntry::GetDisplayAlarm(){
- return HasAlarm;
+ return hasAlarm;
}
bool XCCalendarDayEntry::GetDisplayHighPriority(){
- return HasHighPriority;
+ return hasHighPriority;
}
int XCCalendarDayEntry::GetID(){
- return EntryID;
+ return eventID;
+
+}
+
+int XCCalendarDayEntry::GetCalendarID(){
+
+ return calendarID;
+
+}
+
+int XCCalendarDayEntry::GetEventID(){
+
+ return eventID;
+
+}
+
+int XCCalendarDayEntry::GetAccountID(){
+
+ return accountID;
+
+}
+
+string XCCalendarDayEntry::BuildEventTime(int timeHour, int timeMinute){
+
+ string timeOutput;
+
+ if (timeHour > 12){
+
+ timeOutput += to_string(timeHour - 12);
+
+ } else if (timeHour > 0){
+
+ timeOutput += to_string(timeHour);
+
+ } else if (timeHour == 0){
+
+ timeOutput += to_string(12);
+
+ }
+
+ timeOutput += ":";
+
+ if (timeMinute < 10){
+ timeOutput += "0";
+ }
+
+ timeOutput += to_string(timeMinute);
+
+ if (timeHour < 12){
+ timeOutput += "am";
+ } else {
+ timeOutput += "pm";
+ }
+
+ return timeOutput;
+
+}
+
+void XCCalendarDayEntry::SetEntryIDs(int accountID, int calendarID, int eventID){
+
+ this->accountID = accountID;
+ this->calendarID = calendarID;
+ this->eventID = eventID;
+
+}
+
+void XCCalendarDayEntry::SetAfterSpacer(wxSizerItem *afterSpacer){
+
+ this->afterSpacer = afterSpacer;
+
+}
+
+void XCCalendarDayEntry::SetEventName(string eventName){
+
+ eventText->SetLabel(wxString(eventName));
+
+}
+
+wxSizerItem* XCCalendarDayEntry::GetAfterSpacer(){
+
+ return afterSpacer;
+
+}
+
+void XCCalendarDayEntry::SetShowAccountStatus(bool statusInput){
+
+ showAccount = statusInput;
+
+}
+
+void XCCalendarDayEntry::SetShowCalendarStatus(bool statusInput){
+
+ showCalendar = statusInput;
+
+}
+
+bool XCCalendarDayEntry::GetShowAccountStatus(){
+
+ return showAccount;
+
+}
+
+bool XCCalendarDayEntry::GetShowCalendarStatus(){
+
+ return showCalendar;
}
\ No newline at end of file