This commit is contained in:
codeboss 2025-08-11 22:51:28 +08:00
parent 7a9ae2812c
commit b194d486fa
5 changed files with 76 additions and 26 deletions

View File

@ -51,13 +51,21 @@ ExtractRuleView::ExtractRuleView(std::shared_ptr<TranslateBasic> base,
_configs_stack->setCurrentIndex(1);
single_configs->currentAccept(unit, target);
}
else if (unit->baseType() == ListBasedUnit::topic()) {
_configs_stack->setCurrentIndex(2);
list_configs->currentAccept(unit, target);
}
else if (unit->baseType() == UnionBasedUnit::topic()){
_configs_stack->setCurrentIndex(3);
union_configs->currentAccept(unit, target);
}
else {
_configs_stack->setCurrentIndex(0);
}
});
_member_units->setModel(_member_model);
_member_model->setHorizontalHeaderLabels(QStringList() << "FieldName" << "OffsetSpan"<< "UnitType" );
_member_model->setHorizontalHeaderLabels(QStringList() << "FieldName" << "OffsetSpan" << "UnitType");
_member_units->setContextMenuPolicy(Qt::CustomContextMenu);
connect(_member_units, &QTableView::customContextMenuRequested, [=](const QPoint& pt) {
QMenu m;
@ -115,29 +123,42 @@ void ExtractRuleView::showEvent(QShowEvent* e)
ListBasedConfiguration::ListBasedConfiguration(
std::shared_ptr<TranslateBasic> core, QWidget* p /*= nullptr*/)
:QWidget(p), _bind_core(core), _bind_u(nullptr),
:QWidget(p), _bind_core(core),
_offset_enter(new QSpinBox(this)),
_delegate_sync(new QPushButton("Sync", this)),
_rule_select(new QComboBox(this)),
_size_layout_select(new QComboBox(this)),
_configs_stack(new QStackedWidget(this)),
_content_display(new QTextBrowser(this)),
_const_number_input(new QSpinBox(this)),
_prev_field_refer(new QComboBox(this))
{
auto layout = new QGridLayout(this);
layout->addWidget(new QLabel(tr("RuleAppoint:")), 0, 0);
layout->addWidget(_rule_select, 0, 1, 1, 2);
layout->addWidget(new QLabel(tr("SizeAppoint:")), 1, 0);
layout->addWidget(_size_layout_select, 1, 1, 1, 2);
layout->addWidget(new QLabel("OffsetSpan:", this), 0, 0);
layout->addWidget(this->_offset_enter, 0, 1);
layout->addWidget(this->_delegate_sync, 0, 2);
layout->addWidget(new QLabel(tr("Delegate:")), 1, 0);
layout->addWidget(_rule_select, 1, 1, 1, 2);
layout->addWidget(new QLabel(tr("Size:")), 2, 0);
layout->addWidget(_size_layout_select, 2, 1, 1, 2);
layout->addWidget(_configs_stack, 2, 0, 2, 3);
layout->addWidget(_configs_stack, 3, 0, 2, 3);
_configs_stack->addWidget(_const_number_input);
_configs_stack->addWidget(_prev_field_refer);
layout->setRowStretch(4, 1);
layout->addWidget(this->_content_display, 5, 0, 3, 3);
layout->setRowStretch(7, 1);
layout->setColumnStretch(1, 1);
}
void ListBasedConfiguration::currentAccept(std::shared_ptr<ExtractUnit> inst_u, const QModelIndex& idx)
{
_bind_u = std::dynamic_pointer_cast<ListBasedUnit>(inst_u);
_bind_index = idx;
}
SingleBasedConfiguration::SingleBasedConfiguration(std::shared_ptr<TranslateBasic> core, QWidget* p /*= nullptr*/)
: QWidget(p), _bind_core(core),
@ -162,8 +183,12 @@ SingleBasedConfiguration::SingleBasedConfiguration(std::shared_ptr<TranslateBasi
});
connect(this->_delegate_changed, QOverload<const QString&>::of(&QComboBox::currentTextChanged),
[=](const QString& current_alias) {
auto vinst = _bind_core->operator[](current_alias)->newDefault();
inst_current->setDelegate(std::dynamic_pointer_cast<ExtractDelegate>(vinst));
auto o_inst = _bind_core->operator[](current_alias);
auto v_inst = o_inst->newDefault();
QJsonObject content;
o_inst->saveTo(content);
v_inst->loadFrom(_bind_core, content);
inst_current->setDelegate(std::dynamic_pointer_cast<ExtractDelegate>(v_inst));
emit this->reloadRequest();
});
}
@ -194,3 +219,8 @@ UnionBasedConfiguration::UnionBasedConfiguration(std::shared_ptr<TranslateBasic>
{
}
void UnionBasedConfiguration::currentAccept(std::shared_ptr<ExtractUnit> inst_u, const QModelIndex& idx)
{
}

View File

@ -12,10 +12,6 @@
#include "extract_basic.h"
#include "TranslateBasic.h"
namespace extract {
class SingleBasedUnit;
}
namespace unit_configurations {
class SingleBasedConfiguration : public QWidget {
Q_OBJECT
@ -44,23 +40,35 @@ namespace unit_configurations {
Q_OBJECT
private:
std::shared_ptr<TranslateBasic> _bind_core;
std::shared_ptr<extract::ListBasedUnit> _bind_u;
QModelIndex _bind_index;
QSpinBox* const _offset_enter;
QPushButton* const _delegate_sync;
QComboBox* const _rule_select;
QComboBox* const _size_layout_select;
QStackedWidget* const _configs_stack;
QTextBrowser* const _content_display;
QSpinBox* const _const_number_input;
QComboBox* const _prev_field_refer;
std::shared_ptr<extract::ListBasedUnit> _bind_u = nullptr;
QModelIndex _bind_index;
public:
ListBasedConfiguration(std::shared_ptr<TranslateBasic> core, QWidget* p = nullptr);
void currentAccept(std::shared_ptr<ExtractUnit> inst_u, const QModelIndex& idx);
signals:
void reloadRequest();
};
class UnionBasedConfiguration : public QWidget {
Q_OBJECT
public:
UnionBasedConfiguration(std::shared_ptr<TranslateBasic> core, QWidget* p = nullptr);
void currentAccept(std::shared_ptr<ExtractUnit> inst_u, const QModelIndex& idx);
signals:
void reloadRequest();
};
}
@ -85,6 +93,6 @@ public:
void appendUnit();
protected:
void showEvent(QShowEvent *e) override;
void showEvent(QShowEvent* e) override;
};

View File

@ -173,7 +173,7 @@ void WrapConfigs::dataChanged(QStandardItem* cell)
auto origin_key = total_alias_set.at(cell->row());
auto new_type = cell->text();
auto new_ins = _bind_base->extractUnitTypeMap()[new_type]->newDefault();
auto new_ins = _bind_base->extractDelegateTypeMap()[new_type]->newDefault();
auto new_delegate = std::dynamic_pointer_cast<ExtractDelegate>(new_ins);
new_delegate->setAlias(origin_key);
_bind_base->replaceDelegate(origin_key, new_delegate);
@ -197,7 +197,7 @@ QWidget* RuleSelectDelegate::createEditor(QWidget* parent, const QStyleOptionVie
void RuleSelectDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
{
auto rule_names = this->_kernel->extractUnitTypeMap().keys();
auto rule_names = this->_kernel->extractDelegateTypeMap().keys();
std::sort(rule_names.begin(), rule_names.end());
auto combo = dynamic_cast<QComboBox*>(editor);

View File

@ -675,7 +675,7 @@ std::shared_ptr<Serializable> ListBasedUnit::newDefault() const
QString ListBasedUnit::baseType() const
{
return NAME(ListBasedUnit);
return topic();
}
std::shared_ptr<SizeProvider> ListBasedUnit::sizeProvider() const
@ -688,6 +688,11 @@ void ListBasedUnit::setSizeProvider(std::shared_ptr<SizeProvider> inst)
_list.size_provider_inst = inst;
}
QString ListBasedUnit::topic()
{
return NAME(ListBasedUnit);
}
void UnionBasedUnit::updateMatch(int index, std::shared_ptr<RuleMatch> rule)
{
auto nidx = std::min(std::max(0, index), _union.rulematch_list.size() - 1);
@ -706,7 +711,7 @@ void UnionBasedUnit::clearRules()
QString UnionBasedUnit::baseType() const
{
return NAME(UnionBasedUnit);
return topic();
}
QString UnionBasedUnit::name() const
@ -803,3 +808,8 @@ void UnionBasedUnit::setCountWithin(int count)
{
_union.bytes_count = count;
}
QString UnionBasedUnit::topic()
{
return NAME(UnionBasedUnit);
}

View File

@ -324,6 +324,7 @@ namespace extract {
std::shared_ptr<ExtractDelegate> delegateInst() const;
public:
static QString topic();
QString baseType() const;
QString name() const override;
void setName(const QString& name) override;
@ -356,6 +357,7 @@ namespace extract {
void setCountWithin(int count);
public:
static QString topic();
QString baseType() const override;
void registSubField(std::shared_ptr<ScopeFieldsSetter> inst) override;