diff options
Diffstat (limited to 'ReckonPrimer.activity/treeview_icon.py')
-rw-r--r-- | ReckonPrimer.activity/treeview_icon.py | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/ReckonPrimer.activity/treeview_icon.py b/ReckonPrimer.activity/treeview_icon.py new file mode 100644 index 0000000..9b45c25 --- /dev/null +++ b/ReckonPrimer.activity/treeview_icon.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- + +""" +author: Bernhard Ruttinger, Robert Gröbl +date: 07.01.2010 treeview_icon Version 0.3 (first test with drag and drop) +description: it's the first attempt for drag and drop on display layer. + problem with icons is fixed + print with Drag and with Drop positions +""" + +import gtk +import pygtk +import pickle +import os +from collection import CollectionTest +from task import Task + +class TreeViewExampleWithIcon: + + # Allowed targets for DnD + TARGETS = [ + ('pixbuf', gtk.TARGET_SAME_WIDGET, 0), + ('text', gtk.TARGET_SAME_WIDGET, 1) + ] + + # close the window and quit + + def __init__(self): + self.__from = None + self.__to = None + + # create a new window + self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + self.window.set_title("TreeView") + self.window.set_size_request(400, 400) + self.window.connect("delete_event", self.delete_event) + + # create a TreeStore with one string column to use as the model +# self.treestore = gtk.TreeStore(gtk.gdk.Pixbuf, str) +# +# self.imagecollection = gtk.gdk.pixbuf_new_from_file("collection.png") +# self.imageexercise = gtk.gdk.pixbuf_new_from_file("exercise.png") +# +# self.treestore.clear() +# self.fill_store(self.treestore, None, None) +# +# self.treeview = gtk.TreeView(self.treestore) +# # create the TreeViewColumn to display the data +# self.tvcolumn = gtk.TreeViewColumn('Uebungssammlung') +# +# self.cellpb = gtk.CellRendererPixbuf() +# self.tvcolumn.pack_start(self.cellpb, True) +# self.tvcolumn.add_attribute(self.cellpb, 'pixbuf', 0) +# +# # create a CellRendererText to render the data +# self.cell = gtk.CellRendererText() +# +# # add the cell to the tvcolumn and allow it to expand +# self.tvcolumn.pack_start(self.cell, True) +# +# # set the cell "text" attribute to column 0 - retrieve text +# # from that column in treestore +# self.tvcolumn.add_attribute(self.cell, 'text', 1) +# +# # add tvcolumn to treeview +# self.treeview.append_column(self.tvcolumn) +# +# # make it searchable +# self.treeview.set_search_column(0) +# +# # Allow sorting on the column +# self.tvcolumn.set_sort_column_id(-1) +# +# # ab hier teil von robert +# +# self.treeview.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, +# self.TARGETS, +# gtk.gdk.ACTION_MOVE) +# +# self.treeview.enable_model_drag_dest(self.TARGETS, +# gtk.gdk.ACTION_MOVE) +# +# self.treeview.connect("drag_data_get", self.drag_data_get_data) +# self.treeview.connect("drag_data_received", self.drag_data_received_data) +# +# self.treeview.expand_all() + self.window.add(self.treeview) + self.window.show_all() + + def delete_event(self, widget, event, data = None): + gtk.main_quit() + return False + + + def fill_store(self, ts, parent, list): + c = CollectionTest() + root = c.get_data_from_pickle() + + if list == None: + list = root.getData() + + for i in range(len(list)): + if isinstance(list[i], CollectionTest): + olditer = ts.append(parent, [self.imagecollection, list[i].getTitle()]) + c_list = list[i].getData() + self.fill_store(ts, olditer, c_list) + else: + text = list[i].getTitle() + ": " + list[i].getDescription() + iter = ts.append(parent, [self.imageexercise, text]) + + + def drag_data_get_data(self, treeview, context, selection, target_id, etime): + # selection erfassen und pixbuf in string umwandeln + treeselection = treeview.get_selection() + model, iter = treeselection.get_selected() + + # Tupel der die Drag Position angibt + path = self.treestore.get_path(iter) + + print "Tree-Element: ", model.get_value(iter, 1) + print "Drag-Position: ", path + self.__from = path + + iconstr = (model.get_value(iter, 0)).get_pixels() + + title = model.get_value(iter, 1) + sep = "*" + data = iconstr + sep + title + selection.set(selection.target, 8, data) + return + + + def drag_data_received_data(self, treeview, context, x, y, selection, info, etime): + treeselection = treeview.get_selection() + model, from_parent = treeselection.get_selected() + model = treeview.get_model() + sep = "*" + data = selection.data + # aus pixel-string wieder pixbuf objekt erstellen + iconpixtemp, sep, title = data.partition(sep) + iconpix = gtk.gdk.pixbuf_new_from_data(iconpixtemp, gtk.gdk.COLORSPACE_RGB, True, 8, 10, 10, 40) + data = [iconpix, title] + + c = CollectionTest() + obj = c.get_object(self.__from) + #obj = self.get_object(self.__from) + + drop_info = treeview.get_dest_row_at_pos(x, y) + if drop_info: + self.__to = drop_info[0] + + c.insert_object(obj, self.__to) + #self.insert_object(obj, self.__to) + self.treestore.clear() + self.fill_store(self.treestore, None, None) + self.treeview.expand_all() + + if context.action == gtk.gdk.ACTION_MOVE: + context.finish(True, True, etime) + return + + +def main(): + gtk.main() + +if __name__ == "__main__": + #''' + filesystem = CollectionTest() # entspricht dem gesamten Filesystem = Überliste + + c1 = CollectionTest() + c1.setTitle("Addieren leicht") + + c2 = CollectionTest() + c2.setTitle("Hausuebungen") + + c3 = CollectionTest() + c3.setTitle("Addieren sehr leicht") + + ex1 = Task() + ex1.setTitle("Aufgabe 1") + ex1.setDescription("Addieren mit Zahlen von 2-5") + ex1.setSettings("2345+") + + ex2 = Task() + ex2.setTitle("Aufgabe 2") + ex2.setDescription("Addieren bis 10") + ex2.setSettings("123456789+") + + ex3 = Task() + ex3.setTitle("Hausuebung bis 26.11.2009") + ex3.setDescription("Rechnen bis 4") + ex3.setSettings("1234+") + + ex4 = Task() + ex4.setTitle("Hausuebung bis 04.12.2009") + ex4.setDescription("Rechnen bis 7") + ex4.setSettings("1234567+-") + + ex5 = Task() + ex5.setTitle("Multiplizieren") + ex5.setDescription("Multiplizieren mit Zahlen bis 5") + ex5.setSettings("12345*") + + ex6 = Task() + ex6.setTitle("Aufgabe 1") + ex6.setDescription("erstes mal addieren") + ex6.setSettings("12+") + + ex7 = Task() + ex7.setTitle("Aufgabe 2") + ex7.setDescription("zweites mal addieren") + ex7.setSettings("123+") + + list = [ex6, ex7] + c3.setData(list) + + list = [ex1, ex2, c3] + c1.setData(list) + + list = [ex3, ex4] + c2.setData(list) + + list = [c1, c2, ex5] + filesystem.setData(list) + + # pickle erstellen + path = os.path.join(os.getcwd(), "data") + path = path + "/" + filesystem.getTitle() + ".data" + f = open(path, "wb") + pickle.dump(filesystem, f) + f.close() + + del filesystem + del c1 + del c2 + del c3 + del ex1 + del ex2 + del ex3 + del ex4 + del ex5 + del ex6 + del ex7 + #''' + + tvexample = TreeViewExampleWithIcon() + main() |