Esempio n. 1
0
	def __init__(self, filename):
		super(AstApp, self).__init__()
		self.ast_file = filename
		self.ast = ASTObserver()
		self.selected = None
Esempio n. 2
0
class AstApp(App):
	def __init__(self, filename):
		super(AstApp, self).__init__()
		self.ast_file = filename
		self.ast = ASTObserver()
		self.selected = None
	
	def build(self):
		root = Builder.load_string(root_kv.format(self.ast_file))
		st = root.ids.source_text
		self.ast.bind(source=st.setter('text'))
		st.bind(text=self.ast.setter('source'))
		
		self.ast.bind(on_generate=lambda _, tree: buildtreeview(tree, root.ids.treeview))
		
		self.ast.bind(on_generate=lambda *_: setattr(self, 'output', self.ast.compile()))
		self.ast.bind(on_compile=lambda _, output: setattr(root.ids.output_text, 'text', output))
		self.ast.bind(on_compile=self.save_outfile)
		
		self.ast.bind(on_tree_changed=self.refresh)
		
		Clock.schedule_once(self.load)
		
		root.ids.treeview.bind(selected_node=self.update_selection)
		
		root.ids.btn_movedown.bind(on_press=lambda *_: self.move_node(1))
		root.ids.btn_moveup.bind(on_press=lambda *_: self.move_node(-1))
		root.ids.btn_addprop.bind(on_press=self.add_property)
		root.ids.btn_removenode.bind(on_press=self.remove_node)
		
		return root
	
	def refresh(self, *_):
		self.selected = None
		buildtreeview(self.ast.tree, self.root.ids.treeview)
		self.ast.compile()
	
	def move_node(self, dir):
		if self.selected:
			tree = self.selected.tree_node
			if tree.parent:
				parent = tree.parent
				count = parent.getChildCount()
				if count > 1:
					index = tree.childIndex
					destindex = index + dir
					if destindex < 0:
						destindex = count - 1
					elif destindex >= count:
						destindex = 0
					self.ast.shift_node(tree, destindex)
	
	def add_property(self, *_):
		if self.selected:
			try:
				key = 'prop'
				value = "'val'"
				self.ast.widget_add_property(self.selected.tree_node, key, value)
			except ValueError, e:
				print str(e)