[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.18, Thu Nov 13 19:21:46 2003 UTC revision 1.32, Fri Jul 9 15:29:36 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.BssFactoryProxy    import BssFactoryProxy
4  from FaST.WitFactory import WitFactory  from FaST.WitFactory import WitFactory
5  from FaST.SeedDataFactory import SeedDataFactory  from FaST.SeedDataFactory import SeedDataFactory
6  from FaST.SeedDataFactory import SeedOrganism  from FaST.SeedDataFactory import SeedOrganism
7  from FaST.RecoElem import RecoElem  from KahOM.RecoElem           import RecoElem
8  from RecoElempanel import RecoElemWindow  from PyGUI.RecoElempanel           import RecoElempanel
9    from CatalogServices.Catalog import Catalog
10    
11    
12    class Catalogpanel:
 class CatalogWindow:  
 #    def __init__(self, parent):  
 #    def initCatEvents(self ):  
 #    def initCatData( self ):  
 #    def loadBssCatalog(self, bssItemId):  
 #    def loadWitCatalog(self, witItemId):  
 #    def loadSeedCatalog(self, witItemId):  
 #    def onLeftClick(self,treeEvent):  
 #    def onLoadBtnPress(self, event):  
 #    def bssLoader( self, bssCatEntry ):  
 #    def witOrgLoader(self,  orgName ):  
 #    def witPwyLoader(self,  pwyName ):  
   
13      #------------------------------------------------------------------------      #------------------------------------------------------------------------
14      def __init__(self, parent):      def __init__(self, parent):
15      #------------------------------------------------------------------------      #------------------------------------------------------------------------
# Line 40  Line 29 
29          self.initCatData()          self.initCatData()
30    
31    
32          self.seedServerMenu = wxMenu()          # setup catalog editing menu (right click)
33          self.seedServerAddId = wxNewId()  
34          self.setupSeedServerMenu()          self.catEditMenu         = wxMenu()
35            self.catEditMkItemId     = wxNewId()
36            self.catEditMkDirId      = wxNewId()
37            self.setupCatEditMenu()
38    
39          return          return
40    
# Line 50  Line 42 
42      #------------------------------------------------------------------------      #------------------------------------------------------------------------
43      def initCatEvents(self ):      def initCatEvents(self ):
44      #------------------------------------------------------------------------      #------------------------------------------------------------------------
45          button1= self.parent.OK_button  
         EVT_BUTTON(self.parent, self.parent.loadbtn.GetId(),  
                    self.onLoadBtnPress)  
46          EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,          EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,
47                               self.parent.catalog_treeId,                               self.parent.catalog_treeId,
48                               self.onLeftClick)                               self.onLeftClick)
# Line 63  Line 53 
53          EVT_RIGHT_DOWN(self.parent.catalog_tree, self.onRightClickCatalogTree)          EVT_RIGHT_DOWN(self.parent.catalog_tree, self.onRightClickCatalogTree)
54    
55    
56          # doesn't work...          EVT_LEFT_DCLICK (self.parent.catalog_tree, self.onLeftDClick)
57          # EVT_LEFT_DCLICK (self.parent.catalog_tree, self.onLeftDClick)  
58            EVT_COMBOBOX(self.parent.catVersionValueComboBox,
59                         self.parent.catVersionValueComboBox.GetId(),
60                         self.onCatVersionValueComboBox)
61    
62          return          return
63    
64      #------------------------------------------------------------------------      #------------------------------------------------------------------------
65      def initCatData( self ):      def initCatData( self ):
66      #------------------------------------------------------------------------      #------------------------------------------------------------------------
         self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("Data Sources")  
67    
68          bssItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,          self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
69                                                     "BioSimScratch" )          self.loadCatalog()
         witItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,  
                                                    "WIT3" )  
         self.seedItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,  
                                                    "Seed" )  
   
         self.loadBssCatalog( bssItemId )  
         self.loadWitCatalog( witItemId )  
   
         localSeedServer        = "http://localhost/FIG/"  
 #        localSeedServer        = "http://float179.mcs.anl-external.org/FIG/"  
         self.loadSeedCatalog( localSeedServer)  
