void VariablesView::VariableTableModel::ValueNodeValueChanged(ValueNode* valueNode) { if (fContainer == NULL) return; AutoLocker<ValueNodeContainer> containerLocker(fContainer); // check whether we know the node ValueNodeChild* nodeChild = valueNode->NodeChild(); if (nodeChild == NULL) return; ModelNode* modelNode = fNodeTable.Lookup(nodeChild); if (modelNode == NULL) return; // check whether the value actually changed Value* value = valueNode->GetValue(); if (value == modelNode->GetValue()) return; // get a value handler ValueHandler* valueHandler; status_t error = ValueHandlerRoster::Default()->FindValueHandler(value, valueHandler); if (error != B_OK) return; BReference<ValueHandler> handlerReference(valueHandler, true); // create a table cell renderer for the value TableCellValueRenderer* renderer = NULL; error = valueHandler->GetTableCellValueRenderer(value, renderer); if (error != B_OK) return; // set value/handler/renderer modelNode->SetValue(value); modelNode->SetValueHandler(valueHandler); modelNode->SetTableCellRenderer(renderer); // notify table model listeners NotifyNodeChanged(modelNode); }