Changeset 416
- Timestamp:
- Wed Jun 4 03:55:01 2008
- Files:
-
- ganttpv/trunk/ORM.py (modified) (diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ganttpv/trunk/ORM.py
r414 r416 57 57 # 080517 - Moved script into GanttPV as ORM.py 58 58 # 080602 - Revised orm object model 59 # 080604 - Added Role entries to Fact Type popup menu 59 60 60 61 import wx … … 2041 2042 dc.SetBrush(self.canvas.CachedBrush((254,254,254,128))) 2042 2043 # dc.SetBrush(self.canvas.CachedBrush('White')) 2043 if debug: print 'round rectangle dimensions',x, y, box_w, box_h 2044 ## if debug: print 'round rectangle dimensions',x, y, box_w, box_h 2043 2044 box_x = x - box_w/2 2044 2045 box_y = y - box_h/2 … … 2118 2119 orm_object.RefMode = char 2119 2120 2121 role_box_height = 8 # 12 2122 role_box_width = 12 # 12 2123 2120 2124 class ORMFactTypeShape(ORMBox): 2121 2125 def Draw(self, dc): … … 2132 2136 2133 2137 nary = orm_object.Nary or 1 2134 role_box_height = 8 # 12 2135 role_box_width = 12 # 12 2138 ## role_box_height = 8 # 12 2139 ## role_box_width = 12 # 12 2136 2140 alignment = self.Orientation or 0 2137 2141 # eventually allow any of 4 orientations (90 degree rotations) … … 2212 2216 orm_object.Reading = char 2213 2217 2218 def GetRole(self, rx, ry): 2219 '''In which role was the fact type clicked?''' 2220 orm_object = self.Get('Target') 2221 roles = orm_object.GetList('ORMRole') 2222 roles.sort(cmp=lambda x,y: cmp(x.Seq, y.Seq)) 2223 if debug: print 'GetRole:', roles 2224 fx, fy = self.GetPos() 2225 if debug: print 'fx, rx', fx, rx 2226 rolenum = (rx - fx) // role_box_width 2227 if 0 <= rolenum < len(roles): 2228 if debug: print 'rolenum:', rolenum 2229 return roles[rolenum] 2230 return None 2214 2231 2215 2232 class ORMFactReadingShape(ORMFollowText): … … 2911 2928 2912 2929 # -- code for popup menu on shape 2930 def RoleMenu(self, role, menu): 2931 if role.Mandatory: 2932 menu.Append(self.popsID11, "Role Not Mandatory") 2933 if role.Mandatory != 'a': 2934 menu.Append(self.popsID12, "Role Mandatory Alethic") 2935 if role.Mandatory != 'd': 2936 menu.Append(self.popsID13, "Role Mandatory Deontic") 2937 menu.AppendSeparator() 2938 if role.Unique: 2939 menu.Append(self.popsID14, "Role Not Unique") 2940 if role.Unique != 'a': 2941 menu.Append(self.popsID15, "Role Unique Alethic") 2942 if role.Unique != 'd': 2943 menu.Append(self.popsID16, "Role Unique Deontic") 2944 2913 2945 def OnContextMenuShape(self, event): 2914 2946 self.popupx, self.popupy = self.ConvertEventCoords(event) … … 2985 3017 target = shape.Get('Target') 2986 3018 if target.Unique: 2987 change = 'Not Unique' 3019 change = 'Not Spanning Unique' 2987 3019 else: 2988 change = 'Unique' 3020 change = 'Spanning Unique' 2988 3020 menu.Append(self.popsID02, "Set as %s" % change) 2989 3021 if target.Nary == 2: 2990 3022 menu.Append(self.popsID03, "Reverse Role Order") 3023 role = shape.GetRole(self.popupx, self.popupy) 3024 if role: 3025 menu.AppendSeparator() 3026 self.RoleMenu(role, menu) 2991 3027 2992 3028 elif shape.Subtype == 'ORMRoleConnectorShape': 2993 3029 target = shape.Get('Target') 2994 if target.Mandatory: 2995 menu.Append(self.popsID11, "Not Mandatory") 2996 if target.Mandatory != 'a': 2997 menu.Append(self.popsID12, "Mandatory Alethic") 2998 if target.Mandatory != 'd': 2999 menu.Append(self.popsID13, "Mandatory Deontic") 3000 menu.AppendSeparator() 3001 if target.Unique: 3002 menu.Append(self.popsID14, "Not Unique") 3003 if target.Unique != 'a': 3004 menu.Append(self.popsID15, "Unique Alethic") 3005 if target.Unique != 'd': 3006 menu.Append(self.popsID16, "Unique Deontic") 3030 self.RoleMenu(target, menu) 3007 3031 3008 3032 # menu.Append(self.popsID3, "Constraint") … … 3019 3043 3020 3044 def OnPops01(self, event): 3045 '''Toggle Object Type between Entity and Value''' 3021 3046 l = self.pdc.FindObjects(self.popupx, self.popupy, hitradius) 3022 3047 if l: … … 3100 3125 self.log.WriteText("Popup nine\n") 3101 3126 3102 def OnPops11(self, event):3127 def RoleMandatory(self, event, new_mandatory_value, undo_msg): 3102 3127 l = self.pdc.FindObjects(self.popupx, self.popupy, hitradius) 3103 3128 if l: 3104 3129 shape = self.dcid_to_shape_xref.get(l[0]) 3105 target = shape.Get('Target') 3106 target.Mandatory = None 3107 Data.SetUndo('Set Not Mandatory') 3130 if shape.Subtype == 'ORMFactTypeShape': 3131 target = shape.GetRole(self.popupx, self.popupy) 3132 else: # role connector 3133 target = shape.Get('Target') 3134 target.Mandatory = new_mandatory_value 3135 Data.SetUndo(undo_msg) 3108 3136 self.RedrawID(shape.dcid) 3137 if shape.Subtype == 'ORMFactTypeShape': 3138 for x in shape.GetFollowers(): 3139 self.RedrawID(x.dcid) 3140 3141 def OnPops11(self, event): 3142 self.RoleMandatory(event, None, 'Set Not Mandatory') 3109 3143 3110 3144 def OnPops12(self, event): 3111 l = self.pdc.FindObjects(self.popupx, self.popupy, hitradius) 3112 if l: 3113 shape = self.dcid_to_shape_xref.get(l[0]) 3114 target = shape.Get('Target') 3115 target.Mandatory = 'a' 3116 Data.SetUndo('Set Mandatory Alethic') 3117 self.RedrawID(shape.dcid) 3145 self.RoleMandatory(event, 'a', 'Set Mandatory Alethic') 3118 3146 3119 3147 def OnPops13(self, event): 3148 self.RoleMandatory(event, 'd', 'Set Mandatory Deontic') 3149 3150 def RoleUnique(self, event, new_unique_value, undo_msg): 3120 3151 l = self.pdc.FindObjects(self.popupx, self.popupy, hitradius) 3121 3152 if l: 3122 3153 shape = self.dcid_to_shape_xref.get(l[0]) 3123 target = shape.Get('Target') 3124 target.Mandatory = 'd' 3125 Data.SetUndo('Set Mandatory Deontic') 3154 if shape.Subtype == 'ORMFactTypeShape': 3155 target = shape.GetRole(self.popupx, self.popupy) 3156 else: # role connector 3157 target = shape.Get('Target') 3158 target.Unique = new_unique_value 3159 Data.SetUndo(undo_msg) 3126 3160 self.RedrawID(shape.dcid) 3161 if shape.Subtype == 'ORMFactTypeShape': 3162 for x in shape.GetFollowers(): 3163 self.RedrawID(x.dcid) 3164 else: # role 3165 self.RedrawID(shape.Get('NodeA').dcid) 3127 3166 3128 3167 def OnPops14(self, event): 3129 l = self.pdc.FindObjects(self.popupx, self.popupy, hitradius) 3130 if l: 3131 shape = self.dcid_to_shape_xref.get(l[0]) 3132 target = shape.Get('Target') 3133 target.Unique = None 3134 Data.SetUndo('Set Not Unique') 3135 self.RedrawID(shape.dcid) 3136 self.RedrawID(shape.Get('NodeA').dcid) 3168 self.RoleUnique(event, None, 'Set Not Unique') 3137 3169 3138 3170 def OnPops15(self, event): 3139 l = self.pdc.FindObjects(self.popupx, self.popupy, hitradius) 3140 if l: 3141 shape = self.dcid_to_shape_xref.get(l[0]) 3142 target = shape.Get('Target') 3143 target.Unique = 'a' 3144 Data.SetUndo('Set Unique Alethic') 3145 self.RedrawID(shape.dcid) 3146 self.RedrawID(shape.Get('NodeA').dcid) 3171 self.RoleUnique(event, 'a', 'Set Unique Alethic') 3147 3172 3148 3173 def OnPops16(self, event): 3149 l = self.pdc.FindObjects(self.popupx, self.popupy, hitradius) 3150 if l: 3151 shape = self.dcid_to_shape_xref.get(l[0]) 3152 target = shape.Get('Target') 3153 target.Unique = 'd' 3154 Data.SetUndo('Set Unique Deontic') 3155 self.RedrawID(shape.dcid) 3156 self.RedrawID(shape.Get('NodeA').dcid) 3174 self.RoleUnique(event, 'd', 'Set Unique Deontic') 3157 3175 3158 3176 # -- end code for popup menu on shape --