70    
71          self.parent.catalog_tree.Expand( self.parent.catalogRootId)          self.parent.catalog_tree.Expand( self.parent.catalogRootId)
72          return          return
73    
74      #------------------------------------------------------------------      #------------------------------------------------------------------
75      def setupSeedServerMenu(self):      def setupCatEditMenu(self):
76      #------------------------------------------------------------------      #------------------------------------------------------------------
         self.seedServerAddId = wxNewId()  
77    
78          self.seedServerMenu.Append( self.seedServerAddId,          self.catEditMenu.Append( self.catEditMkDirId,
79                                        "Add Seed Server", "New seed server arg3" )                                   "New Directory", "NewDirectory" )
80          EVT_MENU(self.parent, self.seedServerAddId, self.doSeedServerAdd)          EVT_MENU(self.parent, self.catEditMkDirId, self.doCatEditMkDir)
81    
82            self.catEditMenu.Append( self.catEditMkItemId,
83                                     "New Item", "NewDirectory" )
84            EVT_MENU(self.parent, self.catEditMkItemId, self.doCatEditMkItem)
85    
86            return
87    
88      #------------------------------------------------------------------------      #------------------------------------------------------------------------
89      def loadBssCatalog(self, bssItemId):      def loadCatalog(self):
90      #------------------------------------------------------------------------      #------------------------------------------------------------------------
91            wxBeginBusyCursor()
92    
93            #localSeedServer        = "http://localhost/FIG"
94            #seedFactory   = SeedDataFactory( localSeedServer )
95          b=BssFactory()          b=BssFactory()
96          for catEntryTuple in b.getLsCat():          #theConnectionInfo = ["terra.mcs.anl.gov", 3000]
97              id=self.parent.catalog_tree.AppendItem(bssItemId, catEntryTuple[0])          #b             = BssFactoryProxy(theConnectionInfo)
98              self.parent.catalog_tree.SetPyData(id, (self.bssLoader, catEntryTuple) )  
99            try:
100                Catalog.instance().addDataFactory( b )
101            except:
102                self.parent.error("LoadCatalog: no local Bss database." )
103                wxEndBusyCursor()
104                return
105    
106            ##
107            # Handle top/root of catalog/tree specially to avoid "two root"
108            # on display problem
109            ##
110    
111            top = Catalog.instance().getCatalogTop()
112            parentTree = self.parent.catalog_tree
113            parentTree.SetPyData( self.parent.catalogRootId,
114                                  (self.recoElemLoader, top, self.parent.catalogRootId) )
115    
116            for e in top.entries():
117                self.recurseCatalog( e, parentTree, self.parent.catalogRootId)
118    
119            parentTree.SortChildren( self.parent.catalogRootId)
120    
121            wxEndBusyCursor()
122    
123          return          return
124    
125      #------------------------------------------------------------------------      #------------------------------------------------------------------------
126      def loadWitCatalog(self, witItemId):      def recurseCatalog( self, catEntry, parentTree, parentItemId):
127      #------------------------------------------------------------------------      #------------------------------------------------------------------------
128          w=WitFactory()          """
129            Create a new item under parentItemId in wxTree, parentTree.  Associate
130            catEntry with it.  If catEntry has entries, recurse on them.
131            """
132    
133            if ( catEntry.isTerminal() ):
134                displayedName = catEntry.name()
135            else:
136                displayedName = catEntry.name() + "/"
137    
138          pwyItemId=self.parent.catalog_tree.AppendItem(witItemId, "Pathways" )          newItemId=parentTree.AppendItem(parentItemId, displayedName )
139    
140          pwyList = w.listPathways( )          # associate data needed to manipulate the catEntry
         for pwy in pwyList:  
             id=self.parent.catalog_tree.AppendItem(pwyItemId, pwy)  
             self.parent.catalog_tree.SetPyData(id, (self.witPwyLoader,pwy) )  
