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

Annotation of /PyGUI/Catalogpanel.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.32 - (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.25 b = BssFactory()
96 : hwang 1.30 #theConnectionInfo = ["terra.mcs.anl.gov", 3000]
97 : hwang 1.29 #b = BssFactoryProxy(theConnectionInfo)
98 : efrank 1.25
99 :     try:
100 :     Catalog.instance().addDataFactory( b )
101 :     except:
102 : sheradon 1.32 self.parent.error("LoadCatalog: no local Bss database." )
103 : efrank 1.25 wxEndBusyCursor()
104 :     return
105 :    
106 : efrank 1.26 ##
107 :     # Handle top/root of catalog/tree specially to avoid "two root"
108 :     # on display problem
109 :     ##
110 :    
111 : efrank 1.25 top = Catalog.instance().getCatalogTop()
112 : efrank 1.26 parentTree = self.parent.catalog_tree
113 :     parentTree.SetPyData( self.parent.catalogRootId,
114 :     (self.recoElemLoader, top, self.parent.catalogRootId) )
115 :    
116 :     for e in top.entries():
117 :     self.recurseCatalog( e, parentTree, self.parent.catalogRootId)
118 :    
119 :     parentTree.SortChildren( self.parent.catalogRootId)
120 : efrank 1.25
121 :     wxEndBusyCursor()
122 :    
123 :     return
124 :    
125 :     #------------------------------------------------------------------------
126 : efrank 1.26 def recurseCatalog( self, catEntry, parentTree, parentItemId):
127 :     #------------------------------------------------------------------------
128 :     """
129 :     Create a new item under parentItemId in wxTree, parentTree. Associate
130 :     catEntry with it. If catEntry has entries, recurse on them.
131 :     """
132 :    
133 :     if ( catEntry.isTerminal() ):
134 :     displayedName = catEntry.name()
135 :     else:
136 :     displayedName = catEntry.name() + "/"
137 :    
138 :     newItemId=parentTree.AppendItem(parentItemId, displayedName )
139 :    
140 :     # associate data needed to manipulate the catEntry
141 :    
142 :     parentTree.SetPyData( newItemId,
143 :     (self.recoElemLoader, catEntry, newItemId ) )
144 :    
145 :     if ( not catEntry.isTerminal() ):
146 :     for e in catEntry.entries():
147 :     self.recurseCatalog( e, parentTree, newItemId)
148 :    
149 :     parentTree.SortChildren( newItemId )
150 :    
151 :     return
152 :    
153 :     #------------------------------------------------------------------------
154 : sheradon 1.32 def DOOMloadSeedCatalog(self, seedServer ):
155 : efrank 1.12 #------------------------------------------------------------------------
156 : efrank 1.27 """
157 :     This adds a Seed instance to the catalog. It is called from the
158 :     MainMenuBar when Data->Add Seed Instance is called, for example.
159 :     """
160 :    
161 : efrank 1.14 wxBeginBusyCursor()
162 :    
163 : efrank 1.27 # The SeedDataFactory ctor is slow and actually reads a bunch of
164 :     # data from the server
165 :    
166 : efrank 1.25 seedFactory = SeedDataFactory( seedServer )
167 :    
168 :     # add it to the list in the catalog
169 :     try:
170 :     Catalog.instance().addDataFactory( seedFactory )
171 :     except:
172 :     self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
173 :     wxEndBusyCursor()
174 :     return
175 :    
176 :     top = seedFactory.getCatalogTop()
177 :     self.recurseCatalog( top, self.parent.catalog_tree, self.parent.catalogRootId)
178 :    
179 :     wxEndBusyCursor()
180 :    
181 :     return
182 :    
183 :     #------------------------------------------------------------------------
184 : efrank 1.6 def onLeftClick(self,treeEvent):
185 : efrank 1.4 #------------------------------------------------------------------------
186 : efrank 1.5 item = treeEvent.GetItem()
187 : hwang 1.11
188 : efrank 1.4 catEntryTuple = self.parent.tree_ctr.GetPyData(item)
189 : efrank 1.5 if (catEntryTuple == None ):
190 :     return
191 : efrank 1.6 self.selected = catEntryTuple
192 : efrank 1.25 catEntry = catEntryTuple[1]
193 : efrank 1.4
194 : efrank 1.25 ##
195 :     # update the history information display
196 :     ##
197 :    
198 :     theBox = self.parent.catVersionValueComboBox
199 :     theBox.Clear()
200 :    
201 :     if ( not catEntry.isTerminal() ):
202 : hwang 1.31
203 :     self.parent.catPathValue.SetValue( catEntry.path() + "/" )
204 : efrank 1.25 self.parent.catVersionValueComboBox.SetLabel( "")
205 :     self.parent.catHistoryDateValue.SetLabel( "" )
206 :     self.parent.catHistoryUserValue.SetLabel( "" )
207 :     self.parent.catHistoryCreatedFromValue.SetLabel( "")
208 : efrank 1.26 theBox.SetValue( "" )
209 : efrank 1.25 else:
210 :     versions = catEntry.versions()
211 :     if ( [] == versions ):
212 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[None]" )
213 : efrank 1.26 theBox.SetValue( "None" )
214 : efrank 1.25 else:
215 :     maxVersion = max( versions )
216 :     for v in versions:
217 :     theBox.Append( "%s" % (v ) )
218 :     theBox.SetValue( "%s" % (maxVersion) )
219 :     self.parent.catPathValue.SetLabel(catEntry.path()+";[%s]" % (maxVersion))
220 :     #
221 :     self.parent.catHistoryDateValue.SetLabel( "no date info yet" )
222 :     self.parent.catHistoryUserValue.SetLabel( "no user info yet" )
223 :     self.parent.catHistoryCreatedFromValue.SetLabel( "no history info yet" )
224 :    
225 : efrank 1.4 return
226 : efrank 1.14
227 : efrank 1.25
228 :     #------------------------------------------------------------------------
229 :     def onCatVersionValueComboBox(self, event):
230 :     #------------------------------------------------------------------------
231 :     """
232 :     Handles activity in combo box where user sets Verion to use
233 :     """
234 : hwang 1.30
235 : efrank 1.25 # get the value selected in the combo box.
236 :     choice = event.GetString()
237 : efrank 1.26 self.parent.catVersionValueComboBox.SetValue( "%s" % (choice) )
238 : efrank 1.25
239 :     # the operation is interpreted relative to the currently selected
240 :     # catalogEntry. find what that is.
241 :    
242 :     catEntry = self.selected[1]
243 :    
244 :     # update stuff
245 :     #version = self.parent.catVersionValueComboBox.GetValue()
246 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[%s]" % (choice) )
247 :    
248 :     return
249 :    
250 :    
251 : efrank 1.14 #------------------------------------------------------------------------
252 :     def onRightClickCatalogTree(self, event):
253 :     #------------------------------------------------------------------------
254 : efrank 1.27 """ Fires off the pop-up menu to handle right click events. """
255 : efrank 1.14
256 : efrank 1.27 event.GetEventObject().PopupMenu(self.catEditMenu, event.GetPosition())
257 : efrank 1.14 return
258 :    
259 :     #------------------------------------------------------------------------
260 : efrank 1.25 def doCatEditMkDir( self, event ):
261 :     #------------------------------------------------------------------------
262 :     if (None == self.selected):
263 :     self.parent.error( "A selection is required first.")
264 :     return
265 :    
266 :     catEntryTuple = self.selected
267 :     catEntry = catEntryTuple[1]
268 :     treeItemId = catEntryTuple[2]
269 :    
270 :     if (catEntry.isTerminal()):
271 :     self.parent.error("Directories can not be added to items.")
272 :     return
273 :    
274 :     prompt = "New catalog directory name:"
275 :     dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
276 :    
277 :     if ( dlg.ShowModal() == wxID_OK):
278 :     theName = dlg.GetValue()
279 :     if ( theName=="" ): return
280 :     dlg.Destroy()
281 :     else:
282 :     #didn't get a kid name
283 :     dlg.Destroy()
284 :     return
285 :    
286 :     try:
287 :     newCatEntry=catEntry.mkDir( theName )
288 :     parentTree=self.parent.catalog_tree
289 :     newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
290 :     parentTree.SetPyData( newItemId,
291 :     (self.recoElemLoader, newCatEntry, newItemId ) )
292 :    
293 :     parentTree.SortChildren( treeItemId )
294 :     except:
295 :     self.parent.error( "Operation refused." )
296 :    
297 :    
298 :     return
299 :    
300 :     #------------------------------------------------------------------------
301 :     def doCatEditMkItem( self, event ):
302 : efrank 1.14 #------------------------------------------------------------------------
303 : efrank 1.25 if (None == self.selected):
304 :     self.parent.error( "A selection is required first.")
305 :     return
306 :    
307 :     catEntryTuple = self.selected
308 :     catEntry = catEntryTuple[1]
309 :     treeItemId = catEntryTuple[2]
310 :    
311 :     if (catEntry.isTerminal()):
312 :     self.parent.error("Items can not be added to items. Add to a directory.")
313 :     return
314 :    
315 :     prompt = "New catalog entry name:"
316 : efrank 1.14 dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
317 :    
318 :     if ( dlg.ShowModal() == wxID_OK):
319 : efrank 1.25 theName = dlg.GetValue()
320 :     if ( theName=="" ): return
321 : efrank 1.14 dlg.Destroy()
322 :     else:
323 :     #didn't get a kid name
324 :     dlg.Destroy()
325 :     return
326 :    
327 : efrank 1.25 try:
328 :     newCatEntry = catEntry.mkItem( theName )
329 :     parentTree=self.parent.catalog_tree
330 :     newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
331 :     parentTree.SetPyData( newItemId,
332 :     (self.recoElemLoader, newCatEntry, newItemId ) )
333 :    
334 :     parentTree.SortChildren( treeItemId )
335 :     except:
336 :     self.parent.error( "Operation refused." )
337 :    
338 : efrank 1.14
339 :     return
340 :    
341 : efrank 1.4
342 :     #------------------------------------------------------------------------
343 : hwang 1.22 def onLeftDClick(self, event):
344 : efrank 1.4 #------------------------------------------------------------------------
345 : efrank 1.27 """ Double left-click means, "Load the currently selected item." """
346 :    
347 : efrank 1.6 if ( self.selected == None ):
348 : efrank 1.27 self.parent.error( "You must select a catalog entry before requesting load.")
349 : efrank 1.6 return
350 :    
351 : efrank 1.27 # We store a loader to actually load the selected item. This dates
352 :     # back to a time before a single loader could handle all the various
353 :     # data factory kinds.
354 :    
355 : efrank 1.6 catEntryTuple = self.selected
356 :     apply( catEntryTuple[0], [catEntryTuple[1]] )
357 :    
358 :     return
359 :    
360 :     #------------------------------------------------------------------------
361 : efrank 1.25 def recoElemLoader(self, argList ):
362 :     #------------------------------------------------------------------------
363 :     wxBeginBusyCursor()
364 :    
365 :     (catalogEntry) = argList
366 :    
367 :     if (catalogEntry.isTerminal() ):
368 : efrank 1.26 ver = self.parent.catVersionValueComboBox.GetValue()
369 :     if ( ver == "None" ):
370 : efrank 1.27 top = RecoElem( catalogEntry.name() )
371 : efrank 1.26 else:
372 :     top = catalogEntry.read( int( ver ) )
373 :    
374 : efrank 1.27 self.to_re.addRecoElemTree(self.parent.rootId, top, catalogEntry)
375 : efrank 1.25 else:
376 :     # current selection is directory. can't load that!
377 :     wxEndBusyCursor()
378 :     return
379 :    
380 :    
381 :     wxEndBusyCursor()
382 :     return
383 :    
384 :     #------------------------------------------------------------------------
385 : efrank 1.27 def DOOMwitPwyLoader(self, pwyName ):
386 : efrank 1.6 #------------------------------------------------------------------------
387 : efrank 1.2 wxBeginBusyCursor()
388 : efrank 1.6 w=WitFactory()
389 :     top= w.getRxnByPwy( pwyName )
390 : efrank 1.27 self.to_re.addRecoElemTree(self.parent.rootId, top)
391 : efrank 1.2 wxEndBusyCursor()
392 :     return

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3