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

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3