4 Commits

Author SHA1 Message Date
Simon Rozman
c21aa27e62 URL encoding/decoding added
API level changed to 13
2016-05-31 14:49:52 +02:00
Simon Rozman
e25bce487b Missing #include added 2016-05-24 14:22:00 +02:00
Simon Rozman
cdefd74f3f wxHexValidator extended with leading zeros support
Version set to 1.2
2016-05-23 14:05:37 +02:00
Simon Rozman
28f244cf2f German and Russian translation stub added 2016-05-13 20:03:44 +02:00
16 changed files with 468 additions and 25 deletions

View File

@@ -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 {239F2FF9-E998-4F81-85A8-DA2C0A5F860B} $(WXEXTEND_BIN_DIR) 0 filewxExtend.dll.Win32
compwxExtend.dll.Win32 {7645D753-4A8C-40C6-BD6F-6DDE54F2B8F8} $(WXEXTEND_BIN_DIR) 0 filewxExtend.dll.Win32
!ENDIF
!IF "$(PLAT)" == "x64"
compwxExtend.dll.x64 {AA798500-8E4F-4554-8611-F2C225046606} $(WXEXTEND_BIN_DIR) 256 filewxExtend.dll.x64
compwxExtend.dll.x64 {919135CB-B106-467E-A3DA-CBC463FBB7FF} $(WXEXTEND_BIN_DIR) 256 filewxExtend.dll.x64
!ENDIF
!IF "$(LANG)" == "Sl"
compwxExtend.mo.sl_SI {026F2E74-4190-4B49-820B-94141F32F04B} WXEXTENDLOCSLSIDIR $(MSIBUILD_COMPONENT_ATTRIB_FILE) filewxExtend.mo.sl_SI
compwxExtend.mo.sl_SI {08656BB6-0887-4605-B6D3-20B0444624BA} WXEXTENDLOCSLSIDIR $(MSIBUILD_COMPONENT_ATTRIB_FILE) filewxExtend.mo.sl_SI
!ENDIF
<<NOKEEP
@@ -79,22 +79,22 @@ s$(MSIBUILD_LENGTH_ID) s$(MSIBUILD_LENGTH_ID) l255 i4 S$(MSIBUILD_LENGTH_ID) S20
File File
!IF "$(PLAT)" == "Win32"
!IF "$(CFG)" == "Release"
filewxExtend.dll.Win32 compwxExtend.dll.Win32 WXEXTE~2.DLL|wxExtend11u_vc100.dll 0 0 1536 1
filewxExtend.dll.Win32 compwxExtend.dll.Win32 WXEXTE~2.DLL|wxExtend13u_vc100.dll 0 0 1536 1
!ENDIF
!IF "$(CFG)" == "Debug"
filewxExtend.dll.Win32 compwxExtend.dll.Win32 WXEXTE~4.DLL|wxExtend11ud_vc100.dll 0 0 1536 1
filewxExtend.dll.Win32 compwxExtend.dll.Win32 WXEXTE~4.DLL|wxExtend13ud_vc100.dll 0 0 1536 1
!ENDIF
!ENDIF
!IF "$(PLAT)" == "x64"
!IF "$(CFG)" == "Release"
filewxExtend.dll.x64 compwxExtend.dll.x64 WXEXTE~6.DLL|wxExtend11u_vc100_x64.dll 0 0 1536 1
filewxExtend.dll.x64 compwxExtend.dll.x64 WXEXTE~6.DLL|wxExtend13u_vc100_x64.dll 0 0 1536 1
!ENDIF
!IF "$(CFG)" == "Debug"
filewxExtend.dll.x64 compwxExtend.dll.x64 WXEXTE~8.DLL|wxExtend11ud_vc100_x64.dll 0 0 1536 1
filewxExtend.dll.x64 compwxExtend.dll.x64 WXEXTE~8.DLL|wxExtend13ud_vc100_x64.dll 0 0 1536 1
!ENDIF
!ENDIF
!IF "$(LANG)" == "Sl"
filewxExtend.mo.sl_SI compwxExtend.mo.sl_SI WXEXTE~1.MO|wxExtend11.mo 0 1060 0 1
filewxExtend.mo.sl_SI compwxExtend.mo.sl_SI WXEXTE~1.MO|wxExtend13.mo 0 1060 0 1
!ENDIF
<<NOKEEP

