void AbstractTextFormatter::fetchHeaderList( QStringList *headers, const SharedUiItem &item) const { Q_ASSERT(headers); if (_columnHeadersEnabled) { int n = item.uiSectionCount(); for (int i = 0; i < n; ++i) headers->append(item.uiHeaderString(i)); } }
SharedUiItemsTreeModel::TreeItem::TreeItem( SharedUiItemsTreeModel *model, SharedUiItem item, TreeItem *parent, int row) : _model(model), _item(item), _row(row), _parent(parent) { QString id = item.qualifiedId(); if (parent) { parent->_children.insert(row, this); for (++row; row < parent->_children.size(); ++row) _parent->_children[row]->_row = row; } if (!id.isEmpty()) _model->_itemsIndex.insert(id, this); }
Qt::ItemFlags uiFlags(int section) const { return (section == _timestampSection) ? Qt::ItemIsSelectable|Qt::ItemIsEnabled : _wrapped.uiFlags(section); }
QVariant uiHeaderData(int section, int role) const { return (role == Qt::DisplayRole && section == _timestampSection) ? QStringLiteral("Timestamp") : _wrapped.uiHeaderData(section, role); }
QVariant uiData(int section, int role) const { return (role == Qt::DisplayRole && section == _timestampSection) ? _timestamp : _wrapped.uiData(section, role); }
SharedUiItemLogWrapperData(SharedUiItem wrapped, QDateTime timestamp) : _id(QString::number(_sequence.fetchAndAddOrdered(1))), _wrapped(wrapped), _timestamp(timestamp), _timestampSection(wrapped.uiSectionCount()) { }
void SharedUiItemsTreeModel::changeItem( SharedUiItem newItem, SharedUiItem oldItem, QString idQualifier) { if (!itemQualifierFilter().isEmpty() && !itemQualifierFilter().contains(idQualifier)) return; //qDebug() << "SharedUiItemsTreeModel::changeItem" << newItem.id() // << oldItem.id() << idQualifier; if (newItem.isNull()) { if (!oldItem.isNull()) { // delete QModelIndex oldIndex = indexOf(oldItem); //qDebug() << "delete" << newItem << oldItem << oldIndex.isValid(); if (oldIndex.isValid()) { removeRows(treeItemByIndex(oldIndex)->row(), 1, oldIndex.parent()); } } else { // ignore changeItem(null,null) } } else { if (oldItem.isNull()) { // if an item with same id exists, change create into update TreeItem *treeItem = _itemsIndex.value(newItem.qualifiedId()); if (treeItem) oldItem = treeItem->item(); } else { // if no item with oldItem id exists, change update into create TreeItem *treeItem = _itemsIndex.value(oldItem.qualifiedId()); if (!treeItem) oldItem = SharedUiItem(); } if (oldItem.isNull()) { // create //qDebug() << "create" << newItem << oldItem; // << _itemsIndex.keys(); QModelIndex parent; int row = -1; // -1 will be replaced by size() in adjustTreeItemAndRow() determineItemPlaceInTree(newItem, &parent, &row); TreeItem *parentTreeItem = treeItemByIndex(parent); adjustTreeItemAndRow(&parentTreeItem, &row); beginInsertRows(parent, row, row); new TreeItem(this, newItem, parentTreeItem, row); endInsertRows(); } else { // update (incl. rename) //qDebug() << "update" << newItem << oldItem; QModelIndex oldIndex = indexOf(oldItem); TreeItem *treeItem = treeItemByIndex(oldIndex); QModelIndex oldParent = oldIndex.parent(), newParent = oldParent; QString newId = newItem.qualifiedId(), oldId = oldItem.qualifiedId(); int newRow = -1; // -1 will be replaced by size() in adjustTreeItemAndRow() determineItemPlaceInTree(newItem, &newParent, &newRow); TreeItem *newParentTreeItem = treeItemByIndex(newParent); adjustTreeItemAndRow(&newParentTreeItem, &newRow); treeItem->item() = newItem; updateIndexIfIdChanged(newId, oldId, treeItem); emit dataChanged(oldIndex, oldIndex); // LATER make it possible for determineItemPlaceInTree to change row without changing parent if (newParent != oldParent) { // need to move item in the tree if (newParentTreeItem->isDescendantOf(treeItem)) { qDebug() << "SharedUiItemsTreeModel::changeItem denies item moving " "because new parent would be a descendant of moved " "child."; } else { //qDebug() << "reparenting:" << treeItem->item().id() // <<"parent:" << oldParent << treeItem // << treeItem->row() << "->" << newParent // << newParentTreeItem << newRow << "/" // << newParentTreeItem->childrenCount(); //qDebug() << " root:" << _root << _root->item().id(); Q_ASSERT_X(beginMoveRows( oldParent, treeItem->row(), treeItem->row(), newParent, newRow), "SharedUiItemsTreeModel::changeItem", "inconsistent reparenting according to beginMoveRows"); newParentTreeItem->adoptChild(treeItem, newRow); updateIndexIfIdChanged(newId, oldId, treeItem); // LATER not sure needed endMoveRows(); } } } } emit itemChanged(newItem, oldItem); }