import wx
import wx.lib.foldpanelbar as fpb


class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        wx.Frame.__init__(self, None, -1, "test")

        self._leftWindow1 = wx.SashLayoutWindow(self, 101, wx.DefaultPosition,
            wx.Size(100, 1000), wx.NO_BORDER | wx.SW_3D | wx.CLIP_CHILDREN)
        
        self._leftWindow1.SetDefaultSize(wx.Size(220, 600))
        self._leftWindow1.SetOrientation(wx.LAYOUT_VERTICAL)
        self._leftWindow1.SetAlignment(wx.LAYOUT_LEFT)
        self._leftWindow1.SetSashVisible(wx.SASH_RIGHT, True)
        self._leftWindow1.SetExtraBorderSize(10)

        self.remainingSpace = wx.Panel(self, -1, style=wx.SUNKEN_BORDER)
        wx.StaticText(self.remainingSpace, -1,
                      "Use your imagination for what kinds of things to put in this window...",
                      (15,30))
        
        self.sidebar = fpb.FoldPanelBar(self._leftWindow1, -1, wx.DefaultPosition,
            wx.Size(-1,-1), fpb.FPB_DEFAULT_STYLE, 0)

        self._leftWindow1.Bind(wx.EVT_SASH_DRAGGED_RANGE, self.OnFoldPanelBarDrag,
                               id=100, id2=103)

        self.Bind(wx.EVT_SIZE, self.OnSize)

        item = self.sidebar.AddFoldPanel('Filter Configuration')
        self.panel = wx.Panel(item, -1, style=wx.SUNKEN_BORDER)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        
        self.panel.SetSizer(self.sizer)
        
        self.test1 = wx.StaticText(self.panel, -1, "Description: ")
        self.test2 = wx.StaticText(self.panel, -1, "Description2: ")
        self.test3 = wx.StaticText(self.panel, -1, "Description3: ")
        self.sizer.Add(self.test1, 0, wx.EXPAND, 0)
        self.sizer.Add(self.test2, 0, wx.EXPAND, 0)
        self.sizer.Add(self.test3, 0, wx.EXPAND, 0)
        
        self.sizer.Fit(self.panel)
        self.sizer.SetSizeHints(self.panel)
        self.sizer.Layout()
    
        self.sidebar.AddFoldPanelWindow(item, self.panel)


    def OnFoldPanelBarDrag(self, event):
        """ Do a proper Layout with the Sash-window """
        if event.GetDragStatus() == wx.SASH_STATUS_OUT_OF_RANGE:
            return
        if event.GetId() == 101:
            self._leftWindow1.SetDefaultSize(wx.Size(event.GetDragRect().width, 1000))

        # Leaves bits of itself behind sometimes
        wx.LayoutAlgorithm().LayoutWindow(self, self.remainingSpace)
        self.remainingSpace.Refresh()

        event.Skip()
        
        
    def OnSize(self, event):

        wx.LayoutAlgorithm().LayoutWindow(self, self.remainingSpace)
        event.Skip()
        

class Application(wx.App):
    def OnInit(self):
        win = MyFrame(None, -1, "")
        win.Show(True)
        return True
    

# end of class MyFrame1
app = Application(0)
app.MainLoop()