View File

@@ -2,7 +2,7 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros">
<wxExtendVersion>11</wxExtendVersion>
<wxExtendVersion>13</wxExtendVersion>
</PropertyGroup>
<PropertyGroup>
<OutDir>..\..\..\output\$(Platform).$(Configuration)\</OutDir>

View File

@@ -29,6 +29,7 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\src\url.cpp" />
<ClCompile Include="..\src\valhex.cpp" />
<ClCompile Include="..\src\xml.cpp" />
</ItemGroup>
@@ -40,11 +41,14 @@
<ClInclude Include="..\include\wxex\hex.h" />
<ClInclude Include="..\include\wxex\persist\auimanager.h" />
<ClInclude Include="..\include\wxex\persist\dialog.h" />
<ClInclude Include="..\include\wxex\url.h" />
<ClInclude Include="..\include\wxex\valhex.h" />
<ClInclude Include="..\include\wxex\xml.h" />
<ClInclude Include="..\src\stdafx.h" />
</ItemGroup>
<ItemGroup>
<POCompile Include="..\locale\de_DE.po" />
<POCompile Include="..\locale\ru_RU.po" />
<POCompile Include="..\locale\sl_SI.po" />
</ItemGroup>
<ItemGroup>

View File

@@ -43,6 +43,9 @@
<ClCompile Include="..\src\valhex.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\url.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\stdafx.h">
@@ -75,6 +78,9 @@
<ClInclude Include="..\include\wxex\valhex.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\include\wxex\url.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\locale\wxExtend.pot">
@@ -85,6 +91,12 @@
<POCompile Include="..\locale\sl_SI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\de_DE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="..\locale\ru_RU.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\res\wxExtend.rc">

View File

@@ -23,17 +23,17 @@
///
/// wxExtend Version
///
#define wxEXTEND_VERSION 0x01010000
#define wxEXTEND_VERSION 0x01030000
#define wxEXTEND_VERSION_MAJ 1
#define wxEXTEND_VERSION_MIN 1
#define wxEXTEND_VERSION_MIN 3
#define wxEXTEND_VERSION_REV 0
#define wxEXTEND_VERSION_BUILD 0
#define wxEXTEND_VERSION_STR "1.1"
#define wxEXTEND_VERSION_STR "1.3"
#define wxEXTEND_BUILD_YEAR_STR "2016"
#define wxExtendVersion "11"
#define wxExtendVersion "13"
#if !defined(RC_INVOKED) && !defined(MIDL_PASS)

View File

@@ -23,6 +23,7 @@
#include <wx/buffer.h>
#include <wx/ffile.h>
#include <wx/log.h>
#include <wx/string.h>
#include <Wincrypt.h>

View File

@@ -19,6 +19,8 @@
#pragma once
#include "common.h"
#include "wx/string.h"
#include "wx/buffer.h"
@@ -32,6 +34,7 @@
/// of a buffer of given length
///
/// \param[in] len Length of the buffer
///
/// \returns Maximum encoded representation size (in characters)
///
inline size_t wxHexEncodedSize(size_t len)
@@ -110,6 +113,7 @@ enum wxHexDecodeMode
/// length
///
/// \param[in] len Length of the hex encoded string
///
/// \returns Maximum decoded representation size (in bytes)
///
inline size_t wxHexDecodedSize(size_t len)

221
include/wxex/url.h Normal file
View File

