update integer complete

This commit is contained in:
codeboss 2025-07-19 10:58:46 +08:00
parent e5a10a5b47
commit f82c6e67df
9 changed files with 129 additions and 70 deletions

View File

@ -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();

View File

@ -77,7 +77,7 @@ private:
QList<std::shared_ptr<ExtractUnit>> _rule_sequence;
signals:
void currentRuleChanged(std::shared_ptr<ExtractUnit> u) const;
void currentRuleChanged(std::shared_ptr<ExtractUnit> u, const QModelIndex &i) const;
public:
void currentRuleRefresh(const QModelIndex &idx);

View File

@ -1,31 +0,0 @@
#include "StructView.h"
#include <QGridLayout>
#include <QLabel>
#include <QComboBox>
#include <QPushButton>
#include <QSplitter>
#include <QGroupBox>
#include <QTabWidget>
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);
}

View File

@ -1,28 +0,0 @@
#pragma once
#include <QWidget>
#include <QTableView>
#include <QStandardItemModel>
#include <QTreeView>
#include <QLineEdit>
#include <QStackedWidget>
#include "SequenceView.h"
/// <summary>
/// ¿Õ°×ÅäÖÃÃæ°å
/// </summary>
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);
};

View File

@ -0,0 +1,72 @@
#include "StructuralRuleView.h"
#include <QGridLayout>
#include <QLabel>
#include <QComboBox>
#include <QPushButton>
#include <QSplitter>
#include <QGroupBox>
#include <QTabWidget>
#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<ExtractUnit> 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<ExtractUnit> u)
{
this->_target_modelindex = idx;
_current_extractor = std::dynamic_pointer_cast<extract::BytesAsInteger>(u);
this->_unsigned_mark->setChecked(_current_extractor->unsignedMark());
}

View File

@ -0,0 +1,48 @@
#pragma once
#include <QWidget>
#include <QTableView>
#include <QStandardItemModel>
#include <QTreeView>
#include <QLineEdit>
#include <QStackedWidget>
#include <QSpinBox>
#include <QCheckBox>
#include "SequenceView.h"
/// <summary>
/// ¿Õ°×ÅäÖÃÃæ°å
/// </summary>
class EmptyConfiguration : public QWidget {
public:
EmptyConfiguration(QWidget* p = nullptr);
};
namespace extract { class BytesAsInteger; }
class IntegerConfiguration : public QWidget {
Q_OBJECT
private:
std::shared_ptr<extract::BytesAsInteger> _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<ExtractUnit> u);
};
class StructuralRuleView : public QWidget
{
private:
SequenceRulesView* const _sequence_view;
QStackedWidget* const _configs_stack;
public:
StructuralRuleView(QWidget* p = nullptr);
};

View File

@ -160,7 +160,6 @@ std::shared_ptr<Serializable> 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)
bytes = std::min(8, std::max(bytes, 0));
return AbstractExtractor::setCountWithinParse(bytes);
return false;
}
QVariant BytesAsInteger::parse(const QByteArray& bytes) const

View File

@ -98,14 +98,14 @@
<QtUic Include="TranslateUI.ui" />
<QtMoc Include="TranslateUI.h" />
<ClCompile Include="ParseUntility.cpp" />
<ClCompile Include="StructView.cpp" />
<ClCompile Include="StructuralRuleView.cpp" />
<ClCompile Include="TranslateUI.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="ParseUntility.h" />
<QtMoc Include="SequenceView.h" />
<ClInclude Include="StructView.h" />
<QtMoc Include="StructuralRuleView.h" />
<ClInclude Include="TranslateBasic.h" />
</ItemGroup>
<ItemGroup>

View File

@ -1,6 +1,6 @@
#include "TranslateUI.h"
#include <QtWidgets/QApplication>
#include "StructView.h"
#include "StructuralRuleView.h"
#include <QDebug>
#include "TranslateBasic.h"
#include <cmath>