X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/412e0d47c05d69cb029e9dbd11b31ce24fb2377e..a4314b7e4865907dafdc1402ca767c5287614015:/wxPython/contrib/gizmos/wxCode/src/treelistctrl.cpp diff --git a/wxPython/contrib/gizmos/wxCode/src/treelistctrl.cpp b/wxPython/contrib/gizmos/wxCode/src/treelistctrl.cpp index eebd9d3a81..2d07d6b2d3 100644 --- a/wxPython/contrib/gizmos/wxCode/src/treelistctrl.cpp +++ b/wxPython/contrib/gizmos/wxCode/src/treelistctrl.cpp @@ -112,7 +112,7 @@ class wxTreeListHeaderWindow : public wxWindow { protected: wxTreeListMainWindow *m_owner; - wxCursor *m_currentCursor; + const wxCursor *m_currentCursor; wxCursor *m_resizeCursor; bool m_isDragging; @@ -568,6 +568,8 @@ public: // implementation helpers void SendDeleteEvent(wxTreeListItem *itemBeingDeleted); + void DoDirtyProcessing(); + void DrawBorder(const wxTreeItemId& item); void DrawLine(const wxTreeItemId& item, bool below); @@ -1124,7 +1126,7 @@ void wxTreeListHeaderWindow::DoDrawRect( wxDC *dc, int x, int y, int w, int h ) GtkStateType state = m_parent->IsEnabled() ? GTK_STATE_NORMAL : GTK_STATE_INSENSITIVE; - x = dc->XLOG2DEV( x ); + x = dc->LogicalToDeviceX( x ); gtk_paint_box (m_wxwindow->style, GTK_PIZZA(m_wxwindow)->bin_window, state, GTK_SHADOW_OUT, @@ -1197,26 +1199,21 @@ void wxTreeListHeaderWindow::OnEraseBackground( wxEraseEvent& event ) void wxTreeListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) { #ifdef __WXGTK__ - wxClientDC real_dc( this ); + wxClientDC dc( this ); #else - wxPaintDC real_dc( this ); + wxPaintDC dc( this ); #endif - AdjustDC( real_dc ); + AdjustDC( dc ); // width and height of the entire header window int w, h; GetClientSize( &w, &h ); m_owner->CalcUnscrolledPosition(w, 0, &w, NULL); - // Setup double buffering to eliminate the flicker - wxMemoryDC dc; - wxBitmap buffer(w, h); - dc.SelectObject(buffer); dc.SetBackground(wxBrush(GetBackgroundColour())); dc.Clear(); - dc.BeginDrawing(); dc.SetFont( GetFont() ); dc.SetBackgroundMode(wxTRANSPARENT); @@ -1305,11 +1302,6 @@ void wxTreeListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) this, dc, wxRect(x, HEADER_OFFSET_Y, more_w, h-2), m_parent->IsEnabled() ? 0 : wxCONTROL_DISABLED); } - - // Finish up by drawing the buffer to the real dc - dc.EndDrawing(); - dc.SelectObject(wxNullBitmap); - real_dc.DrawBitmap(buffer, 0, 0, false); } void wxTreeListHeaderWindow::DrawCurrent() @@ -2459,7 +2451,7 @@ wxTreeItemId wxTreeListMainWindow::DoInsertItem(const wxTreeItemId& parentId, if ( data != NULL ) { - data->SetId((long)item); + data->SetId((void*)item); } parent->Insert( item, previous ); @@ -2496,7 +2488,7 @@ wxTreeItemId wxTreeListMainWindow::AddRoot(const wxString& text, #endif if ( data != NULL ) { - data->SetId((long)m_anchor); + data->SetId((void*)m_anchor); } if (!HasFlag(wxTR_MULTIPLE)) @@ -2571,7 +2563,7 @@ wxTreeItemId wxTreeListMainWindow::AppendItem(const wxTreeItemId& parentId, void wxTreeListMainWindow::SendDeleteEvent(wxTreeListItem *item) { wxTreeEvent event( wxEVT_COMMAND_TREE_DELETE_ITEM, m_owner->GetId() ); - event.SetItem((long) item); + event.SetItem((void*)item); event.SetEventObject( /*this*/m_owner ); m_owner->ProcessEvent( event ); } @@ -2648,7 +2640,7 @@ void wxTreeListMainWindow::Expand(const wxTreeItemId& itemId) return; wxTreeEvent event( wxEVT_COMMAND_TREE_ITEM_EXPANDING, m_owner->GetId() ); - event.SetItem( (long) item ); + event.SetItem( (void*)item ); event.SetEventObject( /*this*/m_owner ); if ( m_owner->ProcessEvent( event ) && !event.IsAllowed() ) @@ -2694,7 +2686,7 @@ void wxTreeListMainWindow::Collapse(const wxTreeItemId& itemId) return; wxTreeEvent event( wxEVT_COMMAND_TREE_ITEM_COLLAPSING, m_owner->GetId() ); - event.SetItem( (long) item ); + event.SetItem( (void*)item ); event.SetEventObject( /*this*/m_owner ); if ( m_owner->ProcessEvent( event ) && !event.IsAllowed() ) { @@ -2872,8 +2864,8 @@ void wxTreeListMainWindow::SelectItem(const wxTreeItemId& itemId, } wxTreeEvent event( wxEVT_COMMAND_TREE_SEL_CHANGING, m_owner->GetId() ); - event.SetItem( (long) item ); - event.SetOldItem( (long) m_current ); + event.SetItem( (void*)item ); + event.SetOldItem( (void*)m_current ); event.SetEventObject( /*this*/m_owner ); // TODO : Here we don't send any selection mode yet ! @@ -2928,11 +2920,11 @@ void wxTreeListMainWindow::SelectItem(const wxTreeItemId& itemId, void wxTreeListMainWindow::SelectAll(bool extended_select) { - wxCHECK_RET( GetWindowStyleFlag() & wxTR_MULTIPLE, wxT("invalid tree style") ); + wxCHECK_RET( GetWindowStyleFlag() & wxTR_MULTIPLE, wxT("invalid tree style, must have wxTR_MULTIPLE style to select all items") ); wxTreeEvent event( wxEVT_COMMAND_TREE_SEL_CHANGING, m_owner->GetId() ); event.SetItem( GetRootItem() ); - event.SetOldItem( (long) m_current ); + event.SetOldItem( (void*) m_current ); event.SetEventObject( /*this*/m_owner ); // TODO : Here we don't send any selection mode yet ! @@ -2956,6 +2948,7 @@ void wxTreeListMainWindow::SelectAll(bool extended_select) wxTreeItemId root = GetRootItem(); wxTreeListItem *first = (wxTreeListItem *)GetFirstChild (root, cookie).m_pItem; wxTreeListItem *last = (wxTreeListItem *)GetLastChild (GetRootItem()).m_pItem; + if (!first || !last) return; if (TagAllChildrenUntilLast (first, last, true)) return; TagNextChildren (first, last, true); @@ -3017,7 +3010,8 @@ void wxTreeListMainWindow::ScrollTo(const wxTreeItemId &item) // We have to call this here because the label in // question might just have been added and no screen // update taken place. - if (m_dirty) wxYieldIfNeeded(); + if (m_dirty) + DoDirtyProcessing(); wxTreeListItem *gitem = (wxTreeListItem*) item.m_pItem; @@ -3451,8 +3445,8 @@ void wxTreeListMainWindow::PaintLevel (wxTreeListItem *item, wxDC &dc, int total_width = m_owner->GetHeaderWindow()->GetWidth(); // if the background colour is white, choose a // contrasting color for the lines - dc.SetPen (*((GetBackgroundColour() == *wxWHITE)? - wxMEDIUM_GREY_PEN : wxWHITE_PEN)); + dc.SetPen(((GetBackgroundColour() == *wxWHITE) ? + wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT) : *wxWHITE_PEN)); dc.DrawLine(0, y_top, total_width, y_top); dc.DrawLine(0, y, total_width, y); } @@ -3797,7 +3791,7 @@ void wxTreeListMainWindow::OnChar( wxKeyEvent &event ) { wxTreeEvent event( wxEVT_COMMAND_TREE_ITEM_ACTIVATED, m_owner->GetId() ); - event.SetItem( (long) m_current); + event.SetItem( (void*) m_current); event.SetEventObject( /*this*/m_owner ); m_owner->GetEventHandler()->ProcessEvent( event ); } @@ -4068,7 +4062,7 @@ void wxTreeListMainWindow::Edit( const wxTreeItemId& item ) m_currentEdit = (wxTreeListItem*) item.m_pItem; wxTreeEvent te( wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, m_owner->GetId() ); - te.SetItem( (long) m_currentEdit); + te.SetItem( (void*) m_currentEdit); te.SetEventObject( /*this*/m_owner ); m_owner->GetEventHandler()->ProcessEvent( te ); @@ -4077,7 +4071,8 @@ void wxTreeListMainWindow::Edit( const wxTreeItemId& item ) // We have to call this here because the label in // question might just have been added and no screen // update taken place. - if (m_dirty) wxYieldIfNeeded(); + if (m_dirty) + DoDirtyProcessing(); wxString s = m_currentEdit->GetText(/*ALB*/m_main_column); int x = m_currentEdit->GetX() + m_imgWidth2; @@ -4109,7 +4104,7 @@ void wxTreeListMainWindow::OnRenameAccept() { // TODO if the validator fails this causes a crash wxTreeEvent le( wxEVT_COMMAND_TREE_END_LABEL_EDIT, m_owner->GetId() ); - le.SetItem( (long) m_currentEdit ); + le.SetItem( (void*)m_currentEdit ); le.SetEventObject( /*this*/m_owner ); le.SetLabel( m_renameRes ); m_owner->GetEventHandler()->ProcessEvent( le ); @@ -4219,7 +4214,7 @@ void wxTreeListMainWindow::OnMouse( wxMouseEvent &event ) : wxEVT_COMMAND_TREE_BEGIN_DRAG; wxTreeEvent nevent( command,/*ALB*/ m_owner->GetId() ); - nevent.SetItem( (long) m_current); + nevent.SetItem( (void*)m_current); nevent.SetEventObject(/*this*/m_owner); // ALB nevent.SetPoint(pt); @@ -4264,7 +4259,7 @@ void wxTreeListMainWindow::OnMouse( wxMouseEvent &event ) // highlight the current drop target if any DrawDropEffect(m_dropTarget); - wxYieldIfNeeded(); + DoDirtyProcessing(); } } else if ( (event.LeftUp() || event.RightUp()) && m_isDragging ) @@ -4282,7 +4277,7 @@ void wxTreeListMainWindow::OnMouse( wxMouseEvent &event ) // generate the drag end event wxTreeEvent event(wxEVT_COMMAND_TREE_END_DRAG,/*ALB*/m_owner->GetId()); - event.SetItem( (long) item ); + event.SetItem( (void*)item ); event.SetPoint( wxPoint(x, y) ); event.SetEventObject(/*this*/m_owner); @@ -4295,7 +4290,7 @@ void wxTreeListMainWindow::OnMouse( wxMouseEvent &event ) SetCursor(m_oldCursor); - wxYieldIfNeeded(); + DoDirtyProcessing(); } else { @@ -4310,7 +4305,7 @@ void wxTreeListMainWindow::OnMouse( wxMouseEvent &event ) SetFocus(); wxTreeEvent nevent(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK, m_owner->GetId()); - nevent.SetItem( (long) item ); + nevent.SetItem( (void*)item ); int nx, ny; CalcScrolledPosition(x, y, &nx, &ny); nevent.SetPoint( wxPoint(nx, ny)); @@ -4377,7 +4372,7 @@ void wxTreeListMainWindow::OnMouse( wxMouseEvent &event ) // send activate event first wxTreeEvent nevent( wxEVT_COMMAND_TREE_ITEM_ACTIVATED, m_owner->GetId() ); - nevent.SetItem( (long) item ); + nevent.SetItem( (void*)item ); int nx, ny; CalcScrolledPosition(x, y, &nx, &ny); nevent.SetPoint( wxPoint(nx, ny) ); @@ -4398,6 +4393,11 @@ void wxTreeListMainWindow::OnMouse( wxMouseEvent &event ) } void wxTreeListMainWindow::OnIdle( wxIdleEvent &WXUNUSED(event) ) +{ + DoDirtyProcessing(); +} + +void wxTreeListMainWindow::DoDirtyProcessing() { /* after all changes have been done to the tree control, * we actually redraw the tree when everything is over */