Changeset 437

Show
Ignore:
Timestamp:
Mon Jun 9 00:40:17 2008
Author:
Brian
Message:

Changes to get delete role sequence working

Files:

Legend:

Unmodified
Added
Removed
Modified
  • ganttpv/trunk/ORM.py

    r436 r437  
    1282 1282     model[nodea.TableName + 'ID'] = nodea.TableID  
    1283 1283     if shape_type == 'ORMRoleConnectorShape':  
    1284           fact = nodea.Get('Target')  
    1285           fact.Nary += 1  
    1286           model['Seq'] = fact.Nary  
      1284 ##        fact = nodea.Get('Target')  
      1285 ##        fact.Nary += 1  
      1286 ##        model['Seq'] = fact.Nary  
    1287 1287         object_type = 'ORMRole'  
    1288 1288     elif shape_type == 'ORMSubtypeConnectorShape':  # what should this be called?  
     
    1296 1296     object_id = Data.Update(model)['ID']  
    1297 1297     if shape_type == 'ORMRoleConnectorShape':  
      1298         fact = nodea.Target  
    1298 1299         AddRole(fact, fact.db.GetObject('ORMRole', object_id))  
    1299 1300  
     
    1905 1906 ##    def ClearFollowers(self):  # objects don't have this method soon enough  
    1906 1907 ##        self._SetInShell('followers', [])  
    1907       def Follow(self):  # identify which objects you follow  
      1908     def Follow(self, remove=None):  # identify which objects you follow  
    1907 1908         pass  # overriden in subtypes  
    1908 1909     def AddFollower(self, follower_shape):  
    1909           self.followers.append(follower_shape)  
      1910         if not follower_shape in self.followers:  
      1911             self.followers.append(follower_shape)  
      1912     def RemoveFollower(self, follower_shape):  
      1913         if follower_shape in self.followers:  
      1914             self.followers.remove(follower_shape)  
    1910 1915     def GetFollowers(self, filter=''):  # use this instead of accessing followers directly  
    1911 1916         if filter:  
    1912 1917             return [ x for x in self.followers if x.TableName == filter ]  
    1913 1918         return self.followers  # returned value can be iterated over  
    1914       def RemoveFollower(self, follower_shape):  
    1915           pass  
    1916   ##            #self.followers.append(follower_shape)  
    1917   ##        shape._SetInShell('followers', [])  
    1918   ##        shape._SetInShell('AddFollower', AddFollower)  
    1919   ##        shape._SetInShell('RemoveFollower', RemoveFollower)  
    1920 1919      
    1921 1920     def SetTempPos(self, x, y):  
     
    1957 1956  
    1958 1957     def Delete(self):  # overriden in subclasses  
    1959           self.canvas.pdc.RemoveId(self.dcid)  
      1958         self.Follow(remove=True)  
      1959         if self.dcid:  
      1960             self.canvas.pdc.RemoveId(self.dcid)  
    1960 1961         self._SetInShell('dcid', None)  
    1961 1962         Data.Object.Delete(self)  
     
    2024 2025         return self.GetPos()  
    2025 2026  
    2026       def Follow(self):  
      2027     def Follow(self, remove=None):  
    2026 2027         nodea = self.Get('NodeA')  # these objects might not already be in the diagram  
    2027 2028         nodeb = self.Get('NodeB')  
    2028   ##        # if not already in the diagram , then create the nodes  
    2029   ##        print 'nodea type', nodea.__class__  
    2030   ##        if not isinstance(nodea, ORMShape):  
    2031   ##            self.canvas.CreateNode(self.canvas.pdc, nodea)  
    2032   ##        print 'nodeb type', nodeb.__class__  
    2033   ##        if not isinstance(nodeb, ORMShape):  
    2034   ##            self.canvas.CreateNode(self.canvas.pdc, nodeb)  
    2035           nodea.AddFollower(self)  # must be the right subtype to have this method  
    2036           nodeb.AddFollower(self)  
      2029         if not remove:  
      2030             nodea.AddFollower(self)  # must be the right subtype to have this method  
      2031             nodeb.AddFollower(self)  
      2032         else:  
      2033             nodea.RemoveFollower(self)  # must be the right subtype to have this method  
      2034             nodeb.RemoveFollower(self)  
    2037 2035  
    2038 2036 class ORMFollowText(ORMBox):  
    2039       def Follow(self):  
      2037     def Follow(self, remove=None):  
    2039 2037         nodea = self.Get('NodeA')  # these objects might not already be in the diagram  
    2040   ##        # if not already in the diagram , then create the nodes  
    2041   ##        print 'nodea type', nodea.__class__  
    2042   ##        if not isinstance(nodea, ORMShape):  
    2043   ##            self.canvas.CreateNode(self.canvas.pdc, nodea)  
    2044           nodea.AddFollower(self)  # must be the right subtype to have this method  
      2038         if not remove:  
      2039             nodea.AddFollower(self)  # must be the right subtype to have this method  
      2040         else:  
      2041             nodea.RemoveFollower(self)  # must be the right subtype to have this method  
    2045 2042  
    2046 2043 class ORMObjectTypeShape(ORMBox):  
    2047       def Follow(self):  
      2044     def Follow(self, remove=None):  
    2047 2044         nodea = self.Get('NodeA')  
    2048 2045         if nodea:  # if objectified fact type  
    2049               nodea.AddFollower(self)  
      2046             if not remove:  
      2047                 nodea.AddFollower(self)  
      2048             else:  
      2049                 nodea.RemoveFollower(self)  
    2050 2050  
    2051 2051     def OnBottom(self):  
     
    2540 2540             i += 1  
    2541 2541             r.Seq = i  
      2542     fact_object.Nary = len(roles) - 1  
    2542 2543  
    2543 2544 def AddRole(fact_object, add_role):  # in a separate function "just in case"  
     
    2550 2551         newpos.ORMRoleID = add_role.ID  
    2551 2552  
    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  
      2553 ##    if not add_role.ORMFactType == fact_object:  # if it hasn't already been added  
      2554     add_role.ORMFactTypeID = fact_object.ID  
      2555     roles = fact_object.GetList('ORMRole')  
      2556     fact_object.Nary = add_role.Seq = len(roles)  
    2556 2557  
    2557 2558 class ORMFactReadingShape(ORMFollowText):  
     
    3911 3912         if l:  
    3912 3913             shape = self.dcid_to_shape_xref.get(l[0])  
    3913               # get all the connectors that point to the specified role sequence  
      3914  
      3915             # get all the connectors that target the specified role sequence  
    3914 3916             connectors = [x for x in shape.GetGraphicList('ORMConstraintConnectorShape', 'NodeB')  
    3915 3917                           if x.Target and x.Target.Seq == delete_seq]  
    3916 3918             if connectors:  # any of them will do  
    3917                   if debug: print 'connector found'  
      3919                 if debug: print 'connector found', connectors  
    3917 3919                 role_seq = connectors[0].Target  # ORMRoleSequence  
      3920                 if debug: print 'role_seq', role_seq  
      3921                 if debug: print 'role_pos', role_seq.GetList('ORMRolePosition')  
    3918 3922                 for role_pos in role_seq.GetList('ORMRolePosition'):  
    3919 3923                     role_pos.Delete()  
     
    3922 3926             for c_shape in connectors:  
    3923 3927                 c_shape.Delete()  
      3928  
      3929             # renumber remaining sequences  
      3930             role_seqs = shape.Target.GetList('ORMRoleSequence')  
      3931             sorted_seqs = sorted(role_seqs, cmp=lambda x,y: cmp(x.Seq, y.Seq))  
      3932             for i, x in enumerate(sorted_seqs):  
      3933                 x.Seq = i+1  
      3934  
    3924 3935             Data.SetUndo('Delete Role Sequence %s' % delete_seq)  
    3925 3936 ##            self.RedrawID(shape.dcid)  
  • ganttpv/trunk/Data.py

    r434 r437  
    666 666  
    667 667     def Delete(self):  
    668           try:  
    669               rec = self.db.Database[self.Table].get(self.ID)  
    670               if rec:  
    671                   rec.zzStatus = 'deleted'  
    672           except:  
    673               pass  
      668         self.zzStatus = 'deleted'  
    674 669  
    675 670     def Get(self, name=None):  
     
    725 720         result = SearchByColumn(table_rows, search)  # only works w/ current db -- IMPORTANT  
    726 721         # if debug: print result  
    727           return [ self.db.GetObject(table_name, x['ID']) for x in result.itervalues() if x.get('zzStatus') != 'deleted']  
      722         return [ self.db.GetObject('GraphicObject', x['ID']) for x in result.itervalues() if x.get('zzStatus') != 'deleted']  
    727 722  
    728 723 class DB: