Broke menu, navbar, statusbar, panel.notebook, and panel.welcome out of gui
[hooke.git] / hooke / ui / gui / panel / selection.py
1 # Copyright\r
2 \r
3 """Selection dialog.\r
4 """\r
5 \r
6 from os import remove\r
7 \r
8 import wx\r
9 \r
10 \r
11 class Selection (wx.Dialog):\r
12     """A selection dialog box.\r
13 \r
14     Lists options and two buttons.  The first button is setup by the\r
15     caller.  The second button cancels the dialog.\r
16 \r
17     The button appearance can be specified by selecting one of the\r
18     `standard wx IDs`_.\r
19 \r
20     .. _standard wx IDs:\r
21       http://docs.wxwidgets.org/stable/wx_stdevtid.html#stdevtid\r
22     """\r
23     def __init__(self, options, message, button_id, button_callback, *args, **kwargs):\r
24         super(Selection, self).__init__(*args, **kwargs)\r
25 \r
26         self._button_callback = button_callback\r
27 \r
28         self._c = {\r
29             'text': wx.StaticText(\r
30                 parent=self, label=message, style=wx.ALIGN_CENTRE),\r
31             'listbox': wx.CheckListBox(\r
32                 parent=self, size=wx.Size(175, 200), list=options),\r
33             'button': wx.Button(parent=self, id=button_id),\r
34             'cancel': wx.Button(self, wx.ID_CANCEL),\r
35             }\r
36         self.Bind(wx.EVT_CHECKLISTBOX, self._on_check, self._c['listbox'])\r
37         self.Bind(wx.EVT_BUTTON, self._on_button, self._c['button'])\r
38         self.Bind(wx.EVT_BUTTON, self._on_cancel, self._c['cancel'])\r
39 \r
40         border_width = 5\r
41 \r
42         b = wx.BoxSizer(wx.HORIZONTAL)\r
43         b.Add(window=self._c['button'],\r
44               flag=wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL,\r
45               border=border_width)\r
46         b.Add(window=self._c['cancel'],\r
47               flag=wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL,\r
48               border=border_width)\r
49 \r
50         v = wx.BoxSizer(wx.VERTICAL)\r
51         v.Add(window=self._c['text'],\r
52               flag=wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL,\r
53               border=border_width)\r
54         v.Add(window=self._c['listbox'],\r
55               proportion=1,\r
56               flag=wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL,\r
57               border=border_width)\r
58         v.Add(window=wx.StaticLine(\r
59                 parent=self, size=(20,-1), style=wx.LI_HORIZONTAL),\r
60               flag=wx.GROW,\r
61               border=border_width)\r
62         v.Add(window=b,\r
63               flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,\r
64               border=border_width)\r
65         self.SetSizer(v)\r
66         v.Fit(self)\r
67 \r
68     def _on_check(self, event):\r
69         """Refocus on the first checked item.\r
70         """\r
71         index = event.GetSelection()\r
72         self.listbox.SetSelection(index)\r
73 \r
74     def _on_cancel(self, event):\r
75         """Close the dialog.\r
76         """\r
77         self.EndModal(wx.ID_CANCEL)\r
78 \r
79     def _on_button(self, event):\r
80         """Call ._button_callback() and close the dialog.\r
81         """\r
82         self._button_callback(\r
83             event=event,\r
84             items=self._c['listbox'].GetItems(),\r
85             selected_items=self._c['listbox'].GetChecked())\r
86         self.EndModal(wx.ID_CLOSE)\r