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)
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
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
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
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
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
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
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