Updated copyright blurbs in all files to '# Copyright'
[hooke.git] / hooke / ui / gui / hookeresults.py
1 # Copyright
2
3 import sys
4 import wx
5 from wx.lib.mixins.listctrl import CheckListCtrlMixin
6
7 import prettyformat
8
9 class CheckListCtrl(wx.ListCtrl, CheckListCtrlMixin):
10     def __init__(self, parent):
11         wx.ListCtrl.__init__(self, parent, -1, style=wx.LC_REPORT)
12         CheckListCtrlMixin.__init__(self)
13         self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
14
15     def OnItemActivated(self, evt):
16         self.ToggleItem(evt.m_itemIndex)
17
18
19 class Results(wx.Panel):
20     def __init__(self, parent):
21         wx.Panel.__init__(self, parent, -1)
22         self.results_list = CheckListCtrl(self)
23         sizer = wx.BoxSizer()
24         sizer.Add(self.results_list, 1, wx.EXPAND)
25         self.SetSizer(sizer)
26         self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.results_list)
27         self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected, self.results_list)
28         #self.results_list.OnCheckItem = self.OnCheckItem
29
30     def _GetWidthInPixels(self, text):
31         #TODO:
32         #Returns the width of a string in pixels
33         #Unfortunately, it does not work terribly well (although it should).
34         #Thus, we have to add a bit afterwards.
35         #Annoys the heck out of me.
36         font = self.results_list.GetFont()
37         dc = wx.WindowDC(self.results_list)
38         dc.SetFont(font)
39         width, height = dc.GetTextExtent(text)
40         return width
41
42     def ClearResults(self):
43         self.results_list.ClearAll()
44
45     def DisplayResults(self, results):
46         self.ClearResults()
47         header = results.header_as_list()
48         self.results_list.InsertColumn(0, 'Show')
49         for index, column in enumerate(header):
50             self.results_list.InsertColumn(index + 1, column, wx.LIST_FORMAT_RIGHT)
51
52         for result in results.results:
53             done = False
54             for index, column in enumerate(results.columns):
55                 value_str = results.get_pretty_value(column, result.result[column])
56                 if not done:
57                     index_col = self.results_list.InsertStringItem(sys.maxint, '')
58                     done = True
59                 column_width = len(self.results_list.GetColumn(index + 1).GetText())
60                 value_str = value_str.center(column_width)
61                 self.results_list.SetStringItem(index_col, index + 1, value_str)
62                 #self.results_list.SetItemData(index, result)
63
64         for index, result in enumerate(results.results):
65             if result.visible:
66                 #if we use 'CheckItem' then 'UpdatePlot' is called (ie repeated updates)
67                 self.results_list.SetItemImage(index, 1)
68                 #self.results_list.CheckItem(index)
69         for index in range(self.results_list.GetColumnCount()):
70             column_text = self.results_list.GetColumn(index).GetText()
71             column_width = self._GetWidthInPixels(column_text)
72             self.results_list.SetColumnWidth(index, column_width + 15)
73
74     def OnItemSelected(self, evt):
75         pass
76
77     def OnItemDeselected(self, evt):
78         pass