gui: treemodel: simplify class hierarchy
This commit is contained in:
parent
6baf8216ed
commit
8e5c6557d6
@ -26,7 +26,7 @@ namespace TreeModel {
|
|||||||
|
|
||||||
Model::Model(QObject *parent) :
|
Model::Model(QObject *parent) :
|
||||||
QAbstractItemModel(parent),
|
QAbstractItemModel(parent),
|
||||||
root_(new StaticTreeItem("Elements", nullptr, ElementType::NONE)) {}
|
root_(new Item("Elements", nullptr, ElementType::NONE)) {}
|
||||||
|
|
||||||
Model::~Model() {}
|
Model::~Model() {}
|
||||||
|
|
||||||
|
@ -104,43 +104,29 @@ class Item
|
|||||||
return type_;
|
return type_;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool canFetchMore() const = 0;
|
virtual bool canFetchMore() const
|
||||||
virtual void fetchMore() = 0;
|
|
||||||
virtual IdString id() const = 0;
|
|
||||||
|
|
||||||
virtual ~Item() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
class StaticTreeItem : public Item
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
using Item::Item;
|
|
||||||
|
|
||||||
virtual bool canFetchMore() const override
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void fetchMore() override
|
virtual void fetchMore() {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~StaticTreeItem() {}
|
virtual IdString id() const
|
||||||
|
|
||||||
virtual IdString id() const override
|
|
||||||
{
|
{
|
||||||
return IdString();
|
return IdString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~Item() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class IdStringItem : public StaticTreeItem
|
class IdStringItem : public Item
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
IdString id_;
|
IdString id_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
IdStringItem(Context *ctx, IdString str, Item *parent, ElementType type) :
|
IdStringItem(Context *ctx, IdString str, Item *parent, ElementType type) :
|
||||||
StaticTreeItem(QString(str.c_str(ctx)), parent, type), id_(str) {}
|
Item(QString(str.c_str(ctx)), parent, type), id_(str) {}
|
||||||
|
|
||||||
virtual IdString id() const override
|
virtual IdString id() const override
|
||||||
{
|
{
|
||||||
@ -160,7 +146,7 @@ class ElementList : public Item
|
|||||||
const ElementMap *map_;
|
const ElementMap *map_;
|
||||||
int x_, y_;
|
int x_, y_;
|
||||||
ElementGetter getter_;
|
ElementGetter getter_;
|
||||||
std::unordered_map<IdString, std::unique_ptr<StaticTreeItem>> managed_;
|
std::unordered_map<IdString, std::unique_ptr<Item>> managed_;
|
||||||
ElementType child_type_;
|
ElementType child_type_;
|
||||||
|
|
||||||
// scope valid until map gets mutated...
|
// scope valid until map gets mutated...
|
||||||
@ -194,7 +180,7 @@ class ElementList : public Item
|
|||||||
name.remove(0, prefix.size());
|
name.remove(0, prefix.size());
|
||||||
|
|
||||||
auto item = new IdStringItem(ctx_, idstring, this, child_type_);
|
auto item = new IdStringItem(ctx_, idstring, this, child_type_);
|
||||||
managed_[idstring] = std::move(std::unique_ptr<StaticTreeItem>(item));
|
managed_[idstring] = std::move(std::unique_ptr<Item>(item));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -221,15 +207,15 @@ class ElementList : public Item
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class IdStringList : public StaticTreeItem
|
class IdStringList : public Item
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
std::unordered_map<IdString, std::unique_ptr<IdStringItem>> managed_;
|
std::unordered_map<IdString, std::unique_ptr<IdStringItem>> managed_;
|
||||||
ElementType child_type_;
|
ElementType child_type_;
|
||||||
public:
|
public:
|
||||||
IdStringList(QString name, Item *parent, ElementType type) :
|
IdStringList(QString name, Item *parent, ElementType type) :
|
||||||
StaticTreeItem(name, parent, ElementType::NONE), child_type_(type) {}
|
Item(name, parent, ElementType::NONE), child_type_(type) {}
|
||||||
using StaticTreeItem::StaticTreeItem;
|
using Item::Item;
|
||||||
|
|
||||||
static std::vector<QString> alphaNumSplit(const QString &str)
|
static std::vector<QString> alphaNumSplit(const QString &str)
|
||||||
{
|
{
|
||||||
@ -332,7 +318,7 @@ class IdStringList : public StaticTreeItem
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename ElementT>
|
template <typename ElementT>
|
||||||
class ElementXYRoot : public StaticTreeItem
|
class ElementXYRoot : public Item
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using ElementMap = std::map<std::pair<int, int>, std::vector<ElementT>>;
|
using ElementMap = std::map<std::pair<int, int>, std::vector<ElementT>>;
|
||||||
@ -341,7 +327,7 @@ class ElementXYRoot : public StaticTreeItem
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Context *ctx_;
|
Context *ctx_;
|
||||||
std::vector<std::unique_ptr<StaticTreeItem>> managed_labels_;
|
std::vector<std::unique_ptr<Item>> managed_labels_;
|
||||||
std::vector<std::unique_ptr<ElementList<ElementT>>> managed_lists_;
|
std::vector<std::unique_ptr<ElementList<ElementT>>> managed_lists_;
|
||||||
ElementMap map_;
|
ElementMap map_;
|
||||||
ElementGetter getter_;
|
ElementGetter getter_;
|
||||||
@ -349,7 +335,7 @@ class ElementXYRoot : public StaticTreeItem
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
ElementXYRoot(Context *ctx, QString name, Item *parent, ElementMap map, ElementGetter getter, ElementType type) :
|
ElementXYRoot(Context *ctx, QString name, Item *parent, ElementMap map, ElementGetter getter, ElementType type) :
|
||||||
StaticTreeItem(name, parent, ElementType::NONE), ctx_(ctx), map_(map), getter_(getter), child_type_(type)
|
Item(name, parent, ElementType::NONE), ctx_(ctx), map_(map), getter_(getter), child_type_(type)
|
||||||
{
|
{
|
||||||
std::vector<int> y_present;
|
std::vector<int> y_present;
|
||||||
|
|
||||||
@ -366,8 +352,8 @@ class ElementXYRoot : public StaticTreeItem
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
// create X item for tree
|
// create X item for tree
|
||||||
auto item = new StaticTreeItem(QString("X%1").arg(i), this, child_type_);
|
auto item = new Item(QString("X%1").arg(i), this, child_type_);
|
||||||
managed_labels_.push_back(std::move(std::unique_ptr<StaticTreeItem>(item)));
|
managed_labels_.push_back(std::move(std::unique_ptr<Item>(item)));
|
||||||
for (auto j : y_present) {
|
for (auto j : y_present) {
|
||||||
auto item2 = new ElementList<ElementT>(ctx_, QString("Y%1").arg(j), item, &map_, i, j, getter_, child_type_);
|
auto item2 = new ElementList<ElementT>(ctx_, QString("Y%1").arg(j), item, &map_, i, j, getter_, child_type_);
|
||||||
item2->fetchMore(1);
|
item2->fetchMore(1);
|
||||||
|
Loading…
Reference in New Issue
Block a user