141    
142          orgItemId=self.parent.catalog_tree.AppendItem(witItemId, "Organisms" )          parentTree.SetPyData( newItemId,
143                                  (self.recoElemLoader, catEntry, newItemId ) )
144    
145          orgList = w.listOrganisms( )          if ( not catEntry.isTerminal() ):
146          for org in orgList:              for e in catEntry.entries():
147              id=self.parent.catalog_tree.AppendItem(orgItemId, org)                  self.recurseCatalog( e, parentTree, newItemId)
148              self.parent.catalog_tree.SetPyData(id, (self.witOrgLoader, org ))  
149            parentTree.SortChildren( newItemId )
150    
151          return          return
152    
153      #------------------------------------------------------------------------      #------------------------------------------------------------------------
154      def loadSeedCatalog(self, seedServer ):      def DOOMloadSeedCatalog(self, seedServer ):
155      #------------------------------------------------------------------------      #------------------------------------------------------------------------
156            """
157            This adds a Seed instance to the catalog.  It is called from the
158            MainMenuBar when Data->Add Seed Instance is called, for example.
159            """
160    
161          wxBeginBusyCursor()          wxBeginBusyCursor()
162    
163          # The SeedDataFactory ctor is slow and actually reads a bunch of          # The SeedDataFactory ctor is slow and actually reads a bunch of
# Line 141  Line 166 
166          seedFactory   = SeedDataFactory( seedServer )          seedFactory   = SeedDataFactory( seedServer )
167    
168          # add it to the list in the catalog          # add it to the list in the catalog
169          self.parent.factoryMgr.addFactory( seedServer, seedFactory )          try:
170                Catalog.instance().addDataFactory( seedFactory )
171          # make an entry in the tree for it          except:
172          #              self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
         newSeedItemId=self.parent.catalog_tree.AppendItem(self.seedItemId, seedServer )  
   
         # jam in the data  
         #  
         orgList = seedFactory.listOrganisms( )  
         if ( orgList== None ):  
             orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId,  
                          "Could not get Org list from "+ seedServer )  
173              wxEndBusyCursor()              wxEndBusyCursor()
174              return              return
175    
176          itemName="Spontaneous Reactions"          top = seedFactory.getCatalogTop()
177          spontaneousRxItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, itemName)          self.recurseCatalog( top, self.parent.catalog_tree, self.parent.catalogRootId)
         self.parent.catalog_tree.SetPyData(spontaneousRxItemId,  
                                            (self.seedRecoElemLoader,  
                                            (seedFactory.getRecoElemSpontaneousRx, None) ))  
   
   
         orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, "Organisms" )  
         for org in orgList:  
             id=self.parent.catalog_tree.AppendItem(orgItemId, org.figOrgName )  
             self.parent.catalog_tree.SetPyData(id, (self.seedRecoElemLoader,  
                                                    (seedFactory.getRecoElemByOrg, org) ))  
   
