Changeset 465
- Timestamp:
- Sat Jun 28 19:22:39 2008
- Files:
-
- ganttpv/trunk/ORM.py (modified) (diff)
- ganttpv/trunk/Data.py (modified) (diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ganttpv/trunk/ORM.py
r464 r465 388 388 pass 389 389 # if debug: print "char", ord(char), "'", char, "'" 390 390 391 def MoveCursor(self, keycode): 392 if keycode in (wx.WXK_LEFT, wx.WXK_RIGHT): 393 cursor = self.Cursor 394 if cursor != None: 395 if keycode == wx.WXK_LEFT: 396 cursor -= 1 397 else: 398 cursor += 1 399 self._SetInShell('Cursor', cursor) 400 401 def InsertCursor(self, text): 402 cursor = self.Cursor 403 if cursor == None: 404 cursor = len(text) 405 self._SetInShell('Cursor', cursor) 406 cursor = max(0, min(len(text), cursor)) 407 self._SetInShell('Cursor', cursor) 408 return text[:cursor] + '|' + text[cursor:] 409 410 def ApplyChar(self, char, text): 411 if char == '\r': char = '\n' 412 cursor = self.Cursor 413 if text: 414 if cursor == None: cursor = len(text) 415 if char == '\x08': # this is for windows, cross platform? 416 if cursor > 0: 417 text = text[:cursor-1] + text[cursor:] # delete 1 char 418 self._SetInShell('Cursor', cursor-1) 419 else: 420 text = text[:cursor] + char + text[cursor:] 421 self._SetInShell('Cursor', cursor+1) 422 else: 423 if char in '\r\x08': # this is for windows, cross platform? 424 pass 425 else: 426 text = char 427 self._SetInShell('Cursor', 1) 428 return text 429 391 430 def SetSelected(self): 392 431 self._SetInShell('IsSelected', True) 393 432 self._SetInShell('CharMode', '') 433 ## self._SetInShell('Cursor', None) 394 434 def ClearSelected(self): 395 435 self._SetInShell('IsSelected', False) … … 543 583 # text = orm_object.Text or 'empty note' 544 584 text = orm_object.Name or 'Default Name' 585 word = orm_object.RefMode or '' 586 if self.IsSelected and self.dcid == self.canvas.keyboard_target_dcid: 587 if self.CharMode == '': 588 text = self.InsertCursor(text) # add cursor to text for display 589 else: 590 word = self.InsertCursor(word) 591 545 592 if orm_object.Independent: 546 593 text += " !" … … 550 597 text = '"' + text + '"' 551 598 lines = text.splitlines() 552 word = orm_object.RefMode or ''553 599 if word: 554 600 word = '(' + word + ')' … … 647 693 648 694 if self.CharMode == '': 649 if orm_object.Name: 650 if char == '\x08': # this is for windows, cross platform? 651 orm_object.Name = orm_object.Name[:-1] 652 elif char == '\r': # this is for windows, cross platform? 653 orm_object.Name += '\n' 654 else: 655 orm_object.Name += char 656 else: 657 if char in '\r\x08': # this is for windows, cross platform? 658 pass 659 else: 660 orm_object.Name = char 695 orm_object.Name = self.ApplyChar(char, orm_object.Name) 696 ## if orm_object.Name: 697 ## if char == '\x08': # this is for windows, cross platform? 698 ## orm_object.Name = orm_object.Name[:-1] 699 ## elif char == '\r': # this is for windows, cross platform? 700 ## orm_object.Name += '\n' 701 ## else: 702 ## orm_object.Name += char 703 ## else: 704 ## if char in '\r\x08': # this is for windows, cross platform? 705 ## pass 706 ## else: 707 ## orm_object.Name = char 661 708 elif self.CharMode == 'refmode': 662 if orm_object.RefMode: 663 if char == '\x08': # this is for windows, cross platform? 664 orm_object.RefMode = orm_object.RefMode[:-1] 665 elif char == '\r': # this is for windows, cross platform? 666 orm_object.RefMode += '\n' 667 else: 668 orm_object.RefMode += char 669 else: 670 if char in '\r\x08': # this is for windows, cross platform? 671 pass 672 else: 673 orm_object.RefMode = char 709 orm_object.RefMode = self.ApplyChar(char, orm_object.RefMode) 710 ## if orm_object.RefMode: 711 ## if char == '\x08': # this is for windows, cross platform? 712 ## orm_object.RefMode = orm_object.RefMode[:-1] 713 ## elif char == '\r': # this is for windows, cross platform? 714 ## orm_object.RefMode += '\n' 715 ## else: 716 ## orm_object.RefMode += char 717 ## else: 718 ## if char in '\r\x08': # this is for windows, cross platform? 719 ## pass 720 ## else: 721 ## orm_object.RefMode = char 674 722 675 723 def IsUIDeletable(self): # allow user to delete this graphic object … … 1146 1194 orm_object.Name = char 1147 1195 1196 def IsUIDeletable(self): # allow user to delete this graphic object 1197 return True 1198 1199 def Delete(self): 1200 ORMShape.Delete(self) 1201 1148 1202 class ORMNoteShape(ORMBox): 1149 1203 def Draw(self, dc): … … 1158 1212 1159 1213 text = orm_object.Text or 'empty note' 1214 if self.IsSelected and self.dcid == self.canvas.keyboard_target_dcid: 1215 text = self.InsertCursor(text) # add cursor to text for display 1216 1160 1217 lines = text.splitlines() 1161 1218 sizes = [ self.canvas.GetFullTextExtent(line)[0:2] for line in lines ] # pull out only w and h … … 1198 1255 if debug: print "char", ord(char), "'", char, "'" 1199 1256 orm_object = self.Get('Target') 1200 if orm_object.Text: 1201 if char == '\x08': # this is for windows, cross platform? 1202 orm_object.Text = orm_object.Text[:-1] 1203 elif char == '\r': # this is for windows, cross platform? 1204 orm_object.Text += '\n' 1205 else: 1206 orm_object.Text += char 1207 else: 1208 if char in '\r\x08': # this is for windows, cross platform? 1209 pass 1210 else: 1211 orm_object.Text = char 1257 orm_object.Text = self.ApplyChar(char, orm_object.Text) 1258 ## if orm_object.Text: 1259 ## if char == '\x08': # this is for windows, cross platform? 1260 ## orm_object.Text = orm_object.Text[:-1] 1261 ## elif char == '\r': # this is for windows, cross platform? 1262 ## orm_object.Text += '\n' 1263 ## else: 1264 ## orm_object.Text += char 1265 ## else: 1266 ## if char in '\r\x08': # this is for windows, cross platform? 1267 ## pass 1268 ## else: 1269 ## orm_object.Text = char 1212 1270 1213 1271 def IsUIDeletable(self): # allow user to delete this graphic object … … 1576 1634 dc.SetIdBounds(self.dcid,r) 1577 1635 1578 ## def IsUIDeletable(self): # allow user to delete this graphic object 1579 ## return True 1580 ## or handle via menu command 1636 def IsUIDeletable(self): # allow user to delete this graphic object 1637 return True 1638 1639 def Delete(self): 1640 if self.InDelete: return # prevent loops 1641 self._SetInShell('InDelete', True) 1642 if self.Target: 1643 self.Target.Delete() 1644 self._SetInShell('InDelete', None) 1645 ORMShape.Delete(self) 1581 1646 1582 1647 class ORMConstraintConnectorShape(ORMConnector): … … 1957 2022 menu.AppendCheckItem(self.popsID13, "Set Role as Mandatory (Deontic)") 1958 2023 menu.Check(self.popsID13, (role.Mandatory == 'd')) 2024 menu.AppendSeparator() 2025 menu.AppendCheckItem(self.popsID19, "Show Role Name") 2026 menu.Check(self.popsID19, bool(self.FindRoleNameShape(role))) 1959 2027 1960 2028 def ConstraintMenu(self, constraint, menu): … … 2029 2097 self.popsID17 = wx.NewId() 2030 2098 self.popsID18 = wx.NewId() 2099 self.popsID19 = wx.NewId() 2031 2100 self.popsID20 = wx.NewId() 2032 2101 self.popsID21 = wx.NewId() … … 2065 2134 self.Bind(wx.EVT_MENU, self.OnPops17, id=self.popsID17) 2066 2135 self.Bind(wx.EVT_MENU, self.OnPops18, id=self.popsID18) 2136 self.Bind(wx.EVT_MENU, self.OnPops19, id=self.popsID19) 2067 2137 self.Bind(wx.EVT_MENU, self.OnPops20, id=self.popsID20) 2068 2138 self.Bind(wx.EVT_MENU, self.OnPops21, id=self.popsID21) … … 2324 2394 self.RedrawID(shape.Get('NodeA').dcid) 2325 2395 2396 def FindRoleNameShape(self, role): 2397 return [ x for x in self.Report.GetGraphicList('ORMRoleNameShape') 2398 if x.Target is role ] 2399 2400 def FindRoleConnectorShape(self, role): 2401 return [ x for x in self.Report.GetGraphicList('ORMRoleConnectorShape') 2402 if x.Target is role ] 2403 2404 def RoleNameShowHide(self, event, show, undo_msg): 2405 # show is not currently used; this will toggle the current state 2406 l = self.pdc.FindObjects(self.popupx, self.popupy, hitradius) 2407 if l: 2408 shape = self.dcid_to_shape_xref.get(l[0]) 2409 # find role 2410 if shape.Subtype == 'ORMFactTypeShape': 2411 role = shape.GetRole(self.popupx, self.popupy) 2412 else: # role connector 2413 role = shape.Get('Target') 2414 # find shape pointing to the role 2415 name_shapes = self.FindRoleNameShape(role) # should be 0 or 1 object 2416 if name_shapes: 2417 name_shapes[0].Delete() 2418 else: 2419 connector_shapes = self.FindRoleConnectorShape(role) # should be 0 or 1 object 2420 if connector_shapes: # should always be true 2421 new_rolelabel = self.AddFollower('ORMRoleNameShape', connector_shapes[0]) 2422 self.SelectObject(new_rolelabel.dcid) 2423 Data.SetUndo(undo_msg) 2424 self.RedrawID(shape.dcid) 2425 ## if shape.Subtype == 'ORMFactTypeShape': 2426 ## for x in shape.GetFollowers(): 2427 ## self.RedrawID(x.dcid) 2428 ## else: # role 2429 ## self.RedrawID(shape.Get('NodeA').dcid) 2430 2326 2431 def OnPops14(self, event): 2327 2432 self.RoleUnique(event, None, 'Set Not Unique') … … 2351 2456 self.RoleUniqueOther(event, None, 'Set Other Roles as Not Unique') 2352 2457 2458 def OnPops19(self, event): 2459 if event.IsChecked(): 2460 self.RoleNameShowHide(event, 'show', 'Show Role Name') 2461 else: 2462 self.RoleNameShowHide(event, 'hide', 'Hide Role Name') 2463 2353 2464 def AddRoleSequence(self, shape): 2354 2465 target = shape.Get('Target') … … 2661 2772 elif source.TableName == 'ORMFactType' and target.TableName == 'ORMObjectType': 2662 2773 new_shape = self.AddConnector('ORMRoleConnectorShape', source, target) 2663 new_rolelabel = self.AddFollower('ORMRoleNameShape', new_shape) 2774 ## new_rolelabel = self.AddFollower('ORMRoleNameShape', new_shape) 2663 2774 elif source.TableName == 'ORMSubtypeConstraint' and target.TableName == 'ORMSubtypeConnector': 2664 2775 new_shape = self.AddConnector('ORMSubtypeConstraintConnectorShape', source, target) … … 2976 3087 break 2977 3088 if source: 2978 if self.demo.draw_mode or event.ShiftDown(): # "demo" is a poor name, this is where the window global data is3089 if (self.demo.draw_mode or event.ShiftDown()) and not self.Report.Lock: # "demo" is a poor name, this is where the window global data is 2978 3089 if source.Subtype == 'ORMConstraintShape': 2979 3090 self.AddRoleSequence(source) … … 2985 3096 self.SelectObject(self.dragid) 2986 3097 else: # didn't click on any object 2987 if self.demo.draw_mode or event.ShiftDown(): # "demo" is a poor name, this is where the window global data is3098 if (self.demo.draw_mode or event.ShiftDown()) and not self.Report.Lock: # "demo" is a poor name, this is where the window global data is 2987 3098 # add new object 2988 3099 new_shape = self.AddNode(self.leftClickType, x, y) … … 3032 3143 pass # open object 3033 3144 elif event.RightDown(): 3145 if self.Report.Lock: return 3034 3146 x,y = self.ConvertEventCoords(event) 3035 3147 #l = self.pdc.FindObjectsByBBox(x, y) … … 3088 3200 pass 3089 3201 if event.LeftUp(): 3090 if self.demo.draw_mode or event.ShiftDown(): # "demo" is a poor name, this is where the window global data is3202 if (self.demo.draw_mode or event.ShiftDown()) and not self.Report.Lock: # "demo" is a poor name, this is where the window global data is 3090 3202 # self.dragid = -1 3091 3203 # what did we release on? … … 3217 3329 uk = evt.GetUnicodeKey() 3218 3330 uni = unichr(uk) 3331 keycode = evt.GetKeyCode() 3219 3332 if debug: print "char -", uni, "-" 3333 if self.Report.Lock: return 3220 3334 if self.keyboard_target_dcid: 3221 3335 shape = self.dcid_to_shape_xref.get(self.keyboard_target_dcid) … … 3224 3338 self.keyboard_target_dcid = None 3225 3339 return 3340 if keycode in (wx.WXK_LEFT, wx.WXK_RIGHT, wx.WXK_UP, wx.WXK_DOWN): 3341 shape.MoveCursor(keycode) 3342 self.RedrawID(shape.dcid) 3343 return 3226 3344 if uk == 18: # ctrl-r 3227 3345 x, y = shape.GetPos() -
ganttpv/trunk/Data.py
r464 r465 733 733 fk = attribute 734 734 else: 735 fk = 'GraphicObject' 735 ## fk = 'GraphicObject' 736 fk = self.Table 736 737 table_rows = self.db.Database.get('GraphicObject') or {} 737 738 search = { fk + 'ID': self.ID, 'Subtype': subtype_name }
