From 9a84daaa816cc3f4f64880594512f4098c0e29d9 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Mon, 28 Aug 2017 18:21:06 +0100 Subject: [PATCH] XABPriorityCtrl: Priority control implemented --- source/widgets/XABPriorityCtrl.cpp | 138 +++++++++++++++++++++++++++++ source/widgets/XABPriorityCtrl.h | 53 +++++++++++ 2 files changed, 191 insertions(+) create mode 100644 source/widgets/XABPriorityCtrl.cpp create mode 100644 source/widgets/XABPriorityCtrl.h diff --git a/source/widgets/XABPriorityCtrl.cpp b/source/widgets/XABPriorityCtrl.cpp new file mode 100644 index 0000000..23e68af --- /dev/null +++ b/source/widgets/XABPriorityCtrl.cpp @@ -0,0 +1,138 @@ +// XABPriorityCtrl.cpp - XABPriorityCtrl widget +// +// (c) 2017 Xestia Software Development. +// +// This file is part of Xestia Address Book. +// +// 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 Address Book. If not, see + +#include "XABPriorityCtrl.h" + +XABPriorityCtrl::XABPriorityCtrl(wxWindow *parent) : + wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxEXPAND, "") +{ + parentControl = parent; + + // Setup the sizers. + mainSizer = new wxFlexGridSizer(2, 3, 0, 0); + sliderSizer = new wxFlexGridSizer(2, 1, 0, 0); + sliderLabelSizer = new wxBoxSizer(wxHORIZONTAL); + + mainSizer->AddGrowableCol(2); + + // Setup the controls. + chkPriority = new wxCheckBox(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDefaultSize, 0); + txtPriority = new wxTextCtrl(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxTextCtrlNameStr); + sliPriority = new wxSlider(this, wxID_ANY, 0, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL); + highLabel = new wxStaticText(this, wxID_ANY, _("High"), wxDefaultPosition, wxDefaultSize, 0); + lowLabel = new wxStaticText(this, wxID_ANY, _("Low"), wxDefaultPosition, wxDefaultSize, 0); + + // Attach the controls. + mainSizer->Add(chkPriority, 0, wxALL, 5); + mainSizer->Add(txtPriority, 0, wxALL, 5); + mainSizer->Add(sliPriority, 1, wxEXPAND, 5); + + /*sliderSizer->Add(sliPriority, 1, wxEXPAND, 5);*/ + + sliderLabelSizer->Add(highLabel, 1, wxALIGN_LEFT, 5); + sliderLabelSizer->Add(0, 1, wxEXPAND, 5); + sliderLabelSizer->Add(lowLabel, 1, wxALIGN_RIGHT, 5); + + mainSizer->Add(0, 0, 0, 5); + mainSizer->Add(0, 0, 0, 5); + mainSizer->Add(sliderLabelSizer, 1, wxEXPAND, 5); + + txtPriority->SetMaxLength(3); + + // Disable the text, slider and static text controls by default. + txtPriority->Enable(false); + sliPriority->Enable(false); + highLabel->Enable(false); + lowLabel->Enable(false); + + // Set the main sizer for the control. + this->SetSizer(mainSizer); + + Connect(wxEVT_SLIDER, wxCommandEventHandler(XABPriorityCtrl::SliderEvent), NULL, this ); + Connect(wxEVT_CHECKBOX, wxCommandEventHandler(XABPriorityCtrl::EnableControls), NULL, this); + Connect(wxEVT_TEXT, wxCommandEventHandler(XABPriorityCtrl::TextEvent), NULL, this); +} + +XABPriorityCtrl::~XABPriorityCtrl() +{ +} + +void XABPriorityCtrl::EnableControls(wxCommandEvent &event) +{ + EnablePriority(chkPriority->IsChecked()); +} + +void XABPriorityCtrl::SliderEvent(wxCommandEvent &event) +{ + UpdateTextValue(); +} + +void XABPriorityCtrl::TextEvent(wxCommandEvent &event) +{ + long value; + if (txtPriority->GetValue().ToLong(&value)) + { + sliPriority->SetValue(value); + } +} + +void XABPriorityCtrl::EnablePriority(bool enable) +{ + if (enable) + { + chkPriority->SetValue(true); + txtPriority->Enable(true); + sliPriority->Enable(true); + highLabel->Enable(true); + lowLabel->Enable(true); + } + else + { + chkPriority->SetValue(false); + txtPriority->Enable(false); + sliPriority->Enable(false); + highLabel->Enable(false); + lowLabel->Enable(false); + } +} + +void XABPriorityCtrl::UpdateTextValue() +{ + txtPriority->SetValue(wxString::Format("%i", sliPriority->GetValue())); +} + +void XABPriorityCtrl::UpdateSlider(int value) +{ + sliPriority->SetValue(value); +} + +bool XABPriorityCtrl::IsPriorityChecked() +{ + return chkPriority->IsChecked(); +} + +int XABPriorityCtrl::GetValue() +{ + return sliPriority->GetValue(); +} + +void XABPriorityCtrl::SetValue(int value) +{ + sliPriority->SetValue(value); + txtPriority->SetValue(wxString::Format("%i", value)); +} \ No newline at end of file diff --git a/source/widgets/XABPriorityCtrl.h b/source/widgets/XABPriorityCtrl.h new file mode 100644 index 0000000..b14223a --- /dev/null +++ b/source/widgets/XABPriorityCtrl.h @@ -0,0 +1,53 @@ +// XABPriorityCtrl.h - XABPriorityCtrl widget header +// +// (c) 2017 Xestia Software Development. +// +// This file is part of Xestia Address Book. +// +// 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 Address Book. If not, see + +#ifndef __WIDGETS_XABPRIORITYCTRL_H__ +#define __WIDGETS_XABPRIORITYCTRL_H__ + +#include + +class XABPriorityCtrl : public wxPanel +{ + private: + wxWindow *parentControl = nullptr; + + wxFlexGridSizer *mainSizer = nullptr; + wxFlexGridSizer *sliderSizer = nullptr; + wxBoxSizer *sliderLabelSizer = nullptr; + wxCheckBox *chkPriority = nullptr; + wxTextCtrl *txtPriority = nullptr; + wxSlider *sliPriority = nullptr; + wxStaticText *lowLabel = nullptr; + wxStaticText *highLabel = nullptr; + protected: + void UpdateTextValue(); + void UpdateSlider(int value); + void SliderEvent(wxCommandEvent &event); + void TextEvent(wxCommandEvent &event); + void EnableControls(wxCommandEvent &event); + public: + XABPriorityCtrl(wxWindow *parent); + ~XABPriorityCtrl(); + void EnablePriority(bool enable); + bool IsPriorityChecked(); + int GetValue(); + void SetValue(int value); +}; + + +#endif -- 2.39.2