#!/usr/bin/env python
# -*- coding: ISO-8859-1 -*-
# generated by wxGlade 0.4.1 on Thu Apr 13 21:27:13 2006

import wx

class PaintPanel(wx.Panel):
    def __init__(self, parent, id, sub = 0, *args, **kwds):
        wx.Panel.__init__(self, parent, id, *args, **kwds)
        self.parent = parent
        self.sub =sub
        self.items = []
        
        ## sub = Not DC Panel
        if self.sub:
            self.parent.AddItem(self)
            self.Hide()
        else:
            pass
            self.Bind(wx.EVT_PAINT, self.OnPaint)
            self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
        
    def AddItem(self, item):
        ## Add Item
        self.items.append(item)
        
    def RemoveItem(self, item):
        ## Remove Item
        for i in self.items:
            if(i == item):
                self.items.remove(i)
        
    def RemoveAll(self):
        ## Remove All Items
        self.items.clear()
        
    def OnPaint(self, event):
        self.sizeX, self.sizeY  = self.GetSize()
        print "position is: " + str(self.GetPosition())
        print "size is: " + str(self.GetSize())
                
        ## Setup Double Buffer DC        
        buffer = wx.EmptyBitmap(self.sizeX, self.sizeY)        
        memDC = wx.MemoryDC()
        memDC.SelectObject(buffer)
        dc = wx.PaintDC(self)
        self.PrepareDC(dc)
        
        memDC.SetBackground(wx.Brush("White"))
        memDC.Clear()
        
        self.Draw(memDC, self.GetPosition())
        
        ## Copy DC from MemoryDC
        dc.Blit(0, 0, self.sizeX, self.sizeY,  memDC, 0, 0, wx.COPY, True)
    
        ## Clean Up The DC
        del memDC
        del dc
    
    def Draw(self, dc, pos):
        ## Draw All Attached Items
        for item in self.items:
            item.Draw(dc, self.GetPosition())
        
    def OnEraseBackground(self, event):
        pass

class PaintItem:
    def __init__(self, parent, id, name = ""):
        self.parent = parent
            
        self.name = name
        
        self.parent.AddItem(self)
    def Draw(self, dc, pos):
        dc.SetTextForeground("BLUE")
        dc.SetFont(wx.Font(50, wx.SWISS, wx.NORMAL, wx.BOLD))
        dc.DrawText( self.name, pos[0], pos[1])

class TestFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame1.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        
        self.panel = PaintPanel(self, -1)
        item1 = PaintItem(self.panel, -1, name = "main")
        
        self.subPanel= PaintPanel(self.panel, -1, sub = 1)
        item2 = PaintItem(self.subPanel, -1, name = "sub")

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame1.__set_properties
        self.SetTitle("frame_2")
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame1.__do_layout
        sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
        grid_sizer_1 = wx.FlexGridSizer(3, 3, 0, 0)
        grid_sizer_1.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer_1.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer_1.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer_1.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer_1.Add(self.subPanel, 1, wx.EXPAND, 0)
        grid_sizer_1.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer_1.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer_1.Add((20, 20), 0, wx.EXPAND, 0)
        grid_sizer_1.Add((20, 20), 0, wx.EXPAND, 0)
        
        grid_sizer_1.Fit(self.panel)
        grid_sizer_1.SetSizeHints(self.panel)
        grid_sizer_1.AddGrowableRow(0)
        grid_sizer_1.AddGrowableRow(1)
        grid_sizer_1.AddGrowableRow(2)
        grid_sizer_1.AddGrowableCol(0)
        grid_sizer_1.AddGrowableCol(1)
        grid_sizer_1.AddGrowableCol(2)
        
        self.panel.SetAutoLayout(True)
        self.panel.SetSizer(grid_sizer_1)        
        sizer_1.Add(self.panel, 1, wx.EXPAND, 0)
        self.SetAutoLayout(True)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        sizer_1.SetSizeHints(self)
        self.Layout()
        # end wxGlade

# end of class MyFrame1


class MyApp(wx.App):
    def OnInit(self):
        wx.InitAllImageHandlers()
        frame = TestFrame(None, -1, "")
        self.SetTopWindow(frame)
        frame.Show()
        return 1

# end of class MyApp

if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()