[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.14, Wed Nov 5 21:07:55 2003 UTC revision 1.27, Wed Jun 23 19:02:51 2004 UTC
# Line 4  Line 4 
4  from FaST.SeedDataFactory import SeedDataFactory  from FaST.SeedDataFactory import SeedDataFactory
5  from FaST.SeedDataFactory import SeedOrganism  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    
11    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 ):  
   
12      #------------------------------------------------------------------------      #------------------------------------------------------------------------
13      def __init__(self, parent):      def __init__(self, parent):
14      #------------------------------------------------------------------------      #------------------------------------------------------------------------
# Line 40  Line 28 
28          self.initCatData()          self.initCatData()
29    
30    
31          self.seedServerMenu = wxMenu()          # setup catalog editing menu (right click)
32          self.seedServerAddId = wxNewId()  
33          self.setupSeedServerMenu()          self.catEditMenu         = wxMenu()
34            self.catEditMkItemId     = wxNewId()
35            self.catEditMkDirId      = wxNewId()
36            self.setupCatEditMenu()
37    
38          return          return
39    
# Line 50  Line 41 
41      #------------------------------------------------------------------------      #------------------------------------------------------------------------
42      def initCatEvents(self ):      def initCatEvents(self ):
43      #------------------------------------------------------------------------      #------------------------------------------------------------------------
44          button1= self.parent.OK_button  
         EVT_BUTTON(self.parent, self.parent.loadbtn.GetId(),  
                    self.onLoadBtnPress)  
45          EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,          EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,
46                               self.parent.catalog_treeId,                               self.parent.catalog_treeId,
47                               self.onLeftClick)                               self.onLeftClick)
# Line 63  Line 52 
52          EVT_RIGHT_DOWN(self.parent.catalog_tree, self.onRightClickCatalogTree)          EVT_RIGHT_DOWN(self.parent.catalog_tree, self.onRightClickCatalogTree)
53    
54    
55          # doesn't work...          EVT_LEFT_DCLICK (self.parent.catalog_tree, self.onLeftDClick)
56          # EVT_LEFT_DCLICK (self.parent.catalog_tree, self.onLeftDClick)  
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")  
   
         bssItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,  
                                                    "BioSimScratch" )  
         witItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,  
                                                    "WIT3" )  
         self.seedItemId=self.parent.catalog_tree.AppendItem(self.parent.catalogRootId,  
                                                    "Seed" )  
66    
67          self.loadBssCatalog( bssItemId )          self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
68          self.loadWitCatalog( witItemId )          self.loadCatalog()
   
         localSeedServer        = "http://localhost/FIG/"  
         self.loadSeedCatalog( localSeedServer)  
69    
70          self.parent.catalog_tree.Expand( self.parent.catalogRootId)          self.parent.catalog_tree.Expand( self.parent.catalogRootId)
71          return          return
72    
73      #------------------------------------------------------------------      #------------------------------------------------------------------
74      def setupSeedServerMenu(self):      def setupCatEditMenu(self):
75      #------------------------------------------------------------------      #------------------------------------------------------------------
         self.seedServerAddId = wxNewId()  
