// // 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;
else // has label
{
dc->GetTextExtent( s, &lw, &lh );
- if (lh < SCROLL_UNIT_Y)
- lh = SCROLL_UNIT_Y;
lw += EXTRA_WIDTH;
lh += EXTRA_HEIGHT;
s = item->GetTextForMeasuring();
dc->GetTextExtent( s, &lw, &lh );
- if (lh < SCROLL_UNIT_Y)
- lh = SCROLL_UNIT_Y;
lw += EXTRA_WIDTH;
lh += EXTRA_HEIGHT;
// for this we need the width of the text
wxCoord wLabel;
- dc.GetTextExtent(item.GetText(), &wLabel, NULL);
+ wxCoord hLabel;
+ dc.GetTextExtent(item.GetText(), &wLabel, &hLabel);
wLabel += 2*EXTRA_WIDTH;
// and the width of the icon, if any
wxDCClipper clipper(dc, x, HEADER_OFFSET_Y, cw, h - 4 );
dc.DrawText( item.GetText(),
- xAligned + EXTRA_WIDTH, HEADER_OFFSET_Y + EXTRA_HEIGHT );
+ xAligned + EXTRA_WIDTH, h / 2 - hLabel / 2 ); //HEADER_OFFSET_Y + EXTRA_HEIGHT );
x += wCol;
}
{
m_isDragging = TRUE;
m_currentX = x;
- DrawCurrent();
CaptureMouse();
+ DrawCurrent();
}
//else: column resizing was vetoed by the user code
}
void wxListHeaderWindow::OnSetFocus( wxFocusEvent &WXUNUSED(event) )
{
m_owner->SetFocus();
+ m_owner->Update();
}
bool wxListHeaderWindow::SendListEvent(wxEventType type, wxPoint pos)
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 ) );
}
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 )
{
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;
{
wxPen pen(GetRuleColour(), 1, wxSOLID);
- int col = 0;
wxRect firstItemRect;
wxRect lastItemRect;
GetItemRect(visibleFrom, firstItemRect);
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;
le.IsAllowed();
}
-void wxListMainWindow::OnRenameCancelled(size_t WXUNUSED(itemEdit))
+void wxListMainWindow::OnRenameCancelled(size_t itemEdit)
{
// let owner know that the edit was cancelled
wxListEvent le( wxEVT_COMMAND_LIST_END_LABEL_EDIT, GetParent()->GetId() );
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) )
{
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
{
{
ChangeCurrent(newCurrent);
+ // refresh the old focus to remove it
+ RefreshLine( oldCurrent );
+
// select all the items between the old and the new one
if ( oldCurrent > newCurrent )
{
ChangeCurrent(newCurrent);
- // refresh the old focus to remove it
- RefreshLine( oldCurrent );
+ // refresh the old focus to remove it
+ RefreshLine( oldCurrent );
if ( !event.ControlDown() )
{
}
}
+
RefreshLine( m_current );
MoveToFocus();
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)
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();
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;
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
// 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)
{
clientHeight -= wxSystemSettings::
GetMetric(wxSYS_HSCROLL_Y);
m_linesPerPage = 0;
- currentlyVisibleLines = 0;
break;
}
SetScrollbars
(
SCROLL_UNIT_X,
- SCROLL_UNIT_Y,
+ lineHeight,
(entireWidth + SCROLL_UNIT_X) / SCROLL_UNIT_X,
0,
GetScrollPos( wxHORIZONTAL ),
m_mainWin = (wxListMainWindow*) NULL;
m_headerWin = (wxListHeaderWindow*) NULL;
+ m_headerHeight = 0;
+
if ( !(style & wxLC_MASK_TYPE) )
{
style = style | wxLC_LIST;
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()") );