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
|
uses a wxListCtrl to show the labels instead of the
|
||||||
tabs.
|
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
|
There is no documentation for this class yet but its usage is
|
||||||
identical to wxNotebook (except for the features clearly related to tabs
|
identical to wxNotebook (except for the features clearly related to tabs
|
||||||
only), so please refer to that class documentation for now. You can also
|
only), so please refer to that class documentation for now. You can also
|
||||||
|
|||||||
@@ -103,10 +103,11 @@ wxListbook::Create(wxWindow *parent,
|
|||||||
wxID_ANY,
|
wxID_ANY,
|
||||||
wxDefaultPosition,
|
wxDefaultPosition,
|
||||||
wxDefaultSize,
|
wxDefaultSize,
|
||||||
wxLC_ICON | wxLC_SINGLE_SEL |
|
wxLC_SINGLE_SEL | wxLC_REPORT | wxLC_NO_HEADER
|
||||||
(IsVertical() ? wxLC_ALIGN_LEFT : wxLC_ALIGN_TOP)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
GetListView()->InsertColumn(0, wxT("Pages"));
|
||||||
|
|
||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
// On XP with themes enabled the GetViewRect used in GetControllerSize() to
|
// On XP with themes enabled the GetViewRect used in GetControllerSize() to
|
||||||
// determine the space needed for the list view will incorrectly return
|
// 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);
|
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)
|
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)
|
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);
|
wxBookCtrlBase::SetImageList(imageList);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user