Пример #1
0
class ObjectEditorWindow :

    def __init__( self, aModelEditor, aLayoutName, anObjectId ):
        """
        sets up a modal dialogwindow displaying 
        the EntityEditor and the ShapeProperty
        # objectID can be None, String, list of strings
        """ 
        self.theModelEditor = aModelEditor  
        self.theTopFrame = gtk.VBox()
        self.theEntityEditor = EntityEditor( self, self.theTopFrame,'Entity', True )
        self.theShapeProperty = self.theEntityEditor.getShapeProperty()
        self.setDisplayObjectEditorWindow(aLayoutName, anObjectId)
    # ==========================================================================

    def setDisplayObjectEditorWindow(self,aLayoutName, anObjectID):
        self.theLayoutName = aLayoutName
        self.theLayout =self.theModelEditor.theLayoutManager.getLayout(aLayoutName)
        self.theObjectDict = {}
        self.theType = "None"
        if anObjectID == None:
            objectIDList = []

        elif type(anObjectID ) == type(""):
            objectIDList = [ anObjectID]
        elif type( anObjectID ) == type ( [] ):
            objectIDList = anObjectID
            
        for anID in objectIDList:
            anObject = self.theLayout.getObject( anID ) 
            self.theObjectDict[anID] = anObject 
            aType = anObject.getProperty( OB_TYPE )
            if self.theType == "None":
                self.theType = aType
            elif self.theType != aType:
                self.theType = "Mixed"
        if len( self.theObjectDict.values() ) == 1:
            self.theLastFullID = self.theObjectDict.values()[0].getProperty( OB_FULLID )
        else:
            self.theLastFullID = None
        self.theEntityEditor.setDisplayedEntity (self.theLastFullID)
        self.theShapeProperty.setDisplayedShapeProperty( self.theObjectDict, self.theType )
        self.bringToTop()

    # ==========================================================================


    def bringToTop( self ):
        self.theModelEditor.theMainWindow.setSmallWindow( self.theTopFrame )
        self.theEntityEditor.bringToTop()




    
    def update(self, aType = None, aFullID = None):
        #if aFullID not None, see whether all objects exist
        deletion = False

        existObjectList = self.theLayout.getObjectList()
        for anObjectID in self.theObjectDict.keys()[:]:
            if anObjectID not in existObjectList:
                self.theObjectDict.__delitem__( anObjectID )
                deletion = True
        if deletion:
            self.setDisplayObjectEditorWindow( self.theLayoutName, self.theObjectDict.keys()[:] ) 
        else:
            # detect deleted fullid or changed fullid
            newFullID = None
            if  len( self.theObjectDict.keys() ) == 1:
                theObject = self.theObjectDict.values()[0]
                if theObject.getProperty( OB_HASFULLID ):
                    newFullID = theObject.getProperty( OB_FULLID )
            if self.theLastFullID != None:
                if not self.theModelEditor.theModelStore.isEntityExist( self.theLastFullID ):
                    newFullID = None
            if newFullID != None:
                if not self.theModelEditor.theModelStore.isEntityExist( newFullID ):
                    newFullID = None
            if self.theLastFullID != newFullID :
                self.theEntityEditor.setDisplayedEntity( newFullID )
            # if nothing deleted, update windows
            else:
                self.updatePropertyList()
                self.updateShapeProperty()



    def updatePropertyList ( self, aFullID = None ):
        """
        in: anID where changes happened
        """
        # get selected objectID
        propertyListEntity = self.theEntityEditor.getDisplayedEntity()
        # check if displayed fullid is affected by changes

        if propertyListEntity != self.theLastFullID:
            self.theEntityEditor.setDisplayedEntity ( self.theLastFullID )
        else:
            self.theEntityEditor.update()



        

    def updateShapeProperty(self):
        if self.theModelEditor.getMode() != ME_DESIGN_MODE:
            return
        self.theShapeProperty.updateShapeProperty()

        

    # ==========================================================================
    def destroy( self, *arg ):
        """destroy dialog
        """
        pass        
#        self.win.destroy()
        

        
        
    def selectEntity(self,anEntityList):

        if type(anEntityList) == type(""):
            return
        if len( self.theObjectDict.keys() ) == 1:
            theObject = self.theObjectDict.values()[0]
            if theObject.getProperty(OB_HASFULLID):
                self.theLastFullID = theObject.getProperty( OB_FULLID )
                if not self.theModelEditor.getModel().isEntityExist( self.theLastFullID ):
                    self.theLastFullID = None
        self.theEntityEditor.setDisplayedEntity ( self.theLastFullID )
        self.theEntityEditor.update()
        self.bringToTop()
