TaskPaneTreeNode.hxx (67e470da) TaskPaneTreeNode.hxx (3e459a30)
1/**************************************************************
1/**************************************************************
2 *
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
19 *
20 *************************************************************/
21
22
23
24#ifndef SD_TASKPANE_TREE_NODE_HXX
25#define SD_TASKPANE_TREE_NODE_HXX
26
27#include "ILayoutableWindow.hxx"

--- 7 unchanged lines hidden (view full) ---

35}
36
37namespace sd { namespace toolpanel {
38
39class ControlContainer;
40class TaskPaneShellManager;
41
42enum TreeNodeStateChangeEventId {
20 *************************************************************/
21
22
23
24#ifndef SD_TASKPANE_TREE_NODE_HXX
25#define SD_TASKPANE_TREE_NODE_HXX
26
27#include "ILayoutableWindow.hxx"

--- 7 unchanged lines hidden (view full) ---

35}
36
37namespace sd { namespace toolpanel {
38
39class ControlContainer;
40class TaskPaneShellManager;
41
42enum TreeNodeStateChangeEventId {
43 EID_CHILD_ADDED,
44 EID_ALL_CHILDREN_REMOVED,
45 EID_EXPANSION_STATE_CHANGED,
46 EID_FOCUSED_STATE_CHANGED,
47 EID_SHOWING_STATE_CHANGED
43 EID_CHILD_ADDED,
44 EID_ALL_CHILDREN_REMOVED,
45 EID_EXPANSION_STATE_CHANGED,
46 EID_FOCUSED_STATE_CHANGED,
47 EID_SHOWING_STATE_CHANGED
48};
49
50
51/** Base class for all members of the object hierarchy that makes up the
48};
49
50
51/** Base class for all members of the object hierarchy that makes up the
52 tool panel. In the task pane, there are multiple hierarchies of such nodes,
53 with every panel having an own tree. The pane node is the root of the tree, below
54 that there are SubToolPanels and Window/Control objects. At the
55 lowest level there are only Window or Control objects.
52 tool panel. In the task pane, there are multiple hierarchies of such nodes,
53 with every panel having an own tree. The pane node is the root of the tree, below
54 that there are SubToolPanels and Window/Control objects. At the
55 lowest level there are only Window or Control objects.
56
56
57 This class provides the means of communication between objects on
58 different levels.
57 This class provides the means of communication between objects on
58 different levels.
59*/
60class TreeNode
59*/
60class TreeNode
61 : public ILayoutableWindow,
62 public ILayouter
61 : public ILayoutableWindow,
62 public ILayouter
63{
64public:
63{
64public:
65 TreeNode (TreeNode* pParent);
66 virtual ~TreeNode (void);
65 TreeNode (TreeNode* pParent);
66 virtual ~TreeNode (void);
67
67
68 void SetParentNode (TreeNode* pNewParent);
69 TreeNode* GetParentNode (void);
68 void SetParentNode (TreeNode* pNewParent);
69 TreeNode* GetParentNode (void);
70
70
71 /** Return the Window pointer of a tree node.
72 */
73 virtual ::Window* GetWindow (void);
71 /** Return the Window pointer of a tree node.
72 */
73 virtual ::Window* GetWindow (void);
74
74
75 /** Return a const pointer to the window of a tree node.
76 */
77 virtual const ::Window* GetConstWindow (void) const;
75 /** Return a const pointer to the window of a tree node.
76 */
77 virtual const ::Window* GetConstWindow (void) const;
78
78
79 /** Return the joined minimum width of all children, i.e. the largest of
80 the minimum widths.
81 */
82 virtual sal_Int32 GetMinimumWidth (void);
79 /** Return the joined minimum width of all children, i.e. the largest of
80 the minimum widths.
81 */
82 virtual sal_Int32 GetMinimumWidth (void);
83
83
84 /** The default implementaion always returns <FALSE/>
85 */
86 virtual bool IsResizable (void);
84 /** The default implementaion always returns <FALSE/>
85 */
86 virtual bool IsResizable (void);
87
87
88 /** Call this method whenever the size of one of the children of the
89 called node has to be changed, e.g. when the layout menu shows more
90 or less items than before. As a typical result the node will layout
91 and resize its children according to their size requirements.
92
93 Please remember that the size of the children can be changed in the
94 first place because scroll bars can give a node the space it needs.
88 /** Call this method whenever the size of one of the children of the
89 called node has to be changed, e.g. when the layout menu shows more
90 or less items than before. As a typical result the node will layout
91 and resize its children according to their size requirements.
95
92
96 The default implementation passes this call to its parent.
97 */
98 virtual void RequestResize (void);
93 Please remember that the size of the children can be changed in the
94 first place because scroll bars can give a node the space it needs.
99
95
100 /** The default implementation shows the window (when it exists) when
101 bExpansionState is <TRUE/>. It hides the window otherwise.
102 @return
103 Returns <TRUE/> when the expansion state changes. When an
104 expansion state is requested that is already in place then
105 <FALSE/> is returned.
106 */
107 virtual bool Expand (bool bExpansionState);
96 The default implementation passes this call to its parent.
97 */
98 virtual void RequestResize (void);
108
99
109 /** The default implementation returns whether the window is showing.
110 When there is no window then it returns <FALSE/>.
111 */
112 virtual bool IsExpanded (void) const;
100 /** The default implementation shows the window (when it exists) when
101 bExpansionState is <TRUE/>. It hides the window otherwise.
102 @return
103 Returns <TRUE/> when the expansion state changes. When an
104 expansion state is requested that is already in place then
105 <FALSE/> is returned.
106 */
107 virtual bool Expand (bool bExpansionState);
113
108
114 /** Return whether the node can be expanded or collapsed. The default
115 implementation always returns <TRUE/> when there is window and
116 <FALSE/> otherwise. If <FALSE/> is returned
117 then Expand() may be called but it will not change the expansion
118 state.
119 */
120 virtual bool IsExpandable (void) const;
109 /** The default implementation returns whether the window is showing.
110 When there is no window then it returns <FALSE/>.
111 */
112 virtual bool IsExpanded (void) const;
121
113
122 /** The default implementation calls GetWindow()->Show().
123 */
124 virtual void Show (bool bVisibilityState);
114 /** Return whether the node can be expanded or collapsed. The default
115 implementation always returns <TRUE/> when there is window and
116 <FALSE/> otherwise. If <FALSE/> is returned
117 then Expand() may be called but it will not change the expansion
118 state.
119 */
120 virtual bool IsExpandable (void) const;
125
121
126 /** The default implementation returns GetWindow()->IsVisible().
127 */
128 virtual bool IsShowing (void) const;
122 /** The default implementation calls GetWindow()->Show().
123 */
124 virtual void Show (bool bVisibilityState);
129
125
130 ControlContainer& GetControlContainer (void);
126 /** The default implementation returns GetWindow()->IsVisible().
127 */
128 virtual bool IsShowing (void) const;
131
129
132 /** Give each node access to a shell manage. This usually is the shell
133 manager of the ToolPanelViewShell.
130 ControlContainer& GetControlContainer (void);
134
131
135 At least the root node has to overwrite this method since the
136 default implementation simply returns the shell manager of its
137 parent.
138 */
139 virtual TaskPaneShellManager* GetShellManager (void);
132 /** Give each node access to a shell manage. This usually is the shell
133 manager of the ToolPanelViewShell.
140
134
141 /** You will rarely need to overload this method. To supply your own
142 accessible object you should overload CreateAccessible() instead.
143 */
144 virtual ::com::sun::star::uno::Reference<
145 ::com::sun::star::accessibility::XAccessible> GetAccessibleObject (void);
135 At least the root node has to overwrite this method since the
136 default implementation simply returns the shell manager of its
137 parent.
138 */
139 virtual TaskPaneShellManager* GetShellManager (void);
146
140
147 /** Overload this method in order to supply a class specific accessible
148 object.
149 The default implementation will return a new instance of
150 AccessibleTreeNode.
151 @param rxParent
152 The accessible parent of the accessible object to create. It is
153 not necessaryly the accessible object of the parent window of
154 GetWindow().
155
156 */
157 virtual ::com::sun::star::uno::Reference<
158 ::com::sun::star::accessibility::XAccessible> CreateAccessibleObject (
159 const ::com::sun::star::uno::Reference<
160 ::com::sun::star::accessibility::XAccessible>&rxParent);
141 /** You will rarely need to overload this method. To supply your own
142 accessible object you should overload CreateAccessible() instead.
143 */
144 virtual ::com::sun::star::uno::Reference<
145 ::com::sun::star::accessibility::XAccessible> GetAccessibleObject (void);
161
146
162 /** Add a listener that will be informated in the future about state
163 changes of the tree node. This includes adding and removing
164 children as well as focus, visibility, and expansion state.
165 Multiple calls are ignored. Each listener is added only once.
166 */
167 void AddStateChangeListener (const Link& rListener);
147 /** Overload this method in order to supply a class specific accessible
148 object.
149 The default implementation will return a new instance of
150 AccessibleTreeNode.
151 @param rxParent
152 The accessible parent of the accessible object to create. It is
153 not necessarily the accessible object of the parent window of
154 GetWindow().
168
155
169 /** Call the state change listeners and pass a state change event with
170 the specified event id. The source field is set to this.
171 @param pChild
172 This optional parameter makes sense only with the
173 EID_CHILD_ADDED event.
174 */
175 void FireStateChangeEvent (
176 TreeNodeStateChangeEventId eEventId,
177 TreeNode* pChild = NULL) const;
178
156 */
157 virtual ::com::sun::star::uno::Reference<
158 ::com::sun::star::accessibility::XAccessible> CreateAccessibleObject (
159 const ::com::sun::star::uno::Reference<
160 ::com::sun::star::accessibility::XAccessible>&rxParent);
161
162 /** Add a listener that will be informed in the future about state
163 changes of the tree node. This includes adding and removing
164 children as well as focus, visibility, and expansion state.
165 Multiple calls are ignored. Each listener is added only once.
166 */
167 void AddStateChangeListener (const Link& rListener);
168
169 /** Call the state change listeners and pass a state change event with
170 the specified event id. The source field is set to this.
171 @param pChild
172 This optional parameter makes sense only with the
173 EID_CHILD_ADDED event.
174 */
175 void FireStateChangeEvent (
176 TreeNodeStateChangeEventId eEventId,
177 TreeNode* pChild = NULL) const;
178
179protected:
179protected:
180 ::std::auto_ptr<ControlContainer> mpControlContainer;
180 ::std::auto_ptr<ControlContainer> mpControlContainer;
181
182private:
181
182private:
183 TreeNode* mpParent;
184 typedef ::std::vector<Link> StateChangeListenerContainer;
185 StateChangeListenerContainer maStateChangeListeners;
183 TreeNode* mpParent;
184 typedef ::std::vector<Link> StateChangeListenerContainer;
185 StateChangeListenerContainer maStateChangeListeners;
186};
187
188
189
190
191/** Objects of this class are sent to listeners to notify them about state
186};
187
188
189
190
191/** Objects of this class are sent to listeners to notify them about state
192 changes of a tree node.
192 changes of a tree node.
193*/
194class TreeNodeStateChangeEvent
195{
196public:
197
193*/
194class TreeNodeStateChangeEvent
195{
196public:
197
198 TreeNodeStateChangeEvent (
199 const TreeNode& rNode,
200 TreeNodeStateChangeEventId eEventId,
201 TreeNode* pChild = NULL);
198 TreeNodeStateChangeEvent (
199 const TreeNode& rNode,
200 TreeNodeStateChangeEventId eEventId,
201 TreeNode* pChild = NULL);
202
202
203 const TreeNode& mrSource;
204 TreeNodeStateChangeEventId meEventId;
205 TreeNode* mpChild;
203 const TreeNode& mrSource;
204 TreeNodeStateChangeEventId meEventId;
205 TreeNode* mpChild;
206};
207
208} } // end of namespace ::sd::toolpanel
209
210#endif
206};
207
208} } // end of namespace ::sd::toolpanel
209
210#endif