mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 21:20:06 +00:00
Radar Product Model functional stub
This commit is contained in:
parent
a47c13ca99
commit
1ba60f0da1
2 changed files with 149 additions and 22 deletions
|
|
@ -14,17 +14,18 @@ static const auto logger_ = scwx::util::Logger::Create(logPrefix_);
|
||||||
class RadarProductModelItem
|
class RadarProductModelItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit RadarProductModelItem(RadarProductModelItem* parent = nullptr);
|
explicit RadarProductModelItem(const std::vector<QVariant>& data,
|
||||||
|
RadarProductModelItem* parent = nullptr);
|
||||||
~RadarProductModelItem();
|
~RadarProductModelItem();
|
||||||
|
|
||||||
void AppendChild(RadarProductModelItem* child);
|
void AppendChild(RadarProductModelItem* child);
|
||||||
|
|
||||||
RadarProductModelItem* child(int row);
|
const RadarProductModelItem* child(int row) const;
|
||||||
int child_count() const;
|
int child_count() const;
|
||||||
int column_count() const;
|
int column_count() const;
|
||||||
QVariant data(int column) const;
|
QVariant data(int column) const;
|
||||||
int row() const;
|
int row() const;
|
||||||
RadarProductModelItem* parent_item();
|
const RadarProductModelItem* parent_item() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<RadarProductModelItem*> childItems_;
|
std::vector<RadarProductModelItem*> childItems_;
|
||||||
|
|
@ -35,8 +36,16 @@ private:
|
||||||
class RadarProductModelImpl
|
class RadarProductModelImpl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit RadarProductModelImpl() {}
|
explicit RadarProductModelImpl() :
|
||||||
|
rootItem_ {std::make_shared<RadarProductModelItem>(
|
||||||
|
std::vector<QVariant> {QObject::tr("Name"), QObject::tr("Info")})}
|
||||||
|
{
|
||||||
|
rootItem_->AppendChild(new RadarProductModelItem(
|
||||||
|
std::vector<QVariant> {QObject::tr("MyItem"), QObject::tr("Data")}));
|
||||||
|
}
|
||||||
~RadarProductModelImpl() = default;
|
~RadarProductModelImpl() = default;
|
||||||
|
|
||||||
|
std::shared_ptr<RadarProductModelItem> rootItem_;
|
||||||
};
|
};
|
||||||
|
|
||||||
RadarProductModel::RadarProductModel(QObject* parent) :
|
RadarProductModel::RadarProductModel(QObject* parent) :
|
||||||
|
|
@ -45,24 +54,132 @@ RadarProductModel::RadarProductModel(QObject* parent) :
|
||||||
}
|
}
|
||||||
RadarProductModel::~RadarProductModel() = default;
|
RadarProductModel::~RadarProductModel() = default;
|
||||||
|
|
||||||
int RadarProductModel::rowCount(const QModelIndex& /*parent*/) const
|
int RadarProductModel::rowCount(const QModelIndex& parent) const
|
||||||
{
|
{
|
||||||
return 0;
|
const RadarProductModelItem* parentItem;
|
||||||
|
|
||||||
|
if (parent.isValid())
|
||||||
|
{
|
||||||
|
parentItem = static_cast<const RadarProductModelItem*>(
|
||||||
|
parent.constInternalPointer());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parentItem = p->rootItem_.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
return parentItem->child_count();
|
||||||
}
|
}
|
||||||
|
|
||||||
int RadarProductModel::columnCount(const QModelIndex& /*parent*/) const
|
int RadarProductModel::columnCount(const QModelIndex& parent) const
|
||||||
{
|
{
|
||||||
return 0;
|
const RadarProductModelItem* parentItem;
|
||||||
|
|
||||||
|
if (parent.isValid())
|
||||||
|
{
|
||||||
|
parentItem = static_cast<const RadarProductModelItem*>(
|
||||||
|
parent.constInternalPointer());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parentItem = p->rootItem_.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
return parentItem->column_count();
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant RadarProductModel::data(const QModelIndex& /*index*/,
|
QVariant RadarProductModel::data(const QModelIndex& index, int role) const
|
||||||
int /*role*/) const
|
|
||||||
{
|
{
|
||||||
|
if (!index.isValid() || role != Qt::DisplayRole)
|
||||||
|
{
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
const RadarProductModelItem* item =
|
||||||
|
static_cast<const RadarProductModelItem*>(index.internalPointer());
|
||||||
|
|
||||||
|
return item->data(index.column());
|
||||||
|
}
|
||||||
|
|
||||||
|
Qt::ItemFlags RadarProductModel::flags(const QModelIndex& index) const
|
||||||
|
{
|
||||||
|
Qt::ItemFlags flags;
|
||||||
|
|
||||||
|
if (!index.isValid())
|
||||||
|
{
|
||||||
|
flags = Qt::NoItemFlags;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flags = QAbstractItemModel::flags(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant RadarProductModel::headerData(int section,
|
||||||
|
Qt::Orientation orientation,
|
||||||
|
int role) const
|
||||||
|
{
|
||||||
|
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
|
||||||
|
{
|
||||||
|
return p->rootItem_->data(section);
|
||||||
|
}
|
||||||
|
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
RadarProductModelItem::RadarProductModelItem(RadarProductModelItem* parent) :
|
QModelIndex
|
||||||
childItems_ {}, itemData_ {}, parentItem_ {parent}
|
RadarProductModel::index(int row, int column, const QModelIndex& parent) const
|
||||||
|
{
|
||||||
|
if (!hasIndex(row, column, parent))
|
||||||
|
{
|
||||||
|
return QModelIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
const RadarProductModelItem* parentItem;
|
||||||
|
|
||||||
|
if (!parent.isValid())
|
||||||
|
{
|
||||||
|
parentItem = p->rootItem_.get();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parentItem = static_cast<const RadarProductModelItem*>(
|
||||||
|
parent.constInternalPointer());
|
||||||
|
}
|
||||||
|
|
||||||
|
const RadarProductModelItem* childItem = parentItem->child(row);
|
||||||
|
if (childItem)
|
||||||
|
{
|
||||||
|
return createIndex(row, column, childItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
return QModelIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex RadarProductModel::parent(const QModelIndex& index) const
|
||||||
|
{
|
||||||
|
if (!index.isValid())
|
||||||
|
{
|
||||||
|
return QModelIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
const RadarProductModelItem* childItem =
|
||||||
|
static_cast<const RadarProductModelItem*>(index.constInternalPointer());
|
||||||
|
const RadarProductModelItem* parentItem = childItem->parent_item();
|
||||||
|
|
||||||
|
if (parentItem == p->rootItem_.get())
|
||||||
|
{
|
||||||
|
return QModelIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
return createIndex(parentItem->row(), 0, parentItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
RadarProductModelItem::RadarProductModelItem(const std::vector<QVariant>& data,
|
||||||
|
RadarProductModelItem* parent) :
|
||||||
|
childItems_ {}, itemData_ {data}, parentItem_ {parent}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -73,12 +190,13 @@ RadarProductModelItem::~RadarProductModelItem()
|
||||||
|
|
||||||
void RadarProductModelItem::AppendChild(RadarProductModelItem* item)
|
void RadarProductModelItem::AppendChild(RadarProductModelItem* item)
|
||||||
{
|
{
|
||||||
|
item->parentItem_ = this;
|
||||||
childItems_.push_back(item);
|
childItems_.push_back(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
RadarProductModelItem* RadarProductModelItem::child(int row)
|
const RadarProductModelItem* RadarProductModelItem::child(int row) const
|
||||||
{
|
{
|
||||||
RadarProductModelItem* item = nullptr;
|
const RadarProductModelItem* item = nullptr;
|
||||||
|
|
||||||
if (0 <= row && row < childItems_.size())
|
if (0 <= row && row < childItems_.size())
|
||||||
{
|
{
|
||||||
|
|
@ -106,7 +224,7 @@ QVariant RadarProductModelItem::data(int column) const
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return QVariant();
|
return QVariant("Hello world");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -125,7 +243,7 @@ int RadarProductModelItem::row() const
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|
||||||
RadarProductModelItem* RadarProductModelItem::parent_item()
|
const RadarProductModelItem* RadarProductModelItem::parent_item() const
|
||||||
{
|
{
|
||||||
return parentItem_;
|
return parentItem_;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,17 @@ public:
|
||||||
|
|
||||||
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
|
||||||
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
|
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
|
||||||
QVariant data(const QModelIndex& index,
|
|
||||||
int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex& index,
|
||||||
|
int role = Qt::DisplayRole) const override;
|
||||||
|
Qt::ItemFlags flags(const QModelIndex& index) const override;
|
||||||
|
QVariant headerData(int section,
|
||||||
|
Qt::Orientation orientation,
|
||||||
|
int role = Qt::DisplayRole) const override;
|
||||||
|
QModelIndex index(int row,
|
||||||
|
int column,
|
||||||
|
const QModelIndex& parent = QModelIndex()) const override;
|
||||||
|
QModelIndex parent(const QModelIndex& index) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<RadarProductModelImpl> p;
|
std::unique_ptr<RadarProductModelImpl> p;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue