Allow use of report mode non-native wxListCtrl in wxListBook under Mac.

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
This commit is contained in:
Vadim Zeitlin
2010-09-16 19:36:29 +00:00
parent 75595b9750
commit 0dc44daa33

View File

@@ -36,11 +36,25 @@
#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
if ( CanUseReportView() )
GetListView()->InsertColumn(0, wxT("Pages"));
#endif // CAN_USE_REPORT_VIEW
#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,7 +264,8 @@ bool wxListbook::SetPageImage(size_t n, int imageId)
void wxListbook::SetImageList(wxImageList *imageList)
{
#ifdef CAN_USE_REPORT_VIEW
if ( CanUseReportView() )
{
wxListView * const list = GetListView();
// If imageList presence has changed, we update the list control view
@@ -288,7 +295,7 @@ void wxListbook::SetImageList(wxImageList *imageList)
}
list->SetImageList(imageList, wxIMAGE_LIST_NORMAL);
#endif // CAN_USE_REPORT_VIEW
}
wxBookCtrlBase::SetImageList(imageList);
}