| 16 | |
| 17 | |
| 18 | class TogglePanel(wx.Panel): |
| 19 | def __init__(self, parent, force_layout=False, *args, **kargs): |
| 20 | super().__init__(parent, *args, **kargs) |
| 21 | |
| 22 | self._toggled = True |
| 23 | self.parent = parent |
| 24 | self.force_layout = force_layout |
| 25 | |
| 26 | # Create the main sizer of this panel |
| 27 | self.main_sizer = wx.BoxSizer(wx.VERTICAL) |
| 28 | self.SetSizer(self.main_sizer) |
| 29 | |
| 30 | # Create the header panel, set sizer, and add to main sizer |
| 31 | self.header_panel = wx.Panel(self) |
| 32 | header_sizer = wx.BoxSizer(wx.HORIZONTAL) |
| 33 | self.header_panel.SetSizer(header_sizer) |
| 34 | |
| 35 | self.main_sizer.Add(self.header_panel, 0, wx.EXPAND | wx.TOP | |
| 36 | wx.BOTTOM | wx.RIGHT, 1) |
| 37 | |
| 38 | # Add arrow |
| 39 | self.header_arrow = wx.StaticText(self.header_panel, wx.ID_ANY, |
| 40 | "\u25bc", size=wx.Size((10, -1))) |
| 41 | header_sizer.Add(self.header_arrow, 0, wx.RIGHT, 5) |
| 42 | |
| 43 | # Add header text |
| 44 | self.header_label = wx.StaticText(self.header_panel, wx.ID_ANY, "") |
| 45 | font = parent.GetFont() |
| 46 | font.SetWeight(wx.BOLD) |
| 47 | self.header_label.SetFont(font) |
| 48 | header_sizer.Add(self.header_label, 0, wx.RIGHT, 5) |
| 49 | |
| 50 | # Add a sizer for additional header items if we need it |
| 51 | self.hcontent_sizer = wx.BoxSizer(wx.HORIZONTAL) |
| 52 | header_sizer.Add(self.hcontent_sizer, 1, wx.RIGHT, 5) |
| 53 | |
| 54 | # Create the content panel, set sizer, and add to main sizer |
| 55 | self.content_panel = wx.Panel(self) |
| 56 | self.content_sizer = wx.BoxSizer(wx.VERTICAL) |
| 57 | self.content_panel.SetSizer(self.content_sizer) |
| 58 | |
| 59 | self.main_sizer.Add(self.content_panel, 0, wx.EXPAND | wx.RIGHT | |
| 60 | wx.LEFT, 5) |
| 61 | |
| 62 | self.Layout() |
| 63 | |
| 64 | # Connect Events |
| 65 | self.header_label.Bind(wx.EVT_LEFT_UP, self.ToggleContent) |
| 66 | self.header_arrow.Bind(wx.EVT_LEFT_UP, self.ToggleContent) |
| 67 | self.header_panel.Bind(wx.EVT_LEFT_UP, self.ToggleContent) |
| 68 | |
| 69 | def __del__(self): |
| 70 | pass |
| 71 | |
| 72 | def AddToggleItem(self, item): |
| 73 | item.Bind(wx.EVT_LEFT_UP, self.ToggleContent) |
| 74 | |
| 75 | def GetHeaderContentSizer(self): |