+ // 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);