@@ -0,0 +1,221 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "common.h"
#include "wx/string.h"
#include "wx/buffer.h"
///
/// Return if given character should be protected for URL encoding
///
/// \param[in] chr ASCII character
///
/// \returns
/// - \c true if character should be protected
/// - \c false otherwise
///
inline bool wxURLIsProtected(char chr)
{
switch (chr) {
case ' ':
case '!':
case '*':
case '\'':
case '(':
case ')':
case ';':
case ':':
case '@':
case '&':
case '=':
case '+':
case '$':
case ',':
case '/':
case '?':
case '#':
case '[':
case ']': return true;
}
return chr < 0x20;
}
///
/// Return the size needed for the buffer containing the encoded representation
/// of a string of given length
///
/// \param[in] src Source string to encode
/// \param[in] srcLen Length of \p src string (in bytes)
///
/// \returns Maximum encoded representation size (in characters)
///
inline size_t wxURLEncodedSize(size_t len)
{
return len*3;
}
///
/// Raw URL encoding function which encodes the contents of a string of the
/// specified length into the buffer of the specified size
///
/// \param[out] dst Destination buffer to receive URL encoded data
/// \param[in] dstLen Length of \p dst buffer (in characters)
/// \param[in] src Source string to encode
/// \param[in] srcLen Length of \p src string (in bytes)
///
/// \returns The length of the encoded data or wxCONV_FAILED if the buffer is not
/// large enough; to determine the needed size you can either allocate a buffer
/// of \c{wxURLEncodedSize(srcLen)} size or call the function with NULL string in
/// which case the required size will be returned
///
size_t WXEXTEND_API wxURLEncode(char *dst, size_t dstLen, const char *src, size_t srcLen);
///
/// URL encoding function which encodes the contents of a string of the
/// specified length into the wxString
///
/// \param[in] src Source string to encode
/// \param[in] srcLen Length of \p src string (in bytes)
///
/// \returns The URL encoded string
///
inline wxString wxURLEncode(const char *src, size_t srcLen)
{
const size_t dstLen = wxURLEncodedSize(srcLen);
wxCharBuffer dst(dstLen);
dst.shrink(wxURLEncode(dst.data(), dstLen, src, srcLen));
return dst;
}
///
/// URL encoding function which encodes the contents of a string into the wxString
///
/// \param[in] str Source string to encode
///
/// \returns The URL encoded string
///
inline wxString wxURLEncode(const wxString& str)
{
return wxURLEncode(str.GetData(), str.Length());
}
///
/// URL encoding function which encodes the contents of a buffer into the wxString
///
/// \param[in] buf Source buffer to encode
///
/// \returns The URL encoded string
///
inline wxString wxURLEncode(const wxMemoryBuffer& buf)
{
return wxURLEncode((const char*)buf.GetData(), buf.GetDataLen());
}
// ----------------------------------------------------------------------------
// Decoding Functions
// ----------------------------------------------------------------------------
///
/// Return the buffer size necessary for decoding a URL string of the given
/// length
///
/// \param[in] len Length of the URL encoded string
///
/// \returns Maximum decoded representation size (in bytes)
///
inline size_t wxURLDecodedSize(size_t len)
{
return len;
}
///
/// Raw decoding function which decodes the contents of the string of specified
/// length (or zero terminated by default) into the provided buffer of the given
/// size
///
/// \param[out] dst Destination buffer to receive decoded data
/// \param[in] dstLen Length of \p dst buffer (in bytes)
/// \param[in] src Source buffer to decode
/// \param[in] srcLen Length of \p src buffer (in characters) or wxNO_LEN for zero terminated strings
///
/// \returns The length of the decoded data or wxCONV_FAILED if the buffer is not
/// large enough; to determine the needed size you can either allocate a buffer
/// of \c{wxURLDecodedSize(srcLen)} size or call the function with NULL string in
/// which case the required size will be returned
///
size_t WXEXTEND_API wxURLDecode(char *dst, size_t dstLen, const char *src, size_t srcLen = wxNO_LEN);
///
/// Decoding function which decodes the contents of the string into the provided buffer of the given size
///
/// \param[out] dst Destination buffer to receive decoded data
/// \param[in] dstLen Length of \p dst buffer (in bytes)
/// \param[in] src Source string to decode
///
/// \returns The length of the decoded data or wxCONV_FAILED if the buffer is not
/// large enough; to determine the needed size you can either allocate a buffer
/// of \c{wxURLDecodedSize(srcLen)} size or call the function with NULL string in
/// which case the required size will be returned
///
inline size_t wxURLDecode(char *dst, size_t dstLen, const wxString& src)
{
// don't use str.length() here as the ASCII buffer is shorter than it is for
// strings with embedded NULs
return wxURLDecode(dst, dstLen, src.ToAscii(), wxNO_LEN);
}
///
/// Decoding function which decodes the contents of the string of specified
/// length (or zero terminated by default) into the buffer
///
/// \param[in] src Source buffer to decode
/// \param[in] srcLen Length of \p src buffer (in characters) or wxNO_LEN for zero terminated strings
///
/// \returns Destination buffer with decoded data or an empty buffer if an error occured during decoding
///
wxMemoryBuffer WXEXTEND_API wxURLDecode(const char *src, size_t srcLen = wxNO_LEN);
///
/// Decoding function which decodes the contents of the string into the buffer
///
/// \param[in] src Source string to decode
///
/// \returns Destination buffer with decoded data or an empty buffer if an error occured during decoding
///
inline wxMemoryBuffer wxURLDecode(const wxString& src)
{
// don't use str.length() here as the ASCII buffer is shorter than it for
// strings with embedded NULs
return wxURLDecode(src.ToAscii(), wxNO_LEN);
}

