For value nodes with deferred child creation, value loading needs to be

requested once the deferred load has been complete, otherwise their values
would never be loaded if their parent node was already expanded while stepping
through the debugger. There still remains an issue with saving/restoring view
state for such nodes though.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42457 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Rene Gollent 2011-07-19 22:39:05 +00:00
parent 69b1511d01
commit 5571551261
1 changed files with 32 additions and 1 deletions

View File

@ -48,7 +48,8 @@ enum {
enum {
MSG_MODEL_NODE_HIDDEN = 'monh'
MSG_MODEL_NODE_HIDDEN = 'monh',
MSG_VALUE_NODE_NEEDS_VALUE = 'mvnv'
};
@ -70,6 +71,8 @@ public:
virtual void ModelNodeHidden(ModelNode* node);
virtual void ModelNodeValueRequested(ModelNode* node);
private:
BHandler* fIndirectTarget;
VariableTableModel* fModel;
@ -689,6 +692,20 @@ VariablesView::ContainerListener::ModelNodeHidden(ModelNode* node)
}
void
VariablesView::ContainerListener::ModelNodeValueRequested(ModelNode* node)
{
BReference<ModelNode> nodeReference(node);
BMessage message(MSG_VALUE_NODE_NEEDS_VALUE);
if (message.AddPointer("node", node) == B_OK
&& fIndirectTarget->Looper()->PostMessage(&message, fIndirectTarget)
== B_OK) {
nodeReference.Detach();
}
}
// #pragma mark - VariableTableModel
@ -845,6 +862,13 @@ VariablesView::VariableTableModel::ValueNodeChildrenCreated(
_AddNode(modelNode->GetVariable(), modelNode, child,
child->IsInternal(), childCount == 1);
}
if (valueNode->ChildCreationNeedsValue()) {
ModelNode* childNode = fNodeTable.Lookup(child);
if (childNode != NULL)
fContainerListener->ModelNodeValueRequested(childNode);
}
}
}
@ -882,6 +906,12 @@ VariablesView::VariableTableModel::ValueNodeValueChanged(ValueNode* valueNode)
status_t error = valueNode->CreateChildren();
if (error != B_OK)
return;
for (int32 i = 0; i < valueNode->CountChildren(); i++) {
ValueNodeChild* child = valueNode->ChildAt(i);
_CreateValueNode(child);
_AddChildNodes(child);
}
}
// check whether the value actually changed
@ -1407,6 +1437,7 @@ VariablesView::MessageReceived(BMessage* message)
break;
}
case MSG_VALUE_NODE_NEEDS_VALUE:
case MSG_MODEL_NODE_HIDDEN:
{
ModelNode* node;