3 from wx.lib.mixins.listctrl import ListCtrlAutoWidthMixin
5 from libbe import bugdir, names
6 from libbe.bug import cmp_status, cmp_severity, cmp_time, cmp_full
10 frame = BugListFrame(None, title="Bug List")
12 self.SetTopWindow(frame)
15 class BugListFrame(wx.Frame):
16 def __init__(self, *args, **kwargs):
17 wx.Frame.__init__(self, *args, **kwargs)
20 # Widgets to display/sort/edit will go in this panel
21 # for now it is just a placeholder
22 panel = wx.Panel(self)
23 panel.SetBackgroundColour("RED")
25 vbox = wx.BoxSizer(wx.VERTICAL)
26 vbox.Add(panel, 0, wx.EXPAND)
27 vbox.Add(bugs, 1, wx.EXPAND)
29 self.SetAutoLayout(True)
33 class BugList(wx.ListCtrl, ListCtrlAutoWidthMixin):
34 def __init__(self, parent):
35 wx.ListCtrl.__init__(self, parent,
37 ListCtrlAutoWidthMixin.__init__(self)
39 self.bugdir = bugdir.tree_root(".")
40 self.buglist = list(self.bugdir.list())
42 self.columns = ("id", "status", "severity", "summary")
45 for x in range(len(self.columns)):
46 self.InsertColumn(x, self.columns[x].capitalize())
47 self.SetColumnWidth(x, wx.LIST_AUTOSIZE_USEHEADER)
48 for bug in [b for b in self.buglist if b.active]:
49 name = names.unique_name(bug, self.buglist)
50 id = self.InsertStringItem(self.GetItemCount(), name)
51 self.SetStringItem(id, 1, bug.status)
52 self.SetStringItem(id, 2, bug.severity)
53 self.SetStringItem(id, 3, bug.summary)
54 self.SetItemData(id, dataIndex) # set keys for each line
56 self.EnsureVisible(id)
57 for x in range(len(self.columns)):
58 self.SetColumnWidth(x, wx.LIST_AUTOSIZE)
59 conts_width = self.GetColumnWidth(x)
60 self.SetColumnWidth(x, wx.LIST_AUTOSIZE_USEHEADER)
61 if conts_width > self.GetColumnWidth(x):
62 self.SetColumnWidth(x, conts_width)
64 self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColumnClick)
65 self.bugcmp_fn = cmp_full
66 # For reasons I don't understant, sorting is broken...
67 #self.SortItems(self.Sorter)
69 def Sorter(self, key1, key2):
70 """Get bug info from the keys and pass to self.bugcmp_fn"""
71 bug1 = self.buglist[key1-1]
72 bug2 = self.buglist[key2-1]
73 # Another way of getting bug information
74 #bug1uuid = self.GetItem(key1, 0).GetText()
75 #bug2uuid = self.GetItem(key2, 0).GetText()
76 #print bug1uuid, bug2uuid
77 #bug1 = self.bugdir.get_bug(bug1uuid)
78 #bug2 = self.bugdir.get_bug(bug1uuid)
79 print self.bugcmp_fn(bug1,bug2)
80 return self.bugcmp_fn(bug1,bug2)
81 def OnColumnClick(self, event):
82 """Resort bug list depending on which column was clicked"""
83 print "TODO: sort by column %d" % event.Column
84 # change self.bugcmp_fn and resort, but I can't get it working