Ejemplo n.º 1
0
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));
  }
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
 Qt::ItemFlags uiFlags(int section) const {
 return (section == _timestampSection)
     ? Qt::ItemIsSelectable|Qt::ItemIsEnabled : _wrapped.uiFlags(section); }
Ejemplo n.º 4
0
 QVariant uiHeaderData(int section, int role) const {
   return (role == Qt::DisplayRole && section == _timestampSection)
       ? QStringLiteral("Timestamp") : _wrapped.uiHeaderData(section, role); }
Ejemplo n.º 5
0
 QVariant uiData(int section, int role) const {
   return (role == Qt::DisplayRole && section == _timestampSection)
       ? _timestamp : _wrapped.uiData(section, role); }
Ejemplo n.º 6
0
 SharedUiItemLogWrapperData(SharedUiItem wrapped, QDateTime timestamp)
   : _id(QString::number(_sequence.fetchAndAddOrdered(1))),
     _wrapped(wrapped), _timestamp(timestamp),
     _timestampSection(wrapped.uiSectionCount()) { }
Ejemplo n.º 7
0
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);
}