[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.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
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          button1= self.parent.OK_button  
21          EVT_BUTTON(self.parent, self.parent.loadbtn.GetId(),          # seedItemId is the wxPython id for the "Seed" node
22                     self.onLoadBtnPress)          # in the catalog tree under which all specific Seed servers
23            # are listed
24    
25            self.seedItemId        = None
26    
27            self.initCatEvents()
28            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    
     def InitLsCat(self):  
         b=BssFactory()  
         cpanel_list = b.getLsCat()  
40    
41          for x in cpanel_list:      #------------------------------------------------------------------------
42              self.parent.catalog_listbox.Append(x[0], x[1])      def initCatEvents(self ):
43        #------------------------------------------------------------------------
44    
45            EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,
46                                 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    
         EVT_LISTBOX(self.parent, self.parent.catalog_listbox.GetId(), self.onLeftClick)  
61          return          return
62    
63      def onLeftClick(self,event):      #------------------------------------------------------------------------
64          pt=self.parent.catalog_listbox.GetSelection()      def initCatData( self ):
65          self.selected =int (self.parent.catalog_listbox.GetClientData(pt))      #------------------------------------------------------------------------
66    
67            self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
68            self.loadCatalog()
69    
70            self.parent.catalog_tree.Expand( self.parent.catalogRootId)
71          return          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    
85            return
86    
87      def onLoadBtnPress(self, event):      #------------------------------------------------------------------------
88        def loadCatalog(self):
89        #------------------------------------------------------------------------
90          wxBeginBusyCursor()          wxBeginBusyCursor()
91    
92            localSeedServer        = "http://localhost/FIG"
93            seedFactory   = SeedDataFactory( localSeedServer )
94          b=BssFactory()          b=BssFactory()
95          top= b.getRecoElemById( self.selected )  
96          self.to_re.AddRecoElemTree(self.parent.rootId, top)          try:
97                Catalog.instance().addDataFactory( seedFactory )
98                Catalog.instance().addDataFactory( b )
99            except:
100                self.parent.error("loadCatalog: error" )
101          wxEndBusyCursor()          wxEndBusyCursor()
102          return          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
122    
123        #------------------------------------------------------------------------
124        def recurseCatalog( self, catEntry, parentTree, parentItemId):
125        #------------------------------------------------------------------------
126            """
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            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
150    
151        #------------------------------------------------------------------------
152        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
180    
181        #------------------------------------------------------------------------
182        def onLeftClick(self,treeEvent):
183        #------------------------------------------------------------------------
184            item = treeEvent.GetItem()
185    
186            catEntryTuple = self.parent.tree_ctr.GetPyData(item)
187            if (catEntryTuple == None ):
188                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:
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
223    
224    
225        #------------------------------------------------------------------------
226        def onCatVersionValueComboBox(self, event):
227        #------------------------------------------------------------------------
228            """
229            Handles activity in combo box where user sets Verion to use
230            """
231    
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
246    
247    
248        #------------------------------------------------------------------------
249        def onRightClickCatalogTree(self, event):
250        #------------------------------------------------------------------------
251            """ 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()
361    
362            (catalogEntry) = argList
363    
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()
379            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.2  
changed lines
  Added in v.1.27

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3