76    
77          self.seedServerMenu.Append( self.seedServerAddId,          self.catEditMenu.Append( self.catEditMkDirId,
78                                        "Add Seed Server", "New seed server arg3" )                                   "New Directory", "NewDirectory" )
79          EVT_MENU(self.parent, self.seedServerAddId, self.doSeedServerAdd)          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    
85            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, (self.bssLoader, catEntryTuple) )              Catalog.instance().addDataFactory( seedFactory )
98                Catalog.instance().addDataFactory( b )
99            except:
100                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            Create a new item under parentItemId in wxTree, parentTree.  Associate
128            catEntry with it.  If catEntry has entries, recurse on them.
129            """
130    
131          pwyItemId=self.parent.catalog_tree.AppendItem(witItemId, "Pathways" )          if ( catEntry.isTerminal() ):
132                displayedName = catEntry.name()
133            else:
134                displayedName = catEntry.name() + "/"
135    
136          pwyList = w.listPathways( )          newItemId=parentTree.AppendItem(parentItemId, displayedName )
137          for pwy in pwyList:  
138              id=self.parent.catalog_tree.AppendItem(pwyItemId, pwy)          # associate data needed to manipulate the catEntry
139              self.parent.catalog_tree.SetPyData(id, (self.witPwyLoader,pwy) )  
140            parentTree.SetPyData( newItemId,
141          orgItemId=self.parent.catalog_tree.AppendItem(witItemId, "Organisms" )                                (self.recoElemLoader, catEntry, newItemId ) )
142    
143          orgList = w.listOrganisms( )          if ( not catEntry.isTerminal() ):
144          for org in orgList:              for e in catEntry.entries():
145              id=self.parent.catalog_tree.AppendItem(orgItemId, org)                  self.recurseCatalog( e, parentTree, newItemId)
146              self.parent.catalog_tree.SetPyData(id, (self.witOrgLoader, org ))  
147            parentTree.SortChildren( newItemId )
148    
149          return          return
150    
151      #------------------------------------------------------------------------      #------------------------------------------------------------------------
152      def loadSeedCatalog(self, seedServer ):      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()          wxBeginBusyCursor()
160    
161          # The SeedDataFactory ctor is slow and actually reads a bunch of          # The SeedDataFactory ctor is slow and actually reads a bunch of
# Line 139  Line 163 
163    
164          seedFactory   = SeedDataFactory( seedServer )          seedFactory   = SeedDataFactory( seedServer )
165    
166          # make an entry in the tree for it          # add it to the list in the catalog
167          #          try:
168          newSeedItemId=self.parent.catalog_tree.AppendItem(self.seedItemId, seedServer )              Catalog.instance().addDataFactory( seedFactory )
169            except:
170          # jam in the data              self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
171          #              wxEndBusyCursor()
         orgList = seedFactory.listOrganisms( )  
         if ( orgList== None ):  
             orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId,  
                          "Could not get Org list from "+ seedServer )  
172              return              return
173    
174          orgItemId=self.parent.catalog_tree.AppendItem(newSeedItemId, "Organisms" )          top = seedFactory.getCatalogTop()
175          for org in orgList:          self.recurseCatalog( top, self.parent.catalog_tree, self.parent.catalogRootId)
             id=self.parent.catalog_tree.AppendItem(orgItemId, org.figOrgName )  
             self.parent.catalog_tree.SetPyData(id, (self.seedOrgLoader,  
                                                    (seedFactory.getRecoElemByOrg, org) ))  
176    
177          wxEndBusyCursor()          wxEndBusyCursor()
178    
179          return          return
180    
181      #------------------------------------------------------------------------      #------------------------------------------------------------------------
# Line 169  Line 187 
187          if (catEntryTuple == None ):          if (catEntryTuple == None ):
188              return              return
189          self.selected = catEntryTuple          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:
207                versions   = catEntry.versions()
208                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 onRightClickCatalogTree(self, event):      def onCatVersionValueComboBox(self, event):
227      #------------------------------------------------------------------------      #------------------------------------------------------------------------
228            """
229            Handles activity in combo box where user sets Verion to use
230            """
231    
232          goober = event.GetEventObject()          # get the value selected in the combo box.
233          goober.PopupMenu(self.seedServerMenu, event.GetPosition())          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 doSeedServerAdd(self, event):      def onRightClickCatalogTree(self, event):
250      #------------------------------------------------------------------------      #------------------------------------------------------------------------
251          prompt = "Name of Seed server"          """ 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)          dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
273    
274          if ( dlg.ShowModal() == wxID_OK):          if ( dlg.ShowModal() == wxID_OK):
275              serverName = dlg.GetValue()              theName = dlg.GetValue()
276              if ( serverName=="" ): return              if ( theName=="" ): return
277              dlg.Destroy()              dlg.Destroy()
278          else:          else:
279              #didn't get a kid name              #didn't get a kid name
280              dlg.Destroy()              dlg.Destroy()
281              return              return
282    
283          self.loadSeedCatalog( serverName )          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          return
296    
297      #------------------------------------------------------------------------      #------------------------------------------------------------------------
298      def onLeftDClick(self,treeEvent):      def doCatEditMkItem( self, event ):
299      #------------------------------------------------------------------------      #------------------------------------------------------------------------
300          self.onLoadBtnPress(treeEvent)          if (None == self.selected):
301                self.parent.error( "A selection is required first.")
302                return
303    
304          pt = treeEvent.GetPosition()          catEntryTuple = self.selected
305          item = self.parent.tree_ctr.HitTest(pt)          catEntry      = catEntryTuple[1]
306          print item          treeItemId    = catEntryTuple[2]
307          catEntryTuple = self.parent.tree_ctr.GetPyData(item)  
308          apply(catEntryTuple[0], catEntryTuple[1])          if (catEntry.isTerminal()):
309                self.parent.error("Items can not be added to items. Add to a directory.")
310          return          return
311    
312          pt = treeEvent.GetPosition()          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          item = self.parent.tree_ctr.HitTest(pt)          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          print item              parentTree.SortChildren( treeItemId )
332          catEntryTuple = self.parent.tree_ctr.GetPyData(item)          except:
333          #print catEntryTuple, "catEntryTuple"              self.parent.error( "Operation refused." )
         #self.selected = catEntryTuple  
334    
         #catEntryTuple = self.selected  
         #apply(catEntryTuple[0], [catEntryTuple[1]])  
335    
336          return          return
337    
338    
339      #------------------------------------------------------------------------      #------------------------------------------------------------------------
340      def onLoadBtnPress(self, event):      def onLeftDClick(self, event):
341      #------------------------------------------------------------------------      #------------------------------------------------------------------------
342            """ Double left-click means, "Load the currently selected item." """
343    
344          if ( self.selected == None ):          if ( self.selected == None ):
345              print "No selection in onLoadBtnPress"              self.parent.error( "You must select a catalog entry before requesting load.")
346              return              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          catEntryTuple = self.selected
353          apply( catEntryTuple[0], [catEntryTuple[1]] )          apply( catEntryTuple[0], [catEntryTuple[1]] )
354    
355          return          return
356    
357      #------------------------------------------------------------------------      #------------------------------------------------------------------------
358      def bssLoader( self, bssCatEntry ):      def recoElemLoader(self,  argList ):
359      #------------------------------------------------------------------------      #------------------------------------------------------------------------
360          wxBeginBusyCursor()          wxBeginBusyCursor()
         b=BssFactory()  
         top= b.getRecoElemById( bssCatEntry[1] )  
         self.to_re.AddRecoElemTree(self.parent.rootId, top)  
         wxEndBusyCursor()  
361    
362          return          (catalogEntry) = argList
363    
364      #------------------------------------------------------------------------          if (catalogEntry.isTerminal() ):
365      def witOrgLoader(self,  orgName ):              ver = self.parent.catVersionValueComboBox.GetValue()
366      #------------------------------------------------------------------------              if ( ver == "None" ):
367          wxBeginBusyCursor()                  top = RecoElem( catalogEntry.name() )
368          w=WitFactory()              else:
369          top= w.getRxnByOrg( orgName )                  top = catalogEntry.read( int( ver ) )
370          self.to_re.AddRecoElemTree(self.parent.rootId, top)  
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    
     #------------------------------------------------------------------------  
     def seedOrgLoader(self,  argList ):  
     #------------------------------------------------------------------------  
         wxBeginBusyCursor()  
   
         (theSeedFactoryMethod, org) = argList  
         top = apply( theSeedFactoryMethod, [org] )  
         # top=self.__seedDataFactory.getRecoElemByOrg( org )  
         self.to_re.AddRecoElemTree(self.parent.rootId, top)  
377    
378          wxEndBusyCursor()          wxEndBusyCursor()
379          return          return
380    
381      #------------------------------------------------------------------------      #------------------------------------------------------------------------
382      def witPwyLoader(self,  pwyName ):      def DOOMwitPwyLoader(self,  pwyName ):
383      #------------------------------------------------------------------------      #------------------------------------------------------------------------
384          wxBeginBusyCursor()          wxBeginBusyCursor()
385          w=WitFactory()          w=WitFactory()
386          top= w.getRxnByPwy( pwyName )          top= w.getRxnByPwy( pwyName )
387          self.to_re.AddRecoElemTree(self.parent.rootId, top)          self.to_re.addRecoElemTree(self.parent.rootId, top)
388          wxEndBusyCursor()          wxEndBusyCursor()
389          return          return

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3