update integer complete
This commit is contained in:
parent
e5a10a5b47
commit
f82c6e67df
|
@ -93,12 +93,11 @@ SequenceRulesView::SequenceRulesView(QWidget* p /*= nullptr*/)
|
||||||
connect(rule_delegate, &RuleSelectDelegate::dataChanged, this, &SequenceRulesView::peersRuleChanged);
|
connect(rule_delegate, &RuleSelectDelegate::dataChanged, this, &SequenceRulesView::peersRuleChanged);
|
||||||
connect(int_delegate, &IntDelegate::valueChanged, this, &SequenceRulesView::currentRuleRefresh);
|
connect(int_delegate, &IntDelegate::valueChanged, this, &SequenceRulesView::currentRuleRefresh);
|
||||||
|
|
||||||
auto select_model = this->selectionModel();
|
connect(this, &QTableView::clicked, [=](const QModelIndex& curr) {
|
||||||
connect(select_model, &QItemSelectionModel::currentRowChanged, [=](const QModelIndex& curr) {
|
|
||||||
if (!curr.isValid())
|
if (!curr.isValid())
|
||||||
return;
|
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 bytes = QJsonDocument(obj).toJson(QJsonDocument::Compact);
|
||||||
auto json_doc = QString::fromUtf8(bytes);
|
auto json_doc = QString::fromUtf8(bytes);
|
||||||
new_row << new QStandardItem(json_doc);
|
new_row << new QStandardItem(json_doc);
|
||||||
|
new_row.last()->setEditable(false);
|
||||||
|
|
||||||
this->_sequence_model->appendRow(new_row);
|
this->_sequence_model->appendRow(new_row);
|
||||||
this->resizeColumnsToContents();
|
this->resizeColumnsToContents();
|
||||||
|
|
|
@ -77,7 +77,7 @@ private:
|
||||||
QList<std::shared_ptr<ExtractUnit>> _rule_sequence;
|
QList<std::shared_ptr<ExtractUnit>> _rule_sequence;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void currentRuleChanged(std::shared_ptr<ExtractUnit> u) const;
|
void currentRuleChanged(std::shared_ptr<ExtractUnit> u, const QModelIndex &i) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void currentRuleRefresh(const QModelIndex &idx);
|
void currentRuleRefresh(const QModelIndex &idx);
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
|
@ -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);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
|
@ -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);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
|
@ -160,7 +160,6 @@ std::shared_ptr<Serializable> BytesAsInteger::newDefault() const
|
||||||
|
|
||||||
BytesAsInteger::BytesAsInteger()
|
BytesAsInteger::BytesAsInteger()
|
||||||
:AbstractExtractor(NAME(BytesAsInteger), DataType::Int64) {
|
:AbstractExtractor(NAME(BytesAsInteger), DataType::Int64) {
|
||||||
setCountWithinParse(8);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BytesAsInteger::setUnsignedMark(bool ste)
|
void BytesAsInteger::setUnsignedMark(bool ste)
|
||||||
|
@ -175,9 +174,8 @@ bool BytesAsInteger::unsignedMark() const
|
||||||
|
|
||||||
bool BytesAsInteger::setCountWithinParse(int bytes)
|
bool BytesAsInteger::setCountWithinParse(int bytes)
|
||||||
{
|
{
|
||||||
if (bytes >= 0 && bytes <= 8)
|
bytes = std::min(8, std::max(bytes, 0));
|
||||||
return AbstractExtractor::setCountWithinParse(bytes);
|
return AbstractExtractor::setCountWithinParse(bytes);
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant BytesAsInteger::parse(const QByteArray& bytes) const
|
QVariant BytesAsInteger::parse(const QByteArray& bytes) const
|
||||||
|
|
|
@ -98,14 +98,14 @@
|
||||||
<QtUic Include="TranslateUI.ui" />
|
<QtUic Include="TranslateUI.ui" />
|
||||||
<QtMoc Include="TranslateUI.h" />
|
<QtMoc Include="TranslateUI.h" />
|
||||||
<ClCompile Include="ParseUntility.cpp" />
|
<ClCompile Include="ParseUntility.cpp" />
|
||||||
<ClCompile Include="StructView.cpp" />
|
<ClCompile Include="StructuralRuleView.cpp" />
|
||||||
<ClCompile Include="TranslateUI.cpp" />
|
<ClCompile Include="TranslateUI.cpp" />
|
||||||
<ClCompile Include="main.cpp" />
|
<ClCompile Include="main.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="ParseUntility.h" />
|
<ClInclude Include="ParseUntility.h" />
|
||||||
<QtMoc Include="SequenceView.h" />
|
<QtMoc Include="SequenceView.h" />
|
||||||
<ClInclude Include="StructView.h" />
|
<QtMoc Include="StructuralRuleView.h" />
|
||||||
<ClInclude Include="TranslateBasic.h" />
|
<ClInclude Include="TranslateBasic.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "TranslateUI.h"
|
#include "TranslateUI.h"
|
||||||
#include <QtWidgets/QApplication>
|
#include <QtWidgets/QApplication>
|
||||||
#include "StructView.h"
|
#include "StructuralRuleView.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include "TranslateBasic.h"
|
#include "TranslateBasic.h"
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
Loading…
Reference in New Issue