Added support for 'AutoComplete' attribute, automatically used by any wxTextCtrl-based property editor

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59429 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2009-03-08 11:34:01 +00:00
parent bd6ffa9f2b
commit 66fb9e1241
4 changed files with 45 additions and 8 deletions

View File

@@ -515,6 +515,11 @@ wxPG_PROP_CLASS_SPECIFIC_2 = 0x00100000
*/ */
#define wxPG_ATTR_INLINE_HELP wxS("InlineHelp") #define wxPG_ATTR_INLINE_HELP wxS("InlineHelp")
/** Universal, wxArrayString. Set to enable auto-completion in any
wxTextCtrl-based property editor.
*/
#define wxPG_ATTR_AUTOCOMPLETE wxS("AutoComplete")
/** wxBoolProperty specific, int, default 0. When 1 sets bool property to /** wxBoolProperty specific, int, default 0. When 1 sets bool property to
use checkbox instead of choice. use checkbox instead of choice.
*/ */

View File

@@ -46,6 +46,11 @@
*/ */
#define wxPG_ATTR_INLINE_HELP wxS("InlineHelp") #define wxPG_ATTR_INLINE_HELP wxS("InlineHelp")
/** Universal, wxArrayString. Set to enable auto-completion in any
wxTextCtrl-based property editor.
*/
#define wxPG_ATTR_AUTOCOMPLETE wxS("AutoComplete")
/** wxBoolProperty specific, int, default 0. When 1 sets bool property to /** wxBoolProperty specific, int, default 0. When 1 sets bool property to
use checkbox instead of choice. use checkbox instead of choice.
*/ */
@@ -193,6 +198,9 @@
Simple string property. wxPG_STRING_PASSWORD attribute may be used Simple string property. wxPG_STRING_PASSWORD attribute may be used
to echo value as asterisks and use wxTE_PASSWORD for wxTextCtrl. to echo value as asterisks and use wxTE_PASSWORD for wxTextCtrl.
wxPG_ATTR_AUTOCOMPLETE attribute may be used to enable auto-completion
(use a wxArrayString value), and is also supported by any property that
happens to use a wxTextCtrl-based editor.
@remarks wxStringProperty has a special trait: if it has value of @remarks wxStringProperty has a special trait: if it has value of
"<composed>", and also has child properties, then its displayed "<composed>", and also has child properties, then its displayed

View File

@@ -1531,6 +1531,25 @@ void FormMain::PopulateWithExamples ()
// Set value after limiting so that it will be applied // Set value after limiting so that it will be applied
pg->SetPropertyValue( wxT("StringProperty"), wxT("some text") ); pg->SetPropertyValue( wxT("StringProperty"), wxT("some text") );
//
// Demonstrate "AutoComplete" attribute
pg->Append( new wxStringProperty( "StringProperty AutoComplete",
wxPG_LABEL ) );
wxArrayString autoCompleteStrings;
autoCompleteStrings.Add("One choice");
autoCompleteStrings.Add("Another choice");
autoCompleteStrings.Add("Another choice, yeah");
autoCompleteStrings.Add("Yet another choice");
autoCompleteStrings.Add("Yet another choice, bear with me");
pg->SetPropertyAttribute( "StringProperty AutoComplete",
"AutoComplete",
autoCompleteStrings );
pg->SetPropertyHelpString( "StringProperty AutoComplete",
"AutoComplete attribute has been set for this property "
"(try writing something beginning with 'a', 'o' or 'y').");
// Add string property with arbitrarily wide bitmap in front of it. We // Add string property with arbitrarily wide bitmap in front of it. We
// intentionally lower-than-typical row height here so that the ugly // intentionally lower-than-typical row height here so that the ugly
// scaling code wont't be run. // scaling code wont't be run.

View File

@@ -1633,12 +1633,12 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos,
int maxLen ) int maxLen )
{ {
wxWindowID id = wxPG_SUBID1; wxWindowID id = wxPG_SUBID1;
wxPGProperty* selected = m_selected; wxPGProperty* prop = m_selected;
wxASSERT(selected); wxASSERT(prop);
int tcFlags = wxTE_PROCESS_ENTER | extraStyle; int tcFlags = wxTE_PROCESS_ENTER | extraStyle;
if ( selected->HasFlag(wxPG_PROP_READONLY) ) if ( prop->HasFlag(wxPG_PROP_READONLY) )
tcFlags |= wxTE_READONLY; tcFlags |= wxTE_READONLY;
wxPoint p(pos.x,pos.y); wxPoint p(pos.x,pos.y);
@@ -1675,14 +1675,12 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos,
SetupTextCtrlValue(value); SetupTextCtrlValue(value);
tc->Create(ctrlParent,id,value, p, s,tcFlags); tc->Create(ctrlParent,id,value, p, s,tcFlags);
wxWindow* ed = tc;
// Center the control vertically // Center the control vertically
if ( !hasSpecialSize ) if ( !hasSpecialSize )
FixPosForTextCtrl(ed); FixPosForTextCtrl(tc);
#ifdef __WXMSW__ #ifdef __WXMSW__
ed->Show(); tc->Show();
if ( secondary ) if ( secondary )
secondary->Show(); secondary->Show();
#endif #endif
@@ -1691,7 +1689,14 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos,
if ( maxLen > 0 ) if ( maxLen > 0 )
tc->SetMaxLength( maxLen ); tc->SetMaxLength( maxLen );
return (wxWindow*) ed; wxVariant attrVal = prop->GetAttribute(wxPG_ATTR_AUTOCOMPLETE);
if ( !attrVal.IsNull() )
{
wxASSERT(attrVal.GetType() == wxS("arrstring"));
tc->AutoComplete(attrVal.GetArrayString());
}
return tc;
} }
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------