diff options
Diffstat (limited to 'ReckonPrimer.activity/display.py')
-rwxr-xr-x | ReckonPrimer.activity/display.py | 142 |
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 + |