完善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()) {
|
||||
_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()) {
|
||||
_configs_stack->setCurrentIndex(3);
|
||||
|
@ -188,7 +192,13 @@ ListBasedConfiguration::ListBasedConfiguration(
|
|||
s.unblock();
|
||||
auto fields_map = _fields_getter->prevFields();
|
||||
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());
|
||||
QSignalBlocker s(_prev_field_refer);
|
||||
_prev_field_refer->clear();
|
||||
auto fields_map = get->prevFields();
|
||||
auto fields_map = _fields_getter->prevFields();
|
||||
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());
|
||||
|
|
|
@ -296,10 +296,10 @@ QVariant ValueAccessContext::get(const QString& unique_key) const
|
|||
|
||||
bool FieldManagerLayer::bindCurrent(const QString& unique_key)
|
||||
{
|
||||
for (auto index = 0; index < __Private::_fields_map.size(); ++index) {
|
||||
auto pair = __Private::_fields_map[index];
|
||||
for (auto index = 0; index < __Private::fields_map.size(); ++index) {
|
||||
auto pair = __Private::fields_map[index];
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -309,7 +309,7 @@ bool FieldManagerLayer::bindCurrent(const QString& unique_key)
|
|||
QHash<QString, DataType> FieldManagerLayer::prevFields() const
|
||||
{
|
||||
QHash<QString, DataType> fields;
|
||||
for (auto pair : __Private::_fields_map)
|
||||
for (auto pair : __Private::fields_map)
|
||||
fields[pair.first] = pair.second;
|
||||
|
||||
return fields;
|
||||
|
@ -317,26 +317,26 @@ QHash<QString, DataType> FieldManagerLayer::prevFields() const
|
|||
|
||||
void FieldManagerLayer::clear()
|
||||
{
|
||||
__Private::_fields_map.clear();
|
||||
__Private::fields_map.clear();
|
||||
}
|
||||
|
||||
FieldManagerLayer::FieldManagerLayer(const QString& self, std::shared_ptr<ScopeFieldsSetter> instp)
|
||||
{
|
||||
_setter._rule_name = self;
|
||||
_setter._parent_setter = instp;
|
||||
_setter.rule_name = self;
|
||||
_setter.parent_setter = instp;
|
||||
}
|
||||
|
||||
#include <stdexcept>
|
||||
void FieldManagerLayer::setField(const QString& fieldName, DataType type)
|
||||
{
|
||||
if (_setter._parent_setter)
|
||||
_setter._parent_setter->setField(QString("%1.%2").arg(_setter._rule_name, fieldName), type);
|
||||
if (_setter.parent_setter)
|
||||
_setter.parent_setter->setField(QString("%1.%2").arg(_setter.rule_name, fieldName), type);
|
||||
else {
|
||||
for (auto pair : __Private::_fields_map) {
|
||||
for (auto pair : __Private::fields_map) {
|
||||
if (pair.first == fieldName)
|
||||
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 {
|
||||
public:
|
||||
struct __Private {
|
||||
QString _rule_name;
|
||||
std::shared_ptr<ScopeFieldsSetter> _parent_setter = nullptr;
|
||||
static QList<std::pair<QString, DataType>> _fields_map;
|
||||
QString rule_name;
|
||||
std::shared_ptr<ScopeFieldsSetter> parent_setter = nullptr;
|
||||
static QList<std::pair<QString, DataType>> fields_map;
|
||||
}_setter;
|
||||
|
||||
|
||||
|
@ -236,7 +236,7 @@ public:
|
|||
void clear() override;
|
||||
|
||||
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;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue