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

Diff of /PyGUI/Catalogpanel.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2, Thu Jul 31 15:54:29 2003 UTC revision 1.25, Wed May 26 01:38:25 2004 UTC
# Line 1  Line 1 
1  from wxPython.wx import *  from wxPython.wx import *
2  from FaST.BssFactory import BssFactory  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  from FaST.RecoElem import RecoElem
7  from RecoElempanel import RecoElemWindow  from RecoElempanel           import RecoElempanel
8    from CatalogServices.Catalog import Catalog
9    
10  class CatalogWindow:  
11    class Catalogpanel:
12    #    def __init__(self, parent):
13    #    def initCatEvents(self ):
14    #    def initCatData( self ):
15    #    def loadBssCatalog(self, bssItemId):
16    #    def loadWitCatalog(self, witItemId):
17    #    def loadSeedCatalog(self, witItemId):
18    #    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        #------------------------------------------------------------------------
25      def __init__(self, parent):      def __init__(self, parent):
26        #------------------------------------------------------------------------
27          self.parent = parent          self.parent = parent
28    
29          self.to_re = parent.re          self.to_re = parent.re
30          self.selected = None       #remember last selected catalog entry          self.selected = None       #remember last selected catalog entry
31                                     #..is used when LOAD button is hit.                                     #..is used when LOAD button is hit.
32          button1= self.parent.OK_button  
33          EVT_BUTTON(self.parent, self.parent.loadbtn.GetId(),          # seedItemId is the wxPython id for the "Seed" node
34                     self.onLoadBtnPress)          # in the catalog tree under which all specific Seed servers
35            # are listed
36    
37            self.seedItemId        = None
38    
39            self.initCatEvents()
40            self.initCatData()
41    
42    
43            # setup catalog editing menu (right click)
44    
45            self.catEditMenu         = wxMenu()
46            self.catEditMkItemId     = wxNewId()
47            self.catEditMkDirId      = wxNewId()
48            self.setupCatEditMenu()
49    
50            return
51    
52    
53        #------------------------------------------------------------------------
54        def initCatEvents(self ):
55        #------------------------------------------------------------------------
56    
57            EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,
58                                 self.parent.catalog_treeId,
59                                 self.onLeftClick)
60    
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    
67            EVT_LEFT_DCLICK (self.parent.catalog_tree, self.onLeftDClick)
68    
69            EVT_COMBOBOX(self.parent.catVersionValueComboBox,
70                         self.parent.catVersionValueComboBox.GetId(),
71                         self.onCatVersionValueComboBox)
72    
73            return
74    
75        #------------------------------------------------------------------------
76        def initCatData( self ):
77        #------------------------------------------------------------------------
78            self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("Data Sources")
79    
80            #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    
87            #self.loadBssCatalog( bssItemId )
88            #self.loadWitCatalog( witItemId )
89    
90            localSeedServer        = "http://localhost/FIG/"
91    #        localSeedServer        = "http://float179.mcs.anl-external.org/FIG/"
92            #self.loadSeedCatalog( localSeedServer)
93    
94            self.loadCatalog()
95    
96    
97            self.parent.catalog_tree.Expand( self.parent.catalogRootId)
98            return
99    
100        #------------------------------------------------------------------
101        def setupCatEditMenu(self):
102        #------------------------------------------------------------------
103    
104            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    
114        #------------------------------------------------------------------------
115        def loadBssCatalog(self, bssItemId):
116        #------------------------------------------------------------------------
117            b=BssFactory()
118            Catalog.instance().addDataFactory( b )
119            for catEntryTuple in b.getLsCat():
120                id=self.parent.catalog_tree.AppendItem(bssItemId, catEntryTuple[0])
121                self.parent.catalog_tree.SetPyData(id, (self.bssLoader, catEntryTuple, id) )
122    
123            return
124    
125        #------------------------------------------------------------------------
126        def loadWitCatalog(self, witItemId):
127        #------------------------------------------------------------------------
128            w=WitFactory()
129            Catalog.instance().addDataFactory( w )
130            pwyItemId=self.parent.catalog_tree.AppendItem(witItemId, "Pathways" )
131    
132            pwyList = w.listPathways( )
133            for pwy in pwyList:
134                id=self.parent.catalog_tree.AppendItem(pwyItemId, pwy)
135                self.parent.catalog_tree.SetPyData(id, (self.witPwyLoader,pwy, id) )
136    
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                self.parent.catalog_tree.SetPyData(id, (self.witOrgLoader, org, id ))
143    
144          return          return
145    
146      def InitLsCat(self):      #------------------------------------------------------------------------
147        def loadCatalog(self):
148        #------------------------------------------------------------------------
149            wxBeginBusyCursor()
150    
151            localSeedServer        = "http://localhost/FIG/"
152            seedFactory   = SeedDataFactory( localSeedServer )
153          b=BssFactory()          b=BssFactory()
         cpanel_list = b.getLsCat()  
154    
155          for x in cpanel_list:          try:
156              self.parent.catalog_listbox.Append(x[0], x[1])              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    
         EVT_LISTBOX(self.parent, self.parent.catalog_listbox.GetId(), self.onLeftClick)  
