#include "multiverseitem.h" #include "multiversemodel.h" #include #include #include /** * @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::removeChildren */ void MultiverseItem::removeChildren() { childItems_.clear(); } /** * @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(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_) { if (column) return QVariant(); return QString("%1 (%2)").arg( override_data_.toString(), QString::number(childCount())); } if (universe_) { switch (static_cast(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(column)) { case MultiverseModel::Universe: return discovery_->universe; case MultiverseModel::Description: return QString::fromUtf8(discovery_->description.c_str()); 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(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_ && !discovery_) { if (column) return Qt::NoItemFlags; return base & ~Qt::ItemIsSelectable; } switch (static_cast(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_; }