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

Annotation of /PyGUI/Catalogpanel.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.25 - (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.5 self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("Data Sources")
79 : hwang 1.1
80 : efrank 1.25 #bssItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,
81 :     # "BioSimScratch" )
82 :     #witItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,
83 :     # "WIT3" )
84 :     #self.seedItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,
85 :     # "Seed" )
86 : efrank 1.4
87 : efrank 1.25 #self.loadBssCatalog( bssItemId )
88 :     #self.loadWitCatalog( witItemId )
89 : efrank 1.6
90 : efrank 1.14 localSeedServer = "http://localhost/FIG/"
91 : efrank 1.18 # localSeedServer = "http://float179.mcs.anl-external.org/FIG/"
92 : efrank 1.25 #self.loadSeedCatalog( localSeedServer)
93 :    
94 :     self.loadCatalog()
95 :    
96 : efrank 1.13
97 : efrank 1.6 self.parent.catalog_tree.Expand( self.parent.catalogRootId)
98 : efrank 1.2 return
99 : efrank 1.4
100 : efrank 1.14 #------------------------------------------------------------------
101 : efrank 1.25 def setupCatEditMenu(self):
102 : efrank 1.14 #------------------------------------------------------------------
103 :    
104 : efrank 1.25 self.catEditMenu.Append( self.catEditMkDirId,
105 :     "New Directory", "NewDirectory" )
106 :     EVT_MENU(self.parent, self.catEditMkDirId, self.doCatEditMkDir)
107 :    
108 :     self.catEditMenu.Append( self.catEditMkItemId,
109 :     "New Item", "NewDirectory" )
110 :     EVT_MENU(self.parent, self.catEditMkItemId, self.doCatEditMkItem)
111 :    
112 :     return
113 : efrank 1.14
114 : efrank 1.4 #------------------------------------------------------------------------
115 :     def loadBssCatalog(self, bssItemId):
116 :     #------------------------------------------------------------------------
117 : hwang 1.1 b=BssFactory()
118 : efrank 1.24 Catalog.instance().addDataFactory( b )
119 : efrank 1.4 for catEntryTuple in b.getLsCat():
120 :     id=self.parent.catalog_tree.AppendItem(bssItemId, catEntryTuple[0])
121 : efrank 1.25 self.parent.catalog_tree.SetPyData(id, (self.bssLoader, catEntryTuple, id) )
122 : efrank 1.4
123 :     return
124 : hwang 1.1
125 : efrank 1.4 #------------------------------------------------------------------------
126 :     def loadWitCatalog(self, witItemId):
127 :     #------------------------------------------------------------------------
128 :     w=WitFactory()
129 : efrank 1.24 Catalog.instance().addDataFactory( w )
130 : efrank 1.6 pwyItemId=self.parent.catalog_tree.AppendItem(witItemId, "Pathways" )
131 :    
132 : efrank 1.4 pwyList = w.listPathways( )
133 :     for pwy in pwyList:
134 : efrank 1.6 id=self.parent.catalog_tree.AppendItem(pwyItemId, pwy)
135 : efrank 1.25 self.parent.catalog_tree.SetPyData(id, (self.witPwyLoader,pwy, id) )
136 : efrank 1.6
137 :     orgItemId=self.parent.catalog_tree.AppendItem(witItemId, "Organisms" )
138 :    
139 :     orgList = w.listOrganisms( )
140 :     for org in orgList:
141 :     id=self.parent.catalog_tree.AppendItem(orgItemId, org)
142 : efrank 1.25 self.parent.catalog_tree.SetPyData(id, (self.witOrgLoader, org, id ))
143 : hwang 1.3
144 : efrank 1.4 return
145 : hwang 1.3
146 : efrank 1.4 #------------------------------------------------------------------------
147 : efrank 1.25 def loadCatalog(self):
148 :     #------------------------------------------------------------------------
149 :     wxBeginBusyCursor()
150 :    
151 :     localSeedServer = "http://localhost/FIG/"
152 :     seedFactory = SeedDataFactory( localSeedServer )
153 :     b = BssFactory()
154 :    
155 :     try:
156 :     Catalog.instance().addDataFactory( seedFactory )
157 :     Catalog.instance().addDataFactory( b )
158 :     except:
159 :     self.parent.error("loadCatalog: error" )
160 :     wxEndBusyCursor()
161 :     return
162 :    
163 :     top = Catalog.instance().getCatalogTop()
164 :     self.recurseCatalog( top, self.parent.catalog_tree, self.parent.catalogRootId)
165 :    
166 :     wxEndBusyCursor()
167 :    
168 :     return
169 :    
170 :     #------------------------------------------------------------------------
171 : efrank 1.14 def loadSeedCatalog(self, seedServer ):
172 : efrank 1.12 #------------------------------------------------------------------------
173 : efrank 1.14 wxBeginBusyCursor()
174 :    
175 : efrank 1.25 seedFactory = SeedDataFactory( seedServer )
176 :    
177 :     # add it to the list in the catalog
178 :     try:
179 :     Catalog.instance().addDataFactory( seedFactory )
180 :     except:
181 :     self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
182 :     wxEndBusyCursor()
183 :     return
184 :    
185 :     top = seedFactory.getCatalogTop()
186 :     #self.recurseCatalog( top, self.parent.catalog_tree, self.seedItemId )
187 :     self.recurseCatalog( top, self.parent.catalog_tree, self.parent.catalogRootId)
188 :    
189 :     wxEndBusyCursor()
190 :    
191 :     return
192 :    
193 :     #------------------------------------------------------------------------
194 :     def recurseCatalog( self, catEntry, parentTree, parentItemId):
195 :     #------------------------------------------------------------------------
196 :     """
197 :     terminal nodes have FoundryItemKeys associated with them that we
198 :     can read if requested. associate that key and a handler with the
199 :     wxTree item in that case.
200 :     """
201 :    
202 :     newItemId=parentTree.AppendItem(parentItemId, catEntry.name() )
203 :    
204 :     parentTree.SetPyData( newItemId,
205 :     (self.recoElemLoader, catEntry, newItemId )
206 :     )
207 :    
208 :     if ( not catEntry.isTerminal() ):
209 :     for e in catEntry.entries():
210 :     self.recurseCatalog( e, parentTree, newItemId)
211 :    
212 :     # not efficient becaure of re-sort
213 :    
214 :     parentTree.SortChildren( newItemId )
215 :    
216 :     return
217 :    
218 :     #------------------------------------------------------------------------
219 :     def OLDloadSeedCatalog(self, seedServer ):
220 :     #------------------------------------------------------------------------
221 :     wxBeginBusyCursor()
222 :    
223 : efrank 1.14 # The SeedDataFactory ctor is slow and actually reads a bunch of
224 :     # data from the server
225 :    
226 :     seedFactory = SeedDataFactory( seedServer )
227 :    
228 : efrank 1.16 # add it to the list in the catalog
229 : efrank 1.19 try:
230 : efrank 1.24 Catalog.instance().addDataFactory( seedFactory )
231 : efrank 1.19 except:
232 :     self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
233 :     wxEndBusyCursor()
234 :     return
235 : efrank 1.16
236 : efrank 1.14 # make an entry in the tree for it
237 :     #
238 :     newSeedItemId=self.parent.catalog_tree.AppendItem(self.seedItemId, seedServer )
239 :    
240 :     # jam in the data
241 :     #
242 :     orgList = seedFactory.listOrganisms( )
243 : efrank 1.13 if ( orgList== None ):
244 : efrank 1.14 orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId,
245 :     "Could not get Org list from "+ seedServer )
246 : efrank 1.15 wxEndBusyCursor()
247 : efrank 1.13 return
248 :    
249 : efrank 1.17 itemName="Spontaneous Reactions"
250 :     spontaneousRxItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, itemName)
251 :     self.parent.catalog_tree.SetPyData(spontaneousRxItemId,
252 :     (self.seedRecoElemLoader,
253 : efrank 1.25 (seedFactory.getRecoElemSpontaneousRx, None),
254 :     spontaneousRxItemId ))
255 : efrank 1.17
256 :    
257 : efrank 1.14 orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, "Organisms" )
258 : efrank 1.12 for org in orgList:
259 :     id=self.parent.catalog_tree.AppendItem(orgItemId, org.figOrgName )
260 : efrank 1.17 self.parent.catalog_tree.SetPyData(id, (self.seedRecoElemLoader,
261 : efrank 1.25 (seedFactory.getRecoElemByOrg, org), id) )
262 : efrank 1.12
263 : efrank 1.16
264 : efrank 1.14 wxEndBusyCursor()
265 : efrank 1.12 return
266 :    
267 :     #------------------------------------------------------------------------
268 : efrank 1.6 def onLeftClick(self,treeEvent):
269 : efrank 1.4 #------------------------------------------------------------------------
270 : efrank 1.5 item = treeEvent.GetItem()
271 : hwang 1.11
272 : efrank 1.4 catEntryTuple = self.parent.tree_ctr.GetPyData(item)
273 : efrank 1.5 if (catEntryTuple == None ):
274 : efrank 1.25 print "None value for catEntryTuple"
275 : efrank 1.5 return
276 : efrank 1.6 self.selected = catEntryTuple
277 : efrank 1.25 catEntry = catEntryTuple[1]
278 : efrank 1.4
279 : efrank 1.25 ##
280 :     # update the history information display
281 :     ##
282 :    
283 :     theBox = self.parent.catVersionValueComboBox
284 :     theBox.Clear()
285 :    
286 :     if ( not catEntry.isTerminal() ):
287 :     self.parent.catPathValue.SetLabel( catEntry.path() )
288 :     self.parent.catVersionValueComboBox.SetLabel( "")
289 :     self.parent.catHistoryDateValue.SetLabel( "" )
290 :     self.parent.catHistoryUserValue.SetLabel( "" )
291 :     self.parent.catHistoryCreatedFromValue.SetLabel( "")
292 :     else:
293 :     versions = catEntry.versions()
294 :     if ( [] == versions ):
295 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[None]" )
296 :     else:
297 :     maxVersion = max( versions )
298 :     for v in versions:
299 :     theBox.Append( "%s" % (v ) )
300 :     theBox.SetValue( "%s" % (maxVersion) )
301 :     self.parent.catPathValue.SetLabel(catEntry.path()+";[%s]" % (maxVersion))
302 :     #
303 :     self.parent.catHistoryDateValue.SetLabel( "no date info yet" )
304 :     self.parent.catHistoryUserValue.SetLabel( "no user info yet" )
305 :     self.parent.catHistoryCreatedFromValue.SetLabel( "no history info yet" )
306 :    
307 : efrank 1.4 return
308 : efrank 1.14
309 : efrank 1.25
310 :     #------------------------------------------------------------------------
311 :     def onCatVersionValueComboBox(self, event):
312 :     #------------------------------------------------------------------------
313 :     """
314 :     Handles activity in combo box where user sets Verion to use
315 :     """
316 :    
317 :     # get the value selected in the combo box.
318 :     choice = event.GetString()
319 :    
320 :     # the operation is interpreted relative to the currently selected
321 :     # catalogEntry. find what that is.
322 :    
323 :     catEntry = self.selected[1]
324 :    
325 :     # update stuff
326 :     #version = self.parent.catVersionValueComboBox.GetValue()
327 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[%s]" % (choice) )
328 :    
329 :     return
330 :    
331 :    
332 : efrank 1.14 #------------------------------------------------------------------------
333 :     def onRightClickCatalogTree(self, event):
334 :     #------------------------------------------------------------------------
335 :    
336 :     goober = event.GetEventObject()
337 : efrank 1.25 goober.PopupMenu(self.catEditMenu, event.GetPosition())
338 : efrank 1.14
339 :     return
340 :    
341 :     #------------------------------------------------------------------------
342 : efrank 1.25 def doCatEditMkDir( self, event ):
343 :     #------------------------------------------------------------------------
344 :     if (None == self.selected):
345 :     self.parent.error( "A selection is required first.")
346 :     return
347 :    
348 :     catEntryTuple = self.selected
349 :     catEntry = catEntryTuple[1]
350 :     treeItemId = catEntryTuple[2]
351 :    
352 :     if (catEntry.isTerminal()):
353 :     self.parent.error("Directories can not be added to items.")
354 :     return
355 :    
356 :     prompt = "New catalog directory name:"
357 :     dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
358 :    
359 :     if ( dlg.ShowModal() == wxID_OK):
360 :     theName = dlg.GetValue()
361 :     if ( theName=="" ): return
362 :     dlg.Destroy()
363 :     else:
364 :     #didn't get a kid name
365 :     dlg.Destroy()
366 :     return
367 :    
368 :     try:
369 :     newCatEntry=catEntry.mkDir( theName )
370 :     parentTree=self.parent.catalog_tree
371 :     newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
372 :     parentTree.SetPyData( newItemId,
373 :     (self.recoElemLoader, newCatEntry, newItemId ) )
374 :    
375 :     parentTree.SortChildren( treeItemId )
376 :     except:
377 :     self.parent.error( "Operation refused." )
378 :    
379 :    
380 :     return
381 :    
382 :     #------------------------------------------------------------------------
383 :     def doCatEditMkItem( self, event ):
384 : efrank 1.14 #------------------------------------------------------------------------
385 : efrank 1.25 if (None == self.selected):
386 :     self.parent.error( "A selection is required first.")
387 :     return
388 :    
389 :     catEntryTuple = self.selected
390 :     catEntry = catEntryTuple[1]
391 :     treeItemId = catEntryTuple[2]
392 :    
393 :     if (catEntry.isTerminal()):
394 :     self.parent.error("Items can not be added to items. Add to a directory.")
395 :     return
396 :    
397 :     prompt = "New catalog entry name:"
398 : efrank 1.14 dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
399 :    
400 :     if ( dlg.ShowModal() == wxID_OK):
401 : efrank 1.25 theName = dlg.GetValue()
402 :     if ( theName=="" ): return
403 : efrank 1.14 dlg.Destroy()
404 :     else:
405 :     #didn't get a kid name
406 :     dlg.Destroy()
407 :     return
408 :    
409 : efrank 1.25 try:
410 :     newCatEntry = catEntry.mkItem( theName )
411 :     parentTree=self.parent.catalog_tree
412 :     newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
413 :     parentTree.SetPyData( newItemId,
414 :     (self.recoElemLoader, newCatEntry, newItemId ) )
415 :    
416 :     parentTree.SortChildren( treeItemId )
417 :     except:
418 :     self.parent.error( "Operation refused." )
419 :    
420 : efrank 1.14
421 :     return
422 :    
423 : efrank 1.4
424 :     #------------------------------------------------------------------------
425 : hwang 1.22 def onLeftDClick(self, event):
426 : efrank 1.4 #------------------------------------------------------------------------
427 : efrank 1.6 if ( self.selected == None ):
428 :     print "No selection in onLoadBtnPress"
429 :     return
430 :    
431 :     catEntryTuple = self.selected
432 :     apply( catEntryTuple[0], [catEntryTuple[1]] )
433 :    
434 :     return
435 :    
436 :     #------------------------------------------------------------------------
437 : efrank 1.25 def recoElemLoader(self, argList ):
438 :     #------------------------------------------------------------------------
439 :     wxBeginBusyCursor()
440 :    
441 :     (catalogEntry) = argList
442 :    
443 :     if (catalogEntry.isTerminal() ):
444 :     top = catalogEntry.getRecoElem()
445 :     self.to_re.AddRecoElemTree(self.parent.rootId, top, catalogEntry)
446 :     else:
447 :     # current selection is directory. can't load that!
448 :     wxEndBusyCursor()
449 :     return
450 :    
451 :    
452 :     wxEndBusyCursor()
453 :     return
454 :    
455 :     #------------------------------------------------------------------------
456 : efrank 1.6 def bssLoader( self, bssCatEntry ):
457 :     #------------------------------------------------------------------------
458 :     wxBeginBusyCursor()
459 :     b=BssFactory()
460 :     top= b.getRecoElemById( bssCatEntry[1] )
461 :     self.to_re.AddRecoElemTree(self.parent.rootId, top)
462 :     wxEndBusyCursor()
463 : hwang 1.1
464 : efrank 1.2 return
465 : hwang 1.1
466 : efrank 1.4 #------------------------------------------------------------------------
467 : efrank 1.6 def witOrgLoader(self, orgName ):
468 : efrank 1.4 #------------------------------------------------------------------------
469 : efrank 1.6 wxBeginBusyCursor()
470 :     w=WitFactory()
471 :     top= w.getRxnByOrg( orgName )
472 : efrank 1.12 self.to_re.AddRecoElemTree(self.parent.rootId, top)
473 :     wxEndBusyCursor()
474 :     return
475 :    
476 :     #------------------------------------------------------------------------
477 : efrank 1.17 def seedRecoElemLoader(self, argList ):
478 : efrank 1.12 #------------------------------------------------------------------------
479 :     wxBeginBusyCursor()
480 : efrank 1.13
481 : efrank 1.14 (theSeedFactoryMethod, org) = argList
482 :     top = apply( theSeedFactoryMethod, [org] )
483 :     # top=self.__seedDataFactory.getRecoElemByOrg( org )
484 : efrank 1.6 self.to_re.AddRecoElemTree(self.parent.rootId, top)
485 : efrank 1.14
486 : efrank 1.6 wxEndBusyCursor()
487 :     return
488 : efrank 1.4
489 : efrank 1.6 #------------------------------------------------------------------------
490 :     def witPwyLoader(self, pwyName ):
491 :     #------------------------------------------------------------------------
492 : efrank 1.2 wxBeginBusyCursor()
493 : efrank 1.6 w=WitFactory()
494 :     top= w.getRxnByPwy( pwyName )
495 : hwang 1.1 self.to_re.AddRecoElemTree(self.parent.rootId, top)
496 : efrank 1.2 wxEndBusyCursor()
497 :     return

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3