]> git.saurik.com Git - wxWidgets.git/commitdiff
use report mode for the wxListbook list control if there are no images (#9484)
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 6 Jun 2008 23:50:21 +0000 (23:50 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 6 Jun 2008 23:50:21 +0000 (23:50 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54001 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

interface/listbook.h
src/generic/listbkg.cpp

index 55d9427045f4669f9e486383e67850fb5cfe44c7..28855b7ef39b74cdb3693edbfc69940d5e1e009e 100644 (file)
     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
index 2bfb0b4d09abf7e99766c87a6c9b4a78901e0c09..a19f3ce07d3ed317cf533901a436c872cef3f0ee 100644 (file)
@@ -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);
 }