import wx
import wx.grid

class TestFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None,size=wx.DisplaySize())
        self.panel = wx.Panel(self, -1)

        self.paneltype = 'VERTICAL'
        self.panelnos = '3'
        self.cellsize = 26

        self.vbox = wx.BoxSizer(wx.VERTICAL)     

        self.panel1 = wx.Panel(self.panel,-1)
        vbox1 = wx.BoxSizer(wx.VERTICAL)
        wd,ht = wx.DisplaySize()
        ht = int((ht * 2)/3) - 80       

        # setting height for grid display size
        # to occupy 2/3 screen size

        self.grid = wx.grid.Grid(self.panel1,size=(wd,ht))
        self.grid.CreateGrid(25,40)
        self.grid.SetDefaultRowSize(self.cellsize)
        self.grid.SetDefaultColSize(self.cellsize)
        self.grid.SetRowLabelSize(0)
        self.grid.SetColLabelSize(0)
        self.sbox1 = wx.StaticBoxSizer(wx.StaticBox(self.panel1, -1, 'WORKSHEET'), orient=wx.VERTICAL)
        self.sbox1.Add(self.grid, 0, wx.ALL , 0)
        vbox1.Add(self.sbox1)
        self.panel1.SetSizer(vbox1)      
        self.vbox.Add(self.panel1, 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, 9)
        
        line = wx.StaticLine(self.panel)
        self.vbox.Add(line, 0, wx.EXPAND)

        self.font=wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
        self.font.SetPointSize(15)
        self.font.SetWeight(wx.FONTWEIGHT_BOLD)
        self.font.SetFamily(wx.FONTFAMILY_DEFAULT)
        self.makepanel2()

        self.vbox.Fit(self)
        self.panel.SetSizerAndFit(self.vbox)
        self.statusbar = self.CreateStatusBar()
        self.Centre()
        self.ShowFullScreen(True ,wx.FULLSCREEN_NOTOOLBAR)
        self.Show(True)
        
    def makepanel2(self):
        if(self.paneltype == 'VERTICAL'):
            self.grsize = 4
            self.gcsize = 3
            self.bwsize = 100
            self.bhsize = 40
        elif(self.paneltype == 'HORIZONTAL'):
            self.grsize = 1
            self.gcsize = 12
            self.bwsize = 85
            self.bhsize = 40
        else:
            pass

        self.panel2 = wx.Panel(self.panel,-1)
                
        self.butList1=range(12) 
        self.butList2=range(12)
        self.butList3=range(12)
                    
        self.gbox1 = wx.GridSizer(self.grsize, self.gcsize, 3, 3)
        
        for i in range(12):
            self.butList1[i]=wx.Button(self.panel2,i,'',size=(self.bwsize,self.bhsize))
            self.butList1[i].SetFont(self.font)
            self.butList1[i].Bind(wx.EVT_BUTTON,self.OnButtonClick)
            self.gbox1.Add(self.butList1[i],0,wx.ALL|wx.EXPAND)
        
        self.butList1[0].SetLabel('9')
        self.butList1[1].SetLabel('8')
        self.butList1[2].SetLabel('7')
        self.butList1[3].SetLabel('6')
        self.butList1[4].SetLabel('5')
        self.butList1[5].SetLabel('4')
        self.butList1[6].SetLabel('3')
        self.butList1[7].SetLabel('2')
        self.butList1[8].SetLabel('1')
        self.butList1[9].SetLabel('0')
        self.butList1[10].SetLabel('<---')
        self.butList1[11].SetLabel('NEXT')
       
        #self.butList1[10].Enable(False)

        self.gbox2 = wx.GridSizer(self.grsize, self.gcsize, 3, 3)
        
        for i in range(12):
            self.butList2[i]=wx.Button(self.panel2,i+12,'',size=(self.bwsize,self.bhsize))
            self.butList2[i].SetFont(self.font)
            self.butList2[i].Bind(wx.EVT_BUTTON,self.OnButtonClick)                  
            self.gbox2.Add(self.butList2[i],0,wx.ALL|wx.EXPAND)
            
        self.butList2[0].SetLabel(' + ')
        self.butList2[1].SetLabel(' -- ')
        self.butList2[2].SetLabel(' * ')
        self.butList2[3].SetLabel(' / ')
        self.butList2[4].SetLabel(' = ')
        self.butList2[5].SetLabel('NEXT')
        self.butList2[6].SetLabel('PREV')
        self.butList2[7].SetLabel('UP')
        self.butList2[8].SetLabel('NEXTT')
        self.butList2[9].SetLabel('LEFT')
        self.butList2[10].SetLabel('DOWN')
        self.butList2[11].SetLabel('RIGHT')
        
        #self.butList2[6].Enable(False)
        #self.butList2[8].Enable(False)
                
        self.gbox3 = wx.GridSizer(self.grsize, self.gcsize, 3, 3)

        for i in range(12):
            self.butList3[i]=wx.Button(self.panel2,i+24,'',size=(self.bwsize,self.bhsize))
            self.butList3[i].SetFont(self.font)
            self.butList3[i].Bind(wx.EVT_BUTTON,self.OnButtonClick)
            self.gbox3.Add(self.butList3[i],0,wx.ALL|wx.EXPAND)
            
        self.butList3[0].SetLabel('DIV')
        self.butList3[1].SetLabel('LCM')
        self.butList3[2].SetLabel('BY')
        self.butList3[3].SetLabel('CROSS')
        self.butList3[4].SetLabel('DOT')
        self.butList3[5].SetLabel('DEL')
        self.butList3[6].SetLabel(' ( ')
        self.butList3[7].SetLabel(' ) ')
        self.butList3[8].SetLabel(',')
        self.butList3[9].SetLabel(' | ')
        self.butList3[10].SetLabel('%')
        self.butList3[11].SetLabel('NEXT')
        
        if(self.paneltype == 'VERTICAL'):
            hbox = wx.BoxSizer(wx.HORIZONTAL)
            hbox.Add(self.gbox1,1,wx.ALL|wx.EXPAND,10)    
            hbox.Add(self.gbox2,1,wx.ALL|wx.EXPAND,10)    
            hbox.Add(self.gbox3,1,wx.ALL|wx.EXPAND,10)    

            self.panel2.SetSizer(hbox)  
        elif(self.paneltype == 'HORIZONTAL'):
            vertbox = wx.BoxSizer(wx.VERTICAL)
            vertbox.Add(self.gbox1,1,wx.ALL|wx.EXPAND,10)    
            vertbox.Add(self.gbox2,1,wx.ALL|wx.EXPAND,10)    
            vertbox.Add(self.gbox3,1,wx.ALL|wx.EXPAND,10)    

            self.panel2.SetSizer(vertbox)  
        else:
            pass

        self.vbox.Add(self.panel2, 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER | wx.EXPAND, 9)

    def makechoicepanel2(self):
        print 'choicepanel2'
        if(self.paneltype == 'VERTICAL'):
            self.grsize = 4
            self.gcsize = 3
            self.bwsize = 100
            self.bhsize = 40
        elif(self.paneltype == 'HORIZONTAL'):
            self.grsize = 1
            self.gcsize = 12
            self.bwsize = 85
            self.bhsize = 40
        else:
            pass

        #self.panel2.SetSizer(None)
        #self.panel2 = wx.Panel(self.panel,-1)

        self.gbox1 = wx.GridSizer(self.grsize, self.gcsize, 3, 3)
        self.gbox2 = wx.GridSizer(self.grsize, self.gcsize, 3, 3)
        self.gbox3 = wx.GridSizer(self.grsize, self.gcsize, 3, 3)
        self.hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        self.vbox2 = wx.BoxSizer(wx.VERTICAL)


        if(self.panelnos == '3'):
            for i in range(12):
                self.butList1[i].SetSize(wx.Size(self.bwsize,self.bhsize))
                self.butList2[i].SetSize(wx.Size(self.bwsize,self.bhsize))
                self.butList3[i].SetSize(wx.Size(self.bwsize,self.bhsize))

                self.gbox1.Add(self.butList1[i],0,wx.ALL|wx.EXPAND)
                self.gbox2.Add(self.butList2[i],0,wx.ALL|wx.EXPAND)
                self.gbox3.Add(self.butList3[i],0,wx.ALL|wx.EXPAND)
            if(self.paneltype == 'VERTICAL'):
                self.hbox2.Add(self.gbox1, 1, wx.ALL|wx.EXPAND,10)
                self.hbox2.Add(self.gbox2, 1, wx.ALL|wx.EXPAND,10)
                self.hbox2.Add(self.gbox3, 1, wx.ALL|wx.EXPAND,10)
            elif(self.paneltype == 'HORIZONTAL'):
                self.vbox2.Add(self.gbox1, 1, wx.ALL|wx.EXPAND,10)
                self.vbox2.Add(self.gbox2, 1, wx.ALL|wx.EXPAND,10)
                self.vbox2.Add(self.gbox3, 1, wx.ALL|wx.EXPAND,10)
            else:
                pass

        elif(self.panelnos == '2'):
            for i in range(12):
                self.butList1[i].SetSize(wx.Size(self.bwsize,self.bhsize))
                self.butList2[i].SetSize(wx.Size(self.bwsize,self.bhsize))

                self.gbox1.Add(self.butList1[i],0,wx.ALL|wx.EXPAND)
                self.gbox2.Add(self.butList2[i],0,wx.ALL|wx.EXPAND)
            if(self.paneltype == 'VERTICAL'):
                self.hbox2.Add(self.gbox1, 1, wx.ALL|wx.EXPAND,10)
                self.hbox2.Add(self.gbox2, 1, wx.ALL|wx.EXPAND,10)
            elif(self.paneltype == 'HORIZONTAL'):
                self.vbox2.Add(self.gbox1, 1, wx.ALL|wx.EXPAND,10)
                self.vbox2.Add(self.gbox2, 1, wx.ALL|wx.EXPAND,10)
            else:
                pass
        
        elif(self.panelnos == '1'):
            for i in range(12):
                self.butList1[i].SetSize(wx.Size(self.bwsize,self.bhsize))
                self.gbox1.Add(self.butList1[i],0,wx.ALL|wx.EXPAND)
            if(self.paneltype == 'VERTICAL'):
                self.hbox2.Add(self.gbox1, 1, wx.ALL|wx.EXPAND,10)
            elif(self.paneltype == 'HORIZONTAL'):
                self.vbox2.Add(self.gbox1, 1, wx.ALL|wx.EXPAND,10)
            pass
        
        if(self.paneltype == 'VERTICAL'):
            self.panel2.SetSizerAndFit(self.hbox2,True)  
        elif(self.paneltype == 'HORIZONTAL'):
            self.panel2.SetSizerAndFit(self.vbox2,True)  
        else:
            pass

        #self.vbox.Add(self.panel2, 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, 9)

        self.panel2.Layout()
        self.panel.Layout()
        self.panel2.SendSizeEvent()
        self.panel2.Refresh()
        self.Refresh()

    def OnButtonClick(self,event):
        id = event.GetId()
        if(id == 0):
            self.paneltype = 'HORIZONTAL'
            self.panelnos = '1'
            self.makechoicepanel2()
        if(id == 1):
            self.paneltype = 'HORIZONTAL'
            self.panelnos = '2'
            self.makechoicepanel2()
        if(id == 2):
            self.paneltype = 'HORIZONTAL'
            self.panelnos = '3'
            self.makechoicepanel2()
        if(id == 3):
            self.paneltype = 'VERTICAL'
            self.panelnos = '1'
            self.makechoicepanel2()
        if(id == 4):
            self.paneltype = 'VERTICAL'
            self.panelnos = '2'
            self.makechoicepanel2()
        if(id == 5):
            self.paneltype = 'VERTICAL'
            self.panelnos = '3'
            self.makechoicepanel2()

        self.panel2.Refresh()
        self.Refresh()
        
#---------------------------------------------------------------------------


app = wx.PySimpleApp()
frame = TestFrame()
frame.Show()
app.MainLoop()