//------------------------------------------------------------------------------ void ListModelWrapper::set_value_impl(const iterator& row, int column, const Glib::ValueBase& value) { if (!*_tm) return; bec::NodeId node(node_for_iter(row)); if ( node.is_valid() ) { const GType type = *(_columns.types() + column); column = _columns.ui2bec(column); if ( column < 0 ) { if ( !_fake_column_value_setter.empty() ) _fake_column_value_setter(row, column, type, value); } else { switch ( type ) { case G_TYPE_BOOLEAN: { Glib::Value<bool> v; v.init(value.gobj()); lmwdprint("LMW::set_value_impl:%s node %s, column %i, value %i\n", _name.c_str(), node.repr().c_str(), column, v.get()); (*_tm)->set_field(node, column, (ssize_t)v.get()); break; } case G_TYPE_INT: case G_TYPE_UINT: { Glib::Value<ssize_t> v; v.init(value.gobj()); lmwdprint("LMW::set_value_impl: node %s, column %i, value %i\n", node.repr().c_str(), column, v.get()); (*_tm)->set_field(node, column, v.get()); break; } case G_TYPE_FLOAT: case G_TYPE_DOUBLE: { Glib::Value<double> v; v.init(value.gobj()); (*_tm)->set_field(node, column, v.get()); break; } case G_TYPE_STRING: { Glib::Value<std::string> v; v.init(value.gobj()); (*_tm)->set_field(node, column, v.get()); lmwdprint("LMW::set_value: %s '%s'\n", _name.c_str(), v.get().c_str()); break; } default: break; } } } }
//------------------------------------------------------------------------------ void ListModelWrapper::get_value_vfunc(const iterator& iter, int column, Glib::ValueBase& value) const { if (!*_tm) return; bec::NodeId node = node_for_iter(iter); if (node.is_valid()) { const GType type = *(_columns.types() + column); column = _columns.ui2bec(column); if (column < 0) { if (!_fake_column_value_getter.empty()) _fake_column_value_getter(iter, column, type, value); } else if (type == GDK_TYPE_PIXBUF) { get_icon_value(iter, column, node, value); } else { switch (type) { case G_TYPE_BOOLEAN: { bool bv = false; (*_tm)->get_field(node, column, bv); set_glib_bool(value, bv); lmwdprint("LMW::get_value_vfunc: %s: node %s, col %i: value: %i\n", _name.c_str(), node.repr().c_str(), column, bv); break; } case G_TYPE_INT: case G_TYPE_UINT: { ssize_t iv = 0; (*_tm)->get_field(node, column, iv); set_glib_int(value, iv); lmwdprint("LMW::get_value_vfunc: %s: node %s, col %i: value: %i\n", _name.c_str(), node.repr().c_str(), column, iv); break; } case G_TYPE_LONG: case G_TYPE_ULONG: case G_TYPE_INT64: case G_TYPE_UINT64: { throw std::logic_error("Imlement long ints in get_value_func"); break; } case G_TYPE_FLOAT: case G_TYPE_DOUBLE: { double dv = 0.0; (*_tm)->get_field(node, column, dv); set_glib_double(value, dv); lmwdprint("LMW::get_value_vfunc: %s: node %s, col %i: value: %f\n", _name.c_str(), node.repr().c_str(), column, dv); break; } case G_TYPE_STRING: { std::string sv; if (column < 0) sv = (*_tm)->get_field_description(node, -column); else (*_tm)->get_field_repr(node, column, sv); set_glib_string(value, sv, true); lmwdprint("LMW::get_value_vfunc: %s: node %s, col %i: value: '%s'\n", _name.c_str(), node.repr().c_str(), column, sv.c_str()); break; } default: set_glib_string(value, "<unkn>"); break; } } } }