All pastes #27800 Raw Edit

treeviewmultidrag

public python v1 · immutable
#27800 ·published 2005-11-06 20:41 UTC
rendered paste body
#! /usr/bin/env pythonimport gtkclass TreeViewMultidrag(gtk.TreeView):    def __init__(self, *args, **kwargs):        super(TreeViewMultidrag, self).__init__(*args, **kwargs)        self.connect('button-press-event', self.__press)        self.connect('button-release-event', self.__release)        self.connect('drag-begin', self.__drag)        self.get_selection().set_mode(gtk.SELECTION_MULTIPLE)        self.__select = None    def __press(self, view, event):        # only handle non-ctrl/shift left clicks        if event.get_state() & (gtk.gdk.SHIFT_MASK | gtk.gdk.CONTROL_MASK):            return False        x = int(event.x)        y = int(event.y)        try: path, col, cellx, celly = view.get_path_at_pos(x, y)        except TypeError:            return False        # only override if clicked path is selected        sel = view.get_selection()        if not sel.path_is_selected(path):            return False        # save path, and override selection change        self.__select = path        return True    def __drag(self, *args):        self.__select = None    def __release(self, view, event):        if self.__select is not None:            sel = view.get_selection()            sel.unselect_all()            sel.select_path(self.__select)            self.__select = Noneif __name__ == '__main__':    win = gtk.Window()    mod = gtk.ListStore(str)    for s in 'abcdefg': mod.append([s])    tv = TreeViewMultidrag(mod)    tv.append_column(gtk.TreeViewColumn('test', gtk.CellRendererText(), text=0))    tv.enable_model_drag_source(gtk.gdk.MODIFIER_MASK, [('a', 0, 0)],            gtk.gdk.ACTION_DEFAULT)    win.add(tv)    win.show_all()    win.connect('delete-event', gtk.main_quit)    gtk.main()