]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/utilsgui.cpp
check that the version of __sync_sub_and_fetch that returns a value is supported...
[wxWidgets.git] / src / msw / utilsgui.cpp
index 497f40df3485deb286ef4a1b0838a6be8a1900f0..e3c65df0812381d3185999e874f6c0e98d32f94f 100644 (file)
     #include "wx/utils.h"
 #endif //WX_PRECOMP
 
+#include "wx/dynlib.h"
+
 #include "wx/msw/private.h"     // includes <windows.h>
 
 // ============================================================================
 // implementation
 // ============================================================================
 
-// ----------------------------------------------------------------------------
-// functions to work with .INI files
-// ----------------------------------------------------------------------------
-
-// Reading and writing resources (eg WIN.INI, .Xdefaults)
-#if wxUSE_RESOURCES
-bool wxWriteResource(const wxString& section, const wxString& entry, const wxString& value, const wxString& file)
-{
-  if (file != wxEmptyString)
-// Don't know what the correct cast should be, but it doesn't
-// compile in BC++/16-bit without this cast.
-#if !defined(__WIN32__)
-    return (WritePrivateProfileString((const char*) section, (const char*) entry, (const char*) value, (const char*) file) != 0);
-#else
-    return (WritePrivateProfileString((LPCTSTR)WXSTRINGCAST section, (LPCTSTR)WXSTRINGCAST entry, (LPCTSTR)value, (LPCTSTR)WXSTRINGCAST file) != 0);
-#endif
-  else
-    return (WriteProfileString((LPCTSTR)WXSTRINGCAST section, (LPCTSTR)WXSTRINGCAST entry, (LPCTSTR)WXSTRINGCAST value) != 0);
-}
-
-bool wxWriteResource(const wxString& section, const wxString& entry, float value, const wxString& file)
-{
-    wxString buf;
-    buf.Printf(wxT("%.4f"), value);
-
-    return wxWriteResource(section, entry, buf, file);
-}
-
-bool wxWriteResource(const wxString& section, const wxString& entry, long value, const wxString& file)
-{
-    wxString buf;
-    buf.Printf(wxT("%ld"), value);
-
-    return wxWriteResource(section, entry, buf, file);
-}
-
-bool wxWriteResource(const wxString& section, const wxString& entry, int value, const wxString& file)
-{
-    wxString buf;
-    buf.Printf(wxT("%d"), value);
-
-    return wxWriteResource(section, entry, buf, file);
-}
-
-bool wxGetResource(const wxString& section, const wxString& entry, wxChar **value, const wxString& file)
-{
-    static const wxChar defunkt[] = wxT("$$default");
-
-    wxChar buf[1024];
-    if (file != wxEmptyString)
-    {
-        int n = GetPrivateProfileString(section, entry, defunkt,
-                                        buf, WXSIZEOF(buf), file);
-        if (n == 0 || wxStrcmp(buf, defunkt) == 0)
-            return false;
-    }
-    else
-    {
-        int n = GetProfileString(section, entry, defunkt, buf, WXSIZEOF(buf));
-        if (n == 0 || wxStrcmp(buf, defunkt) == 0)
-            return false;
-    }
-    if (*value) delete[] (*value);
-    *value = wxStrcpy(new wxChar[wxStrlen(buf) + 1], buf);
-    return true;
-}
-
-bool wxGetResource(const wxString& section, const wxString& entry, float *value, const wxString& file)
-{
-    wxChar *s = NULL;
-    bool succ = wxGetResource(section, entry, (wxChar **)&s, file);
-    if (succ)
-    {
-        *value = (float)wxStrtod(s, NULL);
-        delete[] s;
-        return true;
-    }
-    else return false;
-}
-
-bool wxGetResource(const wxString& section, const wxString& entry, long *value, const wxString& file)
-{
-    wxChar *s = NULL;
-    bool succ = wxGetResource(section, entry, (wxChar **)&s, file);
-    if (succ)
-    {
-        *value = wxStrtol(s, NULL, 10);
-        delete[] s;
-        return true;
-    }
-    else return false;
-}
-
-bool wxGetResource(const wxString& section, const wxString& entry, int *value, const wxString& file)
-{
-    wxChar *s = NULL;
-    bool succ = wxGetResource(section, entry, (wxChar **)&s, file);
-    if (succ)
-    {
-        *value = (int)wxStrtol(s, NULL, 10);
-        delete[] s;
-        return true;
-    }
-    else return false;
-}
-#endif // wxUSE_RESOURCES
-
 // ---------------------------------------------------------------------------
 // helper functions for showing a "busy" cursor
 // ---------------------------------------------------------------------------
