#if wxUSE_LISTCTRL
#include "wx/listctrl.h"
-#include "wx/generic/private/listctrl.h"
#if ((!defined(__WXMSW__) && !(defined(__WXMAC__) && wxOSX_USE_CARBON)) || defined(__WXUNIVERSAL__))
// if we have a native version, its implementation file does all this
#include "wx/imaglist.h"
#include "wx/renderer.h"
+#include "wx/generic/private/listctrl.h"
#ifdef __WXMAC__
#include "wx/osx/private.h"
#include <Carbon/Carbon.h>
#endif
+#if defined(__WXMSW__) && !defined(__WXWINCE__) && !defined(__WXUNIVERSAL__)
+ #define "wx/msw/wrapwin.h"
+#endif
// NOTE: If using the wxListBox visual attributes works everywhere then this can
// be removed, as well as the #else case below.
#if ( !defined(__WXGTK20__) && !defined(__WXMAC__) )
{
dc->DrawRectangle( rectHL );
+
+ wxUnusedVar(current);
}
#else
{
wxScreenDC dc;
dc.SetLogicalFunction( wxINVERT );
- dc.SetPen( wxPen( *wxBLACK, 2, wxSOLID ) );
+ dc.SetPen( wxPen(*wxBLACK, 2) );
dc.SetBrush( *wxTRANSPARENT_BRUSH );
AdjustDC(dc);
// wxListMainWindow
//-----------------------------------------------------------------------------
-BEGIN_EVENT_TABLE(wxListMainWindow,wxScrolledCanvas)
+BEGIN_EVENT_TABLE(wxListMainWindow, wxWindow)
EVT_PAINT (wxListMainWindow::OnPaint)
EVT_MOUSE_EVENTS (wxListMainWindow::OnMouse)
EVT_CHAR (wxListMainWindow::OnChar)
// been added and no screen update taken place.
if ( m_dirty )
{
+ // TODO: use wxTheApp->SafeYieldFor(NULL, wxEVT_CATEGORY_UI) instead
+ // so that no pending events may change the item count (see below)
+ // IMPORTANT: needs to be tested!
wxSafeYield();
// Pending events dispatched by wxSafeYield might have changed the item
void wxListMainWindow::OnMouse( wxMouseEvent &event )
{
-
#ifdef __WXMAC__
// On wxMac we can't depend on the EVT_KILL_FOCUS event to properly
// shutdown the edit control when the mouse is clicked elsewhere on the
if (event.GetEventType() == wxEVT_MOUSEWHEEL)
{
- // let the base handle mouse wheel events.
+ // let the base class handle mouse wheel events.
event.Skip();
return;
}
{
SendNotify( (size_t)-1, wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, event.GetPosition() );
- wxContextMenuEvent evtCtx(
- wxEVT_CONTEXT_MENU,
- GetParent()->GetId(),
- ClientToScreen(event.GetPosition()));
+ wxContextMenuEvent evtCtx(wxEVT_CONTEXT_MENU,
+ GetParent()->GetId(),
+ ClientToScreen(event.GetPosition()));
evtCtx.SetEventObject(GetParent());
GetParent()->GetEventHandler()->ProcessEvent(evtCtx);
}
const int hLine = GetLineHeight();
- int view_x = SCROLL_UNIT_X * GetScrollPos( wxHORIZONTAL );
- int view_y = hLine * GetScrollPos( wxVERTICAL );
+ int view_x = SCROLL_UNIT_X * GetListCtrl()->GetScrollPos( wxHORIZONTAL );
+ int view_y = hLine * GetListCtrl()->GetScrollPos( wxVERTICAL );
if ( InReportView() )
{
wxGenericListCtrl* lc = GetListCtrl();
wxCHECK_RET( lc, _T("no listctrl window?") );
- lc->m_headerWin->Refresh();
- lc->m_headerWin->Update();
+ if (lc->m_headerWin) // when we use wxLC_NO_HEADER, m_headerWin==NULL
+ {
+ lc->m_headerWin->Refresh();
+ lc->m_headerWin->Update();
+ }
}
}
size_t count = GetItemCount();
if ( count )
{
- m_lineFrom = GetScrollPos(wxVERTICAL);
+ m_lineFrom = GetListCtrl()->GetScrollPos(wxVERTICAL);
// this may happen if SetScrollbars() hadn't been called yet
if ( m_lineFrom >= count )
return wxBORDER_THEME;
}
-#ifdef __WXMSW__
+#if defined(__WXMSW__) && !defined(__WXWINCE__) && !defined(__WXUNIVERSAL__)
WXLRESULT wxGenericListCtrl::MSWWindowProc(WXUINT nMsg,
WXWPARAM wParam,
WXLPARAM lParam)
{
WXLRESULT rc = wxControl::MSWWindowProc(nMsg, wParam, lParam);
-#ifndef __WXWINCE__
// we need to process arrows ourselves for scrolling
if ( nMsg == WM_GETDLGCODE )
{
rc |= DLGC_WANTARROWS;
}
-#endif
return rc;
}
-#endif
+#endif // __WXMSW__
wxSize wxGenericListCtrl::GetSizeAvailableForScrollTarget(const wxSize& size)
{
long wxGenericListCtrl::InsertColumn( long col, wxListItem &item )
{
- wxCHECK_MSG( m_headerWin, -1, _T("can't add column in non report mode") );
+ wxCHECK_MSG( InReportView(), -1, _T("can't add column in non report mode") );
m_mainWin->InsertColumn( col, item );
- // if we hadn't had a header before but have one now
- // then we need to relayout the window
- // if ( GetColumnCount() == 1 && m_mainWin->HasHeader() )
-
- m_headerWin->Refresh();
+ // NOTE: if wxLC_NO_HEADER was given, then we are in report view mode but
+ // still have m_headerWin==NULL
+ if (m_headerWin)
+ m_headerWin->Refresh();
return 0;
}