]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxTextEntry::AutoCompleteFileNames() and implemented it for wxMSW
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 4 Nov 2007 23:08:26 +0000 (23:08 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 4 Nov 2007 23:08:26 +0000 (23:08 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49634 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/latex/wx/text.tex
include/wx/msw/textentry.h
include/wx/textentry.h
src/msw/textentry.cpp

index acacf85aa8ff2b5161376026cf303c2379614b7c..da71f63bd37d8d90a047565a459ebd69ba7f8876 100644 (file)
@@ -185,7 +185,7 @@ All (Unix):
 
 All (GUI):
 
-- Added wxTextCtrl::AutoComplete()
+- Added {wxTextCtrl,wxComboBox}::AutoComplete() and AutoCompleteFileNames()
 - Added wxH[V]ScrolledWindow (Brad Anderson, Bryan Petty).
 - Added wxDC::StretchBlit() for wxMac and wxMSW (Vince Harron).
 - Added support for drop down toolbar buttons (Tim Kosse).
index 49dcf82973a5819463e72afde8f1af85b828441d..142962440fe7e3b8d75837502de1e8ee30a85078 100644 (file)
@@ -340,6 +340,37 @@ nothing under the other platforms.
 
 \newsince{2.9.0}
 
+\wxheading{Return value}
+
+\true if the auto-completion was enabled or \false if the operation failed,
+typically because auto-completion is not supported by the current platform.
+
+\wxheading{See also}
+
+\helpref{AutoCompleteFileNames}{wxtextctrlautocompletefilenames}
+
+
+\membersection{wxTextCtrl::AutoCompleteFileNames}\label{wxtextctrlautocompletefilenames}
+
+\func{bool}{AutoCompleteFileNames}{\void}
+
+Call this function to enable auto-completion of the text typed in a single-line
+text control using all valid file system paths.
+
+Notice that currently this function is only implemented in wxGTK2 port and does
+nothing under the other platforms.
+
+\newsince{2.9.0}
+
+\wxheading{Return value}
+
+\true if the auto-completion was enabled or \false if the operation failed,
+typically because auto-completion is not supported by the current platform.
+
+\wxheading{See also}
+
+\helpref{AutoComplete}{wxtextctrlautocomplete}
+
 
 \membersection{wxTextCtrl::CanCopy}\label{wxtextctrlcancopy}
 
index a39139df666e6462ef46d97da19d8d46eb62a1f4..5466710e1edf12ce1b0618d6fc47e5b7bb605854 100644 (file)
@@ -42,6 +42,8 @@ public:
         { DoSetSelection(from, to); }\r
     virtual void GetSelection(long *from, long *to) const;\r
 \r
+    virtual bool AutoCompleteFileNames();\r
+\r
     virtual bool IsEditable() const;\r
     virtual void SetEditable(bool editable);\r
 \r
index 4ac40164d9ee4ee2e20195e3c96851f245e1eaee..6643ceed5294bbd41b1980e67719720a8aacb41a 100644 (file)
@@ -98,7 +98,20 @@ public:
     // auto-completion
     // ---------------
 
-    virtual void AutoComplete(const wxArrayString& WXUNUSED(choices)) { }
+    // these functions allow to auto-complete the text already entered into the
+    // control using either the given fixed list of strings, the paths from the
+    // file system or, in the future, an arbitrary user-defined completer
+    //
+    // they all return true if completion was enabled or false on error (most
+    // commonly meaning that this functionality is not available under the
+    // current platform)
+
+    virtual bool AutoComplete(const wxArrayString& WXUNUSED(choices))
+    {
+        return false;
+    }
+
+    virtual bool AutoCompleteFileNames() { return false; }
 
 
     // status
index e08b413d17fcfc2d7d2144d8c70459987c2ee4f0..5e38009dde56879c70a8ef386afd100bd2b0e32c 100644 (file)
 #if wxUSE_TEXTCTRL || wxUSE_COMBOBOX
 
 #include "wx/textentry.h"
+#include "wx/dynlib.h"
 
 #include "wx/msw/private.h"
 
+#ifndef SHACF_FILESYS_ONLY
+    #define SHACF_FILESYS_ONLY 0x00000010
+#endif
+
 #define GetEditHwnd() ((HWND)(GetEditHWND()))
 
 // ============================================================================
@@ -135,6 +140,39 @@ void wxTextEntry::GetSelection(long *from, long *to) const
         *to = dwEnd;
 }
 
+bool wxTextEntry::AutoCompleteFileNames()
+{
+    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) )
+        {
+            s_pfnSHAutoComplete = NULL;
+        }
+        else
+        {
+            wxDL_INIT_FUNC(s_pfn, SHAutoComplete, s_dllShlwapi);
+        }
+    }
+
+    if ( !s_pfnSHAutoComplete )
+        return false;
+
+    HRESULT hr = (*s_pfnSHAutoComplete)(GetEditHwnd(), SHACF_FILESYS_ONLY);
+    if ( FAILED(hr) )
+    {
+        wxLogApiError(_T("SHAutoComplete()"), hr);
+
+        return false;
+    }
+
+    return true;
+}
+
 bool wxTextEntry::IsEditable() const
 {
     return !(::GetWindowLong(GetEditHwnd(), GWL_STYLE) & ES_READONLY);