178    
179          wxEndBusyCursor()          wxEndBusyCursor()
180    
181          return          return
182    
183      #------------------------------------------------------------------------      #------------------------------------------------------------------------
# Line 182  Line 189 
189          if (catEntryTuple == None ):          if (catEntryTuple == None ):
190              return              return
191          self.selected = catEntryTuple          self.selected = catEntryTuple
192            catEntry   = catEntryTuple[1]
193    
194            ##
195            # update the history information display
196            ##
197    
198            theBox = self.parent.catVersionValueComboBox
199            theBox.Clear()
200    
201            if ( not catEntry.isTerminal() ):
202    
203                self.parent.catPathValue.SetValue( catEntry.path() + "/" )
204                self.parent.catVersionValueComboBox.SetLabel( "")
205                self.parent.catHistoryDateValue.SetLabel( "" )
206                self.parent.catHistoryUserValue.SetLabel( "" )
207                self.parent.catHistoryCreatedFromValue.SetLabel( "")
208                theBox.SetValue( "" )
209            else:
210                versions   = catEntry.versions()
211                if ( [] == versions ):
212                    self.parent.catPathValue.SetLabel( catEntry.path()+";[None]" )
213                    theBox.SetValue( "None" )
214                else:
215                    maxVersion = max( versions )
216                    for v in versions:
217                        theBox.Append( "%s" % (v ) )
218                        theBox.SetValue( "%s" % (maxVersion) )
219                    self.parent.catPathValue.SetLabel(catEntry.path()+";[%s]" % (maxVersion))
220                #
221                self.parent.catHistoryDateValue.SetLabel( "no date info yet" )
222                self.parent.catHistoryUserValue.SetLabel( "no user info yet" )
223                self.parent.catHistoryCreatedFromValue.SetLabel( "no history info yet" )
224    
225          return          return
226    
227    
228      #------------------------------------------------------------------------      #------------------------------------------------------------------------
229      def onRightClickCatalogTree(self, event):      def onCatVersionValueComboBox(self, event):
230      #------------------------------------------------------------------------      #------------------------------------------------------------------------
231            """
232            Handles activity in combo box where user sets Verion to use
233            """
234    
235            # get the value selected in the combo box.
236            choice = event.GetString()
237            self.parent.catVersionValueComboBox.SetValue( "%s" % (choice) )
238    
239            # the operation is interpreted relative to the currently selected
240            # catalogEntry.  find what that is.
241    
242            catEntry   = self.selected[1]
243    
244            # update stuff
245            #version = self.parent.catVersionValueComboBox.GetValue()
246            self.parent.catPathValue.SetLabel( catEntry.path()+";[%s]" % (choice) )
247    
248            return
249    
250    
251          goober = event.GetEventObject()      #------------------------------------------------------------------------
252          goober.PopupMenu(self.seedServerMenu, event.GetPosition())      def onRightClickCatalogTree(self, event):
253        #------------------------------------------------------------------------
254            """ Fires off the pop-up menu to handle right click events. """
255    
256            event.GetEventObject().PopupMenu(self.catEditMenu, event.GetPosition())
257          return          return
258    
259      #------------------------------------------------------------------------      #------------------------------------------------------------------------
260      def doSeedServerAdd(self, event):      def doCatEditMkDir( self, event ):
261      #------------------------------------------------------------------------      #------------------------------------------------------------------------
262          prompt = "Name of Seed server"          if (None == self.selected):
263                self.parent.error( "A selection is required first.")
264                return
265    
266            catEntryTuple = self.selected
267            catEntry      = catEntryTuple[1]
268            treeItemId    = catEntryTuple[2]
269    
270            if (catEntry.isTerminal()):
271                self.parent.error("Directories can not be added to items.")
272                return
273    
274            prompt = "New catalog directory name:"
275          dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)          dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
276    
277          if ( dlg.ShowModal() == wxID_OK):          if ( dlg.ShowModal() == wxID_OK):
278              serverName = dlg.GetValue()              theName = dlg.GetValue()
279              if ( serverName=="" ): return              if ( theName=="" ): return
280              dlg.Destroy()              dlg.Destroy()
281          else:          else:
282              #didn't get a kid name              #didn't get a kid name
283              dlg.Destroy()              dlg.Destroy()
284              return              return
285    
286          self.loadSeedCatalog( serverName )          try:
287                newCatEntry=catEntry.mkDir( theName )
288                parentTree=self.parent.catalog_tree
289                newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
290                parentTree.SetPyData( newItemId,
291                                      (self.recoElemLoader, newCatEntry, newItemId )  )
292    
293                parentTree.SortChildren( treeItemId )
294            except:
295                self.parent.error( "Operation refused." )
296    
297    
298          return          return
299    
300      #------------------------------------------------------------------------      #------------------------------------------------------------------------
301      def onLeftDClick(self,treeEvent):      def doCatEditMkItem( self, event ):
302      #------------------------------------------------------------------------      #------------------------------------------------------------------------
303          self.onLoadBtnPress(treeEvent)          if (None == self.selected):
304                self.parent.error( "A selection is required first.")
305                return
306    
307          pt = treeEvent.GetPosition()          catEntryTuple = self.selected
308          item = self.parent.tree_ctr.HitTest(pt)          catEntry      = catEntryTuple[1]
309          print item          treeItemId    = catEntryTuple[2]
310          catEntryTuple = self.parent.tree_ctr.GetPyData(item)  
311          apply(catEntryTuple[0], catEntryTuple[1])          if (catEntry.isTerminal()):
312                self.parent.error("Items can not be added to items. Add to a directory.")
313          return          return
314    
315          pt = treeEvent.GetPosition()          prompt = "New catalog entry name:"
316            dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
317    
318            if ( dlg.ShowModal() == wxID_OK):
319                theName = dlg.GetValue()
320                if ( theName=="" ): return
321                dlg.Destroy()
322            else:
323                #didn't get a kid name
324                dlg.Destroy()
325                return
326    
327          item = self.parent.tree_ctr.HitTest(pt)          try:
328                newCatEntry = catEntry.mkItem( theName )
329                parentTree=self.parent.catalog_tree
330                newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
331                parentTree.SetPyData( newItemId,
332                                      (self.recoElemLoader, newCatEntry, newItemId )  )
333    
334          print item              parentTree.SortChildren( treeItemId )
335          catEntryTuple = self.parent.tree_ctr.GetPyData(item)          except:
336          #print catEntryTuple, "catEntryTuple"              self.parent.error( "Operation refused." )
         #self.selected = catEntryTuple  
