[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.20, Fri Dec 19 15:46:52 2003 UTC revision 1.26, Wed Jun 9 22:36:10 2004 UTC
# Line 4  Line 4 
4  from FaST.SeedDataFactory import SeedDataFactory  from FaST.SeedDataFactory import SeedDataFactory
5  from FaST.SeedDataFactory import SeedOrganism  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    
11    class Catalogpanel:
 class CatalogWindow:  
12  #    def __init__(self, parent):  #    def __init__(self, parent):
13  #    def initCatEvents(self ):  #    def initCatEvents(self ):
14  #    def initCatData( self ):  #    def initCatData( self ):
# Line 40  Line 40 
40          self.initCatData()          self.initCatData()
41    
42    
43          self.seedServerMenu = wxMenu()          # setup catalog editing menu (right click)
44          self.seedServerAddId = wxNewId()  
45          self.setupSeedServerMenu()          self.catEditMenu         = wxMenu()
46            self.catEditMkItemId     = wxNewId()
47            self.catEditMkDirId      = wxNewId()
48            self.setupCatEditMenu()
49    
50          return          return
51    
# Line 50  Line 53 
53      #------------------------------------------------------------------------      #------------------------------------------------------------------------
54      def initCatEvents(self ):      def initCatEvents(self ):
55      #------------------------------------------------------------------------      #------------------------------------------------------------------------
56          button1= self.parent.OK_button  
         EVT_BUTTON(self.parent, self.parent.loadbtn.GetId(),  
                    self.onLoadBtnPress)  
57          EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,          EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,
58                               self.parent.catalog_treeId,                               self.parent.catalog_treeId,
59                               self.onLeftClick)                               self.onLeftClick)
# Line 63  Line 64 
64          EVT_RIGHT_DOWN(self.parent.catalog_tree, self.onRightClickCatalogTree)          EVT_RIGHT_DOWN(self.parent.catalog_tree, self.onRightClickCatalogTree)
65    
66    
67          EVT_LEFT_DCLICK (self.parent.catalog_tree, self.onLoadBtnPress)          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          return
74    
75      #------------------------------------------------------------------------      #------------------------------------------------------------------------
76      def initCatData( self ):      def initCatData( self ):
77      #------------------------------------------------------------------------      #------------------------------------------------------------------------
         self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("Data Sources")  
78    
79          bssItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,          self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
80                                                     "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)  
81    
82          self.parent.catalog_tree.Expand( self.parent.catalogRootId)          self.parent.catalog_tree.Expand( self.parent.catalogRootId)
83          return          return
84    
85      #------------------------------------------------------------------      #------------------------------------------------------------------
86      def setupSeedServerMenu(self):      def setupCatEditMenu(self):
87      #------------------------------------------------------------------      #------------------------------------------------------------------
         self.seedServerAddId = wxNewId()  
