From 094ac3347ea569b5ca2bee1692e28d392efe23f0 Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Sun, 3 Aug 2025 17:26:53 +0800 Subject: [PATCH] update --- TranslateUI/SequenceView.cpp | 45 +++++++++++++++--------------- TranslateUI/SequenceView.h | 18 ++++++------ TranslateUI/StructuralRuleView.cpp | 21 ++++++++++++-- TranslateUI/StructuralRuleView.h | 3 ++ TranslateUI/TranslateBasic.cpp | 5 +++- 5 files changed, 58 insertions(+), 34 deletions(-) diff --git a/TranslateUI/SequenceView.cpp b/TranslateUI/SequenceView.cpp index 839ee0b..6a66502 100644 --- a/TranslateUI/SequenceView.cpp +++ b/TranslateUI/SequenceView.cpp @@ -37,21 +37,21 @@ void IntDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewIt void SequenceRulesView::currentRuleRefresh(const QModelIndex& idx) { - auto rule_insv = _rule_sequence.at(idx.row()); + auto rule_insv = _rule_v._rule_sequence.at(idx.row()); auto offset_index = idx.sibling(idx.row(), 1); auto offset_number = offset_index.data(Qt::DisplayRole).toInt(); rule_insv->setOffsetSpan(offset_number); auto count_index = idx.sibling(idx.row(), 3); - _sequence_model->setData(offset_index, rule_insv->offsetSpan(), Qt::EditRole); - _sequence_model->setData(count_index, rule_insv->countWithin(), Qt::EditRole); + _rule_v._sequence_model->setData(offset_index, rule_insv->offsetSpan(), Qt::EditRole); + _rule_v._sequence_model->setData(count_index, rule_insv->countWithin(), Qt::EditRole); auto param_index = idx.sibling(idx.row(), 4); QJsonObject obj; rule_insv->saveTo(obj); auto bytes = QJsonDocument(obj).toJson(QJsonDocument::Compact); - _sequence_model->setData(param_index, QString::fromUtf8(bytes)); + _rule_v._sequence_model->setData(param_index, QString::fromUtf8(bytes)); this->resizeColumnsToContents(); } @@ -59,18 +59,18 @@ void SequenceRulesView::currentRuleRefresh(const QModelIndex& idx) void SequenceRulesView::peersRuleChanged(const QModelIndex& idx) { auto rule_idx = idx.sibling(idx.row(), 2); - auto rule_nm = base->extractUnitList()[rule_idx.data(Qt::DisplayRole).toString()]; + auto rule_nm = _rule_v.base->extractUnitList()[rule_idx.data(Qt::DisplayRole).toString()]; auto new_inst = std::dynamic_pointer_cast(rule_nm->newDefault()); - _rule_sequence.replace(idx.row(), new_inst); + _rule_v._rule_sequence.replace(idx.row(), new_inst); if (typeid(*new_inst.get()) == typeid(BytesAsList)) { auto conv = std::dynamic_pointer_cast(new_inst); if (!conv->elementRule()) { - conv->appendElementRule(this->base->defaultExtractUnit()); + conv->appendElementRule(this->_rule_v.base->defaultExtractUnit()); } if (!conv->sizeProvider()) { - conv->setSizeProvider(this->base->defaultSizeProvider()); + conv->setSizeProvider(this->_rule_v.base->defaultSizeProvider()); } } @@ -79,18 +79,19 @@ void SequenceRulesView::peersRuleChanged(const QModelIndex& idx) #include SequenceRulesView::SequenceRulesView(QWidget* p /*= nullptr*/) - :QTableView(p), - _sequence_model(new QStandardItemModel), - base(std::make_shared()) + :QTableView(p) { - this->setModel(_sequence_model); - _sequence_model->setHorizontalHeaderLabels(QStringList() + _rule_v._sequence_model = new QStandardItemModel(); + _rule_v.base = std::make_shared(); + + this->setModel(_rule_v._sequence_model); + _rule_v._sequence_model->setHorizontalHeaderLabels(QStringList() << tr(u8"Field Name") << tr(u8"Bytes Offset") << tr(u8"Translate Rule") << tr(u8"Bytes Count") << tr(u8"Arguments")); auto int_delegate = new IntDelegate(0, INT_MAX); this->setItemDelegateForColumn(1, int_delegate); - auto rule_delegate = new RuleSelectDelegate(base); + auto rule_delegate = new RuleSelectDelegate(_rule_v.base); this->setItemDelegateForColumn(2, rule_delegate); this->setContextMenuPolicy(Qt::CustomContextMenu); @@ -102,7 +103,7 @@ SequenceRulesView::SequenceRulesView(QWidget* p /*= nullptr*/) if (!curr.isValid()) return; - emit this->currentRuleChanged(_rule_sequence[curr.row()], curr); + emit this->currentRuleChanged(_rule_v._rule_sequence[curr.row()], curr); }); } @@ -117,17 +118,17 @@ void SequenceRulesView::customTranslateRuleEdit(const QPoint& pos) void SequenceRulesView::addTranslateUnit() { - auto row_cnt = this->_sequence_model->rowCount(); + auto row_cnt = this->_rule_v._sequence_model->rowCount(); QList new_row; new_row << new QStandardItem(QString(u8"rule_%1").arg(row_cnt)); new_row << new QStandardItem(u8"0"); - new_row << new QStandardItem(base->defaultExtractUnit()->name()); + new_row << new QStandardItem(_rule_v.base->defaultExtractUnit()->name()); new_row << new QStandardItem(u8"1"); new_row.last()->setEditable(false); - auto curr_rule = base->defaultExtractUnit()->newDefault(); - this->_rule_sequence << std::static_pointer_cast(curr_rule); + auto curr_rule = _rule_v.base->defaultExtractUnit()->newDefault(); + this->_rule_v._rule_sequence << std::static_pointer_cast(curr_rule); auto hex_rule = std::static_pointer_cast(curr_rule); hex_rule->setCountWithin(1); @@ -139,7 +140,7 @@ void SequenceRulesView::addTranslateUnit() new_row << new QStandardItem(json_doc); new_row.last()->setEditable(false); - this->_sequence_model->appendRow(new_row); + this->_rule_v._sequence_model->appendRow(new_row); this->resizeColumnsToContents(); } @@ -149,8 +150,8 @@ void SequenceRulesView::removeTranslateUnit() if (!idx_curr.isValid()) return; - _rule_sequence.removeAt(idx_curr.row()); - _sequence_model->removeRow(idx_curr.row()); + _rule_v._rule_sequence.removeAt(idx_curr.row()); + _rule_v._sequence_model->removeRow(idx_curr.row()); } diff --git a/TranslateUI/SequenceView.h b/TranslateUI/SequenceView.h index 7781202..e1740a3 100644 --- a/TranslateUI/SequenceView.h +++ b/TranslateUI/SequenceView.h @@ -41,7 +41,7 @@ private: std::shared_ptr _kernel; signals: - void dataChanged(const QModelIndex &idx) const; + void dataChanged(const QModelIndex& idx) const; public: RuleSelectDelegate(std::shared_ptr ins); @@ -57,17 +57,19 @@ public: /// class SequenceRulesView : public QTableView { Q_OBJECT -private: - QStandardItemModel* const _sequence_model; - std::shared_ptr base = nullptr; - QList> _rule_sequence; +public: + struct __Private { + QStandardItemModel* _sequence_model; + std::shared_ptr base = nullptr; + QList> _rule_sequence; + } _rule_v; signals: - void currentRuleChanged(std::shared_ptr u, const QModelIndex &i) const; + void currentRuleChanged(std::shared_ptr u, const QModelIndex& i) const; public: - void currentRuleRefresh(const QModelIndex &idx); - void peersRuleChanged(const QModelIndex &idx_rule); + void currentRuleRefresh(const QModelIndex& idx); + void peersRuleChanged(const QModelIndex& idx_rule); public: SequenceRulesView(QWidget* p = nullptr); diff --git a/TranslateUI/StructuralRuleView.cpp b/TranslateUI/StructuralRuleView.cpp index c0951ea..5a49d61 100644 --- a/TranslateUI/StructuralRuleView.cpp +++ b/TranslateUI/StructuralRuleView.cpp @@ -27,6 +27,8 @@ StructuralRuleView::StructuralRuleView(QWidget* p /*= nullptr*/) _configs_stack->addWidget(encode_config); auto combine_config = new BitCombineConfiguration(this); _configs_stack->addWidget(combine_config); + auto list_config = new ListUnitConfiguration(this->_sequence_view->_rule_v.base, this); + _configs_stack->addWidget(list_config); connect(count_span, &CountWithinConfiguration::currentRuleChanged, _sequence_view, &SequenceRulesView::currentRuleRefresh); @@ -54,6 +56,9 @@ StructuralRuleView::StructuralRuleView(QWidget* p /*= nullptr*/) _configs_stack->setCurrentIndex(1); count_span->currentRuleAccept(u, i); break; + case DataType::LIST_COLLECTION: + _configs_stack->setCurrentIndex(4); + break; default: _configs_stack->setCurrentIndex(0); break; @@ -262,19 +267,29 @@ ListUnitConfiguration::ListUnitConfiguration( 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(new QLabel(tr("SizeAppoint:")), 1, 0); layout->addWidget(_size_layout_select, 1, 1, 1, 2); layout->addWidget(_configs_stack, 2, 0, 2, 3); _configs_stack->addWidget(_const_number_input); _configs_stack->addWidget(_prev_field_refer); + layout->setRowStretch(4, 1); + layout->setColumnStretch(1, 1); + for (auto key : this->_bind_core->customRules().keys()) _rule_select->addItem(key, CUSTOM_RULE); for (auto key : this->_bind_core->extractUnitList().keys()) _rule_select->addItem(key, BASIC_RULE); - for (auto key : this->_bind_core->sizeProviderList().keys()) - _size_layout_select->addItem(key); + + auto keys = this->_bind_core->sizeProviderList().keys(); + std::sort(keys.begin(), keys.end()); + _size_layout_select->addItems(keys); + + connect(_size_layout_select, QOverload::of(&QComboBox::currentIndexChanged), + [=](int idx) { + this->_configs_stack->setCurrentIndex(this->_size_layout_select->currentIndex()); + }); } void ListUnitConfiguration::currentRuleAccept( diff --git a/TranslateUI/StructuralRuleView.h b/TranslateUI/StructuralRuleView.h index 47eef76..a41b200 100644 --- a/TranslateUI/StructuralRuleView.h +++ b/TranslateUI/StructuralRuleView.h @@ -82,6 +82,9 @@ signals: void currentRuleChanged(const QModelIndex& idx); }; +/// +/// Áбí×Ö¶ÎÅäÖÃÃæ°å +/// class ListUnitConfiguration : public QWidget { Q_OBJECT private: diff --git a/TranslateUI/TranslateBasic.cpp b/TranslateUI/TranslateBasic.cpp index 4bcfbe2..7d08965 100644 --- a/TranslateUI/TranslateBasic.cpp +++ b/TranslateUI/TranslateBasic.cpp @@ -38,9 +38,12 @@ TranslateBasic::TranslateBasic() _extractor_types[u_ptr->name()] = u_ptr; // size-provider type-list - auto sz_ptr = std::make_shared(); + std::shared_ptr sz_ptr = std::make_shared(); this->_default_size_provider = sz_ptr; _size_provider_types[sz_ptr->name()] = sz_ptr; + + sz_ptr = std::make_shared(); + _size_provider_types[sz_ptr->name()] = sz_ptr; } std::shared_ptr TranslateBasic::defaultExtractUnit() const