Public Types | Public Member Functions

TreeItem Class Reference

Item that represents a path node in the ProjectTreeView. More...

#include <treeitem.h>

Collaboration diagram for TreeItem:
Collaboration graph
[legend]

List of all members.

Public Types

enum  TreeItemRole {
  TreeItemNULL = -1, TreeItemId = Qt::UserRole + 500, TreeItemPath, TreeItemPathString,
  TreeItemName, TreeItemFullName, TreeItemColumnName, TreeItemColumnId,
  TreeItemTimestampMax, TreeItemTimestampMin, TreeItemTimestampScope, TreeItemDescription,
  TreeItemSetupId
}

Public Member Functions

 TreeItem (const QList< QVariant > &data, const QString &primaryKeyColumnName, const qint64 primaryKeyValue, TreeItem *parent=0)
 ~TreeItem ()
void appendChild (TreeItem *child)
TreeItemchild (int row) const
TreeItemfind (int treeId) const
int childCount () const
int columnCount () const
QVariant data (const int &column) const
QVariant data (const TreeItem::TreeItemRole &role) const
bool setData (const TreeItem::TreeItemRole &role, const QVariant &data)
bool insertChild (int row, TreeItem *item)
TreeItemparent () const
bool removeChild (int row)
int row () const
QVector< QVariantgetDataRecursively (const TreeItem::TreeItemRole &role, const TreeItem::TreeItemRole &matchRole=TreeItem::TreeItemNULL, const QVariant &matchValue=QVariant()) const
QString getPreviewSql ()
QString getQueryConstraints (const QString &suffix=QString()) const
const QStringgetColumnName () const
bool operator== (const TreeItem &t) const
bool isRoot () const

Detailed Description

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.


Member Enumeration Documentation

Enumerator:
TreeItemNULL 
TreeItemId 
TreeItemPath 
TreeItemPathString 
TreeItemName 
TreeItemFullName 
TreeItemColumnName 
TreeItemColumnId 
TreeItemTimestampMax 
TreeItemTimestampMin 
TreeItemTimestampScope 
TreeItemDescription 
TreeItemSetupId 

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


Constructor & Destructor Documentation

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


Member Function Documentation

void TreeItem::appendChild ( TreeItem child  ) 

{
    childItems.append(item);
}

TreeItem * TreeItem::child ( int  row  )  const
int TreeItem::childCount (  )  const
int TreeItem::columnCount (  )  const

Referenced by ProjectTreeModel::columnCount().

{
    return 3;
}

QVariant TreeItem::data ( const int &  column  )  const
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");
}

QString TreeItem::getQueryConstraints ( const QString suffix = QString()  )  const

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().

{
    if (row < 0 || row > childItems.count())
        return false;

    childItems.insert(row, item);
    return true;
}

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().

{
    if (row < 0 || row >= childItems.count())
        return false;

    delete childItems.takeAt(row);
    return true;
}

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


The documentation for this class was generated from the following files: