X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f1160963c677202f56e548df63e65e7d458d8e7e..4c9d78a4f9f07957e9e38f783d0ee615e609de73:/src/generic/listbkg.cpp diff --git a/src/generic/listbkg.cpp b/src/generic/listbkg.cpp index 67f4f20987..676b202c93 100644 --- a/src/generic/listbkg.cpp +++ b/src/generic/listbkg.cpp @@ -34,6 +34,7 @@ #include "wx/statline.h" #include "wx/listbook.h" #include "wx/imaglist.h" +#include "wx/settings.h" // ---------------------------------------------------------------------------- // constants @@ -52,11 +53,12 @@ IMPLEMENT_DYNAMIC_CLASS(wxListbookEvent, wxNotifyEvent) const wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING = wxNewEventType(); const wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED = wxNewEventType(); +const int wxID_LISTBOOKLISTVIEW = wxNewId(); BEGIN_EVENT_TABLE(wxListbook, wxBookCtrl) EVT_SIZE(wxListbook::OnSize) - EVT_LIST_ITEM_SELECTED(wxID_ANY, wxListbook::OnListSelected) + EVT_LIST_ITEM_SELECTED(wxID_LISTBOOKLISTVIEW, wxListbook::OnListSelected) END_EVENT_TABLE() // ============================================================================ @@ -70,7 +72,9 @@ END_EVENT_TABLE() void wxListbook::Init() { m_list = NULL; +#if wxUSE_LINE_IN_LISTBOOK m_line = NULL; +#endif // wxUSE_LINE_IN_LISTBOOK m_selection = wxNOT_FOUND; } @@ -91,6 +95,11 @@ wxListbook::Create(wxWindow *parent, #endif // __WXMAC__/!__WXMAC__ } + // no border for this control, it doesn't look nice together with + // wxListCtrl border + style &= ~wxBORDER_MASK; + style |= wxBORDER_NONE; + if ( !wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name) ) return false; @@ -98,12 +107,14 @@ wxListbook::Create(wxWindow *parent, m_list = new wxListView ( this, - -1, + wxID_LISTBOOKLISTVIEW, wxDefaultPosition, wxDefaultSize, - wxLC_ICON | wxLC_SINGLE_SEL + wxLC_ICON | wxLC_SINGLE_SEL | + (IsVertical() ? wxLC_ALIGN_LEFT : wxLC_ALIGN_TOP) ); +#if wxUSE_LINE_IN_LISTBOOK m_line = new wxStaticLine ( this, @@ -112,6 +123,7 @@ wxListbook::Create(wxWindow *parent, wxDefaultSize, IsVertical() ? wxLI_HORIZONTAL : wxLI_VERTICAL ); +#endif // wxUSE_LINE_IN_LISTBOOK return true; } @@ -122,38 +134,18 @@ wxListbook::Create(wxWindow *parent, wxSize wxListbook::GetListSize() const { - const wxSize sizeClient = GetClientSize(); - - // we need to find the longest/tallest label - wxCoord widthMax = 0, - heightMax = 0; - const int count = m_list->GetItemCount(); - if ( count ) - { - for ( int i = 0; i < count; i++ ) - { - wxRect r; - m_list->GetItemRect(i, r); - - wxCoord w = r.x + r.width, - h = r.y + r.height; - - if ( w > widthMax ) - widthMax = w; - if ( h > heightMax ) - heightMax = h; - } - } + const wxSize sizeClient = GetClientSize(), + sizeList = m_list->GetViewRect().GetSize(); wxSize size; if ( IsVertical() ) { size.x = sizeClient.x; - size.y = heightMax; + size.y = sizeList.y; } else // left/right aligned { - size.x = widthMax + 10; + size.x = sizeList.x; size.y = sizeClient.y; } @@ -162,7 +154,7 @@ wxSize wxListbook::GetListSize() const wxRect wxListbook::GetPageRect() const { - const wxSize sizeList = GetListSize(); + const wxSize sizeList = m_list->GetSize(); wxRect rectPage(wxPoint(0, 0), GetClientSize()); switch ( GetWindowStyle() & wxLB_ALIGN_MASK ) @@ -226,8 +218,10 @@ void wxListbook::OnSize(wxSizeEvent& event) break; } - m_list->SetSize(posList.x, posList.y, sizeList.x, sizeList.y); + m_list->Move(posList.x, posList.y); + m_list->SetClientSize(sizeList.x, sizeList.y); +#if wxUSE_LINE_IN_LISTBOOK if ( m_line ) { wxRect rectLine(wxPoint(0, 0), sizeClient); @@ -257,6 +251,7 @@ void wxListbook::OnSize(wxSizeEvent& event) m_line->SetSize(rectLine); } +#endif // wxUSE_LINE_IN_LISTBOOK // we should always have some selection if possible if ( m_selection == wxNOT_FOUND && GetPageCount() )