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

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.36

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3