From: Vadim Zeitlin Date: Wed, 4 Jul 2012 17:09:53 +0000 (+0000) Subject: Use list mode in wxListbook list control instead of report. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/0f79c83f89a625c88fc95afd30a685c3124fe6c9 Use list mode in wxListbook list control instead of report. Use wxLC_LIST instead of wxLC_REPORT when we don't have any icons. This makes the code simpler as wxLC_LIST is more similar to wxLC_ICON which we used, and continue to use, when we do have icons, because we don't need to add and remove any columns on the fly. And it fixes the appearance of wxListbook without images with wxBK_TOP or wxBK_BOTTOM styles as it now lays out its items horizontally and not vertically as before. It also fixes the best size calculation of wxListbook control since the changes to wxListCtrl best size calculations in r71733 as a nice side effect. Closes #14451. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71965 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/listbook.h b/include/wx/listbook.h index 1d8853526c..4e46af0847 100644 --- a/include/wx/listbook.h +++ b/include/wx/listbook.h @@ -88,10 +88,6 @@ protected: wxBookCtrlEvent* CreatePageChangingEvent() const; void MakeChangedEvent(wxBookCtrlEvent &event); - // get flags for different list control modes - long GetListCtrlIconViewFlags() const; - long GetListCtrlReportViewFlags() const; - // event handlers void OnListSelected(wxListEvent& event); void OnSize(wxSizeEvent& event); diff --git a/src/generic/listbkg.cpp b/src/generic/listbkg.cpp index 0861211c0e..88a3c4a7ff 100644 --- a/src/generic/listbkg.cpp +++ b/src/generic/listbkg.cpp @@ -38,24 +38,6 @@ #include "wx/sysopt.h" -namespace -{ - -// FIXME: This function exists because native OS X wxListCtrl seems to have -// problems with report view, either imperfect display or reported hanging, so -// disable it for now (but it should be fixed, and this function removed). -bool CanUseReportView() -{ -#if defined(__WXMAC__) && !defined(__WXUNIVERSAL__) && wxOSX_USE_CARBON - if (wxSystemOptions::GetOptionInt(wxMAC_ALWAYS_USE_GENERIC_LISTCTRL) == 0) - return false; - else -#endif - return true; -} - -} // anonymous namespace - // ---------------------------------------------------------------------------- // various wxWidgets macros // ---------------------------------------------------------------------------- @@ -118,13 +100,10 @@ wxListbook::Create(wxWindow *parent, wxDefaultPosition, wxDefaultSize, wxLC_SINGLE_SEL | - (CanUseReportView() ? GetListCtrlReportViewFlags() - : GetListCtrlIconViewFlags()) + (IsVertical() ? wxLC_ALIGN_LEFT : wxLC_ALIGN_TOP) | + wxLC_LIST ); - if ( CanUseReportView() ) - 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 @@ -138,20 +117,6 @@ wxListbook::Create(wxWindow *parent, return true; } -// ---------------------------------------------------------------------------- -// wxListCtrl flags -// ---------------------------------------------------------------------------- - -long wxListbook::GetListCtrlIconViewFlags() const -{ - return (IsVertical() ? wxLC_ALIGN_LEFT : wxLC_ALIGN_TOP) | wxLC_ICON; -} - -long wxListbook::GetListCtrlReportViewFlags() const -{ - return wxLC_REPORT | wxLC_NO_HEADER; -} - // ---------------------------------------------------------------------------- // wxListbook geometry management // ---------------------------------------------------------------------------- @@ -259,39 +224,34 @@ bool wxListbook::SetPageImage(size_t n, int imageId) void wxListbook::SetImageList(wxImageList *imageList) { - if ( CanUseReportView() ) + wxListView * const list = GetListView(); + + // If imageList presence has changed, we update the list control style + if ( (imageList != NULL) != (GetImageList() != NULL) ) { - wxListView * const list = GetListView(); + // Preserve the selection which is lost when changing the mode + const int oldSel = GetSelection(); - // If imageList presence has changed, we update the list control view - if ( (imageList != NULL) != (GetImageList() != NULL) ) + // Update the style to use icon view for images, list view otherwise + long style = list->GetWindowStyle() & ~wxLC_MASK_TYPE; + if ( imageList ) + { + style |= wxLC_ICON; + } + else // no image list { - // Preserve the selection which is lost when changing the mode - const int oldSel = GetSelection(); - - // Update the style to use icon view for images, report view otherwise - long style = wxLC_SINGLE_SEL; - if ( imageList ) - { - style |= GetListCtrlIconViewFlags(); - } - else // no image list - { - style |= GetListCtrlReportViewFlags(); - } - - list->SetWindowStyleFlag(style); - if ( !imageList ) - list->InsertColumn(0, wxT("Pages")); - - // Restore selection - if ( oldSel != wxNOT_FOUND ) - SetSelection(oldSel); + style |= wxLC_LIST; } - list->SetImageList(imageList, wxIMAGE_LIST_NORMAL); + list->SetWindowStyleFlag(style); + + // Restore selection + if ( oldSel != wxNOT_FOUND ) + SetSelection(oldSel); } + list->SetImageList(imageList, wxIMAGE_LIST_NORMAL); + wxBookCtrlBase::SetImageList(imageList); }