1
0
Fork 0
OpenLCP/example/sACN Explorer/multiverseitem.cpp

206 lines
4.2 KiB
C++

#include "multiverseitem.h"
#include "multiversemodel.h"
#include <QFont>
#include <QMetaEnum>
#include <QMetaType>
/**
* @brief MultiverseItem::MultiverseItem
* @param universe
* @param parent
*/
MultiverseItem::MultiverseItem(MultiverseItem* parent,
QSacnUniverse *universe,
discoveredUniverse *discovery)
: universe_(universe)
, discovery_(discovery)
, parentItem_(parent)
, override_data_(QVariant())
{
if(parent)
parent->appendChild(this);
}
/**
* @brief MultiverseItem::~MultiverseItem
*/
MultiverseItem::~MultiverseItem()
{
for (const auto & child : childItems_)
delete child;
}
/**
* @brief MultiverseItem::appendChild
* @param item
*/
void MultiverseItem::appendChild(MultiverseItem* item)
{
childItems_.append(item);
}
/**
* @brief MultiverseItem::removeChild
* @param child
*/
void MultiverseItem::removeChild(MultiverseItem* child)
{
for (int i = 0; i < childItems_.size(); ++i)
if (childItems_.at(i) == child)
childItems_.remove(i);
}
/**
* @brief MultiverseItem::setOverrideData
* @param data
*/
void MultiverseItem::setOverrideData(QVariant data)
{
override_data_ = data;
}
/**
* @brief MultiverseItem::child
* @param row
* @return
*/
MultiverseItem* MultiverseItem::child(int row)
{
if (row < 0 || row >= childItems_.size())
return nullptr;
return childItems_.at(row);
}
/**
* @brief MultiverseItem::childCount
* @return
*/
int MultiverseItem::childCount() const
{
return childItems_.count();
}
/**
* @brief MultiverseItem::row
* @return
*/
int MultiverseItem::row() const
{
if (parentItem_)
return parentItem_->childItems_.indexOf(const_cast<MultiverseItem*>(this));
return 0;
}
/**
* @brief MultiverseItem::data
* @param column
* @return
*/
QVariant MultiverseItem::data(int column, int role) const
{
switch (role) {
case Qt::DisplayRole:
{
if (!universe_ && !discovery_)
return column ? QVariant() : override_data_;
if (universe_)
{
switch (static_cast<MultiverseModel::Column>(column))
{
case MultiverseModel::Universe:
return universe_->number();
case MultiverseModel::Priority:
{
auto v = universe_->priority();
if (v > 200)
return QVariant();
return v;
}
case MultiverseModel::Description:
return universe_->description();
default:
return QVariant();
}
}
if (discovery_)
{
switch (static_cast<MultiverseModel::Column>(column))
{
case MultiverseModel::Universe:
return discovery_->universe;
case MultiverseModel::Description:
return QString::fromUtf8(discovery_->description);
default:
return QVariant();
}
}
}
case Qt::FontRole:
if (!universe_ && !discovery_)
{
QFont bold;
bold.setBold(true);
return QVariant(bold);
}
return QVariant();
case Qt::EditRole:
if (universe_)
return QVariant(QVariant::fromValue(universe_));
if (discovery_)
return QVariant(QVariant::fromValue(static_cast<void*>(discovery_)));
return data(column, Qt::DisplayRole);
default:
return QVariant();
}
}
/**
* @brief MultiverseItem::flags
* @param column
* @return
*/
Qt::ItemFlags MultiverseItem::flags(int column, Qt::ItemFlags base) const
{
if (!universe_ && !universe_)
{
if (column)
return Qt::NoItemFlags;
return base & ~Qt::ItemIsSelectable;
}
base |= Qt::ItemIsEditable;
switch (static_cast<MultiverseModel::Column>(column))
{
case MultiverseModel::Universe:
return base;
case MultiverseModel::Priority:
return base;
case MultiverseModel::Description:
return base;
default:
return Qt::NoItemFlags;
}
}
/**
* @brief MultiverseItem::parentItem
* @return
*/
MultiverseItem * MultiverseItem::parentItem()
{
return parentItem_;
}