xref: /haiku/headers/private/debugger/debug_managers/ValueNodeManager.h (revision fce4895d1884da5ae6fb299d23c735c598e690b1)
1 /*
2  * Copyright 2012-2016, Rene Gollent, rene@gollent.com.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef VALUE_NODE_MANAGER_H
6 #define VALUE_NODE_MANAGER_H
7 
8 #include <Referenceable.h>
9 
10 #include "ValueNodeContainer.h"
11 
12 class StackFrame;
13 class Thread;
14 class Variable;
15 
16 
17 class ValueNodeManager : public BReferenceable,
18 	private ValueNodeContainer::Listener {
19 public:
20 								ValueNodeManager(bool addFrameNodes = true);
21 	virtual						~ValueNodeManager();
22 
23 			status_t			SetStackFrame(::Thread* thread,
24 									StackFrame* frame);
25 
26 			bool				AddListener(
27 									ValueNodeContainer::Listener* listener);
28 			void				RemoveListener(
29 									ValueNodeContainer::Listener* listener);
30 
31 	virtual	void				ValueNodeChanged(ValueNodeChild* nodeChild,
32 									ValueNode* oldNode, ValueNode* newNode);
33 	virtual	void				ValueNodeChildrenCreated(ValueNode* node);
34 	virtual	void				ValueNodeChildrenDeleted(ValueNode* node);
35 	virtual	void				ValueNodeValueChanged(ValueNode* node);
36 
GetContainer()37 			ValueNodeContainer*	GetContainer() const { return fContainer; };
38 
39 			status_t			AddChildNodes(ValueNodeChild* nodeChild);
40 
41 private:
42 			typedef BObjectList<ValueNodeContainer::Listener> ListenerList;
43 
44 			void				_AddNode(Variable* variable);
45 			status_t			_CreateValueNode(ValueNodeChild* nodeChild);
46 
47 private:
48 			bool				fAddFrameNodes;
49 			ValueNodeContainer*	fContainer;
50 			StackFrame*			fStackFrame;
51 			::Thread*			fThread;
52 			ListenerList		fListeners;
53 };
54 
55 #endif	// VALUE_NODE_MANAGER_H
56