#pragma implementation "listctrl.h"
#endif
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
#include "wx/dcscreen.h"
#include "wx/app.h"
-#include "wx/listctrl.h"
+#include "wx/generic/listctrl.h"
+#include "wx/generic/imaglist.h"
//-----------------------------------------------------------------------------
// wxListItemData
m_ypos = y;
}
-void wxListItemData::SetSize( int const width, int height )
+void wxListItemData::SetSize( int width, int height )
{
if (width != -1) m_width = width;
if (height != -1) m_height = height;
m_spacing = 0;
}
-void wxListLineData::CalculateSize( wxPaintDC *dc, int spacing )
+void wxListLineData::CalculateSize( wxDC *dc, int spacing )
{
m_spacing = spacing;
switch (m_mode)
}
}
-void wxListLineData::SetPosition( wxPaintDC *dc, int x, int y, int window_width )
+void wxListLineData::SetPosition( wxDC *dc, int x, int y, int window_width )
{
m_bound_all.x = x;
m_bound_all.y = y;
height = m_bound_label.height;
}
-void wxListLineData::GetRect( wxRectangle &rect )
+void wxListLineData::GetRect( wxRect &rect )
{
AssignRect( rect, m_bound_all );
}
}
}
-void wxListLineData::GetItem( int const index, wxListItem &info )
+void wxListLineData::GetItem( int index, wxListItem &info )
{
int i = index;
wxNode *node = m_items.Nth( i );
return -1;
}
-void wxListLineData::DoDraw( wxPaintDC *dc, bool hilight, bool paintBG )
+void wxListLineData::DoDraw( wxDC *dc, bool hilight, bool paintBG )
{
long dev_x = dc->LogicalToDeviceX( m_bound_all.x-2 );
long dev_y = dc->LogicalToDeviceY( m_bound_all.y-2 );
return;
}
- if (paintBG)
- {
- if (hilight)
+ if (paintBG)
{
- dc->SetBrush( * m_hilightBrush );
- dc->SetPen( * wxTRANSPARENT_PEN );
- }
- else
- {
- dc->SetBrush( * wxWHITE_BRUSH );
- dc->SetPen( * wxTRANSPARENT_PEN );
+ if (hilight)
+ {
+ dc->SetBrush( * m_hilightBrush );
+ dc->SetPen( * wxTRANSPARENT_PEN );
+ }
+ else
+ {
+ dc->SetBrush( * wxWHITE_BRUSH );
+ dc->SetPen( * wxTRANSPARENT_PEN );
+ }
+ dc->DrawRectangle( m_bound_hilight.x, m_bound_hilight.y,
+ m_bound_hilight.width, m_bound_hilight.height );
}
- dc->DrawRectangle( m_bound_hilight.x, m_bound_hilight.y,
- m_bound_hilight.width, m_bound_hilight.height );
- }
- if (m_mode == wxLC_REPORT)
- {
- wxString s;
- wxNode *node = m_items.First();
- while (node)
+
+ dc->SetBackgroundMode(wxTRANSPARENT);
+ if (m_mode == wxLC_REPORT)
{
- wxListItemData *item = (wxListItemData*)node->Data();
- dc->SetClippingRegion( item->GetX(), item->GetY(), item->GetWidth()-3, item->GetHeight() );
- int x = item->GetX();
- if (item->HasImage())
- {
- int y = 0;
- m_owner->DrawImage( item->GetImage(), dc, x, item->GetY() );
- m_owner->GetImageSize( item->GetImage(), x, y );
- x += item->GetX() + 5;
- }
- if (item->HasText())
- {
- item->GetText( s );
- if (hilight)
- dc->SetTextForeground( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_HIGHLIGHTTEXT ) );
- else
- dc->SetTextForeground( *item->GetColour() );
- dc->DrawText( s, x, item->GetY() );
- }
- dc->DestroyClippingRegion();
- node = node->Next();
+ wxString s;
+ wxNode *node = m_items.First();
+ while (node)
+ {
+ wxListItemData *item = (wxListItemData*)node->Data();
+ dc->SetClippingRegion( item->GetX(), item->GetY(), item->GetWidth()-3, item->GetHeight() );
+ int x = item->GetX();
+ if (item->HasImage())
+ {
+ int y = 0;
+ m_owner->DrawImage( item->GetImage(), dc, x, item->GetY() );
+ m_owner->GetImageSize( item->GetImage(), x, y );
+ x += item->GetX() + 5;
+ }
+ if (item->HasText())
+ {
+ item->GetText( s );
+ if (hilight)
+ dc->SetTextForeground( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_HIGHLIGHTTEXT ) );
+ else
+ dc->SetTextForeground( *item->GetColour() );
+ dc->DrawText( s, x, item->GetY() );
+ }
+ dc->DestroyClippingRegion();
+ node = node->Next();
+ }
}
- }
- else
- {
- wxNode *node = m_items.First();
- if (node)
+ else
{
- wxListItemData *item = (wxListItemData*)node->Data();
- if (item->HasImage())
- {
- m_owner->DrawImage( item->GetImage(), dc, m_bound_icon.x, m_bound_icon.y );
- }
- if (item->HasText())
- {
- wxString s;
- item->GetText( s );
- if (hilight)
- dc->SetTextForeground( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_HIGHLIGHTTEXT ) );
- else
- dc->SetTextForeground( * item->GetColour() );
- dc->DrawText( s, m_bound_label.x, m_bound_label.y );
- }
+ wxNode *node = m_items.First();
+ if (node)
+ {
+ wxListItemData *item = (wxListItemData*)node->Data();
+ if (item->HasImage())
+ {
+ m_owner->DrawImage( item->GetImage(), dc, m_bound_icon.x, m_bound_icon.y );
+ }
+ if (item->HasText())
+ {
+ wxString s;
+ item->GetText( s );
+ if (hilight)
+ dc->SetTextForeground( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_HIGHLIGHTTEXT ) );
+ else
+ dc->SetTextForeground( * item->GetColour() );
+ dc->DrawText( s, m_bound_label.x, m_bound_label.y );
+ }
+ }
}
- }
}
void wxListLineData::Hilight( bool on )
{
- if (on == m_hilighted) return;
- if (on)
- m_owner->SelectLine( this );
- else
- m_owner->DeselectLine( this );
- m_hilighted = on;
+ if (on == m_hilighted) return;
+ if (on)
+ m_owner->SelectLine( this );
+ else
+ m_owner->DeselectLine( this );
+ m_hilighted = on;
}
void wxListLineData::ReverseHilight( void )
{
- m_hilighted = !m_hilighted;
- if (m_hilighted)
- m_owner->SelectLine( this );
- else
- m_owner->DeselectLine( this );
+ m_hilighted = !m_hilighted;
+ if (m_hilighted)
+ m_owner->SelectLine( this );
+ else
+ m_owner->DeselectLine( this );
}
-void wxListLineData::DrawRubberBand( wxPaintDC *dc, bool on )
+void wxListLineData::DrawRubberBand( wxDC *dc, bool on )
{
- if (on)
- {
- dc->SetPen( * wxBLACK_PEN );
- dc->SetBrush( * wxTRANSPARENT_BRUSH );
- dc->DrawRectangle( m_bound_hilight.x, m_bound_hilight.y,
- m_bound_hilight.width, m_bound_hilight.height );
- }
+ if (on)
+ {
+ dc->SetPen( * wxBLACK_PEN );
+ dc->SetBrush( * wxTRANSPARENT_BRUSH );
+ dc->DrawRectangle( m_bound_hilight.x, m_bound_hilight.y,
+ m_bound_hilight.width, m_bound_hilight.height );
+ }
}
-void wxListLineData::Draw( wxPaintDC *dc )
+void wxListLineData::Draw( wxDC *dc )
{
- DoDraw( dc, m_hilighted, m_hilighted );
+ DoDraw( dc, m_hilighted, m_hilighted );
}
-bool wxListLineData::IsInRect( int x, int y, const wxRectangle &rect )
+bool wxListLineData::IsInRect( int x, int y, const wxRect &rect )
{
- return ((x >= rect.x) && (x <= rect.x+rect.width) && (y >= rect.y) && (y <= rect.y+rect.height));
+ return ((x >= rect.x) && (x <= rect.x+rect.width) &&
+ (y >= rect.y) && (y <= rect.y+rect.height));
}
bool wxListLineData::IsHilighted( void )
{
- return m_hilighted;
+ return m_hilighted;
}
-void wxListLineData::AssignRect( wxRectangle &dest, int x, int y, int width, int height )
+void wxListLineData::AssignRect( wxRect &dest, int x, int y, int width, int height )
{
- dest.x = x;
- dest.y = y;
- dest.width = width;
- dest.height = height;
+ dest.x = x;
+ dest.y = y;
+ dest.width = width;
+ dest.height = height;
}
-void wxListLineData::AssignRect( wxRectangle &dest, const wxRectangle &source )
+void wxListLineData::AssignRect( wxRect &dest, const wxRect &source )
{
- dest.x = source.x;
- dest.y = source.y;
- dest.width = source.width;
- dest.height = source.height;
+ dest.x = source.x;
+ dest.y = source.y;
+ dest.width = source.width;
+ dest.height = source.height;
}
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxListHeaderWindow,wxWindow);
BEGIN_EVENT_TABLE(wxListHeaderWindow,wxWindow)
- EVT_PAINT (wxListHeaderWindow::OnPaint)
- EVT_MOUSE_EVENTS (wxListHeaderWindow::OnMouse)
- EVT_SET_FOCUS (wxListHeaderWindow::OnSetFocus)
+ EVT_PAINT (wxListHeaderWindow::OnPaint)
+ EVT_MOUSE_EVENTS (wxListHeaderWindow::OnMouse)
+ EVT_SET_FOCUS (wxListHeaderWindow::OnSetFocus)
END_EVENT_TABLE()
wxListHeaderWindow::wxListHeaderWindow( void )
{
- m_owner = (wxListMainWindow *) NULL;
- m_currentCursor = (wxCursor *) NULL;
- m_resizeCursor = (wxCursor *) NULL;
- m_isDraging = FALSE;
+ m_owner = (wxListMainWindow *) NULL;
+ m_currentCursor = (wxCursor *) NULL;
+ m_resizeCursor = (wxCursor *) NULL;
+ m_isDragging = FALSE;
}
wxListHeaderWindow::wxListHeaderWindow( wxWindow *win, wxWindowID id, wxListMainWindow *owner,
long style, const wxString &name ) :
wxWindow( win, id, pos, size, style, name )
{
- m_owner = owner;
+ m_owner = owner;
// m_currentCursor = wxSTANDARD_CURSOR;
- m_currentCursor = (wxCursor *) NULL;
- m_resizeCursor = new wxCursor( wxCURSOR_SIZEWE );
- m_isDraging = FALSE;
+ m_currentCursor = (wxCursor *) NULL;
+ m_resizeCursor = new wxCursor( wxCURSOR_SIZEWE );
+ m_isDragging = FALSE;
+ SetBackgroundColour( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE ) );
}
wxListHeaderWindow::~wxListHeaderWindow( void )
{
- delete m_resizeCursor;
+ delete m_resizeCursor;
}
-void wxListHeaderWindow::DoDrawRect( wxPaintDC *dc, int x, int y, int w, int h )
+void wxListHeaderWindow::DoDrawRect( wxDC *dc, int x, int y, int w, int h )
{
- const int m_corner = 1;
+ const int m_corner = 1;
- dc->SetBrush( *wxTRANSPARENT_BRUSH );
+ dc->SetBrush( *wxTRANSPARENT_BRUSH );
- dc->SetPen( *wxBLACK_PEN );
- dc->DrawLine( x+w-m_corner+1, y, x+w, y+h ); // right (outer)
- dc->DrawRectangle( x, y+h, w, 1 ); // bottom (outer)
+ dc->SetPen( *wxBLACK_PEN );
+ dc->DrawLine( x+w-m_corner+1, y, x+w, y+h ); // right (outer)
+ dc->DrawRectangle( x, y+h, w+1, 1 ); // bottom (outer)
- wxPen pen( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNSHADOW ), 1, wxSOLID );
+ wxPen pen( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNSHADOW ), 1, wxSOLID );
- dc->SetPen( pen );
- dc->DrawLine( x+w-m_corner, y, x+w-1, y+h ); // right (inner)
- dc->DrawRectangle( x+1, y+h-1, w-2, 1 ); // bottom (inner)
+ dc->SetPen( pen );
+ dc->DrawLine( x+w-m_corner, y, x+w-1, y+h ); // right (inner)
+ dc->DrawRectangle( x+1, y+h-1, w-2, 1 ); // bottom (inner)
- dc->SetPen( *wxWHITE_PEN );
- dc->DrawRectangle( x, y, w-m_corner+1, 1 ); // top (outer)
- dc->DrawRectangle( x, y, 1, h ); // left (outer)
- dc->DrawLine( x, y+h-1, x+1, y+h-1 );
- dc->DrawLine( x+w-1, y, x+w-1, y+1 );
+ dc->SetPen( *wxWHITE_PEN );
+ dc->DrawRectangle( x, y, w-m_corner+1, 1 ); // top (outer)
+ dc->DrawRectangle( x, y, 1, h ); // left (outer)
+ dc->DrawLine( x, y+h-1, x+1, y+h-1 );
+ dc->DrawLine( x+w-1, y, x+w-1, y+1 );
}
void wxListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
{
- wxPaintDC dc( this );
- PrepareDC( dc );
+ wxPaintDC dc( this );
+ PrepareDC( dc );
+
+ dc.BeginDrawing();
- dc.BeginDrawing();
+ dc.SetFont( GetFont() );
- dc.SetFont( GetFont() );
+ int w = 0;
+ int h = 0;
+ int x = 0;
+ int y = 0;
+ GetClientSize( &w, &h );
- int w = 0;
- int h = 0;
- int x = 0;
- int y = 0;
- GetClientSize( &w, &h );
+ dc.SetBackgroundMode(wxTRANSPARENT);
+ dc.SetTextForeground( *wxBLACK );
+ if (m_foregroundColour.Ok()) dc.SetTextForeground( m_foregroundColour );
- dc.SetTextForeground( *wxBLACK );
- if (m_foregroundColour.Ok()) dc.SetTextForeground( m_foregroundColour );
+ x = 1;
+ y = 1;
+ int numColumns = m_owner->GetColumnCount();
+ wxListItem item;
+ for (int i = 0; i < numColumns; i++)
+ {
+ m_owner->GetColumn( i, item );
+ int cw = item.m_width-2;
+ if ((i+1 == numColumns) || (x+item.m_width > w-5)) cw = w-x-1;
+ dc.SetPen( *wxWHITE_PEN );
- x = 1;
- y = 1;
- int numColumns = m_owner->GetColumnCount();
- wxListItem item;
- for (int i = 0; i < numColumns; i++)
- {
- m_owner->GetColumn( i, item );
- int cw = item.m_width-2;
- if ((i+1 == numColumns) || (x+item.m_width > w-5)) cw = w-x-1;
- dc.SetPen( *wxWHITE_PEN );
-
- DoDrawRect( &dc, x, y, cw, h-2 );
- dc.SetClippingRegion( x, y, cw-5, h-4 );
- dc.DrawText( item.m_text, x+4, y+3 );
- dc.DestroyClippingRegion();
- x += item.m_width;
- if (x > w+5) break;
- }
- dc.EndDrawing();
+ DoDrawRect( &dc, x, y, cw, h-2 );
+ dc.SetClippingRegion( x, y, cw-5, h-4 );
+ dc.DrawText( item.m_text, x+4, y+3 );
+ dc.DestroyClippingRegion();
+ x += item.m_width;
+ if (x > w+5) break;
+ }
+ dc.EndDrawing();
}
void wxListHeaderWindow::DrawCurrent()
{
- int x1 = m_currentX;
- int y1 = 0;
- int x2 = m_currentX-1;
- int y2 = 0;
- int dummy;
- m_owner->GetClientSize( &dummy, &y2 );
- ClientToScreen( &x1, &y1 );
- m_owner->ClientToScreen( &x2, &y2 );
+ int x1 = m_currentX;
+ int y1 = 0;
+ int x2 = m_currentX-1;
+ int y2 = 0;
+ int dummy;
+ m_owner->GetClientSize( &dummy, &y2 );
+ ClientToScreen( &x1, &y1 );
+ m_owner->ClientToScreen( &x2, &y2 );
- wxScreenDC dc;
- dc.SetLogicalFunction( wxXOR );
- dc.SetPen( wxPen( *wxBLACK, 2, wxSOLID ) );
- dc.SetBrush( *wxTRANSPARENT_BRUSH );
+ wxScreenDC dc;
+ dc.SetLogicalFunction( wxINVERT );
+ dc.SetPen( wxPen( *wxBLACK, 2, wxSOLID ) );
+ dc.SetBrush( *wxTRANSPARENT_BRUSH );
- dc.DrawLine( x1, y1, x2, y2 );
+ dc.DrawLine( x1, y1, x2, y2 );
- dc.SetLogicalFunction( wxCOPY );
+ dc.SetLogicalFunction( wxCOPY );
- dc.SetPen( wxNullPen );
- dc.SetBrush( wxNullBrush );
+ dc.SetPen( wxNullPen );
+ dc.SetBrush( wxNullBrush );
}
void wxListHeaderWindow::OnMouse( wxMouseEvent &event )
{
- int x = event.GetX();
- int y = event.GetY();
- if (m_isDraging)
- {
- DrawCurrent();
- if (event.ButtonUp())
- {
- ReleaseMouse();
- m_isDraging = FALSE;
- m_owner->SetColumnWidth( m_column, m_currentX-m_minX );
- }
- else
+ int x = event.GetX();
+ int y = event.GetY();
+ if (m_isDragging)
{
- int size_x = 0;
- int dummy;
- GetClientSize( &size_x, & dummy );
- if (x > m_minX+7)
- m_currentX = x;
- else
- m_currentX = m_minX+7;
- if (m_currentX > size_x-7) m_currentX = size_x-7;
- DrawCurrent();
+ DrawCurrent();
+ if (event.ButtonUp())
+ {
+ ReleaseMouse();
+ m_isDragging = FALSE;
+ m_owner->SetColumnWidth( m_column, m_currentX-m_minX );
+ }
+ else
+ {
+ int size_x = 0;
+ int dummy;
+ GetClientSize( &size_x, & dummy );
+ if (x > m_minX+7)
+ m_currentX = x;
+ else
+ m_currentX = m_minX+7;
+ if (m_currentX > size_x-7) m_currentX = size_x-7;
+ DrawCurrent();
+ }
+ return;
}
- return;
- }
- m_minX = 0;
- bool hit_border = FALSE;
- int xpos = 0;
- for (int j = 0; j < m_owner->GetColumnCount(); j++)
- {
- xpos += m_owner->GetColumnWidth( j );
- if ((abs(x-xpos) < 3) && (y < 22))
+ m_minX = 0;
+ bool hit_border = FALSE;
+ int xpos = 0;
+ for (int j = 0; j < m_owner->GetColumnCount(); j++)
{
- hit_border = TRUE;
- m_column = j;
- break;
+ xpos += m_owner->GetColumnWidth( j );
+ if ((abs(x-xpos) < 3) && (y < 22))
+ {
+ hit_border = TRUE;
+ m_column = j;
+ break;
+ }
+ m_minX = xpos;
}
- m_minX = xpos;
- }
- if (event.LeftDown() && hit_border)
- {
- m_isDraging = TRUE;
- m_currentX = x;
- DrawCurrent();
- CaptureMouse();
- return;
- }
-
- if (event.Moving())
- {
- if (hit_border)
+ if (event.LeftDown() && hit_border)
{
- if (m_currentCursor == wxSTANDARD_CURSOR) SetCursor( * m_resizeCursor );
- m_currentCursor = m_resizeCursor;
+ m_isDragging = TRUE;
+ m_currentX = x;
+ DrawCurrent();
+ CaptureMouse();
+ return;
}
- else
+
+ if (event.Moving())
{
- if (m_currentCursor != wxSTANDARD_CURSOR) SetCursor( * wxSTANDARD_CURSOR );
- m_currentCursor = wxSTANDARD_CURSOR;
+ if (hit_border)
+ {
+ if (m_currentCursor == wxSTANDARD_CURSOR) SetCursor( * m_resizeCursor );
+ m_currentCursor = m_resizeCursor;
+ }
+ else
+ {
+ if (m_currentCursor != wxSTANDARD_CURSOR) SetCursor( * wxSTANDARD_CURSOR );
+ m_currentCursor = wxSTANDARD_CURSOR;
+ }
}
- }
}
void wxListHeaderWindow::OnSetFocus( wxFocusEvent &WXUNUSED(event) )
{
- m_owner->SetFocus();
+ m_owner->SetFocus();
}
//-----------------------------------------------------------------------------
wxListRenameTimer::wxListRenameTimer( wxListMainWindow *owner )
{
- m_owner = owner;
+ m_owner = owner;
}
void wxListRenameTimer::Notify()
{
- m_owner->OnRenameTimer();
+ m_owner->OnRenameTimer();
}
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxListTextCtrl,wxTextCtrl);
BEGIN_EVENT_TABLE(wxListTextCtrl,wxTextCtrl)
- EVT_CHAR (wxListTextCtrl::OnChar)
- EVT_KILL_FOCUS (wxListTextCtrl::OnKillFocus)
+ EVT_CHAR (wxListTextCtrl::OnChar)
+ EVT_KILL_FOCUS (wxListTextCtrl::OnKillFocus)
END_EVENT_TABLE()
wxListTextCtrl::wxListTextCtrl( wxWindow *parent, const wxWindowID id,
int style, const wxValidator& validator, const wxString &name ) :
wxTextCtrl( parent, id, value, pos, size, style, validator, name )
{
- m_res = res;
- m_accept = accept;
- m_owner = owner;
+ m_res = res;
+ m_accept = accept;
+ m_owner = owner;
}
void wxListTextCtrl::OnChar( wxKeyEvent &event )
{
- if (event.m_keyCode == WXK_RETURN)
- {
- (*m_accept) = TRUE;
- (*m_res) = GetValue();
- m_owner->OnRenameAccept();
-// Show( FALSE );
- Destroy();
- return;
- }
- if (event.m_keyCode == WXK_ESCAPE)
- {
+ if (event.m_keyCode == WXK_RETURN)
+ {
+ (*m_accept) = TRUE;
+ (*m_res) = GetValue();
+ m_owner->OnRenameAccept();
+// Show( FALSE );
+ Destroy();
+ return;
+ }
+ if (event.m_keyCode == WXK_ESCAPE)
+ {
+ (*m_accept) = FALSE;
+ (*m_res) = "";
+// Show( FALSE );
+ Destroy();
+ return;
+ }
+ event.Skip();
+}
+
+void wxListTextCtrl::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
+{
(*m_accept) = FALSE;
(*m_res) = "";
// Show( FALSE );
Destroy();
return;
- }
- event.Skip();
-}
-
-void wxListTextCtrl::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
-{
- (*m_accept) = FALSE;
- (*m_res) = "";
-// Show( FALSE );
- Destroy();
- return;
}
//-----------------------------------------------------------------------------
EVT_SIZE (wxListMainWindow::OnSize)
EVT_MOUSE_EVENTS (wxListMainWindow::OnMouse)
EVT_CHAR (wxListMainWindow::OnChar)
+ EVT_KEY_DOWN (wxListMainWindow::OnKeyDown)
EVT_SET_FOCUS (wxListMainWindow::OnSetFocus)
EVT_KILL_FOCUS (wxListMainWindow::OnKillFocus)
END_EVENT_TABLE()
wxClientDC dc(this);
PrepareDC( dc );
line->GetExtent( x, y, w, h );
- wxRectangle rect(
+ wxRect rect(
dc.LogicalToDeviceX(x-3),
dc.LogicalToDeviceY(y-3),
dc.LogicalToDeviceXRel(w+6),
void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
{
+ // Note: a wxPaintDC must be constructed even if no drawing is
+ // done (a Windows requirement).
+ wxPaintDC dc( this );
+ PrepareDC( dc );
+
if (m_dirty) return;
if (m_lines.GetCount() == 0) return;
- wxPaintDC dc( this );
- PrepareDC( dc );
-
dc.BeginDrawing();
dc.SetFont( GetFont() );
long x = dc.DeviceToLogicalX( (long)event.GetX() );
long y = dc.DeviceToLogicalY( (long)event.GetY() );
- // Did we actually hit an item ?
+ /* Did we actually hit an item ? */
long hitResult = 0;
wxNode *node = m_lines.First();
wxListLineData *line = (wxListLineData *) NULL;
m_lastOnSame = FALSE;
m_renameTimer->Stop();
- SendNotify( line, wxEVT_COMMAND_LIST_KEY_DOWN );
+ SendNotify( line, wxEVT_COMMAND_LIST_ITEM_ACTIVATED );
return;
}
{
int y_s = m_yScroll*GetScrollPos( wxVERTICAL );
if ((y > y_s) && (y+h < y_s+h_p)) return;
- if (y-y_s < 5) Scroll( -1, (y-5-h_p/2)/m_yScroll );
- if (y+h+5 > y_s+h_p) Scroll( -1, (y+h-h_p/2+h+15)/m_yScroll );
+ if (y-y_s < 5) { Scroll( -1, (y-5-h_p/2)/m_yScroll ); Refresh(); }
+ if (y+h+5 > y_s+h_p) { Scroll( -1, (y+h-h_p/2+h+15)/m_yScroll); Refresh(); }
}
else
{
int x_s = m_xScroll*GetScrollPos( wxHORIZONTAL );
if ((x > x_s) && (x+w < x_s+w_p)) return;
- if (x-x_s < 5) Scroll( (x-5)/m_xScroll, -1 );
- if (x+w-5 > x_s+w_p) Scroll( (x+w-w_p+15)/m_xScroll, -1 );
+ if (x-x_s < 5) { Scroll( (x-5)/m_xScroll, -1 ); Refresh(); }
+ if (x+w-5 > x_s+w_p) { Scroll( (x+w-w_p+15)/m_xScroll, -1 ); Refresh(); }
}
}
UnfocusLine( oldCurrent );
}
+void wxListMainWindow::OnKeyDown( wxKeyEvent &event )
+{
+ wxWindow *parent = GetParent();
+
+ /* we propagate the key event up */
+ wxKeyEvent ke( wxEVT_KEY_DOWN );
+ ke.m_shiftDown = event.m_shiftDown;
+ ke.m_controlDown = event.m_controlDown;
+ ke.m_altDown = event.m_altDown;
+ ke.m_metaDown = event.m_metaDown;
+ ke.m_keyCode = event.m_keyCode;
+ ke.m_x = event.m_x;
+ ke.m_y = event.m_y;
+ ke.SetEventObject( parent );
+ if (parent->GetEventHandler()->ProcessEvent( ke )) return;
+
+ event.Skip();
+}
+
void wxListMainWindow::OnChar( wxKeyEvent &event )
{
-/*
- if (event.KeyCode() == WXK_TAB)
- {
- if (event.ShiftDown())
- TravPrev( &event );
- else
- TravNext( &event );
- return;
- }
-*/
- if (!m_current) return;
- switch (event.KeyCode())
- {
- case WXK_UP:
+ wxWindow *parent = GetParent();
+
+ /* we send a list_key event up */
+ wxListEvent le( wxEVT_COMMAND_LIST_KEY_DOWN, GetParent()->GetId() );
+ le.m_code = event.KeyCode();
+ le.SetEventObject( parent );
+ parent->GetEventHandler()->ProcessEvent( le );
+
+ /* we propagate the char event up */
+ wxKeyEvent ke( wxEVT_CHAR );
+ ke.m_shiftDown = event.m_shiftDown;
+ ke.m_controlDown = event.m_controlDown;
+ ke.m_altDown = event.m_altDown;
+ ke.m_metaDown = event.m_metaDown;
+ ke.m_keyCode = event.m_keyCode;
+ ke.m_x = event.m_x;
+ ke.m_y = event.m_y;
+ ke.SetEventObject( parent );
+ if (parent->GetEventHandler()->ProcessEvent( ke )) return;
+
+ if (event.KeyCode() == WXK_TAB)
{
- wxNode *node = m_lines.Member( m_current )->Previous();
- if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
- break;
+ wxNavigationKeyEvent nevent;
+ nevent.SetDirection( !event.ShiftDown() );
+ nevent.SetCurrentFocus( m_parent );
+ if (m_parent->GetEventHandler()->ProcessEvent( nevent )) return;
}
- case WXK_DOWN:
+
+ /* no item -> nothing to do */
+ if (!m_current)
{
- wxNode *node = m_lines.Member( m_current )->Next();
- if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
- break;
+ event.Skip();
+ return;
}
- case WXK_END:
+
+ switch (event.KeyCode())
{
- wxNode *node = m_lines.Last();
- OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
- break;
+ case WXK_UP:
+ {
+ wxNode *node = m_lines.Member( m_current )->Previous();
+ if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
+ break;
+ }
+ case WXK_DOWN:
+ {
+ wxNode *node = m_lines.Member( m_current )->Next();
+ if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
+ break;
+ }
+ case WXK_END:
+ {
+ wxNode *node = m_lines.Last();
+ OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
+ break;
+ }
+ case WXK_HOME:
+ {
+ wxNode *node = m_lines.First();
+ OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
+ break;
+ }
+ case WXK_PRIOR:
+ {
+ int steps = 0;
+ if (m_mode & wxLC_REPORT)
+ {
+ steps = m_visibleLines-1;
+ }
+ else
+ {
+ int pos = 0;
+ wxNode *node = m_lines.First();
+ for (;;) { if (m_current == (wxListLineData*)node->Data()) break; pos++; node = node->Next(); }
+ steps = pos % m_visibleLines;
+ }
+ wxNode *node = m_lines.Member( m_current );
+ for (int i = 0; i < steps; i++) if (node->Previous()) node = node->Previous();
+ if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
+ break;
+ }
+ case WXK_NEXT:
+ {
+ int steps = 0;
+ if (m_mode & wxLC_REPORT)
+ {
+ steps = m_visibleLines-1;
+ }
+ else
+ {
+ int pos = 0; wxNode *node = m_lines.First();
+ for (;;) { if (m_current == (wxListLineData*)node->Data()) break; pos++; node = node->Next(); }
+ steps = m_visibleLines-(pos % m_visibleLines)-1;
+ }
+ wxNode *node = m_lines.Member( m_current );
+ for (int i = 0; i < steps; i++) if (node->Next()) node = node->Next();
+ if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
+ break;
+ }
+ case WXK_LEFT:
+ {
+ if (!(m_mode & wxLC_REPORT))
+ {
+ wxNode *node = m_lines.Member( m_current );
+ for (int i = 0; i <m_visibleLines; i++) if (node->Previous()) node = node->Previous();
+ if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
+ }
+ break;
+ }
+ case WXK_RIGHT:
+ {
+ if (!(m_mode & wxLC_REPORT))
+ {
+ wxNode *node = m_lines.Member( m_current );
+ for (int i = 0; i <m_visibleLines; i++) if (node->Next()) node = node->Next();
+ if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
+ }
+ break;
+ }
+ case WXK_SPACE:
+ {
+ m_current->ReverseHilight();
+ RefreshLine( m_current );
+ break;
+ }
+ case WXK_INSERT:
+ {
+ if (!(m_mode & wxLC_SINGLE_SEL))
+ {
+ wxListLineData *oldCurrent = m_current;
+ m_current->ReverseHilight();
+ wxNode *node = m_lines.Member( m_current )->Next();
+ if (node) m_current = (wxListLineData*)node->Data();
+ MoveToFocus();
+ RefreshLine( oldCurrent );
+ RefreshLine( m_current );
+ UnfocusLine( oldCurrent );
+ FocusLine( m_current );
+ }
+ break;
+ }
+ case WXK_RETURN:
+ case WXK_EXECUTE:
+ {
+ wxListEvent le( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, GetParent()->GetId() );
+ le.SetEventObject( GetParent() );
+ le.m_itemIndex = GetIndexOfLine( m_current );
+ m_current->GetItem( 0, le.m_item );
+ GetParent()->GetEventHandler()->ProcessEvent( le );
+ break;
+ }
+ default:
+ {
+ event.Skip();
+ return;
+ }
}
- case WXK_HOME:
+ m_usedKeys = TRUE;
+}
+
+void wxListMainWindow::OnSetFocus( wxFocusEvent &WXUNUSED(event) )
+{
+ m_hasFocus = TRUE;
+ RefreshLine( m_current );
+
+ if (!GetParent()) return;
+
+ wxFocusEvent event( wxEVT_SET_FOCUS, GetParent()->GetId() );
+ event.SetEventObject( GetParent() );
+ GetParent()->GetEventHandler()->ProcessEvent( event );
+}
+
+void wxListMainWindow::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
+{
+ m_hasFocus = FALSE;
+ RefreshLine( m_current );
+}
+
+void wxListMainWindow::OnSize( wxSizeEvent &WXUNUSED(event) )
+{
+/*
+ We don't even allow the wxScrolledWindow::AdjustScrollbars() call
+
+*/
+}
+
+void wxListMainWindow::DrawImage( int index, wxDC *dc, int x, int y )
+{
+ if ((m_mode & wxLC_ICON) && (m_normal_image_list))
{
- wxNode *node = m_lines.First();
- OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
- break;
+ m_normal_image_list->Draw( index, *dc, x, y, wxIMAGELIST_DRAW_TRANSPARENT );
+ return;
}
- case WXK_PRIOR:
+ if ((m_mode & wxLC_SMALL_ICON) && (m_small_image_list))
{
- int steps = 0;
- if (m_mode & wxLC_REPORT) { steps = m_visibleLines-1; }
- else
- {
- int pos = 0;
- wxNode *node = m_lines.First();
- for (;;) { if (m_current == (wxListLineData*)node->Data()) break; pos++; node = node->Next(); }
- steps = pos % m_visibleLines;
- }
- wxNode *node = m_lines.Member( m_current );
- for (int i = 0; i < steps; i++) if (node->Previous()) node = node->Previous();
- if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
- break;
+ m_small_image_list->Draw( index, *dc, x, y, wxIMAGELIST_DRAW_TRANSPARENT );
}
- case WXK_NEXT:
+ if ((m_mode & wxLC_REPORT) && (m_small_image_list))
{
- int steps = 0;
- if (m_mode & wxLC_REPORT) { steps = m_visibleLines-1; }
- else
- {
- int pos = 0; wxNode *node = m_lines.First();
- for (;;) { if (m_current == (wxListLineData*)node->Data()) break; pos++; node = node->Next(); }
- steps = m_visibleLines-(pos % m_visibleLines)-1;
- }
- wxNode *node = m_lines.Member( m_current );
- for (int i = 0; i < steps; i++) if (node->Next()) node = node->Next();
- if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
- break;
+ m_small_image_list->Draw( index, *dc, x, y, wxIMAGELIST_DRAW_TRANSPARENT );
+ return;
}
- case WXK_LEFT:
+}
+
+void wxListMainWindow::GetImageSize( int index, int &width, int &height )
+{
+ if ((m_mode & wxLC_ICON) && (m_normal_image_list))
{
- if (!(m_mode & wxLC_REPORT))
- {
- wxNode *node = m_lines.Member( m_current );
- for (int i = 0; i <m_visibleLines; i++) if (node->Previous()) node = node->Previous();
- if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
- }
- break;
- }
- case WXK_RIGHT:
- {
- if (!(m_mode & wxLC_REPORT))
- {
- wxNode *node = m_lines.Member( m_current );
- for (int i = 0; i <m_visibleLines; i++) if (node->Next()) node = node->Next();
- if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
- }
- break;
- }
- case WXK_SPACE:
- {
- m_current->ReverseHilight();
- RefreshLine( m_current );
- }
- break;
- case WXK_INSERT:
- {
- if (!(m_mode & wxLC_SINGLE_SEL))
- {
- wxListLineData *oldCurrent = m_current;
- m_current->ReverseHilight();
- wxNode *node = m_lines.Member( m_current )->Next();
- if (node) m_current = (wxListLineData*)node->Data();
- MoveToFocus();
- RefreshLine( oldCurrent );
- RefreshLine( m_current );
- UnfocusLine( oldCurrent );
- FocusLine( m_current );
- }
+ m_normal_image_list->GetSize( index, width, height );
+ return;
}
- break;
- case WXK_RETURN:
- case WXK_EXECUTE:
+ if ((m_mode & wxLC_SMALL_ICON) && (m_small_image_list))
{
- wxListEvent le( wxEVT_COMMAND_LIST_KEY_DOWN, GetParent()->GetId() );
- le.SetEventObject( GetParent() );
- le.m_itemIndex = GetIndexOfLine( m_current );
- m_current->GetItem( 0, le.m_item );
- GetParent()->GetEventHandler()->ProcessEvent( le );
+ m_small_image_list->GetSize( index, width, height );
+ return;
}
- break;
- default:
+ if ((m_mode & wxLC_REPORT) && (m_small_image_list))
{
- event.Skip();
- return;
+ m_small_image_list->GetSize( index, width, height );
+ return;
}
- }
- m_usedKeys = TRUE;
-}
-
-void wxListMainWindow::OnSetFocus( wxFocusEvent &WXUNUSED(event) )
-{
- m_hasFocus = TRUE;
- RefreshLine( m_current );
-
- if (!GetParent()) return;
-
- wxFocusEvent event( wxEVT_SET_FOCUS, GetParent()->GetId() );
- event.SetEventObject( GetParent() );
- GetParent()->GetEventHandler()->ProcessEvent( event );
-}
-
-void wxListMainWindow::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
-{
- m_hasFocus = FALSE;
- RefreshLine( m_current );
-}
-
-void wxListMainWindow::OnSize( wxSizeEvent &WXUNUSED(event) )
-{
-/*
- We don't even allow the wxScrolledWindow::AdjustScrollbars() call
-
- CalculatePositions();
- printf( "OnSize::Refresh.\n" );
- Refresh();
- event.Skip();
-*/
-}
-
-void wxListMainWindow::DrawImage( int index, wxPaintDC *dc, int x, int y )
-{
- if ((m_mode & wxLC_ICON) && (m_normal_image_list))
- {
- m_normal_image_list->Draw( index, *dc, x, y, wxIMAGELIST_DRAW_TRANSPARENT );
- return;
- }
- if ((m_mode & wxLC_SMALL_ICON) && (m_small_image_list))
- {
- m_small_image_list->Draw( index, *dc, x, y, wxIMAGELIST_DRAW_TRANSPARENT );
- }
- if ((m_mode & wxLC_REPORT) && (m_small_image_list))
- {
- m_small_image_list->Draw( index, *dc, x, y, wxIMAGELIST_DRAW_TRANSPARENT );
- return;
- }
-}
-
-void wxListMainWindow::GetImageSize( int index, int &width, int &height )
-{
- if ((m_mode & wxLC_ICON) && (m_normal_image_list))
- {
- m_normal_image_list->GetSize( index, width, height );
- return;
- }
- if ((m_mode & wxLC_SMALL_ICON) && (m_small_image_list))
- {
- m_small_image_list->GetSize( index, width, height );
- return;
- }
- if ((m_mode & wxLC_REPORT) && (m_small_image_list))
- {
- m_small_image_list->GetSize( index, width, height );
- return;
- }
- width = 0;
- height = 0;
+ width = 0;
+ height = 0;
}
int wxListMainWindow::GetTextLength( wxString &s )
{
- wxPaintDC dc( this );
+ wxClientDC dc( this );
long lw = 0;
long lh = 0;
dc.GetTextExtent( s, &lw, &lh );
void wxListMainWindow::SetColumn( int col, wxListItem &item )
{
- m_dirty = TRUE;
- wxNode *node = m_columns.Nth( col );
- if (node)
- {
- if (item.m_width == wxLIST_AUTOSIZE_USEHEADER) item.m_width = GetTextLength( item.m_text )+7;
- wxListHeaderData *column = (wxListHeaderData*)node->Data();
- column->SetItem( item );
- }
- wxListCtrl *lc = (wxListCtrl*) GetParent();
- if (lc->m_headerWin) lc->m_headerWin->Refresh();
+ m_dirty = TRUE;
+ wxNode *node = m_columns.Nth( col );
+ if (node)
+ {
+ if (item.m_width == wxLIST_AUTOSIZE_USEHEADER) item.m_width = GetTextLength( item.m_text )+7;
+ wxListHeaderData *column = (wxListHeaderData*)node->Data();
+ column->SetItem( item );
+ }
+ wxListCtrl *lc = (wxListCtrl*) GetParent();
+ if (lc->m_headerWin) lc->m_headerWin->Refresh();
}
void wxListMainWindow::SetColumnWidth( int col, int width )
{
- if (!(m_mode & wxLC_REPORT)) return;
+ if (!(m_mode & wxLC_REPORT)) return;
- m_dirty = TRUE;
+ m_dirty = TRUE;
- wxNode *node = m_columns.Nth( col );
- if (node)
- {
- wxListHeaderData *column = (wxListHeaderData*)node->Data();
- column->SetWidth( width );
- }
+ wxNode *node = (wxNode*) NULL;
- node = m_lines.First();
- while (node)
- {
- wxListLineData *line = (wxListLineData*)node->Data();
- wxNode *n = line->m_items.Nth( col );
- if (n)
+ if (width == wxLIST_AUTOSIZE_USEHEADER) width = 80;
+ if (width == wxLIST_AUTOSIZE)
+ {
+ wxClientDC dc(this);
+ dc.SetFont( GetFont() );
+ int max = 10;
+ node = m_lines.First();
+ while (node)
+ {
+ wxListLineData *line = (wxListLineData*)node->Data();
+ wxNode *n = line->m_items.Nth( col );
+ if (n)
+ {
+ wxListItemData *item = (wxListItemData*)n->Data();
+ int current = 0, ix = 0, iy = 0;
+ long lx = 0, ly = 0;
+ if (item->HasImage())
+ {
+ GetImageSize( item->GetImage(), ix, iy );
+ current = ix + 5;
+ }
+ if (item->HasText())
+ {
+ wxString str;
+ item->GetText( str );
+ dc.GetTextExtent( str, &lx, &ly );
+ current += lx;
+ }
+ if (current > max) max = current;
+ }
+ node = node->Next();
+ }
+ width = max+10;
+ }
+
+ node = m_columns.Nth( col );
+ if (node)
{
- wxListItemData *item = (wxListItemData*)n->Data();
- item->SetSize( width, -1 );
+ wxListHeaderData *column = (wxListHeaderData*)node->Data();
+ column->SetWidth( width );
}
- node = node->Next();
- }
- wxListCtrl *lc = (wxListCtrl*) GetParent();
- if (lc->m_headerWin) lc->m_headerWin->Refresh();
+ node = m_lines.First();
+ while (node)
+ {
+ wxListLineData *line = (wxListLineData*)node->Data();
+ wxNode *n = line->m_items.Nth( col );
+ if (n)
+ {
+ wxListItemData *item = (wxListItemData*)n->Data();
+ item->SetSize( width, -1 );
+ }
+ node = node->Next();
+ }
+
+ wxListCtrl *lc = (wxListCtrl*) GetParent();
+ if (lc->m_headerWin) lc->m_headerWin->Refresh();
}
void wxListMainWindow::GetColumn( int col, wxListItem &item )
{
- wxNode *node = m_columns.Nth( col );
- if (node)
- {
- wxListHeaderData *column = (wxListHeaderData*)node->Data();
- column->GetItem( item );
- }
- else
- {
- item.m_format = 0;
- item.m_width = 0;
- item.m_text = "";
- item.m_image = 0;
- item.m_data = 0;
- }
+ wxNode *node = m_columns.Nth( col );
+ if (node)
+ {
+ wxListHeaderData *column = (wxListHeaderData*)node->Data();
+ column->GetItem( item );
+ }
+ else
+ {
+ item.m_format = 0;
+ item.m_width = 0;
+ item.m_text = "";
+ item.m_image = 0;
+ item.m_data = 0;
+ }
}
int wxListMainWindow::GetColumnWidth( int col )
m_current = line;
FocusLine( m_current );
RefreshLine( m_current );
- RefreshLine( oldCurrent );
+ if (oldCurrent) RefreshLine( oldCurrent );
}
}
UnfocusLine( m_current );
m_current = line;
FocusLine( m_current );
- oldCurrent->Hilight( FALSE );
+ if (oldCurrent) oldCurrent->Hilight( FALSE );
RefreshLine( m_current );
- RefreshLine( oldCurrent );
+ if (oldCurrent) RefreshLine( oldCurrent );
}
bool on = state & wxLIST_STATE_SELECTED;
if (on != line->IsHilighted())
return m_lines.Number();
}
-void wxListMainWindow::GetItemRect( long index, wxRectangle &rect )
+void wxListMainWindow::GetItemRect( long index, wxRect &rect )
{
wxNode *node = m_lines.Nth( index );
if (node)
wxNode *node = m_lines.Nth( item );
if (node)
{
- wxRectangle rect;
+ wxRect rect;
wxListLineData *line = (wxListLineData*)node->Data();
line->GetRect( rect );
pos.x = rect.x;
long wxListMainWindow::GetMode( void ) const
{
- return m_mode;
+ return m_mode;
}
void wxListMainWindow::CalculatePositions( void )
{
if (!m_lines.First()) return;
- wxPaintDC dc( this );
+ wxClientDC dc( this );
dc.SetFont( GetFont() );
int iconSpacing = 0;
int y = 1;
int entireHeight = m_lines.Number() * lineSpacing + 2;
int scroll_pos = GetScrollPos( wxVERTICAL );
- SetScrollbars( m_xScroll, m_yScroll, 0, (entireHeight+15-6) / m_yScroll, 0, scroll_pos, TRUE );
+ SetScrollbars( m_xScroll, m_yScroll, 0, (entireHeight+15) / m_yScroll, 0, scroll_pos, TRUE );
GetClientSize( &clientWidth, &clientHeight );
wxNode* node = m_lines.First();
line->GetSize( lineWidth, lineHeight );
if (lineWidth > maxWidth) maxWidth = lineWidth;
y += lineSpacing;
- if (y+lineSpacing-7 >= clientHeight) // -7 for earlier "line breaking"
+ if (y+lineSpacing-6 >= clientHeight) // -6 for earlier "line breaking"
{
y = 5;
- x += maxWidth+5;
- entireWidth += maxWidth+5;
+ x += maxWidth+6;
+ entireWidth += maxWidth+6;
maxWidth = 0;
}
node = node->Next();
if (!node) tries = 1; // everything fits, no second try required
}
}
- m_visibleLines = (clientHeight+7) / (lineSpacing); // +7 for earlier "line breaking"
+ m_visibleLines = (clientHeight+6) / (lineSpacing); // +6 for earlier "line breaking"
int scroll_pos = GetScrollPos( wxHORIZONTAL );
SetScrollbars( m_xScroll, m_yScroll, (entireWidth+15) / m_xScroll, 0, scroll_pos, 0, TRUE );
long wxListMainWindow::GetNextItem( long item, int WXUNUSED(geometry), int state )
{
- long ret = 0;
- if (item > 0) ret = item;
- wxNode *node = m_lines.Nth( ret );
- while (node)
- {
- wxListLineData *line = (wxListLineData*)node->Data();
- if ((state & wxLIST_STATE_FOCUSED) && (line == m_current)) return ret;
- if ((state & wxLIST_STATE_SELECTED) && (line->IsHilighted())) return ret;
- if (!state) return ret;
- ret++;
- node = node->Next();
- }
- return -1;
+ long ret = 0;
+ if (item > 0) ret = item;
+ if(ret >= GetItemCount()) return -1;
+ wxNode *node = m_lines.Nth( ret );
+ while (node)
+ {
+ wxListLineData *line = (wxListLineData*)node->Data();
+ if ((state & wxLIST_STATE_FOCUSED) && (line == m_current)) return ret;
+ if ((state & wxLIST_STATE_SELECTED) && (line->IsHilighted())) return ret;
+ if (!state) return ret;
+ ret++;
+ node = node->Next();
+ }
+ return -1;
}
void wxListMainWindow::DeleteItem( long index )
{
- m_dirty = TRUE;
- wxNode *node = m_lines.Nth( index );
- if (node)
- {
- wxListLineData *line = (wxListLineData*)node->Data();
- if (m_current == line) m_current = (wxListLineData *) NULL;
- DeleteLine( line );
- m_lines.DeleteNode( node );
- }
+ m_dirty = TRUE;
+ wxNode *node = m_lines.Nth( index );
+ if (node)
+ {
+ wxListLineData *line = (wxListLineData*)node->Data();
+ if (m_current == line) m_current = (wxListLineData *) NULL;
+ DeleteLine( line );
+ m_lines.DeleteNode( node );
+ }
}
void wxListMainWindow::DeleteColumn( int col )
{
- wxCHECK_RET( col < (int)m_columns.GetCount(),
- "attempting to delete inexistent column in wxListView" );
+ wxCHECK_RET( col < (int)m_columns.GetCount(),
+ _T("attempting to delete inexistent column in wxListView") );
- m_dirty = TRUE;
- wxNode *node = m_columns.Nth( col );
- if (node) m_columns.DeleteNode( node );
+ m_dirty = TRUE;
+ wxNode *node = m_columns.Nth( col );
+ if (node) m_columns.DeleteNode( node );
}
void wxListMainWindow::DeleteAllItems( void )
{
- m_dirty = TRUE;
- m_current = (wxListLineData *) NULL;
- wxNode *node = m_lines.First();
- while (node)
- {
- wxListLineData *line = (wxListLineData*)node->Data();
- DeleteLine( line );
- node = node->Next();
- }
- m_lines.Clear();
+ m_dirty = TRUE;
+ m_current = (wxListLineData *) NULL;
+ wxNode *node = m_lines.First();
+ while (node)
+ {
+ wxListLineData *line = (wxListLineData*)node->Data();
+ DeleteLine( line );
+ node = node->Next();
+ }
+ m_lines.Clear();
}
void wxListMainWindow::DeleteEverything( void )
{
- m_dirty = TRUE;
- m_current = (wxListLineData *) NULL;
- wxNode *node = m_lines.First();
- while (node)
- {
- wxListLineData *line = (wxListLineData*)node->Data();
- DeleteLine( line );
- node = node->Next();
- }
- m_lines.Clear();
- m_current = (wxListLineData *) NULL;
- m_columns.Clear();
+ m_dirty = TRUE;
+ m_current = (wxListLineData *) NULL;
+ wxNode *node = m_lines.First();
+ while (node)
+ {
+ wxListLineData *line = (wxListLineData*)node->Data();
+ DeleteLine( line );
+ node = node->Next();
+ }
+ m_lines.Clear();
+ m_current = (wxListLineData *) NULL;
+ m_columns.Clear();
}
void wxListMainWindow::EnsureVisible( long index )
{
- wxListLineData *oldCurrent = m_current;
- m_current = (wxListLineData *) NULL;
- int i = index;
- wxNode *node = m_lines.Nth( i );
- if (node) m_current = (wxListLineData*)node->Data();
- if (m_current) MoveToFocus();
- m_current = oldCurrent;
+ wxListLineData *oldCurrent = m_current;
+ m_current = (wxListLineData *) NULL;
+ int i = index;
+ wxNode *node = m_lines.Nth( i );
+ if (node) m_current = (wxListLineData*)node->Data();
+ if (m_current) MoveToFocus();
+ m_current = oldCurrent;
}
long wxListMainWindow::FindItem(long start, const wxString& str, bool WXUNUSED(partial) )
{
- long pos = start;
- wxString tmp = str;
- if (pos < 0) pos = 0;
- wxNode *node = m_lines.Nth( pos );
- while (node)
- {
- wxListLineData *line = (wxListLineData*)node->Data();
- wxString s = "";
- line->GetText( 0, s );
- if (s == tmp) return pos;
- node = node->Next();
- pos++;
- }
- return -1;
+ long pos = start;
+ wxString tmp = str;
+ if (pos < 0) pos = 0;
+ wxNode *node = m_lines.Nth( pos );
+ while (node)
+ {
+ wxListLineData *line = (wxListLineData*)node->Data();
+ wxString s = "";
+ line->GetText( 0, s );
+ if (s == tmp) return pos;
+ node = node->Next();
+ pos++;
+ }
+ return -1;
}
long wxListMainWindow::FindItem(long start, long data)
{
- long pos = start;
- if (pos < 0) pos = 0;
- wxNode *node = m_lines.Nth( pos );
- while (node)
- {
- wxListLineData *line = (wxListLineData*)node->Data();
- wxListItem item;
- line->GetItem( 0, item );
- if (item.m_data == data) return pos;
- node = node->Next();
- pos++;
- }
- return -1;
+ long pos = start;
+ if (pos < 0) pos = 0;
+ wxNode *node = m_lines.Nth( pos );
+ while (node)
+ {
+ wxListLineData *line = (wxListLineData*)node->Data();
+ wxListItem item;
+ line->GetItem( 0, item );
+ if (item.m_data == data) return pos;
+ node = node->Next();
+ pos++;
+ }
+ return -1;
}
long wxListMainWindow::HitTest( int x, int y, int &flags )
{
- wxNode *node = m_lines.First();
- int count = 0;
- while (node)
- {
- wxListLineData *line = (wxListLineData*)node->Data();
- long ret = line->IsHit( x, y );
- if (ret & flags)
+ wxNode *node = m_lines.First();
+ int count = 0;
+ while (node)
{
- flags = ret;
- return count;
+ wxListLineData *line = (wxListLineData*)node->Data();
+ long ret = line->IsHit( x, y );
+ if (ret & flags)
+ {
+ flags = ret;
+ return count;
+ }
+ node = node->Next();
+ count++;
}
- node = node->Next();
- count++;
- }
- return -1;
+ return -1;
}
void wxListMainWindow::InsertItem( wxListItem &item )
{
- m_dirty = TRUE;
- int mode = 0;
- if (m_mode & wxLC_REPORT) mode = wxLC_REPORT;
- else if (m_mode & wxLC_LIST) mode = wxLC_LIST;
- else if (m_mode & wxLC_ICON) mode = wxLC_ICON;
- else if (m_mode & wxLC_SMALL_ICON) mode = wxLC_ICON; // no typo
- wxListLineData *line = new wxListLineData( this, mode, m_hilightBrush );
- if (m_mode & wxLC_REPORT)
- {
- line->InitItems( GetColumnCount() );
- item.m_width = GetColumnWidth( 0 )-3;
- }
- else
- line->InitItems( 1 );
- line->SetItem( 0, item );
- if ((item.m_itemId >= 0) && (item.m_itemId < (int)m_lines.GetCount()))
- {
- wxNode *node = m_lines.Nth( item.m_itemId );
- if (node) m_lines.Insert( node, line );
- }
- else
- {
- m_lines.Append( line );
- }
+ m_dirty = TRUE;
+ int mode = 0;
+ if (m_mode & wxLC_REPORT) mode = wxLC_REPORT;
+ else if (m_mode & wxLC_LIST) mode = wxLC_LIST;
+ else if (m_mode & wxLC_ICON) mode = wxLC_ICON;
+ else if (m_mode & wxLC_SMALL_ICON) mode = wxLC_ICON; // no typo
+
+ wxListLineData *line = new wxListLineData( this, mode, m_hilightBrush );
+
+ if (m_mode & wxLC_REPORT)
+ {
+ line->InitItems( GetColumnCount() );
+ item.m_width = GetColumnWidth( 0 )-3;
+ }
+ else
+ {
+ line->InitItems( 1 );
+ }
+
+ line->SetItem( 0, item );
+ if ((item.m_itemId >= 0) && (item.m_itemId < (int)m_lines.GetCount()))
+ {
+ wxNode *node = m_lines.Nth( item.m_itemId );
+ if (node) m_lines.Insert( node, line );
+ }
+ else
+ {
+ m_lines.Append( line );
+ }
}
void wxListMainWindow::InsertColumn( long col, wxListItem &item )
{
- m_dirty = TRUE;
- if (m_mode & wxLC_REPORT)
- {
- if (item.m_width == wxLIST_AUTOSIZE_USEHEADER) item.m_width = GetTextLength( item.m_text );
- wxListHeaderData *column = new wxListHeaderData( item );
- if ((col >= 0) && (col < (int)m_columns.GetCount()))
- {
- wxNode *node = m_columns.Nth( col );
- if (node)
- m_columns.Insert( node, column );
- }
- else
+ m_dirty = TRUE;
+ if (m_mode & wxLC_REPORT)
{
- m_columns.Append( column );
+ if (item.m_width == wxLIST_AUTOSIZE_USEHEADER) item.m_width = GetTextLength( item.m_text );
+ wxListHeaderData *column = new wxListHeaderData( item );
+ if ((col >= 0) && (col < (int)m_columns.GetCount()))
+ {
+ wxNode *node = m_columns.Nth( col );
+ if (node)
+ m_columns.Insert( node, column );
+ }
+ else
+ {
+ m_columns.Append( column );
+ }
}
- }
}
wxListCtrlCompare list_ctrl_compare_func_2;
int list_ctrl_compare_func_1( const void *arg1, const void *arg2 )
{
- wxListLineData *line1 = *((wxListLineData**)arg1);
- wxListLineData *line2 = *((wxListLineData**)arg2);
- wxListItem item;
- line1->GetItem( 0, item );
- long data1 = item.m_data;
- line2->GetItem( 0, item );
- long data2 = item.m_data;
- return list_ctrl_compare_func_2( data1, data2, list_ctrl_compare_data );
+ wxListLineData *line1 = *((wxListLineData**)arg1);
+ wxListLineData *line2 = *((wxListLineData**)arg2);
+ wxListItem item;
+ line1->GetItem( 0, item );
+ long data1 = item.m_data;
+ line2->GetItem( 0, item );
+ long data2 = item.m_data;
+ return list_ctrl_compare_func_2( data1, data2, list_ctrl_compare_data );
}
void wxListMainWindow::SortItems( wxListCtrlCompare fn, long data )
{
- list_ctrl_compare_func_2 = fn;
- list_ctrl_compare_data = data;
- m_lines.Sort( list_ctrl_compare_func_1 );
+ list_ctrl_compare_func_2 = fn;
+ list_ctrl_compare_data = data;
+ m_lines.Sort( list_ctrl_compare_func_1 );
}
// -------------------------------------------------------------------------------------
wxListItem::wxListItem(void)
{
- m_mask = 0;
- m_itemId = 0;
- m_col = 0;
- m_state = 0;
- m_stateMask = 0;
- m_image = 0;
- m_data = 0;
- m_format = wxLIST_FORMAT_CENTRE;
- m_width = 0;
- m_colour = wxBLACK;
+ m_mask = 0;
+ m_itemId = 0;
+ m_col = 0;
+ m_state = 0;
+ m_stateMask = 0;
+ m_image = 0;
+ m_data = 0;
+ m_format = wxLIST_FORMAT_CENTRE;
+ m_width = 0;
+ m_colour = wxBLACK;
}
// -------------------------------------------------------------------------------------
wxListEvent::wxListEvent( wxEventType commandType, int id ):
wxNotifyEvent( commandType, id )
{
- m_code = 0;
- m_itemIndex = 0;
- m_oldItemIndex = 0;
- m_col = 0;
- m_cancelled = FALSE;
- m_pointDrag.x = 0;
- m_pointDrag.y = 0;
+ m_code = 0;
+ m_itemIndex = 0;
+ m_oldItemIndex = 0;
+ m_col = 0;
+ m_cancelled = FALSE;
+ m_pointDrag.x = 0;
+ m_pointDrag.y = 0;
}
// -------------------------------------------------------------------------------------
wxListCtrl::wxListCtrl(void)
{
- m_imageListNormal = (wxImageList *) NULL;
- m_imageListSmall = (wxImageList *) NULL;
- m_imageListState = (wxImageList *) NULL;
- m_mainWin = (wxListMainWindow*) NULL;
- m_headerWin = (wxListHeaderWindow*) NULL;
+ m_imageListNormal = (wxImageList *) NULL;
+ m_imageListSmall = (wxImageList *) NULL;
+ m_imageListState = (wxImageList *) NULL;
+ m_mainWin = (wxListMainWindow*) NULL;
+ m_headerWin = (wxListHeaderWindow*) NULL;
}
wxListCtrl::~wxListCtrl(void)
long style, const wxValidator &validator,
const wxString &name )
{
- m_imageListNormal = (wxImageList *) NULL;
- m_imageListSmall = (wxImageList *) NULL;
- m_imageListState = (wxImageList *) NULL;
- m_mainWin = (wxListMainWindow*) NULL;
- m_headerWin = (wxListHeaderWindow*) NULL;
+ m_imageListNormal = (wxImageList *) NULL;
+ m_imageListSmall = (wxImageList *) NULL;
+ m_imageListState = (wxImageList *) NULL;
+ m_mainWin = (wxListMainWindow*) NULL;
+ m_headerWin = (wxListHeaderWindow*) NULL;
- long s = style;
+ long s = style;
- if ((s & wxLC_REPORT == 0) &&
- (s & wxLC_LIST == 0) &&
- (s & wxLC_ICON == 0))
- s = s | wxLC_LIST;
+ if ((s & wxLC_REPORT == 0) &&
+ (s & wxLC_LIST == 0) &&
+ (s & wxLC_ICON == 0))
+ {
+ s = s | wxLC_LIST;
+ }
- bool ret = wxControl::Create( parent, id, pos, size, s, name );
+ bool ret = wxControl::Create( parent, id, pos, size, s, name );
- SetValidator( validator );
+ SetValidator( validator );
- if (s & wxSUNKEN_BORDER) s -= wxSUNKEN_BORDER;
+ if (s & wxSUNKEN_BORDER) s -= wxSUNKEN_BORDER;
+
+ m_mainWin = new wxListMainWindow( this, -1, wxPoint(0,0), size, s );
- m_mainWin = new wxListMainWindow( this, -1, wxPoint(0,0), size, s );
+ if (HasFlag(wxLC_REPORT))
+ m_headerWin = new wxListHeaderWindow( this, -1, m_mainWin, wxPoint(0,0), wxSize(size.x,23), wxTAB_TRAVERSAL );
+ else
+ m_headerWin = (wxListHeaderWindow *) NULL;
- if (GetWindowStyleFlag() & wxLC_REPORT)
- m_headerWin = new wxListHeaderWindow( this, -1, m_mainWin, wxPoint(0,0), wxSize(size.x,23) );
- else
- m_headerWin = (wxListHeaderWindow *) NULL;
+ SetBackgroundColour( *wxWHITE );
- return ret;
+ return ret;
}
void wxListCtrl::OnSize( wxSizeEvent &WXUNUSED(event) )
{
- // handled in OnIdle
+ /* handled in OnIdle */
- if (m_mainWin) m_mainWin->m_dirty = TRUE;
+ if (m_mainWin) m_mainWin->m_dirty = TRUE;
}
void wxListCtrl::SetSingleStyle( long style, bool add )
{
- long flag = GetWindowStyleFlag();
+ long flag = GetWindowStyle();
- if (add)
- {
- if (style & wxLC_MASK_TYPE) flag = flag & ~wxLC_MASK_TYPE;
- if (style & wxLC_MASK_ALIGN) flag = flag & ~wxLC_MASK_ALIGN;
- if (style & wxLC_MASK_SORT) flag = flag & ~wxLC_MASK_SORT;
- }
+ if (add)
+ {
+ if (style & wxLC_MASK_TYPE) flag = flag & ~wxLC_MASK_TYPE;
+ if (style & wxLC_MASK_ALIGN) flag = flag & ~wxLC_MASK_ALIGN;
+ if (style & wxLC_MASK_SORT) flag = flag & ~wxLC_MASK_SORT;
+ }
- if (add)
- {
- flag |= style;
- }
- else
- {
- if (flag & style) flag -= style;
- }
+ if (add)
+ {
+ flag |= style;
+ }
+ else
+ {
+ if (flag & style) flag -= style;
+ }
- SetWindowStyleFlag( flag );
+ SetWindowStyleFlag( flag );
}
void wxListCtrl::SetWindowStyleFlag( long flag )
{
- m_mainWin->DeleteEverything();
+ if (m_mainWin)
+ {
+ m_mainWin->DeleteEverything();
- int width = 0;
- int height = 0;
- GetClientSize( &width, &height );
+ int width = 0;
+ int height = 0;
+ GetClientSize( &width, &height );
- m_mainWin->SetMode( flag );
+ m_mainWin->SetMode( flag );
- if (flag & wxLC_REPORT)
- {
- if (!(GetWindowStyleFlag() & wxLC_REPORT))
- {
-// m_mainWin->SetSize( 0, 24, width, height-24 );
- if (!m_headerWin)
- {
- m_headerWin = new wxListHeaderWindow( this, -1, m_mainWin, wxPoint(0,0), wxSize(width,23) );
- }
- else
- {
-// m_headerWin->SetSize( 0, 0, width, 23 );
- m_headerWin->Show( TRUE );
- }
- }
- }
- else
- {
- if (GetWindowStyleFlag() & wxLC_REPORT)
- {
-// m_mainWin->SetSize( 0, 0, width, height );
- m_headerWin->Show( FALSE );
+ if (flag & wxLC_REPORT)
+ {
+ if (!HasFlag(wxLC_REPORT))
+ {
+ if (!m_headerWin)
+ {
+ m_headerWin = new wxListHeaderWindow( this, -1, m_mainWin,
+ wxPoint(0,0), wxSize(width,23), wxTAB_TRAVERSAL );
+ }
+ else
+ {
+ m_headerWin->Show( TRUE );
+ }
+ }
+ }
+ else
+ {
+ if (HasFlag(wxLC_REPORT))
+ {
+ m_headerWin->Show( FALSE );
+ }
+ }
}
- }
-
- wxWindow::SetWindowStyleFlag( flag );
+
+ wxWindow::SetWindowStyleFlag( flag );
}
bool wxListCtrl::GetColumn(int col, wxListItem &item) const
{
- m_mainWin->GetColumn( col, item );
- return TRUE;
+ m_mainWin->GetColumn( col, item );
+ return TRUE;
}
bool wxListCtrl::SetColumn( int col, wxListItem& item )
{
- m_mainWin->SetColumn( col, item );
- return TRUE;
+ m_mainWin->SetColumn( col, item );
+ return TRUE;
}
int wxListCtrl::GetColumnWidth( int col ) const
{
- return m_mainWin->GetColumnWidth( col );
+ return m_mainWin->GetColumnWidth( col );
}
bool wxListCtrl::SetColumnWidth( int col, int width )
{
- m_mainWin->SetColumnWidth( col, width );
- return TRUE;
+ m_mainWin->SetColumnWidth( col, width );
+ return TRUE;
}
int wxListCtrl::GetCountPerPage(void) const
bool wxListCtrl::GetItem( wxListItem &info ) const
{
- m_mainWin->GetItem( info );
- return TRUE;
+ m_mainWin->GetItem( info );
+ return TRUE;
}
bool wxListCtrl::SetItem( wxListItem &info )
{
- m_mainWin->SetItem( info );
- return TRUE;
+ m_mainWin->SetItem( info );
+ return TRUE;
}
long wxListCtrl::SetItem( long index, int col, const wxString& label, int imageId )
{
- wxListItem info;
- info.m_text = label;
- info.m_mask = wxLIST_MASK_TEXT;
- info.m_itemId = index;
- info.m_col = col;
- if ( imageId > -1 )
- {
- info.m_image = imageId;
- info.m_mask |= wxLIST_MASK_IMAGE;
- }
-;
- m_mainWin->SetItem(info);
- return TRUE;
+ wxListItem info;
+ info.m_text = label;
+ info.m_mask = wxLIST_MASK_TEXT;
+ info.m_itemId = index;
+ info.m_col = col;
+ if ( imageId > -1 )
+ {
+ info.m_image = imageId;
+ info.m_mask |= wxLIST_MASK_IMAGE;
+ };
+ m_mainWin->SetItem(info);
+ return TRUE;
}
int wxListCtrl::GetItemState( long item, long stateMask ) const
{
- return m_mainWin->GetItemState( item, stateMask );
+ return m_mainWin->GetItemState( item, stateMask );
}
bool wxListCtrl::SetItemState( long item, long state, long stateMask )
{
- m_mainWin->SetItemState( item, state, stateMask );
- return TRUE;
+ m_mainWin->SetItemState( item, state, stateMask );
+ return TRUE;
}
bool wxListCtrl::SetItemImage( long item, int image, int WXUNUSED(selImage) )
{
- wxListItem info;
- info.m_image = image;
- info.m_mask = wxLIST_MASK_IMAGE;
- info.m_itemId = item;
- m_mainWin->SetItem( info );
- return TRUE;
+ wxListItem info;
+ info.m_image = image;
+ info.m_mask = wxLIST_MASK_IMAGE;
+ info.m_itemId = item;
+ m_mainWin->SetItem( info );
+ return TRUE;
}
wxString wxListCtrl::GetItemText( long item ) const
{
- wxListItem info;
- info.m_itemId = item;
- m_mainWin->GetItem( info );
- return info.m_text;
+ wxListItem info;
+ info.m_itemId = item;
+ m_mainWin->GetItem( info );
+ return info.m_text;
}
void wxListCtrl::SetItemText( long item, const wxString &str )
{
- wxListItem info;
- info.m_mask = wxLIST_MASK_TEXT;
- info.m_itemId = item;
- info.m_text = str;
- m_mainWin->SetItem( info );
+ wxListItem info;
+ info.m_mask = wxLIST_MASK_TEXT;
+ info.m_itemId = item;
+ info.m_text = str;
+ m_mainWin->SetItem( info );
}
long wxListCtrl::GetItemData( long item ) const
{
- wxListItem info;
- info.m_itemId = item;
- m_mainWin->GetItem( info );
- return info.m_data;
+ wxListItem info;
+ info.m_itemId = item;
+ m_mainWin->GetItem( info );
+ return info.m_data;
}
bool wxListCtrl::SetItemData( long item, long data )
{
- wxListItem info;
- info.m_mask = wxLIST_MASK_DATA;
- info.m_itemId = item;
- info.m_data = data;
- m_mainWin->SetItem( info );
- return TRUE;
+ wxListItem info;
+ info.m_mask = wxLIST_MASK_DATA;
+ info.m_itemId = item;
+ info.m_data = data;
+ m_mainWin->SetItem( info );
+ return TRUE;
}
-bool wxListCtrl::GetItemRect( long item, wxRectangle &rect, int WXUNUSED(code) ) const
+bool wxListCtrl::GetItemRect( long item, wxRect &rect, int WXUNUSED(code) ) const
{
- m_mainWin->GetItemRect( item, rect );
- return TRUE;
+ m_mainWin->GetItemRect( item, rect );
+ return TRUE;
}
bool wxListCtrl::GetItemPosition( long item, wxPoint& pos ) const
{
- m_mainWin->GetItemPosition( item, pos );
- return TRUE;
+ m_mainWin->GetItemPosition( item, pos );
+ return TRUE;
}
bool wxListCtrl::SetItemPosition( long WXUNUSED(item), const wxPoint& WXUNUSED(pos) )
{
- return 0;
+ return 0;
}
int wxListCtrl::GetItemCount(void) const
{
- return m_mainWin->GetItemCount();
+ return m_mainWin->GetItemCount();
}
int wxListCtrl::GetColumnCount(void) const
{
- return m_mainWin->GetColumnCount();
+ return m_mainWin->GetColumnCount();
}
void wxListCtrl::SetItemSpacing( int spacing, bool isSmall )
{
- m_mainWin->SetItemSpacing( spacing, isSmall );
+ m_mainWin->SetItemSpacing( spacing, isSmall );
}
int wxListCtrl::GetItemSpacing( bool isSmall ) const
{
- return m_mainWin->GetItemSpacing( isSmall );
+ return m_mainWin->GetItemSpacing( isSmall );
}
int wxListCtrl::GetSelectedItemCount(void) const
{
- return m_mainWin->GetSelectedItemCount();
+ return m_mainWin->GetSelectedItemCount();
}
/*
long wxListCtrl::GetTopItem(void) const
{
- return 0;
+ return 0;
}
long wxListCtrl::GetNextItem( long item, int geom, int state ) const
{
- return m_mainWin->GetNextItem( item, geom, state );
+ return m_mainWin->GetNextItem( item, geom, state );
}
wxImageList *wxListCtrl::GetImageList(int which) const
{
- if (which == wxIMAGE_LIST_NORMAL)
- {
- return m_imageListNormal;
- }
- else if (which == wxIMAGE_LIST_SMALL)
- {
- return m_imageListSmall;
- }
- else if (which == wxIMAGE_LIST_STATE)
- {
- return m_imageListState;
- }
- return (wxImageList *) NULL;
+ if (which == wxIMAGE_LIST_NORMAL)
+ {
+ return m_imageListNormal;
+ }
+ else if (which == wxIMAGE_LIST_SMALL)
+ {
+ return m_imageListSmall;
+ }
+ else if (which == wxIMAGE_LIST_STATE)
+ {
+ return m_imageListState;
+ }
+ return (wxImageList *) NULL;
}
void wxListCtrl::SetImageList( wxImageList *imageList, int which )
{
- m_mainWin->SetImageList( imageList, which );
+ m_mainWin->SetImageList( imageList, which );
}
bool wxListCtrl::Arrange( int WXUNUSED(flag) )
{
- return 0;
+ return 0;
}
bool wxListCtrl::DeleteItem( long item )
{
- m_mainWin->DeleteItem( item );
- return TRUE;
+ m_mainWin->DeleteItem( item );
+ return TRUE;
}
bool wxListCtrl::DeleteAllItems(void)
{
- m_mainWin->DeleteAllItems();
- return TRUE;
+ m_mainWin->DeleteAllItems();
+ return TRUE;
}
-void wxListCtrl::DeleteAllColumns()
+bool wxListCtrl::DeleteAllColumns()
{
for ( size_t n = 0; n < m_mainWin->m_columns.GetCount(); n++ )
DeleteColumn(n);
+
+ return TRUE;
+}
+
+void wxListCtrl::ClearAll()
+{
+ m_mainWin->DeleteEverything();
}
bool wxListCtrl::DeleteColumn( int col )
{
- m_mainWin->DeleteColumn( col );
- return TRUE;
+ m_mainWin->DeleteColumn( col );
+ return TRUE;
}
/*
bool wxListCtrl::EnsureVisible( long item )
{
- m_mainWin->EnsureVisible( item );
- return TRUE;
+ m_mainWin->EnsureVisible( item );
+ return TRUE;
}
long wxListCtrl::FindItem( long start, const wxString& str, bool partial )
{
- return m_mainWin->FindItem( start, str, partial );
+ return m_mainWin->FindItem( start, str, partial );
}
long wxListCtrl::FindItem( long start, long data )
{
- return m_mainWin->FindItem( start, data );
+ return m_mainWin->FindItem( start, data );
}
long wxListCtrl::FindItem( long WXUNUSED(start), const wxPoint& WXUNUSED(pt),
int WXUNUSED(direction))
{
- return 0;
+ return 0;
}
long wxListCtrl::HitTest( const wxPoint &point, int &flags )
{
- return m_mainWin->HitTest( (int)point.x, (int)point.y, flags );
+ return m_mainWin->HitTest( (int)point.x, (int)point.y, flags );
}
long wxListCtrl::InsertItem( wxListItem& info )
{
- m_mainWin->InsertItem( info );
- return 0;
+ m_mainWin->InsertItem( info );
+ return 0;
}
long wxListCtrl::InsertItem( long index, const wxString &label )
{
- wxListItem info;
- info.m_text = label;
- info.m_mask = wxLIST_MASK_TEXT;
- info.m_itemId = index;
- return InsertItem( info );
+ wxListItem info;
+ info.m_text = label;
+ info.m_mask = wxLIST_MASK_TEXT;
+ info.m_itemId = index;
+ return InsertItem( info );
}
long wxListCtrl::InsertItem( long index, int imageIndex )
{
- wxListItem info;
- info.m_mask = wxLIST_MASK_IMAGE;
- info.m_image = imageIndex;
- info.m_itemId = index;
- return InsertItem( info );
+ wxListItem info;
+ info.m_mask = wxLIST_MASK_IMAGE;
+ info.m_image = imageIndex;
+ info.m_itemId = index;
+ return InsertItem( info );
}
long wxListCtrl::InsertItem( long index, const wxString &label, int imageIndex )
{
- wxListItem info;
- info.m_text = label;
- info.m_image = imageIndex;
- info.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE;
- info.m_itemId = index;
- return InsertItem( info );
+ wxListItem info;
+ info.m_text = label;
+ info.m_image = imageIndex;
+ info.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE;
+ info.m_itemId = index;
+ return InsertItem( info );
}
long wxListCtrl::InsertColumn( long col, wxListItem &item )
{
- m_mainWin->InsertColumn( col, item );
- return 0;
+ m_mainWin->InsertColumn( col, item );
+ return 0;
}
long wxListCtrl::InsertColumn( long col, const wxString &heading,
int format, int width )
{
- wxListItem item;
- item.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_FORMAT;
- item.m_text = heading;
- if (width >= -2)
- {
- item.m_mask |= wxLIST_MASK_WIDTH;
- item.m_width = width;
- }
-;
- item.m_format = format;
+ wxListItem item;
+ item.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_FORMAT;
+ item.m_text = heading;
+ if (width >= -2)
+ {
+ item.m_mask |= wxLIST_MASK_WIDTH;
+ item.m_width = width;
+ }
+ item.m_format = format;
- return InsertColumn( col, item );
+ return InsertColumn( col, item );
}
bool wxListCtrl::ScrollList( int WXUNUSED(dx), int WXUNUSED(dy) )
{
- return 0;
+ return 0;
}
// Sort items.
bool wxListCtrl::SortItems( wxListCtrlCompare fn, long data )
{
- m_mainWin->SortItems( fn, data );
- return TRUE;
+ m_mainWin->SortItems( fn, data );
+ return TRUE;
}
void wxListCtrl::OnIdle( wxIdleEvent &WXUNUSED(event) )
{
- if (!m_mainWin->m_dirty) return;
+ if (!m_mainWin->m_dirty) return;
- int cw = 0;
- int ch = 0;
- GetClientSize( &cw, &ch );
+ int cw = 0;
+ int ch = 0;
+ GetClientSize( &cw, &ch );
- int x = 0;
- int y = 0;
- int w = 0;
- int h = 0;
+ int x = 0;
+ int y = 0;
+ int w = 0;
+ int h = 0;
- if (GetWindowStyleFlag() & wxLC_REPORT)
- {
- m_headerWin->GetPosition( &x, &y );
- m_headerWin->GetSize( &w, &h );
- if ((x != 0) || (y != 0) || (w != cw) || (h != 23))
- m_headerWin->SetSize( 0, 0, cw, 23 );
-
- m_mainWin->GetPosition( &x, &y );
- m_mainWin->GetSize( &w, &h );
- if ((x != 0) || (y != 24) || (w != cw) || (h != ch-24))
- m_mainWin->SetSize( 0, 24, cw, ch-24 );
- }
- else
- {
- m_mainWin->GetPosition( &x, &y );
- m_mainWin->GetSize( &w, &h );
- if ((x != 0) || (y != 24) || (w != cw) || (h != ch))
- m_mainWin->SetSize( 0, 0, cw, ch );
- }
+ if (HasFlag(wxLC_REPORT))
+ {
+ m_headerWin->GetPosition( &x, &y );
+ m_headerWin->GetSize( &w, &h );
+ if ((x != 0) || (y != 0) || (w != cw) || (h != 23))
+ m_headerWin->SetSize( 0, 0, cw, 23 );
- m_mainWin->CalculatePositions();
- m_mainWin->RealizeChanges();
- m_mainWin->m_dirty = FALSE;
- m_mainWin->Refresh();
+ m_mainWin->GetPosition( &x, &y );
+ m_mainWin->GetSize( &w, &h );
+ if ((x != 0) || (y != 24) || (w != cw) || (h != ch-24))
+ m_mainWin->SetSize( 0, 24, cw, ch-24 );
+ }
+ else
+ {
+ m_mainWin->GetPosition( &x, &y );
+ m_mainWin->GetSize( &w, &h );
+ if ((x != 0) || (y != 24) || (w != cw) || (h != ch))
+ m_mainWin->SetSize( 0, 0, cw, ch );
+ }
+
+ m_mainWin->CalculatePositions();
+ m_mainWin->RealizeChanges();
+ m_mainWin->m_dirty = FALSE;
+ m_mainWin->Refresh();
}
-void wxListCtrl::SetBackgroundColour( const wxColour &colour )
+bool wxListCtrl::SetBackgroundColour( const wxColour &colour )
{
- if (m_mainWin)
- {
- m_mainWin->SetBackgroundColour( colour );
- m_mainWin->m_dirty = TRUE;
- }
- if (m_headerWin)
- m_headerWin->SetBackgroundColour( colour );
+ if ( !wxWindow::SetBackgroundColour( colour ) )
+ return FALSE;
+
+ if (m_mainWin)
+ {
+ m_mainWin->SetBackgroundColour( colour );
+ m_mainWin->m_dirty = TRUE;
+ }
+
+ if (m_headerWin)
+ {
+// m_headerWin->SetBackgroundColour( colour );
+ }
+
+ return TRUE;
}
-void wxListCtrl::SetForegroundColour( const wxColour &colour )
+bool wxListCtrl::SetForegroundColour( const wxColour &colour )
{
- if (m_mainWin)
- {
- m_mainWin->SetForegroundColour( colour );
- m_mainWin->m_dirty = TRUE;
- }
- if (m_headerWin)
- m_headerWin->SetForegroundColour( colour );
+ if ( !wxWindow::SetForegroundColour( colour ) )
+ return FALSE;
+
+ if (m_mainWin)
+ {
+ m_mainWin->SetForegroundColour( colour );
+ m_mainWin->m_dirty = TRUE;
+ }
+
+ if (m_headerWin)
+ {
+ m_headerWin->SetForegroundColour( colour );
+ }
+
+ return TRUE;
}
-void wxListCtrl::SetFont( const wxFont &font )
+bool wxListCtrl::SetFont( const wxFont &font )
{
- if (m_mainWin)
- {
- m_mainWin->SetFont( font );
- m_mainWin->m_dirty = TRUE;
- }
- if (m_headerWin)
- m_headerWin->SetFont( font );
+ if ( !wxWindow::SetFont( font ) )
+ return FALSE;
+
+ if (m_mainWin)
+ {
+ m_mainWin->SetFont( font );
+ m_mainWin->m_dirty = TRUE;
+ }
+
+ if (m_headerWin)
+ {
+ m_headerWin->SetFont( font );
+ }
+
+ return TRUE;
}