import wx
import os
import sys
try:
dirName = os.path.dirname(os.path.abspath(__file__))
except:
dirName = os.path.dirname(os.path.abspath(sys.argv[0]))
sys.path.append(os.path.split(dirName)[0])
try:
from agw import fourwaysplitter
except ImportError: # if it's not there locally, try the wxPython lib.
import wx.lib.agw.fourwaysplitter as FWS
import images
#----------------------------------------------------------------------
class SamplePane(wx.Panel):
"""
Just a simple test window to put into the splitter.
"""
def __init__(self, parent, colour, label):
wx.Panel.__init__(self, parent, style=wx.BORDER_SUNKEN)
self.SetBackgroundColour(colour)
wx.StaticText(self, -1, label, (5,5))
def SetOtherLabel(self, label):
wx.StaticText(self, -1, label, (5, 30))
class ControlPane(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
luCheck = wx.CheckBox(self, -1, "Live Update")
luCheck.SetValue(True)
self.Bind(wx.EVT_CHECKBOX, self.OnSetLiveUpdate, luCheck)
btn1 = wx.Button(self, -1, "Swap 2 && 4")
self.Bind(wx.EVT_BUTTON, self.OnSwapButton24, btn1)
btn2 = wx.Button(self, -1, "Swap 1 && 3")
self.Bind(wx.EVT_BUTTON, self.OnSwapButton13, btn2)
static = wx.StaticText(self, -1, "Expand A Window")
combo = wx.ComboBox(self, -1, choices=["None", "1", "2", "3", "4"],
style=wx.CB_READONLY|wx.CB_DROPDOWN)
combo.SetStringSelection("None")
self.Bind(wx.EVT_COMBOBOX, self.OnExpandWindow)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(luCheck, 0, wx.TOP, 5)
sizer.Add(btn1, 0, wx.TOP, 5)
sizer.Add(btn2, 0, wx.TOP, 5)
sizer.Add(static, 0, wx.TOP, 10)
sizer.Add(combo, 0, wx.EXPAND|wx.RIGHT|wx.TOP, 2)
border = wx.BoxSizer()
border.Add(sizer, 1, wx.EXPAND|wx.ALL, 5)
self.SetSizer(border)
def OnSetLiveUpdate(self, evt):
check = evt.GetEventObject()
self.GetParent().SetLiveUpdate(check.GetValue())
def OnSwapButton24(self, evt):
self.GetParent().Swap2and4()
def OnSwapButton13(self, evt):
self.GetParent().Swap1and3()
def OnExpandWindow(self, event):
self.GetParent().ExpandWindow(event.GetSelection())
class FWSPanel(wx.Panel):
def __init__(self, parent, log):
wx.Panel.__init__(self, parent, -1)
self.log = log
cp = ControlPane(self)
splitter = FWS.FourWaySplitter(self, agwStyle=wx.SP_LIVE_UPDATE)
self.splitter = splitter
self.log = log
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(cp)
sizer.Add(splitter, 1, wx.EXPAND)
self.SetSizer(sizer)
p1 = SamplePane(splitter, "pink", "Panel One")
p1.SetOtherLabel(
"There are three ways\n"
"to drag sashes. Try\n"
"dragging the horizontal\n"
"sash, the vertical sash\n"
"or position the mouse at\n"
"the intersection of the\n"
"two sashes."
)
splitter.AppendWindow(p1)
p2 = SamplePane(splitter, "sky blue", "Panel Two")
p2.SetOtherLabel("Hello From wxPython!")
p2.SetMinSize(p2.GetBestSize())
splitter.AppendWindow(p2)
p3 = SamplePane(splitter, "yellow", "Panel Three")
splitter.AppendWindow(p3)
p4 = SamplePane(splitter, "Lime Green", "Panel Four")
splitter.AppendWindow(p4)
self.log.write("Welcome to the FourWaySplitterDemo!\n")
self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, self.OnChanged)
self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGING, self.OnChanging)
def GetSashIdx(self, event):
if event.GetSashIdx() == wx.HORIZONTAL:
idx = "Horizontal"
elif event.GetSashIdx() == wx.VERTICAL:
idx = "Vertical"
else:
idx = "Horizontal & Vertical"
return idx
def OnChanging(self, event):
idx = self.GetSashIdx(event)
self.log.write("Changing sash: %s %s\n" %(idx, event.GetSashPosition()))
# This is one way to control the sash limits
#if event.GetSashPosition().x < 50:
# event.Veto()
event.Skip()
def OnChanged(self, event):
idx = self.GetSashIdx(event)
self.log.write("Changed sash: %s %s\n" %(idx, event.GetSashPosition()))
event.Skip()
def SetLiveUpdate(self, enable):
if enable:
self.splitter.SetAGWWindowStyleFlag(wx.SP_LIVE_UPDATE)
else:
self.splitter.SetAGWWindowStyleFlag(0)
def Swap2and4(self):
win2 = self.splitter.GetWindow(1)
win4 = self.splitter.GetWindow(3)
self.splitter.ExchangeWindows(win2, win4)
def Swap1and3(self):
win1 = self.splitter.GetWindow(0)
win3 = self.splitter.GetWindow(2)
self.splitter.ExchangeWindows(win1, win3)
def ExpandWindow(self, selection):
self.splitter.SetExpanded(selection-1)
class FourWaySplitterDemo(wx.Frame):
def __init__(self, parent, log, id=wx.ID_ANY, title="FourWaySplitter Demo",
size=(700, 500)):
wx.Frame.__init__(self, parent, id, title, size=size)
self.log = log
panel = FWSPanel(self, log)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(panel, 1, wx.EXPAND)
self.SetSizer(sizer)
sizer.Layout()
statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
statusbar.SetStatusWidths([-2, -1])
# statusbar fields
statusbar_fields = [("FourWaySplitter wxPython Demo, Andrea Gavana @ 03 Nov 2006"),
("Welcome To wxPython!")]
for i in range(len(statusbar_fields)):
statusbar.SetStatusText(statusbar_fields[i], i)
self.CreateMenu()
self.SetIcon(images.Mondrian.GetIcon())
self.CenterOnScreen()
def CreateMenu(self):
menuBar = wx.MenuBar(wx.MB_DOCKABLE)
fileMenu = wx.Menu()
helpMenu = wx.Menu()
item = wx.MenuItem(fileMenu, wx.ID_ANY, "E&xit")
self.Bind(wx.EVT_MENU, self.OnQuit, item)
fileMenu.AppendItem(item)
item = wx.MenuItem(helpMenu, wx.ID_ANY, "About")
self.Bind(wx.EVT_MENU, self.OnAbout, item)
helpMenu.AppendItem(item)
menuBar.Append(fileMenu, "&File")
menuBar.Append(helpMenu, "&Help")
self.SetMenuBar(menuBar)
def OnQuit(self, event):
self.Destroy()
def OnAbout(self, event):
msg = "This Is The About Dialog Of The FourWaySplitter Demo.\n\n" + \
"Author: Andrea Gavana @ 03 Nov 2006\n\n" + \
"Please Report Any Bug/Requests Of Improvements\n" + \
"To Me At The Following Adresses:\n\n" + \
"andrea.gavana@gmail.com\n" + "gavana@kpo.kz\n\n" + \
"Welcome To wxPython " + wx.VERSION_STRING + "!!"
dlg = wx.MessageDialog(self, msg, "FourWaySplitter wxPython Demo",
wx.OK | wx.ICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()
#---------------------------------------------------------------------------
class TestPanel(wx.Panel):
def __init__(self, parent, log):
self.log = log
wx.Panel.__init__(self, parent, -1)
b = wx.Button(self, -1, " Test FourWaySplitter ", (50,50))
self.Bind(wx.EVT_BUTTON, self.OnButton, b)
def OnButton(self, evt):
self.win = FourWaySplitterDemo(self, self.log)
self.win.Show(True)
#----------------------------------------------------------------------
def runTest(frame, nb, log):
win = TestPanel(nb, log)
return win
#----------------------------------------------------------------------
overview = FWS.__doc__
if __name__ == '__main__':
import sys,os
import run
run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
|