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

Annotation of /PyGUI/Catalogpanel.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.30 - (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 : efrank 1.26 localSeedServer = "http://localhost/FIG"
94 : efrank 1.25 seedFactory = SeedDataFactory( localSeedServer )
95 :     b = BssFactory()
96 : hwang 1.30
97 :     #theConnectionInfo = ["terra.mcs.anl.gov", 3000]
98 : hwang 1.29 #b = BssFactoryProxy(theConnectionInfo)
99 : efrank 1.25
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 : 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 : efrank 1.14 def loadSeedCatalog(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 : efrank 1.26 self.parent.catPathValue.SetLabel( catEntry.path() + "/" )
205 : efrank 1.25 self.parent.catVersionValueComboBox.SetLabel( "")
206 :     self.parent.catHistoryDateValue.SetLabel( "" )
207 :     self.parent.catHistoryUserValue.SetLabel( "" )
208 :     self.parent.catHistoryCreatedFromValue.SetLabel( "")
209 : efrank 1.26 theBox.SetValue( "" )
210 : efrank 1.25 else:
211 :     versions = catEntry.versions()
212 :     if ( [] == versions ):
213 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[None]" )
214 : efrank 1.26 theBox.SetValue( "None" )
215 : efrank 1.25 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 : efrank 1.4 return
227 : efrank 1.14
228 : efrank 1.25
229 :     #------------------------------------------------------------------------
230 :     def onCatVersionValueComboBox(self, event):
231 :     #------------------------------------------------------------------------
232 :     """
233 :     Handles activity in combo box where user sets Verion to use
234 :     """
235 : hwang 1.30
236 : efrank 1.25 # get the value selected in the combo box.
237 :     choice = event.GetString()
238 : efrank 1.26 self.parent.catVersionValueComboBox.SetValue( "%s" % (choice) )
239 : efrank 1.25
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 : efrank 1.14 #------------------------------------------------------------------------
253 :     def onRightClickCatalogTree(self, event):
254 :     #------------------------------------------------------------------------
255 : efrank 1.27 """ Fires off the pop-up menu to handle right click events. """
256 : efrank 1.14
257 : efrank 1.27 event.GetEventObject().PopupMenu(self.catEditMenu, event.GetPosition())
258 : efrank 1.14 return
259 :    
260 :     #------------------------------------------------------------------------
261 : efrank 1.25 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 : efrank 1.14 #------------------------------------------------------------------------
304 : efrank 1.25 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 : efrank 1.14 dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
318 :    
319 :     if ( dlg.ShowModal() == wxID_OK):
320 : efrank 1.25 theName = dlg.GetValue()
321 :     if ( theName=="" ): return
322 : efrank 1.14 dlg.Destroy()
323 :     else:
324 :     #didn't get a kid name
325 :     dlg.Destroy()
326 :     return
327 :    
328 : efrank 1.25 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 : efrank 1.14
340 :     return
341 :    
342 : efrank 1.4
343 :     #------------------------------------------------------------------------
344 : hwang 1.22 def onLeftDClick(self, event):
345 : efrank 1.4 #------------------------------------------------------------------------
346 : efrank 1.27 """ Double left-click means, "Load the currently selected item." """
347 :    
348 : efrank 1.6 if ( self.selected == None ):
349 : efrank 1.27 self.parent.error( "You must select a catalog entry before requesting load.")
350 : efrank 1.6 return
351 :    
352 : efrank 1.27 # 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 : efrank 1.6 catEntryTuple = self.selected
357 :     apply( catEntryTuple[0], [catEntryTuple[1]] )
358 :    
359 :     return
360 :    
361 :     #------------------------------------------------------------------------
362 : efrank 1.25 def recoElemLoader(self, argList ):
363 :     #------------------------------------------------------------------------
364 :     wxBeginBusyCursor()
365 :    
366 :     (catalogEntry) = argList
367 :    
368 :     if (catalogEntry.isTerminal() ):
369 : efrank 1.26 ver = self.parent.catVersionValueComboBox.GetValue()
370 :     if ( ver == "None" ):
371 : efrank 1.27 top = RecoElem( catalogEntry.name() )
372 : efrank 1.26 else:
373 :     top = catalogEntry.read( int( ver ) )
374 :    
375 : efrank 1.27 self.to_re.addRecoElemTree(self.parent.rootId, top, catalogEntry)
376 : efrank 1.25 else:
377 :     # current selection is directory. can't load that!
378 :     wxEndBusyCursor()
379 :     return
380 :    
381 :    
382 :     wxEndBusyCursor()
383 :     return
384 :    
385 :     #------------------------------------------------------------------------
386 : efrank 1.27 def DOOMwitPwyLoader(self, pwyName ):
387 : efrank 1.6 #------------------------------------------------------------------------
388 : efrank 1.2 wxBeginBusyCursor()
389 : efrank 1.6 w=WitFactory()
390 :     top= w.getRxnByPwy( pwyName )
391 : efrank 1.27 self.to_re.addRecoElemTree(self.parent.rootId, top)
392 : efrank 1.2 wxEndBusyCursor()
393 :     return

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3