projects
/
wxWidgets.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixing shape windows, as we now use the structure region for answering questions...
[wxWidgets.git]
/
src
/
generic
/
treectlg.cpp
diff --git
a/src/generic/treectlg.cpp
b/src/generic/treectlg.cpp
index 01cd41e868b6f1a7ee1da418680155cb98988796..69637e09c01a6a99fb07dad0035ab84568b16128 100644
(file)
--- a/
src/generic/treectlg.cpp
+++ b/
src/generic/treectlg.cpp
@@
-40,6
+40,10
@@
#include "wx/renderer.h"
#include "wx/renderer.h"
+#ifdef __WXMAC__
+ #include "wx/mac/private.h"
+#endif
+
// -----------------------------------------------------------------------------
// array types
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// array types
// -----------------------------------------------------------------------------
@@
-677,7
+681,7
@@
BEGIN_EVENT_TABLE(wxGenericTreeCtrl,wxScrolledWindow)
EVT_TREE_ITEM_GETTOOLTIP(-1, wxGenericTreeCtrl::OnGetToolTip)
END_EVENT_TABLE()
EVT_TREE_ITEM_GETTOOLTIP(-1, wxGenericTreeCtrl::OnGetToolTip)
END_EVENT_TABLE()
-#if !defined(__WXMSW__) || defined(__W
IN16__) || defined(__W
XUNIVERSAL__)
+#if !defined(__WXMSW__) || defined(__WXUNIVERSAL__)
/*
* wxTreeCtrl has to be a real class or we have problems with
* the run-time information.
/*
* wxTreeCtrl has to be a real class or we have problems with
* the run-time information.
@@
-730,11
+734,17
@@
void wxGenericTreeCtrl::Init()
m_textCtrl = NULL;
m_renameTimer = NULL;
m_textCtrl = NULL;
m_renameTimer = NULL;
+ m_freezeCount = 0;
+
m_findTimer = NULL;
m_lastOnSame = FALSE;
m_findTimer = NULL;
m_lastOnSame = FALSE;
+#if defined( __WXMAC__ ) && __WXMAC_CARBON__
+ m_normalFont.MacCreateThemeFont( kThemeViewsFont ) ;
+#else
m_normalFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
m_normalFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
+#endif
m_boldFont = wxFont(m_normalFont.GetPointSize(),
m_normalFont.GetFamily(),
m_normalFont.GetStyle(),
m_boldFont = wxFont(m_normalFont.GetPointSize(),
m_normalFont.GetFamily(),
m_normalFont.GetStyle(),
@@
-1898,8
+1908,12
@@
void wxGenericTreeCtrl::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.
// 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)
+#if defined( __WXMSW__ ) || defined(__WXMAC__)
+ Update();
+#else
+ wxYieldIfNeeded();
+#endif
wxGenericTreeItem *gitem = (wxGenericTreeItem*) item.m_pItem;
// now scroll to the item
wxGenericTreeItem *gitem = (wxGenericTreeItem*) item.m_pItem;
// now scroll to the item
@@
-2831,7
+2845,11
@@
void wxGenericTreeCtrl::Edit( const wxTreeItemId& item )
// question might just have been added and no screen
// update taken place.
if ( m_dirty )
// question might just have been added and no screen
// update taken place.
if ( m_dirty )
+#if defined( __WXMSW__ ) || defined(__WXMAC__)
+ Update();
+#else
wxYieldIfNeeded();
wxYieldIfNeeded();
+#endif
m_textCtrl = new wxTreeTextCtrl(this, itemEdit);
m_textCtrl = new wxTreeTextCtrl(this, itemEdit);
@@
-2888,7
+2906,9
@@
void wxGenericTreeCtrl::OnMouse( wxMouseEvent &event )
int flags = 0;
wxGenericTreeItem *thisItem = m_anchor->HitTest(pt, this, flags, 0);
wxGenericTreeItem *underMouse = thisItem;
int flags = 0;
wxGenericTreeItem *thisItem = m_anchor->HitTest(pt, this, flags, 0);
wxGenericTreeItem *underMouse = thisItem;
+#if wxUSE_TOOLTIPS
bool underMouseChanged = (underMouse != m_underMouse) ;
bool underMouseChanged = (underMouse != m_underMouse) ;
+#endif // wxUSE_TOOLTIPS
if ((underMouse) &&
(flags & wxTREE_HITTEST_ONITEMBUTTON) &&
if ((underMouse) &&
(flags & wxTREE_HITTEST_ONITEMBUTTON) &&
@@
-3016,7
+3036,11
@@
void wxGenericTreeCtrl::OnMouse( wxMouseEvent &event )
// highlight the current drop target if any
DrawDropEffect(m_dropTarget);
// highlight the current drop target if any
DrawDropEffect(m_dropTarget);
+#if defined( __WXMSW__ ) || defined(__WXMAC__)
+ Update();
+#else
wxYieldIfNeeded();
wxYieldIfNeeded();
+#endif
}
}
else if ( (event.LeftUp() || event.RightUp()) && m_isDragging )
}
}
else if ( (event.LeftUp() || event.RightUp()) && m_isDragging )
@@
-3047,7
+3071,11
@@
void wxGenericTreeCtrl::OnMouse( wxMouseEvent &event )
SetCursor(m_oldCursor);
SetCursor(m_oldCursor);
+#if defined( __WXMSW__ ) || defined(__WXMAC__)
+ Update();
+#else
wxYieldIfNeeded();
wxYieldIfNeeded();
+#endif
}
else
{
}
else
{
@@
-3193,7
+3221,8
@@
void wxGenericTreeCtrl::OnInternalIdle()
* we actually redraw the tree when everything is over */
if (!m_dirty) return;
* we actually redraw the tree when everything is over */
if (!m_dirty) return;
-
+ if (m_freezeCount) return;
+
m_dirty = FALSE;
CalculatePositions();
m_dirty = FALSE;
CalculatePositions();
@@
-3304,6
+3333,7
@@
void wxGenericTreeCtrl::CalculatePositions()
void wxGenericTreeCtrl::RefreshSubtree(wxGenericTreeItem *item)
{
if (m_dirty) return;
void wxGenericTreeCtrl::RefreshSubtree(wxGenericTreeItem *item)
{
if (m_dirty) return;
+ if (m_freezeCount) return;
wxSize client = GetClientSize();
wxSize client = GetClientSize();
@@
-3320,6
+3350,7
@@
void wxGenericTreeCtrl::RefreshSubtree(wxGenericTreeItem *item)
void wxGenericTreeCtrl::RefreshLine( wxGenericTreeItem *item )
{
if (m_dirty) return;
void wxGenericTreeCtrl::RefreshLine( wxGenericTreeItem *item )
{
if (m_dirty) return;
+ if (m_freezeCount) return;
wxRect rect;
CalcScrolledPosition(0, item->GetY(), NULL, &rect.y);
wxRect rect;
CalcScrolledPosition(0, item->GetY(), NULL, &rect.y);
@@
-3331,6
+3362,8
@@
void wxGenericTreeCtrl::RefreshLine( wxGenericTreeItem *item )
void wxGenericTreeCtrl::RefreshSelected()
{
void wxGenericTreeCtrl::RefreshSelected()
{
+ if (m_freezeCount) return;
+
// TODO: this is awfully inefficient, we should keep the list of all
// selected items internally, should be much faster
if ( m_anchor )
// TODO: this is awfully inefficient, we should keep the list of all
// selected items internally, should be much faster
if ( m_anchor )
@@
-3339,6
+3372,8
@@
void wxGenericTreeCtrl::RefreshSelected()
void wxGenericTreeCtrl::RefreshSelectedUnder(wxGenericTreeItem *item)
{
void wxGenericTreeCtrl::RefreshSelectedUnder(wxGenericTreeItem *item)
{
+ if (m_freezeCount) return;
+
if ( item->IsSelected() )
RefreshLine(item);
if ( item->IsSelected() )
RefreshLine(item);
@@
-3350,6
+3385,21
@@
void wxGenericTreeCtrl::RefreshSelectedUnder(wxGenericTreeItem *item)
}
}
}
}
+void wxGenericTreeCtrl::Freeze()
+{
+ m_freezeCount++;
+}
+
+void wxGenericTreeCtrl::Thaw()
+{
+ wxCHECK_RET( m_freezeCount > 0, _T("thawing unfrozen tree control?") );
+
+ if ( !--m_freezeCount )
+ {
+ Refresh();
+ }
+}
+
// ----------------------------------------------------------------------------
// changing colours: we need to refresh the tree control
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// changing colours: we need to refresh the tree control
// ----------------------------------------------------------------------------
@@
-3359,6
+3409,8
@@
bool wxGenericTreeCtrl::SetBackgroundColour(const wxColour& colour)
if ( !wxWindow::SetBackgroundColour(colour) )
return FALSE;
if ( !wxWindow::SetBackgroundColour(colour) )
return FALSE;
+ if (m_freezeCount) return TRUE;
+
Refresh();
return TRUE;
Refresh();
return TRUE;
@@
-3369,6
+3421,8
@@
bool wxGenericTreeCtrl::SetForegroundColour(const wxColour& colour)
if ( !wxWindow::SetForegroundColour(colour) )
return FALSE;
if ( !wxWindow::SetForegroundColour(colour) )
return FALSE;
+ if (m_freezeCount) return TRUE;
+
Refresh();
return TRUE;
Refresh();
return TRUE;