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