import wx
import wx.lib.embeddedimage as emb
import wx.lib.foldpanelbar as fpb

#----------------------------------------------------------------------
class DummyPanel(wx.Panel):
    def __init__(self, parent, colour=(255,0,0)):
        wx.Panel.__init__(self, parent, pos=wx.Point(0, 0),
                          size=wx.Size(256, 128))
        self.SetBackgroundColour(colour)
#----------------------------------------------------------------------
class InnerFoldPanel(wx.Panel):
    def __init__(self, parent, colour=(255,0,0)):
        wx.Panel.__init__(self, parent, pos=wx.Point(0, 0),
                          size=wx.Size(256, 128))
        self.SetBackgroundColour(colour)
        
        self.__create_inner_fold_panel()

        
    def __create_inner_fold_panel(self):
        # This is our inner FoldPanel
        fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
                                      (256, 128), 0,fpb.FPB_SINGLE_FOLD)

        # Fold panel style
        style = fpb.CaptionBarStyle()
        style.SetCaptionStyle(fpb.CAPTIONBAR_RECTANGLE)
        style.SetSecondColour(wx.Colour(255,255,255))

        # 1st item on inner fold panel- contains a blue "dummy" panel
        item = fold_panel.AddFoldPanel("---Inner Fold Panel 2A", collapsed=True)
        fold_panel.ApplyCaptionStyle(item, style)
        fold_panel.AddFoldPanelWindow(item, DummyPanel(item, (0,0,255)),
                                      Spacing= 0, leftSpacing=0, rightSpacing=0)

        # 1st item on inner fold panel- contains a yellow "dummy" panel
        item = fold_panel.AddFoldPanel("---Inner Fold Panel 2B", collapsed=True)
        fold_panel.ApplyCaptionStyle(item, style)
        fold_panel.AddFoldPanelWindow(item, DummyPanel(item, (255,255,0)),
                                      Spacing= 0, leftSpacing=0, rightSpacing=0)
        fold_panel.Expand(fold_panel.GetFoldPanel(1))

        # Insert fold panel inside sizer
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND)
        sizer.Fit(self)
              
        self.SetSizer(sizer)
        self.Update()
        self.SetAutoLayout(1)
#----------------------------------------------------------------------
class OuterFoldPanelFrame(wx.Frame):
    def __init__(self, parent): 
        wx.Frame.__init__(self, id=-1, name='', parent=parent,
              pos=wx.Point(0, 0), size=wx.Size(256, 512),
              style=wx.DEFAULT_FRAME_STYLE, title='Fold Panel Test')
        self.Center(wx.BOTH)
        
        # Outer fold panel
        self.__create_outer_fold_panel()
        
    def __create_outer_fold_panel(self):
        # This is our outer FoldPanel:
        fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
                                      (256, 128), 0,fpb.FPB_SINGLE_FOLD)

        # Fold panel style
        style = fpb.CaptionBarStyle()
        style.SetCaptionStyle(fpb.CAPTIONBAR_RECTANGLE)
        style.SetSecondColour(wx.Colour(255,255,255))

        # 1st item on outer fold panel- contains a red "dummy" panel
        item = fold_panel.AddFoldPanel("Outer Fold Panel 1", collapsed=True)
        fold_panel.ApplyCaptionStyle(item, style)
        fold_panel.AddFoldPanelWindow(item, DummyPanel(item), Spacing= 0,
                                      leftSpacing=0, rightSpacing=0)

        # 2nd item on outer fold panel - contains a green inner FoldPanel
        item = fold_panel.AddFoldPanel("Outer Fold Panel 2", collapsed=True)
        fold_panel.ApplyCaptionStyle(item, style)
        fold_panel.AddFoldPanelWindow(item, InnerFoldPanel(item, (0,255,0)),
                                      Spacing= 0, leftSpacing=0, rightSpacing=0)
        fold_panel.Expand(fold_panel.GetFoldPanel(1))

        # Insert fold panel inside sizer and update frame
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND)
        sizer.Fit(self)
              
        self.SetSizer(sizer)
        self.Update()
        self.SetAutoLayout(1)
#----------------------------------------------------------------------
class FoldPanelTest(wx.App):
    def OnInit(self):
        self.main_frame = OuterFoldPanelFrame(None)
        self.SetAppName("Fold Panel Test")
        self.SetTopWindow(self.main_frame)
        return True
        
    def ShowFrame(self):
        self.main_frame.Show()
        self.SetTopWindow(self.main_frame)
#----------------------------------------------------------------------
def main():
    application = FoldPanelTest(0)
    application.ShowFrame()
    application.MainLoop()
#----------------------------------------------------------------------
if __name__ == "__main__":
    main()
#----------------------------------------------------------------------
    