Esempio n. 1
0
    def _dnd_data_received(self, treeview, context, x, y, selection, targetType, time):
        model = treeview.get_model()
        data = selection.get_data()
        drop_info = treeview.get_dest_row_at_pos(x, y)
        if drop_info:
            path, position = drop_info
            iterator = model.get_iter(path)
            if not os.path.isdir(model[iterator][1]):
                iterator = model.iter_parent(iterator)
            dest_path = model[iterator][1]

            # Only move on valid move
            if self.can_move_file(data, dest_path):
                new_filepath = os.path.join(dest_path, os.path.basename(data))
                if os.path.exists(new_filepath):
                    # Ask user to overwrite or rename new file
                    if self.overwrite_file_dialog():
                        model.append(iterator, [os.path.basename(data), new_filepath])
                        Util.cp_file(data, new_filepath)
                    else:
                        text = self.rename_file_dialog()
                        if text is not None and not os.path.exists(os.path.join(dest_path, text)):
                            new_filepath = os.path.join(dest_path, text)
                            model.append(iterator, [text, new_filepath])
                            Util.cp_file(data, new_filepath)
                else:
                    new_filepath = os.path.join(dest_path, os.path.basename(data))
                    model.append(iterator, [os.path.basename(data), new_filepath])
                    Util.cp_file(data, new_filepath)

                # update treeview
                treepath = model.get_path(iterator)
                self._treeview.collapse_row(treepath)
                self._treeview.expand_to_path(treepath)

        if Gdk.DragAction.MOVE == context.get_actions():
            context.finish(True, True, etime)
        return