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

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.27

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3