001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011: import datetime
012: import gtk
013: from register import basetree
014:
015:
016:
017: datebase=datetime.date(2005,05,18)
018:
019:
020:
021: def init_boids_model(pages):
022: filteredmodel=basetree.model.filter_new()
023: filteredmodel.set_visible_column(0)
024: for page in pages:
025: page.boids.model=filteredmodel
026: page.boids.view.set_model(filteredmodel)
027:
028: def init_bcfrs_model(page):
029: filteredmodel=basetree.model.filter_new()
030: page.bcfrs.model=filteredmodel
031: page.bcfrs.view.set_model(filteredmodel)
032:
033:
034:
035:
036: def list_details(page,depth,nodetree,rref=None):
037: if rref<>None:
038: filteredmodel=basetree.model.filter_new(root=rref.get_path())
039: filteredmodel.set_visible_column(depth)
040: nodetree.model=filteredmodel
041: nodetree.view.set_model(filteredmodel)
042: if len(filteredmodel):
043: nodetree.view.set_cursor((0,))
044: else:
045: clear_at_depth(page,depth)
046: else:
047: nodetree.model=None
048: nodetree.view.set_model()
049: clear_at_depth(page,depth)
050:
051:
052:
053:
054:
055: def clear_at_depth(page,depth):
056: if depth==0:
057: clear_boat_identification(page)
058: elif depth==1:
059: clear_certification(page)
060: elif depth==2:
061: clear_fleet_configuration(page)
062: else:
063: clear_registration(page)
064:
065: def load_at_depth(page,depth,rref):
066: if depth==0:
067: load_boat_identification(page,rref)
068: elif depth==1:
069: load_certification(page,rref)
070: elif depth==2:
071: load_fleet_configuration(page,rref)
072: else:
073: load_registration(page,rref)
074:
075: def clear_boat_identification(page):
076: assert page.pagename in ["detail"]
077:
078: for frame in page.boid.frames: frame.set_sensitive(False)
079: page.boid.check.set_inconsistent(True)
080: page.boid.treeref=None
081:
082: page.boid.box[0].set_text("")
083: page.boid.box[1].set_text("")
084: page.boid.box[2].set_text("")
085: page.boid.box[3].set_text("")
086:
087: list_details(page,1,page.certs)
088:
089: def load_boat_identification(page,rref):
090: assert page.pagename in ["detail"]
091:
092: path=rref.get_path()
093: depth=len(path)-1
094: assert depth==0
095:
096: page.boid.treeref=None
097:
098: (bx,b1,b2,b3,b4)=basetree.model.get(
099: basetree.model.get_iter(path),
100: 7,10,11,12,13,
101: )
102: page.boid.check.set_active(not bx)
103: page.boid.box[0].set_text(b1)
104: page.boid.box[1].set_text(b2)
105: page.boid.box[2].set_text(b3)
106: page.boid.box[3].set_text(b4)
107:
108: page.boid.treeref=rref
109: page.boid.check.set_inconsistent(False)
110: for frame in page.boid.frames: frame.set_sensitive(True)
111:
112: list_details(page,1,page.certs,rref)
113:
114: def clear_certification(page):
115: assert page.pagename in ["detail"]
116:
117: for frame in page.cert.frames: frame.set_sensitive(False)
118: page.cert.check.set_inconsistent(True)
119: page.cert.treeref=None
120:
121: page.cert.box[0].set_text("")
122: page.cert.radio[0].set_active(True)
123: page.cert.box[1].set_text("")
124: page.cert.box[2].set_text("0")
125:
126: list_details(page,2,page.flcos)
127:
128: def load_certification(page,rref):
129: assert page.pagename in ["browse","detail"]
130:
131: path=rref.get_path()
132: depth=len(path)-1
133: assert depth==1
134:
135: page.cert.treeref=None
136:
137:
138: i=basetree.model.get_iter(path)
139: (cx,c1,c2,c3,c4,c5)=basetree.model.get(i,7,10,11,12,13,14)
140: if page.pagename in ["detail"]:
141: page.cert.check.set_active(not cx)
142: authorityd=dict([
143: (a.upper(),k)
144: for (k,(a,)) in enumerate(page.cert.combo.get_model())
145: ])
146: try:
147: page.cert.combo.set_active(authorityd[c2.upper()])
148: except KeyError:
149: page.cert.box[0].set_text(c2)
150: if c5&2:
151: page.cert.radio[2].set_active(True)
152: elif c5&1:
153: page.cert.radio[1].set_active(True)
154: else:
155: page.cert.radio[0].set_active(True)
156: page.cert.box[0].set_text(c3)
157: try:
158: rating=int(c4)
159: except ValueError:
160: rating=0
161: page.cert.box[1].set_text("")
162: page.cert.box[2].set_text("0")
163: else:
164: page.cert.box[1].set_text(str(rating))
165: page.cert.box[2].set_text(str(rating%3))
166:
167: page.cert.treeref=rref
168: if page.pagename in ["detail"]:
169: page.cert.check.set_inconsistent(False)
170: for frame in page.cert.frames: frame.set_sensitive(True)
171:
172: list_details(page,2,page.flcos,rref)
173:
174: def clear_fleet_configuration(page):
175: assert page.pagename in ["detail"]
176:
177: for frame in page.flco.frames: frame.set_sensitive(False)
178: page.flco.check.set_inconsistent(True)
179: page.flco.treeref=None
180:
181: page.flco.combo[0].set_active(0)
182: page.flco.box[0].set_text("")
183: page.flco.box[1].set_text("")
184: page.flco.box[2].set_text("")
185: page.flco.box[3].set_text("0")
186:
187: list_details(page,3,page.regis)
188:
189: def load_fleet_configuration(page,rref):
190: assert page.pagename in ["detail"]
191:
192: path=rref.get_path()
193: depth=len(path)-1
194: assert depth==2
195:
196: page.flco.treeref=None
197:
198:
199: i=basetree.model.get_iter(path)
200: (fx,f1,f2,f3,f4)=basetree.model.get(i,7,10,11,12,13)
201: if page.pagename in ["detail"]:
202: page.flco.check.set_active(not fx)
203: divisiond=dict([
204: (d.upper(),k)
205: for (k,(d,)) in enumerate(page.flco.combo[0].get_model())
206: ])
207: try:
208: page.flco.combo[0].set_active(divisiond[f1.upper()])
209: except KeyError:
210: pass
211: fleetd=dict([
212: (c.upper(),k)
213: for (k,(c,)) in enumerate(page.flco.combo[1].get_model())
214: ])
215: try:
216: page.flco.combo[1].set_active(fleetd[f2.upper()])
217: except KeyError:
218: page.flco.box[0].set_text(f3)
219: try:
220: deltarating=int(f4)
221: except ValueError:
222: deltarating=0
223: if deltarating:
224: page.flco.box[1].set_text(str(deltarating))
225: else:
226: page.flco.box[1].set_text("")
227: c4=basetree.model.get_value(basetree.model.iter_parent(i),13)
228: try:
229: rating=int(c4)+deltarating
230: except ValueError:
231: rating=0
232: page.flco.box[2].set_text("")
233: page.flco.box[3].set_text("0")
234: else:
235: page.flco.box[2].set_text(str(rating))
236: page.flco.box[3].set_text(str(rating%3))
237:
238: page.flco.treeref=rref
239: page.flco.check.set_inconsistent(False)
240: for frame in page.flco.frames: frame.set_sensitive(True)
241:
242: list_details(page,3,page.regis,rref)
243:
244: def clear_registration(page):
245: assert page.pagename in ["detail"]
246:
247: if page.pagename in ["detail"]:
248: for frame in page.regi.frames: frame.set_sensitive(False)
249: page.regi.check.set_inconsistent(True)
250: page.regi.treeref=None
251:
252: page.regi.combo[0].set_active(0)
253: page.regi.combo[1].set_active(0)
254: page.regi.radio[0].set_active(True)
255:
256:
257: page.regi.box.set_text(datebase.strftime("%a, %Y %b %d"))
258:
259:
260: def load_registration(page,rref):
261: assert page.pagename in ["detail"]
262:
263: path=rref.get_path()
264: depth=len(path)-1
265: assert depth==3
266:
267: page.regi.treeref=None
268:
269:
270: i=basetree.model.get_iter(path)
271: (rx,r1,r2,r3,r4,r5)=basetree.model.get(i,7,10,11,12,13,14)
272: if page.pagename in ["detail"]:
273: page.regi.check.set_active(not rx)
274: (series,race)=(int(r3)-1,int(r4)-1)
275: page.regi.combo[0].set_active(int(r3)-1)
276: page.regi.combo[1].set_active(int(r4)-1)
277:
278:
279: page.regi.radio[int(r5)].set_active(True)
280: date=datebase+datetime.timedelta(weeks=series*6+race)
281: page.regi.box.set_text(date.strftime("%a, %Y %b %d"))
282:
283: title=boid_title_from_input(page)
284: page.boid.label.set_text("'%s'"%(title,))
285:
286:
287: page.regi.treeref=rref
288: page.regi.check.set_inconsistent(False)
289: for frame in page.regi.frames: frame.set_sensitive(True)
290:
291:
292:
293: def boid_title_from_input(page):
294: return ":".join([page.boid.box[k].get_text().strip() for k in [0,1]])
295:
296: def cert_set_valid_authorities(page):
297: pass
298:
299: def cert_title_from_input(page):
300: a,r=[page.cert.box[k].get_text() for k in [0,1]]
301: for k,radiobutton in enumerate(page.cert.radio):
302: if radiobutton.get_active(): break
303: if k==0:
304: if a: return '%s Base %s'%(a,r)
305: else: return ''
306: elif k==1:
307: if a: return '%s JOG %s'%(a,r)
308: else: return ''
309: else:
310: if a: return '%s One-design'%a
311: else: return ''
312:
313: def flco_title_from_input(page):
314: d={
315: 0:'PHRF A',1:'PHRF B',2:'PHRF C',
316: 3:'JOG A',4:'JOG B',5:'Shark',-1:'Unknown',
317: }[page.flco.combo[0].get_active()]
318: k=page.flco.combo[1].get_active()
319: if k<>-1:
320: return {0:'%s:Series',1:'%s:Series Silver',2:'%s:Casual'}[k]%d
321: else:
322: return '%s:%s'%(d,page.flco.box[0].get_text().strip())
323:
324: def regi_title_from_input(page):
325: (series,race)=[page.regi.combo[k].get_active() for k in (0,1)]
326: date=datebase+datetime.timedelta(weeks=series*6+race)
327: page.regi.box.set_text(date.strftime("%a, %Y %b %d"))
328: (snum,rnum)=(series+1,race+1)
329: for k,radiobutton in enumerate(page.regi.radio):
330: if radiobutton.get_active(): break
331: if k==0:
332: return 'Implicit as of S%iR%i'%(snum,rnum)
333: elif k==1:
334: return 'Championship from S%iR%i'%(snum,rnum)
335: elif k==2:
336: return 'Series S%i from R%i'%(snum,rnum)
337: else:
338: return 'Race S%iR%i'%(snum,rnum)
339:
340: