#if wxUSE_LISTCTRL
-// under Win32 we always use the native version and also may use the generic
-// one, however some things should be done only if we use only the generic
-// version
-#if (defined(__WIN32__) && !defined(__WXUNIVERSAL__)) || defined(__WXMAC__)
- #define HAVE_NATIVE_LISTCTRL
-#endif
-
-// if we have the native control, wx/listctrl.h declares it and not this one
#include "wx/listctrl.h"
-#ifndef HAVE_NATIVE_LISTCTRL
+#if (!defined(__WXMSW__) || defined(__WXUNIVERSAL__)) && !defined(__WXMAC__)
// if we have a native version, its implementation file does all this
IMPLEMENT_DYNAMIC_CLASS(wxListItem, wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxListView, wxListCtrl)
IMPLEMENT_DYNAMIC_CLASS(wxListEvent, wxNotifyEvent)
IMPLEMENT_DYNAMIC_CLASS(wxListCtrl, wxGenericListCtrl)
-#endif // HAVE_NATIVE_LISTCTRL/!HAVE_NATIVE_LISTCTRL
+#endif
#ifndef WX_PRECOMP
+ #include "wx/scrolwin.h"
+ #include "wx/timer.h"
+ #include "wx/settings.h"
#include "wx/dynarray.h"
- #include "wx/app.h"
+ #include "wx/dcclient.h"
#include "wx/dcscreen.h"
- #include "wx/textctrl.h"
- #include "wx/listbox.h"
#include "wx/math.h"
#endif
+#include "wx/imaglist.h"
#include "wx/selstore.h"
#include "wx/renderer.h"
// wxListItemData (internal)
//-----------------------------------------------------------------------------
-class WXDLLEXPORT wxListItemData
+class wxListItemData
{
public:
wxListItemData(wxListMainWindow *owner);
// wxListHeaderData (internal)
//-----------------------------------------------------------------------------
-class WXDLLEXPORT wxListHeaderData : public wxObject
+class wxListHeaderData : public wxObject
{
public:
wxListHeaderData();
// wxListHeaderWindow (internal)
//-----------------------------------------------------------------------------
-class WXDLLEXPORT wxListHeaderWindow : public wxWindow
+class wxListHeaderWindow : public wxWindow
{
protected:
wxListMainWindow *m_owner;
// wxListRenameTimer (internal)
//-----------------------------------------------------------------------------
-class WXDLLEXPORT wxListRenameTimer: public wxTimer
+class wxListRenameTimer: public wxTimer
{
private:
wxListMainWindow *m_owner;
// wxListTextCtrlWrapper: wraps a wxTextCtrl to make it work for inline editing
//-----------------------------------------------------------------------------
-class WXDLLEXPORT wxListTextCtrlWrapper : public wxEvtHandler
+class wxListTextCtrlWrapper : public wxEvtHandler
{
public:
// NB: text must be a valid object but not Create()d yet
if ( info.HasAttributes() )
{
if ( m_attr )
- *m_attr = *info.GetAttributes();
+ m_attr->AssignFrom(*info.GetAttributes());
else
m_attr = new wxListItemAttr(*info.GetAttributes());
}
// arithmetics on wxColour, unfortunately)
wxColour colText;
if ( highlighted )
+#ifdef __WXMAC__
+ colText = *wxWHITE;
+#else
colText = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT);
+#endif
else if ( attr && attr->HasTextColour() )
colText = attr->GetTextColour();
else
{
Init();
+
+#ifdef __WXMAC__
+ // OS X sel item highlight color differs from text highlight color, which is
+ // what wxSYS_COLOUR_HIGHLIGHT returns.
+ RGBColor hilight;
+ GetThemeBrushAsColor(kThemeBrushAlternatePrimaryHighlightColor, 32, true, &hilight);
+ m_highlightBrush = new wxBrush( wxColour(hilight.red, hilight.green, hilight.blue ), wxSOLID );
+#else
m_highlightBrush = new wxBrush
- (
+ (
wxSystemSettings::GetColour
(
wxSYS_COLOUR_HIGHLIGHT
),
wxSOLID
- );
+ );
+#endif
+#ifdef __WXMAC__
+ // on Mac, this color also differs from the wxSYS_COLOUR_BTNSHADOW, enough to be noticable.
+ // I don't know if BTNSHADOW is appropriate in other contexts, so I'm just changing it here.
+ GetThemeBrushAsColor(kThemeBrushSecondaryHighlightColor, 32, true, &hilight);
+ m_highlightUnfocusedBrush = new wxBrush( wxColour(hilight.red, hilight.green, hilight.blue ), wxSOLID );
+#else
m_highlightUnfocusedBrush = new wxBrush
- (
- wxSystemSettings::GetColour
- (
- wxSYS_COLOUR_BTNSHADOW
- ),
- wxSOLID
- );
+ (
+ wxSystemSettings::GetColour
+ (
+ wxSYS_COLOUR_BTNSHADOW
+ ),
+ wxSOLID
+ );
+#endif
SetScrollbars( 0, 0, 0, 0, 0, 0 );
void wxListMainWindow::RecalculatePositions(bool noRefresh)
{
+ const int lineHeight = GetLineHeight();
+
wxClientDC dc( this );
dc.SetFont( GetFont() );
clientHeight;
GetSize( &clientWidth, &clientHeight );
- const int lineHeight = GetLineHeight();
-
if ( InReportView() )
{
// all lines have the same height and we scroll one line per step