@@ -157,7 +52,7 @@ extern HCURSOR wxGetCurrentBusyCursor()
 }
 
 // Set the cursor to the busy cursor for all windows
-void wxBeginBusyCursor(wxCursor *cursor)
+void wxBeginBusyCursor(const wxCursor *cursor)
 {
     if ( gs_wxBusyCursorCount++ == 0 )
     {
@@ -212,7 +107,9 @@ bool wxCheckForInterrupt(wxWindow *wnd)
 #ifndef __WXMICROWIN__
 wxChar *wxLoadUserResource(const wxString& resourceName, const wxString& resourceType)
 {
-    HRSRC hResource = ::FindResource(wxGetInstance(), resourceName, resourceType);
+    HRSRC hResource = ::FindResource(wxGetInstance(),
+                                     resourceName.wx_str(),
+                                     resourceType.wx_str());
     if ( hResource == 0 )
         return NULL;
 
@@ -231,8 +128,6 @@ wxChar *wxLoadUserResource(const wxString& resourceName, const wxString& resourc
     wxStrncpy(s,theText,len);
     s[len]=0;
 
-    // wxChar *s = copystring(theText);
-
     // Obsolete in WIN32
 #ifndef __WIN32__
     UnlockResource(hData);
@@ -398,9 +293,9 @@ wxString WXDLLEXPORT wxGetWindowClass(WXHWND hWnd)
     return str;
 }
 
-WXWORD WXDLLEXPORT wxGetWindowId(WXHWND hWnd)
+int WXDLLEXPORT wxGetWindowId(WXHWND hWnd)
 {
-    return (WXWORD)GetWindowLong((HWND)hWnd, GWL_ID);
+    return ::GetWindowLong((HWND)hWnd, GWL_ID);
 }
 
 // ----------------------------------------------------------------------------
@@ -452,3 +347,50 @@ void wxDrawLine(HDC hdc, int x1, int y1, int x2, int y2)
 }
 
 
+// ----------------------------------------------------------------------------
+// Shell API wrappers
+// ----------------------------------------------------------------------------
+
+extern bool wxEnableFileNameAutoComplete(HWND hwnd)
+{
+#if wxUSE_DYNLIB_CLASS
+    typedef HRESULT (WINAPI *SHAutoComplete_t)(HWND, DWORD);
+
+    static SHAutoComplete_t s_pfnSHAutoComplete = NULL;
+    static bool s_initialized = false;
+
+    if ( !s_initialized )
+    {
+        s_initialized = true;
+
+        wxLogNull nolog;
+        wxDynamicLibrary dll(_T("shlwapi.dll"));
+        if ( dll.IsLoaded() )
+        {
+            s_pfnSHAutoComplete =
+                (SHAutoComplete_t)dll.GetSymbol(_T("SHAutoComplete"));
+            if ( s_pfnSHAutoComplete )
+            {
+                // won't be unloaded until the process termination, no big deal
+                dll.Detach();
+            }
+        }
+    }
+
+    if ( !s_pfnSHAutoComplete )
+        return false;
+
+    HRESULT hr = s_pfnSHAutoComplete(hwnd, 0x10 /* SHACF_FILESYS_ONLY */);
+    if ( FAILED(hr) )
+    {
+        wxLogApiError(_T("SHAutoComplete"), hr);
+        return false;
+    }
+
+    return true;
+#else
+    wxUnusedVar(hwnd);
+    return false;
+#endif // wxUSE_DYNLIB_CLASS/!wxUSE_DYNLIB_CLASS
+}
+