void WAbstractItemModel::dropEvent(const WDropEvent& e, DropAction action, int row, int column, const WModelIndex& parent) { // TODO: For now, we assumes selectionBehavior() == RowSelection ! WItemSelectionModel *selectionModel = dynamic_cast<WItemSelectionModel *>(e.source()); if (selectionModel) { WAbstractItemModel *sourceModel = selectionModel->model(); /* * (1) Insert new rows (or later: cells ?) */ if (action == MoveAction || row == -1) { if (row == -1) row = rowCount(parent); insertRows(row, selectionModel->selectedIndexes().size(), parent); } /* * (2) Copy data */ WModelIndexSet selection = selectionModel->selectedIndexes(); int r = row; for (WModelIndexSet::const_iterator i = selection.begin(); i != selection.end(); ++i) { WModelIndex sourceIndex = *i; if (selectionModel->selectionBehavior() == SelectRows) { WModelIndex sourceParent = sourceIndex.parent(); for (int col = 0; col < sourceModel->columnCount(sourceParent); ++col) { WModelIndex s = sourceModel->index(sourceIndex.row(), col, sourceParent); WModelIndex d = index(r, col, parent); copyData(sourceModel, s, this, d); } ++r; } else { } } /* * (3) Remove original data */ if (action == MoveAction) { while (!selectionModel->selectedIndexes().empty()) { WModelIndex i = Utils::last(selectionModel->selectedIndexes()); sourceModel->removeRow(i.row(), i.parent()); } } } }
void gdContainerBar::doDelete() { WModelIndexSet pSet = m_pView->selectedIndexes(); if ( pSet.empty() ) return; // TODO : Dialog confirm for (WModelIndexSet::iterator it = pSet.begin(); it != pSet.end(); ++it) { WModelIndex pIdx = *it; rowDeleted_.emit(pIdx.row()); m_pView->model()->removeRows(pIdx.row(), 1); } }
WModelIndexSet WModelIndex::decodeFromRawIndexes(const WModelIndexSet& encodedIndexes) { WModelIndexSet result; for (WModelIndexSet::const_iterator i = encodedIndexes.begin(); i != encodedIndexes.end(); ++i) { WModelIndex n = i->decodeFromRawIndex(); if (n.isValid()) result.insert(n); } return result; }
void WModelIndex::encodeAsRawIndexes(WModelIndexSet& indexes) { for (WModelIndexSet::iterator i = indexes.begin(); i != indexes.end(); ++i) (const_cast<WModelIndex &>(*i)).encodeAsRawIndex(); }