]>
Commit | Line | Data |
---|---|---|
1 | ||
2 | import string, sys | |
3 | ||
4 | py2 = sys.version[0] == '2' | |
5 | ||
6 | from wxPython.wx import * | |
7 | try: | |
8 | if py2: | |
9 | from xml.parsers import expat | |
10 | parsermodule = expat | |
11 | else: | |
12 | from xml.parsers import pyexpat | |
13 | parsermodule = pyexpat | |
14 | haveXML = true | |
15 | except ImportError: | |
16 | haveXML = false | |
17 | ||
18 | #---------------------------------------------------------------------- | |
19 | ||
20 | if not haveXML: | |
21 | def runTest(frame, nb, log): | |
22 | dlg = wxMessageDialog(frame, 'This demo requires the XML package. ' | |
23 | 'See http://www.python.org/sigs/xml-sig/', | |
24 | 'Sorry', wxOK | wxICON_INFORMATION) | |
25 | dlg.ShowModal() | |
26 | dlg.Destroy() | |
27 | ||
28 | else: | |
29 | ||
30 | class XMLTree(wxTreeCtrl): | |
31 | def __init__(self, parent, ID): | |
32 | wxTreeCtrl.__init__(self, parent, ID) | |
33 | self.nodeStack = [self.AddRoot("Root")] | |
34 | ||
35 | # Trees need an image list to do DnD... | |
36 | self.il = wxImageList(16,16) | |
37 | self.SetImageList(self.il) | |
38 | ||
39 | # event handlers for DnD | |
40 | EVT_TREE_BEGIN_DRAG(self, ID, self.OnBeginDrag) | |
41 | EVT_TREE_END_DRAG(self, ID, self.OnEndDrag) | |
42 | ||
43 | ||
44 | def OnBeginDrag(self, event): | |
45 | item = event.GetItem() | |
46 | if item != self.GetRootItem(): | |
47 | self.draggingItem = item | |
48 | event.Allow() # if DnD of this item is okay Allow it. | |
49 | ||
50 | ||
51 | def OnEndDrag(self, evt): | |
52 | itemSrc = self.draggingItem | |
53 | itemDst = evt.GetItem() | |
54 | self.draggingItem = None | |
55 | ||
56 | if not itemDst.IsOk(): | |
57 | print "Can't drag to here..." | |
58 | return | |
59 | ||
60 | # For this simple example just take the text of the source item | |
61 | # and append it to the destination item. In real life you would | |
62 | # possibly want to copy subtrees... | |
63 | text = self.GetItemText(itemSrc) | |
64 | self.AppendItem(itemDst, text) | |
65 | self.Delete(itemSrc) | |
66 | ||
67 | ||
68 | # Define a handler for start element events | |
69 | def StartElement(self, name, attrs ): | |
70 | if py2: | |
71 | name = name.encode() | |
72 | id = self.AppendItem(self.nodeStack[-1], name) | |
73 | self.nodeStack.append(id) | |
74 | ||
75 | def EndElement(self, name ): | |
76 | self.nodeStack = self.nodeStack[:-1] | |
77 | ||
78 | def CharacterData(self, data ): | |
79 | if string.strip(data): | |
80 | if py2: | |
81 | data = data.encode() | |
82 | self.AppendItem(self.nodeStack[-1], data) | |
83 | ||
84 | ||
85 | def LoadTree(self, filename): | |
86 | # Create a parser | |
87 | Parser = parsermodule.ParserCreate() | |
88 | ||
89 | # Tell the parser what the start element handler is | |
90 | Parser.StartElementHandler = self.StartElement | |
91 | Parser.EndElementHandler = self.EndElement | |
92 | Parser.CharacterDataHandler = self.CharacterData | |
93 | ||
94 | # Parse the XML File | |
95 | ParserStatus = Parser.Parse(open(filename,'r').read(), 1) | |
96 | ||
97 | ||
98 | def runTest(frame, nb, log): | |
99 | win = XMLTree(nb, -1) | |
100 | win.LoadTree("paper.xml") | |
101 | return win | |
102 | ||
103 | #---------------------------------------------------------------------- | |
104 | ||
105 | ||
106 | ||
107 | ||
108 | ||
109 | ||
110 | overview = """\ | |
111 | """ | |
112 |