完善FieldManagerLayout筛选机制
This commit is contained in:
parent
fb4f468520
commit
a20e36294b
|
@ -53,7 +53,11 @@ ExtractRuleView::ExtractRuleView(std::shared_ptr<TranslateBasic> base,
|
||||||
}
|
}
|
||||||
else if (unit->baseType() == ListBasedUnit::topic()) {
|
else if (unit->baseType() == ListBasedUnit::topic()) {
|
||||||
_configs_stack->setCurrentIndex(2);
|
_configs_stack->setCurrentIndex(2);
|
||||||
list_configs->currentAccept(unit, target);
|
_current_fields_cache = std::make_shared<FieldManagerLayer>("{self}");
|
||||||
|
this->_rule_base->registSubField(_current_fields_cache);
|
||||||
|
auto current_field = this->_rule_base->operator[](target.row());
|
||||||
|
_current_fields_cache->bindCurrent(current_field->name());
|
||||||
|
list_configs->currentAccept(unit, target, _current_fields_cache);
|
||||||
}
|
}
|
||||||
else if (unit->baseType() == UnionBasedUnit::topic()) {
|
else if (unit->baseType() == UnionBasedUnit::topic()) {
|
||||||
_configs_stack->setCurrentIndex(3);
|
_configs_stack->setCurrentIndex(3);
|
||||||
|
@ -188,7 +192,13 @@ ListBasedConfiguration::ListBasedConfiguration(
|
||||||
s.unblock();
|
s.unblock();
|
||||||
auto fields_map = _fields_getter->prevFields();
|
auto fields_map = _fields_getter->prevFields();
|
||||||
for (auto field_name : fields_map.keys()) {
|
for (auto field_name : fields_map.keys()) {
|
||||||
_prev_field_refer->addItem(field_name, (int)fields_map[field_name]);
|
switch (fields_map[field_name]) {
|
||||||
|
case DataType::Integer:
|
||||||
|
case DataType::Unsigned:
|
||||||
|
_prev_field_refer->addItem(field_name);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,9 +256,15 @@ void ListBasedConfiguration::currentAccept(std::shared_ptr<ExtractUnit> inst_u,
|
||||||
auto size_rt = std::dynamic_pointer_cast<InterpretedNumberPrivider>(_bind_u->sizeProvider());
|
auto size_rt = std::dynamic_pointer_cast<InterpretedNumberPrivider>(_bind_u->sizeProvider());
|
||||||
QSignalBlocker s(_prev_field_refer);
|
QSignalBlocker s(_prev_field_refer);
|
||||||
_prev_field_refer->clear();
|
_prev_field_refer->clear();
|
||||||
auto fields_map = get->prevFields();
|
auto fields_map = _fields_getter->prevFields();
|
||||||
for (auto field_name : fields_map.keys()) {
|
for (auto field_name : fields_map.keys()) {
|
||||||
_prev_field_refer->addItem(field_name, (int)fields_map[field_name]);
|
switch (fields_map[field_name]) {
|
||||||
|
case DataType::Integer:
|
||||||
|
case DataType::Unsigned:
|
||||||
|
_prev_field_refer->addItem(field_name);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_prev_field_refer->setCurrentText(size_rt->expression());
|
_prev_field_refer->setCurrentText(size_rt->expression());
|
||||||
|
|
|
@ -296,10 +296,10 @@ QVariant ValueAccessContext::get(const QString& unique_key) const
|
||||||
|
|
||||||
bool FieldManagerLayer::bindCurrent(const QString& unique_key)
|
bool FieldManagerLayer::bindCurrent(const QString& unique_key)
|
||||||
{
|
{
|
||||||
for (auto index = 0; index < __Private::_fields_map.size(); ++index) {
|
for (auto index = 0; index < __Private::fields_map.size(); ++index) {
|
||||||
auto pair = __Private::_fields_map[index];
|
auto pair = __Private::fields_map[index];
|
||||||
if (pair.first == unique_key) {
|
if (pair.first == unique_key) {
|
||||||
__Private::_fields_map = __Private::_fields_map.mid(0, index);
|
__Private::fields_map = __Private::fields_map.mid(0, index);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -309,7 +309,7 @@ bool FieldManagerLayer::bindCurrent(const QString& unique_key)
|
||||||
QHash<QString, DataType> FieldManagerLayer::prevFields() const
|
QHash<QString, DataType> FieldManagerLayer::prevFields() const
|
||||||
{
|
{
|
||||||
QHash<QString, DataType> fields;
|
QHash<QString, DataType> fields;
|
||||||
for (auto pair : __Private::_fields_map)
|
for (auto pair : __Private::fields_map)
|
||||||
fields[pair.first] = pair.second;
|
fields[pair.first] = pair.second;
|
||||||
|
|
||||||
return fields;
|
return fields;
|
||||||
|
@ -317,26 +317,26 @@ QHash<QString, DataType> FieldManagerLayer::prevFields() const
|
||||||
|
|
||||||
void FieldManagerLayer::clear()
|
void FieldManagerLayer::clear()
|
||||||
{
|
{
|
||||||
__Private::_fields_map.clear();
|
__Private::fields_map.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
FieldManagerLayer::FieldManagerLayer(const QString& self, std::shared_ptr<ScopeFieldsSetter> instp)
|
FieldManagerLayer::FieldManagerLayer(const QString& self, std::shared_ptr<ScopeFieldsSetter> instp)
|
||||||
{
|
{
|
||||||
_setter._rule_name = self;
|
_setter.rule_name = self;
|
||||||
_setter._parent_setter = instp;
|
_setter.parent_setter = instp;
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
void FieldManagerLayer::setField(const QString& fieldName, DataType type)
|
void FieldManagerLayer::setField(const QString& fieldName, DataType type)
|
||||||
{
|
{
|
||||||
if (_setter._parent_setter)
|
if (_setter.parent_setter)
|
||||||
_setter._parent_setter->setField(QString("%1.%2").arg(_setter._rule_name, fieldName), type);
|
_setter.parent_setter->setField(QString("%1.%2").arg(_setter.rule_name, fieldName), type);
|
||||||
else {
|
else {
|
||||||
for (auto pair : __Private::_fields_map) {
|
for (auto pair : __Private::fields_map) {
|
||||||
if (pair.first == fieldName)
|
if (pair.first == fieldName)
|
||||||
throw new std::invalid_argument("×Ö¶ÎÃû³ÆÖظ´");
|
throw new std::invalid_argument("×Ö¶ÎÃû³ÆÖظ´");
|
||||||
}
|
}
|
||||||
__Private::_fields_map << std::make_pair(fieldName, type);
|
__Private::fields_map << std::make_pair(fieldName, type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QList<std::pair<QString, DataType>> FieldManagerLayer::__Private::_fields_map;
|
QList<std::pair<QString, DataType>> FieldManagerLayer::__Private::fields_map;
|
|
@ -225,9 +225,9 @@ public:
|
||||||
class FieldManagerLayer : public ScopeFieldsSetter, public ScopeFieldsGetter {
|
class FieldManagerLayer : public ScopeFieldsSetter, public ScopeFieldsGetter {
|
||||||
public:
|
public:
|
||||||
struct __Private {
|
struct __Private {
|
||||||
QString _rule_name;
|
QString rule_name;
|
||||||
std::shared_ptr<ScopeFieldsSetter> _parent_setter = nullptr;
|
std::shared_ptr<ScopeFieldsSetter> parent_setter = nullptr;
|
||||||
static QList<std::pair<QString, DataType>> _fields_map;
|
static QList<std::pair<QString, DataType>> fields_map;
|
||||||
}_setter;
|
}_setter;
|
||||||
|
|
||||||
|
|
||||||
|
@ -236,7 +236,7 @@ public:
|
||||||
void clear() override;
|
void clear() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FieldManagerLayer(const QString& self, std::shared_ptr<ScopeFieldsSetter> instp);
|
FieldManagerLayer(const QString& self, std::shared_ptr<ScopeFieldsSetter> instp = nullptr);
|
||||||
|
|
||||||
void setField(const QString& typeAlias, DataType type) override;
|
void setField(const QString& typeAlias, DataType type) override;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue