FIX: object params variant crash

Change-Id: Ia67b98c29a0cc97f8479911ffdefb942cb6c751f
Jira: none
(cherry picked from commit 8bf65c0963d1ee39bba12f67f33177d4ac6d6a60)
This commit is contained in:
chunmao.guo authored and Noisyfox committed 2025-08-28 15:18:42 +08:00
1 parent 2a35173b8c
commit 660d2ee686
4 files changed
+26 -7

No files matched your search

+2 -2
View File
@@ -1015,8 +1015,8 @@ void CheckBox::set_value(const boost::any& value, bool change_event)
m_disable_change_event = !change_event;
if (m_opt.nullable) {
const bool is_value_unsigned_char = value.type() == typeid(unsigned char);
m_is_na_val = is_value_unsigned_char &&
boost::any_cast<unsigned char>(value) == ConfigOptionBoolsNullable::nil_value();
m_is_na_val = value.empty() || (is_value_unsigned_char &&
boost::any_cast<unsigned char>(value) == ConfigOptionBoolsNullable::nil_value());
if (!m_is_na_val)
m_last_meaningful_value = is_value_unsigned_char ? value : static_cast<unsigned char>(boost::any_cast<bool>(value));
+16 -3
View File
@@ -2829,7 +2829,9 @@ void TabPrintModel::update_model_config()
//update();
if (!m_null_keys.empty()) {
if (m_active_page) {
for (auto k : m_null_keys) {
auto null_keys = m_null_keys;
filter_diff_option(null_keys);
for (auto k : null_keys) {
auto f = m_active_page->get_field(k);
if (f)
f->set_value(boost::any(), false);
@@ -2862,7 +2864,9 @@ void TabPrintModel::activate_selected_page(std::function<void()> throw_if_cancel
{
TabPrint::activate_selected_page(throw_if_canceled);
if (m_active_page) {
for (auto k : m_null_keys) {
auto null_keys = m_null_keys;
filter_diff_option(null_keys);
for (auto k : null_keys) {
auto f = m_active_page->get_field(k);
if (f)
f->set_value(boost::any(), false);
@@ -2896,6 +2900,7 @@ void TabPrintModel::on_value_change(const std::string& opt_id, const boost::any&
bool set = true; // *m_config->option(k) != *m_prints.get_selected_preset().config.option(k) || inull != m_null_keys.end();
auto tab_opt = dynamic_cast<ConfigOptionVectorBase *>(m_config->option(opt_key));
static std::map<ConfigOptionType, ConfigOptionVectorBase const *> null_vecs {
{coBools, new ConfigOptionBoolsNullable(std::initializer_list<unsigned char>{ConfigOptionBoolsNullable::nil_value()})},
{coInts, new ConfigOptionIntsNullable(1, ConfigOptionIntsNullable::nil_value())},
{coFloats, new ConfigOptionFloatsNullable(1, ConfigOptionFloatsNullable::nil_value())},
{coPercents, new ConfigOptionPercentsNullable(1, ConfigOptionPercentsNullable::nil_value())},
@@ -2952,7 +2957,15 @@ void TabPrintModel::on_value_change(const std::string& opt_id, const boost::any&
void TabPrintModel::reload_config()
{
TabPrint::reload_config();
auto keys = m_config_manipulation.applying_keys();
if (m_active_page) {
auto null_keys = m_null_keys;
filter_diff_option(null_keys);
for (auto k : null_keys) {
auto f = m_active_page->get_field(k);
if (f) f->set_value(boost::any(), false);
}
}
auto keys = m_config_manipulation.applying_keys();
bool super_changed = false;
for (auto & k : keys) {
if (has_key(k)) {