202 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        wx/addremovectrl.h
 | 
						|
// Purpose:     documentation of wxAddRemoveCtrl
 | 
						|
// Author:      Vadim Zeitlin
 | 
						|
// Created:     2015-02-04
 | 
						|
// Copyright:   (c) 2015 Vadim Zeitlin <vadim@wxwidgets.org>
 | 
						|
// Licence:     wxWindows licence
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
/**
 | 
						|
    @class wxAddRemoveAdaptor
 | 
						|
 | 
						|
    Object used to mediate between wxAddRemoveCtrl and the control showing the
 | 
						|
    list of items which can be added or removed.
 | 
						|
 | 
						|
    This is a base class from which custom classes used with
 | 
						|
    wxAddRemoveCtrl::SetAdaptor() must be derived. Object of this class are
 | 
						|
    typically associated with the control showing the list of items on
 | 
						|
    creation, i.e. the derived class constructor would normally take a pointer
 | 
						|
    to the control which will be returned from GetItemsCtrl() later.
 | 
						|
 | 
						|
    @since 3.1.0
 | 
						|
 | 
						|
    @library{wxcore}
 | 
						|
 */
 | 
						|
class wxAddRemoveAdaptor
 | 
						|
{
 | 
						|
public:
 | 
						|
    /// Default and trivial constructor.
 | 
						|
    wxAddRemoveAdaptor();
 | 
						|
 | 
						|
    /// Trivial but virtual destructor.
 | 
						|
    virtual ~wxAddRemoveAdaptor();
 | 
						|
 | 
						|
    /**
 | 
						|
        Override to return the associated control.
 | 
						|
 | 
						|
        The control must be a child of the associated wxAddRemoveCtrl.
 | 
						|
     */
 | 
						|
    virtual wxWindow* GetItemsCtrl() const = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Override to return whether a new item can be added to the control.
 | 
						|
 | 
						|
        A typical implementation would simply always return @true, but it is
 | 
						|
        also possible to return @false if the list is "full" and can't contain
 | 
						|
        any more elements.
 | 
						|
     */
 | 
						|
    virtual bool CanAdd() const = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Override to return whether the currently selected item (if any) can be
 | 
						|
        removed from the control.
 | 
						|
 | 
						|
        The implementation should check if there is a currently selected item
 | 
						|
        and possibly if the user is allowed to remove this item.
 | 
						|
     */
 | 
						|
    virtual bool CanRemove() const = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Called when an item should be added.
 | 
						|
 | 
						|
        A typical implementation would either add a new item to the list
 | 
						|
        control and start editing it in place or ask the user for the item to
 | 
						|
        add first and then add it to the control returned by GetItemsCtrl().
 | 
						|
 | 
						|
        Notice that this method can only be called if CanAdd() currently
 | 
						|
        returns @true.
 | 
						|
     */
 | 
						|
    virtual void OnAdd() = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
        Called when the current item should be removed.
 | 
						|
 | 
						|
        The implementation should remove the currently selected item from the
 | 
						|
        control and update the selection.
 | 
						|
 | 
						|
        Notice that this method can only be called if CanRemove() currently
 | 
						|
        returns @true.
 | 
						|
     */
 | 
						|
    virtual void OnRemove() = 0;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    @class wxAddRemoveCtrl
 | 
						|
 | 
						|
    A class adding buttons to add and remove items to a list-like child
 | 
						|
    control.
 | 
						|
 | 
						|
    This class represents a composite control which combines any control
 | 
						|
    capable of showing multiple items, such as wxListBox, wxListCtrl,
 | 
						|
    wxTreeCtrl, wxDataViewCtrl or a custom control, with two buttons allowing
 | 
						|
    to add items and remove items from this list-like control. The advantage of
 | 
						|
    using this control instead of just creating and managing the buttons
 | 
						|
    directly is that the correct buttons and layout for the current platform
 | 
						|
    are used by this class. E.g. the buttons are positioned under the list
 | 
						|
    control under OS X and GTK+ but to its right under MSW and the buttons
 | 
						|
    themselves use system-specific bitmaps under OS X.
 | 
						|
 | 
						|
    This class is always used in conjunction with wxAddRemoveAdaptor which is
 | 
						|
    used to actually add items to or remove them from the control containing
 | 
						|
    the items when the corresponding button is pressed. The
 | 
						|
    @ref page_samples_dialogs "dialogs sample" shows how to do it: first you
 | 
						|
    need to derive a new class from wxAddRemoveAdaptor and implement its pure
 | 
						|
    virtual methods and then you must call SetAdaptor() with a newly allocated
 | 
						|
    object of this class. You also must create the control containing the items
 | 
						|
    with wxAddRemoveCtrl as parent. Here are the different steps in pseudocode:
 | 
						|
    @code
 | 
						|
        wxAddRemoveCtrl* ctrl = new wxAddRemoveCtrl(parent);
 | 
						|
 | 
						|
        // This can be any kind of control for which OnAdd() and OnRemove()
 | 
						|
        // below can be made to work.
 | 
						|
        wxListBox* lbox = new wxListBox(ctrl, ...);
 | 
						|
 | 
						|
        class ListBoxAdaptor : public wxAddRemoveAdaptor
 | 
						|
        {
 | 
						|
        public:
 | 
						|
            explicit ListBoxAdaptor(wxListBox* lbox) : m_lbox(lbox) { }
 | 
						|
 | 
						|
            virtual wxWindow* GetItemsCtrl() const { return m_lbox; }
 | 
						|
 | 
						|
            virtual bool CanAdd() const { return true; }
 | 
						|
            virtual bool CanRemove() const { return m_lbox->GetSelection() != wxNOT_FOUND; }
 | 
						|
            virtual void OnAdd() { ... get the new item from user and add it ... }
 | 
						|
            virtual void OnRemove() { m_lbox->Delete(m_lbox->GetSelection()); }
 | 
						|
 | 
						|
        private:
 | 
						|
            wxListBox* m_lbox;
 | 
						|
        };
 | 
						|
 | 
						|
        ctrl->SetAdaptor(new ListBoxAdaptor(lbox));
 | 
						|
    @endcode
 | 
						|
 | 
						|
    @since 3.1.0
 | 
						|
 | 
						|
    @library{wxcore}
 | 
						|
    @category{ctrl}
 | 
						|
 */
 | 
						|
class wxAddRemoveCtrl : public wxPanel
 | 
						|
{
 | 
						|
public:
 | 
						|
    /**
 | 
						|
        Default constructor.
 | 
						|
 | 
						|
        Use Create() later.
 | 
						|
     */
 | 
						|
    wxAddRemoveCtrl();
 | 
						|
 | 
						|
    /**
 | 
						|
        Constructor really creating the control window.
 | 
						|
 | 
						|
        SetAdaptor() still must be called later to finish initializing the
 | 
						|
        control.
 | 
						|
 | 
						|
        Parameters have the same meaning as in wxPanel::Create().
 | 
						|
     */
 | 
						|
    wxAddRemoveCtrl(wxWindow* parent,
 | 
						|
                    wxWindowID winid = wxID_ANY,
 | 
						|
                    const wxPoint& pos = wxDefaultPosition,
 | 
						|
                    const wxSize& size = wxDefaultSize,
 | 
						|
                    long style = 0,
 | 
						|
                    const wxString& name = wxAddRemoveCtrlNameStr);
 | 
						|
 | 
						|
    /**
 | 
						|
        Create the control window after using the default constructor.
 | 
						|
 | 
						|
        Parameters have the same meaning as in wxPanel::Create().
 | 
						|
     */
 | 
						|
    bool Create(wxWindow* parent,
 | 
						|
                wxWindowID winid = wxID_ANY,
 | 
						|
                const wxPoint& pos = wxDefaultPosition,
 | 
						|
                const wxSize& size = wxDefaultSize,
 | 
						|
                long style = 0,
 | 
						|
                const wxString& name = wxAddRemoveCtrlNameStr);
 | 
						|
 | 
						|
    /**
 | 
						|
        Associate the control with the specified adaptor object.
 | 
						|
 | 
						|
        This method must be called exactly once to finish initializing this
 | 
						|
        object.
 | 
						|
 | 
						|
        The adapter object must correspond to a control created as a child of
 | 
						|
        this window, i.e. wxAddRemoveAdaptor::GetItemsCtrl() must return a
 | 
						|
        pointer to an existing child of this control.
 | 
						|
 | 
						|
        The @a adaptor pointer must be non-NULL and heap-allocated as the
 | 
						|
        control takes ownership of it and will delete it later.
 | 
						|
     */
 | 
						|
    void SetAdaptor(wxAddRemoveAdaptor* adaptor);
 | 
						|
 | 
						|
    /**
 | 
						|
        Sets the tooltips used for the add and remove buttons.
 | 
						|
 | 
						|
        Show the specified tooltips when the mouse hovers over the buttons used
 | 
						|
        to add and remove items, respectively.
 | 
						|
 | 
						|
        This method can only be used after calling SetAdaptor().
 | 
						|
     */
 | 
						|
    void SetButtonsToolTips(const wxString& addtip, const wxString& removetip);
 | 
						|
};
 |