X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8b1ed8d979f193aa78b74c7d7a4a4ac33e50c121..de2ce07c7a13f9b0800c8f9e68adadebdc9aa89c:/src/generic/listctrl.cpp diff --git a/src/generic/listctrl.cpp b/src/generic/listctrl.cpp index fc72c9ee07..394e27505c 100644 --- a/src/generic/listctrl.cpp +++ b/src/generic/listctrl.cpp @@ -106,9 +106,7 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_CACHE_HINT) // // the height of the header window (FIXME: should depend on its font!) // static const int HEADER_HEIGHT = 23; -// the scrollbar units static const int SCROLL_UNIT_X = 15; -static const int SCROLL_UNIT_Y = 15; // the spacing between the lines (in report mode) static const int LINE_SPACING = 0; @@ -1147,8 +1145,6 @@ void wxListLineData::CalculateSize( wxDC *dc, int spacing ) else // has label { dc->GetTextExtent( s, &lw, &lh ); - if (lh < SCROLL_UNIT_Y) - lh = SCROLL_UNIT_Y; lw += EXTRA_WIDTH; lh += EXTRA_HEIGHT; @@ -1189,8 +1185,6 @@ void wxListLineData::CalculateSize( wxDC *dc, int spacing ) s = item->GetTextForMeasuring(); dc->GetTextExtent( s, &lw, &lh ); - if (lh < SCROLL_UNIT_Y) - lh = SCROLL_UNIT_Y; lw += EXTRA_WIDTH; lh += EXTRA_HEIGHT; @@ -2199,7 +2193,7 @@ wxListMainWindow::wxListMainWindow( wxWindow *parent, wxSize sz = size; sz.y = 25; - SetScrollbars( SCROLL_UNIT_X, SCROLL_UNIT_Y, 0, 0, 0, 0 ); + SetScrollbars( 0, 0, 0, 0, 0, 0 ); SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_LISTBOX ) ); } @@ -2267,8 +2261,6 @@ wxListLineData *wxListMainWindow::GetDummyLine() const wxCoord wxListMainWindow::GetLineHeight() const { - wxASSERT_MSG( HasFlag(wxLC_REPORT), _T("only works in report mode") ); - // we cache the line height as calling GetTextExtent() is slow if ( !m_lineHeight ) { @@ -2280,9 +2272,6 @@ wxCoord wxListMainWindow::GetLineHeight() const wxCoord y; dc.GetTextExtent(_T("H"), NULL, &y); - if ( y < SCROLL_UNIT_Y ) - y = SCROLL_UNIT_Y; - if ( m_small_image_list && m_small_image_list->GetImageCount() ) { int iw = 0; @@ -2682,7 +2671,6 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) { wxPen pen(GetRuleColour(), 1, wxSOLID); - int col = 0; wxRect firstItemRect; wxRect lastItemRect; GetItemRect(visibleFrom, firstItemRect); @@ -2690,7 +2678,7 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) int x = firstItemRect.GetX(); dc.SetPen(pen); dc.SetBrush(* wxTRANSPARENT_BRUSH); - for (col = 0; col < GetColumnCount(); col++) + for (int col = 0; col < GetColumnCount(); col++) { int colWidth = GetColumnWidth(col); x += colWidth; @@ -2834,25 +2822,12 @@ bool wxListMainWindow::OnRenameAccept(size_t itemEdit, const wxString& value) le.IsAllowed(); } -#ifdef __VMS__ // Ignore unreacheable code -# pragma message disable initnotreach -#endif - -void wxListMainWindow::OnRenameCancelled(size_t WXUNUSED(itemEdit)) +void wxListMainWindow::OnRenameCancelled(size_t itemEdit) { - // wxMSW seems not to notify the program about - // cancelled label edits. - return; - - #if 0 - // above unconditional return cause warning about not reachable code - // let owner know that the edit was cancelled wxListEvent le( wxEVT_COMMAND_LIST_END_LABEL_EDIT, GetParent()->GetId() ); - // These only exist for wxTreeCtrl, which should probably be changed - // le.m_editCancelled = TRUE; - // le.m_label = wxEmptyString; + le.SetEditCanceled(TRUE); le.SetEventObject( GetParent() ); le.m_itemIndex = itemEdit; @@ -2863,11 +2838,7 @@ void wxListMainWindow::OnRenameCancelled(size_t WXUNUSED(itemEdit)) data->GetItem( 0, le.m_item ); GetEventHandler()->ProcessEvent( le ); - #endif } -#ifdef __VMS__ -# pragma message enable initnotreach -#endif void wxListMainWindow::OnMouse( wxMouseEvent &event ) { @@ -3054,8 +3025,10 @@ void wxListMainWindow::MoveToItem(size_t item) int client_w, client_h; GetClientSize( &client_w, &client_h ); + const int hLine = GetLineHeight(); + int view_x = SCROLL_UNIT_X*GetScrollPos( wxHORIZONTAL ); - int view_y = SCROLL_UNIT_Y*GetScrollPos( wxVERTICAL ); + int view_y = hLine*GetScrollPos( wxVERTICAL ); if ( HasFlag(wxLC_REPORT) ) { @@ -3064,9 +3037,9 @@ void wxListMainWindow::MoveToItem(size_t item) ResetVisibleLinesRange(); if (rect.y < view_y ) - Scroll( -1, rect.y/SCROLL_UNIT_Y ); + Scroll( -1, rect.y/hLine ); if (rect.y+rect.height+5 > view_y+client_h) - Scroll( -1, (rect.y+rect.height-client_h+SCROLL_UNIT_Y)/SCROLL_UNIT_Y ); + Scroll( -1, (rect.y+rect.height-client_h+hLine)/hLine ); } else // !report { @@ -3213,15 +3186,7 @@ void wxListMainWindow::OnChar( wxKeyEvent &event ) case WXK_PRIOR: { - int steps = 0; - if ( HasFlag(wxLC_REPORT) ) - { - steps = m_linesPerPage - 1; - } - else - { - steps = m_current % m_linesPerPage; - } + int steps = HasFlag(wxLC_REPORT) ? m_linesPerPage - 1 : m_current % m_linesPerPage; int index = m_current - steps; if (index < 0) @@ -3233,15 +3198,9 @@ void wxListMainWindow::OnChar( wxKeyEvent &event ) case WXK_NEXT: { - int steps = 0; - if ( HasFlag(wxLC_REPORT) ) - { - steps = m_linesPerPage - 1; - } - else - { - steps = m_linesPerPage - (m_current % m_linesPerPage) - 1; - } + int steps = HasFlag(wxLC_REPORT) + ? m_linesPerPage - 1 + : m_linesPerPage - (m_current % m_linesPerPage) - 1; size_t index = m_current + steps; size_t count = GetItemCount(); @@ -3894,11 +3853,11 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) clientHeight; GetSize( &clientWidth, &clientHeight ); + const int lineHeight = GetLineHeight(); + if ( HasFlag(wxLC_REPORT) ) { // all lines have the same height and we scroll one line per step - int lineHeight = GetLineHeight(); - int entireHeight = count*lineHeight + LINE_SPACING; m_linesPerPage = clientHeight / lineHeight; @@ -3962,9 +3921,9 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) SetScrollbars ( SCROLL_UNIT_X, - SCROLL_UNIT_Y, + lineHeight, (x + SCROLL_UNIT_X) / SCROLL_UNIT_X, - (y + SCROLL_UNIT_Y) / SCROLL_UNIT_Y, + (y + lineHeight) / lineHeight, GetScrollPos( wxHORIZONTAL ), GetScrollPos( wxVERTICAL ), TRUE @@ -3977,18 +3936,10 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) // scrollbar int entireWidth = 0; - #if 0 - // entireHeight is not used so no need to define it - int entireHeight = 0; - #endif for (int tries = 0; tries < 2; tries++) { entireWidth = 2*EXTRA_BORDER_X; - #if 0 - // entireHeight is not used so no need to define it - entireHeight = 2*EXTRA_BORDER_Y; - #endif if (tries == 1) { @@ -4040,7 +3991,6 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) clientHeight -= wxSystemSettings:: GetMetric(wxSYS_HSCROLL_Y); m_linesPerPage = 0; - currentlyVisibleLines = 0; break; } @@ -4052,7 +4002,7 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) SetScrollbars ( SCROLL_UNIT_X, - SCROLL_UNIT_Y, + lineHeight, (entireWidth + SCROLL_UNIT_X) / SCROLL_UNIT_X, 0, GetScrollPos( wxHORIZONTAL ), @@ -4645,6 +4595,8 @@ bool wxGenericListCtrl::Create(wxWindow *parent, m_mainWin = (wxListMainWindow*) NULL; m_headerWin = (wxListHeaderWindow*) NULL; + m_headerHeight = 0; + if ( !(style & wxLC_MASK_TYPE) ) { style = style | wxLC_LIST; @@ -5342,7 +5294,8 @@ int wxGenericListCtrl::OnGetItemImage(long WXUNUSED(item)) const return -1; } -wxListItemAttr *wxGenericListCtrl::OnGetItemAttr(long item) const +wxListItemAttr * +wxGenericListCtrl::OnGetItemAttr(long WXUNUSED_UNLESS_DEBUG(item)) const { wxASSERT_MSG( item >= 0 && item < GetItemCount(), _T("invalid item index in OnGetItemAttr()") );