Index: third_party/twisted_8_1/twisted/spread/ui/tktree.py |
diff --git a/third_party/twisted_8_1/twisted/spread/ui/tktree.py b/third_party/twisted_8_1/twisted/spread/ui/tktree.py |
deleted file mode 100644 |
index 1b34e0e4fbed29b89bd0bc0db9134343e82d5732..0000000000000000000000000000000000000000 |
--- a/third_party/twisted_8_1/twisted/spread/ui/tktree.py |
+++ /dev/null |
@@ -1,204 +0,0 @@ |
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories. |
-# See LICENSE for details. |
- |
-""" |
-What I want it to look like: |
- |
-+- One |
-| \- Two |
-| |- Three |
-| |- Four |
-| +- Five |
-| | \- Six |
-| |- Seven |
-+- Eight |
-| \- Nine |
-""" |
- |
-import os |
-from Tkinter import * |
- |
-class Node: |
- def __init__(self): |
- """ |
- Do whatever you want here. |
- """ |
- self.item=None |
- def getName(self): |
- """ |
- Return the name of this node in the tree. |
- """ |
- pass |
- def isExpandable(self): |
- """ |
- Return true if this node is expandable. |
- """ |
- return len(self.getSubNodes())>0 |
- def getSubNodes(self): |
- """ |
- Return the sub nodes of this node. |
- """ |
- return [] |
- def gotDoubleClick(self): |
- """ |
- Called when we are double clicked. |
- """ |
- pass |
- def updateMe(self): |
- """ |
- Call me when something about me changes, so that my representation |
- changes. |
- """ |
- if self.item: |
- self.item.update() |
- |
-class FileNode(Node): |
- def __init__(self,name): |
- Node.__init__(self) |
- self.name=name |
- def getName(self): |
- return os.path.basename(self.name) |
- def isExpandable(self): |
- return os.path.isdir(self.name) |
- def getSubNodes(self): |
- names=map(lambda x,n=self.name:os.path.join(n,x),os.listdir(self.name)) |
- return map(FileNode,names) |
- |
-class TreeItem: |
- def __init__(self,widget,parent,node): |
- self.widget=widget |
- self.node=node |
- node.item=self |
- if self.node.isExpandable(): |
- self.expand=0 |
- else: |
- self.expand=None |
- self.parent=parent |
- if parent: |
- self.level=self.parent.level+1 |
- else: |
- self.level=0 |
- self.first=0 # gets set in Tree.expand() |
- self.subitems=[] |
- def __del__(self): |
- del self.node |
- del self.widget |
- def __repr__(self): |
- return "<Item for Node %s at level %s>"%(self.node.getName(),self.level) |
- def render(self): |
- """ |
- Override in a subclass. |
- """ |
- raise NotImplementedError |
- def update(self): |
- self.widget.update(self) |
- |
-class ListboxTreeItem(TreeItem): |
- def render(self): |
- start=self.level*"| " |
- if self.expand==None and not self.first: |
- start=start+"|" |
- elif self.expand==0: |
- start=start+"L" |
- elif self.expand==1: |
- start=start+"+" |
- else: |
- start=start+"\\" |
- r=[start+"- "+self.node.getName()] |
- if self.expand: |
- for i in self.subitems: |
- r.extend(i.render()) |
- return r |
- |
-class ListboxTree: |
- def __init__(self,parent=None,**options): |
- self.box=apply(Listbox,[parent],options) |
- self.box.bind("<Double-1>",self.flip) |
- self.roots=[] |
- self.items=[] |
- def pack(self,*args,**kw): |
- """ |
- for packing. |
- """ |
- apply(self.box.pack,args,kw) |
- def grid(self,*args,**kw): |
- """ |
- for gridding. |
- """ |
- apply(self.box.grid,args,kw) |
- def yview(self,*args,**kw): |
- """ |
- for scrolling. |
- """ |
- apply(self.box.yview,args,kw) |
- def addRoot(self,node): |
- r=ListboxTreeItem(self,None,node) |
- self.roots.append(r) |
- self.items.append(r) |
- self.box.insert(END,r.render()[0]) |
- return r |
- def curselection(self): |
- c=self.box.curselection() |
- if not c: return |
- return self.items[int(c[0])] |
- def flip(self,*foo): |
- if not self.box.curselection(): return |
- item=self.items[int(self.box.curselection()[0])] |
- if item.expand==None: return |
- if not item.expand: |
- self.expand(item) |
- else: |
- self.close(item) |
- item.node.gotDoubleClick() |
- def expand(self,item): |
- if item.expand or item.expand==None: return |
- item.expand=1 |
- item.subitems=map(lambda x,i=item,s=self:ListboxTreeItem(s,i,x),item.node.getSubNodes()) |
- if item.subitems: |
- item.subitems[0].first=1 |
- i=self.items.index(item) |
- self.items,after=self.items[:i+1],self.items[i+1:] |
- self.items=self.items+item.subitems+after |
- c=self.items.index(item) |
- self.box.delete(c) |
- r=item.render() |
- for i in r: |
- self.box.insert(c,i) |
- c=c+1 |
- def close(self,item): |
- if not item.expand: return |
- item.expand=0 |
- length=len(item.subitems) |
- for i in item.subitems: |
- self.close(i) |
- c=self.items.index(item) |
- del self.items[c+1:c+1+length] |
- for i in range(length+1): |
- self.box.delete(c) |
- self.box.insert(c,item.render()[0]) |
- def remove(self,item): |
- if item.expand: |
- self.close(item) |
- c=self.items.index(item) |
- del self.items[c] |
- if item.parent: |
- item.parent.subitems.remove(item) |
- self.box.delete(c) |
- def update(self,item): |
- if item.expand==None: |
- c=self.items.index(item) |
- self.box.delete(c) |
- self.box.insert(c,item.render()[0]) |
- elif item.expand: |
- self.close(item) |
- self.expand(item) |
- |
-if __name__=="__main__": |
- tk=Tk() |
- s=Scrollbar() |
- t=ListboxTree(tk,yscrollcommand=s.set) |
- t.pack(side=LEFT,fill=BOTH) |
- s.config(command=t.yview) |
- s.pack(side=RIGHT,fill=Y) |
- t.addRoot(FileNode("C:/")) |
- #mainloop() |