View File

@@ -51,8 +51,14 @@ protected:
#endif
wxString ToString(LongestValueType value) const;
protected:
void DoSetWidth(unsigned int width) { m_width = width; }
private:
virtual bool IsCharOk(const wxString& val, int pos, wxChar ch) const;
private:
unsigned int m_width; ///< Preferred width of the string - zero padding (<=1 disables padding)
};
@@ -65,8 +71,9 @@ class wxHexValidator : public wxPrivate::wxNumValidator<wxHexValidatorBase, T>
public:
typedef wxPrivate::wxNumValidator<wxHexValidatorBase, T> Base;
wxHexValidator(ValueType *value = NULL, int style = wxNUM_VAL_DEFAULT) : Base(value, style)
wxHexValidator(ValueType *value = NULL, int style = wxNUM_VAL_DEFAULT, unsigned int width = 0) : Base(value, style)
{
this->DoSetWidth(width);
this->DoSetMin(std::numeric_limits<ValueType>::min());
this->DoSetMax(std::numeric_limits<ValueType>::max());
}

View File

@@ -19,9 +19,10 @@
#pragma once
#include "crypto.h"
#include "common.h"
#include "crypto.h"
#include <wx/string.h>
#include <wx/xml/xml.h>

28
locale/de_DE.po Normal file
View File

@@ -0,0 +1,28 @@
msgid ""
msgstr ""
"Project-Id-Version: wxExtend\n"
"POT-Creation-Date: 2016-05-13 19:22+0200\n"
"PO-Revision-Date: 2016-05-13 19:33+0200\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.7\n"
"X-Poedit-Basepath: .\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n"
#: include/wxex/appbar.h:981
msgid ""
"There is already an auto hidden bar on this edge.\n"
"Only one auto hidden bar is allowed on each edge.\n"
"Auto-hide feature is now off."
msgstr ""
#: include/wxex/appbar.h:981
#, fuzzy
msgid "Warning"
msgstr "Warnung: "

28
locale/ru_RU.po Normal file
View File

@@ -0,0 +1,28 @@
msgid ""
msgstr ""
"Project-Id-Version: wxExtend\n"
"POT-Creation-Date: 2016-05-13 19:23+0200\n"
"PO-Revision-Date: 2016-05-13 19:32+0200\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"Language: ru_RU\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.7\n"
"X-Poedit-Basepath: .\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n"
#: include/wxex/appbar.h:981
msgid ""
"There is already an auto hidden bar on this edge.\n"
"Only one auto hidden bar is allowed on each edge.\n"
"Auto-hide feature is now off."
msgstr ""
#: include/wxex/appbar.h:981
msgid "Warning"
msgstr ""

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: wxExtend\n"
"POT-Creation-Date: 2016-03-14 17:16+0100\n"
"PO-Revision-Date: 2016-03-14 17:20+0100\n"
"PO-Revision-Date: 2016-05-13 19:32+0200\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"Language: sl_SI\n"
@@ -10,13 +10,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.7\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-Basepath: .\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: src\n"
"X-Poedit-SearchPath-1: include\n"
#: include/wxex/appbar.h:981
msgid ""

View File

@@ -27,6 +27,7 @@
#include "../include/wxex/comutils.h"
#include "../include/wxex/crypto.h"
#include "../include/wxex/hex.h"
#include "../include/wxex/url.h"
#include "../include/wxex/valhex.h"
#include "../include/wxex/xml.h"

134
src/url.cpp Normal file
View File

