+// XCCalendarManipulator.cpp - Xestia Calendar XCCalendarManipulator widget class.
+//
+// (c) 2016 Xestia Software Development.
+//
+// This file is part of Xestia Calendar.
+//
+// Xestia Address Book is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by the
+// Free Software Foundation, version 3 of the license.
+//
+// Xestia Address Book is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with Xestia Calendar. If not, see <http://www.gnu.org/licenses/>
+
+#include "XCCalendarManipulator.h"
+
+BEGIN_EVENT_TABLE(XCCalendarManipulator, wxPanel)
+END_EVENT_TABLE()
+
+using namespace std;
+
+XCCalendarManipulator::XCCalendarManipulator(wxWindow* parent, const wxString& title, const wxPoint& pos, const wxSize& size)
+ : wxPanel(parent, wxID_ANY, pos, size, wxTAB_TRAVERSAL, title){
+
+ szrMain = new wxBoxSizer( wxVERTICAL );
+ pnlMain = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(500, 50), wxTAB_TRAVERSAL);
+ pnlMain->SetBackgroundColour(wxColour(40,40,40));
+ this->SetSizer(szrMain);
+ szrMain->Add(pnlMain, 0, wxEXPAND, 0);
+
+ // Setup the navigation section.
+
+ szrNavigation = new wxBoxSizer( wxHORIZONTAL );
+ pnlMain->SetSizer(szrNavigation);
+
+ // Add next month and previous month buttons.
+
+ PreviousButton = new wxButton(pnlMain, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(32,32), 0|wxNO_BORDER);
+ NextButton = new wxButton(pnlMain, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(32,32), 0|wxNO_BORDER);
+
+ wxMemoryInputStream PreviousIcon(icons_previous_png, sizeof(icons_previous_png));
+ wxMemoryInputStream NextIcon(icons_next_png, sizeof(icons_next_png));
+
+ wxImage icons_previous_png(PreviousIcon, wxBITMAP_TYPE_PNG);
+ PreviousIconBitmap = wxBitmap(icons_previous_png, -1);
+
+ wxImage icons_next_png(NextIcon, wxBITMAP_TYPE_PNG);
+ NextIconBitmap = wxBitmap(icons_next_png, -1);
+
+ PreviousButton->SetBitmap(PreviousIconBitmap);
+ NextButton->SetBitmap(NextIconBitmap);
+
+ // Setup the static text.
+
+ DateButton = new wxButton(pnlMain, wxID_ANY, _("November 2016"), wxDefaultPosition, wxDefaultSize, 0|wxNO_BORDER);
+
+ wxFont Test;
+
+ Test.SetWeight(wxFONTWEIGHT_BOLD);
+ Test.SetPointSize(18);
+
+ DateButton->SetFont(Test);
+ DateButton->SetForegroundColour(wxColour(255,255,255));
+
+ // Setup the event controls.
+
+ DateButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(XCCalendarManipulator::DateTextClick), NULL, this);
+ NextButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(XCCalendarManipulator::NextMonth), NULL, this);
+ PreviousButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(XCCalendarManipulator::PreviousMonth), NULL, this);
+
+ Connect(wxID_ANY, XCCALENDARMANIPULATOR_CHANGEGRID, wxCommandEventHandler(XCCalendarManipulator::ChangeGrid));
+
+ // Setup the manipulator control.
+
+ szrNavigation->Add(PreviousButton, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
+ szrNavigation->Add( 0, 0, 1, wxEXPAND, 5 );
+ szrNavigation->Add(DateButton, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ szrNavigation->Add( 0, 0, 1, wxEXPAND, 5 );
+ szrNavigation->Add(NextButton, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
+ szrNavigation->Layout();
+
+ // Setup the month selection control.
+
+ wxDateTime DTNow = wxDateTime::Now();
+
+ Moo = new XCCalendarMonthSelect(this);
+ Month = ((int)DTNow.GetMonth() + 1);
+ Year = DTNow.GetYear();
+ Moo->UpdateDate(Month, Year);
+
+}
+
+XCCalendarManipulator::~XCCalendarManipulator(){
+
+ // Destory the controls from the widget.
+
+}
+
+void XCCalendarManipulator::DateTextClick(wxCommandEvent &event){
+
+ // Bring up a popup control to select the month and year.
+
+ Moo->SetPosition(wxPoint(DateButton->GetScreenRect().GetLeft(), DateButton->GetScreenRect().GetBottom()));
+ Moo->UpdateDate(Month, Year);
+ Moo->Popup();
+
+}
+
+void XCCalendarManipulator::ChangeGrid(wxCommandEvent &event){
+
+ if (Month == Moo->GetMonth() && Year == Moo->GetYear()){
+ return;
+ }
+
+ Month = Moo->GetMonth();
+ Year = Moo->GetYear();
+
+ // Post an event to the parent control to update the grid.
+
+ wxCommandEvent ChangeGrid(XCCALENDARCTRL_CHANGEGRID);
+ wxPostEvent(this->GetParent(), ChangeGrid);
+
+ UpdateDateButtonText();
+
+}
+
+void XCCalendarManipulator::NextMonth(wxCommandEvent &event){
+
+ int NewMonth = 1;
+ int NewYear = 0;
+
+ // Get the current month and year.
+
+ NewMonth = Moo->GetMonth();
+ NewYear = Moo->GetYear();
+
+ if (NewMonth == 12){
+ NewMonth = 1;
+ NewYear++;
+ } else {
+ NewMonth++;
+ }
+
+ Month = NewMonth;
+ Year = NewYear;
+
+ Moo->UpdateDate(Month, Year);
+
+ // Post an event to the parent control to update the grid.
+
+ wxCommandEvent ChangeGrid(XCCALENDARCTRL_CHANGEGRID);
+ wxPostEvent(this->GetParent(), ChangeGrid);
+
+ UpdateDateButtonText();
+
+}
+
+void XCCalendarManipulator::PreviousMonth(wxCommandEvent &event){
+
+ int NewMonth = 1;
+ int NewYear = 0;
+
+ // Get the current month and year.
+
+ NewMonth = Moo->GetMonth();
+ NewYear = Moo->GetYear();
+
+ if (NewMonth == 1){
+ NewMonth = 12;
+ NewYear--;
+ } else {
+ NewMonth--;
+ }
+
+ Month = NewMonth;
+ Year = NewYear;
+
+ Moo->UpdateDate(Month, Year);
+
+ // Post an event to the parent control to update the grid.
+
+ wxCommandEvent ChangeGrid(XCCALENDARCTRL_CHANGEGRID);
+ wxPostEvent(this->GetParent(), ChangeGrid);
+
+ UpdateDateButtonText();
+
+}
+
+void XCCalendarManipulator::UpdateDateButtonText(){
+
+ // Update the date text.
+
+ string NewDateText = "";
+
+ switch (Moo->GetMonth()){
+ case 1:
+ NewDateText = _("January");
+ break;
+ case 2:
+ NewDateText = _("February");
+ break;
+ case 3:
+ NewDateText = _("March");
+ break;
+ case 4:
+ NewDateText = _("April");
+ break;
+ case 5:
+ NewDateText = _("May");
+ break;
+ case 6:
+ NewDateText = _("June");
+ break;
+ case 7:
+ NewDateText = _("July");
+ break;
+ case 8:
+ NewDateText = _("August");
+ break;
+ case 9:
+ NewDateText = _("September");
+ break;
+ case 10:
+ NewDateText = _("October");
+ break;
+ case 11:
+ NewDateText = _("November");
+ break;
+ case 12:
+ NewDateText = _("December");
+ break;
+ }
+
+ NewDateText += " ";
+
+ NewDateText += to_string(Year);
+
+ DateButton->SetLabel(NewDateText);
+ szrMain->Layout();
+
+}
+
+int XCCalendarManipulator::GetMonth(){
+
+ return Month;
+
+}
+
+int XCCalendarManipulator::GetYear(){
+
+ return Year;
+
+}
\ No newline at end of file