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:
parent
69b1511d01
commit
5571551261
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue