diff --git a/TranslateUI/ExtractRuleView.cpp b/TranslateUI/ExtractRuleView.cpp index 296af59..48e7f76 100644 --- a/TranslateUI/ExtractRuleView.cpp +++ b/TranslateUI/ExtractRuleView.cpp @@ -51,13 +51,21 @@ ExtractRuleView::ExtractRuleView(std::shared_ptr 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 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 inst_u, const QModelIndex& idx) +{ + _bind_u = std::dynamic_pointer_cast(inst_u); + _bind_index = idx; + + +} SingleBasedConfiguration::SingleBasedConfiguration(std::shared_ptr core, QWidget* p /*= nullptr*/) : QWidget(p), _bind_core(core), @@ -162,8 +183,12 @@ SingleBasedConfiguration::SingleBasedConfiguration(std::shared_ptr_delegate_changed, QOverload::of(&QComboBox::currentTextChanged), [=](const QString& current_alias) { - auto vinst = _bind_core->operator[](current_alias)->newDefault(); - inst_current->setDelegate(std::dynamic_pointer_cast(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(v_inst)); emit this->reloadRequest(); }); } @@ -194,3 +219,8 @@ UnionBasedConfiguration::UnionBasedConfiguration(std::shared_ptr { } + +void UnionBasedConfiguration::currentAccept(std::shared_ptr inst_u, const QModelIndex& idx) +{ + +} diff --git a/TranslateUI/ExtractRuleView.h b/TranslateUI/ExtractRuleView.h index 331c65f..3468b62 100644 --- a/TranslateUI/ExtractRuleView.h +++ b/TranslateUI/ExtractRuleView.h @@ -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 _bind_core; - std::shared_ptr _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 _bind_u = nullptr; + QModelIndex _bind_index; + public: ListBasedConfiguration(std::shared_ptr core, QWidget* p = nullptr); + void currentAccept(std::shared_ptr inst_u, const QModelIndex& idx); + + signals: + void reloadRequest(); }; class UnionBasedConfiguration : public QWidget { + Q_OBJECT public: UnionBasedConfiguration(std::shared_ptr core, QWidget* p = nullptr); + void currentAccept(std::shared_ptr 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; }; diff --git a/TranslateUI/WrapConfigs.cpp b/TranslateUI/WrapConfigs.cpp index de2e1a6..30b09e3 100644 --- a/TranslateUI/WrapConfigs.cpp +++ b/TranslateUI/WrapConfigs.cpp @@ -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(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(editor); diff --git a/TranslateUI/extract_basic.cpp b/TranslateUI/extract_basic.cpp index 0eb3368..193022f 100644 --- a/TranslateUI/extract_basic.cpp +++ b/TranslateUI/extract_basic.cpp @@ -675,7 +675,7 @@ std::shared_ptr ListBasedUnit::newDefault() const QString ListBasedUnit::baseType() const { - return NAME(ListBasedUnit); + return topic(); } std::shared_ptr ListBasedUnit::sizeProvider() const @@ -688,6 +688,11 @@ void ListBasedUnit::setSizeProvider(std::shared_ptr inst) _list.size_provider_inst = inst; } +QString ListBasedUnit::topic() +{ + return NAME(ListBasedUnit); +} + void UnionBasedUnit::updateMatch(int index, std::shared_ptr 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 @@ -765,7 +770,7 @@ void UnionBasedUnit::loadFrom(std::shared_ptr core, const QJsonO auto rule_obj = array.at(index); QString match_type; STRING_PEAK(match_type, rule_obj); - + auto ninst = core->ruleMatchMap()[match_type]->newDefault(); QJsonObject content_obj; OBJECT_PEAK(content_obj, rule_obj); @@ -803,3 +808,8 @@ void UnionBasedUnit::setCountWithin(int count) { _union.bytes_count = count; } + +QString UnionBasedUnit::topic() +{ + return NAME(UnionBasedUnit); +} diff --git a/TranslateUI/extract_basic.h b/TranslateUI/extract_basic.h index 4c4542f..77503f6 100644 --- a/TranslateUI/extract_basic.h +++ b/TranslateUI/extract_basic.h @@ -324,6 +324,7 @@ namespace extract { std::shared_ptr 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 inst) override;