From a20e36294bed70441dc261bc422ece1209779b39 Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Tue, 12 Aug 2025 23:02:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84FieldManagerLayout=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TranslateUI/ExtractRuleView.cpp | 24 ++++++++++++++++++++---- TranslateUI/TranslateBasic.cpp | 24 ++++++++++++------------ TranslateUI/TranslateBasic.h | 8 ++++---- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/TranslateUI/ExtractRuleView.cpp b/TranslateUI/ExtractRuleView.cpp index 981ed48..dc6509f 100644 --- a/TranslateUI/ExtractRuleView.cpp +++ b/TranslateUI/ExtractRuleView.cpp @@ -53,7 +53,11 @@ ExtractRuleView::ExtractRuleView(std::shared_ptr base, } else if (unit->baseType() == ListBasedUnit::topic()) { _configs_stack->setCurrentIndex(2); - list_configs->currentAccept(unit, target); + _current_fields_cache = std::make_shared("{self}"); + this->_rule_base->registSubField(_current_fields_cache); + auto current_field = this->_rule_base->operator[](target.row()); + _current_fields_cache->bindCurrent(current_field->name()); + list_configs->currentAccept(unit, target, _current_fields_cache); } else if (unit->baseType() == UnionBasedUnit::topic()) { _configs_stack->setCurrentIndex(3); @@ -188,7 +192,13 @@ ListBasedConfiguration::ListBasedConfiguration( s.unblock(); auto fields_map = _fields_getter->prevFields(); for (auto field_name : fields_map.keys()) { - _prev_field_refer->addItem(field_name, (int)fields_map[field_name]); + switch (fields_map[field_name]) { + case DataType::Integer: + case DataType::Unsigned: + _prev_field_refer->addItem(field_name); + default: + break; + } } } @@ -246,9 +256,15 @@ void ListBasedConfiguration::currentAccept(std::shared_ptr inst_u, auto size_rt = std::dynamic_pointer_cast(_bind_u->sizeProvider()); QSignalBlocker s(_prev_field_refer); _prev_field_refer->clear(); - auto fields_map = get->prevFields(); + auto fields_map = _fields_getter->prevFields(); for (auto field_name : fields_map.keys()) { - _prev_field_refer->addItem(field_name, (int)fields_map[field_name]); + switch (fields_map[field_name]) { + case DataType::Integer: + case DataType::Unsigned: + _prev_field_refer->addItem(field_name); + default: + break; + } } _prev_field_refer->setCurrentText(size_rt->expression()); diff --git a/TranslateUI/TranslateBasic.cpp b/TranslateUI/TranslateBasic.cpp index 70c7428..ed9cb52 100644 --- a/TranslateUI/TranslateBasic.cpp +++ b/TranslateUI/TranslateBasic.cpp @@ -296,10 +296,10 @@ QVariant ValueAccessContext::get(const QString& unique_key) const bool FieldManagerLayer::bindCurrent(const QString& unique_key) { - for (auto index = 0; index < __Private::_fields_map.size(); ++index) { - auto pair = __Private::_fields_map[index]; + for (auto index = 0; index < __Private::fields_map.size(); ++index) { + auto pair = __Private::fields_map[index]; if (pair.first == unique_key) { - __Private::_fields_map = __Private::_fields_map.mid(0, index); + __Private::fields_map = __Private::fields_map.mid(0, index); return true; } } @@ -309,7 +309,7 @@ bool FieldManagerLayer::bindCurrent(const QString& unique_key) QHash FieldManagerLayer::prevFields() const { QHash fields; - for (auto pair : __Private::_fields_map) + for (auto pair : __Private::fields_map) fields[pair.first] = pair.second; return fields; @@ -317,26 +317,26 @@ QHash FieldManagerLayer::prevFields() const void FieldManagerLayer::clear() { - __Private::_fields_map.clear(); + __Private::fields_map.clear(); } FieldManagerLayer::FieldManagerLayer(const QString& self, std::shared_ptr instp) { - _setter._rule_name = self; - _setter._parent_setter = instp; + _setter.rule_name = self; + _setter.parent_setter = instp; } #include void FieldManagerLayer::setField(const QString& fieldName, DataType type) { - if (_setter._parent_setter) - _setter._parent_setter->setField(QString("%1.%2").arg(_setter._rule_name, fieldName), type); + if (_setter.parent_setter) + _setter.parent_setter->setField(QString("%1.%2").arg(_setter.rule_name, fieldName), type); else { - for (auto pair : __Private::_fields_map) { + for (auto pair : __Private::fields_map) { if (pair.first == fieldName) throw new std::invalid_argument("×Ö¶ÎÃû³ÆÖظ´"); } - __Private::_fields_map << std::make_pair(fieldName, type); + __Private::fields_map << std::make_pair(fieldName, type); } } -QList> FieldManagerLayer::__Private::_fields_map; \ No newline at end of file +QList> FieldManagerLayer::__Private::fields_map; \ No newline at end of file diff --git a/TranslateUI/TranslateBasic.h b/TranslateUI/TranslateBasic.h index fe0628e..a68b9ae 100644 --- a/TranslateUI/TranslateBasic.h +++ b/TranslateUI/TranslateBasic.h @@ -225,9 +225,9 @@ public: class FieldManagerLayer : public ScopeFieldsSetter, public ScopeFieldsGetter { public: struct __Private { - QString _rule_name; - std::shared_ptr _parent_setter = nullptr; - static QList> _fields_map; + QString rule_name; + std::shared_ptr parent_setter = nullptr; + static QList> fields_map; }_setter; @@ -236,7 +236,7 @@ public: void clear() override; public: - FieldManagerLayer(const QString& self, std::shared_ptr instp); + FieldManagerLayer(const QString& self, std::shared_ptr instp = nullptr); void setField(const QString& typeAlias, DataType type) override; };