|
1 /* |
|
2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Anchor layout |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 #include "alf/alfanchorlayout.h" |
|
21 #include "alf/alfcontrol.h" |
|
22 #include "alf/alfenv.h" |
|
23 #include "alfclient.h" |
|
24 #include "alf/alfconstants.h" |
|
25 #include "alf/alfgencomponent.h" |
|
26 #include "alflogger.h" |
|
27 |
|
28 #include <uiacceltk/HuiUtil.h> |
|
29 |
|
30 /** Specifies a cardinal point for an anchor corner. These would |
|
31 * typically be used in pairs to specify the top left and bottom right |
|
32 * anchor points of a layout. |
|
33 */ |
|
34 NONSHARABLE_STRUCT(TCornerAnchor) |
|
35 { |
|
36 /** <code>ETrue</code>, if this corner anchor should be applied. */ |
|
37 TBool iActive; |
|
38 |
|
39 /** Horizontal origin. */ |
|
40 TAlfAnchorOrigin iHorizontalOrigin; |
|
41 |
|
42 /** Vertical origin. */ |
|
43 TAlfAnchorOrigin iVerticalOrigin; |
|
44 |
|
45 /** Horizontal offset type. */ |
|
46 TAlfAnchorMetric iHorizontalMetric; |
|
47 |
|
48 /** Horizontal offset type. */ |
|
49 TAlfAnchorMetric iVerticalMetric; |
|
50 |
|
51 /** Offset in coordinates or relative to size (e.g., 1.0 * width). */ |
|
52 TAlfTimedPoint iOffset; |
|
53 }; |
|
54 |
|
55 /** Anchor that defines a visual's position and/or size. */ |
|
56 NONSHARABLE_STRUCT(TAnchor) |
|
57 { |
|
58 /** Child ordinal to which the anchor applies. */ |
|
59 TInt iOrdinal; |
|
60 |
|
61 /** Anchor for the top left corner (i.e., SetPos(tl)). */ |
|
62 TCornerAnchor iTl; |
|
63 |
|
64 /** Anchor for the bottom right corner (i.e., SetSize(br - tl)). */ |
|
65 TCornerAnchor iBr; |
|
66 }; |
|
67 |
|
68 |
|
69 |
|
70 // ======== LOCAL FUNCTIONS ======== |
|
71 |
|
72 |
|
73 // ======== MEMBER FUNCTIONS ======== |
|
74 |
|
75 // --------------------------------------------------------------------------- |
|
76 // 1st phase constructor |
|
77 // --------------------------------------------------------------------------- |
|
78 // |
|
79 EXPORT_C CAlfAnchorLayout::CAlfAnchorLayout() |
|
80 : CAlfLayout() |
|
81 { |
|
82 } |
|
83 |
|
84 |
|
85 // --------------------------------------------------------------------------- |
|
86 // 2nd phase constructor |
|
87 // --------------------------------------------------------------------------- |
|
88 // |
|
89 EXPORT_C void CAlfAnchorLayout::ConstructL(CAlfControl& aOwner) |
|
90 { |
|
91 CAlfLayout::ConstructL(aOwner); |
|
92 } |
|
93 |
|
94 // --------------------------------------------------------------------------- |
|
95 // Destructor |
|
96 // --------------------------------------------------------------------------- |
|
97 // |
|
98 EXPORT_C CAlfAnchorLayout::~CAlfAnchorLayout() |
|
99 { |
|
100 } |
|
101 |
|
102 |
|
103 // --------------------------------------------------------------------------- |
|
104 // Creates new anchor layout for the control. |
|
105 // --------------------------------------------------------------------------- |
|
106 // |
|
107 EXPORT_C CAlfAnchorLayout* CAlfAnchorLayout::AddNewL( |
|
108 CAlfControl& aOwnerControl, |
|
109 CAlfLayout* aParentLayout ) |
|
110 { |
|
111 CAlfAnchorLayout* layout = STATIC_CAST(CAlfAnchorLayout*, |
|
112 aOwnerControl.AppendLayoutL(EAlfLayoutTypeAnchor, aParentLayout)); |
|
113 return layout; |
|
114 } |
|
115 |
|
116 // --------------------------------------------------------------------------- |
|
117 // Resets anchors. |
|
118 // --------------------------------------------------------------------------- |
|
119 // |
|
120 EXPORT_C void CAlfAnchorLayout::Reset() |
|
121 { |
|
122 TBuf8<1> outDum; |
|
123 |
|
124 TInt err = Comms()->DoSynchronousCmd(EAlfAnchorLayoutReset, KNullDesC8(), outDum ); |
|
125 |
|
126 if ( err ) |
|
127 { |
|
128 __ALFLOGSTRING1( "CAlfAnchorLayout::Reset panic error %d", err ) |
|
129 USER_INVARIANT(); |
|
130 } |
|
131 } |
|
132 |
|
133 // --------------------------------------------------------------------------- |
|
134 // Sets anchor |
|
135 // --------------------------------------------------------------------------- |
|
136 // |
|
137 EXPORT_C TInt CAlfAnchorLayout::SetAnchor( |
|
138 TAlfAnchor aAnchor, |
|
139 TInt aOrdinal, |
|
140 TAlfAnchorOrigin aHorizOrigin, |
|
141 TAlfAnchorOrigin aVertOrigin, |
|
142 TAlfAnchorMetric aHorizMetric, |
|
143 TAlfAnchorMetric aVertMetric, |
|
144 const TAlfTimedPoint& aOffset) |
|
145 { |
|
146 TAlfLayoutSetAnchorParams params; |
|
147 params.iAnchor = aAnchor; |
|
148 params.iOrdinal = aOrdinal; |
|
149 params.iHorizOrigin = aHorizOrigin; |
|
150 params.iVertOrigin = aVertOrigin; |
|
151 params.iHorizMetric = aHorizMetric; |
|
152 params.iVertMetric = aVertMetric; |
|
153 params.iOffset = aOffset; |
|
154 |
|
155 TPckg<TAlfLayoutSetAnchorParams> paramsPckg(params); |
|
156 |
|
157 TBuf8<1> dum; |
|
158 TInt err = Comms()->DoSynchronousCmd(EAlfAnchorLayoutSetAnchor, paramsPckg, dum ); |
|
159 if ( err != KErrNone ) |
|
160 { |
|
161 __ALFLOGSTRING1( "CAlfAnchorLayout::SetAnchor return error %d", err ) |
|
162 } |
|
163 return err; |
|
164 } |
|
165 |
|
166 // --------------------------------------------------------------------------- |
|
167 // Set relative anchor rect |
|
168 // --------------------------------------------------------------------------- |
|
169 // |
|
170 EXPORT_C TInt CAlfAnchorLayout::SetRelativeAnchorRect(TInt aOrdinal, |
|
171 TAlfAnchorOrigin aTlHorizOrigin, |
|
172 TAlfAnchorOrigin aTlVertOrigin, |
|
173 const TAlfRealPoint& aTopLeftOffset, |
|
174 TAlfAnchorOrigin aBrHorizOrigin, |
|
175 TAlfAnchorOrigin aBrVertOrigin, |
|
176 const TAlfRealPoint& aBottomRightOffset) |
|
177 { |
|
178 TAlfLayoutSetRelativeAnchorRectParams params; |
|
179 params.iOrdinal = aOrdinal; |
|
180 params.iTlHorizOrigin = aTlHorizOrigin; |
|
181 params.iTlVertOrigin = aTlVertOrigin; |
|
182 params.iTopLeftOffset = aTopLeftOffset; |
|
183 params.iBrHorizOrigin = aBrHorizOrigin; |
|
184 params.iBrVertOrigin = aBrVertOrigin; |
|
185 params.iBottomRightOffset = aBottomRightOffset; |
|
186 |
|
187 TPckg<TAlfLayoutSetRelativeAnchorRectParams> paramsPckg(params); |
|
188 TBuf8<1> outDum; |
|
189 |
|
190 TInt err = Comms()->DoSynchronousCmd(EAlfAnchorLayoutSetRelativeAnchorRect, paramsPckg, outDum ); |
|
191 if ( err != KErrNone ) |
|
192 { |
|
193 __ALFLOGSTRING1( "CAlfAnchorLayout::SetRelativeAnchorRect return error %d", err ) |
|
194 } |
|
195 return err; |
|
196 } |
|
197 |
|
198 // --------------------------------------------------------------------------- |
|
199 // Removes an anchor. |
|
200 // --------------------------------------------------------------------------- |
|
201 // |
|
202 EXPORT_C void CAlfAnchorLayout::RemoveAnchor(TAlfAnchor aAnchor, TInt aOrdinal) |
|
203 { |
|
204 TInt2 params( aAnchor, aOrdinal ); |
|
205 TPckg<TInt2> paramsPckg(params); |
|
206 TBuf8<1> outDum; |
|
207 |
|
208 TInt err = Comms()->DoSynchronousCmd(EAlfAnchorLayoutRemoveAnchor, paramsPckg, outDum ); |
|
209 if ( err != KErrNone ) |
|
210 { |
|
211 __ALFLOGSTRING1( "CAlfAnchorLayout::RemoveAnchor panic error %d", err ) |
|
212 USER_INVARIANT(); |
|
213 } |
|
214 } |
|
215 |
|
216 // --------------------------------------------------------------------------- |
|
217 // Attach edge |
|
218 // --------------------------------------------------------------------------- |
|
219 EXPORT_C TInt CAlfAnchorLayout::Attach( |
|
220 TInt aOrdinal, |
|
221 TAlfAnchorType aType, |
|
222 const TAlfMetric& aOffset, |
|
223 TAlfAnchorAttachmentOrigin aAttachmentOrigin, |
|
224 TInt aAttachmentOrdinal) |
|
225 { |
|
226 TAlfMetric metric(aOffset); |
|
227 |
|
228 TAlfLayoutAttachEdgeParams params = |
|
229 { |
|
230 aOrdinal, |
|
231 aType, |
|
232 metric, |
|
233 aAttachmentOrigin, |
|
234 aAttachmentOrdinal |
|
235 }; |
|
236 |
|
237 TPckg<TAlfLayoutAttachEdgeParams> paramsPckg(params); |
|
238 TBuf8<1> outDum; |
|
239 |
|
240 TInt err = Comms()->DoSynchronousCmd(EAlfAnchorLayoutAttachEdge, paramsPckg, outDum ); |
|
241 if ( err != KErrNone ) |
|
242 { |
|
243 __ALFLOGSTRING1( "CAlfAnchorLayout::Attach error %d", err ) |
|
244 } |
|
245 |
|
246 return err; |
|
247 } |
|
248 |
|
249 |
|
250 |
|
251 // --------------------------------------------------------------------------- |
|
252 // Attach corner |
|
253 // --------------------------------------------------------------------------- |
|
254 EXPORT_C TInt CAlfAnchorLayout::Attach( |
|
255 TInt aOrdinal, |
|
256 TAlfAnchorType aType, |
|
257 const TAlfXYMetric& aOffset, |
|
258 TAlfAnchorAttachmentOrigin aAttachmentOrigin, |
|
259 TInt aAttachmentOrdinal) |
|
260 { |
|
261 TAlfLayoutAttachCornerParams params = |
|
262 { |
|
263 aOrdinal, |
|
264 aType, |
|
265 aOffset, |
|
266 aAttachmentOrigin, |
|
267 aAttachmentOrdinal |
|
268 }; |
|
269 |
|
270 TPckg<TAlfLayoutAttachCornerParams> paramsPckg(params); |
|
271 TBuf8<1> outDum; |
|
272 |
|
273 TInt err = Comms()->DoSynchronousCmd(EAlfAnchorLayoutAttachCorner, paramsPckg, outDum ); |
|
274 if ( err != KErrNone ) |
|
275 { |
|
276 __ALFLOGSTRING1( "CAlfAnchorLayout::Attach error %d", err ) |
|
277 } |
|
278 return err; |
|
279 } |
|
280 |
|
281 // --------------------------------------------------------------------------- |
|
282 // Attach box |
|
283 // --------------------------------------------------------------------------- |
|
284 EXPORT_C TInt CAlfAnchorLayout::Attach( |
|
285 TInt aOrdinal, |
|
286 const TAlfBoxMetric& aOffset, |
|
287 TAlfAnchorAttachmentOrigin aAttachmentOrigin, |
|
288 TInt aAttachmentOrdinal) |
|
289 { |
|
290 TAlfLayoutAttachBoxParams params = |
|
291 { |
|
292 aOrdinal, |
|
293 aOffset, |
|
294 aAttachmentOrigin, |
|
295 aAttachmentOrdinal |
|
296 }; |
|
297 |
|
298 TPckg<TAlfLayoutAttachBoxParams> paramsPckg(params); |
|
299 TBuf8<1> outDum; |
|
300 |
|
301 TInt err = Comms()->DoSynchronousCmd(EAlfAnchorLayoutAttachBox, paramsPckg, outDum ); |
|
302 if ( err != KErrNone ) |
|
303 { |
|
304 __ALFLOGSTRING1( "CAlfAnchorLayout::Attach error %d", err ) |
|
305 } |
|
306 return err; |
|
307 } |
|
308 |
|
309 |
|
310 // --------------------------------------------------------------------------- |
|
311 // Detach all anchors |
|
312 // --------------------------------------------------------------------------- |
|
313 EXPORT_C void CAlfAnchorLayout::Detach(TInt aOrdinal) |
|
314 { |
|
315 TInt param( aOrdinal ); |
|
316 TPckg<TInt> paramsPckg(param); |
|
317 TBuf8<1> outDum; |
|
318 |
|
319 TInt err = Comms()->DoSynchronousCmd(EAlfAnchorLayoutDetachAll, paramsPckg, outDum ); |
|
320 if ( err != KErrNone ) |
|
321 { |
|
322 __ALFLOGSTRING1( "CAlfAnchorLayout::Detach panic error %d", err ) |
|
323 USER_INVARIANT(); |
|
324 } |
|
325 } |
|
326 |
|
327 // --------------------------------------------------------------------------- |
|
328 // Detach anchor |
|
329 // --------------------------------------------------------------------------- |
|
330 EXPORT_C void CAlfAnchorLayout::Detach(TInt aOrdinal, TAlfAnchorType aType) |
|
331 { |
|
332 TInt2 params( aOrdinal, aType ); |
|
333 TPckg<TInt2> paramsPckg(params); |
|
334 TBuf8<1> outDum; |
|
335 |
|
336 TInt err = Comms()->DoSynchronousCmd(EAlfAnchorLayoutDetach, paramsPckg, outDum ); |
|
337 if ( err != KErrNone ) |
|
338 { |
|
339 __ALFLOGSTRING1( "CAlfAnchorLayout::Detach panic error %d", err ) |
|
340 USER_INVARIANT(); |
|
341 } |
|
342 } |
|
343 |
|
344 // --------------------------------------------------------------------------- |
|
345 // Place holder from CAlfVisual |
|
346 // --------------------------------------------------------------------------- |
|
347 // |
|
348 EXPORT_C void CAlfAnchorLayout::RemoveAndDestroyAllD() |
|
349 { |
|
350 CAlfLayout::RemoveAndDestroyAllD(); |
|
351 } |
|
352 |
|
353 // --------------------------------------------------------------------------- |
|
354 // Place holder from CAlfVisual |
|
355 // --------------------------------------------------------------------------- |
|
356 // |
|
357 EXPORT_C void CAlfAnchorLayout::UpdateChildrenLayout(TInt aTransitionTime ) |
|
358 { |
|
359 CAlfLayout::UpdateChildrenLayout( aTransitionTime ); |
|
360 } |
|
361 |
|
362 // --------------------------------------------------------------------------- |
|
363 // Place holder from CAlfVisual |
|
364 // --------------------------------------------------------------------------- |
|
365 // |
|
366 EXPORT_C CAlfVisual* CAlfAnchorLayout::FindTag(const TDesC8& aTag) |
|
367 { |
|
368 return CAlfLayout::FindTag( aTag ); |
|
369 } |
|
370 |
|
371 // --------------------------------------------------------------------------- |
|
372 // Place holder from CAlfVisual |
|
373 // --------------------------------------------------------------------------- |
|
374 // |
|
375 EXPORT_C void CAlfAnchorLayout::DoRemoveAndDestroyAllD() |
|
376 { |
|
377 CAlfLayout::DoRemoveAndDestroyAllD(); |
|
378 } |
|
379 |
|
380 // --------------------------------------------------------------------------- |
|
381 // Place holder from CAlfLayout |
|
382 // --------------------------------------------------------------------------- |
|
383 // |
|
384 EXPORT_C TAlfXYMetric CAlfAnchorLayout::BaseUnit() const |
|
385 { |
|
386 return CAlfLayout::BaseUnit(); |
|
387 } |
|
388 |
|
389 // --------------------------------------------------------------------------- |
|
390 // future proofing |
|
391 // --------------------------------------------------------------------------- |
|
392 // |
|
393 EXPORT_C void CAlfAnchorLayout::PropertyOwnerExtension(const TUid& aExtensionUid, TAny** aExtensionParams) |
|
394 { |
|
395 CAlfLayout::PropertyOwnerExtension(aExtensionUid,aExtensionParams); |
|
396 } |
|
397 |
|
398 |