#include "wx/generic/treectlg.h"
#include "wx/gizmos/splittree.h"
+#include <math.h>
/*
* wxRemotelyScrolledTreeCtrl
scrolledWindow->GetScrollPixelsPerUnit(& xppu2, & yppu2);
dc.SetDeviceOrigin( -startX * xppu1, -startY * yppu2 );
- dc.SetUserScale( win->GetScaleX(), win->GetScaleY() );
+ // dc.SetUserScale( win->GetScaleX(), win->GetScaleY() );
}
}
wxRect itemRect;
if (GetBoundingRect(GetRootItem(), itemRect))
{
- int itemHeight = itemRect.GetHeight();
+ // Actually, the real height seems to be 1 less than reported
+ // (e.g. 16 instead of 16)
+ int itemHeight = itemRect.GetHeight() - 1;
int w, h;
GetClientSize(&w, &h);
wxRect rect(0, 0, 0, 0);
CalcTreeSize(rect);
- int treeViewHeight = rect.GetHeight()/itemHeight;
+
+ double f = ((double) (rect.GetHeight()) / (double) itemHeight) ;
+ int treeViewHeight = (int) ceil(f);
int scrollPixelsPerLine = itemHeight;
int scrollPos = - (itemRect.y / itemHeight);
void wxRemotelyScrolledTreeCtrl::CalcTreeSize(const wxTreeItemId& id, wxRect& rect)
{
- // TODO: implement GetFirst/NextVisibleItem
- // for wxGenericTreeCtrl, plus GetBoundingRect.
-
// More efficient implementation would be to find the last item (but how?)
// Q: is the bounding rect relative to the top of the virtual tree workspace
// or the top of the window? How would we convert?
int orient = event.GetOrientation();
if (orient == wxHORIZONTAL)
{
- // Don't 'skip' or we'd get into infinite recursion
+ event.Skip();
return;
}
wxScrolledWindow* scrollWin = GetScrolledWindow();
dc.DrawLine(0, cy, clientSize.x, cy);
}
}
- if (m_treeCtrl->GetBoundingRect(lastH, itemRect))
+ if (lastH.IsOk() && m_treeCtrl->GetBoundingRect(lastH, itemRect))
{
cy = itemRect.GetBottom();
dc.DrawLine(0, cy, clientSize.x, cy);
int orient = event.GetOrientation();
if (orient == wxHORIZONTAL)
{
- // Don't 'skip' or we'd get into infinite recursion
+ event.Skip();
return;
}
if (!m_treeCtrl)
// don't cause an infinite loop
static bool inOnScroll = FALSE;
if (inOnScroll)
+ {
+ event.Skip();
return;
+ }
inOnScroll = TRUE;
-
+
int orient = event.GetOrientation();
int nScrollInc = CalcScrollInc(event);
if (orient == wxHORIZONTAL)
{
+ inOnScroll = FALSE;
+ event.Skip();
+ return;
+#if 0
int newPos = m_xScrollPosition + nScrollInc;
SetScrollPos(wxHORIZONTAL, newPos, TRUE );
+#endif
}
else
{