Package teamwork :: Package widgets :: Module imagebrowser
[hide private]
[frames] | no frames]

Source Code for Module teamwork.widgets.imagebrowser

  1  from Tkinter import * 
  2  import Pmw 
  3  import os 
  4  from images import getImage 
  5   
  6  global imageLabel, imageData 
  7  imageLabel = None 
  8  imageData  = None 
  9   
 10   
11 -class Node:
12 - def __init__(self, master, tree, icon=None, 13 openicon=None, name=None, action=None):
14 self.master, self.tree = master, tree 15 if icon: 16 self.icon = PhotoImage(file=icon) 17 else: 18 self.icon = None 19 if openicon: 20 self.openicon = PhotoImage(file=openicon) 21 else: 22 self.openicon = None 23 if self.icon: 24 self.width = max(self.icon.width(),25) 25 self.height = max(self.icon.height(),25) 26 else: 27 self.width = 25 28 self.height= 25 29 self.name = name 30 self.var = StringVar() 31 self.var.set(name) 32 ## self.text = Label(tree.interior(), textvariable=self.var, 33 ## background=tree['canvas_bg'], bd=0, #width=len(name)+2, 34 ## font=tree['font'], fg=tree['textcolor'], 35 ## highlightthickness=1, 36 ## highlightbackground=tree['canvas_bg'] ) 37 self.text = None 38 self.box = None 39 # insertwidth=1, selectbackground="#044484", selectborderwidth=0, 40 # selectforeground='white') 41 self.action = action 42 self.context = None 43 self.x = self.y = 0 #drawing location 44 self.child = [] 45 self.state = 'collapsed' 46 self.selected = False
47
48 - def addChild(self, tree, icon=None, openicon=None, name=None, action=None):
49 child = Node(self, tree, icon, openicon, name, action) 50 self.child.append(child) 51 self.tree.display() 52 return child
53
54 - def deleteChild(self, child):
55 self.child.remove(child) 56 self.tree.display()
57
58 - def textForget(self):
59 if self.text: 60 self.tree.delete(self.text) 61 for child in self.child: 62 child.textForget()
63
64 - def deselect(self):
65 self.selected = False 66 for child in self.child: 67 child.deselect()
68
69 - def boxpress(self, event=None):
70 if self.state == 'expanded': 71 self.state = 'collapsed' 72 elif self.state == 'collapsed': 73 self.state = 'expanded' 74 self.tree.display()
75
76 - def invoke(self, event=None):
77 if not self.selected: 78 self.tree.deselectall() 79 self.selected = True 80 self.tree.display() 81 if self.action: 82 self.action(self.name,event)
83 # self.name = self.text.get() 84 # self.text.config(width=len(self.name)+2) 85
86 - def displayIconText(self):
87 tree, text = self.tree, self.text 88 if self.selected and self.openicon: 89 self.pic = tree.create_image(self.x, self.y, image=self.openicon) 90 x = self.x+self.width/2 91 elif self.icon: 92 self.pic = tree.create_image(self.x, self.y, image=self.icon) 93 x = self.x+self.width/2 94 else: 95 self.pic = None 96 x = self.x 97 if self.context or self.action: 98 font = tree['font'][:2]+('bold',) 99 else: 100 font = tree['font'] 101 text = self.text = tree.create_text(x,self.y,anchor='w', 102 text=self.var.get(),font=font) 103 # Text highlight for selected node (dp 06/09/05) 104 if self.selected: 105 palette = Pmw.Color.getdefaultpalette(self.tree.component('hull')) 106 bbox = tree.bbox(text) 107 self.box = tree.create_rectangle(bbox, 108 fill=palette['selectBackground']) 109 tree.interior().lower(self.box) 110 tree.itemconfigure(text,fill=palette['selectForeground']) 111 else: 112 if self.box: 113 tree.delete(self.box) 114 self.box = None 115 tree.itemconfigure(text,fill=tree['textcolor']) 116 tree.tag_bind(text,"<ButtonPress-1>", self.invoke) 117 if self.context: 118 tree.tag_bind(text,"<ButtonPress-3>",self.context) 119 if self.pic: 120 tree.tag_bind(self.pic, "<ButtonPress-1>", self.invoke, "+") 121 tree.tag_bind(text,"<Double-Button-1>", self.boxpress) 122 if self.pic: 123 tree.tag_bind(self.pic, "<Double-Button-1>", self.boxpress, "+")
124
125 - def displayRoot(self,debug=False):
126 if self.state == 'expanded': 127 for child in self.child: 128 child.display(debug) 129 self.displayIconText()
130
131 - def displayLeaf(self,debug=False):
132 if debug: 133 print self.var.get(),self.x,self.y 134 self.tree.hline(self.y, self.master.x+1, self.x) 135 self.tree.vline(self.master.x, self.master.y, self.y) 136 self.displayIconText()
137
138 - def displayBranch(self,debug=False):
139 master, tree = self.master, self.tree 140 x, y = self.x, self.y 141 tree.hline(y, master.x, x) 142 tree.vline(master.x, master.y, y) 143 font = ('Helvetica',32,'bold') 144 if self.state == 'expanded' and self.child != []: 145 for child in self.child: 146 child.display(debug) 147 box = tree.create_text(master.x,y,text='-',font=font) 148 elif self.state == 'collapsed' and self.child != []: 149 box = tree.create_text(master.x,y,text='+',font=font) 150 tree.tag_bind(box, "<ButtonPress-1>", self.boxpress, "+") 151 self.displayIconText()
152
153 - def findLowestChild(self, node):
154 if node.state == 'expanded' and node.child != []: 155 return self.findLowestChild(node.child[-1]) 156 else: 157 return node
158
159 - def display(self,debug=False):
160 if debug: 161 print self.var.get(),self.x,self.y 162 master, tree = self.master, self.tree 163 n = master.child.index(self) 164 self.x = master.x + self.width 165 if n == 0: 166 self.y = master.y + (n+1)*self.height 167 else: 168 previous = master.child[n-1] 169 self.y = self.findLowestChild(previous).y + self.height 170 if debug: 171 print self.var.get(),self.x,self.y 172 if master == tree: 173 self.displayRoot(debug) 174 elif master.state == 'expanded': 175 if self.child == []: 176 self.displayLeaf(debug) 177 else: 178 self.displayBranch(debug) 179 tree.interior().lower('line')
180
181 -class Tree(Pmw.ScrolledCanvas):
182 - def __init__(self, master, **kw):
183 palette = Pmw.Color.getdefaultpalette(master) 184 optiondefs = ( 185 ('icon', None, None), 186 ('openicon',None,None), 187 ('action',None,None), 188 ('treename', 'Tree', None), 189 ('font', ('MS Sans Serif', 8), None), 190 ('linecolor', palette['foreground'], None), 191 ('textcolor', palette['foreground'], None), 192 ) 193 self.defineoptions(kw, optiondefs) 194 Pmw.ScrolledCanvas.__init__(self, master,**kw) 195 self.master = master 196 try: 197 self.plusnode = PhotoImage(file=getImage('plusnode.gif')) 198 self.minusnode = PhotoImage(file=getImage('minusnode.gif')) 199 except: 200 self.plusnode = None 201 self.minusnode = None 202 self.inhibitDraw = 1 203 self.child = [] 204 self.x = self.y = -10 205 self.child.append( Node( self, self, action=self['action'], 206 icon=self['icon'], openicon=self['openicon'], 207 name=self['treename']) ) 208 self.initialiseoptions()
209
210 - def display(self,debug=False):
211 if self.inhibitDraw: return 212 self.delete(ALL) 213 for child in self.child: 214 child.textForget() 215 child.display(debug) 216 self.resizescrollregion()
217
218 - def olddeselectall(self):
219 for child in self.child: 220 child.deselect()
221
222 - def deselectall(self):
223 for child in self.child: 224 child.deselect()
225
226 - def vline(self, x, y, y1):
227 for i in range(0, abs(y-y1), 2): 228 self.create_line(x, y+i, x, y+i+1, fill=self['linecolor'], tags='line')
229
230 - def hline(self, y, x, x1):
231 for i in range(0, abs(x-x1), 2): 232 self.create_line(x+i, y, x+i+1, y, fill=self['linecolor'], tags='line')
233 234
235 -def showMe(dofile):
236 global imageLabel, imageData 237 if imageData: del imageData 238 imageData = PhotoImage(file=getImage(dofile)) 239 imageLabel['image'] = imageData
240