88    
89          self.seedServerMenu.Append( self.seedServerAddId,          self.catEditMenu.Append( self.catEditMkDirId,
90                                        "Add Seed Server", "New seed server arg3" )                                   "New Directory", "NewDirectory" )
91          EVT_MENU(self.parent, self.seedServerAddId, self.doSeedServerAdd)          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):      def loadBssCatalog(self, bssItemId):
101      #------------------------------------------------------------------------      #------------------------------------------------------------------------
102          b=BssFactory()          b=BssFactory()
103            Catalog.instance().addDataFactory( b )
104          for catEntryTuple in b.getLsCat():          for catEntryTuple in b.getLsCat():
105              id=self.parent.catalog_tree.AppendItem(bssItemId, catEntryTuple[0])              id=self.parent.catalog_tree.AppendItem(bssItemId, catEntryTuple[0])
106              self.parent.catalog_tree.SetPyData(id, (self.bssLoader, catEntryTuple) )              self.parent.catalog_tree.SetPyData(id, (self.bssLoader, catEntryTuple, id) )
107    
108          return          return
109    
# Line 112  Line 111 
111      def loadWitCatalog(self, witItemId):      def loadWitCatalog(self, witItemId):
112      #------------------------------------------------------------------------      #------------------------------------------------------------------------
113          w=WitFactory()          w=WitFactory()
114            Catalog.instance().addDataFactory( w )
115          pwyItemId=self.parent.catalog_tree.AppendItem(witItemId, "Pathways" )          pwyItemId=self.parent.catalog_tree.AppendItem(witItemId, "Pathways" )
116    
117          pwyList = w.listPathways( )          pwyList = w.listPathways( )
118          for pwy in pwyList:          for pwy in pwyList:
119              id=self.parent.catalog_tree.AppendItem(pwyItemId, pwy)              id=self.parent.catalog_tree.AppendItem(pwyItemId, pwy)
120              self.parent.catalog_tree.SetPyData(id, (self.witPwyLoader,pwy) )              self.parent.catalog_tree.SetPyData(id, (self.witPwyLoader,pwy, id) )
121    
122          orgItemId=self.parent.catalog_tree.AppendItem(witItemId, "Organisms" )          orgItemId=self.parent.catalog_tree.AppendItem(witItemId, "Organisms" )
123    
124          orgList = w.listOrganisms( )          orgList = w.listOrganisms( )
125          for org in orgList:          for org in orgList:
126              id=self.parent.catalog_tree.AppendItem(orgItemId, org)              id=self.parent.catalog_tree.AppendItem(orgItemId, org)
127              self.parent.catalog_tree.SetPyData(id, (self.witOrgLoader, org ))              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()
139    
140            try:
141                Catalog.instance().addDataFactory( seedFactory )
142                Catalog.instance().addDataFactory( b )
143            except:
144                self.parent.error("loadCatalog: error" )
145                wxEndBusyCursor()
146                return
147    
148            ##
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          return
194    
# Line 134  Line 197 
197      #------------------------------------------------------------------------      #------------------------------------------------------------------------
198          wxBeginBusyCursor()          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          # The SeedDataFactory ctor is slow and actually reads a bunch of
223          # data from the server          # data from the server
224    
# Line 141  Line 226 
226    
227          # add it to the list in the catalog          # add it to the list in the catalog
228          try:          try:
229              self.parent.factoryMgr.addFactory( seedServer, seedFactory )              Catalog.instance().addDataFactory( seedFactory )
230          except:          except:
231              self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)              self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
232              wxEndBusyCursor()              wxEndBusyCursor()
# Line 164  Line 249 
249          spontaneousRxItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, itemName)          spontaneousRxItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, itemName)
250          self.parent.catalog_tree.SetPyData(spontaneousRxItemId,          self.parent.catalog_tree.SetPyData(spontaneousRxItemId,
251                                             (self.seedRecoElemLoader,                                             (self.seedRecoElemLoader,
252                                             (seedFactory.getRecoElemSpontaneousRx, None) ))                                             (seedFactory.getRecoElemSpontaneousRx, None),
253                                                spontaneousRxItemId ))
254    
255    
256          orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, "Organisms" )          orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, "Organisms" )
257          for org in orgList:          for org in orgList:
258              id=self.parent.catalog_tree.AppendItem(orgItemId, org.figOrgName )              id=self.parent.catalog_tree.AppendItem(orgItemId, org.figOrgName )
259              self.parent.catalog_tree.SetPyData(id, (self.seedRecoElemLoader,              self.parent.catalog_tree.SetPyData(id, (self.seedRecoElemLoader,
260                                                     (seedFactory.getRecoElemByOrg, org) ))                                                     (seedFactory.getRecoElemByOrg, org), id) )
261    
262    
263          wxEndBusyCursor()          wxEndBusyCursor()
# Line 184  Line 270 
270    
271          catEntryTuple = self.parent.tree_ctr.GetPyData(item)          catEntryTuple = self.parent.tree_ctr.GetPyData(item)
272          if (catEntryTuple == None ):          if (catEntryTuple == None ):
273                print "None value for catEntryTuple"
274              return              return
275          self.selected = catEntryTuple          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          return
333    
334    
335      #------------------------------------------------------------------------      #------------------------------------------------------------------------
336      def onRightClickCatalogTree(self, event):      def onRightClickCatalogTree(self, event):
337      #------------------------------------------------------------------------      #------------------------------------------------------------------------
338    
339          goober = event.GetEventObject()          goober = event.GetEventObject()
340          goober.PopupMenu(self.seedServerMenu, event.GetPosition())          goober.PopupMenu(self.catEditMenu, event.GetPosition())
341    
342          return          return
343    
344      #------------------------------------------------------------------------      #------------------------------------------------------------------------
345      def doSeedServerAdd(self, event):      def doCatEditMkDir( self, event ):
346      #------------------------------------------------------------------------      #------------------------------------------------------------------------
347          prompt = "Name of Seed server"          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)          dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
361    
362          if ( dlg.ShowModal() == wxID_OK):          if ( dlg.ShowModal() == wxID_OK):
363              serverName = dlg.GetValue()              theName = dlg.GetValue()
364              if ( serverName=="" ): return              if ( theName=="" ): return
365              dlg.Destroy()              dlg.Destroy()
366          else:          else:
367              #didn't get a kid name              #didn't get a kid name
368              dlg.Destroy()              dlg.Destroy()
369              return              return
370    
371          self.loadSeedCatalog( serverName )          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          return
384    
385      #------------------------------------------------------------------------      #------------------------------------------------------------------------
386      def onLeftDClick(self,treeEvent):      def doCatEditMkItem( self, event ):
387      #------------------------------------------------------------------------      #------------------------------------------------------------------------
388          self.onLoadBtnPress(treeEvent)          if (None == self.selected):
389                self.parent.error( "A selection is required first.")
390                return
391    
392          pt = treeEvent.GetPosition()          catEntryTuple = self.selected
393          item = self.parent.tree_ctr.HitTest(pt)          catEntry      = catEntryTuple[1]
394          print item          treeItemId    = catEntryTuple[2]
395          catEntryTuple = self.parent.tree_ctr.GetPyData(item)  
396          apply(catEntryTuple[0], catEntryTuple[1])          if (catEntry.isTerminal()):
397                self.parent.error("Items can not be added to items. Add to a directory.")
398          return          return
399    
400          pt = treeEvent.GetPosition()          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
411    
412          item = self.parent.tree_ctr.HitTest(pt)          try:
413                newCatEntry = catEntry.mkItem( theName )
414                parentTree=self.parent.catalog_tree
415                newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
416                parentTree.SetPyData( newItemId,
417                                      (self.recoElemLoader, newCatEntry, newItemId )  )
418    
419          print item              parentTree.SortChildren( treeItemId )
420          catEntryTuple = self.parent.tree_ctr.GetPyData(item)          except:
421          #print catEntryTuple, "catEntryTuple"              self.parent.error( "Operation refused." )
         #self.selected = catEntryTuple  
422    
         #catEntryTuple = self.selected  
         #apply(catEntryTuple[0], [catEntryTuple[1]])  
423    
424          return          return
425    
426    
427      #------------------------------------------------------------------------      #------------------------------------------------------------------------
428      def onLoadBtnPress(self, event):      def onLeftDClick(self, event):
429      #------------------------------------------------------------------------      #------------------------------------------------------------------------
430          if ( self.selected == None ):          if ( self.selected == None ):
431              print "No selection in onLoadBtnPress"              print "No selection in onLoadBtnPress"
# Line 257  Line 437 
437          return          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 ):      def bssLoader( self, bssCatEntry ):
465      #------------------------------------------------------------------------      #------------------------------------------------------------------------
466          wxBeginBusyCursor()          wxBeginBusyCursor()

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3