[Bio] / PyGUI / Catalogpanel.py Repository:
ViewVC logotype

Annotation of /PyGUI/Catalogpanel.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.26 - (view) (download) (as text)

1 : efrank 1.24 from wxPython.wx import *
2 :     from FaST.BssFactory import BssFactory
3 :     from FaST.WitFactory import WitFactory
4 :     from FaST.SeedDataFactory import SeedDataFactory
5 :     from FaST.SeedDataFactory import SeedOrganism
6 :     from FaST.RecoElem import RecoElem
7 :     from RecoElempanel import RecoElempanel
8 :     from CatalogServices.Catalog import Catalog
9 : efrank 1.12
10 :    
11 : hwang 1.21 class Catalogpanel:
12 : efrank 1.10 # def __init__(self, parent):
13 :     # def initCatEvents(self ):
14 :     # def initCatData( self ):
15 :     # def loadBssCatalog(self, bssItemId):
16 :     # def loadWitCatalog(self, witItemId):
17 : efrank 1.12 # def loadSeedCatalog(self, witItemId):
18 : efrank 1.10 # def onLeftClick(self,treeEvent):
19 :     # def onLoadBtnPress(self, event):
20 :     # def bssLoader( self, bssCatEntry ):
21 :     # def witOrgLoader(self, orgName ):
22 :     # def witPwyLoader(self, pwyName ):
23 :    
24 : efrank 1.4 #------------------------------------------------------------------------
25 : hwang 1.1 def __init__(self, parent):
26 : efrank 1.4 #------------------------------------------------------------------------
27 : efrank 1.13 self.parent = parent
28 :    
29 :     self.to_re = parent.re
30 : efrank 1.2 self.selected = None #remember last selected catalog entry
31 :     #..is used when LOAD button is hit.
32 : efrank 1.4
33 : efrank 1.14 # seedItemId is the wxPython id for the "Seed" node
34 :     # in the catalog tree under which all specific Seed servers
35 :     # are listed
36 :    
37 :     self.seedItemId = None
38 :    
39 : efrank 1.4 self.initCatEvents()
40 :     self.initCatData()
41 : efrank 1.14
42 :    
43 : efrank 1.25 # setup catalog editing menu (right click)
44 :    
45 :     self.catEditMenu = wxMenu()
46 :     self.catEditMkItemId = wxNewId()
47 :     self.catEditMkDirId = wxNewId()
48 :     self.setupCatEditMenu()
49 : efrank 1.14
50 : efrank 1.4 return
51 :    
52 :    
53 :     #------------------------------------------------------------------------
54 :     def initCatEvents(self ):
55 :     #------------------------------------------------------------------------
56 : hwang 1.22
57 : efrank 1.6 EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,
58 :     self.parent.catalog_treeId,
59 :     self.onLeftClick)
60 : efrank 1.14
61 :     # Right click on List item for Seed will let you connect to
62 :     # another Seed server
63 :    
64 :     EVT_RIGHT_DOWN(self.parent.catalog_tree, self.onRightClickCatalogTree)
65 :    
66 : hwang 1.20
67 : hwang 1.22 EVT_LEFT_DCLICK (self.parent.catalog_tree, self.onLeftDClick)
68 : efrank 1.6
69 : efrank 1.25 EVT_COMBOBOX(self.parent.catVersionValueComboBox,
70 :     self.parent.catVersionValueComboBox.GetId(),
71 :     self.onCatVersionValueComboBox)
72 :    
73 : efrank 1.4 return
74 :    
75 :     #------------------------------------------------------------------------
76 :     def initCatData( self ):
77 :     #------------------------------------------------------------------------
78 : efrank 1.25
79 : efrank 1.26 self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
80 : efrank 1.25 self.loadCatalog()
81 : efrank 1.13
82 : efrank 1.6 self.parent.catalog_tree.Expand( self.parent.catalogRootId)
83 : efrank 1.2 return
84 : efrank 1.4
85 : efrank 1.14 #------------------------------------------------------------------
86 : efrank 1.25 def setupCatEditMenu(self):
87 : efrank 1.14 #------------------------------------------------------------------
88 :    
89 : efrank 1.25 self.catEditMenu.Append( self.catEditMkDirId,
90 :     "New Directory", "NewDirectory" )
91 :     EVT_MENU(self.parent, self.catEditMkDirId, self.doCatEditMkDir)
92 :    
93 :     self.catEditMenu.Append( self.catEditMkItemId,
94 :     "New Item", "NewDirectory" )
95 :     EVT_MENU(self.parent, self.catEditMkItemId, self.doCatEditMkItem)
96 :    
97 :     return
98 : efrank 1.14
99 : efrank 1.4 #------------------------------------------------------------------------
100 :     def loadBssCatalog(self, bssItemId):
101 :     #------------------------------------------------------------------------
102 : hwang 1.1 b=BssFactory()
103 : efrank 1.24 Catalog.instance().addDataFactory( b )
104 : efrank 1.4 for catEntryTuple in b.getLsCat():
105 :     id=self.parent.catalog_tree.AppendItem(bssItemId, catEntryTuple[0])
106 : efrank 1.25 self.parent.catalog_tree.SetPyData(id, (self.bssLoader, catEntryTuple, id) )
107 : efrank 1.4
108 :     return
109 : hwang 1.1
110 : efrank 1.4 #------------------------------------------------------------------------
111 :     def loadWitCatalog(self, witItemId):
112 :     #------------------------------------------------------------------------
113 :     w=WitFactory()
114 : efrank 1.24 Catalog.instance().addDataFactory( w )
115 : efrank 1.6 pwyItemId=self.parent.catalog_tree.AppendItem(witItemId, "Pathways" )
116 :    
117 : efrank 1.4 pwyList = w.listPathways( )
118 :     for pwy in pwyList:
119 : efrank 1.6 id=self.parent.catalog_tree.AppendItem(pwyItemId, pwy)
120 : efrank 1.25 self.parent.catalog_tree.SetPyData(id, (self.witPwyLoader,pwy, id) )
121 : efrank 1.6
122 :     orgItemId=self.parent.catalog_tree.AppendItem(witItemId, "Organisms" )
123 :    
124 :     orgList = w.listOrganisms( )
125 :     for org in orgList:
126 :     id=self.parent.catalog_tree.AppendItem(orgItemId, org)
127 : efrank 1.25 self.parent.catalog_tree.SetPyData(id, (self.witOrgLoader, org, id ))
128 : hwang 1.3
129 : efrank 1.4 return
130 : hwang 1.3
131 : efrank 1.4 #------------------------------------------------------------------------
132 : efrank 1.25 def loadCatalog(self):
133 :     #------------------------------------------------------------------------
134 :     wxBeginBusyCursor()
135 :    
136 : efrank 1.26 localSeedServer = "http://localhost/FIG"
137 : efrank 1.25 seedFactory = SeedDataFactory( localSeedServer )
138 :     b = BssFactory()
139 :    
140 :     try:
141 :     Catalog.instance().addDataFactory( seedFactory )
142 :     Catalog.instance().addDataFactory( b )
143 :     except:
144 :     self.parent.error("loadCatalog: error" )
145 :     wxEndBusyCursor()
146 :     return
147 :    
148 : efrank 1.26 ##
149 :     # Handle top/root of catalog/tree specially to avoid "two root"
150 :     # on display problem
151 :     ##
152 :    
153 : efrank 1.25 top = Catalog.instance().getCatalogTop()
154 : efrank 1.26 parentTree = self.parent.catalog_tree
155 :     parentTree.SetPyData( self.parent.catalogRootId,
156 :     (self.recoElemLoader, top, self.parent.catalogRootId) )
157 :    
158 :     for e in top.entries():
159 :     self.recurseCatalog( e, parentTree, self.parent.catalogRootId)
160 :    
161 :     parentTree.SortChildren( self.parent.catalogRootId)
162 : efrank 1.25
163 :     wxEndBusyCursor()
164 :    
165 :     return
166 :    
167 :     #------------------------------------------------------------------------
168 : efrank 1.26 def recurseCatalog( self, catEntry, parentTree, parentItemId):
169 :     #------------------------------------------------------------------------
170 :     """
171 :     Create a new item under parentItemId in wxTree, parentTree. Associate
172 :     catEntry with it. If catEntry has entries, recurse on them.
173 :     """
174 :    
175 :     if ( catEntry.isTerminal() ):
176 :     displayedName = catEntry.name()
177 :     else:
178 :     displayedName = catEntry.name() + "/"
179 :    
180 :     newItemId=parentTree.AppendItem(parentItemId, displayedName )
181 :    
182 :     # associate data needed to manipulate the catEntry
183 :    
184 :     parentTree.SetPyData( newItemId,
185 :     (self.recoElemLoader, catEntry, newItemId ) )
186 :    
187 :     if ( not catEntry.isTerminal() ):
188 :     for e in catEntry.entries():
189 :     self.recurseCatalog( e, parentTree, newItemId)
190 :    
191 :     parentTree.SortChildren( newItemId )
192 :    
193 :     return
194 :    
195 :     #------------------------------------------------------------------------
196 : efrank 1.14 def loadSeedCatalog(self, seedServer ):
197 : efrank 1.12 #------------------------------------------------------------------------
198 : efrank 1.14 wxBeginBusyCursor()
199 :    
200 : efrank 1.25 seedFactory = SeedDataFactory( seedServer )
201 :    
202 :     # add it to the list in the catalog
203 :     try:
204 :     Catalog.instance().addDataFactory( seedFactory )
205 :     except:
206 :     self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
207 :     wxEndBusyCursor()
208 :     return
209 :    
210 :     top = seedFactory.getCatalogTop()
211 :     self.recurseCatalog( top, self.parent.catalog_tree, self.parent.catalogRootId)
212 :    
213 :     wxEndBusyCursor()
214 :    
215 :     return
216 :    
217 :     #------------------------------------------------------------------------
218 :     def OLDloadSeedCatalog(self, seedServer ):
219 :     #------------------------------------------------------------------------
220 :     wxBeginBusyCursor()
221 :    
222 : efrank 1.14 # The SeedDataFactory ctor is slow and actually reads a bunch of
223 :     # data from the server
224 :    
225 :     seedFactory = SeedDataFactory( seedServer )
226 :    
227 : efrank 1.16 # add it to the list in the catalog
228 : efrank 1.19 try:
229 : efrank 1.24 Catalog.instance().addDataFactory( seedFactory )
230 : efrank 1.19 except:
231 :     self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
232 :     wxEndBusyCursor()
233 :     return
234 : efrank 1.16
235 : efrank 1.14 # make an entry in the tree for it
236 :     #
237 :     newSeedItemId=self.parent.catalog_tree.AppendItem(self.seedItemId, seedServer )
238 :    
239 :     # jam in the data
240 :     #
241 :     orgList = seedFactory.listOrganisms( )
242 : efrank 1.13 if ( orgList== None ):
243 : efrank 1.14 orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId,
244 :     "Could not get Org list from "+ seedServer )
245 : efrank 1.15 wxEndBusyCursor()
246 : efrank 1.13 return
247 :    
248 : efrank 1.17 itemName="Spontaneous Reactions"
249 :     spontaneousRxItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, itemName)
250 :     self.parent.catalog_tree.SetPyData(spontaneousRxItemId,
251 :     (self.seedRecoElemLoader,
252 : efrank 1.25 (seedFactory.getRecoElemSpontaneousRx, None),
253 :     spontaneousRxItemId ))
254 : efrank 1.17
255 :    
256 : efrank 1.14 orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, "Organisms" )
257 : efrank 1.12 for org in orgList:
258 :     id=self.parent.catalog_tree.AppendItem(orgItemId, org.figOrgName )
259 : efrank 1.17 self.parent.catalog_tree.SetPyData(id, (self.seedRecoElemLoader,
260 : efrank 1.25 (seedFactory.getRecoElemByOrg, org), id) )
261 : efrank 1.12
262 : efrank 1.16
263 : efrank 1.14 wxEndBusyCursor()
264 : efrank 1.12 return
265 :    
266 :     #------------------------------------------------------------------------
267 : efrank 1.6 def onLeftClick(self,treeEvent):
268 : efrank 1.4 #------------------------------------------------------------------------
269 : efrank 1.5 item = treeEvent.GetItem()
270 : hwang 1.11
271 : efrank 1.4 catEntryTuple = self.parent.tree_ctr.GetPyData(item)
272 : efrank 1.5 if (catEntryTuple == None ):
273 : efrank 1.25 print "None value for catEntryTuple"
274 : efrank 1.5 return
275 : efrank 1.6 self.selected = catEntryTuple
276 : efrank 1.25 catEntry = catEntryTuple[1]
277 : efrank 1.4
278 : efrank 1.25 ##
279 :     # update the history information display
280 :     ##
281 :    
282 :     theBox = self.parent.catVersionValueComboBox
283 :     theBox.Clear()
284 :    
285 :     if ( not catEntry.isTerminal() ):
286 : efrank 1.26 self.parent.catPathValue.SetLabel( catEntry.path() + "/" )
287 : efrank 1.25 self.parent.catVersionValueComboBox.SetLabel( "")
288 :     self.parent.catHistoryDateValue.SetLabel( "" )
289 :     self.parent.catHistoryUserValue.SetLabel( "" )
290 :     self.parent.catHistoryCreatedFromValue.SetLabel( "")
291 : efrank 1.26 theBox.SetValue( "" )
292 : efrank 1.25 else:
293 :     versions = catEntry.versions()
294 :     if ( [] == versions ):
295 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[None]" )
296 : efrank 1.26 theBox.SetValue( "None" )
297 : efrank 1.25 else:
298 : efrank 1.26 print "versions are ", versions
299 : efrank 1.25 maxVersion = max( versions )
300 :     for v in versions:
301 :     theBox.Append( "%s" % (v ) )
302 :     theBox.SetValue( "%s" % (maxVersion) )
303 :     self.parent.catPathValue.SetLabel(catEntry.path()+";[%s]" % (maxVersion))
304 :     #
305 :     self.parent.catHistoryDateValue.SetLabel( "no date info yet" )
306 :     self.parent.catHistoryUserValue.SetLabel( "no user info yet" )
307 :     self.parent.catHistoryCreatedFromValue.SetLabel( "no history info yet" )
308 :    
309 : efrank 1.4 return
310 : efrank 1.14
311 : efrank 1.25
312 :     #------------------------------------------------------------------------
313 :     def onCatVersionValueComboBox(self, event):
314 :     #------------------------------------------------------------------------
315 :     """
316 :     Handles activity in combo box where user sets Verion to use
317 :     """
318 :    
319 :     # get the value selected in the combo box.
320 :     choice = event.GetString()
321 : efrank 1.26 self.parent.catVersionValueComboBox.SetValue( "%s" % (choice) )
322 : efrank 1.25
323 :     # the operation is interpreted relative to the currently selected
324 :     # catalogEntry. find what that is.
325 :    
326 :     catEntry = self.selected[1]
327 :    
328 :     # update stuff
329 :     #version = self.parent.catVersionValueComboBox.GetValue()
330 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[%s]" % (choice) )
331 :    
332 :     return
333 :    
334 :    
335 : efrank 1.14 #------------------------------------------------------------------------
336 :     def onRightClickCatalogTree(self, event):
337 :     #------------------------------------------------------------------------
338 :    
339 :     goober = event.GetEventObject()
340 : efrank 1.25 goober.PopupMenu(self.catEditMenu, event.GetPosition())
341 : efrank 1.14
342 :     return
343 :    
344 :     #------------------------------------------------------------------------
345 : efrank 1.25 def doCatEditMkDir( self, event ):
346 :     #------------------------------------------------------------------------
347 :     if (None == self.selected):
348 :     self.parent.error( "A selection is required first.")
349 :     return
350 :    
351 :     catEntryTuple = self.selected
352 :     catEntry = catEntryTuple[1]
353 :     treeItemId = catEntryTuple[2]
354 :    
355 :     if (catEntry.isTerminal()):
356 :     self.parent.error("Directories can not be added to items.")
357 :     return
358 :    
359 :     prompt = "New catalog directory name:"
360 :     dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
361 :    
362 :     if ( dlg.ShowModal() == wxID_OK):
363 :     theName = dlg.GetValue()
364 :     if ( theName=="" ): return
365 :     dlg.Destroy()
366 :     else:
367 :     #didn't get a kid name
368 :     dlg.Destroy()
369 :     return
370 :    
371 :     try:
372 :     newCatEntry=catEntry.mkDir( theName )
373 :     parentTree=self.parent.catalog_tree
374 :     newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
375 :     parentTree.SetPyData( newItemId,
376 :     (self.recoElemLoader, newCatEntry, newItemId ) )
377 :    
378 :     parentTree.SortChildren( treeItemId )
379 :     except:
380 :     self.parent.error( "Operation refused." )
381 :    
382 :    
383 :     return
384 :    
385 :     #------------------------------------------------------------------------
386 :     def doCatEditMkItem( self, event ):
387 : efrank 1.14 #------------------------------------------------------------------------
388 : efrank 1.25 if (None == self.selected):
389 :     self.parent.error( "A selection is required first.")
390 :     return
391 :    
392 :     catEntryTuple = self.selected
393 :     catEntry = catEntryTuple[1]
394 :     treeItemId = catEntryTuple[2]
395 :    
396 :     if (catEntry.isTerminal()):
397 :     self.parent.error("Items can not be added to items. Add to a directory.")
398 :     return
399 :    
400 :     prompt = "New catalog entry name:"
401 : efrank 1.14 dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
402 :    
403 :     if ( dlg.ShowModal() == wxID_OK):
404 : efrank 1.25 theName = dlg.GetValue()
405 :     if ( theName=="" ): return
406 : efrank 1.14 dlg.Destroy()
407 :     else:
408 :     #didn't get a kid name
409 :     dlg.Destroy()
410 :     return
411 :    
412 : efrank 1.25 try:
413 :     newCatEntry = catEntry.mkItem( theName )
414 :     parentTree=self.parent.catalog_tree
415 :     newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
416 :     parentTree.SetPyData( newItemId,
417 :     (self.recoElemLoader, newCatEntry, newItemId ) )
418 :    
419 :     parentTree.SortChildren( treeItemId )
420 :     except:
421 :     self.parent.error( "Operation refused." )
422 :    
423 : efrank 1.14
424 :     return
425 :    
426 : efrank 1.4
427 :     #------------------------------------------------------------------------
428 : hwang 1.22 def onLeftDClick(self, event):
429 : efrank 1.4 #------------------------------------------------------------------------
430 : efrank 1.6 if ( self.selected == None ):
431 :     print "No selection in onLoadBtnPress"
432 :     return
433 :    
434 :     catEntryTuple = self.selected
435 :     apply( catEntryTuple[0], [catEntryTuple[1]] )
436 :    
437 :     return
438 :    
439 :     #------------------------------------------------------------------------
440 : efrank 1.25 def recoElemLoader(self, argList ):
441 :     #------------------------------------------------------------------------
442 :     wxBeginBusyCursor()
443 :    
444 :     (catalogEntry) = argList
445 :    
446 :     if (catalogEntry.isTerminal() ):
447 : efrank 1.26 ver = self.parent.catVersionValueComboBox.GetValue()
448 :     if ( ver == "None" ):
449 :     top = RecoElem( catalogEntry.name(), 1 )
450 :     else:
451 :     top = catalogEntry.read( int( ver ) )
452 :    
453 : efrank 1.25 self.to_re.AddRecoElemTree(self.parent.rootId, top, catalogEntry)
454 :     else:
455 :     # current selection is directory. can't load that!
456 :     wxEndBusyCursor()
457 :     return
458 :    
459 :    
460 :     wxEndBusyCursor()
461 :     return
462 :    
463 :     #------------------------------------------------------------------------
464 : efrank 1.6 def bssLoader( self, bssCatEntry ):
465 :     #------------------------------------------------------------------------
466 :     wxBeginBusyCursor()
467 :     b=BssFactory()
468 :     top= b.getRecoElemById( bssCatEntry[1] )
469 :     self.to_re.AddRecoElemTree(self.parent.rootId, top)
470 :     wxEndBusyCursor()
471 : hwang 1.1
472 : efrank 1.2 return
473 : hwang 1.1
474 : efrank 1.4 #------------------------------------------------------------------------
475 : efrank 1.6 def witOrgLoader(self, orgName ):
476 : efrank 1.4 #------------------------------------------------------------------------
477 : efrank 1.6 wxBeginBusyCursor()
478 :     w=WitFactory()
479 :     top= w.getRxnByOrg( orgName )
480 : efrank 1.12 self.to_re.AddRecoElemTree(self.parent.rootId, top)
481 :     wxEndBusyCursor()
482 :     return
483 :    
484 :     #------------------------------------------------------------------------
485 : efrank 1.17 def seedRecoElemLoader(self, argList ):
486 : efrank 1.12 #------------------------------------------------------------------------
487 :     wxBeginBusyCursor()
488 : efrank 1.13
489 : efrank 1.14 (theSeedFactoryMethod, org) = argList
490 :     top = apply( theSeedFactoryMethod, [org] )
491 :     # top=self.__seedDataFactory.getRecoElemByOrg( org )
492 : efrank 1.6 self.to_re.AddRecoElemTree(self.parent.rootId, top)
493 : efrank 1.14
494 : efrank 1.6 wxEndBusyCursor()
495 :     return
496 : efrank 1.4
497 : efrank 1.6 #------------------------------------------------------------------------
498 :     def witPwyLoader(self, pwyName ):
499 :     #------------------------------------------------------------------------
500 : efrank 1.2 wxBeginBusyCursor()
501 : efrank 1.6 w=WitFactory()
502 :     top= w.getRxnByPwy( pwyName )
503 : hwang 1.1 self.to_re.AddRecoElemTree(self.parent.rootId, top)
504 : efrank 1.2 wxEndBusyCursor()
505 :     return

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3