Changeset 416

Show
Ignore:
Timestamp:
Wed Jun 4 03:55:01 2008
Author:
Brian
Message:

Added Role entries to Fact Type popup menu

Files:

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 --