3 """Fitting results panel for Hooke.
\r
9 from wx.lib.mixins.listctrl import CheckListCtrlMixin
\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
17 def OnItemActivated(self, evt):
\r
18 self.ToggleItem(evt.m_itemIndex)
\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
31 def _GetWidthInPixels(self, text):
\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
40 width, height = dc.GetTextExtent(text)
\r
43 def ClearResults(self):
\r
44 self.results_list.ClearAll()
\r
46 def DisplayResults(self, results):
\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
53 for result in results.results:
\r
55 for index, column in enumerate(results.columns):
\r
56 value_str = results.get_pretty_value(column, result.result[column])
\r
58 index_col = self.results_list.InsertStringItem(sys.maxint, '')
\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
64 for index, result in enumerate(results.results):
\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
73 def OnItemSelected(self, evt):
\r
76 def OnItemDeselected(self, evt):
\r