[dots/remove-assistant: 17/38] Do not edit directly on the table editor treeview. Use a dialog



commit fbdb4faf43b4b145f1f9ca924afdfe8c3c3ce51f
Author: Fernando Herrera <fherrera onirica com>
Date:   Fri Jul 9 15:50:00 2010 +0200

    Do not edit directly on the table editor treeview. Use a dialog

 dots/table_editor.py |  134 +++++++++++++++++++++++++++++++------------------
 1 files changed, 85 insertions(+), 49 deletions(-)
---
diff --git a/dots/table_editor.py b/dots/table_editor.py
index bd93dc6..6ab2ceb 100755
--- a/dots/table_editor.py
+++ b/dots/table_editor.py
@@ -166,76 +166,112 @@ for line in lines:
 	line = line.replace("\t", " ")
 	if line == '' or line[0] == '#' or line[0] == '<' or line[0] == '\n':
 		continue
-	elements = line.split(" ")
+	sep = line.find(" ")
 	entry = {}
-	entry['opcode'] = elements[0]
-	i = 1
-	comment = False
-	for element in elements[1:]:
-		element = element.rstrip(" \t\n")
-		# FIXME: Can be an element 3 a legitimate # (ie: not a comment)?
-		if (element == " " or element == "") or (element == "#" and i >= 3):
-			entry['comment'] = ' '.join(elements[i+1:])
-			break
-		entry['element' + str(i)] = element
-		i = i + 1
+	entry['opcode'] = line[:sep]
+	entry['operands'] = line[sep+1:].rstrip(" \t\n")
 	entries.append (entry)
 
 for e in entries:
 	print "op=" + e['opcode']
-	print "\telement1=" + e['element1']
-	if "element2" in e:
-		print "\telement2=" + e['element2']
-	if "element3" in e:
-		print "\telement3=" + e['element3']
-	if "comment" in e:
-		print "\tcomment=" + e['comment']
+	print "\toperands=" + e['operands']
 
 
+import gtk
 
+def row_clicked(view, event):
+	if event.type != gtk.gdk._2BUTTON_PRESS:
+		return
 
+	selection = view.get_selection();
+	model, iter = selection.get_selected()
+	opcode = model.get_value (iter, 0)	
+	operands = model.get_value (iter, 1)	
+	operands_list = operands.split(" ")
+	operands_list.reverse()
+	print "Operands: " + operands
+	if operands_list is None:
+		operands_list = [ operands ]
+	print "Operands list: "
+	for l in operands_list: print "\t" + l
+	dialog = gtk.Dialog ("Edit op", None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+			     (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
+	vbox = gtk.VBox (False, 6)
+	hbox = gtk.HBox (False, 6)
+	label = gtk.Label ("opcode:")
+	combo = gtk.ComboBox()
+	model = gtk.ListStore (str)
+	for k in opcodes.keys():
+		iter = model.append ([k])
+		if k == opcode:
+			thisiter = iter
 		
-import gtk
+	cell = gtk.CellRendererText()
+	combo.pack_start(cell, True)
+	combo.add_attribute(cell, 'text', 0)
+	combo.set_model (model)
+	combo.set_active_iter (thisiter)
+
+	hbox.pack_start (label)
+	hbox.pack_start (combo)
+	vbox.pack_start (hbox)
+
+	schema = opcodes[opcode]
+	for s in schema:
+		print s
+		hbox = gtk.HBox (False, 6)
+		label = gtk.Label (s)
+		entry = gtk.Entry()
+		operand = ""
+		while operand == "": operand = operands_list.pop()
+		entry.set_text (operand)
+		hbox.pack_start (label)
+		hbox.pack_start (entry)
+		vbox.pack_start (hbox)
+
+	if len(operands_list) > 0:
+		hbox = gtk.HBox (False, 6)
+		label = gtk.Label ("Comments")
+		entry = gtk.Entry()
+		operands_list.reverse()
+		entry.set_text (" ".join (operands_list).lstrip(" "))
+		hbox.pack_start (label)
+		hbox.pack_start (entry)
+		vbox.pack_start (hbox)
+
+
+		
+
+	dialog.get_content_area().add (vbox)
+	dialog.show_all()
+	response = dialog.run()
+	dialog.destroy()
+	
+
+	
+	
 
 window = gtk.Window(gtk.WINDOW_TOPLEVEL)
 window.set_title("Basic TreeView Example")
 window.set_size_request(600, 600)
-liststore = gtk.ListStore(str, str, str, str, str)
+liststore = gtk.ListStore(str, str)
 for e in entries:
-	iter = liststore.append ([e['opcode'], e['element1'], None, None, None])
-	if "element2" in e:
-		liststore.set_value(iter, 2, e['element2'])
-	if "element3" in e:
-		liststore.set_value(iter, 3, e['element3'])
-	if "comment" in e:
-		liststore.set_value(iter, 4, e['comment'])
+	iter = liststore.append ([e['opcode'], e['operands']])
 
 treeview = gtk.TreeView(liststore)
-tvcolumn = gtk.TreeViewColumn('Column 0')
+tvcolumn = gtk.TreeViewColumn('opcode')
 treeview.append_column(tvcolumn)
-cell = gtk.CellRendererCombo()
-combomodel = gtk.ListStore(str)
-for o in opcodes.keys():
-	combomodel.append ([o])
-cell.set_property ("editable", True)
-cell.set_property ("editable-set", True)
-cell.set_property ("model", combomodel)
-cell.set_property ("text-column", 0)
-cell.connect ("edited", cell_edited, liststore, 0)
-
+cell = gtk.CellRendererText()
 tvcolumn.pack_start(cell, True)
 tvcolumn.add_attribute(cell, 'text', 0)
 
-for i in [1,2,3]:
-	tvcolumn = gtk.TreeViewColumn('Column ' + str(i))
-	treeview.append_column(tvcolumn)
-	cell = gtk.CellRendererText()
-	cell.set_property ("editable", True)
-	cell.set_property ("editable-set", True)
-	cell.connect ("editing-started", cell_started_editing, liststore, i)
-	cell.connect ("edited", cell_edited, liststore, i)
-	tvcolumn.pack_start(cell, True)
-	tvcolumn.add_attribute(cell, 'text', i)
+tvcolumn = gtk.TreeViewColumn('operands')
+treeview.append_column(tvcolumn)
+cell = gtk.CellRendererText()
+tvcolumn.pack_start(cell, True)
+tvcolumn.add_attribute(cell, 'text', 1)
+
+treeview.connect("button-press-event", row_clicked)
 
 scrolledwindow = gtk.ScrolledWindow ()
 scrolledwindow.add(treeview)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]