Example #1
0
	def pop(self, index=-1):
		try: child = self[index]
		except IndexError: raise IndexError("pop index out of range")
		list.__delitem__(self, index)
		child.parent = None
		_protocol.writeObj({'msg': 'remove', 'id': child.id})
		return child
Example #2
0
	def text(self, text=None):
		if text is not None:
			try:
				self._text = unicode(text)
			except UnicodeDecodeError:
				self._text = text.decode('latin-1')
			_protocol.writeObj({'msg': 'text', 'id': self.id, 'text': self._text})
		return self._text
Example #3
0
	def click(self, cb):
		if not callable(cb):
			raise TypeError()
		if not self.eventListeners:
			self.eventListeners = {'click': [cb]}
			_protocol.writeObj({'msg': 'listen', 'id': self.id})
		else:
			listeners = self.eventListeners.get('click')
			if not listeners:
				self.eventListeners['click'] = listeners = [cb]
			elif cb not in listeners: listeners.append(cb)
Example #4
0
	def __init__(self, **kwargs):
		assert self.__class__ is not _Element
		self.id = _Element._nextId
		self.parent = None
		self.eventListeners = None
		_Element._nextId += 1
		_elements[self.id] = self
		if self.id:
			_protocol.writeObj({'msg': 'create', 'id': self.id, 'type': self.__class__.__name__})
		if not kwargs.get('detached'):
			_defaultContainer.children.append(self)
Example #5
0
	def removeEventListener(self, eventType, cb=None):
		eventListeners = self.eventListeners.get(eventType)
		if not eventListeners: return # no listeners for eventType
		if not cb:
			del self.eventListeners[eventType]
		else:
			try:
				eventListeners.remove(cb)
			except: return
			if not eventListeners:
				del self.eventListeners[eventType]
		if not self.eventListeners:
			_protocol.writeObj({'msg': 'unlisten', 'id': self.id})
Example #6
0
def readObject():
	global promptStr
	ps = newSys.ps1 if not srcStr else newSys.ps2
	if ps is not promptStr:
		protocol.writeObj({'msg': 'setPrompt', 'ps': ps})
		promptStr = ps
	msg = raw_input()
	assert msg != '.'
	try:
		obj = json.loads(msg)
		assert type(obj) is dict
		return obj
	except:
		return {'msg': 'eval', 'cmd': msg}
Example #7
0
def readObject():
    global promptStr
    ps = newSys.ps1 if not srcStr else newSys.ps2
    if ps is not promptStr:
        protocol.writeObj({'msg': 'setPrompt', 'ps': ps})
        promptStr = ps
    msg = raw_input()
    assert msg != '.'
    try:
        obj = json.loads(msg)
        assert type(obj) is dict
        return obj
    except:
        return {'msg': 'eval', 'cmd': msg}
Example #8
0
	def insert(self, index, obj):
		if type(index) is float:
			raise TypeError("integer argument expected, got float") # python 3 behavior
		try: index = int(index)
		except TypeError:
			raise TypeError("'%s' object cannot be interpreted as an integer" % type(index).__name__) # py3
		obj = self._checkType(obj)
		self._checkAncestor(obj)
		if obj in self:
			raise ValueError("Duplicate %r Element not allowed" % obj)
		if index < 0: index = 0
		elif index > len(self): index = len(self)
		list.insert(self, index, obj) # commit
		obj.parent = self._owner
		_protocol.writeObj({'msg': 'add', 'parent': self._owner.id, 'index': index, 'child': obj.id})
Example #9
0
	def __setitem__(self, key, value):
		if type(key) is int:
			value = self._checkType(value)
			self._checkAncestor(value)
			try:
				oldNodes = [self.__getitem__(key)]
			except IndexError: raise IndexError("list assignment index out of range") # more accurate msg for setter
		else:
			value = [self._checkType(v) for v in value]
			for v in value: self._checkAncestor(v)
			oldNodes = self.__getitem__(key)
		nodeSet = set(self) - set(oldNodes)
		for v in ([value] if type(key) is int else value):
			if v in nodeSet:
				raise ValueError("Duplicate %r Element not allowed" % v)
			nodeSet.add(v)
		list.__setitem__(self, key, value)
		for node in oldNodes:
			node.parent = None
		for node in self:
			node.parent = self._owner
		_protocol.writeObj({'msg': 'setChildren', 'parent': self._owner.id, 'children': [node.id for node in self]})
Example #10
0
	def __delitem__(self, key):
		nodes = self.__getitem__(key)
		if type(key) is int: nodes = (nodes,)
		for node in nodes: node.parent = None
		list.__delitem__(self, key)
		_protocol.writeObj({'msg': 'setChildren', 'parent': self._owner.id, 'children': [node.id for node in self]})
Example #11
0
	def __del__(self):
		_protocol.writeObj({'msg': 'del', 'id': self.id})
Example #12
0
	def sort(cmp=None, key=None, reverse=False):
		list.sort(cmp, key, reverse)
		_protocol.writeObj({'msg': 'setChildren', 'parent': self._owner.id, 'children': [node.id for node in self]})
Example #13
0
	def reverse(self):
		list.reverse(self)
		_protocol.writeObj({'msg': 'setChildren', 'parent': self._owner.id, 'children': [node.id for node in self]})