From 912c1c9f454057acd80f5840583a99949115dc77 Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Sun, 3 Aug 2025 09:59:00 +0800 Subject: [PATCH] update --- TranslateUI/StructuralRuleView.cpp | 67 ++++++++++++++++++++++++++++++ TranslateUI/StructuralRuleView.h | 47 ++++++++++++++++++--- TranslateUI/TranslateBasic.h | 6 +-- 3 files changed, 112 insertions(+), 8 deletions(-) diff --git a/TranslateUI/StructuralRuleView.cpp b/TranslateUI/StructuralRuleView.cpp index f614c2f..11643f2 100644 --- a/TranslateUI/StructuralRuleView.cpp +++ b/TranslateUI/StructuralRuleView.cpp @@ -245,3 +245,70 @@ void BitCombineConfiguration::reloadContent(std::shared_ptr_bit_items->resizeColumnsToContents(); this->_bit_items->verticalHeader()->setVisible(false); } + +#define CUSTOM_RULE 0 +#define BASIC_RULE 1 +ListUnitConfiguration::ListUnitConfiguration( + std::shared_ptr core, QWidget* p /*= nullptr*/) + :QWidget(p), _bind_core(core), _bind_u(nullptr), + + _rule_select(new QComboBox(this)), + _size_layout_select(new QComboBox(this)), + + _configs_stack(new QStackedWidget(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(_configs_stack, 2, 0, 2, 3); + _configs_stack->addWidget(_const_number_input); + _configs_stack->addWidget(_prev_field_refer); + + 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); +} + +void ListUnitConfiguration::currentRuleAccept( + std::shared_ptr u, const QModelIndex& i, + std::shared_ptr getter) +{ + this->_bind_u = std::dynamic_pointer_cast(u); + this->_bind_index = i; + + reloadContent(this->_bind_u); +} + +void ListUnitConfiguration::reloadContent( + std::shared_ptr u, + std::shared_ptr getter) +{ + QSignalBlocker v(_rule_select); + _rule_select->setCurrentText(u->elementRule()->name()); + QSignalBlocker m(_size_layout_select); + _size_layout_select->setCurrentText(u->sizeProvider()->name()); + + if (typeid(*u->sizeProvider().get()) == typeid(ConstNumberProvider)) { + _configs_stack->setCurrentIndex(0); + QSignalBlocker v(_const_number_input); + auto conv = std::dynamic_pointer_cast(u->sizeProvider()); + _const_number_input->setValue(conv->value(conv->expression())); + } + else if (typeid(*u->sizeProvider().get()) == typeid(InterpretedNumberPrivider)) { + _configs_stack->setCurrentIndex(1); + auto conv = std::dynamic_pointer_cast(u->sizeProvider()); + QSignalBlocker v(_prev_field_refer); + auto item_list = getter->prevFields(); + this->_prev_field_refer->clear(); + this->_prev_field_refer->addItems(item_list.keys()); + this->_prev_field_refer->setCurrentText(conv->name()); + } +} diff --git a/TranslateUI/StructuralRuleView.h b/TranslateUI/StructuralRuleView.h index 434d694..47eef76 100644 --- a/TranslateUI/StructuralRuleView.h +++ b/TranslateUI/StructuralRuleView.h @@ -17,12 +17,15 @@ public: EmptyConfiguration(QWidget* p = nullptr); }; +/// +/// 字段长度配置面板 +/// class CountWithinConfiguration : public QWidget { Q_OBJECT private: std::shared_ptr _bind_u; QModelIndex _bind_index; - QSpinBox *const _count_input; + QSpinBox* const _count_input; public: CountWithinConfiguration(QWidget* p = nullptr); @@ -33,6 +36,9 @@ signals: void currentRuleChanged(const QModelIndex& idx); }; +/// +/// 字符串文本编码配置面板 +/// class EncodingConfiguration : public QWidget { Q_OBJECT private: @@ -51,6 +57,9 @@ signals: }; #include "extract_basic.h" +/// +/// 位联合配置面板 +/// class BitCombineConfiguration : public QWidget { Q_OBJECT private: @@ -58,10 +67,10 @@ private: QModelIndex _bind_index; QSpinBox* const _count_input; - QTableView *const _bit_items; - QStandardItemModel *const _bit_model; - QSpinBox *const _index_appoint; - QLineEdit *const _bit_means; + QTableView* const _bit_items; + QStandardItemModel* const _bit_model; + QSpinBox* const _index_appoint; + QLineEdit* const _bit_means; public: BitCombineConfiguration(QWidget* p = nullptr); @@ -73,6 +82,34 @@ signals: void currentRuleChanged(const QModelIndex& idx); }; +class ListUnitConfiguration : public QWidget { + Q_OBJECT +private: + std::shared_ptr _bind_core; + std::shared_ptr _bind_u; + QModelIndex _bind_index; + + QComboBox* const _rule_select; + QComboBox* const _size_layout_select; + + QStackedWidget* const _configs_stack; + QSpinBox* const _const_number_input; + QComboBox* const _prev_field_refer; + +public: + ListUnitConfiguration(std::shared_ptr core, QWidget* p = nullptr); + + void currentRuleAccept( + std::shared_ptr u, + const QModelIndex& i, + std::shared_ptr getter); + void reloadContent(std::shared_ptr u, + std::shared_ptr getter); + +signals: + void currentRuleChanged(const QModelIndex& idx); +}; + class StructuralRuleView : public QWidget { private: diff --git a/TranslateUI/TranslateBasic.h b/TranslateUI/TranslateBasic.h index 0e7e072..65c4ddd 100644 --- a/TranslateUI/TranslateBasic.h +++ b/TranslateUI/TranslateBasic.h @@ -123,8 +123,8 @@ public: std::shared_ptr defaultExtractUnit() const; QHash> extractUnitList() const; - void setCustomRule(const QString &name, std::shared_ptr inst); - void removeCustomRule(const QString &name); + void setCustomRule(const QString& name, std::shared_ptr inst); + void removeCustomRule(const QString& name); QHash> customRules() const; }; @@ -207,7 +207,7 @@ public: }_setter; public: - FieldSetterLayer(const QString &self, std::shared_ptr instp); + FieldSetterLayer(const QString& self, std::shared_ptr instp); void setField(const QString& name, DataType type) override; }; \ No newline at end of file