[Bio] / PyGUI / Catalogpanel.py Repository:
ViewVC logotype

Annotation of /PyGUI/Catalogpanel.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.33 - (view) (download) (as text)

1 : efrank 1.24 from wxPython.wx import *
2 :     from FaST.BssFactory import BssFactory
3 : hwang 1.29 from FaST.BssFactoryProxy import BssFactoryProxy
4 : efrank 1.24 from FaST.WitFactory import WitFactory
5 :     from FaST.SeedDataFactory import SeedDataFactory
6 :     from FaST.SeedDataFactory import SeedOrganism
7 : efrank 1.28 from KahOM.RecoElem import RecoElem
8 :     from PyGUI.RecoElempanel import RecoElempanel
9 : efrank 1.24 from CatalogServices.Catalog import Catalog
10 : efrank 1.12
11 :    
12 : hwang 1.21 class Catalogpanel:
13 : efrank 1.4 #------------------------------------------------------------------------
14 : hwang 1.1 def __init__(self, parent):
15 : efrank 1.4 #------------------------------------------------------------------------
16 : efrank 1.13 self.parent = parent
17 :    
18 :     self.to_re = parent.re
19 : efrank 1.2 self.selected = None #remember last selected catalog entry
20 :     #..is used when LOAD button is hit.
21 : efrank 1.4
22 : efrank 1.14 # seedItemId is the wxPython id for the "Seed" node
23 :     # in the catalog tree under which all specific Seed servers
24 :     # are listed
25 :    
26 :     self.seedItemId = None
27 :    
28 : efrank 1.4 self.initCatEvents()
29 :     self.initCatData()
30 : efrank 1.14
31 :    
32 : efrank 1.25 # setup catalog editing menu (right click)
33 :    
34 :     self.catEditMenu = wxMenu()
35 :     self.catEditMkItemId = wxNewId()
36 :     self.catEditMkDirId = wxNewId()
37 :     self.setupCatEditMenu()
38 : efrank 1.14
39 : efrank 1.4 return
40 :    
41 :    
42 :     #------------------------------------------------------------------------
43 : hwang 1.30 def initCatEvents(self):
44 : efrank 1.4 #------------------------------------------------------------------------
45 : hwang 1.22
46 : efrank 1.6 EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,
47 :     self.parent.catalog_treeId,
48 :     self.onLeftClick)
49 : efrank 1.14
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 : hwang 1.20
56 : hwang 1.22 EVT_LEFT_DCLICK (self.parent.catalog_tree, self.onLeftDClick)
57 : efrank 1.6
58 : efrank 1.25 EVT_COMBOBOX(self.parent.catVersionValueComboBox,
59 :     self.parent.catVersionValueComboBox.GetId(),
60 :     self.onCatVersionValueComboBox)
61 :    
62 : efrank 1.4 return
63 :    
64 :     #------------------------------------------------------------------------
65 :     def initCatData( self ):
66 :     #------------------------------------------------------------------------
67 : efrank 1.25
68 : efrank 1.26 self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
69 : efrank 1.25 self.loadCatalog()
70 : efrank 1.13
71 : efrank 1.6 self.parent.catalog_tree.Expand( self.parent.catalogRootId)
72 : efrank 1.2 return
73 : efrank 1.4
74 : efrank 1.14 #------------------------------------------------------------------
75 : efrank 1.25 def setupCatEditMenu(self):
76 : efrank 1.14 #------------------------------------------------------------------
77 :    
78 : efrank 1.25 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 : efrank 1.14
88 : efrank 1.4 #------------------------------------------------------------------------
89 : efrank 1.25 def loadCatalog(self):
90 :     #------------------------------------------------------------------------
91 :     wxBeginBusyCursor()
92 :    
93 : sheradon 1.32 #localSeedServer = "http://localhost/FIG"
94 :     #seedFactory = SeedDataFactory( localSeedServer )
95 : efrank 1.33
96 :     #b = BssFactory()
97 : hwang 1.30 #theConnectionInfo = ["terra.mcs.anl.gov", 3000]
98 : hwang 1.29 #b = BssFactoryProxy(theConnectionInfo)
99 : efrank 1.25
100 : efrank 1.33 #try:
101 :     # Catalog.instance().addDataFactory( b )
102 :     #else:
103 :     #except:
104 :     # self.parent.error("LoadCatalog: no local Bss database." )
105 :     # wxEndBusyCursor()
106 :     # return
107 : efrank 1.25
108 : efrank 1.26 ##
109 :     # Handle top/root of catalog/tree specially to avoid "two root"
110 :     # on display problem
111 :     ##
112 :    
113 : efrank 1.25 top = Catalog.instance().getCatalogTop()
114 : efrank 1.26 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 : efrank 1.25
123 :     wxEndBusyCursor()
124 :    
125 :     return
126 :    
127 :     #------------------------------------------------------------------------
128 : efrank 1.26 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 : sheradon 1.32 def DOOMloadSeedCatalog(self, seedServer ):
157 : efrank 1.12 #------------------------------------------------------------------------
158 : efrank 1.27 """
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 : efrank 1.14 wxBeginBusyCursor()
164 :    
165 : efrank 1.27 # The SeedDataFactory ctor is slow and actually reads a bunch of
166 :     # data from the server
167 :    
168 : efrank 1.25 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 : efrank 1.6 def onLeftClick(self,treeEvent):
187 : efrank 1.4 #------------------------------------------------------------------------
188 : efrank 1.5 item = treeEvent.GetItem()
189 : hwang 1.11
190 : efrank 1.4 catEntryTuple = self.parent.tree_ctr.GetPyData(item)
191 : efrank 1.5 if (catEntryTuple == None ):
192 :     return
193 : efrank 1.6 self.selected = catEntryTuple
194 : efrank 1.25 catEntry = catEntryTuple[1]
195 : efrank 1.4
196 : efrank 1.25 ##
197 :     # update the history information display
198 :     ##
199 :    
200 :     theBox = self.parent.catVersionValueComboBox
201 :     theBox.Clear()
202 :    
203 :     if ( not catEntry.isTerminal() ):
204 : hwang 1.31
205 :     self.parent.catPathValue.SetValue( catEntry.path() + "/" )
206 : efrank 1.25 self.parent.catVersionValueComboBox.SetLabel( "")
207 :     self.parent.catHistoryDateValue.SetLabel( "" )
208 :     self.parent.catHistoryUserValue.SetLabel( "" )
209 :     self.parent.catHistoryCreatedFromValue.SetLabel( "")
210 : efrank 1.26 theBox.SetValue( "" )
211 : efrank 1.25 else:
212 :     versions = catEntry.versions()
213 :     if ( [] == versions ):
214 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[None]" )
215 : efrank 1.26 theBox.SetValue( "None" )
216 : efrank 1.25 else:
217 :     maxVersion = max( versions )
218 :     for v in versions:
219 :     theBox.Append( "%s" % (v ) )
220 :     theBox.SetValue( "%s" % (maxVersion) )
221 :     self.parent.catPathValue.SetLabel(catEntry.path()+";[%s]" % (maxVersion))
222 :     #
223 :     self.parent.catHistoryDateValue.SetLabel( "no date info yet" )
224 :     self.parent.catHistoryUserValue.SetLabel( "no user info yet" )
225 :     self.parent.catHistoryCreatedFromValue.SetLabel( "no history info yet" )
226 :    
227 : efrank 1.4 return
228 : efrank 1.14
229 : efrank 1.25
230 :     #------------------------------------------------------------------------
231 :     def onCatVersionValueComboBox(self, event):
232 :     #------------------------------------------------------------------------
233 :     """
234 :     Handles activity in combo box where user sets Verion to use
235 :     """
236 : hwang 1.30
237 : efrank 1.25 # get the value selected in the combo box.
238 :     choice = event.GetString()
239 : efrank 1.26 self.parent.catVersionValueComboBox.SetValue( "%s" % (choice) )
240 : efrank 1.25
241 :     # the operation is interpreted relative to the currently selected
242 :     # catalogEntry. find what that is.
243 :    
244 :     catEntry = self.selected[1]
245 :    
246 :     # update stuff
247 :     #version = self.parent.catVersionValueComboBox.GetValue()
248 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[%s]" % (choice) )
249 :    
250 :     return
251 :    
252 :    
253 : efrank 1.14 #------------------------------------------------------------------------
254 :     def onRightClickCatalogTree(self, event):
255 :     #------------------------------------------------------------------------
256 : efrank 1.27 """ Fires off the pop-up menu to handle right click events. """
257 : efrank 1.14
258 : efrank 1.27 event.GetEventObject().PopupMenu(self.catEditMenu, event.GetPosition())
259 : efrank 1.14 return
260 :    
261 :     #------------------------------------------------------------------------
262 : efrank 1.25 def doCatEditMkDir( self, event ):
263 :     #------------------------------------------------------------------------
264 :     if (None == self.selected):
265 :     self.parent.error( "A selection is required first.")
266 :     return
267 :    
268 :     catEntryTuple = self.selected
269 :     catEntry = catEntryTuple[1]
270 :     treeItemId = catEntryTuple[2]
271 :    
272 :     if (catEntry.isTerminal()):
273 :     self.parent.error("Directories can not be added to items.")
274 :     return
275 :    
276 :     prompt = "New catalog directory name:"
277 :     dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
278 :    
279 :     if ( dlg.ShowModal() == wxID_OK):
280 :     theName = dlg.GetValue()
281 :     if ( theName=="" ): return
282 :     dlg.Destroy()
283 :     else:
284 :     #didn't get a kid name
285 :     dlg.Destroy()
286 :     return
287 :    
288 :     try:
289 :     newCatEntry=catEntry.mkDir( theName )
290 :     parentTree=self.parent.catalog_tree
291 :     newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
292 :     parentTree.SetPyData( newItemId,
293 :     (self.recoElemLoader, newCatEntry, newItemId ) )
294 :    
295 :     parentTree.SortChildren( treeItemId )
296 :     except:
297 :     self.parent.error( "Operation refused." )
298 :    
299 :    
300 :     return
301 :    
302 :     #------------------------------------------------------------------------
303 :     def doCatEditMkItem( self, event ):
304 : efrank 1.14 #------------------------------------------------------------------------
305 : efrank 1.25 if (None == self.selected):
306 :     self.parent.error( "A selection is required first.")
307 :     return
308 :    
309 :     catEntryTuple = self.selected
310 :     catEntry = catEntryTuple[1]
311 :     treeItemId = catEntryTuple[2]
312 :    
313 :     if (catEntry.isTerminal()):
314 :     self.parent.error("Items can not be added to items. Add to a directory.")
315 :     return
316 :    
317 :     prompt = "New catalog entry name:"
318 : efrank 1.14 dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
319 :    
320 :     if ( dlg.ShowModal() == wxID_OK):
321 : efrank 1.25 theName = dlg.GetValue()
322 :     if ( theName=="" ): return
323 : efrank 1.14 dlg.Destroy()
324 :     else:
325 :     #didn't get a kid name
326 :     dlg.Destroy()
327 :     return
328 :    
329 : efrank 1.25 try:
330 :     newCatEntry = catEntry.mkItem( theName )
331 :     parentTree=self.parent.catalog_tree
332 :     newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
333 :     parentTree.SetPyData( newItemId,
334 :     (self.recoElemLoader, newCatEntry, newItemId ) )
335 :    
336 :     parentTree.SortChildren( treeItemId )
337 :     except:
338 :     self.parent.error( "Operation refused." )
339 :    
340 : efrank 1.14
341 :     return
342 :    
343 : efrank 1.4
344 :     #------------------------------------------------------------------------
345 : hwang 1.22 def onLeftDClick(self, event):
346 : efrank 1.4 #------------------------------------------------------------------------
347 : efrank 1.27 """ Double left-click means, "Load the currently selected item." """
348 :    
349 : efrank 1.6 if ( self.selected == None ):
350 : efrank 1.27 self.parent.error( "You must select a catalog entry before requesting load.")
351 : efrank 1.6 return
352 :    
353 : efrank 1.27 # We store a loader to actually load the selected item. This dates
354 :     # back to a time before a single loader could handle all the various
355 :     # data factory kinds.
356 :    
357 : efrank 1.6 catEntryTuple = self.selected
358 :     apply( catEntryTuple[0], [catEntryTuple[1]] )
359 :    
360 :     return
361 :    
362 :     #------------------------------------------------------------------------
363 : efrank 1.25 def recoElemLoader(self, argList ):
364 :     #------------------------------------------------------------------------
365 :     wxBeginBusyCursor()
366 :    
367 :     (catalogEntry) = argList
368 :    
369 :     if (catalogEntry.isTerminal() ):
370 : efrank 1.26 ver = self.parent.catVersionValueComboBox.GetValue()
371 :     if ( ver == "None" ):
372 : efrank 1.27 top = RecoElem( catalogEntry.name() )
373 : efrank 1.26 else:
374 :     top = catalogEntry.read( int( ver ) )
375 :    
376 : efrank 1.27 self.to_re.addRecoElemTree(self.parent.rootId, top, catalogEntry)
377 : efrank 1.25 else:
378 :     # current selection is directory. can't load that!
379 :     wxEndBusyCursor()
380 :     return
381 :    
382 :    
383 :     wxEndBusyCursor()
384 :     return
385 :    
386 :     #------------------------------------------------------------------------
387 : efrank 1.27 def DOOMwitPwyLoader(self, pwyName ):
388 : efrank 1.6 #------------------------------------------------------------------------
389 : efrank 1.2 wxBeginBusyCursor()
390 : efrank 1.6 w=WitFactory()
391 :     top= w.getRxnByPwy( pwyName )
392 : efrank 1.27 self.to_re.addRecoElemTree(self.parent.rootId, top)
393 : efrank 1.2 wxEndBusyCursor()
394 :     return

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3