// Purpose: generic implementation of wxListCtrl
// Author: Robert Roebling
// Vadim Zeitlin (virtual list control support)
-// Id: $Id$
// Copyright: (c) 1998 Robert Roebling
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
m_resizeCursor = NULL;
}
-wxListHeaderWindow::wxListHeaderWindow( wxWindow *win,
- wxWindowID id,
- wxListMainWindow *owner,
- const wxPoint& pos,
- const wxSize& size,
- long style,
- const wxString &name )
- : wxWindow( win, id, pos, size, style, name )
+bool wxListHeaderWindow::Create( wxWindow *win,
+ wxWindowID id,
+ wxListMainWindow *owner,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ const wxString &name )
{
+ if ( !wxWindow::Create(win, id, pos, size, style, name) )
+ return false;
+
Init();
m_owner = owner;
if (!m_hasFont)
SetOwnFont( wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT ));
#endif
+
+ return true;
}
wxListHeaderWindow::~wxListHeaderWindow()
if (needs_header)
{
- // since there is no separate Create method for the wxListHeaderWindow
- // we have to guard against reentrancy which happens via new wxListHeaderWindow ->
- // wxNavigationEnabled::AddChild -> ToggleWindowStyle -> SetWindowStyleFlag
- // since has_header is still false then
- static bool blockreentrancy = false;
-
- if ( blockreentrancy )
- return;
-
- blockreentrancy = true;
-
- m_headerWin = new wxListHeaderWindow
+ // Notice that we must initialize m_headerWin first, and create the
+ // real window only later, so that the test in the beginning of the
+ // function blocks repeated creation of the header as it could happen
+ // before via wxNavigationEnabled::AddChild() -> ToggleWindowStyle() ->
+ // SetWindowStyleFlag().
+ m_headerWin = new wxListHeaderWindow();
+ m_headerWin->Create
(
this, wxID_ANY, m_mainWin,
wxPoint(0,0),
),
wxTAB_TRAVERSAL
);
- blockreentrancy = false;
#if defined( __WXMAC__ )
static wxFont font( wxOSX_SYSTEM_FONT_SMALL );
#endif
}
-void wxGenericListCtrl::DoClientToScreen( int *x, int *y ) const
-{
- // having (0,0) at the origin of the m_mainWin seems wrong compared to
- // the other code like in Refresh
-#if 0
- // It's not clear whether this can be called before m_mainWin is created
- // but it seems better to be on the safe side and check.
- if ( m_mainWin )
- m_mainWin->DoClientToScreen(x, y);
- else
-#endif
- wxListCtrlBase::DoClientToScreen(x, y);
-}
-
-void wxGenericListCtrl::DoScreenToClient( int *x, int *y ) const
-{
- // having (0,0) at the origin of the m_mainWin seems wrong compared to
- // the other code like in Refresh
-#if 0
- // At least in wxGTK/Univ build this method can be called before m_mainWin
- // is created so avoid crashes in this case.
- if ( m_mainWin )
- m_mainWin->DoScreenToClient(x, y);
- else
-#endif
- wxListCtrlBase::DoScreenToClient(x, y);
-}
-
wxSize wxGenericListCtrl::DoGetBestClientSize() const
{
// The base class version can compute the best size in report view only.