337    
         #catEntryTuple = self.selected  
         #apply(catEntryTuple[0], [catEntryTuple[1]])  
338    
339          return          return
340    
341    
342      #------------------------------------------------------------------------      #------------------------------------------------------------------------
343      def onLoadBtnPress(self, event):      def onLeftDClick(self, event):
344      #------------------------------------------------------------------------      #------------------------------------------------------------------------
345            """ Double left-click means, "Load the currently selected item." """
346    
347          if ( self.selected == None ):          if ( self.selected == None ):
348              print "No selection in onLoadBtnPress"              self.parent.error( "You must select a catalog entry before requesting load.")
349              return              return
350    
351            # We store a loader to actually load the selected item.  This dates
352            # back to a time before a single loader could handle all the various
353            # data factory kinds.
354    
355          catEntryTuple = self.selected          catEntryTuple = self.selected
356          apply( catEntryTuple[0], [catEntryTuple[1]] )          apply( catEntryTuple[0], [catEntryTuple[1]] )
357    
358          return          return
359    
360      #------------------------------------------------------------------------      #------------------------------------------------------------------------
361      def bssLoader( self, bssCatEntry ):      def recoElemLoader(self,  argList ):
362      #------------------------------------------------------------------------      #------------------------------------------------------------------------
363          wxBeginBusyCursor()          wxBeginBusyCursor()
         b=BssFactory()  
         top= b.getRecoElemById( bssCatEntry[1] )  
         self.to_re.AddRecoElemTree(self.parent.rootId, top)  
         wxEndBusyCursor()  
364    
365          return          (catalogEntry) = argList
366    
367      #------------------------------------------------------------------------          if (catalogEntry.isTerminal() ):
368      def witOrgLoader(self,  orgName ):              ver = self.parent.catVersionValueComboBox.GetValue()
369      #------------------------------------------------------------------------              if ( ver == "None" ):
370          wxBeginBusyCursor()                  top = RecoElem( catalogEntry.name() )
371          w=WitFactory()              else:
372          top= w.getRxnByOrg( orgName )                  top = catalogEntry.read( int( ver ) )
373          self.to_re.AddRecoElemTree(self.parent.rootId, top)  
374                self.to_re.addRecoElemTree(self.parent.rootId, top, catalogEntry)
375            else:
376                # current selection is directory. can't load that!
377          wxEndBusyCursor()          wxEndBusyCursor()
378          return          return
379    
     #------------------------------------------------------------------------  
     def seedRecoElemLoader(self,  argList ):  
     #------------------------------------------------------------------------  
         wxBeginBusyCursor()  
   
         (theSeedFactoryMethod, org) = argList  
         top = apply( theSeedFactoryMethod, [org] )  
         # top=self.__seedDataFactory.getRecoElemByOrg( org )  
         self.to_re.AddRecoElemTree(self.parent.rootId, top)  
380    
381          wxEndBusyCursor()          wxEndBusyCursor()
382          return          return
383    
384      #------------------------------------------------------------------------      #------------------------------------------------------------------------
385      def witPwyLoader(self,  pwyName ):      def DOOMwitPwyLoader(self,  pwyName ):
386      #------------------------------------------------------------------------      #------------------------------------------------------------------------
387          wxBeginBusyCursor()          wxBeginBusyCursor()
388          w=WitFactory()          w=WitFactory()
389          top= w.getRxnByPwy( pwyName )          top= w.getRxnByPwy( pwyName )
390          self.to_re.AddRecoElemTree(self.parent.rootId, top)          self.to_re.addRecoElemTree(self.parent.rootId, top)
391          wxEndBusyCursor()          wxEndBusyCursor()
392          return          return

Legend:
Removed from v.1.18  
changed lines
  Added in v.1.32

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3