class SQScriptEditor( SceneEditorModule ): """docstring for SQScriptEditor""" name = 'sq_script_editor' dependency = [ 'mock', 'qt' ] def __init__(self): self.instances = [] def onLoad(self): self.idPool = IDPool() def onStart( self ): # self.delegate = MOAILuaDelegate( self ) # self.delegate.load( _getModulePath( 'SQScriptEditor.lua' ) ) pass def openAsset( self, target ): instance = self.findInstances( target ) if not instance: instance = self.createInstance( target ) else: instance.refresh() def createInstance( self, target ): #todo: pool id = self.idPool.request() title = target.getNodePath() container = self.requestDocumentWindow( 'SQScriptEditor-%d'%id, title = title, minSize = (200,100) ) instance = SQScriptEditorInstance(id) instance.parentModule = self instance.createWidget( container ) instance.setTarget( target ) self.instances.append( instance ) container.show() return instance def findInstances(self, targetNode): for ins in self.instances: if ins.targetNode == targetNode: return ins return None def removeInstance( self, instance ): self.instances.remove( instance ) def refresh( self, targetNode = None, context = None ): for ins in self.instances: if not targetNode or ins.hasTarget( targetNode ): ins.refresh()
class SceneIntrospector( SceneEditorModule ): """docstring for SceneIntrospector""" def __init__(self): super(SceneIntrospector, self).__init__() self.instances = [] self.instanceCache = [] self.idPool = IDPool() self.activeInstance = None self.objectEditorRegistry = {} def getName(self): return 'introspector' def getDependency(self): return ['qt', 'scene_editor'] def onLoad(self): self.requestInstance() signals.connect( 'selection.changed', self.onSelectionChanged ) signals.connect( 'component.added', self.onComponentAdded ) signals.connect( 'component.removed', self.onComponentRemoved ) signals.connect( 'entity.modified', self.onEntityModified ) self.widgetCacheHolder = QtGui.QWidget() def onStart( self ): pass def updateProp(self): if app.isDebugging(): return if self.activeInstance: self.activeInstance.refresh() def requestInstance(self): #todo: pool id = self.idPool.request() container = self.requestDockWindow('SceneIntrospector-%d'%id, title = 'Introspector', dock = 'right', minSize = (200,100) ) instance = IntrospectorInstance(id) instance.createWidget( container ) self.instances.append( instance ) if not self.activeInstance: self.activeInstance=instance return instance def findInstances(self, target): res=[] for ins in self.instances: if ins.target==target: res.append(ins) return res def getInstances(self): return self.instances def registerObjectEditor( self, typeId, editorClas ): assert typeId, 'null typeid' self.objectEditorRegistry[ typeId ] = editorClas def getObjectEditorByTypeId( self, typeId, defaultClass = None ): while True: clas = self.objectEditorRegistry.get( typeId, None ) if clas: return clas typeId = getSuperType( typeId ) if not typeId: break if defaultClass: return defaultClass return CommonObjectEditor def onSelectionChanged( self, selection, key ): if key != 'scene': return if not self.activeInstance: return target = None if isinstance( selection, list ): target = selection elif isinstance( selection, tuple ): (target) = selection else: target=selection #first selection only? self.activeInstance.setTarget(target) def onComponentAdded( self, com, entity ): if not self.activeInstance: return if self.activeInstance.target == entity: self.activeInstance.setTarget( [entity], True ) self.activeInstance.focusTarget( com ) def onComponentRemoved( self, com, entity ): if not self.activeInstance: return if self.activeInstance.target == entity: self.activeInstance.setTarget( [entity], True ) def onEntityModified( self, entity, context=None ): if context != 'introspector' : self.refresh( entity, context ) def refresh( self, target = None, context = None ): for ins in self.instances: if not target or ins.hasTarget( target ): ins.scheduleUpdate()
class SceneIntrospector(SceneEditorModule): """docstring for SceneIntrospector""" def __init__(self): super(SceneIntrospector, self).__init__() self.instances = [] self.instanceCache = [] self.idPool = IDPool() self.objectEditorRegistry = TypeIdDict() self.currentTarget = None self.updatePaused = False def getName(self): return 'introspector' def getDependency(self): return ['qt', 'scene_editor'] def onLoad(self): self.requestInstance() signals.connect('selection.changed', self.onSelectionChanged) signals.connect('component.added', self.onComponentAdded) signals.connect('component.removed', self.onComponentRemoved) signals.connect('component.renamed', self.onComponentRenamed) signals.connect('component.reordered', self.onComponentReordered) signals.connect('entity.modified', self.onEntityModified) self.widgetCacheHolder = QtWidgets.QWidget() def onStart(self): pass def requestInstance(self): #todo: pool id = self.idPool.request() container = self.requestDockWindow('SceneIntrospector-%d' % id, title='Introspector', dock='right', minSize=(200, 100)) instance = IntrospectorInstance(id) instance.createWidget(container) self.instances.append(instance) return instance def findInstances(self, target): res = [] for instance in self.instances: if instance.target == target: res.append(instance) return res def getInstances(self): return self.instances def registerObjectEditor(self, typeId, editorClas): assert typeId, 'null typeid' self.objectEditorRegistry[typeId] = editorClas def getObjectEditorByTypeId(self, typeId, defaultClass=None): if not defaultClass: defaultClass = CommonObjectEditor return self.objectEditorRegistry.get(typeId, defaultClass) def pauseUpdate(self, paused=True): self.updatePaused = paused if not paused: self.updateTarget() def updateTarget(self): if self.updatePaused: return target = self.currentTarget for instance in self.instances: if instance.isLocked(): continue instance.setTarget(target) def onSelectionChanged(self, selection, key): if key != 'scene': return target = None if isinstance(selection, list): target = selection elif isinstance(selection, tuple): (target) = selection else: target = selection #first selection only? self.currentTarget = target self.updateTarget() def onComponentAdded(self, com, entity): for instance in self.instances: if instance.target == entity: instance.rebuild() instance.focusTarget(com) def onComponentRemoved(self, com, entity): for instance in self.instances: if instance.target == entity: instance.rebuild() def onComponentRenamed(self, com, entity): for instance in self.instances: if instance.target == entity: editor = instance.getObjectEditor(com) if editor: editor.refreshTitle() def onComponentReordered(self, com, entity): for instance in self.instances: if instance.target == entity: instance.rebuild() def onEntityModified(self, entity, context=None): if context != 'introspector': self.refresh(entity, context) def refresh(self, target=None, context=None): for instance in self.instances: if not target or instance.hasTarget(target): instance.scheduleUpdate()
class SceneDetailPanel(SceneEditorModule): """docstring for SceneIntrospector""" def __init__(self): super(SceneDetailPanel, self).__init__() self.instances = [] self.instanceCache = [] self.idPool = IDPool() self.activeInstance = None self.objectEditorRegistry = {} def getName(self): return 'detail_panel' def getDependency(self): return ['qt', 'scene_editor'] def onLoad(self): self.window = self.requestToolWindow('Detail', title='Detail', area='last', minSize=(200, 100)) self.entityPreviewWidget = self.window.addWidget( uic.loadUi(getModulePath('Detail_EntityPreviewWidget.ui', __file__))) self.entityPreviewTree = ComponentTreeWidget( self.entityPreviewWidget, multiple_selection=False, sorting=False, editable=False, # no_header=True ) self.entityPreviewWidget.container.addWidget(self.entityPreviewTree) self.entityPreviewWidget.hide() self.requestInstance() signals.connect('selection.changed', self.onSelectionChanged) signals.connect('component.added', self.onComponentAdded) signals.connect('component.removed', self.onComponentRemoved) signals.connect('entity.modified', self.onActorModified) self.widgetCacheHolder = QtWidgets.QWidget() def onStart(self): pass def updateProp(self): if app.isDebugging(): return if self.activeInstance: self.activeInstance.refresh() def requestInstance(self): # todo: pool id = self.idPool.request() # container = self.requestDockWindow('Detail-%d' % id, # title='Detail', # dock='right', # minSize=(200, 100) # ) instance = DetailInstance(id) # instance.createWidget(self.container) instance.createWidget(self.window) self.instances.append(instance) if not self.activeInstance: self.activeInstance = instance return instance def findInstances(self, target): res = [] for ins in self.instances: if ins.target == target: res.append(ins) return res def getInstances(self): return self.instances def registerObjectEditor(self, typeId, editorClas): assert typeId, 'null typeid' self.objectEditorRegistry[typeId] = editorClas def getObjectEditorByTypeId(self, typeId, defaultClass=None): while True: clas = self.objectEditorRegistry.get(typeId, None) if clas: return clas typeId = getSuperType(typeId) if not typeId: break if defaultClass: return defaultClass return CommonObjectEditor def onSelectionChanged(self, selection, key): if key != 'scene': self.entityPreviewWidget.setWindowOpacity(0) # self.actorPreviewWidget.hide() return if not self.activeInstance: return target = None if isinstance(selection, list): print('selection is list') if len(selection) > 0: target = selection[0] if target and isCandySubInstance(target, 'Entity'): print('onSelectionChanged() isCandySubInstance: Entity') self.entityPreviewWidget.actorName.setText(target.name) self.entityPreviewWidget.actorIcon.setIcon(getIcon('obj')) self.entityPreviewTree.clear() self.entityPreviewTree.addNode(target) target = selection elif isinstance(selection, tuple): print('selection is tuple') target = selection else: target = selection self.entityPreviewWidget.setWindowOpacity(1) self.entityPreviewWidget.show() # first selection only? self.activeInstance.setTarget(target) def onComponentAdded(self, com, entity): if not self.activeInstance: return if self.activeInstance.target == entity: self.activeInstance.setTarget([entity], True) self.activeInstance.focusTarget(com) def onComponentRemoved(self, com, entity): if not self.activeInstance: return if self.activeInstance.target == entity: self.activeInstance.setTarget([entity], True) def onActorModified(self, entity, context=None): if context != 'detail_panel': self.refresh(entity, context) def refresh(self, target=None, context=None): for ins in self.instances: if not target or ins.hasTarget(target): ins.scheduleUpdate()