From bd6336c629841c6db3a6ca53a936d629d34db53b Mon Sep 17 00:00:00 2001 From: Daniel Wilhelm Date: Fri, 18 Apr 2014 17:15:16 +0200 Subject: 4.1 --- wx+/choice_enum.h | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 wx+/choice_enum.h (limited to 'wx+/choice_enum.h') diff --git a/wx+/choice_enum.h b/wx+/choice_enum.h new file mode 100644 index 00000000..4565bf81 --- /dev/null +++ b/wx+/choice_enum.h @@ -0,0 +1,120 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) 2008-2011 ZenJu (zhnmju123 AT gmx.de) * +// ************************************************************************** + +#ifndef WX_CHOICE_ENUM_H_INCLUDED +#define WX_CHOICE_ENUM_H_INCLUDED + +#include +#include + +//handle mapping of enum values to wxChoice controls +/* +Example: + +Member variable: + zen::EnumDescrList enumDescrMap; + +Constructor code: + enumDescrMap. + add(ON_ERROR_POPUP , _("Show pop-up") , _("Show pop-up on errors or warnings")). + add(ON_ERROR_IGNORE, _("Ignore errors") , _("Hide all error and warning messages")). + add(ON_ERROR_EXIT , _("Exit instantly"), _("Abort synchronization immediately")); + +Set enum value: + setEnumVal(enumDescrMap, *m_choiceHandleError, value); + +Get enum value: + value = getEnumVal(enumDescrMap, *m_choiceHandleError) + +Update enum tooltips (after user changed selection): + updateTooltipEnumVal(enumDescrMap, *m_choiceHandleError); +*/ + + +namespace zen +{ +template +struct EnumDescrList +{ + EnumDescrList& add(Enum value, const wxString& text, const wxString& tooltip = wxEmptyString) + { + descrList.push_back(std::make_pair(value, std::make_pair(text, tooltip))); + return *this; + } + typedef std::vector > > DescrList; + DescrList descrList; +}; +template void setEnumVal(const EnumDescrList& mapping, wxChoice& ctrl, Enum value); +template Enum getEnumVal(const EnumDescrList& mapping, const wxChoice& ctrl); +template void updateTooltipEnumVal(const EnumDescrList& mapping, wxChoice& ctrl); + + + + + + + + + + + + + + + + + + + +//--------------- inline impelementation ------------------------------------------- +template +void setEnumVal(const EnumDescrList& mapping, wxChoice& ctrl, Enum value) +{ + ctrl.Clear(); + + int selectedPos = 0; + for (typename EnumDescrList::DescrList::const_iterator i = mapping.descrList.begin(); i != mapping.descrList.end(); ++i) + { + ctrl.Append(i->second.first); + if (i->first == value) + { + selectedPos = i - mapping.descrList.begin(); + + if (!i->second.second.empty()) + ctrl.SetToolTip(i->second.second); + } + } + + ctrl.SetSelection(selectedPos); +} + +template +Enum getEnumVal(const EnumDescrList& mapping, const wxChoice& ctrl) +{ + const int selectedPos = ctrl.GetSelection(); + + if (0 <= selectedPos && selectedPos < static_cast(mapping.descrList.size())) + return mapping.descrList[selectedPos].first; + else + { + assert(false); + return Enum(0); + } +} + +template void updateTooltipEnumVal(const EnumDescrList& mapping, wxChoice& ctrl) +{ + const Enum value = getEnumVal(mapping, ctrl); + + for (typename EnumDescrList::DescrList::const_iterator i = mapping.descrList.begin(); i != mapping.descrList.end(); ++i) + if (i->first == value) + ctrl.SetToolTip(i->second.second); +} + +} + + +#endif //WX_CHOICE_ENUM_H_INCLUDED -- cgit