// wxIEnumString implements IEnumString interface
// ----------------------------------------------------------------------------
-#if wxUSE_OLE
+// standard VC6 SDK (WINVER == 0x0400) does not know about IAutoComplete
+#if wxUSE_OLE && (WINVER >= 0x0500)
+ #define HAS_AUTOCOMPLETE
+#endif
+
+#ifdef HAS_AUTOCOMPLETE
#include "wx/msw/ole/oleutils.h"
#include <shldisp.h>
-#if defined(__MINGW32__)
+#if defined(__MINGW32__) || defined (__WATCOMC__)
// needed for IID_IAutoComplete, IID_IAutoComplete2 and ACO_AUTOSUGGEST
#include <shlguid.h>
#endif
if ( m_index == count )
return S_FALSE;
- const wxWX2WCbuf wcbuf(m_strings[m_index].wc_str());
+ const wxWX2WCbuf wcbuf = m_strings[m_index].wc_str();
const size_t size = (wcslen(wcbuf) + 1)*sizeof(wchar_t);
void *olestr = CoTaskMemAlloc(size);
if ( !olestr )
memcpy(olestr, wcbuf, size);
- *rgelt++ = wx_static_cast(LPOLESTR, olestr);
+ *rgelt++ = static_cast<LPOLESTR>(olestr);
++(*pceltFetched);
}
IMPLEMENT_IUNKNOWN_METHODS(wxIEnumString)
-#endif // wxUSE_OLE
+#endif // HAS_AUTOCOMPLETE
// ============================================================================
// wxTextEntry implementation
void wxTextEntry::SetInsertionPoint(long pos)
{
+ // calling DoSetSelection(-1, -1) would select everything which is not what
+ // we want here
+ if ( pos == -1 )
+ pos = GetLastPosition();
+
// be careful to call DoSetSelection() which is overridden in wxTextCtrl
// and not just SetSelection() here
DoSetSelection(pos, pos);
// ----------------------------------------------------------------------------
#if wxUSE_OLE
-
bool wxTextEntry::AutoCompleteFileNames()
{
+#ifdef HAS_AUTOCOMPLETE
typedef HRESULT (WINAPI *SHAutoComplete_t)(HWND, DWORD);
static SHAutoComplete_t s_pfnSHAutoComplete = (SHAutoComplete_t)-1;
static wxDynamicLibrary s_dllShlwapi;
if ( s_pfnSHAutoComplete == (SHAutoComplete_t)-1 )
{
- wxLogNull noLog;
-
- if ( !s_dllShlwapi.Load(_T("shlwapi.dll"), wxDL_VERBATIM) )
+ if ( !s_dllShlwapi.Load(_T("shlwapi.dll"), wxDL_VERBATIM | wxDL_QUIET) )
{
s_pfnSHAutoComplete = NULL;
}
return false;
}
-
return true;
+#else // !HAS_AUTOCOMPLETE
+ return false;
+#endif // HAS_AUTOCOMPLETE/!HAS_AUTOCOMPLETE
}
bool wxTextEntry::AutoComplete(const wxArrayString& choices)
{
+#ifdef HAS_AUTOCOMPLETE
// create an object exposing IAutoComplete interface (don't go for
// IAutoComplete2 immediately as, presumably, it might be not available on
// older systems as otherwise why do we have both -- although in practice I
NULL,
CLSCTX_INPROC_SERVER,
IID_IAutoComplete,
- wx_reinterpret_cast(void **, &pAutoComplete)
+ reinterpret_cast<void **>(&pAutoComplete)
);
if ( FAILED(hr) )
{
hr = pAutoComplete->QueryInterface
(
IID_IAutoComplete2,
- wx_reinterpret_cast(void **, &pAutoComplete2)
+ reinterpret_cast<void **>(&pAutoComplete2)
);
if ( SUCCEEDED(hr) )
{
// do it immediately, presumably the edit control itself keeps a reference
// to the auto completer object
pAutoComplete->Release();
-
return true;
-}
+#else // !HAS_AUTOCOMPLETE
+ wxUnusedVar(choices);
+ return false;
+#endif // HAS_AUTOCOMPLETE/!HAS_AUTOCOMPLETE
+}
#endif // wxUSE_OLE
// ----------------------------------------------------------------------------