168          return          return
169    
170      def onLeftClick(self,event):      #------------------------------------------------------------------------
171          pt=self.parent.catalog_listbox.GetSelection()      def loadSeedCatalog(self, seedServer ):
172          self.selected =int (self.parent.catalog_listbox.GetClientData(pt))      #------------------------------------------------------------------------
173            wxBeginBusyCursor()
174    
175            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          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      def onLoadBtnPress(self, event):          parentTree.SortChildren( newItemId )
215    
216            return
217    
218        #------------------------------------------------------------------------
219        def OLDloadSeedCatalog(self, seedServer ):
220        #------------------------------------------------------------------------
221            wxBeginBusyCursor()
222    
223            # The SeedDataFactory ctor is slow and actually reads a bunch of
224            # data from the server
225    
226            seedFactory   = SeedDataFactory( seedServer )
227    
228            # add it to the list in the catalog
229            try:
230                Catalog.instance().addDataFactory( seedFactory )
231            except:
232                self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
233                wxEndBusyCursor()
234                return
235    
236            # 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            if ( orgList== None ):
244                orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId,
245                             "Could not get Org list from "+ seedServer )
246                wxEndBusyCursor()
247                return
248    
249            itemName="Spontaneous Reactions"
250            spontaneousRxItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, itemName)
251            self.parent.catalog_tree.SetPyData(spontaneousRxItemId,
252                                               (self.seedRecoElemLoader,
253                                               (seedFactory.getRecoElemSpontaneousRx, None),
254                                                spontaneousRxItemId ))
255    
256    
257            orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, "Organisms" )
258            for org in orgList:
259                id=self.parent.catalog_tree.AppendItem(orgItemId, org.figOrgName )
260                self.parent.catalog_tree.SetPyData(id, (self.seedRecoElemLoader,
261                                                       (seedFactory.getRecoElemByOrg, org), id) )
262    
263    
264            wxEndBusyCursor()
265            return
266    
267        #------------------------------------------------------------------------
268        def onLeftClick(self,treeEvent):
269        #------------------------------------------------------------------------
270            item = treeEvent.GetItem()
271    
272            catEntryTuple = self.parent.tree_ctr.GetPyData(item)
273            if (catEntryTuple == None ):
274                print "None value for catEntryTuple"
275                return
276            self.selected = catEntryTuple
277            catEntry   = catEntryTuple[1]
278    
279            ##
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            return
308    
309    
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        #------------------------------------------------------------------------
333        def onRightClickCatalogTree(self, event):
334        #------------------------------------------------------------------------
335    
336            goober = event.GetEventObject()
337            goober.PopupMenu(self.catEditMenu, event.GetPosition())
338    
339            return
340    
341        #------------------------------------------------------------------------
342        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        #------------------------------------------------------------------------
385            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            dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
399    
400            if ( dlg.ShowModal() == wxID_OK):
401                theName = dlg.GetValue()
402                if ( theName=="" ): return
403                dlg.Destroy()
404            else:
405                #didn't get a kid name
406                dlg.Destroy()
407                return
408    
409            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    
421            return
422    
423    
424        #------------------------------------------------------------------------
425        def onLeftDClick(self, event):
426        #------------------------------------------------------------------------
427            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        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        def bssLoader( self, bssCatEntry ):
457        #------------------------------------------------------------------------
458          wxBeginBusyCursor()          wxBeginBusyCursor()
459          b=BssFactory()          b=BssFactory()
460          top= b.getRecoElemById( self.selected )          top= b.getRecoElemById( bssCatEntry[1] )
461            self.to_re.AddRecoElemTree(self.parent.rootId, top)
462            wxEndBusyCursor()
463    
464            return
465    
466        #------------------------------------------------------------------------
467        def witOrgLoader(self,  orgName ):
468        #------------------------------------------------------------------------
469            wxBeginBusyCursor()
470            w=WitFactory()
471            top= w.getRxnByOrg( orgName )
472            self.to_re.AddRecoElemTree(self.parent.rootId, top)
473            wxEndBusyCursor()
474            return
475    
476        #------------------------------------------------------------------------
477        def seedRecoElemLoader(self,  argList ):
478        #------------------------------------------------------------------------
479            wxBeginBusyCursor()
480    
481            (theSeedFactoryMethod, org) = argList
482            top = apply( theSeedFactoryMethod, [org] )
483            # top=self.__seedDataFactory.getRecoElemByOrg( org )
484          self.to_re.AddRecoElemTree(self.parent.rootId, top)          self.to_re.AddRecoElemTree(self.parent.rootId, top)
485    
486          wxEndBusyCursor()          wxEndBusyCursor()
487          return          return
488    
489        #------------------------------------------------------------------------
490        def witPwyLoader(self,  pwyName ):
491        #------------------------------------------------------------------------
492            wxBeginBusyCursor()
493            w=WitFactory()
494            top= w.getRxnByPwy( pwyName )
495            self.to_re.AddRecoElemTree(self.parent.rootId, top)
496            wxEndBusyCursor()
497            return

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.25

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3