X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d027179b48bc55d5166cd5ab727d50bf1beff153..c11d62a6e22ead4c327b7ad45ad466b451b1aff6:/src/generic/listctrl.cpp diff --git a/src/generic/listctrl.cpp b/src/generic/listctrl.cpp index c23e25e96d..2fee597386 100644 --- a/src/generic/listctrl.cpp +++ b/src/generic/listctrl.cpp @@ -473,6 +473,8 @@ private: // common part of all ctors void Init(); + void SendListEvent(wxEventType type, wxPoint pos); + DECLARE_DYNAMIC_CLASS(wxListHeaderWindow) DECLARE_EVENT_TABLE() }; @@ -626,7 +628,7 @@ public: // suspend/resume redrawing the control void Freeze(); void Thaw(); - + void SetFocus(); void OnRenameTimer(); @@ -1983,6 +1985,9 @@ void wxListHeaderWindow::OnMouse( wxMouseEvent &event ) if (m_isDragging) { + SendListEvent(wxEVT_COMMAND_LIST_COL_DRAGGING, + event.GetPosition()); + // we don't draw the line beyond our window, but we allow dragging it // there int w = 0; @@ -2000,6 +2005,8 @@ void wxListHeaderWindow::OnMouse( wxMouseEvent &event ) m_isDragging = FALSE; m_dirty = TRUE; m_owner->SetColumnWidth( m_column, m_currentX - m_minX ); + SendListEvent(wxEVT_COMMAND_LIST_COL_END_DRAG, + event.GetPosition()); } else { @@ -2056,25 +2063,15 @@ void wxListHeaderWindow::OnMouse( wxMouseEvent &event ) m_currentX = x; DrawCurrent(); CaptureMouse(); + SendListEvent(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, + event.GetPosition()); } else // click on a column { - wxWindow *parent = GetParent(); - wxListEvent le( event.LeftDown() + SendListEvent( event.LeftDown() ? wxEVT_COMMAND_LIST_COL_CLICK : wxEVT_COMMAND_LIST_COL_RIGHT_CLICK, - parent->GetId() ); - le.SetEventObject( parent ); - le.m_pointDrag = event.GetPosition(); - - // the position should be relative to the parent window, not - // this one for compatibility with MSW and common sense: the - // user code doesn't know anything at all about this header - // window, so why should it get positions relative to it? - le.m_pointDrag.y -= GetSize().y; - - le.m_col = m_column; - parent->GetEventHandler()->ProcessEvent( le ); + event.GetPosition()); } } else if (event.Moving()) @@ -2102,6 +2099,23 @@ void wxListHeaderWindow::OnSetFocus( wxFocusEvent &WXUNUSED(event) ) m_owner->SetFocus(); } +void wxListHeaderWindow::SendListEvent(wxEventType type, wxPoint pos) +{ + wxWindow *parent = GetParent(); + wxListEvent le( type, parent->GetId() ); + le.SetEventObject( parent ); + le.m_pointDrag = pos; + + // the position should be relative to the parent window, not + // this one for compatibility with MSW and common sense: the + // user code doesn't know anything at all about this header + // window, so why should it get positions relative to it? + le.m_pointDrag.y -= GetSize().y; + + le.m_col = m_column; + parent->GetEventHandler()->ProcessEvent( le ); +} + //----------------------------------------------------------------------------- // wxListRenameTimer (internal) //----------------------------------------------------------------------------- @@ -2221,7 +2235,7 @@ void wxListTextCtrl::OnKillFocus( wxFocusEvent &event ) (*m_accept) = TRUE; (*m_res) = GetValue(); - + if ((*m_res) != m_startValue) m_owner->OnRenameAccept(); } @@ -3053,7 +3067,7 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event ) #ifdef __WXGTK__ // FIXME: wxGTK generates bad sequence of events prior to doubleclick - // ("down, up, down, double, up" while other ports + // ("down, up, down, double, up" while other ports // do "down, up, double, up"). We have to have this hack // in place till somebody fixes wxGTK... if ( current == m_lineBeforeLastClicked ) @@ -3412,13 +3426,13 @@ void wxListMainWindow::OnChar( wxKeyEvent &event ) void wxListMainWindow::SetFocus() { // VS: wxListMainWindow derives from wxPanel (via wxScrolledWindow) and wxPanel - // overrides SetFocus in such way that it does never change focus from + // overrides SetFocus in such way that it does never change focus from // panel's child to the panel itself. Unfortunately, we must be able to change - // focus to the panel from wxListTextCtrl because the text control should + // focus to the panel from wxListTextCtrl because the text control should // disappear when the user clicks outside it. wxWindow *oldFocus = FindFocus(); - + if ( oldFocus && oldFocus->GetParent() == this ) { wxWindow::SetFocus(); @@ -3937,7 +3951,7 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) int clientWidth, clientHeight; GetSize( &clientWidth, &clientHeight ); - + if ( HasFlag(wxLC_REPORT) ) { // all lines have the same height @@ -3972,7 +3986,7 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) { // We start with 4 for the border around all items entireWidth = 4; - + if (tries == 1) { // Now we have decided that the items do not fit into the @@ -3984,7 +3998,7 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) // a scrollbar at the bottom of its client area. entireWidth += SCROLL_UNIT_X; } - + // Start at 2,2 so the text does not touch the border int x = 2; int y = 2; @@ -4018,11 +4032,11 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) entireWidth += maxWidth+6; maxWidth = 0; } - + // We have reached the last item. if ( i == count - 1 ) entireWidth += maxWidth; - + if ( (tries == 0) && (entireWidth+SCROLL_UNIT_X > clientWidth) ) { clientHeight -= 15; // We guess the scrollbar height. (FIXME) @@ -4030,7 +4044,7 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh) currentlyVisibleLines = 0; break; } - + if ( i == count - 1 ) tries = 1; // Everything fits, no second try required. } @@ -4478,38 +4492,6 @@ void wxListMainWindow::GetVisibleLinesRange(size_t *from, size_t *to) IMPLEMENT_DYNAMIC_CLASS(wxListItem, wxObject) -wxListItem::wxListItem() -{ - m_attr = NULL; - - Clear(); -} - -void wxListItem::Clear() -{ - m_mask = 0; - m_itemId = 0; - m_col = 0; - m_state = 0; - m_stateMask = 0; - m_image = -1; - m_data = 0; - m_format = wxLIST_FORMAT_CENTRE; - m_width = 0; - m_text.clear(); - - ClearAttributes(); -} - -void wxListItem::ClearAttributes() -{ - if (m_attr) - { - delete m_attr; - m_attr = NULL; - } -} - // ------------------------------------------------------------------------------------- // wxListCtrl // ------------------------------------------------------------------------------------- @@ -4823,6 +4805,38 @@ int wxListCtrl::GetItemSpacing( bool isSmall ) const return m_mainWin->GetItemSpacing( isSmall ); } +void wxListCtrl::SetItemTextColour( long item, const wxColour &col ) +{ + wxListItem info; + info.m_itemId = item; + info.SetTextColour( col ); + m_mainWin->SetItem( info ); +} + +wxColour wxListCtrl::GetItemTextColour( long item ) const +{ + wxListItem info; + info.m_itemId = item; + m_mainWin->GetItem( info ); + return info.GetTextColour(); +} + +void wxListCtrl::SetItemBackgroundColour( long item, const wxColour &col ) +{ + wxListItem info; + info.m_itemId = item; + info.SetBackgroundColour( col ); + m_mainWin->SetItem( info ); +} + +wxColour wxListCtrl::GetItemBackgroundColour( long item ) const +{ + wxListItem info; + info.m_itemId = item; + m_mainWin->GetItem( info ); + return info.GetBackgroundColour(); +} + int wxListCtrl::GetSelectedItemCount() const { return m_mainWin->GetSelectedItemCount(); @@ -5053,7 +5067,7 @@ bool wxListCtrl::SortItems( wxListCtrlCompare fn, long data ) // event handlers // ---------------------------------------------------------------------------- -void wxListCtrl::OnSize(wxSizeEvent& event) +void wxListCtrl::OnSize(wxSizeEvent& WXUNUSED(event)) { if ( !m_mainWin ) return; @@ -5197,19 +5211,19 @@ void wxListCtrl::SetFocus() // virtual list control support // ---------------------------------------------------------------------------- -wxString wxListCtrl::OnGetItemText(long item, long col) const +wxString wxListCtrl::OnGetItemText(long WXUNUSED(item), long WXUNUSED(col)) const { // this is a pure virtual function, in fact - which is not really pure // because the controls which are not virtual don't need to implement it - wxFAIL_MSG( _T("not supposed to be called") ); + wxFAIL_MSG( _T("wxListCtrl::OnGetItemText not supposed to be called") ); return wxEmptyString; } -int wxListCtrl::OnGetItemImage(long item) const +int wxListCtrl::OnGetItemImage(long WXUNUSED(item)) const { // same as above - wxFAIL_MSG( _T("not supposed to be called") ); + wxFAIL_MSG( _T("wxListCtrl::OnGetItemImage not supposed to be called") ); return -1; } @@ -5251,3 +5265,5 @@ void wxListCtrl::Thaw() } #endif // wxUSE_LISTCTRL + +// vi:sts=4:sw=4:et