Reported bug with utf-8 strings
[be.git] / interfaces / gui / wxbe / wxbe
1 #!/usr/bin/env python
2 import wx
3 from wx.lib.mixins.listctrl import ListCtrlAutoWidthMixin
4 import sys, os.path
5 from libbe import bugdir, names
6 from libbe.bug import cmp_status, cmp_severity, cmp_time, cmp_full
7
8 class MyApp(wx.App):
9     def OnInit(self):
10         frame = BugListFrame(None, title="Bug List")
11         frame.Show(True)
12         self.SetTopWindow(frame)
13         return True
14
15 class BugListFrame(wx.Frame):
16     def __init__(self, *args, **kwargs):
17         wx.Frame.__init__(self, *args, **kwargs)
18         bugs = BugList(self)
19
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")
24
25         vbox = wx.BoxSizer(wx.VERTICAL)
26         vbox.Add(panel, 0, wx.EXPAND)
27         vbox.Add(bugs, 1, wx.EXPAND)
28         
29         self.SetAutoLayout(True)
30         self.SetSizer(vbox)
31         self.Layout()
32
33 class BugList(wx.ListCtrl, ListCtrlAutoWidthMixin):
34     def __init__(self, parent):
35         wx.ListCtrl.__init__(self, parent,
36                              style=wx.LC_REPORT)
37         ListCtrlAutoWidthMixin.__init__(self)
38
39         self.bugdir = bugdir.tree_root(".")
40         self.buglist = list(self.bugdir.list())
41         self.buglist.sort()
42         self.columns = ("id", "status", "severity", "summary")
43
44         dataIndex = 0
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
55             dataIndex += 1
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)
63
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)
68         #self.Refresh()
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
85
86 app = MyApp()
87 app.MainLoop()