[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.33, Fri Jul 9 19:08:13 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")  
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.loadBssCatalog( bssItemId )  
         self.loadWitCatalog( witItemId )  
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          b=BssFactory()          wxBeginBusyCursor()
92          for catEntryTuple in b.getLsCat():  
93              id=self.parent.catalog_tree.AppendItem(bssItemId, catEntryTuple[0])          #localSeedServer        = "http://localhost/FIG"
94              self.parent.catalog_tree.SetPyData(id, (self.bssLoader, catEntryTuple) )          #seedFactory   = SeedDataFactory( localSeedServer )
95    
96            #b             = BssFactory()
97            #theConnectionInfo = ["terra.mcs.anl.gov", 3000]
98            #b             = BssFactoryProxy(theConnectionInfo)
99    
100            #try:
101            #   Catalog.instance().addDataFactory( b )
102            #else:
103            #except:
104            #    self.parent.error("LoadCatalog: no local Bss database." )
105            #    wxEndBusyCursor()
106            #    return
107    
108            ##
109            # Handle top/root of catalog/tree specially to avoid "two root"
110            # on display problem
111            ##
112    
113            top = Catalog.instance().getCatalogTop()
114            parentTree = self.parent.catalog_tree
115            parentTree.SetPyData( self.parent.catalogRootId,
116                                  (self.recoElemLoader, top, self.parent.catalogRootId) )
117    
118            for e in top.entries():
119                self.recurseCatalog( e, parentTree, self.parent.catalogRootId)
120    
121            parentTree.SortChildren( self.parent.catalogRootId)
122    
123            wxEndBusyCursor()
124    
125          return          return
126    
127      #------------------------------------------------------------------------      #------------------------------------------------------------------------
128      def loadWitCatalog(self, witItemId):      def recurseCatalog( self, catEntry, parentTree, parentItemId):
129      #------------------------------------------------------------------------      #------------------------------------------------------------------------
130          w=WitFactory()          """
131            Create a new item under parentItemId in wxTree, parentTree.  Associate
132            catEntry with it.  If catEntry has entries, recurse on them.
133            """
134    
135          pwyItemId=self.parent.catalog_tree.AppendItem(witItemId, "Pathways" )          if ( catEntry.isTerminal() ):
136                displayedName = catEntry.name()
137            else:
138                displayedName = catEntry.name() + "/"
139    
140          pwyList = w.listPathways( )          newItemId=parentTree.AppendItem(parentItemId, displayedName )
141          for pwy in pwyList:  
142              id=self.parent.catalog_tree.AppendItem(pwyItemId, pwy)          # associate data needed to manipulate the catEntry
143              self.parent.catalog_tree.SetPyData(id, (self.witPwyLoader,pwy) )  
144            parentTree.SetPyData( newItemId,
145          orgItemId=self.parent.catalog_tree.AppendItem(witItemId, "Organisms" )                                (self.recoElemLoader, catEntry, newItemId ) )
146    
147          orgList = w.listOrganisms( )          if ( not catEntry.isTerminal() ):
148          for org in orgList:              for e in catEntry.entries():
149              id=self.parent.catalog_tree.AppendItem(orgItemId, org)                  self.recurseCatalog( e, parentTree, newItemId)
150              self.parent.catalog_tree.SetPyData(id, (self.witOrgLoader, org ))  
151            parentTree.SortChildren( newItemId )
152    
153            return
154    
155        #------------------------------------------------------------------------
156        def DOOMloadSeedCatalog(self, seedServer ):
157        #------------------------------------------------------------------------
158            """
159            This adds a Seed instance to the catalog.  It is called from the
160            MainMenuBar when Data->Add Seed Instance is called, for example.
161            """
162    
163            wxBeginBusyCursor()
164    
165            # The SeedDataFactory ctor is slow and actually reads a bunch of
166            # data from the server
167    
168            seedFactory   = SeedDataFactory( seedServer )
169    
170            # add it to the list in the catalog
171            try:
172                Catalog.instance().addDataFactory( seedFactory )
173            except:
174                self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
175                wxEndBusyCursor()
176                return
177    
178            top = seedFactory.getCatalogTop()
179            self.recurseCatalog( top, self.parent.catalog_tree, self.parent.catalogRootId)
180    
181            wxEndBusyCursor()
182    
183          return          return
184    
# Line 81  Line 186 
186      def onLeftClick(self,treeEvent):      def onLeftClick(self,treeEvent):
187      #------------------------------------------------------------------------      #------------------------------------------------------------------------
188          item = treeEvent.GetItem()          item = treeEvent.GetItem()
189    
190          catEntryTuple = self.parent.tree_ctr.GetPyData(item)          catEntryTuple = self.parent.tree_ctr.GetPyData(item)
191          if (catEntryTuple == None ):          if (catEntryTuple == None ):
192              return              return
193          self.selected = catEntryTuple          self.selected = catEntryTuple
194            catEntry   = catEntryTuple[1]
195    
196            ##
197            # update the history information display
198            ##
199    
200            theBox = self.parent.catVersionValueComboBox
201            theBox.Clear()
202    
203            if ( not catEntry.isTerminal() ):
204    
205                self.parent.catPathValue.SetValue( catEntry.path() + "/" )
206                self.parent.catVersionValueComboBox.SetLabel( "")
207                self.parent.catHistoryDateValue.SetLabel( "" )
208                self.parent.catHistoryUserValue.SetLabel( "" )
209                self.parent.catHistoryCreatedFromValue.SetLabel( "")
210                theBox.SetValue( "" )
211            else:
212                versions   = catEntry.versions()
213                if ( [] == versions ):
214                    self.parent.catPathValue.SetLabel( catEntry.path()+";[None]" )
215                    theBox.SetValue( "None" )
216                else:
217                    maxVersion = max( versions )
218                    for v in versions:
219                        theBox.Append( "%s" % (v ) )
220                        theBox.SetValue( "%s" % (maxVersion) )
221                    self.parent.catPathValue.SetLabel(catEntry.path()+";[%s]" % (maxVersion))
222                #
223                self.parent.catHistoryDateValue.SetLabel( "no date info yet" )
224                self.parent.catHistoryUserValue.SetLabel( "no user info yet" )
225                self.parent.catHistoryCreatedFromValue.SetLabel( "no history info yet" )
226    
227          return          return
228    
229    
230      #------------------------------------------------------------------------      #------------------------------------------------------------------------
231      def onLoadBtnPress(self, event):      def onCatVersionValueComboBox(self, event):
232      #------------------------------------------------------------------------      #------------------------------------------------------------------------
233          if ( self.selected == None ):          """
234              print "No selection in onLoadBtnPress"          Handles activity in combo box where user sets Verion to use
235            """
236    
237            # get the value selected in the combo box.
238            choice = event.GetString()
239            self.parent.catVersionValueComboBox.SetValue( "%s" % (choice) )
240    
241            # the operation is interpreted relative to the currently selected
242            # catalogEntry.  find what that is.
243    
244            catEntry   = self.selected[1]
245    
246            # update stuff
247            #version = self.parent.catVersionValueComboBox.GetValue()
248            self.parent.catPathValue.SetLabel( catEntry.path()+";[%s]" % (choice) )
249    
250            return
251    
252    
253        #------------------------------------------------------------------------
254        def onRightClickCatalogTree(self, event):
255        #------------------------------------------------------------------------
256            """ Fires off the pop-up menu to handle right click events. """
257    
258            event.GetEventObject().PopupMenu(self.catEditMenu, event.GetPosition())
259            return
260    
261        #------------------------------------------------------------------------
262        def doCatEditMkDir( self, event ):
263        #------------------------------------------------------------------------
264            if (None == self.selected):
265                self.parent.error( "A selection is required first.")
266              return              return
267    
268          catEntryTuple = self.selected          catEntryTuple = self.selected
269          apply( catEntryTuple[0], [catEntryTuple[1]] )          catEntry      = catEntryTuple[1]
270            treeItemId    = catEntryTuple[2]
271    
272            if (catEntry.isTerminal()):
273                self.parent.error("Directories can not be added to items.")
274                return
275    
276            prompt = "New catalog directory name:"
277            dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
278    
279            if ( dlg.ShowModal() == wxID_OK):
280                theName = dlg.GetValue()
281                if ( theName=="" ): return
282                dlg.Destroy()
283            else:
284                #didn't get a kid name
285                dlg.Destroy()
286                return
287    
288            try:
289                newCatEntry=catEntry.mkDir( theName )
290                parentTree=self.parent.catalog_tree
291                newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
292                parentTree.SetPyData( newItemId,
293                                      (self.recoElemLoader, newCatEntry, newItemId )  )
294    
295                parentTree.SortChildren( treeItemId )
296            except:
297                self.parent.error( "Operation refused." )
298    
299    
300          return          return
301    
302      #------------------------------------------------------------------------      #------------------------------------------------------------------------
303      def bssLoader( self, bssCatEntry ):      def doCatEditMkItem( self, event ):
304      #------------------------------------------------------------------------      #------------------------------------------------------------------------
305          wxBeginBusyCursor()          if (None == self.selected):
306          b=BssFactory()              self.parent.error( "A selection is required first.")
307          top= b.getRecoElemById( bssCatEntry[1] )              return
         self.to_re.AddRecoElemTree(self.parent.rootId, top)  
         wxEndBusyCursor()  
308    
309            catEntryTuple = self.selected
310            catEntry      = catEntryTuple[1]
311            treeItemId    = catEntryTuple[2]
312    
313            if (catEntry.isTerminal()):
314                self.parent.error("Items can not be added to items. Add to a directory.")
315          return          return
316    
317            prompt = "New catalog entry name:"
318            dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
319    
320            if ( dlg.ShowModal() == wxID_OK):
321                theName = dlg.GetValue()
322                if ( theName=="" ): return
323                dlg.Destroy()
324            else:
325                #didn't get a kid name
326                dlg.Destroy()
327                return
328    
329            try:
330                newCatEntry = catEntry.mkItem( theName )
331                parentTree=self.parent.catalog_tree
332                newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
333                parentTree.SetPyData( newItemId,
334                                      (self.recoElemLoader, newCatEntry, newItemId )  )
335    
336                parentTree.SortChildren( treeItemId )
337            except:
338                self.parent.error( "Operation refused." )
339    
340    
341            return
342    
343    
344      #------------------------------------------------------------------------      #------------------------------------------------------------------------
345      def witOrgLoader(self,  orgName ):      def onLeftDClick(self, event):
346        #------------------------------------------------------------------------
347            """ Double left-click means, "Load the currently selected item." """
348    
349            if ( self.selected == None ):
350                self.parent.error( "You must select a catalog entry before requesting load.")
351                return
352    
353            # We store a loader to actually load the selected item.  This dates
354            # back to a time before a single loader could handle all the various
355            # data factory kinds.
356    
357            catEntryTuple = self.selected
358            apply( catEntryTuple[0], [catEntryTuple[1]] )
359    
360            return
361    
362        #------------------------------------------------------------------------
363        def recoElemLoader(self,  argList ):
364      #------------------------------------------------------------------------      #------------------------------------------------------------------------
365          wxBeginBusyCursor()          wxBeginBusyCursor()
366          w=WitFactory()  
367          top= w.getRxnByOrg( orgName )          (catalogEntry) = argList
368          self.to_re.AddRecoElemTree(self.parent.rootId, top)  
369            if (catalogEntry.isTerminal() ):
370                ver = self.parent.catVersionValueComboBox.GetValue()
371                if ( ver == "None" ):
372                    top = RecoElem( catalogEntry.name() )
373                else:
374                    top = catalogEntry.read( int( ver ) )
375    
376                self.to_re.addRecoElemTree(self.parent.rootId, top, catalogEntry)
377            else:
378                # current selection is directory. can't load that!
379                wxEndBusyCursor()
380                return
381    
382    
383          wxEndBusyCursor()          wxEndBusyCursor()
384          return          return
385    
386      #------------------------------------------------------------------------      #------------------------------------------------------------------------
387      def witPwyLoader(self,  pwyName ):      def DOOMwitPwyLoader(self,  pwyName ):
388      #------------------------------------------------------------------------      #------------------------------------------------------------------------
389          wxBeginBusyCursor()          wxBeginBusyCursor()
390          w=WitFactory()          w=WitFactory()
391          top= w.getRxnByPwy( pwyName )          top= w.getRxnByPwy( pwyName )
392          self.to_re.AddRecoElemTree(self.parent.rootId, top)          self.to_re.addRecoElemTree(self.parent.rootId, top)
393          wxEndBusyCursor()          wxEndBusyCursor()
394          return          return

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.33

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3