[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.2, Thu Jul 31 15:54:29 2003 UTC revision 1.30, Fri Jul 2 22:08:02 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.RecoElem import RecoElem  from FaST.BssFactoryProxy    import BssFactoryProxy
4  from RecoElempanel import RecoElemWindow  from FaST.WitFactory         import WitFactory
5    from FaST.SeedDataFactory    import SeedDataFactory
6    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          button1= self.parent.OK_button  
22          EVT_BUTTON(self.parent, self.parent.loadbtn.GetId(),          # seedItemId is the wxPython id for the "Seed" node
23                     self.onLoadBtnPress)          # in the catalog tree under which all specific Seed servers
24            # are listed
25    
26            self.seedItemId        = None
27    
28            self.initCatEvents()
29            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    
     def InitLsCat(self):  
         b=BssFactory()  
         cpanel_list = b.getLsCat()  
41    
42          for x in cpanel_list:      #------------------------------------------------------------------------
43              self.parent.catalog_listbox.Append(x[0], x[1])      def initCatEvents(self):
44        #------------------------------------------------------------------------
45    
46            EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,
47                                 self.parent.catalog_treeId,
48                                 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    
         EVT_LISTBOX(self.parent, self.parent.catalog_listbox.GetId(), self.onLeftClick)  
62          return          return
63    
64      def onLeftClick(self,event):      #------------------------------------------------------------------------
65          pt=self.parent.catalog_listbox.GetSelection()      def initCatData( self ):
66          self.selected =int (self.parent.catalog_listbox.GetClientData(pt))      #------------------------------------------------------------------------
67    
68            self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
69            self.loadCatalog()
70    
71            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      def onLoadBtnPress(self, event):      #------------------------------------------------------------------------
89        def loadCatalog(self):
90        #------------------------------------------------------------------------
91          wxBeginBusyCursor()          wxBeginBusyCursor()
92    
93            localSeedServer        = "http://localhost/FIG"
94            seedFactory   = SeedDataFactory( localSeedServer )
95          b=BssFactory()          b=BssFactory()
96          top= b.getRecoElemById( self.selected )  
97          self.to_re.AddRecoElemTree(self.parent.rootId, top)          #theConnectionInfo = ["terra.mcs.anl.gov", 3000]
98            #b             = BssFactoryProxy(theConnectionInfo)
99    
100            try:
101                Catalog.instance().addDataFactory( seedFactory )
102                Catalog.instance().addDataFactory( b )
103            except:
104                self.parent.error("loadCatalog: error" )
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
126    
127        #------------------------------------------------------------------------
128        def recurseCatalog( self, catEntry, parentTree, parentItemId):
129        #------------------------------------------------------------------------
130            """
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            if ( catEntry.isTerminal() ):
136                displayedName = catEntry.name()
137            else:
138                displayedName = catEntry.name() + "/"
139    
140            newItemId=parentTree.AppendItem(parentItemId, displayedName )
141    
142            # associate data needed to manipulate the catEntry
143    
144            parentTree.SetPyData( newItemId,
145                                  (self.recoElemLoader, catEntry, newItemId ) )
146    
147            if ( not catEntry.isTerminal() ):
148                for e in catEntry.entries():
149                    self.recurseCatalog( e, parentTree, newItemId)
150    
151            parentTree.SortChildren( newItemId )
152    
153            return
154    
155        #------------------------------------------------------------------------
156        def loadSeedCatalog(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
184    
185        #------------------------------------------------------------------------
186        def onLeftClick(self,treeEvent):
187        #------------------------------------------------------------------------
188            item = treeEvent.GetItem()
189    
190            catEntryTuple = self.parent.tree_ctr.GetPyData(item)
191            if (catEntryTuple == None ):
192                return
193            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                self.parent.catPathValue.SetLabel( catEntry.path() + "/" )
205                self.parent.catVersionValueComboBox.SetLabel( "")
206                self.parent.catHistoryDateValue.SetLabel( "" )
207                self.parent.catHistoryUserValue.SetLabel( "" )
208                self.parent.catHistoryCreatedFromValue.SetLabel( "")
209                theBox.SetValue( "" )
210            else:
211                versions   = catEntry.versions()
212                if ( [] == versions ):
213                    self.parent.catPathValue.SetLabel( catEntry.path()+";[None]" )
214                    theBox.SetValue( "None" )
215                else:
216                    maxVersion = max( versions )
217                    for v in versions:
218                        theBox.Append( "%s" % (v ) )
219                        theBox.SetValue( "%s" % (maxVersion) )
220                    self.parent.catPathValue.SetLabel(catEntry.path()+";[%s]" % (maxVersion))
221                #
222                self.parent.catHistoryDateValue.SetLabel( "no date info yet" )
223                self.parent.catHistoryUserValue.SetLabel( "no user info yet" )
224                self.parent.catHistoryCreatedFromValue.SetLabel( "no history info yet" )
225    
226            return
227    
228    
229        #------------------------------------------------------------------------
230        def onCatVersionValueComboBox(self, event):
231        #------------------------------------------------------------------------
232            """
233            Handles activity in combo box where user sets Verion to use
234            """
235    
236            # get the value selected in the combo box.
237            choice = event.GetString()
238            self.parent.catVersionValueComboBox.SetValue( "%s" % (choice) )
239    
240            # the operation is interpreted relative to the currently selected
241            # catalogEntry.  find what that is.
242    
243            catEntry   = self.selected[1]
244    
245            # update stuff
246            #version = self.parent.catVersionValueComboBox.GetValue()
247            self.parent.catPathValue.SetLabel( catEntry.path()+";[%s]" % (choice) )
248    
249            return
250    
251    
252        #------------------------------------------------------------------------
253        def onRightClickCatalogTree(self, event):
254        #------------------------------------------------------------------------
255            """ Fires off the pop-up menu to handle right click events. """
256    
257            event.GetEventObject().PopupMenu(self.catEditMenu, event.GetPosition())
258            return
259    
260        #------------------------------------------------------------------------
261        def doCatEditMkDir( self, event ):
262        #------------------------------------------------------------------------
263            if (None == self.selected):
264                self.parent.error( "A selection is required first.")
265                return
266    
267            catEntryTuple = self.selected
268            catEntry      = catEntryTuple[1]
269            treeItemId    = catEntryTuple[2]
270    
271            if (catEntry.isTerminal()):
272                self.parent.error("Directories can not be added to items.")
273                return
274    
275            prompt = "New catalog directory name:"
276            dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
277    
278            if ( dlg.ShowModal() == wxID_OK):
279                theName = dlg.GetValue()
280                if ( theName=="" ): return
281                dlg.Destroy()
282            else:
283                #didn't get a kid name
284                dlg.Destroy()
285                return
286    
287            try:
288                newCatEntry=catEntry.mkDir( theName )
289                parentTree=self.parent.catalog_tree
290                newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
291                parentTree.SetPyData( newItemId,
292                                      (self.recoElemLoader, newCatEntry, newItemId )  )
293    
294                parentTree.SortChildren( treeItemId )
295            except:
296                self.parent.error( "Operation refused." )
297    
298    
299            return
300    
301        #------------------------------------------------------------------------
302        def doCatEditMkItem( self, event ):
303        #------------------------------------------------------------------------
304            if (None == self.selected):
305                self.parent.error( "A selection is required first.")
306                return
307    
308            catEntryTuple = self.selected
309            catEntry      = catEntryTuple[1]
310            treeItemId    = catEntryTuple[2]
311    
312            if (catEntry.isTerminal()):
313                self.parent.error("Items can not be added to items. Add to a directory.")
314                return
315    
316            prompt = "New catalog entry name:"
317            dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
318    
319            if ( dlg.ShowModal() == wxID_OK):
320                theName = dlg.GetValue()
321                if ( theName=="" ): return
322                dlg.Destroy()
323            else:
324                #didn't get a kid name
325                dlg.Destroy()
326                return
327    
328            try:
329                newCatEntry = catEntry.mkItem( theName )
330                parentTree=self.parent.catalog_tree
331                newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
332                parentTree.SetPyData( newItemId,
333                                      (self.recoElemLoader, newCatEntry, newItemId )  )
334    
335                parentTree.SortChildren( treeItemId )
336            except:
337                self.parent.error( "Operation refused." )
338    
339    
340            return
341    
342    
343        #------------------------------------------------------------------------
344        def onLeftDClick(self, event):
345        #------------------------------------------------------------------------
346            """ Double left-click means, "Load the currently selected item." """
347    
348            if ( self.selected == None ):
349                self.parent.error( "You must select a catalog entry before requesting load.")
350                return
351    
352            # We store a loader to actually load the selected item.  This dates
353            # back to a time before a single loader could handle all the various
354            # data factory kinds.
355    
356            catEntryTuple = self.selected
357            apply( catEntryTuple[0], [catEntryTuple[1]] )
358    
359            return
360    
361        #------------------------------------------------------------------------
362        def recoElemLoader(self,  argList ):
363        #------------------------------------------------------------------------
364            wxBeginBusyCursor()
365    
366            (catalogEntry) = argList
367    
368            if (catalogEntry.isTerminal() ):
369                ver = self.parent.catVersionValueComboBox.GetValue()
370                if ( ver == "None" ):
371                    top = RecoElem( catalogEntry.name() )
372                else:
373                    top = catalogEntry.read( int( ver ) )
374    
375                self.to_re.addRecoElemTree(self.parent.rootId, top, catalogEntry)
376            else:
377                # current selection is directory. can't load that!
378          wxEndBusyCursor()          wxEndBusyCursor()
379          return          return
380    
381    
382            wxEndBusyCursor()
383            return
384    
385        #------------------------------------------------------------------------
386        def DOOMwitPwyLoader(self,  pwyName ):
387        #------------------------------------------------------------------------
388            wxBeginBusyCursor()
389            w=WitFactory()
390            top= w.getRxnByPwy( pwyName )
391            self.to_re.addRecoElemTree(self.parent.rootId, top)
392            wxEndBusyCursor()
393            return

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.30

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3