f4bc1aa27c
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55685 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
656 lines
21 KiB
C++
656 lines
21 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/propgrid/editors.h
|
|
// Purpose: wxPropertyGrid editors
|
|
// Author: Jaakko Salli
|
|
// Modified by:
|
|
// Created: 2007-04-14
|
|
// RCS-ID: $Id:
|
|
// Copyright: (c) Jaakko Salli
|
|
// Licence: wxWindows license
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_PROPGRID_EDITORS_H_
|
|
#define _WX_PROPGRID_EDITORS_H_
|
|
|
|
#if wxUSE_PROPGRID
|
|
|
|
// -----------------------------------------------------------------------
|
|
// wxPGWindowList contains list of editor windows returned by CreateControls.
|
|
|
|
class wxPGWindowList
|
|
{
|
|
public:
|
|
wxPGWindowList()
|
|
{
|
|
m_primary = m_secondary = NULL;
|
|
}
|
|
|
|
void SetSecondary( wxWindow* secondary ) { m_secondary = secondary; }
|
|
|
|
wxWindow* m_primary;
|
|
wxWindow* m_secondary;
|
|
|
|
#ifndef SWIG
|
|
wxPGWindowList( wxWindow* a )
|
|
{
|
|
m_primary = a;
|
|
m_secondary = NULL;
|
|
};
|
|
wxPGWindowList( wxWindow* a, wxWindow* b )
|
|
{
|
|
m_primary = a;
|
|
m_secondary = b;
|
|
};
|
|
#endif
|
|
};
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
/** @class wxPGEditor
|
|
|
|
Base class for custom wxPropertyGrid editors.
|
|
|
|
@remarks
|
|
- Names of builtin property editors are: TextCtrl, Choice,
|
|
ComboBox, CheckBox, TextCtrlAndButton, and ChoiceAndButton. Additional
|
|
editors include SpinCtrl and DatePickerCtrl, but using them requires
|
|
calling wxPropertyGrid::RegisterAdditionalEditors() prior use.
|
|
|
|
- Pointer to builtin editor is available as wxPGEditor_EditorName
|
|
(eg. wxPGEditor_TextCtrl).
|
|
|
|
- To add new editor you need to register it first using static function
|
|
wxPropertyGrid::RegisterEditorClass(), with code like this:
|
|
@code
|
|
wxPGEditor *editorPointer = wxPropertyGrid::RegisterEditorClass(
|
|
new MyEditorClass(), "MyEditor");
|
|
@endcode
|
|
After that, wxPropertyGrid will take ownership of the given object, but
|
|
you should still store editorPointer somewhere, so you can pass it to
|
|
wxPGProperty::SetEditor(), or return it from
|
|
wxPGEditor::DoGetEditorClass().
|
|
|
|
@library{wxpropgrid}
|
|
@category{propgrid}
|
|
*/
|
|
class WXDLLIMPEXP_PROPGRID wxPGEditor : public wxObject
|
|
{
|
|
#ifndef SWIG
|
|
DECLARE_ABSTRACT_CLASS(wxPGEditor)
|
|
#endif
|
|
public:
|
|
|
|
/** Constructor. */
|
|
wxPGEditor()
|
|
: wxObject()
|
|
{
|
|
m_clientData = NULL;
|
|
}
|
|
|
|
/** Destructor. */
|
|
virtual ~wxPGEditor();
|
|
|
|
/**
|
|
Returns pointer to the name of the editor. For example,
|
|
wxPG_EDITOR(TextCtrl) has name "TextCtrl". This method is autogenerated
|
|
for custom editors.
|
|
*/
|
|
virtual wxString GetName() const = 0;
|
|
|
|
/**
|
|
Instantiates editor controls.
|
|
|
|
@param propgrid
|
|
wxPropertyGrid to which the property belongs (use as parent for
|
|
control).
|
|
@param property
|
|
Property for which this method is called.
|
|
@param pos
|
|
Position, inside wxPropertyGrid, to create control(s) to.
|
|
@param size
|
|
Initial size for control(s).
|
|
|
|
@remarks
|
|
- Primary control shall use id wxPG_SUBID1, and secondary (button)
|
|
control shall use wxPG_SUBID2.
|
|
- Implementation shoud use connect all necessary events to the
|
|
wxPropertyGrid::OnCustomEditorEvent. For Example:
|
|
@code
|
|
// Relays wxEVT_COMMAND_TEXT_UPDATED events of primary editor
|
|
// control to the OnEvent.
|
|
// NOTE: This event in particular is actually automatically
|
|
// conveyed, but it is just used as an example.
|
|
propgrid->Connect(wxPG_SUBID1, wxEVT_COMMAND_TEXT_UPDATED,
|
|
wxCommandEventHandler(
|
|
wxPropertyGrid::OnCustomEditorEvent));
|
|
@endcode
|
|
OnCustomEditorEvent will then forward events, first to
|
|
wxPGEditor::OnEvent and then to wxPGProperty::OnEvent.
|
|
|
|
*/
|
|
virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid,
|
|
wxPGProperty* property,
|
|
const wxPoint& pos,
|
|
const wxSize& size) const = 0;
|
|
#define wxPG_DECLARE_CREATECONTROLS \
|
|
virtual wxPGWindowList \
|
|
CreateControls( wxPropertyGrid* propgrid, wxPGProperty* property, \
|
|
const wxPoint& pos, const wxSize& sz ) const;
|
|
|
|
/** Loads value from property to the control. */
|
|
virtual void UpdateControl( wxPGProperty* property,
|
|
wxWindow* ctrl ) const = 0;
|
|
|
|
/**
|
|
Used to get the renderer to draw the value with when the control is
|
|
hidden.
|
|
|
|
Default implementation returns g_wxPGDefaultRenderer.
|
|
*/
|
|
//virtual wxPGCellRenderer* GetCellRenderer() const;
|
|
|
|
/** Draws value for given property.
|
|
*/
|
|
virtual void DrawValue( wxDC& dc,
|
|
const wxRect& rect,
|
|
wxPGProperty* property,
|
|
const wxString& text ) const;
|
|
|
|
/** Handles events. Returns true if value in control was modified
|
|
(see wxPGProperty::OnEvent for more information).
|
|
*/
|
|
virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
|
|
wxWindow* wnd_primary, wxEvent& event ) const = 0;
|
|
|
|
#if !defined(SWIG) || defined(CREATE_VCW)
|
|
/** Returns value from control, via parameter 'variant'.
|
|
Usually ends up calling property's StringToValue or IntToValue.
|
|
Returns true if value was different.
|
|
*/
|
|
virtual bool GetValueFromControl( wxVariant& variant,
|
|
wxPGProperty* property,
|
|
wxWindow* ctrl ) const;
|
|
#endif
|
|
|
|
/** Sets value in control to unspecified. */
|
|
virtual void SetValueToUnspecified( wxPGProperty* property,
|
|
wxWindow* ctrl ) const = 0;
|
|
|
|
/** Sets control's value specifically from string. */
|
|
virtual void SetControlStringValue( wxPGProperty* property,
|
|
wxWindow* ctrl,
|
|
const wxString& txt ) const;
|
|
|
|
/** Sets control's value specifically from int (applies to choice etc.). */
|
|
virtual void SetControlIntValue( wxPGProperty* property,
|
|
wxWindow* ctrl,
|
|
int value ) const;
|
|
|
|
/** Inserts item to existing control. Index -1 means appending.
|
|
Default implementation does nothing. Returns index of item added.
|
|
*/
|
|
virtual int InsertItem( wxWindow* ctrl,
|
|
const wxString& label,
|
|
int index ) const;
|
|
|
|
/** Deletes item from existing control.
|
|
Default implementation does nothing.
|
|
*/
|
|
virtual void DeleteItem( wxWindow* ctrl, int index ) const;
|
|
|
|
/** Extra processing when control gains focus. For example, wxTextCtrl
|
|
based controls should select all text.
|
|
*/
|
|
virtual void OnFocus( wxPGProperty* property, wxWindow* wnd ) const;
|
|
|
|
/** Returns true if control itself can contain the custom image. Default is
|
|
to return false.
|
|
*/
|
|
virtual bool CanContainCustomImage() const;
|
|
|
|
//
|
|
// This member is public so scripting language bindings
|
|
// wrapper code can access it freely.
|
|
void* m_clientData;
|
|
};
|
|
|
|
|
|
//
|
|
// Note that we don't use this macro in this file because
|
|
// otherwise doxygen gets confused.
|
|
//
|
|
#define WX_PG_DECLARE_EDITOR_CLASS(CLASSNAME) \
|
|
DECLARE_DYNAMIC_CLASS(CLASSNAME) \
|
|
public: \
|
|
virtual wxString GetName() const; \
|
|
private:
|
|
|
|
|
|
#define WX_PG_IMPLEMENT_EDITOR_CLASS(EDITOR,CLASSNAME,BASECLASS) \
|
|
IMPLEMENT_DYNAMIC_CLASS(CLASSNAME, BASECLASS) \
|
|
wxString CLASSNAME::GetName() const \
|
|
{ \
|
|
return wxS(#EDITOR); \
|
|
} \
|
|
wxPGEditor* wxPGEditor_##EDITOR = (wxPGEditor*) NULL; \
|
|
wxPGEditor* wxPGConstruct##EDITOR##EditorClass() \
|
|
{ \
|
|
wxASSERT( !wxPGEditor_##EDITOR ); \
|
|
return new CLASSNAME(); \
|
|
}
|
|
|
|
|
|
#define WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS() \
|
|
wxPG_DECLARE_CREATECONTROLS \
|
|
virtual void UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const; \
|
|
virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property, \
|
|
wxWindow* primary, wxEvent& event ) const; \
|
|
virtual bool GetValueFromControl( wxVariant& variant, \
|
|
wxPGProperty* property, \
|
|
wxWindow* ctrl ) const; \
|
|
virtual void SetValueToUnspecified( wxPGProperty* property, \
|
|
wxWindow* ctrl ) const;
|
|
|
|
|
|
//
|
|
// Following are the built-in editor classes.
|
|
//
|
|
|
|
class WXDLLIMPEXP_PROPGRID wxPGTextCtrlEditor : public wxPGEditor
|
|
{
|
|
#ifndef SWIG
|
|
DECLARE_DYNAMIC_CLASS(wxPGTextCtrlEditor)
|
|
#endif
|
|
public:
|
|
wxPGTextCtrlEditor() {}
|
|
virtual ~wxPGTextCtrlEditor();
|
|
|
|
WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS()
|
|
virtual wxString GetName() const;
|
|
|
|
//virtual wxPGCellRenderer* GetCellRenderer() const;
|
|
virtual void SetControlStringValue( wxPGProperty* property,
|
|
wxWindow* ctrl,
|
|
const wxString& txt ) const;
|
|
virtual void OnFocus( wxPGProperty* property, wxWindow* wnd ) const;
|
|
|
|
// Provided so that, for example, ComboBox editor can use the same code
|
|
// (multiple inheritance would get way too messy).
|
|
static bool OnTextCtrlEvent( wxPropertyGrid* propgrid,
|
|
wxPGProperty* property,
|
|
wxWindow* ctrl,
|
|
wxEvent& event );
|
|
|
|
static bool GetTextCtrlValueFromControl( wxVariant& variant,
|
|
wxPGProperty* property,
|
|
wxWindow* ctrl );
|
|
|
|
};
|
|
|
|
|
|
class WXDLLIMPEXP_PROPGRID wxPGChoiceEditor : public wxPGEditor
|
|
{
|
|
#ifndef SWIG
|
|
DECLARE_DYNAMIC_CLASS(wxPGChoiceEditor)
|
|
#endif
|
|
public:
|
|
wxPGChoiceEditor() {}
|
|
virtual ~wxPGChoiceEditor();
|
|
|
|
WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS()
|
|
virtual wxString GetName() const;
|
|
|
|
virtual void SetControlIntValue( wxPGProperty* property,
|
|
wxWindow* ctrl,
|
|
int value ) const;
|
|
virtual void SetControlStringValue( wxPGProperty* property,
|
|
wxWindow* ctrl,
|
|
const wxString& txt ) const;
|
|
|
|
virtual int InsertItem( wxWindow* ctrl,
|
|
const wxString& label,
|
|
int index ) const;
|
|
virtual void DeleteItem( wxWindow* ctrl, int index ) const;
|
|
virtual bool CanContainCustomImage() const;
|
|
|
|
// CreateControls calls this with CB_READONLY in extraStyle
|
|
wxWindow* CreateControlsBase( wxPropertyGrid* propgrid,
|
|
wxPGProperty* property,
|
|
const wxPoint& pos,
|
|
const wxSize& sz,
|
|
long extraStyle ) const;
|
|
|
|
};
|
|
|
|
|
|
class WXDLLIMPEXP_PROPGRID wxPGComboBoxEditor : public wxPGChoiceEditor
|
|
{
|
|
#ifndef SWIG
|
|
DECLARE_DYNAMIC_CLASS(wxPGComboBoxEditor)
|
|
#endif
|
|
public:
|
|
wxPGComboBoxEditor() {}
|
|
virtual ~wxPGComboBoxEditor();
|
|
|
|
// Macro is used for convenience due to different signature with wxPython
|
|
wxPG_DECLARE_CREATECONTROLS
|
|
|
|
virtual wxString GetName() const;
|
|
|
|
virtual void UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const;
|
|
|
|
virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
|
|
wxWindow* ctrl, wxEvent& event ) const;
|
|
|
|
virtual bool GetValueFromControl( wxVariant& variant,
|
|
wxPGProperty* property,
|
|
wxWindow* ctrl ) const;
|
|
|
|
virtual void OnFocus( wxPGProperty* property, wxWindow* wnd ) const;
|
|
|
|
};
|
|
|
|
|
|
// Exclude classes from being able to be derived from in wxPython bindings
|
|
#ifndef SWIG
|
|
|
|
class WXDLLIMPEXP_PROPGRID wxPGChoiceAndButtonEditor : public wxPGChoiceEditor
|
|
{
|
|
public:
|
|
wxPGChoiceAndButtonEditor() {}
|
|
virtual ~wxPGChoiceAndButtonEditor();
|
|
virtual wxString GetName() const;
|
|
|
|
// Macro is used for convenience due to different signature with wxPython
|
|
wxPG_DECLARE_CREATECONTROLS
|
|
|
|
DECLARE_DYNAMIC_CLASS(wxPGChoiceAndButtonEditor)
|
|
};
|
|
|
|
class WXDLLIMPEXP_PROPGRID
|
|
wxPGTextCtrlAndButtonEditor : public wxPGTextCtrlEditor
|
|
{
|
|
public:
|
|
wxPGTextCtrlAndButtonEditor() {}
|
|
virtual ~wxPGTextCtrlAndButtonEditor();
|
|
virtual wxString GetName() const;
|
|
wxPG_DECLARE_CREATECONTROLS
|
|
|
|
DECLARE_DYNAMIC_CLASS(wxPGTextCtrlAndButtonEditor)
|
|
};
|
|
|
|
#endif // !SWIG
|
|
|
|
|
|
#if wxPG_INCLUDE_CHECKBOX || defined(DOXYGEN)
|
|
|
|
//
|
|
// Use custom check box code instead of native control
|
|
// for cleaner (ie. more integrated) look.
|
|
//
|
|
class WXDLLIMPEXP_PROPGRID wxPGCheckBoxEditor : public wxPGEditor
|
|
{
|
|
#ifndef SWIG
|
|
DECLARE_DYNAMIC_CLASS(wxPGCheckBoxEditor)
|
|
#endif
|
|
public:
|
|
wxPGCheckBoxEditor() {}
|
|
virtual ~wxPGCheckBoxEditor();
|
|
|
|
virtual wxString GetName() const;
|
|
WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS()
|
|
|
|
virtual void DrawValue( wxDC& dc,
|
|
const wxRect& rect,
|
|
wxPGProperty* property,
|
|
const wxString& text ) const;
|
|
//virtual wxPGCellRenderer* GetCellRenderer() const;
|
|
|
|
virtual void SetControlIntValue( wxPGProperty* property,
|
|
wxWindow* ctrl,
|
|
int value ) const;
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
// Editor class registeration macros
|
|
|
|
#define wxPGRegisterEditorClass(EDITOR) \
|
|
if ( wxPGEditor_##EDITOR == (wxPGEditor*) NULL ) \
|
|
{ \
|
|
wxPGEditor_##EDITOR = wxPropertyGrid::RegisterEditorClass( \
|
|
wxPGConstruct##EDITOR##EditorClass(), wxS(#EDITOR) ); \
|
|
}
|
|
|
|
// Use this in RegisterDefaultEditors.
|
|
#define wxPGRegisterDefaultEditorClass(EDITOR) \
|
|
if ( wxPGEditor_##EDITOR == (wxPGEditor*) NULL ) \
|
|
{ \
|
|
wxPGEditor_##EDITOR = wxPropertyGrid::RegisterEditorClass( \
|
|
wxPGConstruct##EDITOR##EditorClass(), wxS(#EDITOR), true ); \
|
|
}
|
|
|
|
#define wxPG_INIT_REQUIRED_EDITOR(T) \
|
|
wxPGRegisterEditorClass(T)
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
/** @class wxPGEditorDialogAdapter
|
|
|
|
Derive a class from this to adapt an existing editor dialog or function to
|
|
be used when editor button of a property is pushed.
|
|
|
|
You only need to derive class and implement DoShowDialog() to create and
|
|
show the dialog, and finally submit the value returned by the dialog
|
|
via SetValue().
|
|
|
|
@library{wxpropgrid}
|
|
@category{propgrid}
|
|
*/
|
|
class WXDLLIMPEXP_PROPGRID wxPGEditorDialogAdapter : public wxObject
|
|
{
|
|
#ifndef SWIG
|
|
DECLARE_ABSTRACT_CLASS(wxPGEditorDialogAdapter)
|
|
#endif
|
|
public:
|
|
wxPGEditorDialogAdapter()
|
|
: wxObject()
|
|
{
|
|
m_clientData = NULL;
|
|
}
|
|
|
|
virtual ~wxPGEditorDialogAdapter() { }
|
|
|
|
bool ShowDialog( wxPropertyGrid* propGrid, wxPGProperty* property );
|
|
|
|
virtual bool DoShowDialog( wxPropertyGrid* propGrid,
|
|
wxPGProperty* property ) = 0;
|
|
|
|
void SetValue( wxVariant value )
|
|
{
|
|
m_value = value;
|
|
}
|
|
|
|
/**
|
|
This method is typically only used if deriving class from existing
|
|
adapter with value conversion purposes.
|
|
*/
|
|
wxVariant& GetValue() { return m_value; }
|
|
|
|
//
|
|
// This member is public so scripting language bindings
|
|
// wrapper code can access it freely.
|
|
void* m_clientData;
|
|
|
|
private:
|
|
wxVariant m_value;
|
|
};
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
/** @class wxPGMultiButton
|
|
|
|
This class can be used to have multiple buttons in a property editor.
|
|
You will need to create a new property editor class, override
|
|
CreateControls, and have it return wxPGMultiButton instance in
|
|
wxPGWindowList::SetSecondary(). For instance, here we add three buttons to
|
|
a textctrl editor:
|
|
|
|
@code
|
|
|
|
#include <wx/propgrid/editors.h>
|
|
|
|
class wxMultiButtonTextCtrlEditor : public wxPGTextCtrlEditor
|
|
{
|
|
WX_PG_DECLARE_EDITOR_CLASS(wxMultiButtonTextCtrlEditor)
|
|
public:
|
|
wxMultiButtonTextCtrlEditor() {}
|
|
virtual ~wxMultiButtonTextCtrlEditor() {}
|
|
|
|
wxPG_DECLARE_CREATECONTROLS
|
|
virtual bool OnEvent( wxPropertyGrid* propGrid,
|
|
wxPGProperty* property,
|
|
wxWindow* ctrl,
|
|
wxEvent& event ) const;
|
|
|
|
};
|
|
|
|
WX_PG_IMPLEMENT_EDITOR_CLASS(MultiButtonTextCtrlEditor,
|
|
wxMultiButtonTextCtrlEditor,
|
|
wxPGTextCtrlEditor)
|
|
|
|
wxPGWindowList
|
|
wxMultiButtonTextCtrlEditor::CreateControls( wxPropertyGrid* propGrid,
|
|
wxPGProperty* property,
|
|
const wxPoint& pos,
|
|
const wxSize& sz ) const
|
|
{
|
|
// Create and populate buttons-subwindow
|
|
wxPGMultiButton* buttons = new wxPGMultiButton( propGrid, sz );
|
|
|
|
// Add two regular buttons
|
|
buttons->Add( "..." );
|
|
buttons->Add( "A" );
|
|
// Add a bitmap button
|
|
buttons->Add( wxArtProvider::GetBitmap(wxART_FOLDER) );
|
|
|
|
// Create the 'primary' editor control (textctrl in this case)
|
|
wxPGWindowList wndList = wxPGTextCtrlEditor::CreateControls(
|
|
propGrid,
|
|
property,
|
|
pos,
|
|
buttons->GetPrimarySize()
|
|
);
|
|
|
|
// Finally, move buttons-subwindow to correct position and make sure
|
|
// returned wxPGWindowList contains our custom button list.
|
|
buttons->FinalizePosition(pos);
|
|
|
|
wndList.SetSecondary( buttons );
|
|
return wndList;
|
|
}
|
|
|
|
bool wxMultiButtonTextCtrlEditor::OnEvent( wxPropertyGrid* propGrid,
|
|
wxPGProperty* property,
|
|
wxWindow* ctrl,
|
|
wxEvent& event ) const
|
|
{
|
|
if ( event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED )
|
|
{
|
|
wxPGMultiButton* buttons = (wxPGMultiButton*)
|
|
propGrid->GetEditorControlSecondary();
|
|
|
|
if ( event.GetId() == buttons->GetButtonId(0) )
|
|
{
|
|
// Do something when first button is pressed
|
|
return true;
|
|
}
|
|
if ( event.GetId() == buttons->GetButtonId(1) )
|
|
{
|
|
// Do something when first button is pressed
|
|
return true;
|
|
}
|
|
if ( event.GetId() == buttons->GetButtonId(2) )
|
|
{
|
|
// Do something when second button is pressed
|
|
return true;
|
|
}
|
|
}
|
|
return wxPGTextCtrlEditor::OnEvent(propGrid, property, ctrl, event);
|
|
}
|
|
|
|
@endcode
|
|
|
|
Further to use this editor, code like this can be used:
|
|
|
|
@code
|
|
|
|
// Register editor class - needs only to be called once
|
|
wxPGRegisterEditorClass( MultiButtonTextCtrlEditor );
|
|
|
|
// Insert the property that will have multiple buttons
|
|
propGrid->Append( new wxLongStringProperty("MultipleButtons",
|
|
wxPG_LABEL) );
|
|
|
|
// Change property to use editor created in the previous code segment
|
|
propGrid->SetPropertyEditor( "MultipleButtons",
|
|
wxPG_EDITOR(MultiButtonTextCtrlEditor) );
|
|
|
|
@endcode
|
|
|
|
@library{wxpropgrid}
|
|
@category{propgrid}
|
|
*/
|
|
class WXDLLIMPEXP_PROPGRID wxPGMultiButton : public wxWindow
|
|
{
|
|
public:
|
|
wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz );
|
|
|
|
wxWindow* GetButton( unsigned int i ) { return (wxWindow*) m_buttons[i]; }
|
|
const wxWindow* GetButton( unsigned int i ) const
|
|
{ return (const wxWindow*) m_buttons[i]; }
|
|
|
|
/** Utility function to be used in event handlers.
|
|
*/
|
|
int GetButtonId( unsigned int i ) const { return GetButton(i)->GetId(); }
|
|
|
|
/** Returns number of buttons.
|
|
*/
|
|
int GetCount() const { return m_buttons.Count(); }
|
|
|
|
void Add( const wxString& label, int id = -2 );
|
|
#if wxUSE_BMPBUTTON
|
|
void Add( const wxBitmap& bitmap, int id = -2 );
|
|
#endif
|
|
|
|
wxSize GetPrimarySize() const
|
|
{
|
|
return wxSize(m_fullEditorSize.x - m_buttonsWidth, m_fullEditorSize.y);
|
|
}
|
|
|
|
void FinalizePosition( const wxPoint& pos )
|
|
{
|
|
Move( pos.x + m_fullEditorSize.x - m_buttonsWidth, pos.y );
|
|
}
|
|
|
|
#ifndef DOXYGEN
|
|
protected:
|
|
|
|
int GenId( int id ) const;
|
|
|
|
wxArrayPtrVoid m_buttons;
|
|
wxSize m_fullEditorSize;
|
|
int m_buttonsWidth;
|
|
#endif // !DOXYGEN
|
|
};
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
#endif // wxUSE_PROPGRID
|
|
|
|
#endif // _WX_PROPGRID_EDITORS_H_
|