[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.26, Wed Jun 9 22:36:10 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          return
51    
52      def InitLsCat(self):  
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    
79            self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
80            self.loadCatalog()
81    
82            self.parent.catalog_tree.Expand( self.parent.catalogRootId)
83            return
84    
85        #------------------------------------------------------------------
86        def setupCatEditMenu(self):
87        #------------------------------------------------------------------
88    
89            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    
99        #------------------------------------------------------------------------
100        def loadBssCatalog(self, bssItemId):
101        #------------------------------------------------------------------------
102            b=BssFactory()
103            Catalog.instance().addDataFactory( b )
104            for catEntryTuple in b.getLsCat():
105                id=self.parent.catalog_tree.AppendItem(bssItemId, catEntryTuple[0])
106                self.parent.catalog_tree.SetPyData(id, (self.bssLoader, catEntryTuple, id) )
107    
108            return
109    
110        #------------------------------------------------------------------------
111        def loadWitCatalog(self, witItemId):
112        #------------------------------------------------------------------------
113            w=WitFactory()
114            Catalog.instance().addDataFactory( w )
115            pwyItemId=self.parent.catalog_tree.AppendItem(witItemId, "Pathways" )
116    
117            pwyList = w.listPathways( )
118            for pwy in pwyList:
119                id=self.parent.catalog_tree.AppendItem(pwyItemId, pwy)
120                self.parent.catalog_tree.SetPyData(id, (self.witPwyLoader,pwy, id) )
121    
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                self.parent.catalog_tree.SetPyData(id, (self.witOrgLoader, org, id ))
128    
129            return
130    
131        #------------------------------------------------------------------------
132        def loadCatalog(self):
133        #------------------------------------------------------------------------
134            wxBeginBusyCursor()
135    
136            localSeedServer        = "http://localhost/FIG"
137            seedFactory   = SeedDataFactory( localSeedServer )
138          b=BssFactory()          b=BssFactory()
         cpanel_list = b.getLsCat()  
139    
140          for x in cpanel_list:          try:
141              self.parent.catalog_listbox.Append(x[0], x[1])              Catalog.instance().addDataFactory( seedFactory )
142                Catalog.instance().addDataFactory( b )
143            except:
144                self.parent.error("loadCatalog: error" )
145                wxEndBusyCursor()
146                return
147    
148            ##
149            # Handle top/root of catalog/tree specially to avoid "two root"
150            # on display problem
151            ##
152    
153            top = Catalog.instance().getCatalogTop()
154            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    
163            wxEndBusyCursor()
164    
165            return
166    
167        #------------------------------------------------------------------------
168        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        def loadSeedCatalog(self, seedServer ):
197        #------------------------------------------------------------------------
198            wxBeginBusyCursor()
199    
200            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            # The SeedDataFactory ctor is slow and actually reads a bunch of
223            # data from the server
224    
225            seedFactory   = SeedDataFactory( seedServer )
226    
227            # add it to the list in the catalog
228            try:
229                Catalog.instance().addDataFactory( seedFactory )
230            except:
231                self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
232                wxEndBusyCursor()
233                return
234    
235            # 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            if ( orgList== None ):
243                orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId,
244                             "Could not get Org list from "+ seedServer )
245                wxEndBusyCursor()
246                return
247    
248            itemName="Spontaneous Reactions"
249            spontaneousRxItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, itemName)
250            self.parent.catalog_tree.SetPyData(spontaneousRxItemId,
251                                               (self.seedRecoElemLoader,
252                                               (seedFactory.getRecoElemSpontaneousRx, None),
253                                                spontaneousRxItemId ))
254    
255          EVT_LISTBOX(self.parent, self.parent.catalog_listbox.GetId(), self.onLeftClick)  
256            orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, "Organisms" )
257            for org in orgList:
258                id=self.parent.catalog_tree.AppendItem(orgItemId, org.figOrgName )
259                self.parent.catalog_tree.SetPyData(id, (self.seedRecoElemLoader,
260                                                       (seedFactory.getRecoElemByOrg, org), id) )
261    
262    
263            wxEndBusyCursor()
264            return
265    
266        #------------------------------------------------------------------------
267        def onLeftClick(self,treeEvent):
268        #------------------------------------------------------------------------
269            item = treeEvent.GetItem()
270    
271            catEntryTuple = self.parent.tree_ctr.GetPyData(item)
272            if (catEntryTuple == None ):
273                print "None value for catEntryTuple"
274                return
275            self.selected = catEntryTuple
276            catEntry   = catEntryTuple[1]
277    
278            ##
279            # update the history information display
280            ##
281    
282            theBox = self.parent.catVersionValueComboBox
283            theBox.Clear()
284    
285            if ( not catEntry.isTerminal() ):
286                self.parent.catPathValue.SetLabel( catEntry.path() + "/" )
287                self.parent.catVersionValueComboBox.SetLabel( "")
288                self.parent.catHistoryDateValue.SetLabel( "" )
289                self.parent.catHistoryUserValue.SetLabel( "" )
290                self.parent.catHistoryCreatedFromValue.SetLabel( "")
291                theBox.SetValue( "" )
292            else:
293                versions   = catEntry.versions()
294                if ( [] == versions ):
295                    self.parent.catPathValue.SetLabel( catEntry.path()+";[None]" )
296                    theBox.SetValue( "None" )
297                else:
298                    print "versions are ", versions
299                    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            return
310    
311    
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            self.parent.catVersionValueComboBox.SetValue( "%s" % (choice) )
322    
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        #------------------------------------------------------------------------
336        def onRightClickCatalogTree(self, event):
337        #------------------------------------------------------------------------
338    
339            goober = event.GetEventObject()
340            goober.PopupMenu(self.catEditMenu, event.GetPosition())
341    
342            return
343    
344        #------------------------------------------------------------------------
345        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        #------------------------------------------------------------------------
388            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            dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
402    
403            if ( dlg.ShowModal() == wxID_OK):
404                theName = dlg.GetValue()
405                if ( theName=="" ): return
406                dlg.Destroy()
407            else:
408                #didn't get a kid name
409                dlg.Destroy()
410          return          return
411    
412      def onLeftClick(self,event):          try:
413          pt=self.parent.catalog_listbox.GetSelection()              newCatEntry = catEntry.mkItem( theName )
414          self.selected =int (self.parent.catalog_listbox.GetClientData(pt))              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    
424            return
425    
426    
427        #------------------------------------------------------------------------
428        def onLeftDClick(self, event):
429        #------------------------------------------------------------------------
430            if ( self.selected == None ):
431                print "No selection in onLoadBtnPress"
432          return          return
433    
434            catEntryTuple = self.selected
435            apply( catEntryTuple[0], [catEntryTuple[1]] )
436    
437      def onLoadBtnPress(self, event):          return
438    
439        #------------------------------------------------------------------------
440        def recoElemLoader(self,  argList ):
441        #------------------------------------------------------------------------
442            wxBeginBusyCursor()
443    
444            (catalogEntry) = argList
445    
446            if (catalogEntry.isTerminal() ):
447                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                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        def bssLoader( self, bssCatEntry ):
465        #------------------------------------------------------------------------
466          wxBeginBusyCursor()          wxBeginBusyCursor()
467          b=BssFactory()          b=BssFactory()
468          top= b.getRecoElemById( self.selected )          top= b.getRecoElemById( bssCatEntry[1] )
469            self.to_re.AddRecoElemTree(self.parent.rootId, top)
470            wxEndBusyCursor()
471    
472            return
473    
474        #------------------------------------------------------------------------
475        def witOrgLoader(self,  orgName ):
476        #------------------------------------------------------------------------
477            wxBeginBusyCursor()
478            w=WitFactory()
479            top= w.getRxnByOrg( orgName )
480            self.to_re.AddRecoElemTree(self.parent.rootId, top)
481            wxEndBusyCursor()
482            return
483    
484        #------------------------------------------------------------------------
485        def seedRecoElemLoader(self,  argList ):
486        #------------------------------------------------------------------------
487            wxBeginBusyCursor()
488    
489            (theSeedFactoryMethod, org) = argList
490            top = apply( theSeedFactoryMethod, [org] )
491            # top=self.__seedDataFactory.getRecoElemByOrg( org )
492          self.to_re.AddRecoElemTree(self.parent.rootId, top)          self.to_re.AddRecoElemTree(self.parent.rootId, top)
493    
494          wxEndBusyCursor()          wxEndBusyCursor()
495          return          return
496    
497        #------------------------------------------------------------------------
498        def witPwyLoader(self,  pwyName ):
499        #------------------------------------------------------------------------
500            wxBeginBusyCursor()
501            w=WitFactory()
502            top= w.getRxnByPwy( pwyName )
503            self.to_re.AddRecoElemTree(self.parent.rootId, top)
504            wxEndBusyCursor()
505            return

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3