@@ -0,0 +1,134 @@
/*
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 <http://www.gnu.org/licenses/>.
*/
#include "stdafx.h"
size_t WXEXTEND_API wxURLEncode(char *dst, size_t dstLen, const char *src, size_t srcLen)
{
wxCHECK_MSG(src, wxCONV_FAILED, wxT("NULL input buffer"));
static const char bhex[] = "0123456789ABCDEF";
size_t encLen = 0;
for (size_t i = 0; i < srcLen && src[i]; i++) {
if (wxURLIsProtected(src[i])) {
encLen += 3;
if ( dst )
{
if ( encLen > dstLen )
return wxCONV_FAILED;
*dst++ = '%';
*dst++ = bhex[((unsigned char)src[i]) >> 4];
*dst++ = bhex[((unsigned char)src[i]) & 0x0f];
}
} else {
encLen ++;
if ( dst )
{
if ( encLen > dstLen )
return wxCONV_FAILED;
*dst++ = src[i];
}
}
}
// Zero terminate.
if ( dst && encLen < dstLen )
*dst++ = 0;
return encLen;
}
size_t WXEXTEND_API wxURLDecode(char *dst, size_t dstLen, const char *src, size_t srcLen)
{
wxCHECK_MSG(src, wxCONV_FAILED, wxT("NULL input buffer"));
static const char bhex[] = "0123456789ABCDEF";
size_t i, decLen = 0;
for (i = 0 ; i < srcLen && src[i];) {
decLen ++;
if (src[i] == '%') {
// Decode % escaped hex value to character.
char c = 0;
size_t j = i + 1;
for (size_t j_max = i + 3; j < j_max && j < srcLen; j++) {
char x = src[j];
c <<= 4;
if ('0' <= x && x <= '9') c += x - '0';
else if ('A' <= x && x <= 'F') c += x - 'A' + 10;
else if ('a' <= x && x <= 'f') c += x - 'a' + 10;
else break;
}
if (c) {
if ( dst )
{
if ( decLen > dstLen )
return wxCONV_FAILED;
*dst++ = c;
}
i = j;
continue;
}
}
if ( dst )
{
if ( decLen > dstLen )
return wxCONV_FAILED;
*dst++ = src[i];
}
i++;
}
// Zero terminate.
if ( dst && decLen < dstLen )
*dst++ = 0;
return decLen;
}
wxMemoryBuffer WXEXTEND_API wxURLDecode(const char *src, size_t srcLen)
{
wxMemoryBuffer buf;
wxCHECK_MSG( src, buf, wxT("NULL input buffer") );
if ( srcLen == wxNO_LEN )
srcLen = strlen(src);
size_t len = wxURLDecodedSize(srcLen);
len = wxURLDecode((char*)buf.GetWriteBuf(len), len, src, srcLen);
if ( len == wxCONV_FAILED )
len = 0;
buf.SetDataLen(len);
return buf;
}

View File

@@ -24,12 +24,16 @@
// wxHexValidatorBase
//////////////////////////////////////////////////////////////////////////
wxHexValidatorBase::wxHexValidatorBase(int style) : wxIntegerValidatorBase(style)
wxHexValidatorBase::wxHexValidatorBase(int style) :
m_width(0),
wxIntegerValidatorBase(style)
{
}
wxHexValidatorBase::wxHexValidatorBase(const wxHexValidatorBase& other) : wxIntegerValidatorBase(other)
wxHexValidatorBase::wxHexValidatorBase(const wxHexValidatorBase& other) :
m_width(other.m_width),
wxIntegerValidatorBase(other)
{
}
@@ -59,13 +63,13 @@ bool wxHexValidatorBase::FromString(const wxString &s, wxLongLong_t *value)
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;
unsigned int offset = sizeof(LongestValueType)*8 - 4, offset_s = m_width*4 - 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);
while (m && !x && offset >= offset_s) {
x = (unsigned int)((m & (wxULongLong_t)value) >> offset);
m >>= 4, offset -= 4;
}
@@ -74,7 +78,7 @@ wxString wxHexValidatorBase::ToString(LongestValueType value) const
// Rest of the digits.
while (m) {
x = (int)((m & (wxULongLong_t)value) >> offset);
x = (unsigned int)((m & (wxULongLong_t)value) >> offset);
m >>= 4, offset -= 4;
str += (wxStringCharType)((x < 0xa ? wxT('0') : hexa) + x);
}