Changeset 436
- Timestamp:
- Sun Jun 8 17:20:50 2008
- Files:
-
- ganttpv/trunk/ORM.py (modified) (diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ganttpv/trunk/ORM.py
r434 r436 1285 1285 fact.Nary += 1 1286 1286 model['Seq'] = fact.Nary 1287 object_type = 'ORMRole' #1287 object_type = 'ORMRole' 1287 1287 elif shape_type == 'ORMSubtypeConnectorShape': # what should this be called? 1288 1288 model['ORMSubtypeID'] = nodeb.TableID … … 1295 1295 model['Table'] = object_type 1296 1296 object_id = Data.Update(model)['ID'] 1297 if shape_type == 'ORMRoleConnectorShape': 1298 AddRole(fact, fact.db.GetObject('ORMRole', object_id)) 1297 1299 1298 1300 graphic = {'Table': 'GraphicObject', 'ProjectID': projectid, 'ReportID': report_object.ID, … … 1331 1333 ## object_id = Data.Update(model)['ID'] 1332 1334 if shape_type == 'ORMFactReadingShape': 1335 model2 = {'Table': 'ORMRoleSequence', 'Seq': 1, 1336 'ProjectID': projectid, 'DateAdded': today} 1337 role_seq_id = Data.Update(model2)['ID'] 1338 model['ORMRoleSequenceID'] = role_seq_id 1339 1333 1340 object_id = Data.Update(model)['ID'] 1334 nodea.Get('Target').ORMFactReadingID = object_id # pointer back 1341 nodea.Target.ORMFactReadingID = object_id # pointer back 1342 1335 1343 elif shape_type == 'ORMRoleNameShape': # is this really needed 1336 1344 object_type = 'ORMRole' … … 2217 2225 class ORMFactTypeShape(ORMBox): 2218 2226 def AdjustEnd(self, other_end, seq=None): 2219 nary = self.Get('Target').Nary 2227 fact_object = self.Target 2228 reading_object = self.Target.ORMFactReading 2229 # I'm not sure whether the fact shape should point to the fact shape or the fact 2230 # reading. I've added these two definitions to each method to make it easier 2231 # to convert to pointing at the reading. 2232 2233 nary = fact_object.Nary 2220 2234 if not seq: 2221 2235 seq = (nary + 1) / 2.0 … … 2238 2252 2239 2253 def GetCenter(self): 2254 fact_object = self.Target 2255 reading_object = self.Target.ORMFactType 2256 2240 2257 x, y = self.GetPos() 2241 2258 y += role_box_height // 2 2242 x += role_box_width * self.Target.Nary // 22259 x += role_box_width * fact_object.Nary // 2 2242 2259 return x, y 2243 2260 2244 2261 def Draw(self, dc): 2245 orm_object = self.Get('Target') 2262 fact_object = self.Target 2263 reading_object = self.Target.ORMFactReading 2264 2246 2265 dc.ClearId(self.dcid) 2247 if not orm_object: return # object has probably been undone2266 if not fact_object or not reading_object: return # object has probably been undone 2247 2266 dc.SetId(self.dcid) 2248 2267 … … 2255 2274 prior_r = self.canvas.pdc.GetIdBounds(self.dcid) 2256 2275 if debug: print "prior rectangle", prior_r 2257 nary = orm_object.Nary or 12276 nary = fact_object.Nary or 1 2257 2276 ## role_box_height = 8 # 12 2258 2277 ## role_box_width = 12 # 12 … … 2280 2299 role_unique = False 2281 2300 role_unique_alethic = False 2282 roles = orm_object.GetList('ORMRole') 2301 # roles = fact_object.GetList('ORMRole') 2302 roles = reading_object.ORMRoleSequence.GetList('ORMRolePosition') 2283 2303 roles.sort(cmp=lambda x,y: cmp(x.Seq, y.Seq)) 2284 2304 for i, r in enumerate(roles): 2285 2305 ## print 'role', r 2286 2306 ## print 'rolelist', self.canvas.rolelist 2287 if r in self.canvas.rolelist: # selection numbers to put in role boxes 2288 seq = self.canvas.rolelist.index(r) 2307 if r.ORMRole in self.canvas.rolelist: # selection numbers to put in role boxes 2308 seq = self.canvas.rolelist.index(r.ORMRole) 2289 2309 dc.SetFont(self.canvas.GetFont()) 2290 2310 dc.SetTextForeground('Black') … … 2293 2313 dc.DrawText(str(seq+1), x + offsetx, y) 2294 2314 2295 if roles[i].Unique in ('a', 'd'): # role unique bars 2315 if roles[i].ORMRole.Unique in ('a', 'd'): # role unique bars 2295 2315 role_unique = True 2296 if roles[i].Unique == 'a': 2316 if roles[i].ORMRole.Unique == 'a': 2296 2316 role_unique_alethic = True 2297 2317 pen = self.canvas.CachedPen(3, 1, wx.SOLID) … … 2312 2332 y1 = y0 2313 2333 for i in range(len(roles)): 2314 if roles[i].UniqueOther in ('ax', 'dx'): 2315 if roles[i].UniqueOther == 'ax': 2334 if roles[i].ORMRole.UniqueOther in ('ax', 'dx'): 2335 if roles[i].ORMRole.UniqueOther == 'ax': 2316 2336 role_spans += 1 2317 2337 pen = self.canvas.CachedPen(3, 1, wx.SOLID) … … 2346 2366 y1 = y0 2347 2367 2348 if not role_unique_alethic and not role_spans and orm_object.Unique:2368 if not role_unique_alethic and not role_spans and fact_object.Unique: 2348 2368 pen = self.canvas.CachedPen(3, 1, wx.SOLID) 2349 2369 dc.SetPen(pen) … … 2364 2384 def Char(self, char): 2365 2385 # if no reading object, create one 2366 2367 orm_object = self.Get('Target') 2386 fact_object = self.Target 2387 reading_object = self.Target.ORMFactReading 2388 2368 2389 if char in ('+', '*'): 2369 if orm_object.Derived == char: 2370 orm_object.Derived = '' 2390 if fact_object.Derived == char: 2391 fact_object.Derived = '' 2371 2392 else: 2372 orm_object.Derived = char2393 fact_object.Derived = char 2372 2393 return 2373 2394 2374 orm_object = orm_object.Get('ORMFactReading') 2375 if orm_object.Reading: 2395 if reading_object.Reading: 2376 2396 if char == '\x08': # this is for windows, cross platform? 2377 orm_object.Reading = orm_object.Reading[:-1]2397 reading_object.Reading = reading_object.Reading[:-1] 2377 2397 elif char == '\r': # this is for windows, cross platform? 2378 orm_object.Reading += '\n'2398 reading_object.Reading += '\n' 2378 2398 else: 2379 orm_object.Reading += char2399 reading_object.Reading += char 2379 2399 else: 2380 2400 if char in '\r\x08': # this is for windows, cross platform? 2381 2401 pass 2382 2402 else: 2383 orm_object.Reading = char2403 reading_object.Reading = char 2383 2403 2384 2404 def GetRole(self, rx, ry): 2385 2405 '''In which role was the fact type clicked?''' 2386 orm_object = self.Get('Target') 2387 roles = orm_object.GetList('ORMRole') 2406 fact_object = self.Target 2407 reading_object = self.Target.ORMFactReading 2408 2409 roles = reading_object.ORMRoleSequence.GetList('ORMRolePosition') 2388 2410 roles.sort(cmp=lambda x,y: cmp(x.Seq, y.Seq)) 2389 2411 if debug: print 'GetRole:', roles … … 2398 2420 if 0 <= rolenum < len(roles): 2399 2421 if debug: print 'rolenum:', rolenum 2400 return roles[rolenum] 2422 return roles[rolenum].ORMRole 2400 2422 return None 2401 2423 2402 2424 def SetSelected(self): 2425 fact_object = self.Target 2426 reading_object = self.Target.ORMFactReading 2427 2403 2428 x, y = self.canvas.clickx, self.canvas.clicky 2404 2429 role = self.GetRole(x, y) 2405 2430 if role and (role not in self.canvas.rolelist): 2406 for r in self.Target.GetList('ORMRole'): 2407 self.canvas.RemoveRole(r) 2431 for r in reading_object.ORMRoleSequence.GetList('ORMRolePosition'): 2432 self.canvas.RemoveRole(r.ORMRole) 2408 2433 self.canvas.AddRole(role) 2409 2434 self._SetInShell('IsSelected', True) … … 2422 2447 def ToggleRole(self): 2423 2448 if debug: print 'toggle role' 2449 fact_object = self.Target 2450 reading_object = self.Target.ORMFactReading 2451 2424 2452 x, y = self.canvas.clickx, self.canvas.clicky 2425 2453 role = self.GetRole(x, y) 2426 2454 if role in self.canvas.rolelist: # already on, turn it off 2427 2455 self.canvas.RemoveRole(role) 2428 return any([ r.ORMFactTypeID == self.Target.ID for r in self.canvas.rolelist ])2456 return any([ r.ORMFactTypeID == fact_object.ID for r in self.canvas.rolelist ]) 2428 2456 else: # not on, turn it on 2429 2457 self.canvas.AddRole(role) … … 2433 2461 def OnTop(self): # must run after this object has a dcid 2434 2462 ## print 'started ontop' 2463 ## fact_object = self.Target 2464 ## reading_object = self.Target.ORMFactReading 2465 2435 2466 followers = self.GetFollowers() 2436 2467 object_type_shape = None … … 2454 2485 self.canvas.SetGraphic(dc, f, newid=True) # create new one 2455 2486 2456 def ResequenceRoles(self):2457 roles = self.GetList('ORMRole').sorted() # renumber remaining roles2458 for i , r in enumerate(roles):2459 role.Seq = i + 12460 2461 2487 def Delete(self): 2488 fact_object = self.Target 2489 reading_object = self.Target.ORMFactReading 2490 2462 2491 if self.InDelete: return 2463 2492 self._SetInShell('InDelete', True) … … 2475 2504 ORMShape.Delete(self) 2476 2505 2506 def DeleteRole(self, role): 2507 '''use this to delete a role from a fact type''' 2508 fact_object = self.Target 2509 reading_object = self.Target.ORMFactReading 2510 2511 DeleteRole(fact_object, role) 2512 2513 def AddRole(self, role): 2514 '''use this to delete a role from a fact type''' 2515 fact_object = self.Target 2516 # reading_object = self.Target.ORMFactReading 2517 2518 AddRole(fact_object, role) 2519 2520 def DeleteRole(fact_object, delete_role): # in a separate function "just in case" 2521 readings = fact_object.GetList('ORMFactReading') 2522 for reading in readings: 2523 roles = reading.ORMRoleSequence.GetList('ORMRolePosition') 2524 roles.sort(cmp=lambda x,y: cmp(x.Seq, y.Seq)) 2525 i = 0 2526 for r in roles: 2527 if r.Role == delete_role: 2528 r.Delete() 2529 else: # renumber remaing role positions 2530 i += 1 2531 r.Seq = i 2532 2533 roles = fact_object.GetList('ORMRole') 2534 roles.sort(cmp=lambda x,y: cmp(x.Seq, y.Seq)) 2535 i = 0 2536 for r in roles: 2537 if r == delete_role: 2538 r.Delete() 2539 else: # renumber remaining roles 2540 i += 1 2541 r.Seq = i 2542 2543 def AddRole(fact_object, add_role): # in a separate function "just in case" 2544 readings = fact_object.GetList('ORMFactReading') 2545 for reading in readings: 2546 roles = reading.ORMRoleSequence.GetList('ORMRolePosition') 2547 newpos = fact_object.db.GetObject('ORMRolePosition') # new 2548 newpos.ORMRoleSequenceID = reading.ORMRoleSequence.ID 2549 newpos.Seq = len(roles) + 1 2550 newpos.ORMRoleID = add_role.ID 2551 2552 if not add_role.ORMFactType == fact_object: # if it hasn't already been added 2553 roles = fact_object.GetList('ORMRole') 2554 add_role.ORMFactTypeID = fact_object.ID 2555 add_role.Seq = len(roles) + 1 2556 2477 2557 class ORMFactReadingShape(ORMFollowText): 2478 2558 def Draw(self, dc): … … 2863 2943 nodeb = self.Get('NodeB') 2864 2944 2865 seq = orm_object.Seq or 1 2945 # connect base on reading sequence, not fact sequence 2946 ## seq = orm_object.Seq or 1 # the old ways was simpler 2947 seq = [ x.Seq for x in nodea.Target.ORMFactReading.ORMRoleSequence.GetList('ORMRolePosition') 2948 if x.ORMRole.ID == orm_object.ID ][0] 2866 2949 endb = nodeb.GetPos() 2867 2950 enda = nodea.AdjustEnd(endb, seq) # nodeA should be a fact shape … … 2923 3006 self._SetInShell('InDelete', True) 2924 3007 if self.Target: 2925 fact = self.Target.ORMFactType 2926 self.Target.Delete() 2927 fact.ResequenceRoles() 3008 ## fact = self.Target.ORMFactType 3009 ## self.Target.Delete() 3010 ## fact.ResequenceRoles() 3011 self.Target.ORMFactType.DeleteRole(self.Target) 2928 3012 self._SetInShell('InDelete', None) 2929 3013 ORMShape.Delete(self) … … 3025 3109 # remove constraint roles that aren't for this fact 3026 3110 fact_roles = [cr.ORMRole for cr in cr_list if cr.ORMRole.ORMFactTypeID == nodea.Target.ID] 3027 seq_numbers = [role.Seq for role in fact_roles] 3111 3112 # seq_numbers = [role.Seq for role in fact_roles] # old way 3113 seq_xref = dict([ (x.ORMRoleID, x.Seq) for x in nodea.Target.ORMFactReading.ORMRoleSequence.GetList('ORMRolePosition') ]) 3114 seq_numbers = [seq_xref[role.ID] for role in fact_roles] 3028 3115 if not seq_numbers: return 3029 3116 … … 3573 3660 3574 3661 def OnPops03(self, event): 3575 '''Reverse role order''' 3662 '''Reverse role order in current reading''' 3575 3662 l = self.pdc.FindObjects(self.popupx, self.popupy, hitradius) 3576 3663 if l: … … 3595 3682 3596 3683 # reverse the order of role connectors 3597 roles = target.GetList('ORMRole') 3684 roles = reading.ORMRoleSequence.GetList('ORMRolePosition') 3685 ## roles.sort(cmp=lambda x,y: cmp(x.Seq, y.Seq)) 3686 ## roles = target.GetList('ORMRole') 3598 3687 sorted_roles = sorted(roles, cmp=lambda x,y: cmp(x.Seq, y.Seq), reverse=True) 3599 3688 for i, x in enumerate(sorted_roles):
