// Author: Jaakko Salli
// Modified by:
// Created: 2004-09-25
-// RCS-ID: $Id:
+// RCS-ID: $Id$
// Copyright: (c) Jaakko Salli
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PROPGRID_PROPGRID_H_
#define _WX_PROPGRID_PROPGRID_H_
+#if wxUSE_PROPGRID
+
#include "wx/dcclient.h"
#include "wx/scrolwin.h"
#include "wx/tooltip.h"
wxPGHashMapS2P m_mapEditorClasses;
#if wxUSE_VALIDATORS
- wxArrayPtrVoid m_arrValidators; // These wxValidators need to be freed
+ wxVector<wxValidator*> m_arrValidators; // These wxValidators need to be freed
#endif
wxPGHashMapS2P m_dictPropertyClassInfo; // PropertyName -> ClassInfo
// Replace with your own to affect all properties using default renderer.
wxPGCellRenderer* m_defaultRenderer;
- // These are for fast variant type comparison
- wxPGVariantDataClassInfo wxVariantClassInfo_long;
- wxPGVariantDataClassInfo wxVariantClassInfo_string;
- wxPGVariantDataClassInfo wxVariantClassInfo_double;
- wxPGVariantDataClassInfo wxVariantClassInfo_bool;
- wxPGVariantDataClassInfo wxVariantClassInfo_arrstring;
- wxPGVariantDataClassInfo wxVariantClassInfo_wxobject;
- wxPGVariantDataClassInfo wxVariantClassInfo_list;
- wxPGVariantDataClassInfo wxVariantClassInfo_wxColour;
-#if wxUSE_DATETIME
- wxPGVariantDataClassInfo wxVariantClassInfo_datetime;
-#endif
-
wxPGChoices m_boolChoices;
wxVariant m_vEmptyString;
wxVariant m_vFalse;
// Cached constant strings
+ wxPGCachedString m_strstring;
+ wxPGCachedString m_strlong;
+ wxPGCachedString m_strbool;
+ wxPGCachedString m_strlist;
+
wxPGCachedString m_strMin;
wxPGCachedString m_strMax;
wxPGCachedString m_strUnits;
extern WXDLLIMPEXP_PROPGRID wxPGGlobalVarsClass* wxPGGlobalVars;
-#define wxPGIsVariantType(VARIANT, T) \
- ((VARIANT).GetData() && \
- typeid(*(VARIANT).GetData()) == *wxPGGlobalVars->wxVariantClassInfo_##T)
-
-#define wxPGIsVariantClassInfo(CLASSINFO, T) \
- (*CLASSINFO == *wxPGGlobalVars->wxVariantClassInfo_##T)
-
#define wxPGVariant_EmptyString (wxPGGlobalVars->m_vEmptyString)
#define wxPGVariant_Zero (wxPGGlobalVars->m_vZero)
#define wxPGVariant_MinusOne (wxPGGlobalVars->m_vMinusOne)
#define wxPGVariant_Bool(A) (A?wxPGVariant_True:wxPGVariant_False)
-#define wxPGVariantAssign(A, B) A = B
-
#endif // !SWIG
// -----------------------------------------------------------------------
*/
wxPG_EX_WRITEONLY_BUILTIN_ATTRIBUTES = 0x00400000,
-/**
- With this style Validators on properties will work same as in
- wxPropertyGrid 1.2.
-*/
-wxPG_EX_LEGACY_VALIDATORS = 0x00800000,
-
/** Hides page selection buttons from toolbar.
*/
wxPG_EX_HIDE_PAGE_BUTTONS = 0x01000000
typedef wxByte wxPGVFBFlags;
-/** @class wxPGValidationInfo
+/**
+ wxPGValidationInfo
Used to convey validation information to and from functions that
- actually perform validation.
+ actually perform validation. Mostly used in custom property
+ classes.
*/
-struct wxPGValidationInfo
+class WXDLLIMPEXP_PROPGRID wxPGValidationInfo
{
- /** Value to be validated.
+ friend class wxPropertyGrid;
+public:
+ /**
+ @return Returns failure behavior which is a combination of
+ @ref propgrid_vfbflags.
*/
- wxVariant* m_pValue;
+ wxPGVFBFlags GetFailureBehavior() const
+ { return m_failureBehavior; }
- /** Message displayed on validation failure.
+ /**
+ Returns current failure message.
*/
- wxString m_failureMessage;
+ const wxString& GetFailureMessage() const
+ { return m_failureMessage; }
- /** Validation failure behavior. Use wxPG_VFB_XXX flags.
+ /**
+ Returns reference to pending value.
*/
- wxPGVFBFlags m_failureBehavior;
+ const wxVariant& GetValue() const
+ {
+ wxASSERT(m_pValue);
+ return *m_pValue;
+ }
- wxPGVFBFlags GetFailureBehavior() const { return m_failureBehavior; }
+ /** Set validation failure behavior
+ @param failureBehavior
+ Mixture of @ref propgrid_vfbflags.
+ */
void SetFailureBehavior(wxPGVFBFlags failureBehavior)
{ m_failureBehavior = failureBehavior; }
- const wxString& GetFailureMessage() const { return m_failureMessage; }
-
+ /**
+ Set current failure message.
+ */
void SetFailureMessage(const wxString& message)
{ m_failureMessage = message; }
+
+private:
+ /** Value to be validated.
+ */
+ wxVariant* m_pValue;
+
+ /** Message displayed on validation failure.
+ */
+ wxString m_failureMessage;
+
+ /** Validation failure behavior. Use wxPG_VFB_XXX flags.
+ */
+ wxPGVFBFlags m_failureBehavior;
};
// -----------------------------------------------------------------------
wxPG_ACTION_CUT,
wxPG_ACTION_COPY,
wxPG_ACTION_PASTE,
+ wxPG_ACTION_PRESS_BUTTON, // Causes editor button (if any) to be pressed
wxPG_ACTION_MAX
};
#define wxPG_FL_IN_MANAGER 0x00020000
// Set after wxPropertyGrid is shown in its initial good size
#define wxPG_FL_GOOD_SIZE_SET 0x00040000
-// Next navigation key event will get ignored
-#define wxPG_FL_IGNORE_NEXT_NAVKEY 0x00080000
// Set when in SelectProperty.
#define wxPG_FL_IN_SELECT_PROPERTY 0x00100000
// Set when help string is shown in status bar
/** Returns current cell text colour. */
wxColour GetCellTextColour() const { return m_colPropFore; }
- /** Returns number of columns on current page. */
- int GetColumnCount() const
+ /**
+ Returns number of columns currently on grid.
+ */
+ unsigned int GetColumnCount() const
{
- return m_pState->m_colWidths.size();
+ return (unsigned int) m_pState->m_colWidths.size();
}
/** Returns colour of empty space below properties. */
/** Returns background colour of margin. */
wxColour GetMarginColour() const { return m_colMargin; }
+ /**
+ Returns most up-to-date value of selected property. This will return
+ value different from GetSelectedProperty()->GetValue() only when text
+ editor is activate and string edited by user represents valid,
+ uncommitted property value.
+ */
+ wxVariant GetUncommittedPropertyValue();
+
/** Returns cell background colour of a property. */
wxColour GetPropertyBackgroundColour( wxPGPropArg id ) const;
int GetRowHeight() const { return m_lineHeight; }
/** Returns currently selected property. */
- wxPGProperty* GetSelectedProperty () const { return GetSelection(); }
+ wxPGProperty* GetSelectedProperty() const { return GetSelection(); }
/** Returns currently selected property. */
wxPGProperty* GetSelection() const
Pointer to the editor class instance that should be used.
*/
static wxPGEditor* RegisterEditorClass( wxPGEditor* editor,
- const wxString& name,
bool noDefCheck = false );
#endif
return DoSelectProperty(p,focus?wxPG_SEL_FOCUS:0);
}
- /** Changes keyboard shortcut to push the editor button.
- @remarks
- You can set default with keycode 0. Good value for the platform is
- guessed, but don't expect it to be very accurate.
- */
- void SetButtonShortcut( int keycode,
- bool ctrlDown = false,
- bool altDown = false );
-
/** Sets category caption background colour. */
void SetCaptionBackgroundColour(const wxColour& col);
/** Sets background colour of margin. */
void SetMarginColour(const wxColour& col);
- /** Sets property attribute for all applicapple properties.
- Be sure to use this method only after all properties have been
- added to the grid.
- */
- void SetPropertyAttributeAll( const wxString& attrName, wxVariant value );
-
/** Sets background colour of property and all its children. Colours of
captions are not affected. Background brush cache is optimized for often
set colours to be set last.
virtual width should be disabled. */
void SetVirtualWidth( int width );
- /** Sets name of a property.
- @param id
- Name or pointer of property which name to change.
- @param newname
- New name.
- */
- void SetPropertyName( wxPGPropArg id, const wxString& newname )
- {
- wxPG_PROP_ARG_CALL_PROLOG()
- DoSetPropertyName( p, newname );
- }
-
- /** Moves splitter as left as possible, while still allowing all
+ /**
+ Moves splitter as left as possible, while still allowing all
labels to be shown in full.
- @param subProps
- If false, will still allow sub-properties (ie. properties which
- parent is not root or category) to be cropped.
+
+ @param privateChildrenToo
+ If @false, will still allow private children to be cropped.
*/
- void SetSplitterLeft( bool subProps = false )
+ void SetSplitterLeft( bool privateChildrenToo = false )
{
- m_pState->SetSplitterLeft(subProps);
+ m_pState->SetSplitterLeft(privateChildrenToo);
}
/** Sets vertical spacing. Can be 1, 2, or 3 - a value relative to font
height. Value of 2 should be default on most platforms.
- @remarks
- On wxMSW, wxComboBox, when used as property editor widget, will spill
- out with anything less than 3.
*/
void SetVerticalSpacing( int vspacing )
{
*/
unsigned int GetCommonValueCount() const
{
- return m_commonValues.size();
+ return (unsigned int) m_commonValues.size();
}
/** Returns label of given common value.
const wxPGProperty* p2 ) const;
/** Returns pointer to current active primary editor control (NULL if none).
-
- If editor uses clipper window, pointer is returned to the actual
- editor, not the clipper.
*/
wxWindow* GetEditorControl() const;
- /** Adjusts given position if topCtrlWnd is child of clipper window.
- */
- bool AdjustPosForClipperWindow( wxWindow* topCtrlWnd, int* x, int* y );
-
wxWindow* GetPrimaryEditor() const
{
return GetEditorControl();
void OnCustomEditorEvent( wxCommandEvent &event );
long GetInternalFlags() const { return m_iFlags; }
+ bool HasInternalFlag( long flag ) const
+ { return (m_iFlags & flag) ? true : false; }
void SetInternalFlag( long flag ) { m_iFlags |= flag; }
void ClearInternalFlag( long flag ) { m_iFlags &= ~(flag); }
void IncFrozen() { m_frozen++; }
void OnComboItemPaint( wxPGCustomComboControl* pCb,int item,wxDC& dc,
wxRect& rect,int flags );
- // Used by simple check box for keyboard navigation
- void SendNavigationKeyEvent( int dir );
-
/** Standardized double-to-string conversion.
*/
static void DoubleToString( wxString& target,
virtual bool DoPropertyChanged( wxPGProperty* p,
unsigned int selFlags = 0 );
- /**
- Runs all validation functionality (includes sending wxEVT_PG_CHANGING).
- Returns true if all tests passed.
- */
- virtual bool PerformValidation( wxPGProperty* p, wxVariant& pendingValue );
-
/** Called when validation for given property fails.
@param invalidValue
Value which failed in validation.
*/
virtual wxPropertyGridPageState* CreateState() const;
-#ifndef DOXYGEN
+ enum PerformValidationFlags
+ {
+ SendEvtChanging = 0x0001,
+ IsStandaloneValidation = 0x0002 // Not called in response to event
+ };
+
+ /**
+ Runs all validation functionality (includes sending wxEVT_PG_CHANGING).
+ Returns true if all tests passed. Implement in derived class to
+ add additional validation behavior.
+ */
+ virtual bool PerformValidation( wxPGProperty* p,
+ wxVariant& pendingValue,
+ int flags = SendEvtChanging );
+
public:
// Control font changer helper.
wxBitmap *m_doubleBuffer;
#endif
- wxArrayPtrVoid *m_windowsToDelete;
-
/** Local time ms when control was created. */
wxLongLong m_timeCreated;
int m_fontHeight; // Height of the font.
- // Base keycode for triggering push button.
- int m_pushButKeyCode;
-
/** m_splitterx when drag began. */
int m_startingSplitterX;
unsigned char m_vspacing;
- // Does triggering push button need Alt down?
- unsigned char m_pushButKeyCodeNeedsAlt;
-
- // Does triggering push button need Ctrl down?
- unsigned char m_pushButKeyCodeNeedsCtrl;
-
// Used to track when Alt/Ctrl+Key was consumed.
unsigned char m_keyComboConsumed;
// background colour for empty space below the grid
wxColour m_colEmptySpace;
- // temp property array used in DoDrawItems
- wxArrayPtrVoid m_visPropArray;
-
// NB: These *cannot* be moved to globals.
// Array of background colour brushes.
wxArrayPtrVoid m_arrBgBrushes;
+
// Array of foreground colours.
wxArrayPtrVoid m_arrFgCols;
// labels when properties use common values
- wxArrayPtrVoid m_commonValues;
+ wxVector<wxPGCommonValue*> m_commonValues;
+
// Which cv selection really sets value to unspecified?
int m_cvUnspecified;
void OnMouseUp( wxMouseEvent &event );
void OnKey( wxKeyEvent &event );
void OnKeyUp( wxKeyEvent &event );
- void OnNavigationKey( wxNavigationKeyEvent& event );
void OnResize( wxSizeEvent &event );
// event handlers
int CacheColour( const wxColour& colour );
- void DoSetPropertyName( wxPGProperty* p, const wxString& newname );
-
- // Setups event handling for child control
- void SetupEventHandling( wxWindow* wnd, int id );
+ // Sets up basic event handling for child control
+ void SetupChildEventHandling( wxWindow* wnd );
void CustomSetCursor( int type, bool override = false );
wxVariant* pValue = NULL,
unsigned int selFlags = 0 );
+ void SetFocusOnCanvas();
+
bool DoHideProperty( wxPGProperty* p, bool hide, int flags );
private:
- bool ButtonTriggerKeyTest( wxKeyEvent &event );
-
-#endif // DOXYGEN_SHOULD_SKIP_THIS
+ bool ButtonTriggerKeyTest( int action, wxKeyEvent& event );
-private:
DECLARE_EVENT_TABLE()
#endif // #ifndef SWIG
};
{
wxPropertyGrid* pg = GetGrid();
if ( pg )
- return pg->GetCommonValueCount();
+ return (int) pg->GetCommonValueCount();
}
return 0;
}
return *m_validationInfo;
}
- /** Returns true if event has associated property. */
- bool HasProperty() const { return ( m_property != (wxPGProperty*) NULL ); }
-
/** Returns true if you can veto the action that the event is signaling.
*/
bool CanVeto() const { return m_canVeto; }
wxASSERT_MSG( m_validationInfo,
"Only call GetValue from a handler "
"of event type that supports it" );
- return *m_validationInfo->m_pValue;
+ return m_validationInfo->GetValue();
}
/**
Only effective if Veto was also called, and only allowed if event type
is wxEVT_PG_CHANGING.
*/
- void SetValidationFailureBehavior( int flags )
+ void SetValidationFailureBehavior( wxPGVFBFlags flags )
{
wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
- m_validationInfo->m_failureBehavior = (wxPGVFBFlags) flags;
+ m_validationInfo->SetFailureBehavior( flags );
}
/** Sets custom failure message for this time only. Only applies if
void SetValidationFailureMessage( const wxString& message )
{
wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
- m_validationInfo->m_failureMessage = message;
+ m_validationInfo->SetFailureMessage( message );
}
#ifndef SWIG
wxPGVFBFlags GetValidationFailureBehavior() const
{
wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
- return m_validationInfo->m_failureBehavior;
+ return m_validationInfo->GetFailureBehavior();
}
void SetCanVeto( bool canVeto ) { m_canVeto = canVeto; }
// #undef const wxString&
#endif
-// Doxygen special
-#ifdef DOXYGEN
- #include "wx/propgrid/editor.h"
- #include "wx/propgrid/manager.h"
-#endif
-
// -----------------------------------------------------------------------
+#endif
+
#endif // _WX_PROPGRID_PROPGRID_H_