001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011: import datetime
012: import gtk
013: from register import basetree,dataframes,validdata
014:
015:
016:
017:
018:
019:
020:
021: def on_browse_boids_cursor_changed(tree,page):
022: assert page.pagename in ["quickform","detail"] and tree==page.boids.view
023: (r,c)=tree.get_cursor()
024: rref=gtk.TreeRowReference(
025: basetree.model,page.bcfrs.model.convert_path_to_child_path(r),
026: )
027: if rref<>None:
028: r=page.bcfrs.model.convert_child_path_to_path(rref.get_path())
029: page.bcfrs.view.collapse_all()
030: page.bcfrs.view.expand_to_path(r)
031: page.bcfrs.view.expand_row(r,True)
032: page.bcfrs.view.set_cursor(r)
033: page.bcfrs.view.scroll_to_cell(r,None,True,0.05,0.0)
034: else:
035: page.bcfrs.view.get_selection().unselect_all()
036:
037:
038: def on_detail_cursor_changed(tree,page,depth,nodetree,nodeframe):
039: assert page.pagename=="detail" and tree==nodetree.view
040: (r,c)=tree.get_cursor()
041: rref=gtk.TreeRowReference(
042: basetree.model,nodetree.model.convert_path_to_child_path(r),
043: )
044: dataframes.load_at_depth(page,depth,rref)
045:
046: def on_bcfrs_cursor_changed(tree,page):
047: assert page.pagename=="detail" and tree==page.bcfrs.view
048: (r,c)=tree.get_cursor()
049: depth=page.bcfrs.model.get_value(page.bcfrs.model.get_iter(r),4)
050: rref=gtk.TreeRowReference(
051: basetree.model,page.bcfrs.model.convert_path_to_child_path(r),
052: )
053: dataframes.load_at_depth(page,depth,rref)
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066:
067:
068:
069:
070: def on_boid_check_toggled(box,page):
071: assert page.pagename in ["detail"]
072: rref=page.boid.treeref
073: if rref<>None:
074: baserow=basetree.model[rref.get_path()]
075: baserow[7]=not page.boid.check.get_active()
076:
077: def on_boid_newbutton_clicked(button,page):
078: assert page.pagename in ["detail"]
079: try:
080: position=page.boid.treeref.get_path()[-1]
081: except AttributeError:
082: position=page.boids.model.iter_n_children(None)
083: validdata.new_boid(position)
084: page.boids.view.set_cursor(position)
085:
086: def on_boid_entrybox_changed(box,page,k):
087: assert page.pagename in ["quickform","detail"] and box==page.boid.box[k]
088: if k&-2==0:
089: title=dataframes.boid_title_from_input(page)
090: page.boid.label.set_text("'%s'"%(title,))
091:
092: if k==2:
093: validdata.limit_cert(page,page.boid.box[k].get_text().strip())
094:
095: rref=page.boid.treeref
096: if rref<>None:
097: baserow=basetree.model[rref.get_path()]
098: if k&-2==0:
099: baserow[9]="Boat Identification: '%s'"%(title,)
100: baserow[10+k]=page.boid.box[k].get_text().strip()
101:
102:
103:
104:
105:
106:
107:
108: def on_cert_check_toggled(box,page):
109: assert page.pagename in ["detail"]
110: rref=page.cert.treeref
111: if rref<>None:
112: baserow=basetree.model[rref.get_path()]
113: baserow[7]=not page.cert.check.get_active()
114:
115: def on_cert_newbutton_clicked(button,page):
116: assert page.pagename in ["detail"]
117: try:
118: position=page.cert.treeref.get_path()[-1]
119: except AttributeError:
120: position=page.certs.model.iter_n_children(None)
121: validdata.new_cert(page.boid.treeref.get_path(),position)
122: page.certs.view.set_cursor(position)
123:
124: def on_cert_box_changed(box,page,k):
125: assert page.pagename in ["detail"] and box==page.cert.box[k]
126: if k==0:
127: authority=page.cert.box[0].get_text()
128: title=dataframes.cert_title_from_input(page)
129: page.cert.label.set_text("'%s'"%(title,))
130:
131: authorityd=dict([
132: (a.upper(),j)
133: for (j,(a,)) in enumerate(page.cert.combo.get_model())
134: ])
135: a=authority.upper()
136: try:
137: page.cert.combo.set_active(authorityd[a])
138: except KeyError:
139: pass
140: if a in page.parent.cert.allhandicapped:
141: page.cert.radio[0].set_sensitive(True)
142: page.cert.radio[1].set_sensitive(True)
143: page.cert.radio[2].set_sensitive(False)
144: elif a in page.parent.cert.allonedesign:
145: page.cert.radio[0].set_sensitive(False)
146: page.cert.radio[1].set_sensitive(False)
147: page.cert.radio[2].set_sensitive(True)
148: else:
149: page.cert.radio[0].set_sensitive(True)
150: page.cert.radio[1].set_sensitive(True)
151: page.cert.radio[2].set_sensitive(True)
152: else:
153: rating=page.cert.box[1].get_text()
154: title=dataframes.cert_title_from_input(page)
155: page.cert.label.set_text("'%s'"%(title,))
156: try:
157: page.cert.box[2].set_text(str(int(rating)%3))
158: except ValueError:
159: page.cert.box[2].set_text("0")
160:
161: rref=page.cert.treeref
162: if rref<>None:
163: baserow=basetree.model[rref.get_path()]
164: if k==0:
165: baserow[9]="Certification: '%s'"%(title,)
166: baserow[11]=title
167: baserow[12]=authority
168: elif k==1:
169: baserow[11]=title
170: baserow[13]=rating
171:
172: def on_cert_radiobutton_toggled(radiobutton,page,k):
173: assert page.pagename in ["detail"] and radiobutton==page.cert.radio[k]
174: if radiobutton.get_active():
175: title=dataframes.cert_title_from_input(page)
176: page.cert.label.set_text("'%s'"%(title,))
177:
178: rref=page.cert.treeref
179: if rref<>None:
180: baserow=basetree.model[rref.get_path()]
181: baserow[9]="Certification: '%s'"%(title,)
182: baserow[11]=title
183: baserow[14]=k
184:
185: def on_flco_check_toggled(box,page):
186: assert page.pagename in ["detail"]
187: rref=page.flco.treeref
188: if rref<>None:
189: baserow=basetree.model[rref.get_path()]
190: baserow[7]=not page.flco.check.get_active()
191:
192: def on_flco_newbutton_clicked(button,page):
193: assert page.pagename in ["detail"]
194: try:
195: position=page.flco.treeref.get_path()[-1]
196: except AttributeError:
197: position=page.flcos.model.iter_n_children(None)
198: validdata.new_flco(page.cert.treeref.get_path(),position)
199: page.flcos.view.set_cursor(position)
200:
201: def on_flco_combobox_changed(box,page,k):
202: assert page.pagename in ["detail"] and k==0 and box==page.flco.combo[k]
203: title=dataframes.flco_title_from_input(page)
204: page.flco.label.set_text("'%s'"%(title,))
205:
206: rref=page.flco.treeref
207: if rref<>None:
208: baserow=basetree.model[rref.get_path()]
209: division={
210: 0:'PHRF A',1:'PHRF B',2:'PHRF C',
211: 3:'JOG A',4:'JOG B',5:'Shark',-1:'Unknown',
212: }[page.flco.combo[0].get_active()]
213: baserow[9]="Fleet Configuration: '%s'"%(title,)
214: baserow[10]=division
215:
216: def on_flco_entrybox_changed(box,page,k):
217: assert page.pagename in ["detail"] and box==page.flco.box[k]
218: if k==0:
219: coname=page.flco.box[k].get_text()
220: title=dataframes.flco_title_from_input(page)
221: page.flco.label.set_text("'%s'"%(title,))
222:
223: fleetd=dict([
224: (c.upper(),j)
225: for (j,(c,))
226: in enumerate(page.flco.combo[0].get_model())
227: ])
228: try:
229: page.flco.combo[1].set_active(fleetd[coname.upper()])
230: except KeyError:
231: pass
232: else:
233: try:
234: deltarating=int(page.flco.box[1].get_text())
235: except ValueError:
236: deltarating=0
237:
238: rref=page.flco.treeref
239: if rref<>None:
240: path=rref.get_path()
241: baserow=basetree.model[path]
242: if k==0:
243: baserow[9]="Fleet Configuration: '%s'"%(title,)
244: baserow[11]=coname
245:
246: else:
247: baserow[13]=str(deltarating)
248: c4=basetree.model[path[:2]][13]
249: try:
250: rating=int(c4)+deltarating
251: except ValueError:
252: rating=0
253: page.flco.box[2].set_text("")
254: page.flco.box[3].set_text("0")
255: else:
256: page.flco.box[2].set_text(str(rating))
257: page.flco.box[3].set_text(str(rating%3))
258:
259: def on_regi_check_toggled(box,page):
260: assert page.pagename in ["detail"]
261: rref=page.regi.treeref
262: if rref<>None:
263: baserow=basetree.model[rref.get_path()]
264: baserow[7]=not page.regi.check.get_active()
265:
266: def on_regi_newbutton_clicked(button,page):
267: assert page.pagename in ["detail"]
268: try:
269: position=page.regi.treeref.get_path()[-1]
270: except AttributeError:
271: position=page.regis.model.iter_n_children(None)
272: validdata.new_regi(page.flco.treeref.get_path(),position)
273: page.regis.view.set_cursor(position)
274:
275: def on_regi_radiobutton_toggled(radiobutton,page,k):
276: assert page.pagename in ["detail"] \
277: and radiobutton==page.regi.radio[k]
278: if radiobutton.get_active():
279: title=dataframes.regi_title_from_input(page)
280: page.regi.label.set_text("'%s'"%(title,))
281: rref=page.regi.treeref
282: if rref<>None:
283: basetree.model.set(
284: basetree.model.get_iter(rref.get_path()),
285: 9,"Registration: '%s'"%(title,),
286: 11,title,
287: 14,int(k),
288: )
289:
290: def on_regi_combobox_changed(combobox,page,k):
291: assert page.pagename in ["detail"] and combobox==page.regi.combo[k]
292: title=dataframes.regi_title_from_input(page)
293: page.regi.label.set_text("'%s'"%(title,))
294: rref=page.regi.treeref
295: if rref<>None:
296: r=combobox.get_active()
297: basetree.model.set(
298: basetree.model.get_iter(rref.get_path()),
299: 9,"Registration: '%s'"%(title,),
300: 11,title,
301: 12+k,str(r+1)
302: )
303:
304:
305:
306: def on_recheck_clicked(button):
307: def rechecker(model,path,i):
308: basetree.model.set_value(i,7,False)
309: basetree.model.foreach(rechecker)
310:
311: def on_sortbutton_clicked(button,window):
312: pass
313:
314: def on_mergebutton_clicked(button,window):
315: pass
316:
317: def on_purgebutton_clicked(button,window):
318: def recursive_purge(i):
319: basepath=basetree.model.get_path(i)
320: if basetree.model.get_value(i,7):
321: basetree.model.remove(i)
322: try:
323: return basetree.model.get_iter(basepath)
324: except ValueError:
325: return None
326: else:
327: j=basetree.model.iter_children(i)
328: while j:
329: j=recursive_purge(j)
330: i=basetree.model.get_iter(basepath)
331: return basetree.model.iter_next(i)
332:
333: j=basetree.model.get_iter_first()
334: while j:
335: j=recursive_purge(j)
336:
337: for page in window.page.values():
338: for (frame,clearer) in {
339: page.boid:dataframes.clear_boat_identification,
340: page.cert:dataframes.clear_certification,
341: page.flco:dataframes.clear_fleet_configuration,
342: page.regi:dataframes.clear_registration,
343: }.items():
344: try:
345: if frame.treeref and not frame.treeref.valid():
346: clearer(page)
347: except AttributeError:
348: pass
349:
350: