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;
}
1.7.1