[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.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.RecoElem import RecoElem  from PyGUI.RecoElempanel           import RecoElempanel
5  from RecoElempanel import RecoElemWindow  from CatalogServices.Catalog import Catalog
6    
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.
         button1= self.parent.OK_button  
         EVT_BUTTON(self.parent, self.parent.loadbtn.GetId(),  
                    self.onLoadBtnPress)  
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()
24            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
35    
36    
37        #------------------------------------------------------------------------
38        def initCatEvents(self):
39        #------------------------------------------------------------------------
40    
41            EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,
42                                 self.parent.catalog_treeId,
43                                 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
58    
59        #------------------------------------------------------------------------
60        def initCatData( self ):
61        #------------------------------------------------------------------------
62    
63            self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
64            self.loadCatalog()
65    
66            self.parent.catalog_tree.Expand( self.parent.catalogRootId)
67            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 loadCatalog(self):
85        #------------------------------------------------------------------------
86            wxBeginBusyCursor()
87    
88            #localSeedServer        = "http://localhost/FIG"
89            #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
114    
115        #------------------------------------------------------------------------
116        def recurseCatalog( self, catEntry, parentTree, parentItemId):
117        #------------------------------------------------------------------------
118            """
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            # The SeedDataFactory ctor is slow and actually reads a bunch of
154            # data from the server
155    
156            seedFactory   = SeedDataFactory( seedServer )
157    
158            # 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            top = seedFactory.getCatalogTop()
167            self.recurseCatalog( top, self.parent.catalog_tree, self.parent.catalogRootId)
168    
169            wxEndBusyCursor()
170    
171            return
172    
173        #------------------------------------------------------------------------
174        def onLeftClick(self,treeEvent):
175        #------------------------------------------------------------------------
176            item = treeEvent.GetItem()
177    
178            catEntryTuple = self.parent.tree_ctr.GetPyData(item)
179            if (catEntryTuple == None ):
180                return
181            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
216    
217    
218        #------------------------------------------------------------------------
219        def onCatVersionValueComboBox(self, event):
220        #------------------------------------------------------------------------
221            """
222            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
255    
256            catEntryTuple = self.selected
257            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          return
275    
276      def InitLsCat(self):          #try:
277          b=BssFactory()          if (1):
278          cpanel_list = b.getLsCat()              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          for x in cpanel_list:              parentTree.SortChildren( treeItemId )
285              self.parent.catalog_listbox.Append(x[0], x[1])          else:
286            #except:
287                self.parent.error( "Operation refused." )
288    
289          EVT_LISTBOX(self.parent, self.parent.catalog_listbox.GetId(), self.onLeftClick)  
290            return
291    
292        #------------------------------------------------------------------------
293        def doCatEditMkItem( self, event ):
294        #------------------------------------------------------------------------
295            if (None == self.selected):
296                self.parent.error( "A selection is required first.")
297          return          return
298    
299      def onLeftClick(self,event):          catEntryTuple = self.selected
300          pt=self.parent.catalog_listbox.GetSelection()          catEntry      = catEntryTuple[1]
301          self.selected =int (self.parent.catalog_listbox.GetClientData(pt))          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          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
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      def onLoadBtnPress(self, event):  
334        #------------------------------------------------------------------------
335        def onLeftDClick(self, event):
336        #------------------------------------------------------------------------
337            """ Double left-click means, "Load the currently selected item." """
338    
339            if ( self.selected == None ):
340                self.parent.error( "You must select a catalog entry before requesting load.")
341                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
351    
352        #------------------------------------------------------------------------
353        def recoElemLoader(self,  argList ):
354        #------------------------------------------------------------------------
355          wxBeginBusyCursor()          wxBeginBusyCursor()
356          b=BssFactory()  
357          top= b.getRecoElemById( self.selected )          (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()          wxEndBusyCursor()
370          return          return
371    
372    
373            wxEndBusyCursor()
374            return

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3