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