Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/ReckonPrimer.activity/treeview_icon.py
diff options
context:
space:
mode:
Diffstat (limited to 'ReckonPrimer.activity/treeview_icon.py')
-rw-r--r--ReckonPrimer.activity/treeview_icon.py247
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()