Fix handling of notifications. Basic typecasting now works.

Still needs a bit of work to properly grok pointer/reference types.
This commit is contained in:
Rene Gollent
2012-11-04 16:22:59 +01:00
parent 862696d9bb
commit 8a4cdf3e60
@@ -961,8 +961,8 @@ VariablesView::VariableTableModel::ValueNodeChanged(ValueNodeChild* nodeChild,
if (oldNode != NULL) { if (oldNode != NULL) {
ValueNodeChildrenDeleted(oldNode); ValueNodeChildrenDeleted(oldNode);
ValueNodeChildrenCreated(newNode); newNode->CreateChildren();
fContainerListener->ModelNodeValueRequested(modelNode); NotifyNodeChanged(modelNode);
} }
} }
@@ -1026,6 +1026,11 @@ VariablesView::VariableTableModel::ValueNodeChildrenDeleted(ValueNode* node)
for (int32 i = 0; i < modelNode->CountChildren(); i++) { for (int32 i = 0; i < modelNode->CountChildren(); i++) {
BReference<ModelNode> childNode = modelNode->ChildAt(i); BReference<ModelNode> childNode = modelNode->ChildAt(i);
TreeTablePath treePath;
if (GetTreePath(childNode, treePath)) {
int32 index = treePath.RemoveLastComponent();
NotifyNodesRemoved(treePath, index, 1);
}
modelNode->RemoveChild(childNode); modelNode->RemoveChild(childNode);
fNodeTable.Remove(childNode); fNodeTable.Remove(childNode);
} }
@@ -1641,29 +1646,25 @@ VariablesView::MessageReceived(BMessage* message)
{ {
ModelNode* node = NULL; ModelNode* node = NULL;
if (message->FindPointer("node", reinterpret_cast<void **>(&node)) != B_OK) if (message->FindPointer("node", reinterpret_cast<void **>(&node)) != B_OK)
return; break;
TeamDebugInfo* info = fThread->GetTeam()->DebugInfo(); TeamDebugInfo* info = fThread->GetTeam()->DebugInfo();
if (info == NULL) if (info == NULL)
return; break;
Type* type = NULL; Type* type = NULL;
if (info->LookupTypeByName(message->FindString("text"), if (info->LookupTypeByName(message->FindString("text"),
TypeLookupConstraints(), type) != B_OK) { TypeLookupConstraints(), type) != B_OK) {
// TODO: notify user // TODO: notify user
return; break;
} }
ValueNode* valueNode = NULL; ValueNode* valueNode = NULL;
if (TypeHandlerRoster::Default()->CreateValueNode( if (TypeHandlerRoster::Default()->CreateValueNode(
node->NodeChild(), type, valueNode) != B_OK) { node->NodeChild(), type, valueNode) != B_OK) {
return; break;
} }
ValueNode* previousNode = node->NodeChild()->Node();
BReference<ValueNode> nodeRef(previousNode);
node->NodeChild()->SetNode(valueNode); node->NodeChild()->SetNode(valueNode);
fVariableTableModel->ValueNodeChanged(node->NodeChild(),
previousNode, valueNode );
break; break;
} }
case MSG_VALUE_NODE_CHANGED: case MSG_VALUE_NODE_CHANGED: