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

Annotation of /PyGUI/Catalogpanel.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.35 - (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 : efrank 1.34 ##
97 :     # DO NOT CREATE BssFactory() HERE ANY LONGER
98 :     # See main progam, ModelEditor
99 :     ##
100 : efrank 1.25
101 : efrank 1.26 ##
102 :     # Handle top/root of catalog/tree specially to avoid "two root"
103 :     # on display problem
104 :     ##
105 :    
106 : efrank 1.25 top = Catalog.instance().getCatalogTop()
107 : efrank 1.26 parentTree = self.parent.catalog_tree
108 :     parentTree.SetPyData( self.parent.catalogRootId,
109 :     (self.recoElemLoader, top, self.parent.catalogRootId) )
110 :    
111 :     for e in top.entries():
112 :     self.recurseCatalog( e, parentTree, self.parent.catalogRootId)
113 :    
114 :     parentTree.SortChildren( self.parent.catalogRootId)
115 : efrank 1.25
116 :     wxEndBusyCursor()
117 :    
118 :     return
119 :    
120 :     #------------------------------------------------------------------------
121 : efrank 1.26 def recurseCatalog( self, catEntry, parentTree, parentItemId):
122 :     #------------------------------------------------------------------------
123 :     """
124 :     Create a new item under parentItemId in wxTree, parentTree. Associate
125 :     catEntry with it. If catEntry has entries, recurse on them.
126 :     """
127 :    
128 :     if ( catEntry.isTerminal() ):
129 :     displayedName = catEntry.name()
130 :     else:
131 :     displayedName = catEntry.name() + "/"
132 :    
133 :     newItemId=parentTree.AppendItem(parentItemId, displayedName )
134 :    
135 :     # associate data needed to manipulate the catEntry
136 :    
137 :     parentTree.SetPyData( newItemId,
138 :     (self.recoElemLoader, catEntry, newItemId ) )
139 :    
140 :     if ( not catEntry.isTerminal() ):
141 :     for e in catEntry.entries():
142 :     self.recurseCatalog( e, parentTree, newItemId)
143 :    
144 :     parentTree.SortChildren( newItemId )
145 :    
146 :     return
147 :    
148 :     #------------------------------------------------------------------------
149 : sheradon 1.32 def DOOMloadSeedCatalog(self, seedServer ):
150 : efrank 1.12 #------------------------------------------------------------------------
151 : efrank 1.27 """
152 :     This adds a Seed instance to the catalog. It is called from the
153 :     MainMenuBar when Data->Add Seed Instance is called, for example.
154 :     """
155 :    
156 : efrank 1.14 wxBeginBusyCursor()
157 :    
158 : efrank 1.27 # The SeedDataFactory ctor is slow and actually reads a bunch of
159 :     # data from the server
160 :    
161 : efrank 1.25 seedFactory = SeedDataFactory( seedServer )
162 :    
163 :     # add it to the list in the catalog
164 :     try:
165 :     Catalog.instance().addDataFactory( seedFactory )
166 :     except:
167 :     self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
168 :     wxEndBusyCursor()
169 :     return
170 :    
171 :     top = seedFactory.getCatalogTop()
172 :     self.recurseCatalog( top, self.parent.catalog_tree, self.parent.catalogRootId)
173 :    
174 :     wxEndBusyCursor()
175 :    
176 :     return
177 :    
178 :     #------------------------------------------------------------------------
179 : efrank 1.6 def onLeftClick(self,treeEvent):
180 : efrank 1.4 #------------------------------------------------------------------------
181 : efrank 1.5 item = treeEvent.GetItem()
182 : hwang 1.11
183 : efrank 1.4 catEntryTuple = self.parent.tree_ctr.GetPyData(item)
184 : efrank 1.5 if (catEntryTuple == None ):
185 :     return
186 : efrank 1.6 self.selected = catEntryTuple
187 : efrank 1.25 catEntry = catEntryTuple[1]
188 : efrank 1.4
189 : efrank 1.25 ##
190 :     # update the history information display
191 :     ##
192 :    
193 :     theBox = self.parent.catVersionValueComboBox
194 :     theBox.Clear()
195 :    
196 :     if ( not catEntry.isTerminal() ):
197 : hwang 1.31
198 :     self.parent.catPathValue.SetValue( catEntry.path() + "/" )
199 : efrank 1.25 self.parent.catVersionValueComboBox.SetLabel( "")
200 :     self.parent.catHistoryDateValue.SetLabel( "" )
201 :     self.parent.catHistoryUserValue.SetLabel( "" )
202 :     self.parent.catHistoryCreatedFromValue.SetLabel( "")
203 : efrank 1.26 theBox.SetValue( "" )
204 : efrank 1.25 else:
205 :     versions = catEntry.versions()
206 :     if ( [] == versions ):
207 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[None]" )
208 : efrank 1.26 theBox.SetValue( "None" )
209 : efrank 1.25 else:
210 :     maxVersion = max( versions )
211 :     for v in versions:
212 :     theBox.Append( "%s" % (v ) )
213 :     theBox.SetValue( "%s" % (maxVersion) )
214 :     self.parent.catPathValue.SetLabel(catEntry.path()+";[%s]" % (maxVersion))
215 :     #
216 :     self.parent.catHistoryDateValue.SetLabel( "no date info yet" )
217 :     self.parent.catHistoryUserValue.SetLabel( "no user info yet" )
218 :     self.parent.catHistoryCreatedFromValue.SetLabel( "no history info yet" )
219 :    
220 : efrank 1.4 return
221 : efrank 1.14
222 : efrank 1.25
223 :     #------------------------------------------------------------------------
224 :     def onCatVersionValueComboBox(self, event):
225 :     #------------------------------------------------------------------------
226 :     """
227 :     Handles activity in combo box where user sets Verion to use
228 :     """
229 : hwang 1.30
230 : efrank 1.25 # get the value selected in the combo box.
231 :     choice = event.GetString()
232 : efrank 1.26 self.parent.catVersionValueComboBox.SetValue( "%s" % (choice) )
233 : efrank 1.25
234 :     # the operation is interpreted relative to the currently selected
235 :     # catalogEntry. find what that is.
236 :    
237 :     catEntry = self.selected[1]
238 :    
239 :     # update stuff
240 :     #version = self.parent.catVersionValueComboBox.GetValue()
241 :     self.parent.catPathValue.SetLabel( catEntry.path()+";[%s]" % (choice) )
242 :    
243 :     return
244 :    
245 :    
246 : efrank 1.14 #------------------------------------------------------------------------
247 :     def onRightClickCatalogTree(self, event):
248 :     #------------------------------------------------------------------------
249 : efrank 1.27 """ Fires off the pop-up menu to handle right click events. """
250 : efrank 1.14
251 : efrank 1.27 event.GetEventObject().PopupMenu(self.catEditMenu, event.GetPosition())
252 : efrank 1.14 return
253 :    
254 :     #------------------------------------------------------------------------
255 : efrank 1.25 def doCatEditMkDir( self, event ):
256 :     #------------------------------------------------------------------------
257 :     if (None == self.selected):
258 :     self.parent.error( "A selection is required first.")
259 :     return
260 :    
261 :     catEntryTuple = self.selected
262 :     catEntry = catEntryTuple[1]
263 :     treeItemId = catEntryTuple[2]
264 :    
265 :     if (catEntry.isTerminal()):
266 :     self.parent.error("Directories can not be added to items.")
267 :     return
268 :    
269 :     prompt = "New catalog directory name:"
270 :     dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)
271 :    
272 :     if ( dlg.ShowModal() == wxID_OK):
273 :     theName = dlg.GetValue()
274 :     if ( theName=="" ): return
275 :     dlg.Destroy()
276 :     else:
277 :     #didn't get a kid name
278 :     dlg.Destroy()
279 :     return
280 :    
281 : efrank 1.35 #try:
282 :     if (1):
283 : efrank 1.25 newCatEntry=catEntry.mkDir( theName )
284 :     parentTree=self.parent.catalog_tree
285 :     newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
286 :     parentTree.SetPyData( newItemId,
287 :     (self.recoElemLoader, newCatEntry, newItemId ) )
288 :    
289 :     parentTree.SortChildren( treeItemId )
290 : efrank 1.35 else:
291 :     #except:
292 : efrank 1.25 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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3