Item that represents a path node in the ProjectTreeView. More...
#include <treeitem.h>
Item that represents a path node in the ProjectTreeView.
This class is heavily inspired by the Editable Tree Model example (and other similar) in the QT documentation.
{ TreeItemNULL = -1, TreeItemId = Qt::UserRole + 500, TreeItemPath, //TreePath TreeItemPathString, //QString TreeItemName, TreeItemFullName, //QString: "project, location, installation, sensor_category, sensor, sensor_channel" TreeItemColumnName, TreeItemColumnId, TreeItemTimestampMax, //QDateTime TreeItemTimestampMin, //QDateTime TreeItemTimestampScope, //QString TreeItemDescription, //QString TreeItemSetupId //int };
TreeItem::TreeItem | ( | const QList< QVariant > & | data, | |
const QString & | primaryKeyColumnName, | |||
const qint64 | primaryKeyValue, | |||
TreeItem * | parent = 0 | |||
) |
: columnName(primaryKeyColumnName),columnPKValue(primaryKeyValue) { setData(TreeItem::TreeItemColumnId, QVariant::fromValue(primaryKeyValue)); setData(TreeItem::TreeItemColumnName, QVariant::fromValue(primaryKeyColumnName)); parentItem = parent; itemRoleData.insert(TreeItem::TreeItemName, data.value(0)); itemRoleData.insert(TreeItem::TreeItemDescription, data.value(2)); }
TreeItem::~TreeItem | ( | ) |
{ qDeleteAll(childItems); }
TreeItem * TreeItem::child | ( | int | row | ) | const |
Referenced by find(), getDataRecursively(), ProjectTreeModel::index(), and ProjectTreeModel::removeRows().
int TreeItem::childCount | ( | ) | const |
Referenced by find(), getDataRecursively(), ProjectTreeModel::insertRows(), ProjectTreeModel::removeRows(), and ProjectTreeModel::rowCount().
{ return childItems.count(); }
int TreeItem::columnCount | ( | ) | const |
Referenced by ProjectTreeModel::columnCount().
{
return 3;
}
QVariant TreeItem::data | ( | const int & | column | ) | const |
Referenced by ProjectTreeModel::data(), DataHeaderSection::DataHeaderSection(), ImportFileModel::dropMimeData(), find(), getDataRecursively(), getPreviewSql(), DataHeaderSection::getSqlForColumn(), DataHeaderSection::getTitle(), DataHeaderSection::getTreeId(), ProjectTreeModel::headerData(), isRoot(), DataHeaderSection::onCalibrationSelectionChange(), ProjectTreeModel::removeRows(), TagContainer::setColumnTagValue(), ProjectTreeModel::setData(), and TreeViewMenu::TreeViewMenu().
{ switch (column) { case 0: return data(TreeItem::TreeItemName); case 1: return data(TreeItem::TreeItemTimestampScope); case 2: return data(TreeItem::TreeItemDescription); default: return QVariant(); } }
QVariant TreeItem::data | ( | const TreeItem::TreeItemRole & | role | ) | const |
{ if (role == TreeItem::TreeItemFullName) return QVariant(getFullName()); if (role == TreeItem::TreeItemPath) return QVariant::fromValue(getTreePath()); if (role == TreeItem::TreeItemPathString) return QVariant::fromValue(getTreePathString()); if (role == TreeItem::TreeItemTimestampScope) return QVariant::fromValue(getTimestampScope()); if (role == TreeItem::TreeItemTimestampMin || role == TreeItem::TreeItemTimestampMax) return QVariant::fromValue(calculateTimestamp(role)); if (role == TreeItem::TreeItemDescription) return QVariant(descriptionCalculated()); Q_ASSERT(!itemRoleData.isEmpty()); return itemRoleData.value(role); }
TreeItem * TreeItem::find | ( | int | treeId | ) | const |
Referenced by BaseQueryModel::dropMimeData(), find(), getPreviewSql(), and ProjectTreeModel::treeItemPointer().
{ int currentTreeId = data(TreeItem::TreeItemId).toInt(); if (treeId == currentTreeId) return const_cast<TreeItem*>(this); for(int i = 0; i < childCount(); i++) { TreeItem *found = child(i)->find(treeId); if (found) return found; } return 0; }
const QString * TreeItem::getColumnName | ( | ) | const |
{return &columnName;};
QVector< QVariant > TreeItem::getDataRecursively | ( | const TreeItem::TreeItemRole & | role, | |
const TreeItem::TreeItemRole & | matchRole = TreeItem::TreeItemNULL , |
|||
const QVariant & | matchValue = QVariant() | |||
) | const |
Referenced by BaseQueryModel::dropMimeData(), getDataRecursively(), and getPreviewSql().
{ QVector<QVariant> container; QVariant dataRole = data(role); if (matchRole == TreeItem::TreeItemNULL /*&& !dataRole.isNull()*/){ if (!dataRole.isNull()) container << dataRole; } else { if (data(matchRole) == matchValue) container << dataRole; } if (childCount() != 0){ for (int i = 0; i < childCount(); i++) container << child(i)->getDataRecursively(role, matchRole, matchValue); } return container; }
QString TreeItem::getPreviewSql | ( | ) |
{ QStringList fromList; QString beginTime = TimeConstraint::instance()->getTimeConstraint(TimeConstraint::TypeBeginTime).toString(Qt::ISODate); QString endTime = TimeConstraint::instance()->getTimeConstraint(TimeConstraint::TypeEndTime).toString(Qt::ISODate); foreach(QVariant treeId, getDataRecursively(TreeItem::TreeItemId)){ bool conversion; int tree_id = treeId.toInt(&conversion); if (tree_id == -1) continue; Q_ASSERT(find(tree_id)); Q_ASSERT(conversion == true); /* Blijkbaar kan QHeaderViews sectie-header niet meer dan 64 karakters bevatten */ fromList << GlobalConst::DB_BASE_DATA_QUERY.arg(trimName(find(treeId.toInt())->data(TreeItem::TreeItemFullName).toString(), 62).append("\"").prepend("\""), QString::number(treeId.toInt()), beginTime, endTime); } if (fromList.isEmpty()) return QString(); //making base outer join query QString query; query.append("SELECT * FROM \n"); int fromListCount = fromList.count(); for (int i = 0; i < fromListCount; i++){ query.append(fromList[i]); if (fromListCount == 1) break; if (i == 0) query.append(" FULL OUTER JOIN \n"); else if (i == fromListCount - 1) query.append(" USING (timestamp) \n"); else query.append(" USING (timestamp) FULL OUTER JOIN \n"); } return query.append("ORDER BY timestamp"); }
Referenced by getQueryConstraints(), and ProjectTreeModel::removeRows().
{ if (columnPKValue == 0) return QString(); if (columnName == "sens_cate_id") // is very problematic but currently needed!!! return parent()->getQueryConstraints(suffix); else return QString().append(columnName).append(" = ").append(QString::number(columnPKValue)).append(suffix).prepend(parent()->getQueryConstraints(QString(" AND "))); }
bool TreeItem::insertChild | ( | int | row, | |
TreeItem * | item | |||
) |
Referenced by ProjectTreeModel::insertRows().
bool TreeItem::isRoot | ( | ) | const |
{ if (data(TreeItem::TreeItemColumnName).toString() == QString("root")) return true; else return false; }
bool TreeItem::operator== | ( | const TreeItem & | t | ) | const |
{
return (getTreePath() == t.getTreePath());
}
TreeItem * TreeItem::parent | ( | ) | const |
Referenced by ProjectTreeModel::data(), getQueryConstraints(), and ProjectTreeModel::parent().
{
return parentItem;
}
bool TreeItem::removeChild | ( | int | row | ) |
Referenced by ProjectTreeModel::removeRows().
int TreeItem::row | ( | ) | const |
Referenced by ProjectTreeModel::parent().
{ if (parentItem) return parentItem->childItems.indexOf(const_cast<TreeItem*>(this)); return 0; }
bool TreeItem::setData | ( | const TreeItem::TreeItemRole & | role, | |
const QVariant & | data | |||
) |
Referenced by TreeItem().
{ itemRoleData.insert(role, data); return true; }