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

Annotation of /PyGUI/Catalogpanel.py

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : efrank 1.24 from wxPython.wx import *
2 :     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
7 :     from RecoElempanel import RecoElempanel
8 :     from CatalogServices.Catalog import Catalog
9 : efrank 1.12
10 :    
11 : hwang 1.21 class Catalogpanel:
12 : efrank 1.4 #------------------------------------------------------------------------
13 : hwang 1.1 def __init__(self, parent):
14 : efrank 1.4 #------------------------------------------------------------------------
15 : efrank 1.13 self.parent = parent
16 :    
17 :     self.to_re = parent.re
18 : efrank 1.2 self.selected = None #remember last selected catalog entry
19 :     #..is used when LOAD button is hit.
20 : efrank 1.4
21 : efrank 1.14 # seedItemId is the wxPython id for the "Seed" node
22 :     # in the catalog tree under which all specific Seed servers
23 :     # are listed
24 :    
25 :     self.seedItemId = None
26 :    
27 : efrank 1.4 self.initCatEvents()
28 :     self.initCatData()
29 : efrank 1.14
30 :    
31 : efrank 1.25 # setup catalog editing menu (right click)
32 :    
33 :     self.catEditMenu = wxMenu()
34 :     self.catEditMkItemId = wxNewId()
35 :     self.catEditMkDirId = wxNewId()
36 :     self.setupCatEditMenu()
37 : efrank 1.14
38 : efrank 1.4 return
39 :    
40 :    
41 :     #------------------------------------------------------------------------
42 :     def initCatEvents(self ):
43 :     #------------------------------------------------------------------------
44 : hwang 1.22
45 : efrank 1.6 EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,
46 :     self.parent.catalog_treeId,
47 :     self.onLeftClick)
48 : efrank 1.14
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 : hwang 1.20
55 : hwang 1.22 EVT_LEFT_DCLICK (self.parent.catalog_tree, self.onLeftDClick)
56 : efrank 1.6
57 : efrank 1.25 EVT_COMBOBOX(self.parent.catVersionValueComboBox,
58 :     self.parent.catVersionValueComboBox.GetId(),
59 :     self.onCatVersionValueComboBox)
60 :    
61 : efrank 1.4 return
62 :    
63 :     #------------------------------------------------------------------------
64 :     def initCatData( self ):
65 :     #------------------------------------------------------------------------
66 : efrank 1.25
67 : efrank 1.26 self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
68 : efrank 1.25 self.loadCatalog()
69 : efrank 1.13
70 : efrank 1.6 self.parent.catalog_tree.Expand( self.parent.catalogRootId)
71 : efrank 1.2 return
72 : efrank 1.4
73 : efrank 1.14 #------------------------------------------------------------------
74 : efrank 1.25 def setupCatEditMenu(self):
75 : efrank 1.14 #------------------------------------------------------------------
76 :    
77 : efrank 1.25 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 : efrank 1.14
87 : efrank 1.4 #------------------------------------------------------------------------
88 : efrank 1.25 def loadCatalog(self):
89 :     #------------------------------------------------------------------------
90 :     wxBeginBusyCursor()
91 :    
92 : efrank 1.26 localSeedServer = "http://localhost/FIG"
93 : efrank 1.25 seedFactory = SeedDataFactory( localSeedServer )
94 :     b = BssFactory()
95 :    
96 :     try:
97 :     Catalog.instance().addDataFactory( seedFactory )
98 :     Catalog.instance().addDataFactory( b )
99 :     except:
100 :     self.parent.error("loadCatalog: error" )
101 :     wxEndBusyCursor()
102 :     return
103 :    
104 : efrank 1.26 ##
105 :     # Handle top/root of catalog/tree specially to avoid "two root"
106 :     # on display problem
107 :     ##
108 :    
109 : efrank 1.25 top = Catalog.instance().getCatalogTop()
110 : efrank 1.26 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 : efrank 1.25
119 :     wxEndBusyCursor()
120 :    
121 :     return
122 :    
123 :     #------------------------------------------------------------------------
124 : efrank 1.26 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 : efrank 1.14 def loadSeedCatalog(self, seedServer ):
153 : efrank 1.12 #------------------------------------------------------------------------
154 : efrank 1.27 """
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 : efrank 1.14 wxBeginBusyCursor()
160 :    
161 : efrank 1.27 # The SeedDataFactory ctor is slow and actually reads a bunch of
162 :     # data from the server
163 :    
164 : efrank 1.25 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 : efrank 1.6 def onLeftClick(self,treeEvent):
183 : efrank 1.4 #------------------------------------------------------------------------
184 : efrank 1.5 item = treeEvent.GetItem()
185 : hwang 1.11
186 : efrank 1.4 catEntryTuple = self.parent.tree_ctr.GetPyData(item)
187 : efrank 1.5 if (catEntryTuple == None ):
188 :     return
189 : efrank 1.6 self.selected = catEntryTuple
190 : efrank 1.25 catEntry = catEntryTuple[1]
191 : efrank 1.4
192 : efrank 1.25 ##
193 :     # update the history information display
194 :     ##
195 :    
196 :     theBox = self.parent.catVersionValueComboBox
197 :     theBox.Clear()
198 :    
199 :     if ( not catEntry.isTerminal() ):
200 : efrank 1.26 self.parent.catPathValue.SetLabel( catEntry.path() + "/" )
201 : efrank 1.25 self.parent.catVersionValueComboBox.SetLabel( "")
202 :     self.parent.catHistoryDateValue.SetLabel( "" )
203 :     self.parent.catHistoryUserValue.SetLabel( "" )
204 :     self.parent.catHistoryCreatedFromValue.SetLabel( "")
205 : efrank 1.26 theBox.SetValue( "" )
206 : efrank 1.25 else:
207 :     versions = catEntry.versions()
208 :     if ( [] == versions ):
209 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[None]" )
210 : efrank 1.26 theBox.SetValue( "None" )
211 : efrank 1.25 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 : efrank 1.4 return
223 : efrank 1.14
224 : efrank 1.25
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 : efrank 1.26 self.parent.catVersionValueComboBox.SetValue( "%s" % (choice) )
235 : efrank 1.25
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 : efrank 1.14 #------------------------------------------------------------------------
249 :     def onRightClickCatalogTree(self, event):
250 :     #------------------------------------------------------------------------
251 : efrank 1.27 """ Fires off the pop-up menu to handle right click events. """
252 : efrank 1.14
253 : efrank 1.27 event.GetEventObject().PopupMenu(self.catEditMenu, event.GetPosition())
254 : efrank 1.14 return
255 :    
256 :     #------------------------------------------------------------------------
257 : efrank 1.25 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 : efrank 1.14 #------------------------------------------------------------------------
300 : efrank 1.25 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 : efrank 1.14 dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
314 :    
315 :     if ( dlg.ShowModal() == wxID_OK):
316 : efrank 1.25 theName = dlg.GetValue()
317 :     if ( theName=="" ): return
318 : efrank 1.14 dlg.Destroy()
319 :     else:
320 :     #didn't get a kid name
321 :     dlg.Destroy()
322 :     return
323 :    
324 : efrank 1.25 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 : efrank 1.14
336 :     return
337 :    
338 : efrank 1.4
339 :     #------------------------------------------------------------------------
340 : hwang 1.22 def onLeftDClick(self, event):
341 : efrank 1.4 #------------------------------------------------------------------------
342 : efrank 1.27 """ Double left-click means, "Load the currently selected item." """
343 :    
344 : efrank 1.6 if ( self.selected == None ):
345 : efrank 1.27 self.parent.error( "You must select a catalog entry before requesting load.")
346 : efrank 1.6 return
347 :    
348 : efrank 1.27 # 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 : efrank 1.6 catEntryTuple = self.selected
353 :     apply( catEntryTuple[0], [catEntryTuple[1]] )
354 :    
355 :     return
356 :    
357 :     #------------------------------------------------------------------------
358 : efrank 1.25 def recoElemLoader(self, argList ):
359 :     #------------------------------------------------------------------------
360 :     wxBeginBusyCursor()
361 :    
362 :     (catalogEntry) = argList
363 :    
364 :     if (catalogEntry.isTerminal() ):
365 : efrank 1.26 ver = self.parent.catVersionValueComboBox.GetValue()
366 :     if ( ver == "None" ):
367 : efrank 1.27 top = RecoElem( catalogEntry.name() )
368 : efrank 1.26 else:
369 :     top = catalogEntry.read( int( ver ) )
370 :    
371 : efrank 1.27 self.to_re.addRecoElemTree(self.parent.rootId, top, catalogEntry)
372 : efrank 1.25 else:
373 :     # current selection is directory. can't load that!
374 :     wxEndBusyCursor()
375 :     return
376 :    
377 :    
378 :     wxEndBusyCursor()
379 :     return
380 :    
381 :     #------------------------------------------------------------------------
382 : efrank 1.27 def DOOMwitPwyLoader(self, pwyName ):
383 : efrank 1.6 #------------------------------------------------------------------------
384 : efrank 1.2 wxBeginBusyCursor()
385 : efrank 1.6 w=WitFactory()
386 :     top= w.getRxnByPwy( pwyName )
387 : efrank 1.27 self.to_re.addRecoElemTree(self.parent.rootId, top)
388 : efrank 1.2 wxEndBusyCursor()
389 :     return

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3