From f82c6e67df94e0f869c3bd3ed6dbaceef244a7e0 Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Sat, 19 Jul 2025 10:58:46 +0800 Subject: [PATCH] update integer complete --- TranslateUI/SequenceView.cpp | 6 +-- TranslateUI/SequenceView.h | 2 +- TranslateUI/StructView.cpp | 31 ------------- TranslateUI/StructView.h | 28 ------------ TranslateUI/StructuralRuleView.cpp | 72 ++++++++++++++++++++++++++++++ TranslateUI/StructuralRuleView.h | 48 ++++++++++++++++++++ TranslateUI/TranslateBasic.cpp | 6 +-- TranslateUI/TranslateUI.vcxproj | 4 +- TranslateUI/main.cpp | 2 +- 9 files changed, 129 insertions(+), 70 deletions(-) delete mode 100644 TranslateUI/StructView.cpp delete mode 100644 TranslateUI/StructView.h create mode 100644 TranslateUI/StructuralRuleView.cpp create mode 100644 TranslateUI/StructuralRuleView.h diff --git a/TranslateUI/SequenceView.cpp b/TranslateUI/SequenceView.cpp index 1b282de..dc186d9 100644 --- a/TranslateUI/SequenceView.cpp +++ b/TranslateUI/SequenceView.cpp @@ -93,12 +93,11 @@ SequenceRulesView::SequenceRulesView(QWidget* p /*= nullptr*/) connect(rule_delegate, &RuleSelectDelegate::dataChanged, this, &SequenceRulesView::peersRuleChanged); connect(int_delegate, &IntDelegate::valueChanged, this, &SequenceRulesView::currentRuleRefresh); - auto select_model = this->selectionModel(); - connect(select_model, &QItemSelectionModel::currentRowChanged, [=](const QModelIndex& curr) { + connect(this, &QTableView::clicked, [=](const QModelIndex& curr) { if (!curr.isValid()) return; - emit this->currentRuleChanged(_rule_sequence[curr.row()]); + emit this->currentRuleChanged(_rule_sequence[curr.row()], curr); }); } @@ -132,6 +131,7 @@ void SequenceRulesView::addTranslateUnit() auto bytes = QJsonDocument(obj).toJson(QJsonDocument::Compact); auto json_doc = QString::fromUtf8(bytes); new_row << new QStandardItem(json_doc); + new_row.last()->setEditable(false); this->_sequence_model->appendRow(new_row); this->resizeColumnsToContents(); diff --git a/TranslateUI/SequenceView.h b/TranslateUI/SequenceView.h index 4cac66e..c9d5c87 100644 --- a/TranslateUI/SequenceView.h +++ b/TranslateUI/SequenceView.h @@ -77,7 +77,7 @@ private: QList> _rule_sequence; signals: - void currentRuleChanged(std::shared_ptr u) const; + void currentRuleChanged(std::shared_ptr u, const QModelIndex &i) const; public: void currentRuleRefresh(const QModelIndex &idx); diff --git a/TranslateUI/StructView.cpp b/TranslateUI/StructView.cpp deleted file mode 100644 index 4d87afa..0000000 --- a/TranslateUI/StructView.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "StructView.h" -#include -#include -#include -#include -#include -#include -#include - -StructuralRuleView::StructuralRuleView(QWidget* p /*= nullptr*/) - :QWidget(p), - _sequence_view(new SequenceRulesView(this)), - _configs_stack(new QStackedWidget(this)) -{ - auto layout = new QVBoxLayout(this); - auto split = new QSplitter(Qt::Horizontal, this); - layout->addWidget(split); - - split->addWidget(_sequence_view); - split->addWidget(_configs_stack); - - _configs_stack->addWidget(new EmptyConfiguration(this)); -} - -EmptyConfiguration::EmptyConfiguration(QWidget* p/*=nullptr*/) -{ - auto layout = new QVBoxLayout(this); - auto label = new QLabel(u8"当前规则无需配置", this); - label->setAlignment(Qt::AlignCenter); - layout->addWidget(label); -} diff --git a/TranslateUI/StructView.h b/TranslateUI/StructView.h deleted file mode 100644 index dd895e0..0000000 --- a/TranslateUI/StructView.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include -#include "SequenceView.h" - -/// -/// 空白配置面板 -/// -class EmptyConfiguration : public QWidget { -public: - EmptyConfiguration(QWidget *p=nullptr); -}; - -class StructuralRuleView : public QWidget -{ -private: - SequenceRulesView *const _sequence_view; - QStackedWidget *const _configs_stack; - -public: - StructuralRuleView(QWidget* p = nullptr); - -}; - diff --git a/TranslateUI/StructuralRuleView.cpp b/TranslateUI/StructuralRuleView.cpp new file mode 100644 index 0000000..1882aeb --- /dev/null +++ b/TranslateUI/StructuralRuleView.cpp @@ -0,0 +1,72 @@ +#include "StructuralRuleView.h" +#include +#include +#include +#include +#include +#include +#include +#include "TranslateBasic.h" + +StructuralRuleView::StructuralRuleView(QWidget* p /*= nullptr*/) + :QWidget(p), + _sequence_view(new SequenceRulesView(this)), + _configs_stack(new QStackedWidget(this)) +{ + auto layout = new QVBoxLayout(this); + auto split = new QSplitter(Qt::Horizontal, this); + layout->addWidget(split); + + split->addWidget(_sequence_view); + split->addWidget(_configs_stack); + + _configs_stack->addWidget(new EmptyConfiguration(this)); + auto int_config = new IntegerConfiguration(this); + _configs_stack->addWidget(int_config); + + + connect(int_config, &IntegerConfiguration::ruleHasBeenChanged, + _sequence_view, &SequenceRulesView::currentRuleRefresh); + + connect(_sequence_view, &SequenceRulesView::currentRuleChanged, + [=](std::shared_ptr u, const QModelIndex& i) { + if (u->name() == extract::BytesAsInteger().name()) { + _configs_stack->setCurrentIndex(1); + int_config->setCurrent(i, u); + } + else { + _configs_stack->setCurrentIndex(0); + } + }); +} + +EmptyConfiguration::EmptyConfiguration(QWidget* p/*=nullptr*/) +{ + auto layout = new QVBoxLayout(this); + auto label = new QLabel(u8"当前规则无需配置", this); + label->setAlignment(Qt::AlignCenter); + layout->addWidget(label); +} + +IntegerConfiguration::IntegerConfiguration(QWidget* p) + :_unsigned_mark(new QCheckBox(this)) +{ + auto layout = new QGridLayout(this); + layout->addWidget(new QLabel(u8"无符号?:"), 0, 0); + layout->addWidget(_unsigned_mark, 0, 1, 1, 2); + layout->setRowStretch(2, 1); + + connect(_unsigned_mark, &QCheckBox::stateChanged, [=](){ + auto checkmark = _unsigned_mark->isChecked(); + _current_extractor->setUnsignedMark(checkmark); + emit this->ruleHasBeenChanged(_target_modelindex); + }); +} + +void IntegerConfiguration::setCurrent(const QModelIndex& idx, std::shared_ptr u) +{ + this->_target_modelindex = idx; + _current_extractor = std::dynamic_pointer_cast(u); + + this->_unsigned_mark->setChecked(_current_extractor->unsignedMark()); +} diff --git a/TranslateUI/StructuralRuleView.h b/TranslateUI/StructuralRuleView.h new file mode 100644 index 0000000..74f6d31 --- /dev/null +++ b/TranslateUI/StructuralRuleView.h @@ -0,0 +1,48 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include "SequenceView.h" + +/// +/// 空白配置面板 +/// +class EmptyConfiguration : public QWidget { +public: + EmptyConfiguration(QWidget* p = nullptr); +}; + +namespace extract { class BytesAsInteger; } +class IntegerConfiguration : public QWidget { + Q_OBJECT +private: + std::shared_ptr _current_extractor = nullptr; + QModelIndex _target_modelindex; + QCheckBox* const _unsigned_mark; + +signals: + void ruleHasBeenChanged(const QModelIndex& idx); + +public: + IntegerConfiguration(QWidget* p = nullptr); + + void setCurrent(const QModelIndex& idx, std::shared_ptr u); +}; + + +class StructuralRuleView : public QWidget +{ +private: + SequenceRulesView* const _sequence_view; + QStackedWidget* const _configs_stack; + +public: + StructuralRuleView(QWidget* p = nullptr); + +}; + diff --git a/TranslateUI/TranslateBasic.cpp b/TranslateUI/TranslateBasic.cpp index e03c823..b2502f9 100644 --- a/TranslateUI/TranslateBasic.cpp +++ b/TranslateUI/TranslateBasic.cpp @@ -160,7 +160,6 @@ std::shared_ptr BytesAsInteger::newDefault() const BytesAsInteger::BytesAsInteger() :AbstractExtractor(NAME(BytesAsInteger), DataType::Int64) { - setCountWithinParse(8); } void BytesAsInteger::setUnsignedMark(bool ste) @@ -175,9 +174,8 @@ bool BytesAsInteger::unsignedMark() const bool BytesAsInteger::setCountWithinParse(int bytes) { - if (bytes >= 0 && bytes <= 8) - return AbstractExtractor::setCountWithinParse(bytes); - return false; + bytes = std::min(8, std::max(bytes, 0)); + return AbstractExtractor::setCountWithinParse(bytes); } QVariant BytesAsInteger::parse(const QByteArray& bytes) const diff --git a/TranslateUI/TranslateUI.vcxproj b/TranslateUI/TranslateUI.vcxproj index ae55ada..709f852 100644 --- a/TranslateUI/TranslateUI.vcxproj +++ b/TranslateUI/TranslateUI.vcxproj @@ -98,14 +98,14 @@ - + - + diff --git a/TranslateUI/main.cpp b/TranslateUI/main.cpp index a8151f7..8ff7c80 100644 --- a/TranslateUI/main.cpp +++ b/TranslateUI/main.cpp @@ -1,6 +1,6 @@ #include "TranslateUI.h" #include -#include "StructView.h" +#include "StructuralRuleView.h" #include #include "TranslateBasic.h" #include