[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.9, Thu Aug 7 19:14:27 2003 UTC revision 1.29, Tue Jun 29 16:12:19 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.RecoElem import RecoElem  from FaST.SeedDataFactory    import SeedDataFactory
6  from RecoElempanel import RecoElemWindow  from FaST.SeedDataFactory    import SeedOrganism
7    from KahOM.RecoElem           import RecoElem
8    from PyGUI.RecoElempanel           import RecoElempanel
9    from CatalogServices.Catalog import Catalog
10    
11  class CatalogWindow:  
12    class Catalogpanel:
13      #------------------------------------------------------------------------      #------------------------------------------------------------------------
14      def __init__(self, parent):      def __init__(self, parent):
15      #------------------------------------------------------------------------      #------------------------------------------------------------------------
16          self.parent = parent          self.parent = parent
17    
18          self.to_re = parent.re          self.to_re = parent.re
19          self.selected = None       #remember last selected catalog entry          self.selected = None       #remember last selected catalog entry
20                                     #..is used when LOAD button is hit.                                     #..is used when LOAD button is hit.
21    
22            # seedItemId is the wxPython id for the "Seed" node
23            # in the catalog tree under which all specific Seed servers
24            # are listed
25    
26            self.seedItemId        = None
27    
28          self.initCatEvents()          self.initCatEvents()
29          self.initCatData()          self.initCatData()
30    
31    
32            # setup catalog editing menu (right click)
33    
34            self.catEditMenu         = wxMenu()
35            self.catEditMkItemId     = wxNewId()
36            self.catEditMkDirId      = wxNewId()
37            self.setupCatEditMenu()
38    
39          return          return
40    
41    
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)
49    
50            # Right click on List item for Seed will let you connect to
51            # another Seed server
52    
53            EVT_RIGHT_DOWN(self.parent.catalog_tree, self.onRightClickCatalogTree)
54    
55    
56            EVT_LEFT_DCLICK (self.parent.catalog_tree, self.onLeftDClick)
57    
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")  
   
         bssItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,  
                                                    "BioSimScratch" )  
         witItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,  
                                                    "WIT3" )  
67    
68          self.loadBssCatalog( bssItemId )          self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
69          self.loadWitCatalog( witItemId )          self.loadCatalog()
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 setupCatEditMenu(self):
76        #------------------------------------------------------------------
77    
78            self.catEditMenu.Append( self.catEditMkDirId,
79                                     "New Directory", "NewDirectory" )
80            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 = ["blue.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( seedFactory )
101                Catalog.instance().addDataFactory( b )
102            except:
103                self.parent.error("loadCatalog: error" )
104                wxEndBusyCursor()
105                return
106    
107            ##
108            # Handle top/root of catalog/tree specially to avoid "two root"
109            # on display problem
110            ##
111    
112            top = Catalog.instance().getCatalogTop()
113            parentTree = self.parent.catalog_tree
114            parentTree.SetPyData( self.parent.catalogRootId,
115                                  (self.recoElemLoader, top, self.parent.catalogRootId) )
116    
117            for e in top.entries():
118                self.recurseCatalog( e, parentTree, self.parent.catalogRootId)
119    
120            parentTree.SortChildren( self.parent.catalogRootId)
121    
122            wxEndBusyCursor()
123    
124          return          return
125    
126      #------------------------------------------------------------------------      #------------------------------------------------------------------------
127      def loadWitCatalog(self, witItemId):      def recurseCatalog( self, catEntry, parentTree, parentItemId):
128      #------------------------------------------------------------------------      #------------------------------------------------------------------------
129          w=WitFactory()          """
130            Create a new item under parentItemId in wxTree, parentTree.  Associate
131            catEntry with it.  If catEntry has entries, recurse on them.
132            """
133    
134            if ( catEntry.isTerminal() ):
135                displayedName = catEntry.name()
136            else:
137                displayedName = catEntry.name() + "/"
138    
139            newItemId=parentTree.AppendItem(parentItemId, displayedName )
140    
141            # associate data needed to manipulate the catEntry
142    
143            parentTree.SetPyData( newItemId,
144                                  (self.recoElemLoader, catEntry, newItemId ) )
145    
146            if ( not catEntry.isTerminal() ):
147                for e in catEntry.entries():
148                    self.recurseCatalog( e, parentTree, newItemId)
149    
150            parentTree.SortChildren( newItemId )
151    
152            return
153    
154        #------------------------------------------------------------------------
155        def loadSeedCatalog(self, seedServer ):
156        #------------------------------------------------------------------------
157            """
158            This adds a Seed instance to the catalog.  It is called from the
159            MainMenuBar when Data->Add Seed Instance is called, for example.
160            """
161    
162            wxBeginBusyCursor()
163    
164            # The SeedDataFactory ctor is slow and actually reads a bunch of
165            # data from the server
166    
167          pwyItemId=self.parent.catalog_tree.AppendItem(witItemId, "Pathways" )          seedFactory   = SeedDataFactory( seedServer )
168    
169          pwyList = w.listPathways( )          # add it to the list in the catalog
170          for pwy in pwyList:          try:
171              id=self.parent.catalog_tree.AppendItem(pwyItemId, pwy)              Catalog.instance().addDataFactory( seedFactory )
172              self.parent.catalog_tree.SetPyData(id, (self.witPwyLoader,pwy) )          except:
173                self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
174          orgItemId=self.parent.catalog_tree.AppendItem(witItemId, "Organisms" )              wxEndBusyCursor()
175                return
176          orgList = w.listOrganisms( )  
177          for org in orgList:          top = seedFactory.getCatalogTop()
178              id=self.parent.catalog_tree.AppendItem(orgItemId, org)          self.recurseCatalog( top, self.parent.catalog_tree, self.parent.catalogRootId)
179              self.parent.catalog_tree.SetPyData(id, (self.witOrgLoader, org ))  
180            wxEndBusyCursor()
181    
182          return          return
183    
# Line 81  Line 185 
185      def onLeftClick(self,treeEvent):      def onLeftClick(self,treeEvent):
186      #------------------------------------------------------------------------      #------------------------------------------------------------------------
187          item = treeEvent.GetItem()          item = treeEvent.GetItem()
188    
189          catEntryTuple = self.parent.tree_ctr.GetPyData(item)          catEntryTuple = self.parent.tree_ctr.GetPyData(item)
190          if (catEntryTuple == None ):          if (catEntryTuple == None ):
191              return              return
192          self.selected = catEntryTuple          self.selected = catEntryTuple
193            catEntry   = catEntryTuple[1]
194    
195            ##
196            # update the history information display
197            ##
198    
199            theBox = self.parent.catVersionValueComboBox
200            theBox.Clear()
201    
202            if ( not catEntry.isTerminal() ):
203                self.parent.catPathValue.SetLabel( 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 onLoadBtnPress(self, event):      def onCatVersionValueComboBox(self, event):
230      #------------------------------------------------------------------------      #------------------------------------------------------------------------
231          if ( self.selected == None ):          """
232              print "No selection in onLoadBtnPress"          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        #------------------------------------------------------------------------
252        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
258    
259        #------------------------------------------------------------------------
260        def doCatEditMkDir( self, event ):
261        #------------------------------------------------------------------------
262            if (None == self.selected):
263                self.parent.error( "A selection is required first.")
264              return              return
265    
266          catEntryTuple = self.selected          catEntryTuple = self.selected
267          apply( catEntryTuple[0], [catEntryTuple[1]] )          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)
276    
277            if ( dlg.ShowModal() == wxID_OK):
278                theName = dlg.GetValue()
279                if ( theName=="" ): return
280                dlg.Destroy()
281            else:
282                #didn't get a kid name
283                dlg.Destroy()
284                return
285    
286            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 bssLoader( self, bssCatEntry ):      def doCatEditMkItem( self, event ):
302      #------------------------------------------------------------------------      #------------------------------------------------------------------------
303          wxBeginBusyCursor()          if (None == self.selected):
304          b=BssFactory()              self.parent.error( "A selection is required first.")
305          top= b.getRecoElemById( bssCatEntry[1] )              return
306          self.to_re.AddRecoElemTree(self.parent.rootId, top)  
307          wxEndBusyCursor()          catEntryTuple = self.selected
308            catEntry      = catEntryTuple[1]
309            treeItemId    = catEntryTuple[2]
310    
311            if (catEntry.isTerminal()):
312                self.parent.error("Items can not be added to items. Add to a directory.")
313                return
314    
315            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            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                parentTree.SortChildren( treeItemId )
335            except:
336                self.parent.error( "Operation refused." )
337    
338    
339            return
340    
341    
342        #------------------------------------------------------------------------
343        def onLeftDClick(self, event):
344        #------------------------------------------------------------------------
345            """ Double left-click means, "Load the currently selected item." """
346    
347            if ( self.selected == None ):
348                self.parent.error( "You must select a catalog entry before requesting load.")
349                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
356            apply( catEntryTuple[0], [catEntryTuple[1]] )
357    
358          return          return
359    
360      #------------------------------------------------------------------------      #------------------------------------------------------------------------
361      def witOrgLoader(self,  orgName ):      def recoElemLoader(self,  argList ):
362      #------------------------------------------------------------------------      #------------------------------------------------------------------------
363          wxBeginBusyCursor()          wxBeginBusyCursor()
364          w=WitFactory()  
365          top= w.getRxnByOrg( orgName )          (catalogEntry) = argList
366          self.to_re.AddRecoElemTree(self.parent.rootId, top)  
367            if (catalogEntry.isTerminal() ):
368                ver = self.parent.catVersionValueComboBox.GetValue()
369                if ( ver == "None" ):
370                    top = RecoElem( catalogEntry.name() )
371                else:
372                    top = catalogEntry.read( int( ver ) )
373    
374                self.to_re.addRecoElemTree(self.parent.rootId, top, catalogEntry)
375            else:
376                # current selection is directory. can't load that!
377                wxEndBusyCursor()
378                return
379    
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.9  
changed lines
  Added in v.1.29

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3