diff --git a/MSIBuild/Makefile b/MSIBuild/Makefile index f372578..b68fef4 100644 --- a/MSIBuild/Makefile +++ b/MSIBuild/Makefile @@ -40,13 +40,13 @@ Component ComponentId Directory_ Attributes Condition KeyPath s$(MSIBUILD_LENGTH_ID) S38 s$(MSIBUILD_LENGTH_ID) i2 S255 S$(MSIBUILD_LENGTH_ID) Component Component !IF "$(PLAT)" == "Win32" -compwxExtend.dll.Win32 {CF0DA67E-4D98-4059-9ECA-CB0DE44E92EB} $(WXEXTEND_BIN_DIR) 0 filewxExtend.dll.Win32 +compwxExtend.dll.Win32 {239F2FF9-E998-4F81-85A8-DA2C0A5F860B} $(WXEXTEND_BIN_DIR) 0 filewxExtend.dll.Win32 !ENDIF !IF "$(PLAT)" == "x64" -compwxExtend.dll.x64 {02F1022D-AA80-4FCA-A6F2-C576C405E1B2} $(WXEXTEND_BIN_DIR) 256 filewxExtend.dll.x64 +compwxExtend.dll.x64 {AA798500-8E4F-4554-8611-F2C225046606} $(WXEXTEND_BIN_DIR) 256 filewxExtend.dll.x64 !ENDIF !IF "$(LANG)" == "Sl" -compwxExtend.mo.sl_SI {60770F71-A7B4-4B20-9535-726049A5D412} WXEXTENDLOCSLSIDIR $(MSIBUILD_COMPONENT_ATTRIB_FILE) filewxExtend.mo.sl_SI +compwxExtend.mo.sl_SI {026F2E74-4190-4B49-820B-94141F32F04B} WXEXTENDLOCSLSIDIR $(MSIBUILD_COMPONENT_ATTRIB_FILE) filewxExtend.mo.sl_SI !ENDIF < - 10 + 11 ..\..\..\output\$(Platform).$(Configuration)\ @@ -11,6 +11,9 @@ WXEXTEND;%(PreprocessorDefinitions) + + $(OutDir)..\locale\%(Filename)\$(ProjectName)$(wxExtendVersion).mo + diff --git a/build/wxExtend.vcxproj b/build/wxExtend.vcxproj index 6df4f9d..54be095 100644 --- a/build/wxExtend.vcxproj +++ b/build/wxExtend.vcxproj @@ -29,6 +29,7 @@ Create Create + @@ -39,6 +40,7 @@ + diff --git a/build/wxExtend.vcxproj.filters b/build/wxExtend.vcxproj.filters index 4dea90a..9849188 100644 --- a/build/wxExtend.vcxproj.filters +++ b/build/wxExtend.vcxproj.filters @@ -40,6 +40,9 @@ Source Files + + Source Files + @@ -69,6 +72,9 @@ Header Files\persist + + Header Files + diff --git a/include/wxex/common.h b/include/wxex/common.h index 018b82e..8aacf6d 100644 --- a/include/wxex/common.h +++ b/include/wxex/common.h @@ -23,16 +23,18 @@ /// /// wxExtend Version /// -#define wxEXTEND_VERSION 0x01000100 +#define wxEXTEND_VERSION 0x01010000 #define wxEXTEND_VERSION_MAJ 1 -#define wxEXTEND_VERSION_MIN 0 -#define wxEXTEND_VERSION_REV 1 +#define wxEXTEND_VERSION_MIN 1 +#define wxEXTEND_VERSION_REV 0 #define wxEXTEND_VERSION_BUILD 0 -#define wxEXTEND_VERSION_STR "1.0.1" +#define wxEXTEND_VERSION_STR "1.1" #define wxEXTEND_BUILD_YEAR_STR "2016" +#define wxExtendVersion "11" + #if !defined(RC_INVOKED) && !defined(MIDL_PASS) diff --git a/include/wxex/valhex.h b/include/wxex/valhex.h new file mode 100644 index 0000000..f0fbe88 --- /dev/null +++ b/include/wxex/valhex.h @@ -0,0 +1,78 @@ +/* + Copyright 2015-2016 Amebis + + This file is part of wxExtend. + + wxExtend 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, either version 3 of the License, or + (at your option) any later version. + + wxExtend 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 wxExtend. If not, see . +*/ + +#pragma once + +#include "common.h" + +#include + + +/// +/// Bit masks used for hexadecimal validator styles. +/// +enum wxHexValidatorStyle +{ + // Do not use values used by wxNumValidatorStyle flags, since this is the extension. + wxNUM_VAL_HEX_LOWERCASE = 0x1000, +}; + + +/// +/// Base class for hexadecimal validator +/// +class WXEXTEND_API wxHexValidatorBase : public wxIntegerValidatorBase +{ +protected: + wxHexValidatorBase(int style); + wxHexValidatorBase(const wxHexValidatorBase& other); + + bool IsMinusOk(const wxString& val, int pos) const; + + static bool FromString(const wxString& s, long *value); +#ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG + static bool FromString(const wxString &s, wxLongLong_t *value); +#endif + wxString ToString(LongestValueType value) const; + +private: + virtual bool IsCharOk(const wxString& val, int pos, wxChar ch) const; +}; + + +/// +/// Validator for hexadecimal entries +/// +template +class wxHexValidator : public wxPrivate::wxNumValidator +{ +public: + typedef wxPrivate::wxNumValidator Base; + + wxHexValidator(ValueType *value = NULL, int style = wxNUM_VAL_DEFAULT) : Base(value, style) + { + this->DoSetMin(std::numeric_limits::min()); + this->DoSetMax(std::numeric_limits::max()); + } + + virtual wxObject *Clone() const { return new wxHexValidator(*this); } + +private: + wxDECLARE_NO_ASSIGN_CLASS(wxHexValidator); +}; diff --git a/src/stdafx.h b/src/stdafx.h index 986572d..e823ab8 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -27,6 +27,7 @@ #include "../include/wxex/comutils.h" #include "../include/wxex/crypto.h" #include "../include/wxex/hex.h" +#include "../include/wxex/valhex.h" #include "../include/wxex/xml.h" #include "../include/wxex/common.h" diff --git a/src/valhex.cpp b/src/valhex.cpp new file mode 100644 index 0000000..d875222 --- /dev/null +++ b/src/valhex.cpp @@ -0,0 +1,98 @@ +/* + Copyright 2015-2016 Amebis + + This file is part of wxExtend. + + wxExtend 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, either version 3 of the License, or + (at your option) any later version. + + wxExtend 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 wxExtend. If not, see . +*/ + +#include "stdafx.h" + + +////////////////////////////////////////////////////////////////////////// +// wxHexValidatorBase +////////////////////////////////////////////////////////////////////////// + +wxHexValidatorBase::wxHexValidatorBase(int style) : wxIntegerValidatorBase(style) +{ +} + + +wxHexValidatorBase::wxHexValidatorBase(const wxHexValidatorBase& other) : wxIntegerValidatorBase(other) +{ +} + + +bool wxHexValidatorBase::IsMinusOk(const wxString& val, int pos) const +{ + // Minus is never OK with hexadecimal numbers. + return false; +} + + +bool wxHexValidatorBase::FromString(const wxString& s, long *value) +{ + return s.ToLong(value, 16); +} + + +#ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG + +bool wxHexValidatorBase::FromString(const wxString &s, wxLongLong_t *value) +{ + return s.ToLongLong(value, 16); +} + +#endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG + +wxString wxHexValidatorBase::ToString(LongestValueType value) const +{ + const wxStringCharType hexa = (HasFlag((wxNumValidatorStyle)wxNUM_VAL_HEX_LOWERCASE) ? wxT('a') : wxT('A')) - 0xa; + int offset = sizeof(LongestValueType)*8 - 4; + wxULongLong_t m = ((wxULongLong_t)0xf) << offset; + unsigned int x = 0; + + // Skip leading zeros. + while (m && !x) { + x = (int)((m & (wxULongLong_t)value) >> offset); + m >>= 4, offset -= 4; + } + + // First digit. + wxString str(1, (wxStringCharType)((x < 0xa ? wxT('0') : hexa) + x)); + + // Rest of the digits. + while (m) { + x = (int)((m & (wxULongLong_t)value) >> offset); + m >>= 4, offset -= 4; + str += (wxStringCharType)((x < 0xa ? wxT('0') : hexa) + x); + } + + return str; +} + + +bool wxHexValidatorBase::IsCharOk(const wxString& val, int pos, wxChar ch) const +{ + // We only accept hexadecimal digits here. + if ((ch < '0' || ch > '9') && (ch < 'A' || ch > 'F') && (ch < 'a' || ch > 'f')) + return false; + + // And the value after insertion needs to be in the defined range. + LongestValueType value; + if (!FromString(GetValueAfterInsertingChar(val, pos, ch), &value)) + return false; + + return IsInRange(value); +}