86 lines
2.9 KiB
C++
86 lines
2.9 KiB
C++
#include "datatypeconfigration.h"
|
|
|
|
#include <QSplitter>
|
|
#include <QVBoxLayout>
|
|
|
|
DataConfigration::DataConfigration(MapCore &core, std::shared_ptr<const DownAccess> target, QWidget *parent)
|
|
: QWidget(parent),
|
|
core_bind(core),
|
|
target_bind(target),
|
|
member_present(new QTableView(this)),
|
|
member_model(new QStandardItemModel(this)),
|
|
preview_present(new QTreeView(this)),
|
|
preview_model(new QStandardItemModel(this)),
|
|
append(new QPushButton("添加", this)),
|
|
remove(new QPushButton("删除", this)) {
|
|
auto layout = new QVBoxLayout(this);
|
|
auto splitter = new QSplitter(this);
|
|
layout->addWidget(splitter);
|
|
|
|
auto widget = new QWidget(this);
|
|
splitter->addWidget(widget);
|
|
splitter->addWidget(preview_present);
|
|
|
|
auto xlayout = new QVBoxLayout(widget);
|
|
xlayout->addWidget(member_present);
|
|
xlayout->addWidget(append);
|
|
xlayout->addWidget(remove);
|
|
|
|
member_present->setModel(member_model);
|
|
preview_present->setModel(preview_model);
|
|
|
|
xlayout->setMargin(2);
|
|
layout->setMargin(2);
|
|
xlayout->setSpacing(2);
|
|
layout->setSpacing(2);
|
|
|
|
this->member_model->setHorizontalHeaderLabels(QStringList() << "成员名称" << "成员类型");
|
|
this->preview_model->setHorizontalHeaderLabels(QStringList() << "成员名称" << "成员类型");
|
|
|
|
present_member(target);
|
|
present_struct(target);
|
|
|
|
connect(this->append, &QPushButton::clicked, [=](){
|
|
auto ninst = std::make_shared<DownAccess>(std::make_shared<TypeTemplate>());
|
|
auto target_x = target_bind->append(ninst);
|
|
this->core_bind.refreshRoot(target_bind, target_x);
|
|
this->target_bind = target_x;
|
|
|
|
this->member_model->removeRows(0, member_model->rowCount());
|
|
this->preview_model->removeRows(0, preview_model->rowCount());
|
|
|
|
present_member(target_bind);
|
|
present_struct(target_bind);
|
|
|
|
});
|
|
}
|
|
|
|
void DataConfigration::present_member(std::shared_ptr<const DownAccess> base)
|
|
{
|
|
auto list = base->members();
|
|
for(auto &d : list){
|
|
QList<QStandardItem*> row;
|
|
row << new QStandardItem(d->typePeer<TypeTemplate>()->name());
|
|
row << new QStandardItem(d->typePeer<TypeTemplate>()->type());
|
|
this->member_model->appendRow(row);
|
|
}
|
|
}
|
|
|
|
void DataConfigration::present_struct(std::shared_ptr<const DownAccess> base, QStandardItem *target)
|
|
{
|
|
auto list = base->members();
|
|
for(auto &d : list){
|
|
QList<QStandardItem*> row;
|
|
row << new QStandardItem(d->typePeer<TypeTemplate>()->name());
|
|
row << new QStandardItem(d->typePeer<TypeTemplate>()->type());
|
|
if(!target)
|
|
this->preview_model->appendRow(row);
|
|
else
|
|
target->appendRow(row);
|
|
|
|
row.first()->setEditable(false);
|
|
row.last()->setEditable(false);
|
|
present_struct(d, row.first());
|
|
}
|
|
}
|