]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/listctrl.cpp
compilation warning fix
[wxWidgets.git] / src / generic / listctrl.cpp
index 69f4d47a54374056aa271e72e042151fda68882e..16ec1bbabc9686b042a191657bb9abd13750ae26 100644 (file)
@@ -611,7 +611,13 @@ public:
     // bring the current item into view
     void MoveToFocus() { MoveToItem(m_current); }
 
     // bring the current item into view
     void MoveToFocus() { MoveToItem(m_current); }
 
+    // start editing the label of the given item
     void EditLabel( long item );
     void EditLabel( long item );
+
+    // suspend/resume redrawing the control
+    void Freeze();
+    void Thaw();
+
     void OnRenameTimer();
     void OnRenameAccept();
 
     void OnRenameTimer();
     void OnRenameAccept();
 
@@ -843,6 +849,9 @@ private:
     wxBrush *m_highlightBrush,
             *m_highlightUnfocusedBrush;
 
     wxBrush *m_highlightBrush,
             *m_highlightUnfocusedBrush;
 
+    // if this is > 0, the control is frozen and doesn't redraw itself
+    size_t m_freezeCount;
+
     DECLARE_DYNAMIC_CLASS(wxListMainWindow);
     DECLARE_EVENT_TABLE()
 };
     DECLARE_DYNAMIC_CLASS(wxListMainWindow);
     DECLARE_EVENT_TABLE()
 };
@@ -2227,6 +2236,8 @@ void wxListMainWindow::Init()
     m_currentEdit =
     m_lineLastClicked =
     m_lineBeforeLastClicked = (size_t)-1;
     m_currentEdit =
     m_lineLastClicked =
     m_lineBeforeLastClicked = (size_t)-1;
+
+    m_freezeCount = 0;
 }
 
 void wxListMainWindow::InitScrolling()
 }
 
 void wxListMainWindow::InitScrolling()
@@ -2662,15 +2673,30 @@ void wxListMainWindow::RefreshSelected()
 #endif // !__WXGTK__/__WXGTK__
 }
 
 #endif // !__WXGTK__/__WXGTK__
 }
 
+void wxListMainWindow::Freeze()
+{
+    m_freezeCount++;
+}
+
+void wxListMainWindow::Thaw()
+{
+    wxCHECK_RET( m_freezeCount > 0, _T("thawing unfrozen list control?") );
+
+    if ( !--m_freezeCount )
+    {
+        Refresh();
+    }
+}
+
 void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
 {
     // Note: a wxPaintDC must be constructed even if no drawing is
     // done (a Windows requirement).
     wxPaintDC dc( this );
 
 void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
 {
     // Note: a wxPaintDC must be constructed even if no drawing is
     // done (a Windows requirement).
     wxPaintDC dc( this );
 
-    if ( IsEmpty() )
+    if ( IsEmpty() || m_freezeCount )
     {
     {
-        // empty control. nothing to draw
+        // nothing to draw or not the moment to draw it
         return;
     }
 
         return;
     }
 
@@ -3242,7 +3268,8 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
         nevent.SetDirection( !event.ShiftDown() );
         nevent.SetEventObject( GetParent()->GetParent() );
         nevent.SetCurrentFocus( m_parent );
         nevent.SetDirection( !event.ShiftDown() );
         nevent.SetEventObject( GetParent()->GetParent() );
         nevent.SetCurrentFocus( m_parent );
-        if (GetParent()->GetParent()->GetEventHandler()->ProcessEvent( nevent )) return;
+        if (GetParent()->GetParent()->GetEventHandler()->ProcessEvent( nevent ))
+            return;
     }
 
     /* no item -> nothing to do */
     }
 
     /* no item -> nothing to do */
@@ -3342,12 +3369,7 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
         case WXK_SPACE:
             if ( IsSingleSel() )
             {
         case WXK_SPACE:
             if ( IsSingleSel() )
             {
-                wxListEvent le( wxEVT_COMMAND_LIST_ITEM_ACTIVATED,
-                                GetParent()->GetId() );
-                le.SetEventObject( GetParent() );
-                le.m_itemIndex = m_current;
-                GetLine(m_current)->GetItem( 0, le.m_item );
-                GetParent()->GetEventHandler()->ProcessEvent( le );
+                SendNotify( m_current, wxEVT_COMMAND_LIST_ITEM_ACTIVATED );
 
                 if ( IsHighlighted(m_current) )
                 {
 
                 if ( IsHighlighted(m_current) )
                 {
@@ -3362,14 +3384,7 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
 
         case WXK_RETURN:
         case WXK_EXECUTE:
 
         case WXK_RETURN:
         case WXK_EXECUTE:
-            {
-                wxListEvent le( wxEVT_COMMAND_LIST_ITEM_ACTIVATED,
-                                GetParent()->GetId() );
-                le.SetEventObject( GetParent() );
-                le.m_itemIndex = m_current;
-                GetLine(m_current)->GetItem( 0, le.m_item );
-                GetParent()->GetEventHandler()->ProcessEvent( le );
-            }
+            SendNotify( m_current, wxEVT_COMMAND_LIST_ITEM_ACTIVATED );
             break;
 
         default:
             break;
 
         default:
@@ -4902,7 +4917,7 @@ bool wxListCtrl::DeleteAllColumns()
 {
     size_t count = m_mainWin->m_columns.GetCount();
     for ( size_t n = 0; n < count; n++ )
 {
     size_t count = m_mainWin->m_columns.GetCount();
     for ( size_t n = 0; n < count; n++ )
-        DeleteColumn(n);
+        DeleteColumn(0);
 
     return TRUE;
 }
 
     return TRUE;
 }
@@ -5221,4 +5236,14 @@ void wxListCtrl::RefreshItems(long itemFrom, long itemTo)
     m_mainWin->RefreshLines(itemFrom, itemTo);
 }
 
     m_mainWin->RefreshLines(itemFrom, itemTo);
 }
 
+void wxListCtrl::Freeze()
+{
+    m_mainWin->Freeze();
+}
+
+void wxListCtrl::Thaw()
+{
+    m_mainWin->Thaw();
+}
+
 #endif // wxUSE_LISTCTRL
 #endif // wxUSE_LISTCTRL