Merge pull request #979 from RobinD42/fix-issue973

Optimize line drawing in HyperTreeList
(cherry picked from commit b9e2d4d717)
This commit is contained in:
Robin Dunn
2018-08-29 22:31:24 -07:00
parent 2849ff993b
commit 94f8377b77
3 changed files with 29 additions and 37 deletions

View File

@@ -99,6 +99,9 @@ Changes in this release include the following:
* Fix type error that would occur using pycolourchooser. (#957)
* Optimize line drawing in HyperTreeList. (#973)
4.0.3 "The show must go on. (Die show-stoppers! Die!)"

View File

@@ -251,7 +251,7 @@ def GetSmilesImage():
def opj(path):
"""Convert paths to the platform-specific separator"""
str = apply(os.path.join, tuple(path.split('/')))
str = os.path.join(*tuple(path.split('/')))
# HACK: on Linux, a leading / gets lost...
if path.startswith('/'):
str = '/' + str
@@ -417,14 +417,11 @@ class PenDialog(wx.Dialog):
else:
self.parent.SetBorderPen(pen)
self.Destroy()
event.Skip()
self.EndModal(wx.ID_OK)
def OnCancel(self, event):
self.Destroy()
event.Skip()
self.EndModal(wx.ID_CANCEL)
#---------------------------------------------------------------------------
@@ -532,18 +529,15 @@ class TreeDialog(wx.Dialog):
selection = self.listicons.GetSelection()
self.parent.SetTreeButtons(selection)
self.Destroy()
event.Skip()
self.EndModal(wx.ID_OK)
def OnCancel(self, event):
self.Destroy()
event.Skip()
self.EndModal(wx.ID_CANCEL)
#---------------------------------------------------------------------------
# Just A Dialog To Select Tree Cehck/Radio Item Icons
# Just A Dialog To Select Tree Check/Radio Item Icons
#---------------------------------------------------------------------------
class CheckDialog(wx.Dialog):
@@ -669,14 +663,11 @@ class CheckDialog(wx.Dialog):
selection = self.listicons.GetSelection()
self.parent.SetCheckRadio(selection)
self.Destroy()
event.Skip()
self.EndModal(wx.ID_OK)
def OnCancel(self, event):
self.Destroy()
event.Skip()
self.EndModal(wx.ID_CANCEL)
#---------------------------------------------------------------------------
@@ -818,14 +809,11 @@ class TreeIcons(wx.Dialog):
self.parent.SetNewIcons(newbitmaps)
self.Destroy()
event.Skip()
self.EndModal(wx.ID_OK)
def OnCancel(self, event):
self.Destroy()
event.Skip()
self.EndModal(wx.ID_CANCEL)
def GetBitmap(self, input, which):
@@ -1067,6 +1055,8 @@ class HyperTreeListDemo(wx.Frame):
self.leftpanel.SetBackgroundColour(wx.WHITE)
self.leftpanel.SetScrollRate(20, 20)
self.Fit()
def CreateMenuBar(self):
@@ -1392,8 +1382,7 @@ class HyperTreeListDemo(wx.Frame):
dlg = PenDialog(self, -1, oldpen=pen, pentype=0)
dlg.ShowModal()
event.Skip()
dlg.Destroy()
def OnColumnFont(self, event):
@@ -1490,7 +1479,7 @@ class HyperTreeListDemo(wx.Frame):
dlg = PenDialog(self, -1, oldpen=pen, pentype=1)
dlg.ShowModal()
event.Skip()
dlg.Destroy()
def SetBorderPen(self, pen):
@@ -1502,16 +1491,14 @@ class HyperTreeListDemo(wx.Frame):
dlg = TreeDialog(self, -1, oldicons=self.oldicons)
dlg.ShowModal()
event.Skip()
dlg.Destroy()
def OnButtonCheckRadio(self, event):
dlg = CheckDialog(self, -1)
dlg.ShowModal()
event.Skip()
dlg.Destroy()
def SetTreeButtons(self, selection):
@@ -1547,6 +1534,7 @@ class HyperTreeListDemo(wx.Frame):
il.Add(wx.Bitmap(bitmap_check, wx.BITMAP_TYPE_ICO))
il.Add(wx.Bitmap(bitmap_uncheck, wx.BITMAP_TYPE_ICO))
il.Add(wx.Bitmap(bitmap_uncheck, wx.BITMAP_TYPE_ICO)) # TODO: we need an "undetermined check" icon...
il.Add(wx.Bitmap(bitmap_flag, wx.BITMAP_TYPE_ICO))
il.Add(wx.Bitmap(bitmap_unflag, wx.BITMAP_TYPE_ICO))
self.tree.SetImageListCheck(16, 16, il)
@@ -2166,7 +2154,7 @@ class HyperTreeList(HTL.HyperTreeList):
dlg = TreeIcons(self, -1, bitmaps=bitmaps)
wx.EndBusyCursor()
dlg.ShowModal()
event.Skip()
dlg.Destroy()
def SetNewIcons(self, bitmaps):

View File

@@ -3202,14 +3202,15 @@ class TreeListMainWindow(CustomTreeCtrl):
else:
oldY = y_mid + h//2
for child in item.GetChildren():
children = item.GetChildren()
for child in children:
y, x_maincol = self.PaintLevel(child, dc, level+1, y, x_maincol)
# draw vertical line
if not self.HasAGWFlag(wx.TR_NO_LINES):
Y1 = child.GetY() + child.GetHeight()//2
dc.DrawLine(x, oldY, x, Y1)
if not self.HasAGWFlag(wx.TR_NO_LINES) and children:
last_child = children[-1]
Y1 = last_child.GetY() + last_child.GetHeight() / 2
dc.DrawLine(x, oldY, x, Y1)
return y, x_maincol
@@ -3833,7 +3834,7 @@ class TreeListMainWindow(CustomTreeCtrl):
checkimage = item.GetCurrentCheckedImage()
if checkimage is not None:
wcheck, hcheck = self._imageListCheck.GetSize(checkimage)
wcheck, hcheck = self._imageListCheck.GetSize(0)
wcheck += 2*_MARGIN
else:
wcheck = 0