Пример #2
0
class ObjectEditorWindow :

    def __init__( self, aModelEditor, aLayoutName, anObjectId ):
        """
        sets up a modal dialogwindow displaying 
        the EntityEditor and the ShapeProperty
        # objectID can be None, String, list of strings
        """ 
        self.theModelEditor = aModelEditor  
        self.theTopFrame = gtk.VBox()
        self.theEntityEditor = EntityEditor( self, self.theTopFrame,'Entity', True )
        self.theShapeProperty = self.theEntityEditor.getShapeProperty()
        self.setDisplayObjectEditorWindow(aLayoutName, anObjectId)
    # ==========================================================================

    def setDisplayObjectEditorWindow(self,aLayoutName, anObjectID):
        self.theLayoutName = aLayoutName
        self.theLayout =self.theModelEditor.theLayoutManager.getLayout(aLayoutName)
        self.theObjectDict = {}
        self.theType = "None"
        if anObjectID == None:
            objectIDList = []

        elif type(anObjectID ) == type(""):
            objectIDList = [ anObjectID]
        elif type( anObjectID ) == type ( [] ):
            objectIDList = anObjectID
            
        for anID in objectIDList:
            anObject = self.theLayout.getObject( anID ) 
            self.theObjectDict[anID] = anObject 
            aType = anObject.getProperty( OB_TYPE )
            if self.theType == "None":
                self.theType = aType
            elif self.theType != aType:
                self.theType = "Mixed"
        if len( self.theObjectDict.values() ) == 1:
            self.theLastFullID = self.theObjectDict.values()[0].getProperty( OB_FULLID )
        else:
            self.theLastFullID = None
        self.theEntityEditor.setDisplayedEntity (self.theLastFullID)
        self.theShapeProperty.setDisplayedShapeProperty( self.theObjectDict, self.theType )
        self.bringToTop()

    # ==========================================================================


    def bringToTop( self ):
        self.theModelEditor.theMainWindow.setSmallWindow( self.theTopFrame )
        self.theEntityEditor.bringToTop()




    
    def update(self, aType = None, aFullID = None):
        #if aFullID not None, see whether all objects exist
        deletion = False

        existObjectList = self.theLayout.getObjectList()
        for anObjectID in self.theObjectDict.keys()[:]:
            if anObjectID not in existObjectList:
                self.theObjectDict.__delitem__( anObjectID )
                deletion = True
        if deletion:
            self.setDisplayObjectEditorWindow( self.theLayoutName, self.theObjectDict.keys()[:] ) 
        else:
            # detect deleted fullid or changed fullid
            newFullID = None
            if  len( self.theObjectDict.keys() ) == 1:
                theObject = self.theObjectDict.values()[0]
                if theObject.getProperty( OB_HASFULLID ):
                    newFullID = theObject.getProperty( OB_FULLID )
            if self.theLastFullID != None:
                if not self.theModelEditor.theModelStore.isEntityExist( self.theLastFullID ):
                    newFullID = None
            if newFullID != None:
                if not self.theModelEditor.theModelStore.isEntityExist( newFullID ):
                    newFullID = None
            if self.theLastFullID != newFullID :
                self.theEntityEditor.setDisplayedEntity( newFullID )
            # if nothing deleted, update windows
            else:
                self.updatePropertyList()
                self.updateShapeProperty()



    def updatePropertyList ( self, aFullID = None ):
        """
        in: anID where changes happened
        """
        # get selected objectID
        propertyListEntity = self.theEntityEditor.getDisplayedEntity()
        # check if displayed fullid is affected by changes

        if propertyListEntity != self.theLastFullID:
            self.theEntityEditor.setDisplayedEntity ( self.theLastFullID )
        else:
            self.theEntityEditor.update()



        

    def updateShapeProperty(self):
        if self.theModelEditor.getMode() != ME_DESIGN_MODE:
            return
        self.theShapeProperty.updateShapeProperty()

        

    # ==========================================================================
    def destroy( self, *arg ):
        """destroy dialog
        """
        pass        
#        self.win.destroy()
        

        
        
    def selectEntity(self,anEntityList):

        if type(anEntityList) == type(""):
            return
        if len( self.theObjectDict.keys() ) == 1:
            theObject = self.theObjectDict.values()[0]
            if theObject.getProperty(OB_HASFULLID):
                self.theLastFullID = theObject.getProperty( OB_FULLID )
                if not self.theModelEditor.getModel().isEntityExist( self.theLastFullID ):
                    self.theLastFullID = None
        self.theEntityEditor.setDisplayedEntity ( self.theLastFullID )
        self.theEntityEditor.update()
        self.bringToTop()