X-Git-Url: http://Server1/repobrowser/?p=xestiacalendar%2F.git;a=blobdiff_plain;f=source%2Fwidgets%2FXCCalendarDay.cpp;h=64bd1b427171a884cf2a857118e1caa1fbf697bd;hp=5d484726b36ef371dccbebfe735d7b1a0e549d16;hb=49789773e2797383c866dca470fb99e80cb49e41;hpb=1fe6e43892e5c572949a293a9e19704b5debadad diff --git a/source/widgets/XCCalendarDay.cpp b/source/widgets/XCCalendarDay.cpp index 5d48472..64bd1b4 100644 --- a/source/widgets/XCCalendarDay.cpp +++ b/source/widgets/XCCalendarDay.cpp @@ -20,18 +20,35 @@ using namespace std; +wxDEFINE_EVENT(XCCALENDARDAY_DESELECTOTHERENTRIES, wxCommandEvent); +wxDEFINE_EVENT(XCCALENDARDAY_DESELECTALLENTRIES, wxCommandEvent); +wxDEFINE_EVENT(XCCALENDARDAY_HIDEACCOUNTENTRIES, wxCommandEvent); +wxDEFINE_EVENT(XCCALENDARDAY_SHOWACCOUNTENTRIES, wxCommandEvent); +wxDEFINE_EVENT(XCCALENDARDAY_HIDECALENDARENTRIES, wxCommandEvent); +wxDEFINE_EVENT(XCCALENDARDAY_SHOWCALENDARENTRIES, wxCommandEvent); +wxDEFINE_EVENT(XCCALENDARDAY_DELETECALENDARENTRIES, wxCommandEvent); +wxDEFINE_EVENT(XCCALENDARDAY_DELETEENTRY, wxCommandEvent); +wxDEFINE_EVENT(XCCALENDARDAY_ADDENTRY, wxCommandEvent); +wxDEFINE_EVENT(XCCALENDARDAY_UPDATEENTRY, wxCommandEvent); +wxDEFINE_EVENT(XCCALENDARDAY_UPDATECALENDARCOLOUR, wxCommandEvent); + BEGIN_EVENT_TABLE(XCCalendarDay, wxPanel) -EVT_PAINT(XCCalendarDay::PaintFrameEvent) -EVT_SIZE(XCCalendarDay::ResizeFrameEvent) END_EVENT_TABLE() XCCalendarDay::XCCalendarDay(wxWindow *parent, const wxString& title, const wxPoint& pos, const wxSize& size) : wxPanel(parent, wxID_ANY, pos, size, wxTAB_TRAVERSAL, title){ - this->SetMinSize( wxSize( 100,100 ) ); + // Setup the top panel. + + topPanel = new wxPanel(this, wxID_ANY, wxPoint(0,0), wxSize(50, 40), wxTAB_TRAVERSAL); + mainPanel = new wxPanel(this, wxID_ANY, wxPoint(0,0), wxSize(200, 200), wxTAB_TRAVERSAL); + // Setip the icons. + highPriorityIcon = new wxStaticBitmap(topPanel, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(32,32), 0); + alertIcon = new wxStaticBitmap(topPanel, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(32,32), 0); + wxMemoryInputStream alerticon(icons_alert32_png, sizeof(icons_alert32_png)); wxMemoryInputStream priorityicon(icons_priority32_png, sizeof(icons_priority32_png)); @@ -44,12 +61,7 @@ XCCalendarDay::XCCalendarDay(wxWindow *parent, const wxString& title, const wxPo alertIcon->SetBitmap(imgAlertIcon); highPriorityIcon->SetBitmap(imgPriorityIcon); - windowSizer->AddGrowableCol(0); - windowSizer->AddGrowableRow(1); - windowSizer->SetFlexibleDirection( wxBOTH ); - windowSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - numberText = new wxStaticText(this, wxID_ANY, wxT("09"), wxDefaultPosition, wxDefaultSize, 0); + numberText = new wxStaticText(topPanel, wxID_ANY, wxT("09"), wxDefaultPosition, wxDefaultSize, 0); numberText->SetFont(wxFont(24, 70, 90, 92, false, wxEmptyString)); topSectionSizer->Add(highPriorityIcon, 0, wxALL|wxALIGN_CENTER_VERTICAL, 0); @@ -59,103 +71,104 @@ XCCalendarDay::XCCalendarDay(wxWindow *parent, const wxString& title, const wxPo // Setup the scrollable section. + eventListFrame = new wxScrolledWindow(mainPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + Colour eventColour; eventColour.red = 40; eventColour.green = 80; eventColour.blue = 80; eventListFrame->SetSizer(eventListFrameSizer); eventListFrame->SetScrollRate(0,1); - //EventListFrameSizer->FitInside(EventListFrame); eventListFrameSizer->Fit(eventListFrame); eventListFrameSizer->Layout(); - windowSizer->Fit(this); // Setup the scroll window. - mainSectionSizer->Add(eventListFrame, 1, wxGROW | wxALL, 10); + mainSectionSizer->Add(eventListFrame, 1, wxGROW | wxALL, 5); + + topPanel->SetSizer(topSectionSizer); + mainPanel->SetSizer(mainSectionSizer); - windowSizer->Add(topSectionSizer, 1, wxEXPAND, 5); - windowSizer->Add(mainSectionSizer, 1, wxEXPAND, 5); + windowSizer->Add(topPanel, 1, wxEXPAND, 0); + windowSizer->Add(mainPanel, 1, wxEXPAND, 0); this->SetSizer(windowSizer); this->SetSize(size); this->Layout(); - this->SetBackgroundStyle(wxBG_STYLE_PAINT); this->Centre(wxBOTH); UpdateTopIcons(); - Connect(ID_DESELECTOTHERENTRIES, XCCALENDARDAY_DESELECTOTHERENTRIES, wxCommandEventHandler(XCCalendarDay::DeselectOthersEvent)); - Connect(ID_DESELECTALLITEMS, XCCALENDARDAY_DESELECTALLENTRIES, wxCommandEventHandler(XCCalendarDay::DeselectAllEvent)); - Connect(ID_HIDEENTRIES, XCCALENDARDAY_HIDEACCOUNTENTRIES, wxCommandEventHandler(XCCalendarDay::HideAccountEntries)); - Connect(ID_SHOWENTRIES, XCCALENDARDAY_SHOWACCOUNTENTRIES, wxCommandEventHandler(XCCalendarDay::ShowAccountEntries)); - Connect(ID_HIDECALENDARENTRIES, XCCALENDARDAY_HIDECALENDARENTRIES, wxCommandEventHandler(XCCalendarDay::HideCalendarEntries)); - Connect(ID_SHOWCALENDARENTRIES, XCCALENDARDAY_SHOWCALENDARENTRIES, wxCommandEventHandler(XCCalendarDay::ShowCalendarEntries)); - Connect(ID_DELETECALENDARENTRIES, XCCALENDARDAY_DELETECALENDARENTRIES, wxCommandEventHandler(XCCalendarDay::DeleteCalendarEntries)); - Connect(ID_DELETEENTRY, XCCALENDARDAY_DELETEENTRY, wxCommandEventHandler(XCCalendarDay::DeleteCalendarEntry)); - Connect(ID_ADDENTRY, XCCALENDARDAY_ADDENTRY, wxCommandEventHandler(XCCalendarDay::AddCalendarEntry)); - Connect(ID_UPDATEENTRY, XCCALENDARDAY_UPDATEENTRY, wxCommandEventHandler(XCCalendarDay::UpdateCalendarEntry)); - Connect(ID_UPDATECOLOUR, XCCALENDARDAY_UPDATECALENDARCOLOUR, wxCommandEventHandler(XCCalendarDay::UpdateCalendarColour)); - + // Bind events to the control. + + Bind(XCCALENDARDAY_DESELECTOTHERENTRIES, &XCCalendarDay::DeselectOthersEvent, this, ID_DESELECTOTHERENTRIES); + Bind(XCCALENDARDAY_DESELECTALLENTRIES, &XCCalendarDay::DeselectAllEvent, this, ID_DESELECTALLITEMS); + Bind(XCCALENDARDAY_HIDEACCOUNTENTRIES, &XCCalendarDay::HideAccountEntries, this, ID_HIDEENTRIES); + Bind(XCCALENDARDAY_SHOWACCOUNTENTRIES, &XCCalendarDay::ShowAccountEntries, this, ID_SHOWENTRIES); + Bind(XCCALENDARDAY_HIDECALENDARENTRIES, &XCCalendarDay::HideCalendarEntries, this, ID_HIDECALENDARENTRIES); + Bind(XCCALENDARDAY_SHOWCALENDARENTRIES, &XCCalendarDay::ShowCalendarEntries, this, ID_SHOWCALENDARENTRIES); + Bind(XCCALENDARDAY_DELETECALENDARENTRIES, &XCCalendarDay::DeleteCalendarEntries, this, ID_DELETECALENDARENTRIES); + Bind(XCCALENDARDAY_DELETEENTRY, &XCCalendarDay::DeleteCalendarEntry, this, ID_DELETEENTRY); + Bind(XCCALENDARDAY_ADDENTRY, &XCCalendarDay::AddCalendarEntry, this, ID_ADDENTRY); + Bind(XCCALENDARDAY_UPDATEENTRY, &XCCalendarDay::UpdateCalendarEntry, this, ID_UPDATEENTRY); + Bind(XCCALENDARDAY_UPDATECALENDARCOLOUR, &XCCalendarDay::UpdateCalendarColour, this, ID_UPDATECOLOUR); } XCCalendarDay::~XCCalendarDay(){ // Destory the controls from the widget. + Unbind(XCCALENDARDAY_DESELECTOTHERENTRIES, &XCCalendarDay::DeselectOthersEvent, this, ID_DESELECTOTHERENTRIES); + Unbind(XCCALENDARDAY_DESELECTALLENTRIES, &XCCalendarDay::DeselectAllEvent, this, ID_DESELECTALLITEMS); + Unbind(XCCALENDARDAY_HIDEACCOUNTENTRIES, &XCCalendarDay::HideAccountEntries, this, ID_HIDEENTRIES); + Unbind(XCCALENDARDAY_SHOWACCOUNTENTRIES, &XCCalendarDay::ShowAccountEntries, this, ID_SHOWENTRIES); + Unbind(XCCALENDARDAY_HIDECALENDARENTRIES, &XCCalendarDay::HideCalendarEntries, this, ID_HIDECALENDARENTRIES); + Unbind(XCCALENDARDAY_SHOWCALENDARENTRIES, &XCCalendarDay::ShowCalendarEntries, this, ID_SHOWCALENDARENTRIES); + Unbind(XCCALENDARDAY_DELETECALENDARENTRIES, &XCCalendarDay::DeleteCalendarEntries, this, ID_DELETECALENDARENTRIES); + Unbind(XCCALENDARDAY_DELETEENTRY, &XCCalendarDay::DeleteCalendarEntry, this, ID_DELETEENTRY); + Unbind(XCCALENDARDAY_ADDENTRY, &XCCalendarDay::AddCalendarEntry, this, ID_ADDENTRY); + Unbind(XCCALENDARDAY_UPDATEENTRY, &XCCalendarDay::UpdateCalendarEntry, this, ID_UPDATEENTRY); + Unbind(XCCALENDARDAY_UPDATECALENDARCOLOUR, &XCCalendarDay::UpdateCalendarColour, this, ID_UPDATECOLOUR); + for (vector::iterator calendarEntryIter = calendarEntryList.begin(); calendarEntryIter != calendarEntryList.end(); calendarEntryIter++){ - + delete((*calendarEntryIter)); } - - calendarEntryList.clear(); - - this->Refresh(); - -} -void XCCalendarDay::Repaint(){ + eventListFrameSizer->Clear(); - wxPaintDC dc(this); - wxPaintDC eventListFrameDC(eventListFrame); + eventListFrame->SetSizer(nullptr, true); - // Get the wxSizerItem for the top date and the entries part. + mainSectionSizer->Clear(); + topSectionSizer->Clear(); + windowSizer->Clear(); - wxSizerItem *topSectionSizerItem = windowSizer->GetItem((size_t)0); - wxSizerItem *mainSectionSizerItem = windowSizer->GetItem((size_t)1); - wxRect topSizer = wxRect(windowSizer->GetPosition(), windowSizer->GetSize()); + delete alertIcon; + alertIcon = nullptr; - if (isInMonth == true){ + delete highPriorityIcon; + highPriorityIcon = nullptr; - dc.SetPen(wxPen(wxColor(255,255,255), 0, wxPENSTYLE_TRANSPARENT)); - dc.SetBrush(wxBrush(wxColor(255,255,255))); - dc.DrawRectangle(topSectionSizerItem->GetRect()); - dc.SetBrush(wxBrush(wxColor(225,225,225))); - dc.DrawRectangle(mainSectionSizerItem->GetRect()); - eventListFrameDC.SetPen(wxPen(wxColor(255,255,255), 0, wxPENSTYLE_TRANSPARENT)); - eventListFrameDC.SetBrush(wxBrush(wxColor(225,225,225))); - eventListFrameDC.DrawRectangle(eventListFrame->GetClientRect()); - - } else { - - dc.SetPen(wxPen(wxColor(185,185,185), 0, wxPENSTYLE_TRANSPARENT)); - dc.SetBrush(wxBrush(wxColor(185,185,185))); - dc.DrawRectangle(topSectionSizerItem->GetRect()); - dc.SetBrush(wxBrush(wxColor(155,155,155))); - dc.DrawRectangle(mainSectionSizerItem->GetRect()); - eventListFrameDC.SetPen(wxPen(wxColor(255,255,255), 0, wxPENSTYLE_TRANSPARENT)); - eventListFrameDC.SetBrush(wxBrush(wxColor(155,155,155))); - eventListFrameDC.DrawRectangle(eventListFrame->GetClientRect()); - - } + delete eventListFrame; + eventListFrame = nullptr; - // Draw the border. + delete numberText; + numberText = nullptr; - //dc.SetBrush(wxBrush(wxColor(0,0,0), wxBRUSHSTYLE_TRANSPARENT)); + delete topPanel; + topPanel = nullptr; - this->Layout(); + delete mainPanel; + mainPanel = nullptr; + + calendarEntryList.clear(); + + this->SetSizer(nullptr, true); + + monthViewPointer = nullptr; + dataStorage = nullptr; } @@ -192,13 +205,6 @@ void XCCalendarDay::UpdateTopIcons(){ } -void XCCalendarDay::PaintFrameEvent(wxPaintEvent &paintEvent) -{ - - Repaint(); - -} - void XCCalendarDay::ResizeFrameEvent(wxSizeEvent &sizeEvent) { @@ -208,6 +214,11 @@ void XCCalendarDay::ResizeFrameEvent(wxSizeEvent &sizeEvent) // Refresh the window. this->Refresh(); + topPanel->Refresh(); + mainPanel->Refresh(); + topSectionSizer->Layout(); + mainSectionSizer->Layout(); + windowSizer->Layout(); } @@ -227,17 +238,17 @@ void XCCalendarDay::DeselectOthersEvent(wxCommandEvent &deselectEvent) wxPostEvent((*entryIter), deselectEntryEvent); } - + } // Send event notification to deselect the other calendar entries. if (this->monthViewPointer != nullptr){ - wxCommandEvent deselectEvent(XCCALENDARMONTH_DESELECTOTHERENTRIES); - deselectEvent.SetClientData(this); - deselectEvent.SetId(ID_MONTHVIEWCLEARSELECTION); - wxPostEvent(this->monthViewPointer, deselectEvent); + wxCommandEvent deselectMonthEvent(XCCALENDARMONTH_DESELECTOTHERENTRIES); + deselectMonthEvent.SetClientData(this); + deselectMonthEvent.SetId(ID_MONTHVIEWCLEARSELECTION); + wxPostEvent(this->monthViewPointer, deselectMonthEvent); } @@ -281,6 +292,18 @@ void XCCalendarDay::SetupControl(int setupDay, int setupMonth, int setupYear, bo // Setup the Is In Month value. isInMonth = setupIsInMonth; + if (isInMonth) + { + topPanel->SetBackgroundColour(wxColor(255,255,255)); + mainPanel->SetBackgroundColour(wxColor(225,225,225)); + eventListFrame->SetBackgroundColour(wxColor(225,225,225)); + } + else + { + topPanel->SetBackgroundColour(wxColor(185,185,185)); + mainPanel->SetBackgroundColour(wxColor(155,155,155)); + eventListFrame->SetBackgroundColour(wxColor(155,155,155)); + } // Setup the month view pointer. @@ -366,7 +389,6 @@ void XCCalendarDay::HideAccountEntries(wxCommandEvent &accountData){ } this->Refresh(); - Repaint(); } @@ -401,7 +423,6 @@ void XCCalendarDay::ShowAccountEntries(wxCommandEvent &accountData){ } this->Refresh(); - Repaint(); } @@ -432,7 +453,6 @@ void XCCalendarDay::HideCalendarEntries(wxCommandEvent &calendarData){ } this->Refresh(); - Repaint(); } @@ -472,7 +492,6 @@ void XCCalendarDay::ShowCalendarEntries(wxCommandEvent &calendarData){ } this->Refresh(); - Repaint(); } @@ -492,7 +511,6 @@ void XCCalendarDay::DeleteCalendarEntries(wxCommandEvent &calendarData){ wxSizerItem *afterSpacer = (*calendarEntryIter)->GetAfterSpacer(); afterSpacer->Show(false); - afterSpacer->DetachSizer(); delete afterSpacer; afterSpacer = nullptr; @@ -505,7 +523,8 @@ void XCCalendarDay::DeleteCalendarEntries(wxCommandEvent &calendarData){ } this->Refresh(); - Repaint(); + mainPanel->Layout(); + eventListFrameSizer->Layout(); for (auto deleteIter : deleteEntriesList){ calendarEntryList.erase(deleteIter); @@ -529,10 +548,6 @@ void XCCalendarDay::DeleteCalendarEntry(wxCommandEvent &eventData){ wxSizerItem *afterSpacer = (*calendarEntryIter)->GetAfterSpacer(); afterSpacer->Show(false); - afterSpacer->DetachSizer(); - - delete afterSpacer; - afterSpacer = nullptr; delete (*calendarEntryIter); deleteEntriesList.push_back(calendarEntryIter); @@ -546,7 +561,9 @@ void XCCalendarDay::DeleteCalendarEntry(wxCommandEvent &eventData){ } this->Refresh(); - Repaint(); + this->Layout(); + eventListFrame->Layout(); + eventListFrameSizer->Layout(); } @@ -554,7 +571,8 @@ void XCCalendarDay::AddCalendarEntry(wxCommandEvent &eventData){ EventProperties *eventInfo = (EventProperties*)eventData.GetClientData(); - XCCalendarDayEntry *newEntry = new XCCalendarDayEntry(eventListFrame, eventInfo->eventName, wxDefaultPosition, wxDefaultSize, eventInfo->eventID); + // TODO: Fix conversion from string to wxString + XCCalendarDayEntry *newEntry = new XCCalendarDayEntry(eventListFrame, wxString(eventInfo->eventName.c_str(), wxConvUTF8), wxDefaultPosition, wxDefaultSize, eventInfo->eventID); CDSGetCalendarInfo calendarInfo = dataStorage->GetCalendar(eventInfo->calendarID); @@ -594,7 +612,9 @@ void XCCalendarDay::AddCalendarEntry(wxCommandEvent &eventData){ calendarEntryList.push_back(newEntry); this->Refresh(); - Repaint(); + mainPanel->Layout(); + eventListFrame->Layout(); + eventListFrameSizer->Layout(); } @@ -613,7 +633,6 @@ void XCCalendarDay::UpdateCalendarEntry(wxCommandEvent &eventData){ (*calendarEntryIter)->SetEventName(eventInfo->eventName); (*calendarEntryIter)->SetTime(eventInfo->eventHour, eventInfo->eventMinute, eventInfo->eventSecond); - } }