Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/ReckonPrimer.activity/display.py
diff options
context:
space:
mode:
Diffstat (limited to 'ReckonPrimer.activity/display.py')
-rwxr-xr-xReckonPrimer.activity/display.py142
1 files changed, 124 insertions, 18 deletions
diff --git a/ReckonPrimer.activity/display.py b/ReckonPrimer.activity/display.py
index a1f9fcd..0f9a6d9 100755
--- a/ReckonPrimer.activity/display.py
+++ b/ReckonPrimer.activity/display.py
@@ -16,7 +16,12 @@ class Display:
Definition and manipulation of all GUI-elemts.
Exception (redesign?): def define_buttons in classes derived from Exercise.
"""
- print("in display, class definition")
+ print("in display, class definition")
+ # DnD for gtk_tree in
+ TARGETS = [
+ ('pixbuf', gtk.TARGET_SAME_WIDGET, 0),
+ ('text', gtk.TARGET_SAME_WIDGET, 1)
+ ]
def __init__(self, window):
self._permanent_gui_elements(window)
@@ -29,11 +34,12 @@ class Display:
# and Collection.select_exerc_callback
self._testvar = 'FOUND'
- def register(self, sess, co, learner):
+ def register(self, sess, co, learner, exstore):
"""register _after_ Session and Coach have been instantiated"""
self._sess = sess
self._co = co
self._learner = learner
+ self._exstore = exstore
def _permanent_gui_elements(self, window):
# The display is partitioned as follows
@@ -43,7 +49,7 @@ class Display:
#0+-------------------------+------------------------+
# | | |
#1| | OVERLAYS OF |
- # | scrolled_window | collection_table |
+ # | scrolled_window | exstore_table |
#2| | OR |
# | | settings_table |
#3+-------------------------+ OR |
@@ -90,17 +96,19 @@ class Display:
# 3 tables as overlays with same 15 lines and 6 columns
self.settings_table = gtk.Table (14, 9, True)
- self.collection_table = gtk.Table(14, 9, True)
+ self.exstore_table = gtk.Table(14, 9, True)
+ self.gtk_tree() #-->self.treeview
+ #@# self.exstore_table.attach(self.treeview, 0, 9, 0, 13)
self.feedback_table = gtk.Table (14, 9, True)
# Insert the 3 tables into the right half of the screen
self.table.attach(self.settings_table, 1, 2, 0, 5)
- self.table.attach(self.collection_table,1, 2, 0, 5)
+ self.table.attach(self.exstore_table, 1, 2, 0, 5)
self.table.attach(self.feedback_table, 1, 2, 0, 5)
# show all tables, scrolled_window already shown above
self.settings_table_show() # treat uniformly <>!
- self.collection_table.show() # treat uniformly !
+ self.exstore_table.show() # treat uniformly !
self.feedback_table.show() # treat uniformly !
self.table.show() # since all other tables have been inserted
@@ -139,9 +147,9 @@ class Display:
self.sec_butt.show()
def switch_setts_to_coll_callback(self, widget):
- """ Switch from settings_table to collection_table. """
+ """ Switch from settings_table to exstore_table. """
self.settings_table.hide()
- self.collection_table.show()
+ self.exstore_table.show()
def feedback_table_show(self):
"""RENAME to draw_feedback_screen"""
@@ -253,14 +261,14 @@ class Display:
print('in display.release_feedb_callback')
self.calc_table.destroy()
self.feedback_table_hide()
- self.collection_table.show() # from here the next user-interactions
+ self.exstore_table.show() # from here the next user-interactions
def release_sett_callback(self, widget):
""" Start calcs with these settings (probably updated). """
print('in display.release_sett_callback')
self._co.settings_done(self._ex._sett)
self.settings_table.hide()
- #self.collection_table.hide()
+ #self.exstore_table.hide()
self.feedback_table_show()
@@ -387,9 +395,9 @@ class Display:
self.calc_table.destroy()
def offer_coll_to_learner(self, collect):
- """TODO: get the users choice from buttons above the settings"""
- collect.define_coll_gui()
- collect.set_coll_gui(collect) # sets callbacks
+ """Show the exstore to the learner"""
+ collect.define_coll_gui() #@#
+ collect.set_coll_gui(collect) #@# sets callbacks
self.set_coll_to_learner() # set finish_learner_coll_butt + callb
def switch_exercise(self):
@@ -411,12 +419,12 @@ class Display:
self._coll_key = coll_key
def set_coll_to_learner(self):
- """ Set the permanent gui-elements for collection_table. """
+ """ Set the permanent gui-elements for exstore_table. """
print('in display.set_coll_to_learner')
# button switching from collect_table to calcs
self.flc_butt = gtk.Button(None, gtk.STOCK_GO_FORWARD)
self.flc_butt.connect("clicked", self.finish_learner_coll_callback)
- self.collection_table.attach(self.flc_butt, 0, 8, 13, 14)
+ self.exstore_table.attach(self.flc_butt, 0, 8, 13, 14)
self.flc_alignment = self.flc_butt.get_children()[0]
self.flc_hbox = self.flc_alignment.get_children()[0]
self.flc_image, self.flc_label = self.flc_hbox.get_children()
@@ -426,7 +434,7 @@ class Display:
# button switching from collect_table to settings_table
self.sts_butt = gtk.Button("")
self.sts_butt.connect("clicked", self.switch_learner_to_setts)
- self.collection_table.attach(self.sts_butt, 8, 9, 13, 14)
+ self.exstore_table.attach(self.sts_butt, 8, 9, 13, 14)
self.sts_alignment = self.sts_butt.get_children()[0]
self.sts_butt.show()
@@ -436,14 +444,112 @@ class Display:
print('in display.finish_learner_coll_callback, _coll_key=', self._coll_key)
if not(self._coll_key is None):
self._co.exercise_selected(self._coll_key)
- self.collection_table.hide()
+ self.exstore_table.hide()
self.feedback_table_show()
def switch_learner_to_setts(self, widget):
""" Callback on sts_butt. asks the Coach if allowed. """
self._co.switch_to_settings(self._coll_key)
- self.collection_table.hide()
+ self.exstore_table.hide()
def set_curr_exerc(self, exerc):
""" self._ex is needed for feedback_table etc. """
self._ex = exerc
+
+ def gtk_tree(self):
+ """
+ Define TreeStore and TreeView
+ """
+ self.treestore = gtk.TreeStore(gtk.gdk.Pixbuf, str)
+
+ self.treestore.clear()
+ #self._exstore.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()
+
+ 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
+