Fix and enhance support for client data in wxRibbonButtonBar.

Add the possibility to retrieve the client data associated with a button and
not only set it (which wasn't very useful on its own).

Also allow having both typed (owned) and untyped (not owned) client data, as
in the other wxWidgets controls.

To avoid confusion between two different kinds of data, remove "client_data"
argument from the functions adding buttons and provide separate methods with
distinct names for setting and getting client data.

Closes #14630.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72529 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-09-20 20:02:25 +00:00
parent 7f08b8283b
commit 652aa9360f
4 changed files with 83 additions and 20 deletions

View File

@@ -117,7 +117,7 @@ public:
wxBitmap bitmap_small;
wxBitmap bitmap_small_disabled;
wxRibbonButtonBarButtonSizeInfo sizes[3];
wxObject* client_data;
wxClientDataContainer client_data;
int id;
wxRibbonButtonKind kind;
long state;
@@ -278,12 +278,10 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddButton(
const wxBitmap& bitmap_disabled,
const wxBitmap& bitmap_small_disabled,
wxRibbonButtonKind kind,
const wxString& help_string,
wxObject* client_data)
const wxString& help_string)
{
return InsertButton(GetButtonCount(), button_id, label, bitmap,
bitmap_small, bitmap_disabled,bitmap_small_disabled, kind, help_string,
client_data);
bitmap_small, bitmap_disabled,bitmap_small_disabled, kind, help_string);
}
wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton(
@@ -295,8 +293,7 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton(
const wxBitmap& bitmap_disabled,
const wxBitmap& bitmap_small_disabled,
wxRibbonButtonKind kind,
const wxString& help_string,
wxObject* client_data)
const wxString& help_string)
{
wxASSERT(bitmap.IsOk() || bitmap_small.IsOk());
if(m_buttons.IsEmpty())
@@ -358,7 +355,6 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton(
}
base->kind = kind;
base->help_string = help_string;
base->client_data = client_data;
base->state = 0;
wxClientDC temp_dc(this);
@@ -371,6 +367,42 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton(
return base;
}
void
wxRibbonButtonBar::SetItemClientObject(wxRibbonButtonBarButtonBase* item,
wxClientData* data)
{
wxCHECK_RET( item, "Can't associate client object with an invalid item" );
item->client_data.SetClientObject(data);
}
wxClientData*
wxRibbonButtonBar::GetItemClientObject(const wxRibbonButtonBarButtonBase* item) const
{
wxCHECK_MSG( item, NULL, "Can't get client object for an invalid item" );
return item->client_data.GetClientObject();
}
void
wxRibbonButtonBar::SetItemClientData(wxRibbonButtonBarButtonBase* item,
void* data)
{
wxCHECK_RET( item, "Can't associate client data with an invalid item" );
item->client_data.SetClientData(data);
}
void*
wxRibbonButtonBar::GetItemClientData(const wxRibbonButtonBarButtonBase* item) const
{
wxCHECK_MSG( item, NULL, "Can't get client data for an invalid item" );
return item->client_data.GetClientData();
}
wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton(
size_t pos,
int button_id,