Add support for dynamic auto-completion in wxTextEntry.
Add wxTextCompleter class which allows to return the possible completions dynamically and wxTextCompleter::AutoComplete() overload using it. So far this is only implemented for wxMSW. Also fix calling wxTextEntry::AutoComplete(wxArrayString) multiple times under MSW, this didn't correctly update the list of shown completions before. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67511 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -11,6 +11,8 @@
|
||||
#ifndef _WX_MSW_TEXTENTRY_H_
|
||||
#define _WX_MSW_TEXTENTRY_H_
|
||||
|
||||
class wxTextAutoCompleteData; // private class used only by wxTextEntry itself
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxTextEntry: common part of wxComboBox and (single line) wxTextCtrl
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -18,12 +20,8 @@
|
||||
class WXDLLIMPEXP_CORE wxTextEntry : public wxTextEntryBase
|
||||
{
|
||||
public:
|
||||
wxTextEntry()
|
||||
{
|
||||
#if wxUSE_OLE
|
||||
m_enumStrings = NULL;
|
||||
#endif // wxUSE_OLE
|
||||
}
|
||||
wxTextEntry();
|
||||
virtual ~wxTextEntry();
|
||||
|
||||
// implement wxTextEntryBase pure virtual methods
|
||||
virtual void WriteText(const wxString& text);
|
||||
@@ -78,6 +76,7 @@ protected:
|
||||
#if wxUSE_OLE
|
||||
virtual bool DoAutoCompleteStrings(const wxArrayString& choices);
|
||||
virtual bool DoAutoCompleteFileNames();
|
||||
virtual bool DoAutoCompleteCustom(wxTextCompleter *completer);
|
||||
#endif // wxUSE_OLE
|
||||
|
||||
private:
|
||||
@@ -85,8 +84,16 @@ private:
|
||||
virtual WXHWND GetEditHWND() const = 0;
|
||||
|
||||
#if wxUSE_OLE
|
||||
// enumerator for strings currently used for auto-completion or NULL
|
||||
class wxIEnumString *m_enumStrings;
|
||||
// Get the auto-complete object creating it if necessary. Returns NULL if
|
||||
// creating it failed.
|
||||
wxTextAutoCompleteData *GetOrCreateCompleter();
|
||||
|
||||
// Various auto-completion-related stuff, only used if any of AutoComplete()
|
||||
// methods are called. Use the function above to access it.
|
||||
wxTextAutoCompleteData *m_autoCompleteData;
|
||||
|
||||
// It needs to call our GetEditableWindow() and GetEditHWND() methods.
|
||||
friend class wxTextAutoCompleteData;
|
||||
#endif // wxUSE_OLE
|
||||
};
|
||||
|
||||
|
31
include/wx/textcompleter.h
Normal file
31
include/wx/textcompleter.h
Normal file
@@ -0,0 +1,31 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/textcompleter.h
|
||||
// Purpose: Declaration of wxTextCompleter class.
|
||||
// Author: Vadim Zeitlin
|
||||
// Created: 2011-04-13
|
||||
// RCS-ID: $Id: wxhead.h,v 1.12 2010-04-22 12:44:51 zeitlin Exp $
|
||||
// Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_TEXTCOMPLETER_H_
|
||||
#define _WX_TEXTCOMPLETER_H_
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxTextCompleter: used by wxTextEnter::AutoComplete()
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_CORE wxTextCompleter
|
||||
{
|
||||
public:
|
||||
wxTextCompleter() { }
|
||||
|
||||
virtual void GetCompletions(const wxString& prefix, wxArrayString& res) = 0;
|
||||
|
||||
virtual ~wxTextCompleter();
|
||||
|
||||
private:
|
||||
wxDECLARE_NO_COPY_CLASS(wxTextCompleter);
|
||||
};
|
||||
|
||||
#endif // _WX_TEXTCOMPLETER_H_
|
@@ -16,6 +16,7 @@
|
||||
typedef long wxTextPos;
|
||||
|
||||
class WXDLLIMPEXP_FWD_BASE wxArrayString;
|
||||
class WXDLLIMPEXP_FWD_CORE wxTextCompleter;
|
||||
class WXDLLIMPEXP_FWD_CORE wxTextEntryHintData;
|
||||
class WXDLLIMPEXP_FWD_CORE wxWindow;
|
||||
|
||||
@@ -106,7 +107,7 @@ public:
|
||||
|
||||
// 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
|
||||
// file system or 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
|
||||
@@ -118,6 +119,12 @@ public:
|
||||
bool AutoCompleteFileNames()
|
||||
{ return DoAutoCompleteFileNames(); }
|
||||
|
||||
// notice that we take ownership of the pointer and will delete it
|
||||
//
|
||||
// if the pointer is NULL auto-completion is disabled
|
||||
bool AutoComplete(wxTextCompleter *completer)
|
||||
{ return DoAutoCompleteCustom(completer); }
|
||||
|
||||
|
||||
// status
|
||||
// ------
|
||||
@@ -224,6 +231,7 @@ protected:
|
||||
virtual bool DoAutoCompleteStrings(const wxArrayString& WXUNUSED(choices))
|
||||
{ return false; }
|
||||
virtual bool DoAutoCompleteFileNames() { return false; }
|
||||
virtual bool DoAutoCompleteCustom(wxTextCompleter *completer);
|
||||
|
||||
|
||||
// class which should be used to temporarily disable text change events
|
||||
|
Reference in New Issue
Block a user