Exemplo n.º 1
0
 def __init__(self):
     super(SceneDetailPanel, self).__init__()
     self.instances = []
     self.instanceCache = []
     self.idPool = IDPool()
     self.activeInstance = None
     self.objectEditorRegistry = {}
Exemplo n.º 2
0
 def __init__(self):
     super(SceneIntrospector, self).__init__()
     self.instances = []
     self.instanceCache = []
     self.idPool = IDPool()
     self.activeInstance = None
     self.objectEditorRegistry = TypeIdDict()
Exemplo n.º 3
0
 def __init__(self):
     super(SceneIntrospector, self).__init__()
     self.instances = []
     self.instanceCache = []
     self.idPool = IDPool()
     self.objectEditorRegistry = TypeIdDict()
     self.currentTarget = None
     self.updatePaused = False
Exemplo n.º 4
0
	def __init__(self):
		super(SceneIntrospector, self).__init__()
		self.instances      = []
		self.instanceCache  = []
		self.idPool         = IDPool()
		self.activeInstance = None
		self.objectEditorRegistry = {}
Exemplo n.º 5
0
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()
Exemplo n.º 6
0
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()
Exemplo n.º 7
0
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()
Exemplo n.º 8
0
 def onLoad(self):
     self.idPool = IDPool()
Exemplo n.º 9
0
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()
Exemplo n.º 10
0
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()
Exemplo n.º 11
0
	def onLoad(self):		
		self.idPool = IDPool()