예제 #1
0
    def test_drop_mime_data_below_list(self):
        # Test dragging an item in the list and drop it below the last item
        obj = DummyHasTraits(names=["A", "B", "C", "D"])
        view = get_view(TabularAdapter(columns=["Name"]))
        with store_exceptions_on_all_threads(), \
                create_ui(obj, dict(view=view)) as ui:
            editor, = ui.get_editors("names")

            model = editor.model
            # sanity check
            self.assertEqual(model.rowCount(None), 4)

            # drag and drop row=1 from within the table.
            # drag creates a PyMimeData object for dropMimeData to consume.
            index = model.createIndex(1, 0)
            mime_data = model.mimeData([index])

            # when
            # dropped below the list, the "parent" is invalid.
            parent = QtCore.QModelIndex()  # invalid index object
            model.dropMimeData(mime_data, QtCore.Qt.MoveAction, -1, -1, parent)

            # then
            mime_data = model.mimeData([
                model.createIndex(i, 0) for i in range(model.rowCount(None), )
            ])
            content = mime_data.instance()
            self.assertEqual(content, ["A", "C", "D", "B"])
            self.assertEqual(obj.names, content)
예제 #2
0
    def insertRows(self, row, count, parent=QtCore.QModelIndex()):
        """Reimplemented to allow creation of new rows."""

        editor = self._editor
        items = list(editor.items())
        self.beginInsertRows(parent, row, row + count - 1)
        for i in range(count):
            editor.callx(items.insert, row + i, editor.create_new_row())
        self.endInsertRows()
        return True
예제 #3
0
    def removeRows(self, row, count, parent=QtCore.QModelIndex()):
        """Reimplemented to allow row deletion, as well as reordering via drag
        and drop."""

        editor = self._editor
        items = list(editor.items())
        self.beginRemoveRows(parent, row, row + count - 1)
        for i in range(count):
            editor.callx(items.pop, row + i)
        self.endRemoveRows()
        return True
예제 #4
0
    def removeRows(self, row, count, parent=QtCore.QModelIndex()):
        """ Reimplemented to allow row deletion, as well as reordering via drag
            and drop.
        """
        editor = self._editor
        adapter = editor.adapter

        self.beginRemoveRows(parent, row, row + count - 1)
        for i in xrange(count):
            editor.callx(adapter.delete, editor.object, editor.name, row)
        self.endRemoveRows()
        return True
예제 #5
0
    def insertRow(self, row, parent=QtCore.QModelIndex(), obj=None):
        """Reimplemented to allow creation of new rows. Added an optional
        arg to allow the insertion of an existing row object."""

        editor = self._editor
        if obj is None:
            obj = editor.create_new_row()

        self.beginInsertRows(parent, row, row)
        editor.callx(list(editor.items()).insert, row, obj)
        self.endInsertRows()
        return True
예제 #6
0
    def insertRows(self, row, count, parent=QtCore.QModelIndex()):
        """Reimplemented to allow creation of new items."""
        editor = self._editor
        adapter = editor.adapter

        self.beginInsertRows(parent, row, row + count - 1)
        for i in range(count):
            value = adapter.get_default_value(editor.object, editor.name)
            editor.callx(adapter.insert, editor.object, editor.name, row,
                         value)
        self.endInsertRows()
        return True
예제 #7
0
    def insertRow(self, row, parent=QtCore.QModelIndex(), obj=None):
        """ Reimplemented to allow creation of new rows. Added an optional
            arg to allow the insertion of an existing row object.
        """
        editor = self._editor
        adapter = editor.adapter

        if obj is None:
            obj = adapter.get_default_value(editor.object, editor.name)
        self.beginInsertRows(parent, row, row)
        editor.callx(editor.adapter.insert, editor.object, editor.name, row,
                     obj)
        self.endInsertRows()
        return True
예제 #8
0
 def removeRows(self, row, count, parent=QtCore.QModelIndex()):
     """ Reimplemented to allow row deletion, as well as reordering via drag
         and drop.
     """
     editor = self._editor
     adapter = editor.adapter
     self.beginRemoveRows(parent, row, row + count - 1)
     for i in xrange(count):
         editor.callx(adapter.delete, editor.object, editor.name, row)
     self.endRemoveRows()
     n = self.rowCount(None)
     if not editor.factory.multi_select:
         editor.selected_row = row if row < n else row - 1
     else:
         #FIXME: what should the selection be?
         editor.multi_selected_rows = []
     return True