X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ec873c943d71f0d5f13e3398557071448cda6c23..a4027e74873007e3430af3bd77019bcab76f6c04:/wxPython/samples/wxPIA_book/Chapter-18/customcomposite.py diff --git a/wxPython/samples/wxPIA_book/Chapter-18/customcomposite.py b/wxPython/samples/wxPIA_book/Chapter-18/customcomposite.py deleted file mode 100644 index c396322c5a..0000000000 --- a/wxPython/samples/wxPIA_book/Chapter-18/customcomposite.py +++ /dev/null @@ -1,152 +0,0 @@ -""" -This sample shows how to put multiple objects in the clipboard, one of -which uses a custom data format. In this case we use a Python -dictionary of values for our custom format, and we also put a textual -representation of the dictionary. To test this, run two instances of -this program, enter data in one and click the copy button. Then click -the paste button in the other instance. Also paste into a text editor -to see the data in the standard text format. -""" - - -import wx -import cPickle -import pprint - -class TestFrame(wx.Frame): - def __init__(self): - wx.Frame.__init__(self, None, -1, "Copy/Paste Test") - panel = wx.Panel(self) - - # First create the controls - topLbl = wx.StaticText(panel, -1, "Account Information") - topLbl.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD)) - - nameLbl = wx.StaticText(panel, -1, "Name:") - self.name = wx.TextCtrl(panel, -1, ""); - - addrLbl = wx.StaticText(panel, -1, "Address:") - self.addr1 = wx.TextCtrl(panel, -1, ""); - self.addr2 = wx.TextCtrl(panel, -1, ""); - - cstLbl = wx.StaticText(panel, -1, "City, State, Zip:") - self.city = wx.TextCtrl(panel, -1, "", size=(150,-1)); - self.state = wx.TextCtrl(panel, -1, "", size=(50,-1)); - self.zip = wx.TextCtrl(panel, -1, "", size=(70,-1)); - - phoneLbl = wx.StaticText(panel, -1, "Phone:") - self.phone = wx.TextCtrl(panel, -1, ""); - - emailLbl = wx.StaticText(panel, -1, "Email:") - self.email = wx.TextCtrl(panel, -1, ""); - - copyBtn = wx.Button(panel, -1, "Copy") - pasteBtn = wx.Button(panel, -1, "Paste") - self.Bind(wx.EVT_BUTTON, self.OnCopy, copyBtn) - self.Bind(wx.EVT_BUTTON, self.OnPaste, pasteBtn) - - # Now do the layout. - - # mainSizer is the top-level one that manages everything - mainSizer = wx.BoxSizer(wx.VERTICAL) - mainSizer.Add(topLbl, 0, wx.ALL, 5) - mainSizer.Add(wx.StaticLine(panel), 0, - wx.EXPAND|wx.TOP|wx.BOTTOM, 5) - - # addrSizer is a grid that holds all of the address info - addrSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5) - addrSizer.AddGrowableCol(1) - addrSizer.Add(nameLbl, 0, - wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) - addrSizer.Add(self.name, 0, wx.EXPAND) - addrSizer.Add(addrLbl, 0, - wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) - addrSizer.Add(self.addr1, 0, wx.EXPAND) - addrSizer.Add((10,10)) # some empty space - addrSizer.Add(self.addr2, 0, wx.EXPAND) - - addrSizer.Add(cstLbl, 0, - wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) - - # the city, state, zip fields are in a sub-sizer - cstSizer = wx.BoxSizer(wx.HORIZONTAL) - cstSizer.Add(self.city, 1) - cstSizer.Add(self.state, 0, wx.LEFT|wx.RIGHT, 5) - cstSizer.Add(self.zip) - addrSizer.Add(cstSizer, 0, wx.EXPAND) - - addrSizer.Add(phoneLbl, 0, - wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) - addrSizer.Add(self.phone, 0, wx.EXPAND) - addrSizer.Add(emailLbl, 0, - wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) - addrSizer.Add(self.email, 0, wx.EXPAND) - - # now add the addrSizer to the mainSizer - mainSizer.Add(addrSizer, 0, wx.EXPAND|wx.ALL, 10) - - # The buttons sizer will put them in a row with resizeable - # gaps between and on either side of the buttons - btnSizer = wx.BoxSizer(wx.HORIZONTAL) - btnSizer.Add((20,20), 1) - btnSizer.Add(copyBtn) - btnSizer.Add((20,20), 1) - btnSizer.Add(pasteBtn) - btnSizer.Add((20,20), 1) - - mainSizer.Add(btnSizer, 0, wx.EXPAND|wx.BOTTOM, 10) - - panel.SetSizer(mainSizer) - - # Fit the frame to the needs of the sizer. The frame will - # automatically resize the panel as needed. Also prevent the - # frame from getting smaller than this size. - mainSizer.Fit(self) - self.SetMinSize(self.GetSize()) - - - fieldNames = ["name", "addr1", "addr2", - "city", "state", "zip", "phone", "email"] - - def OnCopy(self, evt): - # make a dictionary of values - fieldData = {} - for name in self.fieldNames: - tc = getattr(self, name) - fieldData[name] = tc.GetValue() - - # pickle it and put in a custom data object - cdo = wx.CustomDataObject("ContactDictFormat") - cdo.SetData(cPickle.dumps(fieldData)) - - # also make a text representaion - tdo = wx.TextDataObject(pprint.pformat(fieldData)) - - # and put them both in the clipboard - dataobj = wx.DataObjectComposite() - dataobj.Add(cdo) - dataobj.Add(tdo) - if wx.TheClipboard.Open(): - wx.TheClipboard.SetData(dataobj) - wx.TheClipboard.Close() - - - def OnPaste(self, evt): - # Get the custom format object and put it into - # the entry fields - cdo = wx.CustomDataObject("ContactDictFormat") - if wx.TheClipboard.Open(): - success = wx.TheClipboard.GetData(cdo) - wx.TheClipboard.Close() - if success: - data = cdo.GetData() - fieldData = cPickle.loads(data) - for name in self.fieldNames: - tc = getattr(self, name) - tc.SetValue(fieldData[name]) - - - -app = wx.PySimpleApp() -TestFrame().Show() -app.MainLoop()