切换Union配置面板
This commit is contained in:
parent
bc916dcd99
commit
2a10596532
|
@ -22,7 +22,7 @@ ExtractRuleView::ExtractRuleView(std::shared_ptr<TranslateBasic> base,
|
||||||
std::shared_ptr<extract::AsRuleSet> inst_r, QWidget* p /*= nullptr*/)
|
std::shared_ptr<extract::AsRuleSet> inst_r, QWidget* p /*= nullptr*/)
|
||||||
: QWidget(p), _current_rule(inst_r), _basic_bind(base),
|
: QWidget(p), _current_rule(inst_r), _basic_bind(base),
|
||||||
_member_units(new QTableView(this)),
|
_member_units(new QTableView(this)),
|
||||||
_member_model(new QStandardItemModel(this)),
|
_members_model(new QStandardItemModel(this)),
|
||||||
_configs_stack(new QStackedWidget(this))
|
_configs_stack(new QStackedWidget(this))
|
||||||
{
|
{
|
||||||
this->_current_fields_cache = std::make_shared<FieldManagerLayer>("", nullptr);
|
this->_current_fields_cache = std::make_shared<FieldManagerLayer>("", nullptr);
|
||||||
|
@ -65,17 +65,22 @@ ExtractRuleView::ExtractRuleView(std::shared_ptr<TranslateBasic> base,
|
||||||
}
|
}
|
||||||
else if (unit->baseType() == UnionBasedUnit::topic()) {
|
else if (unit->baseType() == UnionBasedUnit::topic()) {
|
||||||
_configs_stack->setCurrentIndex(3);
|
_configs_stack->setCurrentIndex(3);
|
||||||
union_configs->currentAccept(unit, target);
|
FieldManagerLayer::__Private::fields_map.clear();
|
||||||
|
_current_fields_cache = std::make_shared<FieldManagerLayer>("{self}");
|
||||||
|
this->_current_rule->registSubField(_current_fields_cache);
|
||||||
|
auto current_field = this->_current_rule->operator[](target.row());
|
||||||
|
_current_fields_cache->bindCurrent(current_field->name());
|
||||||
|
union_configs->currentAccept(unit, target, _current_fields_cache);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
_configs_stack->setCurrentIndex(0);
|
_configs_stack->setCurrentIndex(0);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
_member_units->setModel(_member_model);
|
_member_units->setModel(_members_model);
|
||||||
connect(_member_model, &QStandardItemModel::itemChanged, this, &ExtractRuleView::dataChanged);
|
connect(_members_model, &QStandardItemModel::itemChanged, this, &ExtractRuleView::dataChanged);
|
||||||
_member_units->setItemDelegateForColumn(2, new UnitSelectDelegate(_basic_bind));
|
_member_units->setItemDelegateForColumn(2, new UnitSelectDelegate(_basic_bind));
|
||||||
_member_model->setHorizontalHeaderLabels(QStringList() << "FieldName" << "OffsetSpan" << "UnitType");
|
_members_model->setHorizontalHeaderLabels(QStringList() << "FieldName" << "OffsetSpan" << "UnitType");
|
||||||
_member_units->setContextMenuPolicy(Qt::CustomContextMenu);
|
_member_units->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
connect(_member_units, &QTableView::customContextMenuRequested, [=](const QPoint& pt) {
|
connect(_member_units, &QTableView::customContextMenuRequested, [=](const QPoint& pt) {
|
||||||
QMenu m;
|
QMenu m;
|
||||||
|
@ -86,8 +91,8 @@ ExtractRuleView::ExtractRuleView(std::shared_ptr<TranslateBasic> base,
|
||||||
|
|
||||||
void ExtractRuleView::reload()
|
void ExtractRuleView::reload()
|
||||||
{
|
{
|
||||||
auto cnt = _member_model->rowCount();
|
auto cnt = _members_model->rowCount();
|
||||||
_member_model->removeRows(0, cnt);
|
_members_model->removeRows(0, cnt);
|
||||||
|
|
||||||
auto list = _current_rule->fieldNames();
|
auto list = _current_rule->fieldNames();
|
||||||
for (auto key : list) {
|
for (auto key : list) {
|
||||||
|
@ -97,7 +102,7 @@ void ExtractRuleView::reload()
|
||||||
row << new QStandardItem(QString("%1 bytes").arg(field_mbr->offsetSpan()));
|
row << new QStandardItem(QString("%1 bytes").arg(field_mbr->offsetSpan()));
|
||||||
row.last()->setEditable(false);
|
row.last()->setEditable(false);
|
||||||
row << new QStandardItem(field_mbr->baseType());
|
row << new QStandardItem(field_mbr->baseType());
|
||||||
_member_model->appendRow(row);
|
_members_model->appendRow(row);
|
||||||
}
|
}
|
||||||
_member_units->resizeColumnsToContents();
|
_member_units->resizeColumnsToContents();
|
||||||
}
|
}
|
||||||
|
@ -421,12 +426,68 @@ void SingleBasedConfiguration::currentAccept(std::shared_ptr<ExtractUnit> inst_u
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <QToolBox>
|
||||||
UnionBasedConfiguration::UnionBasedConfiguration(std::shared_ptr<TranslateBasic> core, QWidget* p /*= nullptr*/)
|
UnionBasedConfiguration::UnionBasedConfiguration(std::shared_ptr<TranslateBasic> core, QWidget* p /*= nullptr*/)
|
||||||
|
: QWidget(p),
|
||||||
|
_offset_enter(new QSpinBox(this)),
|
||||||
|
_size_input(new QSpinBox(this)),
|
||||||
|
_context_present(new QTextEdit(this)),
|
||||||
|
_match_select(new QComboBox(this)),
|
||||||
|
_delegate_select(new QComboBox(this)),
|
||||||
|
_members_present(new QTableView(this)),
|
||||||
|
_members_model(new QStandardItemModel(this)),
|
||||||
|
_intfield_bind(new QComboBox(this)),
|
||||||
|
_compare_op(new QComboBox(this)),
|
||||||
|
_value_enters(new QSpinBox(this))
|
||||||
{
|
{
|
||||||
|
_members_present->setModel(_members_model);
|
||||||
|
|
||||||
|
auto layout = new QGridLayout(this);
|
||||||
|
layout->addWidget(new QLabel(tr("OffsetSpan:")), 0, 0);
|
||||||
|
layout->addWidget(_offset_enter, 0, 1, 1, 2);
|
||||||
|
layout->addWidget(new QLabel(tr("SizeConst:")), 1, 0);
|
||||||
|
layout->addWidget(_size_input, 1, 1, 1, 2);
|
||||||
|
|
||||||
|
// ====================================================
|
||||||
|
auto tabw = new QTabWidget(this);
|
||||||
|
layout->addWidget(tabw, 2, 0, 3, 3);
|
||||||
|
tabw->addTab(_context_present, tr("Unit"));
|
||||||
|
layout->setColumnStretch(1, 1);
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
auto custom_panel = new QWidget(this);
|
||||||
|
tabw->addTab(custom_panel, tr("Members"));
|
||||||
|
auto cust_layout = new QGridLayout(custom_panel);
|
||||||
|
cust_layout->addWidget(_members_present, 0, 0, 3, 3);
|
||||||
|
cust_layout->addWidget(new QPushButton(tr("AppendNew")), 3, 1);
|
||||||
|
cust_layout->addWidget(new QPushButton(tr("Delete")), 3, 2);
|
||||||
|
cust_layout->addWidget(new QLabel(tr("MatchType:")), 4, 0);
|
||||||
|
cust_layout->addWidget(_match_select, 4, 1, 1, 2);
|
||||||
|
cust_layout->addWidget(new QLabel(tr("Delegate:")), 5, 0);
|
||||||
|
cust_layout->addWidget(_delegate_select, 5, 1, 1, 2);
|
||||||
|
auto toolbox = new QStackedWidget(this);
|
||||||
|
cust_layout->addWidget(toolbox, 6, 0, 3, 3);
|
||||||
|
|
||||||
|
auto panelx = new QWidget(this);
|
||||||
|
toolbox->addWidget(panelx);
|
||||||
|
auto gpanelx = new QGridLayout(panelx);
|
||||||
|
gpanelx->addWidget(new QLabel(tr("BindField:")), 0, 0);
|
||||||
|
gpanelx->addWidget(_intfield_bind, 0, 1, 1, 2);
|
||||||
|
gpanelx->addWidget(new QLabel(tr("Operator:")), 1, 0);
|
||||||
|
gpanelx->addWidget(_compare_op, 1, 1, 1, 2);
|
||||||
|
gpanelx->addWidget(new QLabel(tr("Value:")), 2, 0);
|
||||||
|
gpanelx->addWidget(_value_enters, 2, 1, 1, 2);
|
||||||
|
gpanelx->setColumnStretch(1, 1);
|
||||||
|
gpanelx->setColumnStretch(2, 1);
|
||||||
|
gpanelx->setMargin(0);
|
||||||
|
|
||||||
|
cust_layout->setRowStretch(1, 1);
|
||||||
|
cust_layout->setColumnStretch(1, 1);
|
||||||
|
cust_layout->setColumnStretch(2, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UnionBasedConfiguration::currentAccept(std::shared_ptr<ExtractUnit> inst_u, const QModelIndex& idx)
|
void UnionBasedConfiguration::currentAccept(std::shared_ptr<ExtractUnit> inst_u,
|
||||||
|
const QModelIndex& idx, std::shared_ptr<ScopeFieldsGetter> get)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,9 +66,24 @@ namespace unit_configurations {
|
||||||
|
|
||||||
class UnionBasedConfiguration : public QWidget {
|
class UnionBasedConfiguration : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
private:
|
||||||
|
QSpinBox* const _offset_enter; // 偏移
|
||||||
|
QSpinBox* const _size_input; // 尺寸输入
|
||||||
|
QTextEdit* const _context_present; // 内容展示
|
||||||
|
|
||||||
|
QComboBox* const _match_select; // 匹配类型
|
||||||
|
QComboBox* const _delegate_select; // 解析代理类型
|
||||||
|
QTableView* const _members_present;// 成员代理类型
|
||||||
|
QStandardItemModel* const _members_model;
|
||||||
|
|
||||||
|
QComboBox* const _intfield_bind;
|
||||||
|
QComboBox* const _compare_op;
|
||||||
|
QSpinBox* const _value_enters;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
UnionBasedConfiguration(std::shared_ptr<TranslateBasic> core, QWidget* p = nullptr);
|
UnionBasedConfiguration(std::shared_ptr<TranslateBasic> core, QWidget* p = nullptr);
|
||||||
void currentAccept(std::shared_ptr<ExtractUnit> inst_u, const QModelIndex& idx);
|
void currentAccept(std::shared_ptr<ExtractUnit> inst_u,
|
||||||
|
const QModelIndex& idx, std::shared_ptr<ScopeFieldsGetter> get);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void reloadRequest();
|
void reloadRequest();
|
||||||
|
@ -95,7 +110,7 @@ private:
|
||||||
std::shared_ptr<TranslateBasic> _basic_bind;
|
std::shared_ptr<TranslateBasic> _basic_bind;
|
||||||
|
|
||||||
QTableView* const _member_units;
|
QTableView* const _member_units;
|
||||||
QStandardItemModel* const _member_model;
|
QStandardItemModel* const _members_model;
|
||||||
QStackedWidget* const _configs_stack;
|
QStackedWidget* const _configs_stack;
|
||||||
|
|
||||||
std::shared_ptr<extract::AsRuleSet> _current_rule;
|
std::shared_ptr<extract::AsRuleSet> _current_rule;
|
||||||
|
|
Loading…
Reference in New Issue