use report mode for the wxListbook list control if there are no images (#9484)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54001 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -14,6 +14,10 @@
|
||||
uses a wxListCtrl to show the labels instead of the
|
||||
tabs.
|
||||
|
||||
The underlying wxListCtrl displays page labels in a one-column report view
|
||||
by default. Calling wxListbook::SetImageList will implicitly switch the
|
||||
control to use an icon view.
|
||||
|
||||
There is no documentation for this class yet but its usage is
|
||||
identical to wxNotebook (except for the features clearly related to tabs
|
||||
only), so please refer to that class documentation for now. You can also
|
||||
|
@@ -103,10 +103,11 @@ wxListbook::Create(wxWindow *parent,
|
||||
wxID_ANY,
|
||||
wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
wxLC_ICON | wxLC_SINGLE_SEL |
|
||||
(IsVertical() ? wxLC_ALIGN_LEFT : wxLC_ALIGN_TOP)
|
||||
wxLC_SINGLE_SEL | wxLC_REPORT | wxLC_NO_HEADER
|
||||
);
|
||||
|
||||
GetListView()->InsertColumn(0, wxT("Pages"));
|
||||
|
||||
#ifdef __WXMSW__
|
||||
// On XP with themes enabled the GetViewRect used in GetControllerSize() to
|
||||
// determine the space needed for the list view will incorrectly return
|
||||
@@ -232,11 +233,19 @@ wxString wxListbook::GetPageText(size_t n) const
|
||||
return GetListView()->GetItemText(n);
|
||||
}
|
||||
|
||||
int wxListbook::GetPageImage(size_t WXUNUSED(n)) const
|
||||
int wxListbook::GetPageImage(size_t n) const
|
||||
{
|
||||
wxFAIL_MSG( _T("wxListbook::GetPageImage() not implemented") );
|
||||
wxListItem item;
|
||||
item.SetId(n);
|
||||
|
||||
return wxNOT_FOUND;
|
||||
if (GetListView()->GetItem(item))
|
||||
{
|
||||
return item.GetImage();
|
||||
}
|
||||
else
|
||||
{
|
||||
return wxNOT_FOUND;
|
||||
}
|
||||
}
|
||||
|
||||
bool wxListbook::SetPageImage(size_t n, int imageId)
|
||||
@@ -250,7 +259,55 @@ bool wxListbook::SetPageImage(size_t n, int imageId)
|
||||
|
||||
void wxListbook::SetImageList(wxImageList *imageList)
|
||||
{
|
||||
GetListView()->SetImageList(imageList, wxIMAGE_LIST_NORMAL);
|
||||
wxListView * const list = GetListView();
|
||||
|
||||
// If imageList presence has changed, we update the list control view
|
||||
if ( (imageList != NULL) != (GetImageList() != NULL) )
|
||||
{
|
||||
wxArrayString labels;
|
||||
labels.Alloc(GetPageCount());
|
||||
|
||||
wxArrayInt imageIds;
|
||||
imageIds.Alloc(GetPageCount());
|
||||
|
||||
const int oldSel = GetSelection();
|
||||
size_t i;
|
||||
|
||||
// Grab snapshot of all list control items before changing the window
|
||||
// style (which deletes the items)
|
||||
for ( i = 0; i < GetPageCount(); i++ )
|
||||
{
|
||||
labels.Add(GetPageText(i));
|
||||
imageIds.Add(GetPageImage(i));
|
||||
}
|
||||
|
||||
// Update the style to use icon view for images, report view otherwise
|
||||
long style = wxLC_SINGLE_SEL;
|
||||
if ( imageList )
|
||||
{
|
||||
list->SetWindowStyleFlag(style |
|
||||
(IsVertical() ? wxLC_ALIGN_LEFT
|
||||
: wxLC_ALIGN_TOP) |
|
||||
wxLC_ICON);
|
||||
}
|
||||
else // no image list
|
||||
{
|
||||
list->SetWindowStyleFlag(style | wxLC_REPORT | wxLC_NO_HEADER);
|
||||
list->InsertColumn(0, wxT("Pages"));
|
||||
}
|
||||
|
||||
// Add back the list control items
|
||||
for ( i = 0; i < GetPageCount(); i++ )
|
||||
{
|
||||
list->InsertItem(i, labels[i], imageIds[i]);
|
||||
}
|
||||
|
||||
// Restore selection
|
||||
if ( oldSel != wxNOT_FOUND )
|
||||
SetSelection(oldSel);
|
||||
}
|
||||
|
||||
list->SetImageList(imageList, wxIMAGE_LIST_NORMAL);
|
||||
|
||||
wxBookCtrlBase::SetImageList(imageList);
|
||||
}
|
||||
|
Reference in New Issue
Block a user