X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b8b1ff481cbc6116cf970eec994de930b6f1cb9b..66c2bf7b1d9326fb650acfaae22ec50528cfbf7c:/include/wx/propgrid/props.h
diff --git a/include/wx/propgrid/props.h b/include/wx/propgrid/props.h
index 53f4db9b7c..ea902d13e6 100644
--- a/include/wx/propgrid/props.h
+++ b/include/wx/propgrid/props.h
@@ -4,19 +4,20 @@
// Author: Jaakko Salli
// Modified by:
// Created: 2007-03-28
-// RCS-ID: $Id$
// Copyright: (c) Jaakko Salli
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PROPGRID_PROPS_H_
#define _WX_PROPGRID_PROPS_H_
+#include "wx/defs.h"
+
#if wxUSE_PROPGRID
// -----------------------------------------------------------------------
-class wxArrayEditorDialog;
+class wxPGArrayEditorDialog;
#include "wx/propgrid/editors.h"
@@ -25,6 +26,7 @@ class wxArrayEditorDialog;
#include "wx/textctrl.h"
#include "wx/button.h"
#include "wx/listbox.h"
+#include "wx/valtext.h"
// -----------------------------------------------------------------------
@@ -52,8 +54,6 @@ WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(NAME, T, EDITOR)
// -----------------------------------------------------------------------
-#ifndef SWIG
-
/** @class wxPGInDialogValidator
@ingroup classes
Creates and manages a temporary wxTextCtrl for validation purposes.
@@ -81,8 +81,6 @@ private:
wxTextCtrl* m_textCtrl;
};
-#endif // SWIG
-
// -----------------------------------------------------------------------
// Property classes
@@ -95,7 +93,7 @@ private:
Basic property with string value.
Supported special attributes:
- - "Password": set to 1 inorder to enable wxTE_PASSWORD on the editor.
+ - "Password": set to 1 in order to enable wxTE_PASSWORD on the editor.
@remarks
- If value "" is set, then actual value is formed (or composed)
@@ -126,10 +124,9 @@ protected:
// -----------------------------------------------------------------------
-#ifndef SWIG
-/** Constants used with DoValidation() methods.
+/** Constants used with NumericValidation<>().
*/
-enum
+enum wxPGNumericValidationConstants
{
/** Instead of modifying the value, show an error message.
*/
@@ -143,10 +140,32 @@ enum
*/
wxPG_PROPERTY_VALIDATION_WRAP = 2
};
-#endif
// -----------------------------------------------------------------------
+#if wxUSE_VALIDATORS
+
+/**
+ A more comprehensive numeric validator class.
+*/
+class WXDLLIMPEXP_PROPGRID wxNumericPropertyValidator : public wxTextValidator
+{
+public:
+ enum NumericType
+ {
+ Signed = 0,
+ Unsigned,
+ Float
+ };
+
+ wxNumericPropertyValidator( NumericType numericType, int base = 10 );
+ virtual ~wxNumericPropertyValidator() { }
+ virtual bool Validate(wxWindow* parent);
+};
+
+#endif // wxUSE_VALIDATORS
+
+
/** @class wxIntProperty
@ingroup classes
Basic property with integer value.
@@ -261,6 +280,7 @@ public:
virtual bool DoSetAttribute( const wxString& name, wxVariant& value );
virtual bool ValidateValue( wxVariant& value,
wxPGValidationInfo& validationInfo ) const;
+ virtual wxValidator* DoGetValidator () const;
virtual bool IntToValue( wxVariant& variant,
int number,
int argFlags = 0 ) const;
@@ -306,6 +326,7 @@ public:
wxPGValidationInfo* pValidationInfo,
int mode =
wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE );
+ static wxValidator* GetClassValidator();
virtual wxValidator* DoGetValidator () const;
protected:
@@ -314,9 +335,6 @@ protected:
// -----------------------------------------------------------------------
-// Exclude class from wxPython bindings
-#ifndef SWIG
-
/** @class wxBoolProperty
@ingroup classes
Basic property with boolean value.
@@ -343,8 +361,6 @@ public:
virtual bool DoSetAttribute( const wxString& name, wxVariant& value );
};
-#endif // !SWIG
-
// -----------------------------------------------------------------------
// If set, then selection of choices is static and should not be
@@ -370,7 +386,7 @@ public:
#ifndef SWIG
wxEnumProperty( const wxString& label = wxPG_LABEL,
const wxString& name = wxPG_LABEL,
- const wxChar** labels = NULL,
+ const wxChar* const* labels = NULL,
const long* values = NULL,
int value = 0 );
wxEnumProperty( const wxString& label,
@@ -381,7 +397,7 @@ public:
// Special constructor for caching choices (used by derived class)
wxEnumProperty( const wxString& label,
const wxString& name,
- const wxChar** labels,
+ const wxChar* const* labels,
const long* values,
wxPGChoices* choicesCache,
int value = 0 );
@@ -468,7 +484,7 @@ public:
wxEditEnumProperty( const wxString& label,
const wxString& name,
- const wxChar** labels,
+ const wxChar* const* labels,
const long* values,
const wxString& value );
wxEditEnumProperty( const wxString& label = wxPG_LABEL,
@@ -484,7 +500,7 @@ public:
// Special constructor for caching choices (used by derived class)
wxEditEnumProperty( const wxString& label,
const wxString& name,
- const wxChar** labels,
+ const wxChar* const* labels,
const long* values,
wxPGChoices* choicesCache,
const wxString& value );
@@ -500,7 +516,7 @@ protected:
@ingroup classes
Represents a bit set that fits in a long integer. wxBoolProperty
sub-properties are created for editing individual bits. Textctrl is created
- to manually edit the flags as a text; a continous sequence of spaces,
+ to manually edit the flags as a text; a continuous sequence of spaces,
commas and semicolons is considered as a flag id separator.
Note: When changing "choices" (ie. flag labels) of wxFlagsProperty,
you will need to use SetPropertyChoices - otherwise they will not get
@@ -514,7 +530,7 @@ public:
#ifndef SWIG
wxFlagsProperty( const wxString& label,
const wxString& name,
- const wxChar** labels,
+ const wxChar* const* labels,
const long* values = NULL,
long value = 0 );
wxFlagsProperty( const wxString& label,
@@ -547,7 +563,7 @@ public:
// helpers
size_t GetItemCount() const { return m_choices.GetCount(); }
const wxString& GetLabel( size_t ind ) const
- { return m_choices.GetLabel(ind); }
+ { return m_choices.GetLabel(static_cast(ind)); }
protected:
// Used to detect if choices have been changed
@@ -684,9 +700,6 @@ protected:
// -----------------------------------------------------------------------
-// Exclude class from wxPython bindings
-#ifndef SWIG
-
/** @class wxDirProperty
@ingroup classes
Like wxLongStringProperty, but the button triggers dir selector instead.
@@ -712,8 +725,6 @@ protected:
wxString m_dlgMessage;
};
-#endif // !SWIG
-
// -----------------------------------------------------------------------
// wxBoolProperty specific flags
@@ -732,7 +743,6 @@ class WXDLLIMPEXP_PROPGRID wxArrayStringProperty : public wxPGProperty
{
WX_PG_DECLARE_PROPERTY_CLASS(wxArrayStringProperty)
public:
-
wxArrayStringProperty( const wxString& label = wxPG_LABEL,
const wxString& name = wxPG_LABEL,
const wxArrayString& value = wxArrayString() );
@@ -745,8 +755,12 @@ public:
int argFlags = 0 ) const;
virtual bool OnEvent( wxPropertyGrid* propgrid,
wxWindow* primary, wxEvent& event );
+ virtual bool DoSetAttribute( const wxString& name, wxVariant& value );
- virtual void GenerateValueAsString();
+ // Implement in derived class for custom array-to-string conversion.
+ virtual void ConvertArrayToString(const wxArrayString& arr,
+ wxString* pString,
+ const wxUniChar& delimiter) const;
// Shows string editor dialog. Value to be edited should be read from
// value, and if dialog is not cancelled, it should be stored back and true
@@ -758,13 +772,30 @@ public:
wxWindow* primary,
const wxChar* cbt );
-#ifndef SWIG
- // Creates wxArrayEditorDialog for string editing. Called in OnButtonClick.
- virtual wxArrayEditorDialog* CreateEditorDialog();
-#endif
+ // Creates wxPGArrayEditorDialog for string editing. Called in OnButtonClick.
+ virtual wxPGArrayEditorDialog* CreateEditorDialog();
+
+ enum ConversionFlags
+ {
+ Escape = 0x01,
+ QuoteStrings = 0x02
+ };
+
+ /**
+ Generates contents for string dst based on the contents of
+ wxArrayString src.
+ */
+ static void ArrayStringToString( wxString& dst, const wxArrayString& src,
+ wxUniChar delimiter, int flags );
protected:
+ // Previously this was to be implemented in derived class for array-to-
+ // string conversion. Now you should implement ConvertValueToString()
+ // instead.
+ virtual void GenerateValueAsString();
+
wxString m_display; // Cache for displayed text.
+ wxUniChar m_delimiter;
};
// -----------------------------------------------------------------------
@@ -779,9 +810,6 @@ public: \
const wxString& name = wxPG_LABEL, \
const wxArrayString& value = wxArrayString() ); \
~PROPNAME(); \
- virtual void GenerateValueAsString(); \
- virtual bool StringToValue( wxVariant& value, \
- const wxString& text, int = 0 ) const; \
virtual bool OnEvent( wxPropertyGrid* propgrid, \
wxWindow* primary, wxEvent& event ); \
virtual bool OnCustomStringEdit( wxWindow* parent, wxString& value ); \
@@ -803,36 +831,13 @@ PROPNAME::PROPNAME( const wxString& label, \
: wxArrayStringProperty(label,name,value) \
{ \
PROPNAME::GenerateValueAsString(); \
+ m_delimiter = DELIMCHAR; \
} \
PROPNAME::~PROPNAME() { } \
-void PROPNAME::GenerateValueAsString() \
-{ \
- wxChar delimChar = DELIMCHAR; \
- if ( delimChar == wxS('"') ) \
- wxArrayStringProperty::GenerateValueAsString(); \
- else \
- wxPropertyGrid::ArrayStringToString(m_display, \
- m_value.GetArrayString(), \
- 0,DELIMCHAR,0); \
-} \
-bool PROPNAME::StringToValue( wxVariant& variant, \
- const wxString& text, int ) const \
-{ \
- wxChar delimChar = DELIMCHAR; \
- if ( delimChar == wxS('"') ) \
- return wxArrayStringProperty::StringToValue(variant, text, 0); \
- \
- wxArrayString arr; \
- WX_PG_TOKENIZER1_BEGIN(text,DELIMCHAR) \
- arr.Add( token ); \
- WX_PG_TOKENIZER1_END() \
- variant = arr; \
- return true; \
-} \
bool PROPNAME::OnEvent( wxPropertyGrid* propgrid, \
wxWindow* primary, wxEvent& event ) \
{ \
- if ( event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED ) \
+ if ( event.GetEventType() == wxEVT_BUTTON ) \
return OnButtonClick(propgrid,primary,(const wxChar*) CUSTBUTTXT); \
return false; \
}
@@ -852,21 +857,26 @@ wxValidator* PROPNAME::DoGetValidator () const \
// -----------------------------------------------------------------------
-// wxArrayEditorDialog
+// wxPGArrayEditorDialog
// -----------------------------------------------------------------------
+#if wxUSE_EDITABLELISTBOX
+
+class WXDLLIMPEXP_FWD_ADV wxEditableListBox;
+class WXDLLIMPEXP_FWD_CORE wxListEvent;
+
#define wxAEDIALOG_STYLE \
(wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxOK | wxCANCEL | wxCENTRE)
-class WXDLLIMPEXP_PROPGRID wxArrayEditorDialog : public wxDialog
+class WXDLLIMPEXP_PROPGRID wxPGArrayEditorDialog : public wxDialog
{
public:
- wxArrayEditorDialog();
- virtual ~wxArrayEditorDialog() { }
+ wxPGArrayEditorDialog();
+ virtual ~wxPGArrayEditorDialog() { }
void Init();
- wxArrayEditorDialog( wxWindow *parent,
+ wxPGArrayEditorDialog( wxWindow *parent,
const wxString& message,
const wxString& caption,
long style = wxAEDIALOG_STYLE,
@@ -880,6 +890,11 @@ public:
const wxPoint& pos = wxDefaultPosition,
const wxSize& sz = wxDefaultSize );
+ void EnableCustomNewAction()
+ {
+ m_hasCustomNewAction = true;
+ }
+
/** Set value modified by dialog.
*/
virtual void SetDialogValue( const wxVariant& WXUNUSED(value) )
@@ -911,37 +926,30 @@ public:
// Returns true if array was actually modified
bool IsModified() const { return m_modified; }
- //const wxArrayString& GetStrings() const { return m_array; }
+ // wxEditableListBox utilities
+ int GetSelection() const;
// implementation from now on
- void OnUpdateClick(wxCommandEvent& event);
void OnAddClick(wxCommandEvent& event);
void OnDeleteClick(wxCommandEvent& event);
- void OnListBoxClick(wxCommandEvent& event);
void OnUpClick(wxCommandEvent& event);
void OnDownClick(wxCommandEvent& event);
- //void OnCustomEditClick(wxCommandEvent& event);
+ void OnEndLabelEdit(wxListEvent& event);
void OnIdle(wxIdleEvent& event);
protected:
- wxTextCtrl* m_edValue;
- wxListBox* m_lbStrings;
-
- wxButton* m_butAdd; // Button pointers
- wxButton* m_butCustom; // required for disabling/enabling changing.
- wxButton* m_butUpdate;
- wxButton* m_butRemove;
- wxButton* m_butUp;
- wxButton* m_butDown;
+ wxEditableListBox* m_elb;
- //wxArrayString m_array;
+ // These are used for focus repair
+ wxWindow* m_elbSubPanel;
+ wxWindow* m_lastFocused;
- const wxChar* m_custBtText;
- //wxArrayStringPropertyClass* m_pCallingClass;
+ // A new item, edited by user, is pending at this index.
+ // It will be committed once list ctrl item editing is done.
+ int m_itemPendingAtIndex;
bool m_modified;
-
- unsigned char m_curFocus;
+ bool m_hasCustomNewAction;
// These must be overridden - must return true on success.
virtual wxString ArrayGet( size_t index ) = 0;
@@ -950,18 +958,24 @@ protected:
virtual bool ArraySet( size_t index, const wxString& str ) = 0;
virtual void ArrayRemoveAt( int index ) = 0;
virtual void ArraySwap( size_t first, size_t second ) = 0;
+ virtual bool OnCustomNewAction(wxString* WXUNUSED(resString))
+ {
+ return false;
+ }
private:
- DECLARE_DYNAMIC_CLASS_NO_COPY(wxArrayEditorDialog)
+ DECLARE_DYNAMIC_CLASS_NO_COPY(wxPGArrayEditorDialog)
DECLARE_EVENT_TABLE()
};
+#endif // wxUSE_EDITABLELISTBOX
+
// -----------------------------------------------------------------------
// wxPGArrayStringEditorDialog
// -----------------------------------------------------------------------
class WXDLLIMPEXP_PROPGRID
- wxPGArrayStringEditorDialog : public wxArrayEditorDialog
+ wxPGArrayStringEditorDialog : public wxPGArrayEditorDialog
{
public:
wxPGArrayStringEditorDialog();
@@ -979,13 +993,17 @@ public:
return m_array;
}
- void SetCustomButton( const wxChar* custBtText, wxArrayStringProperty* pcc )
+ void SetCustomButton( const wxString& custBtText,
+ wxArrayStringProperty* pcc )
{
- m_custBtText = custBtText;
- m_pCallingClass = pcc;
+ if ( !custBtText.empty() )
+ {
+ EnableCustomNewAction();
+ m_pCallingClass = pcc;
+ }
}
- void OnCustomEditClick(wxCommandEvent& event);
+ virtual bool OnCustomNewAction(wxString* resString);
protected:
wxArrayString m_array;