the wxFormatString hack used in wxFileTypeInfo variadic ctors doesn't work anymore, replaced with something that does

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48233 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2007-08-20 23:16:02 +00:00
parent bec7b402c4
commit 278d7ab446
2 changed files with 52 additions and 73 deletions

View File

@@ -125,25 +125,32 @@ private:
const wxString& desc, const wxString& desc,
va_list argptr); va_list argptr);
#if !wxUSE_UTF8_LOCALE_ONLY void VarArgInit(const wxString *mimeType,
void VarArgInitWchar(const wxChar *mimeType, const wxString *openCmd,
const wxChar *openCmd, const wxString *printCmd,
const wxChar *printCmd, const wxString *desc,
const wxChar *desc, // the other parameters form a NULL terminated list of
// the other parameters form a NULL terminated list of // extensions
// extensions ...);
...);
#endif
#if wxUSE_UNICODE_UTF8
void VarArgInitUtf8(const char *mimeType,
const char *openCmd,
const char *printCmd,
const char *desc,
// the other parameters form a NULL terminated list of
// extensions
...);
#endif
public: public:
// NB: This is a helper to get implicit conversion of variadic ctor's
// fixed arguments into something that can be passed to VarArgInit().
// Do not use, it's used by the ctor only.
struct WXDLLIMPEXP_BASE CtorString
{
CtorString(const char *str) : m_str(str) {}
CtorString(const wchar_t *str) : m_str(str) {}
CtorString(const wxString& str) : m_str(str) {}
CtorString(const wxCStrData& str) : m_str(str) {}
CtorString(const wxCharBuffer& str) : m_str(str) {}
CtorString(const wxWCharBuffer& str) : m_str(str) {}
operator const wxString*() const { return &m_str; }
wxString m_str;
};
// ctors // ctors
// a normal item // a normal item
@@ -156,14 +163,11 @@ public:
// // just NULL!) // // just NULL!)
// ...); // ...);
WX_DEFINE_VARARG_FUNC_CTOR(wxFileTypeInfo, WX_DEFINE_VARARG_FUNC_CTOR(wxFileTypeInfo,
// NB: these are not format strings, using 4, (const CtorString&,
// wxFormatString here is a hack to get const CtorString&,
// implicit conversion to wchar_t*/char* const CtorString&,
4, (const wxFormatString&, const CtorString&),
const wxFormatString&, VarArgInit, VarArgInit)
const wxFormatString&,
const wxFormatString&),
VarArgInitWchar, VarArgInitUtf8)
#ifdef __WATCOMC__ #ifdef __WATCOMC__
// workaround for http://bugzilla.openwatcom.org/show_bug.cgi?id=351 // workaround for http://bugzilla.openwatcom.org/show_bug.cgi?id=351
WX_VARARG_WATCOM_WORKAROUND_CTOR( WX_VARARG_WATCOM_WORKAROUND_CTOR(
@@ -172,40 +176,40 @@ public:
const wxString&, const wxString&,
const wxString&, const wxString&,
const wxString&), const wxString&),
(wxFormatString(f1), (CtorString(f1),
wxFormatString(f2), CtorString(f2),
wxFormatString(f3), CtorString(f3),
wxFormatString(f4))); CtorString(f4)));
WX_VARARG_WATCOM_WORKAROUND_CTOR( WX_VARARG_WATCOM_WORKAROUND_CTOR(
wxFileTypeInfo, wxFileTypeInfo,
4, (const wxCStrData&, 4, (const wxCStrData&,
const wxCStrData&, const wxCStrData&,
const wxCStrData&, const wxCStrData&,
const wxCStrData&), const wxCStrData&),
(wxFormatString(f1), (CtorString(f1),
wxFormatString(f2), CtorString(f2),
wxFormatString(f3), CtorString(f3),
wxFormatString(f4))); CtorString(f4)));
WX_VARARG_WATCOM_WORKAROUND_CTOR( WX_VARARG_WATCOM_WORKAROUND_CTOR(
wxFileTypeInfo, wxFileTypeInfo,
4, (const char*, 4, (const char*,
const char*, const char*,
const char*, const char*,
const char*), const char*),
(wxFormatString(f1), (CtorString(f1),
wxFormatString(f2), CtorString(f2),
wxFormatString(f3), CtorString(f3),
wxFormatString(f4))); CtorString(f4)));
WX_VARARG_WATCOM_WORKAROUND_CTOR( WX_VARARG_WATCOM_WORKAROUND_CTOR(
wxFileTypeInfo, wxFileTypeInfo,
4, (const wchar_t*, 4, (const wchar_t*,
const wchar_t*, const wchar_t*,
const wchar_t*, const wchar_t*,
const wchar_t*), const wchar_t*),
(wxFormatString(f1), (CtorString(f1),
wxFormatString(f2), CtorString(f2),
wxFormatString(f3), CtorString(f3),
wxFormatString(f4))); CtorString(f4)));
#endif #endif
// the array elements correspond to the parameters of the ctor above in // the array elements correspond to the parameters of the ctor above in

View File

@@ -146,44 +146,19 @@ void wxFileTypeInfo::DoVarArgInit(const wxString& mimeType,
} }
} }
// NB: DoVarArgInit uses WX_VA_ARG_STRING macro to extract the string and this void wxFileTypeInfo::VarArgInit(const wxString *mimeType,
// macro interprets the argument as char* or wchar_t* depending on build const wxString *openCmd,
// (and in UTF8 build, on the current locale). Because only one of the const wxString *printCmd,
// vararg forms below is called and the decision about which one gets const wxString *desc,
// called depends on the same conditions WX_VA_ARG_STRING uses, we can ...)
// implement both of them in the exact same way:
#if !wxUSE_UTF8_LOCALE_ONLY
void wxFileTypeInfo::VarArgInitWchar(const wxChar *mimeType,
const wxChar *openCmd,
const wxChar *printCmd,
const wxChar *desc,
...)
{ {
va_list argptr; va_list argptr;
va_start(argptr, desc); va_start(argptr, desc);
DoVarArgInit(mimeType, openCmd, printCmd, desc, argptr); DoVarArgInit(*mimeType, *openCmd, *printCmd, *desc, argptr);
va_end(argptr); va_end(argptr);
} }
#endif // !wxUSE_UTF8_LOCALE_ONLY
#if wxUSE_UNICODE_UTF8
void wxFileTypeInfo::VarArgInitUtf8(const char *mimeType,
const char *openCmd,
const char *printCmd,
const char *desc,
...)
{
va_list argptr;
va_start(argptr, desc);
DoVarArgInit(mimeType, openCmd, printCmd, desc, argptr);
va_end(argptr);
}
#endif // wxUSE_UNICODE_UTF8
wxFileTypeInfo::wxFileTypeInfo(const wxArrayString& sArray) wxFileTypeInfo::wxFileTypeInfo(const wxArrayString& sArray)