]> git.saurik.com Git - wxWidgets.git/commitdiff
Allow use of report mode non-native wxListCtrl in wxListBook under Mac.
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 16 Sep 2010 19:36:29 +0000 (19:36 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 16 Sep 2010 19:36:29 +0000 (19:36 +0000)
The use of wxListBook in report mode was disabled for wxOSX in r54001 and
r54318 (see #9484) because it created problems with the native wxListCtrl
implementation but the report mode can be used if we're using the generic
wxListCtrl version so do allow to use it if the system option governing the
choice of the version to use is set to "generic".

Of course, the real fix would be to correct the bugs in the native wxListCtrl
version and use report mode always but for now this at least restores correct
behaviour with the generic version.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65559 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/listbkg.cpp

index f829305777dc29fb0311fd3a2ccf3ddb6280a6c2..bd4812690188015857c30159a435cc5ca42c7184 100644 (file)
 #include "wx/statline.h"
 #include "wx/imaglist.h"
 
-// FIXME: native OS X wxListCtrl hangs if this code is used for it so disable
-//        it for now
-#if !defined(__WXMAC__)
-    #define CAN_USE_REPORT_VIEW
+#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
@@ -109,16 +123,12 @@ wxListbook::Create(wxWindow *parent,
                     wxDefaultPosition,
                     wxDefaultSize,
                     wxLC_SINGLE_SEL |
-#ifdef CAN_USE_REPORT_VIEW
-                    GetListCtrlReportViewFlags()
-#else // !CAN_USE_REPORT_VIEW
-                    GetListCtrlIconViewFlags()
-#endif // CAN_USE_REPORT_VIEW/!CAN_USE_REPORT_VIEW
+                    (CanUseReportView() ? GetListCtrlReportViewFlags()
+                                        : GetListCtrlIconViewFlags())
                  );
 
-#ifdef CAN_USE_REPORT_VIEW
-    GetListView()->InsertColumn(0, wxT("Pages"));
-#endif // CAN_USE_REPORT_VIEW
+    if ( CanUseReportView() )
+        GetListView()->InsertColumn(0, wxT("Pages"));
 
 #ifdef __WXMSW__
     // On XP with themes enabled the GetViewRect used in GetControllerSize() to
@@ -142,15 +152,11 @@ long wxListbook::GetListCtrlIconViewFlags() const
     return (IsVertical() ? wxLC_ALIGN_LEFT : wxLC_ALIGN_TOP) | wxLC_ICON;
 }
 
-#ifdef CAN_USE_REPORT_VIEW
-
 long wxListbook::GetListCtrlReportViewFlags() const
 {
     return wxLC_REPORT | wxLC_NO_HEADER;
 }
 
-#endif // CAN_USE_REPORT_VIEW
-
 // ----------------------------------------------------------------------------
 // wxListbook geometry management
 // ----------------------------------------------------------------------------
@@ -258,38 +264,39 @@ bool wxListbook::SetPageImage(size_t n, int imageId)
 
 void wxListbook::SetImageList(wxImageList *imageList)
 {
-#ifdef CAN_USE_REPORT_VIEW
-    wxListView * const list = GetListView();
-
-    // If imageList presence has changed, we update the list control view
-    if ( (imageList != NULL) != (GetImageList() != NULL) )
+    if ( CanUseReportView() )
     {
-        // Preserve the selection which is lost when changing the mode
-        const int oldSel = GetSelection();
+        wxListView * const list = GetListView();
 
-        // Update the style to use icon view for images, report view otherwise
-        long style = wxLC_SINGLE_SEL;
-        if ( imageList )
+        // If imageList presence has changed, we update the list control view
+        if ( (imageList != NULL) != (GetImageList() != NULL) )
         {
-            style |= GetListCtrlIconViewFlags();
-        }
-        else // no image list
-        {
-            style |= GetListCtrlReportViewFlags();
+            // 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);
         }
 
-        list->SetWindowStyleFlag(style);
-        if ( !imageList )
-            list->InsertColumn(0, wxT("Pages"));
-
-        // Restore selection
-        if ( oldSel != wxNOT_FOUND )
-           SetSelection(oldSel);
+        list->SetImageList(imageList, wxIMAGE_LIST_NORMAL);
     }
 
-    list->SetImageList(imageList, wxIMAGE_LIST_NORMAL);
-#endif // CAN_USE_REPORT_VIEW
-
     wxBookCtrlBase::SetImageList(imageList);
 }