#!/usr/bin/env python

from wxPython.wx import *

class testFrame(wxFrame):
  def __init__(self,parent):
    wxFrame.__init__(self,parent,-1,'Sizer Test',size=(380,240))

    self.panel1 = wxPanel(self,-1,size=(400,-1))
    panelSizer = wxBoxSizer(wxVERTICAL)
    
    self.testBox = wxStaticBox(self.panel1,-1,'Test',
                               style=wxSUNKEN_BORDER)
    self.testSizer = wxStaticBoxSizer(self.testBox,wxHORIZONTAL)
    self.label1 = wxStaticText(self.panel1,-1,'Short label',
                               style=wxSUNKEN_BORDER)
    self.testSizer.Add(self.label1,0,wxALL,10)
    self.label2 = wxStaticText(self.panel1,-1,'Short string')
    self.testSizer.Add(self.label2,0,wxALL,10)

    self.panel2 = wxPanel(self.panel1,-1,style=wxSUNKEN_BORDER)
    self.panel2Sizer = wxBoxSizer(wxHORIZONTAL)
    self.label3 = wxStaticText(self.panel2,-1,'Short label',
                               style=wxSUNKEN_BORDER)
    self.panel2Sizer.Add(self.label3,0,wxALL,10)
    self.label4 = wxStaticText(self.panel2,-1,'Short string')
    self.panel2Sizer.Add(self.label4,0,wxALL,10)

    self.panel2.SetAutoLayout(False)
    self.panel2.SetSizer(self.panel2Sizer)
    self.panel2Sizer.Fit(self.panel2)
    
    testButton = wxButton(self.panel1,-1,'  Change Label  ')
    panelSizer.Add(self.testSizer,0,wxALIGN_CENTER | wxALL,10)
    panelSizer.Add(self.panel2,0,wxALIGN_CENTER | wxALL,10)
    panelSizer.Add(testButton,0,wxALIGN_CENTER | wxALL,10)
    EVT_BUTTON(self.panel1,testButton.GetId(),self.changeText)

    self.panel1.SetAutoLayout(TRUE)
    self.panel1.SetSizer(panelSizer)
    panelSizer.Fit(self.panel1)

  def changeText(self,evt):
    self.label2.SetLabel('This is a longer string')
    # none of the following adjusts the sizer to fit the labels
#    self.testSizer.Fit(self.testBox)
#    self.testSizer.SetSizeHints(self.testBox)
#    self.testSizer.SetMinSize((200,-1))
#    self.testBox.Refresh()
    
    self.label4.SetLabel('This is a longer string')
    # ditto the panel
#    self.panel2.Fit()
#    self.panel2.FitInside()
    
if __name__ == '__main__':
  app = wxPySimpleApp()
  frame = testFrame(None)
  frame.Show(true)
  app.MainLoop()
