1 /**************************************************************
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
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_cui.hxx"
26
27 #include <cstddef>
28 #include <swpossizetabpage.hxx>
29 #include <dialmgr.hxx>
30 #include <svx/dlgutil.hxx>
31 #include <svx/anchorid.hxx>
32 #include <svl/aeitem.hxx>
33 #include <svx/swframevalidation.hxx>
34 #include <tools/debug.hxx>
35 #include <cuires.hrc>
36 #include <swpossizetabpage.hrc>
37 #include <svx/htmlmode.hxx>
38 #include <svx/svdview.hxx>
39 #include <svx/svdpagv.hxx>
40 #include <svx/rectenum.hxx>
41 #include <com/sun/star/text/TextContentAnchorType.hpp>
42 #include <com/sun/star/text/HoriOrientation.hpp>
43 #include <com/sun/star/text/VertOrientation.hpp>
44 #include <com/sun/star/text/RelOrientation.hpp>
45 #include <svx/dialogs.hrc>
46
47 using namespace ::com::sun::star::text;
48 #define SwFPos SvxSwFramePosString
49
50 struct FrmMap
51 {
52 SvxSwFramePosString::StringId eStrId;
53 SvxSwFramePosString::StringId eMirrorStrId;
54 short nAlign;
55 sal_uLong nLBRelations;
56 };
57
58 struct RelationMap
59 {
60 SvxSwFramePosString::StringId eStrId;
61 SvxSwFramePosString::StringId eMirrorStrId;
62 sal_uLong nLBRelation;
63 short nRelation;
64 };
65 struct StringIdPair_Impl
66 {
67 SvxSwFramePosString::StringId eHori;
68 SvxSwFramePosString::StringId eVert;
69 };
70
71 #define LB_FRAME 0x00000001L // paragraph text area
72 #define LB_PRTAREA 0x00000002L // paragraph text area + indents
73 #define LB_VERT_FRAME 0x00000004L // vertical paragraph text area
74 #define LB_VERT_PRTAREA 0x00000008L // vertical paragraph text area + indents
75 #define LB_REL_FRM_LEFT 0x00000010L // left paragraph margin
76 #define LB_REL_FRM_RIGHT 0x00000020L // right paragraph margin
77
78 #define LB_REL_PG_LEFT 0x00000040L // left page margin
79 #define LB_REL_PG_RIGHT 0x00000080L // right page margin
80 #define LB_REL_PG_FRAME 0x00000100L // complete page
81 #define LB_REL_PG_PRTAREA 0x00000200L // text area of page
82
83 #define LB_FLY_REL_PG_LEFT 0x00000400L // left frame margin
84 #define LB_FLY_REL_PG_RIGHT 0x00000800L // right frame margin
85 #define LB_FLY_REL_PG_FRAME 0x00001000L // complete frame
86 #define LB_FLY_REL_PG_PRTAREA 0x00002000L // frame interior
87
88 #define LB_REL_BASE 0x00010000L // as char, relative to baseline
89 #define LB_REL_CHAR 0x00020000L // as char, relative to character
90 #define LB_REL_ROW 0x00040000L // as char, relative to line
91
92 // OD 10.11.2003 #i22305#
93 #define LB_FLY_VERT_FRAME 0x00100000L // vertical entire frame
94 #define LB_FLY_VERT_PRTAREA 0x00200000L // vertical frame text area
95
96 // OD 11.11.2003 #i22341#
97 #define LB_VERT_LINE 0x00400000L // vertical text line
98
99 static RelationMap __FAR_DATA aRelationMap[] =
100 {
101 {SwFPos::FRAME, SwFPos::FRAME, LB_FRAME, RelOrientation::FRAME},
102 {SwFPos::PRTAREA, SwFPos::PRTAREA, LB_PRTAREA, RelOrientation::PRINT_AREA},
103 {SwFPos::REL_PG_LEFT, SwFPos::MIR_REL_PG_LEFT, LB_REL_PG_LEFT, RelOrientation::PAGE_LEFT},
104 {SwFPos::REL_PG_RIGHT, SwFPos::MIR_REL_PG_RIGHT, LB_REL_PG_RIGHT, RelOrientation::PAGE_RIGHT},
105 {SwFPos::REL_FRM_LEFT, SwFPos::MIR_REL_FRM_LEFT, LB_REL_FRM_LEFT, RelOrientation::FRAME_LEFT},
106 {SwFPos::REL_FRM_RIGHT, SwFPos::MIR_REL_FRM_RIGHT, LB_REL_FRM_RIGHT, RelOrientation::FRAME_RIGHT},
107 {SwFPos::REL_PG_FRAME, SwFPos::REL_PG_FRAME, LB_REL_PG_FRAME, RelOrientation::PAGE_FRAME},
108 {SwFPos::REL_PG_PRTAREA,SwFPos::REL_PG_PRTAREA, LB_REL_PG_PRTAREA, RelOrientation::PAGE_PRINT_AREA},
109 {SwFPos::REL_CHAR, SwFPos::REL_CHAR, LB_REL_CHAR, RelOrientation::CHAR},
110
111 {SwFPos::FLY_REL_PG_LEFT, SwFPos::FLY_MIR_REL_PG_LEFT, LB_FLY_REL_PG_LEFT, RelOrientation::PAGE_LEFT},
112 {SwFPos::FLY_REL_PG_RIGHT, SwFPos::FLY_MIR_REL_PG_RIGHT, LB_FLY_REL_PG_RIGHT, RelOrientation::PAGE_RIGHT},
113 {SwFPos::FLY_REL_PG_FRAME, SwFPos::FLY_REL_PG_FRAME, LB_FLY_REL_PG_FRAME, RelOrientation::PAGE_FRAME},
114 {SwFPos::FLY_REL_PG_PRTAREA, SwFPos::FLY_REL_PG_PRTAREA, LB_FLY_REL_PG_PRTAREA, RelOrientation::PAGE_PRINT_AREA},
115
116 {SwFPos::REL_BORDER, SwFPos::REL_BORDER, LB_VERT_FRAME, RelOrientation::FRAME},
117 {SwFPos::REL_PRTAREA, SwFPos::REL_PRTAREA, LB_VERT_PRTAREA, RelOrientation::PRINT_AREA},
118
119 // OD 10.11.2003 #i22305#
120 {SwFPos::FLY_REL_PG_FRAME, SwFPos::FLY_REL_PG_FRAME, LB_FLY_VERT_FRAME, RelOrientation::FRAME},
121 {SwFPos::FLY_REL_PG_PRTAREA, SwFPos::FLY_REL_PG_PRTAREA, LB_FLY_VERT_PRTAREA, RelOrientation::PRINT_AREA},
122
123 // OD 11.11.2003 #i22341#
124 {SwFPos::REL_LINE, SwFPos::REL_LINE, LB_VERT_LINE, RelOrientation::TEXT_LINE}
125 };
126
127 static RelationMap __FAR_DATA aAsCharRelationMap[] =
128 {
129 {SwFPos::REL_BASE, SwFPos::REL_BASE, LB_REL_BASE, RelOrientation::FRAME},
130 {SwFPos::REL_CHAR, SwFPos::REL_CHAR, LB_REL_CHAR, RelOrientation::FRAME},
131 {SwFPos::REL_ROW, SwFPos::REL_ROW, LB_REL_ROW, RelOrientation::FRAME}
132 };
133
134 /*--------------------------------------------------------------------
135 Anchored at page
136 --------------------------------------------------------------------*/
137
138 #define HORI_PAGE_REL (LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_PG_LEFT| \
139 LB_REL_PG_RIGHT)
140
141 static FrmMap __FAR_DATA aHPageMap[] =
142 {
143 {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, HORI_PAGE_REL},
144 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, HORI_PAGE_REL},
145 {SwFPos::CENTER_HORI,SwFPos::CENTER_HORI, HoriOrientation::CENTER, HORI_PAGE_REL},
146 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, HORI_PAGE_REL}
147 };
148
149 static FrmMap __FAR_DATA aHPageHtmlMap[] =
150 {
151 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, LB_REL_PG_FRAME}
152 };
153
154 #define VERT_PAGE_REL (LB_REL_PG_FRAME|LB_REL_PG_PRTAREA)
155
156 static FrmMap __FAR_DATA aVPageMap[] =
157 {
158 {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, VERT_PAGE_REL},
159 {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::BOTTOM, VERT_PAGE_REL},
160 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, VERT_PAGE_REL},
161 {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, VERT_PAGE_REL}
162 };
163
164 static FrmMap __FAR_DATA aVPageHtmlMap[] =
165 {
166 {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, LB_REL_PG_FRAME}
167 };
168
169 /*--------------------------------------------------------------------
170 Anchored at frame
171 --------------------------------------------------------------------*/
172
173 #define HORI_FRAME_REL (LB_FLY_REL_PG_FRAME|LB_FLY_REL_PG_PRTAREA| \
174 LB_FLY_REL_PG_LEFT|LB_FLY_REL_PG_RIGHT)
175
176 static FrmMap __FAR_DATA aHFrameMap[] =
177 {
178 {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, HORI_FRAME_REL},
179 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, HORI_FRAME_REL},
180 {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, HoriOrientation::CENTER, HORI_FRAME_REL},
181 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, HORI_FRAME_REL}
182 };
183
184 static FrmMap __FAR_DATA aHFlyHtmlMap[] =
185 {
186 {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, LB_FLY_REL_PG_FRAME},
187 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, LB_FLY_REL_PG_FRAME}
188 };
189
190 // OD 19.09.2003 #i18732# - own vertical alignment map for to frame anchored objects
191 // OD 10.11.2003 #i22305#
192 #define VERT_FRAME_REL (LB_VERT_FRAME|LB_FLY_VERT_PRTAREA)
193
194 static FrmMap __FAR_DATA aVFrameMap[] =
195 {
196 {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, VERT_FRAME_REL},
197 {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::BOTTOM, VERT_FRAME_REL},
198 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, VERT_FRAME_REL},
199 {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, VERT_FRAME_REL}
200 };
201
202 static FrmMap __FAR_DATA aVFlyHtmlMap[] =
203 {
204 {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, LB_FLY_VERT_FRAME},
205 {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, LB_FLY_VERT_FRAME}
206 };
207
208 static FrmMap __FAR_DATA aVMultiSelectionMap[] =
209 {
210 {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, 0}
211 };
212 static FrmMap __FAR_DATA aHMultiSelectionMap[] =
213 {
214 {SwFPos::FROMLEFT, SwFPos::FROMLEFT, HoriOrientation::NONE, 0}
215 };
216
217 /*--------------------------------------------------------------------
218 Anchored at paragraph
219 --------------------------------------------------------------------*/
220
221 #define HORI_PARA_REL (LB_FRAME|LB_PRTAREA|LB_REL_PG_LEFT|LB_REL_PG_RIGHT| \
222 LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_FRM_LEFT| \
223 LB_REL_FRM_RIGHT)
224
225 static FrmMap __FAR_DATA aHParaMap[] =
226 {
227 {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, HORI_PARA_REL},
228 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, HORI_PARA_REL},
229 {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, HoriOrientation::CENTER, HORI_PARA_REL},
230 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, HORI_PARA_REL}
231 };
232
233 #define HTML_HORI_PARA_REL (LB_FRAME|LB_PRTAREA)
234
235 static FrmMap __FAR_DATA aHParaHtmlMap[] =
236 {
237 {SwFPos::LEFT, SwFPos::LEFT, HoriOrientation::LEFT, HTML_HORI_PARA_REL},
238 {SwFPos::RIGHT, SwFPos::RIGHT, HoriOrientation::RIGHT, HTML_HORI_PARA_REL}
239 };
240
241 static FrmMap __FAR_DATA aHParaHtmlAbsMap[] =
242 {
243 {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, HTML_HORI_PARA_REL},
244 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, HTML_HORI_PARA_REL}
245 };
246
247
248 #define VERT_PARA_REL (LB_VERT_FRAME|LB_VERT_PRTAREA| \
249 LB_REL_PG_FRAME|LB_REL_PG_PRTAREA)
250
251 static FrmMap __FAR_DATA aVParaMap[] =
252 {
253 {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, VERT_PARA_REL},
254 {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::BOTTOM, VERT_PARA_REL},
255 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, VERT_PARA_REL},
256 {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, VERT_PARA_REL}
257 };
258
259 static FrmMap __FAR_DATA aVParaHtmlMap[] =
260 {
261 {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, LB_VERT_PRTAREA}
262 };
263
264 /*--------------------------------------------------------------------
265 Anchored at character
266 --------------------------------------------------------------------*/
267
268 #define HORI_CHAR_REL (LB_FRAME|LB_PRTAREA|LB_REL_PG_LEFT|LB_REL_PG_RIGHT| \
269 LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_FRM_LEFT| \
270 LB_REL_FRM_RIGHT|LB_REL_CHAR)
271
272 static FrmMap __FAR_DATA aHCharMap[] =
273 {
274 {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, HORI_CHAR_REL},
275 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, HORI_CHAR_REL},
276 {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, HoriOrientation::CENTER, HORI_CHAR_REL},
277 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, HORI_CHAR_REL}
278 };
279
280 #define HTML_HORI_CHAR_REL (LB_FRAME|LB_PRTAREA|LB_REL_CHAR)
281
282 static FrmMap __FAR_DATA aHCharHtmlMap[] =
283 {
284 {SwFPos::LEFT, SwFPos::LEFT, HoriOrientation::LEFT, HTML_HORI_CHAR_REL},
285 {SwFPos::RIGHT, SwFPos::RIGHT, HoriOrientation::RIGHT, HTML_HORI_CHAR_REL}
286 };
287
288 static FrmMap __FAR_DATA aHCharHtmlAbsMap[] =
289 {
290 {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, LB_PRTAREA|LB_REL_CHAR},
291 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, LB_PRTAREA},
292 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, LB_REL_PG_FRAME}
293 };
294
295 // OD 19.09.2003 #i18732# - allow vertical alignment at page areas
296 // OD 12.11.2003 #i22341# - handle <LB_REL_CHAR> on its own
297 #define VERT_CHAR_REL (LB_VERT_FRAME|LB_VERT_PRTAREA| \
298 LB_REL_PG_FRAME|LB_REL_PG_PRTAREA)
299
300 static FrmMap __FAR_DATA aVCharMap[] =
301 {
302 // OD 11.11.2003 #i22341#
303 // introduce mappings for new vertical alignment at top of line <LB_VERT_LINE>
304 // and correct mapping for vertical alignment at character for position <FROM_BOTTOM>
305 // Note: Because of these adjustments the map becomes ambigous in its values
306 // <eStrId>/<eMirrorStrId> and <nAlign>. These ambiguities are considered
307 // in the methods <SwFrmPage::FillRelLB(..)>, <SwFrmPage::GetAlignment(..)>
308 // and <SwFrmPage::FillPosLB(..)>
309 {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, VERT_CHAR_REL|LB_REL_CHAR},
310 {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::BOTTOM, VERT_CHAR_REL|LB_REL_CHAR},
311 {SwFPos::BELOW, SwFPos::BELOW, VertOrientation::CHAR_BOTTOM, LB_REL_CHAR},
312 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, VERT_CHAR_REL|LB_REL_CHAR},
313 {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, VERT_CHAR_REL},
314 {SwFPos::FROMBOTTOM, SwFPos::FROMBOTTOM, VertOrientation::NONE, LB_REL_CHAR|LB_VERT_LINE},
315 {SwFPos::TOP, SwFPos::TOP, VertOrientation::LINE_TOP, LB_VERT_LINE},
316 {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::LINE_BOTTOM, LB_VERT_LINE},
317 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::LINE_CENTER, LB_VERT_LINE}
318 };
319
320
321 static FrmMap __FAR_DATA aVCharHtmlMap[] =
322 {
323 {SwFPos::BELOW, SwFPos::BELOW, VertOrientation::CHAR_BOTTOM, LB_REL_CHAR}
324 };
325
326 static FrmMap __FAR_DATA aVCharHtmlAbsMap[] =
327 {
328 {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, LB_REL_CHAR},
329 {SwFPos::BELOW, SwFPos::BELOW, VertOrientation::CHAR_BOTTOM, LB_REL_CHAR}
330 };
331 /*--------------------------------------------------------------------
332 anchored as character
333 --------------------------------------------------------------------*/
334
335 static FrmMap __FAR_DATA aVAsCharMap[] =
336 {
337 {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, LB_REL_BASE},
338 {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::BOTTOM, LB_REL_BASE},
339 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, LB_REL_BASE},
340
341 {SwFPos::TOP, SwFPos::TOP, VertOrientation::CHAR_TOP, LB_REL_CHAR},
342 {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::CHAR_BOTTOM, LB_REL_CHAR},
343 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CHAR_CENTER, LB_REL_CHAR},
344
345 {SwFPos::TOP, SwFPos::TOP, VertOrientation::LINE_TOP, LB_REL_ROW},
346 {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::LINE_BOTTOM, LB_REL_ROW},
347 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::LINE_CENTER, LB_REL_ROW},
348
349 {SwFPos::FROMBOTTOM, SwFPos::FROMBOTTOM, VertOrientation::NONE, LB_REL_BASE}
350 };
351
352 static FrmMap __FAR_DATA aVAsCharHtmlMap[] =
353 {
354 {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, LB_REL_BASE},
355 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, LB_REL_BASE},
356
357 {SwFPos::TOP, SwFPos::TOP, VertOrientation::CHAR_TOP, LB_REL_CHAR},
358
359 {SwFPos::TOP, SwFPos::TOP, VertOrientation::LINE_TOP, LB_REL_ROW},
360 {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::LINE_BOTTOM, LB_REL_ROW},
361 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::LINE_CENTER, LB_REL_ROW}
362 };
363 /*-- 05.03.2004 15:52:56---------------------------------------------------
364
365 -----------------------------------------------------------------------*/
lcl_GetFrmMapCount(const FrmMap * pMap)366 std::size_t lcl_GetFrmMapCount(const FrmMap* pMap)
367 {
368 if ( pMap )
369 {
370 std::size_t aSizeOf = sizeof(FrmMap);
371 if( pMap == aVParaHtmlMap)
372 return sizeof(aVParaHtmlMap) / aSizeOf;
373 if( pMap == aVAsCharHtmlMap)
374 return sizeof(aVAsCharHtmlMap) / aSizeOf;
375 if( pMap == aHParaHtmlMap)
376 return sizeof(aHParaHtmlMap) / aSizeOf;
377 if( pMap == aHParaHtmlAbsMap)
378 return sizeof(aHParaHtmlAbsMap) / aSizeOf;
379 if ( pMap == aVPageMap )
380 return sizeof(aVPageMap) / aSizeOf;
381 if ( pMap == aVPageHtmlMap )
382 return sizeof(aVPageHtmlMap) / aSizeOf;
383 if ( pMap == aVAsCharMap )
384 return sizeof(aVAsCharMap) / aSizeOf;
385 if ( pMap == aVParaMap )
386 return sizeof(aVParaMap) / aSizeOf;
387 if ( pMap == aHParaMap )
388 return sizeof(aHParaMap) / aSizeOf;
389 if ( pMap == aHFrameMap )
390 return sizeof(aHFrameMap) / aSizeOf;
391 // OD 19.09.2003 #i18732# - own vertical alignment map for to frame anchored objects
392 if ( pMap == aVFrameMap )
393 return sizeof(aVFrameMap) / aSizeOf;
394 if ( pMap == aHCharMap )
395 return sizeof(aHCharMap) / aSizeOf;
396 if ( pMap == aHCharHtmlMap )
397 return sizeof(aHCharHtmlMap) / aSizeOf;
398 if ( pMap == aHCharHtmlAbsMap )
399 return sizeof(aHCharHtmlAbsMap) / aSizeOf;
400 if ( pMap == aVCharMap )
401 return sizeof(aVCharMap) / aSizeOf;
402 if ( pMap == aVCharHtmlMap )
403 return sizeof(aVCharHtmlMap) / aSizeOf;
404 if ( pMap == aVCharHtmlAbsMap )
405 return sizeof(aVCharHtmlAbsMap) / aSizeOf;
406 if ( pMap == aHPageHtmlMap )
407 return sizeof(aHPageHtmlMap) / aSizeOf;
408 if ( pMap == aHFlyHtmlMap )
409 return sizeof(aHFlyHtmlMap) / aSizeOf;
410 if ( pMap == aVFlyHtmlMap )
411 return sizeof(aVFlyHtmlMap) / aSizeOf;
412 if( pMap == aVMultiSelectionMap)
413 return sizeof(aVMultiSelectionMap) / aSizeOf;
414 if( pMap == aHMultiSelectionMap)
415 return sizeof(aHMultiSelectionMap) / aSizeOf;
416 return sizeof(aHPageMap) / aSizeOf;
417 }
418 return 0;
419 }
420 /*-- 03.03.2004 12:21:33---------------------------------------------------
421
422 -----------------------------------------------------------------------*/
lcl_ChangeResIdToVerticalOrRTL(SvxSwFramePosString::StringId eStringId,sal_Bool bVertical,sal_Bool bRTL)423 SvxSwFramePosString::StringId lcl_ChangeResIdToVerticalOrRTL(
424 SvxSwFramePosString::StringId eStringId, sal_Bool bVertical, sal_Bool bRTL)
425 {
426 //special handling of STR_FROMLEFT
427 if(SwFPos::FROMLEFT == eStringId)
428 {
429 eStringId = bVertical ?
430 bRTL ? SwFPos::FROMBOTTOM : SwFPos::FROMTOP :
431 bRTL ? SwFPos::FROMRIGHT : SwFPos::FROMLEFT;
432 return eStringId;
433 }
434 if(bVertical)
435 {
436 //exchange horizontal strings with vertical strings and vice versa
437 static const StringIdPair_Impl aHoriIds[] =
438 {
439 {SwFPos::LEFT, SwFPos::TOP},
440 {SwFPos::RIGHT, SwFPos::BOTTOM},
441 {SwFPos::CENTER_HORI, SwFPos::CENTER_VERT},
442 {SwFPos::FROMTOP, SwFPos::FROMRIGHT},
443 {SwFPos::REL_PG_LEFT, SwFPos::REL_PG_TOP},
444 {SwFPos::REL_PG_RIGHT, SwFPos::REL_PG_BOTTOM} ,
445 {SwFPos::REL_FRM_LEFT, SwFPos::REL_FRM_TOP},
446 {SwFPos::REL_FRM_RIGHT, SwFPos::REL_FRM_BOTTOM}
447 };
448 static const StringIdPair_Impl aVertIds[] =
449 {
450 {SwFPos::TOP, SwFPos::RIGHT},
451 {SwFPos::BOTTOM, SwFPos::LEFT },
452 {SwFPos::CENTER_VERT, SwFPos::CENTER_HORI},
453 {SwFPos::FROMTOP, SwFPos::FROMRIGHT },
454 {SwFPos::REL_PG_TOP, SwFPos::REL_PG_LEFT },
455 {SwFPos::REL_PG_BOTTOM, SwFPos::REL_PG_RIGHT } ,
456 {SwFPos::REL_FRM_TOP, SwFPos::REL_FRM_LEFT },
457 {SwFPos::REL_FRM_BOTTOM, SwFPos::REL_FRM_RIGHT }
458 };
459 sal_uInt16 nIndex;
460 for(nIndex = 0; nIndex < sizeof(aHoriIds) / sizeof(StringIdPair_Impl); ++nIndex)
461 {
462 if(aHoriIds[nIndex].eHori == eStringId)
463 {
464 eStringId = aHoriIds[nIndex].eVert;
465 return eStringId;
466 }
467 }
468 nIndex = 0;
469 for(nIndex = 0; nIndex < sizeof(aVertIds) / sizeof(StringIdPair_Impl); ++nIndex)
470 {
471 if(aVertIds[nIndex].eHori == eStringId)
472 {
473 eStringId = aVertIds[nIndex].eVert;
474 break;
475 }
476 }
477 }
478 return eStringId;
479 }
480 // OD 12.11.2003 #i22341# - helper method in order to determine all possible
481 // listbox relations in a relation map for a given relation
lcl_GetLBRelationsForRelations(const sal_uInt16 _nRel)482 sal_uLong lcl_GetLBRelationsForRelations( const sal_uInt16 _nRel )
483 {
484 sal_uLong nLBRelations = 0L;
485
486 sal_uInt16 nRelMapSize = sizeof(aRelationMap) / sizeof(RelationMap);
487 for ( sal_uInt16 nRelMapPos = 0; nRelMapPos < nRelMapSize; ++nRelMapPos )
488 {
489 if ( aRelationMap[nRelMapPos].nRelation == _nRel )
490 {
491 nLBRelations |= aRelationMap[nRelMapPos].nLBRelation;
492 }
493 }
494
495 return nLBRelations;
496 }
497
498 // OD 14.11.2003 #i22341# - helper method on order to determine all possible
499 // listbox relations in a relation map for a given string ID
lcl_GetLBRelationsForStrID(const FrmMap * _pMap,const SvxSwFramePosString::StringId _eStrId,const bool _bUseMirrorStr)500 sal_uLong lcl_GetLBRelationsForStrID( const FrmMap* _pMap,
501 const SvxSwFramePosString::StringId _eStrId,
502 const bool _bUseMirrorStr )
503 {
504 sal_uLong nLBRelations = 0L;
505
506 std::size_t nRelMapSize = lcl_GetFrmMapCount( _pMap );
507 for ( std::size_t nRelMapPos = 0; nRelMapPos < nRelMapSize; ++nRelMapPos )
508 {
509 if ( ( !_bUseMirrorStr && _pMap[nRelMapPos].eStrId == _eStrId ) ||
510 ( _bUseMirrorStr && _pMap[nRelMapPos].eMirrorStrId == _eStrId ) )
511 {
512 nLBRelations |= _pMap[nRelMapPos].nLBRelations;
513 }
514 }
515
516 return nLBRelations;
517 }
518 /*-- 03.03.2004 12:21:33---------------------------------------------------
519
520 -----------------------------------------------------------------------*/
SvxSwPosSizeTabPage(Window * pParent,const SfxItemSet & rInAttrs)521 SvxSwPosSizeTabPage::SvxSwPosSizeTabPage( Window* pParent, const SfxItemSet& rInAttrs ) :
522 SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_SWPOSSIZE ), rInAttrs ),
523 #ifdef _MSC_VER
524 #pragma warning (disable : 4355)
525 #endif
526 m_aSizeFL( this, CUI_RES( FL_SIZE ) ),
527 m_aWidthFT( this, CUI_RES( FT_WIDTH ) ),
528 m_aWidthMF( this, CUI_RES( MF_WIDTH ) ),
529 m_aHeightFT( this, CUI_RES( FT_HEIGHT ) ),
530 m_aHeightMF( this, CUI_RES( MF_HEIGHT ) ),
531 m_aKeepRatioCB(this,CUI_RES( CB_KEEPRATIO) ),
532 m_aSeparatorFL(this,CUI_RES( FL_SEPARATOR) ),
533
534 m_aAnchorFL( this, CUI_RES( FL_ANCHOR ) ),
535 m_aToPageRB( this, CUI_RES( RB_TOPAGE ) ),
536 m_aToParaRB( this, CUI_RES( RB_TOPARA ) ),
537 m_aToCharRB( this, CUI_RES( RB_TOCHAR ) ),
538 m_aAsCharRB( this, CUI_RES( RB_ASCHAR ) ),
539 m_aToFrameRB( this, CUI_RES( RB_TOFRAME) ),
540
541 m_aProtectionFL( this, CUI_RES( FL_PROTECTION ) ),
542 m_aPositionCB( this, CUI_RES( CB_POSITION ) ),
543 m_aSizeCB( this, CUI_RES( CB_SIZE ) ),
544
545 m_aPositionFL( this, CUI_RES( FL_POSITION ) ),
546 m_aHoriFT( this, CUI_RES( FT_HORI ) ),
547 m_aHoriLB( this, CUI_RES( LB_HORI ) ),
548 m_aHoriByFT( this, CUI_RES( FT_HORIBY ) ),
549 m_aHoriByMF( this, CUI_RES( MF_HORIBY ) ),
550 m_aHoriToFT( this, CUI_RES( FT_HORITO ) ),
551 m_aHoriToLB( this, CUI_RES( LB_HORITO ) ),
552
553 m_aHoriMirrorCB( this, CUI_RES( CB_HORIMIRROR ) ),
554
555 m_aVertFT( this, CUI_RES( FT_VERT ) ),
556 m_aVertLB( this, CUI_RES( LB_VERT ) ),
557 m_aVertByFT( this, CUI_RES( FT_VERTBY ) ),
558 m_aVertByMF( this, CUI_RES( MF_VERTBY ) ),
559 m_aVertToFT( this, CUI_RES( FT_VERTTO ) ),
560 m_aVertToLB( this, CUI_RES( LB_VERTTO ) ),
561
562 m_aFollowCB( this, CUI_RES( CB_FOLLOW ) ),
563 m_aExampleWN( this, CUI_RES( WN_EXAMPLE ) ),
564 #ifdef _MSC_VER
565 #pragma warning (default : 4355)
566 #endif
567 m_pVMap( 0 ),
568 m_pHMap( 0 ),
569 m_pSdrView( 0 ),
570 m_nOldH(HoriOrientation::CENTER),
571 m_nOldHRel(RelOrientation::FRAME),
572 m_nOldV(VertOrientation::TOP),
573 m_nOldVRel(RelOrientation::PRINT_AREA),
574 m_fWidthHeightRatio(1.0),
575 m_nHtmlMode(0),
576 m_bHtmlMode(false),
577 m_bAtHoriPosModified(false),
578 m_bAtVertPosModified(false),
579 m_bIsVerticalFrame(false),
580 m_bPositioningDisabled(false),
581 m_bIsMultiSelection(false),
582 m_bIsInRightToLeft(false)
583 {
584 FreeResource();
585 FieldUnit eDlgUnit = GetModuleFieldUnit( rInAttrs );
586 SetFieldUnit( m_aHoriByMF, eDlgUnit, sal_True );
587 SetFieldUnit( m_aVertByMF, eDlgUnit, sal_True );
588 SetFieldUnit( m_aWidthMF , eDlgUnit, sal_True );
589 SetFieldUnit( m_aHeightMF, eDlgUnit, sal_True );
590
591 SetExchangeSupport();
592
593 Link aLk = LINK(this, SvxSwPosSizeTabPage, RangeModifyHdl);
594 m_aWidthMF. SetLoseFocusHdl( aLk );
595 m_aHeightMF. SetLoseFocusHdl( aLk );
596 m_aHoriByMF.SetLoseFocusHdl( aLk );
597 m_aVertByMF.SetLoseFocusHdl( aLk );
598 m_aFollowCB.SetClickHdl( aLk );
599
600 aLk = LINK(this, SvxSwPosSizeTabPage, ModifyHdl);
601 m_aWidthMF. SetModifyHdl( aLk );
602 m_aHeightMF. SetModifyHdl( aLk );
603 m_aHoriByMF.SetModifyHdl( aLk );
604 m_aVertByMF.SetModifyHdl( aLk );
605
606 aLk = LINK(this, SvxSwPosSizeTabPage, AnchorTypeHdl);
607 m_aToPageRB.SetClickHdl( aLk );
608 m_aToParaRB.SetClickHdl( aLk );
609 m_aToCharRB.SetClickHdl( aLk );
610 m_aAsCharRB.SetClickHdl( aLk );
611 m_aToFrameRB.SetClickHdl( aLk );
612
613 m_aHoriLB.SetSelectHdl(LINK(this, SvxSwPosSizeTabPage, PosHdl));
614 m_aVertLB. SetSelectHdl(LINK(this, SvxSwPosSizeTabPage, PosHdl));
615
616 m_aHoriToLB.SetSelectHdl(LINK(this, SvxSwPosSizeTabPage, RelHdl));
617 m_aVertToLB.SetSelectHdl(LINK(this, SvxSwPosSizeTabPage, RelHdl));
618
619 m_aHoriMirrorCB.SetClickHdl(LINK(this, SvxSwPosSizeTabPage, MirrorHdl));
620 m_aPositionCB.SetClickHdl(LINK(this, SvxSwPosSizeTabPage, ProtectHdl));
621 }
622 /*-- 03.03.2004 12:21:33---------------------------------------------------
623
624 -----------------------------------------------------------------------*/
~SvxSwPosSizeTabPage()625 SvxSwPosSizeTabPage::~SvxSwPosSizeTabPage()
626 {
627 }
628 /*-- 03.03.2004 12:21:33---------------------------------------------------
629
630 -----------------------------------------------------------------------*/
Create(Window * pParent,const SfxItemSet & rSet)631 SfxTabPage* SvxSwPosSizeTabPage::Create( Window* pParent, const SfxItemSet& rSet)
632 {
633 return new SvxSwPosSizeTabPage(pParent, rSet);
634 }
635 /*-- 05.03.2004 17:27:42---------------------------------------------------
636
637 -----------------------------------------------------------------------*/
GetRanges()638 sal_uInt16* SvxSwPosSizeTabPage::GetRanges()
639 {
640 static sal_uInt16 pSwPosRanges[] =
641 {
642 SID_ATTR_TRANSFORM_POS_X,
643 SID_ATTR_TRANSFORM_POS_Y,
644 SID_ATTR_TRANSFORM_PROTECT_POS,
645 SID_ATTR_TRANSFORM_PROTECT_POS,
646 SID_ATTR_TRANSFORM_INTERN,
647 SID_ATTR_TRANSFORM_INTERN,
648 SID_ATTR_TRANSFORM_ANCHOR,
649 SID_ATTR_TRANSFORM_VERT_ORIENT,
650 SID_ATTR_TRANSFORM_WIDTH,
651 SID_ATTR_TRANSFORM_SIZE_POINT,
652 SID_ATTR_TRANSFORM_PROTECT_POS,
653 SID_ATTR_TRANSFORM_INTERN,
654 SID_ATTR_TRANSFORM_AUTOWIDTH,
655 SID_ATTR_TRANSFORM_VERT_ORIENT,
656 SID_HTML_MODE,
657 SID_HTML_MODE,
658 SID_SW_FOLLOW_TEXT_FLOW,
659 SID_SW_FOLLOW_TEXT_FLOW,
660 SID_ATTR_TRANSFORM_HORI_POSITION,
661 SID_ATTR_TRANSFORM_VERT_POSITION,
662 0
663 };
664 return pSwPosRanges;
665 }
666 /*-- 03.03.2004 12:21:34---------------------------------------------------
667
668 -----------------------------------------------------------------------*/
FillItemSet(SfxItemSet & rSet)669 sal_Bool SvxSwPosSizeTabPage::FillItemSet( SfxItemSet& rSet)
670 {
671 bool bAnchorChanged = false;
672 short nAnchor = GetAnchorType(&bAnchorChanged);
673 sal_Bool bModified = sal_False;
674 if(bAnchorChanged)
675 {
676 rSet.Put(SfxInt16Item(SID_ATTR_TRANSFORM_ANCHOR, nAnchor));
677 bModified |= sal_True;
678 }
679 if ( m_aPositionCB.GetState() != m_aPositionCB.GetSavedValue() )
680 {
681 if( m_aPositionCB.GetState() == STATE_DONTKNOW )
682 rSet.InvalidateItem( SID_ATTR_TRANSFORM_PROTECT_POS );
683 else
684 rSet.Put(
685 SfxBoolItem( GetWhich( SID_ATTR_TRANSFORM_PROTECT_POS ),
686 m_aPositionCB.GetState() == STATE_CHECK ? sal_True : sal_False ) );
687 bModified |= sal_True;
688 }
689
690 if ( m_aSizeCB.GetState() != m_aSizeCB.GetSavedValue() )
691 {
692 if ( m_aSizeCB.GetState() == STATE_DONTKNOW )
693 rSet.InvalidateItem( SID_ATTR_TRANSFORM_PROTECT_SIZE );
694 else
695 rSet.Put(
696 SfxBoolItem( GetWhich( SID_ATTR_TRANSFORM_PROTECT_SIZE ),
697 m_aSizeCB.GetState() == STATE_CHECK ? sal_True : sal_False ) );
698 bModified |= sal_True;
699 }
700
701 const SfxItemSet& rOldSet = GetItemSet();
702
703 if(!m_bPositioningDisabled)
704 {
705 //on multiple selections the positioning is set via SdrView
706 if(m_bIsMultiSelection)
707 {
708 if( m_aHoriByMF.IsValueModified() || m_aVertByMF.IsValueModified() )
709 {
710 long nHoriByPos =
711 static_cast<long>(m_aHoriByMF.Denormalize(m_aHoriByMF.GetValue(FUNIT_TWIP)));
712 long nVertByPos =
713 static_cast<long>(m_aVertByMF.Denormalize(m_aVertByMF.GetValue(FUNIT_TWIP)));
714
715 // Altes Rechteck mit CoreUnit
716 m_aRect = m_pSdrView->GetAllMarkedRect();
717 m_pSdrView->GetSdrPageView()->LogicToPagePos( m_aRect );
718
719 nHoriByPos += m_aAnchorPos.X();
720 nVertByPos += m_aAnchorPos.Y();
721
722 rSet.Put( SfxInt32Item( GetWhich( SID_ATTR_TRANSFORM_POS_X ), nHoriByPos ) );
723 rSet.Put( SfxInt32Item( GetWhich( SID_ATTR_TRANSFORM_POS_Y ), nVertByPos ) );
724
725 bModified |= sal_True;
726 }
727 }
728 else
729 {
730 if ( m_pHMap )
731 {
732 const SfxInt16Item& rHoriOrient =
733 static_cast<const SfxInt16Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_HORI_ORIENT));
734 const SfxInt16Item& rHoriRelation =
735 static_cast<const SfxInt16Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_HORI_RELATION));
736 const SfxInt32Item& rHoriPosition =
737 static_cast<const SfxInt32Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_HORI_POSITION)) ;
738
739 sal_uInt16 nMapPos = GetMapPos(m_pHMap, m_aHoriLB);
740 short nAlign = GetAlignment(m_pHMap, nMapPos, m_aHoriLB, m_aHoriToLB);
741 short nRel = GetRelation(m_pHMap, m_aHoriToLB);
742 const long nHoriByPos =
743 static_cast<long>(m_aHoriByMF.Denormalize(m_aHoriByMF.GetValue(FUNIT_TWIP)));
744 if (
745 nAlign != rHoriOrient.GetValue() ||
746 nRel != rHoriRelation.GetValue() ||
747 (m_aHoriByMF.IsEnabled() && nHoriByPos != rHoriPosition.GetValue())
748 )
749 {
750 rSet.Put(SfxInt16Item(SID_ATTR_TRANSFORM_HORI_ORIENT, nAlign));
751 rSet.Put(SfxInt16Item(SID_ATTR_TRANSFORM_HORI_RELATION, nRel));
752 if(m_aHoriByMF.IsEnabled())
753 rSet.Put(SfxInt32Item(SID_ATTR_TRANSFORM_HORI_POSITION, nHoriByPos));
754 bModified |= sal_True;
755 }
756 }
757 if(m_aHoriMirrorCB.IsEnabled() && m_aHoriMirrorCB.IsChecked() != m_aHoriMirrorCB.GetSavedValue())
758 bModified |= 0 != rSet.Put(SfxBoolItem(SID_ATTR_TRANSFORM_HORI_MIRROR, m_aHoriMirrorCB.IsChecked()));
759
760 if ( m_pVMap )
761 {
762 const SfxInt16Item& rVertOrient =
763 static_cast<const SfxInt16Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_VERT_ORIENT));
764 const SfxInt16Item& rVertRelation =
765 static_cast<const SfxInt16Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_VERT_RELATION));
766 const SfxInt32Item& rVertPosition =
767 static_cast<const SfxInt32Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_VERT_POSITION));
768
769 sal_uInt16 nMapPos = GetMapPos(m_pVMap, m_aVertLB);
770 short nAlign = GetAlignment(m_pVMap, nMapPos, m_aVertLB, m_aVertToLB);
771 short nRel = GetRelation(m_pVMap, m_aVertToLB);
772 // --> OD 2004-10-21 #i34055# - convert vertical position for
773 // as-character anchored objects
774 long nVertByPos =
775 static_cast<long>(m_aVertByMF.Denormalize(m_aVertByMF.GetValue(FUNIT_TWIP)));
776 if ( GetAnchorType() == TextContentAnchorType_AS_CHARACTER )
777 {
778 nVertByPos *= -1;
779 }
780 // <--
781 if ( nAlign != rVertOrient.GetValue() ||
782 nRel != rVertRelation.GetValue() ||
783 ( m_aVertByMF.IsEnabled() &&
784 nVertByPos != rVertPosition.GetValue() ) )
785 {
786 rSet.Put(SfxInt16Item(SID_ATTR_TRANSFORM_VERT_ORIENT, nAlign));
787 rSet.Put(SfxInt16Item(SID_ATTR_TRANSFORM_VERT_RELATION, nRel));
788 if(m_aVertByMF.IsEnabled())
789 rSet.Put(SfxInt32Item(SID_ATTR_TRANSFORM_VERT_POSITION, nVertByPos));
790 bModified |= sal_True;
791 }
792 }
793
794 // OD 19.09.2003 #i18732#
795 if(m_aFollowCB.IsChecked() != m_aFollowCB.GetSavedValue())
796 {
797 //Writer internal type - based on SfxBoolItem
798 const SfxPoolItem* pItem = GetItem( rOldSet, SID_SW_FOLLOW_TEXT_FLOW);
799 if(pItem)
800 {
801 SfxBoolItem* pFollow = static_cast<SfxBoolItem*>(pItem->Clone());
802 pFollow->SetValue(m_aFollowCB.IsChecked());
803 bModified |= 0 != rSet.Put(*pFollow);
804 delete pFollow;
805 }
806 }
807 }
808 }
809 if ( m_aWidthMF.IsValueModified() || m_aHeightMF.IsValueModified() )
810 {
811 sal_uInt32 nWidth = static_cast<sal_uInt32>(m_aWidthMF.Denormalize(m_aWidthMF.GetValue(FUNIT_TWIP)));
812 sal_uInt32 nHeight = static_cast<sal_uInt32>(m_aHeightMF.Denormalize(m_aHeightMF.GetValue(FUNIT_TWIP)));
813 rSet.Put( SfxUInt32Item( GetWhich( SID_ATTR_TRANSFORM_WIDTH ),
814 (sal_uInt32) nWidth ) );
815 rSet.Put( SfxUInt32Item( GetWhich( SID_ATTR_TRANSFORM_HEIGHT ),
816 (sal_uInt32) nHeight ) );
817 //this item is required by SdrEditView::SetGeoAttrToMarked()
818 rSet.Put( SfxAllEnumItem( GetWhich( SID_ATTR_TRANSFORM_SIZE_POINT ), RP_LT ) );
819
820 bModified |= sal_True;
821 }
822
823 return bModified;
824 }
825 /*-- 03.03.2004 12:21:34---------------------------------------------------
826
827 -----------------------------------------------------------------------*/
Reset(const SfxItemSet & rSet)828 void SvxSwPosSizeTabPage::Reset( const SfxItemSet& rSet)
829 {
830 const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_TRANSFORM_ANCHOR );
831 bool bInvalidateAnchor = false;
832 short nAnchorType = TextContentAnchorType_AT_PARAGRAPH;
833 if(pItem)
834 {
835 nAnchorType = static_cast<const SfxInt16Item*>(pItem)->GetValue();
836 switch(nAnchorType)
837 {
838 case TextContentAnchorType_AT_PAGE: m_aToPageRB.Check(); break;
839 case TextContentAnchorType_AT_PARAGRAPH: m_aToParaRB.Check(); break;
840 case TextContentAnchorType_AT_CHARACTER: m_aToCharRB.Check(); break;
841 case TextContentAnchorType_AS_CHARACTER: m_aAsCharRB.Check(); break;
842 case TextContentAnchorType_AT_FRAME: m_aToFrameRB.Check(); break;
843 default : bInvalidateAnchor = true;
844 }
845 m_aToPageRB.SaveValue();
846 m_aToParaRB.SaveValue();
847 m_aToCharRB.SaveValue();
848 m_aAsCharRB.SaveValue();
849 m_aToFrameRB.SaveValue();
850 }
851 if(bInvalidateAnchor)
852 {
853 m_aToPageRB.Enable( sal_False );
854 m_aToParaRB.Enable( sal_False );
855 m_aToCharRB.Enable( sal_False );
856 m_aAsCharRB.Enable( sal_False );
857 m_aToFrameRB.Enable( sal_False );
858 }
859
860 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_PROTECT_POS );
861 if ( pItem )
862 {
863 sal_Bool bProtected = ( ( const SfxBoolItem* )pItem )->GetValue();
864 m_aPositionCB.SetState( bProtected ? STATE_CHECK : STATE_NOCHECK );
865 m_aPositionCB.EnableTriState( sal_False );
866 m_aSizeCB.Enable( !bProtected );
867 }
868 else
869 {
870 m_aPositionCB.SetState( STATE_DONTKNOW );
871 }
872
873 m_aPositionCB.SaveValue();
874
875 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_PROTECT_SIZE );
876
877 if ( pItem )
878 {
879 m_aSizeCB.SetState( ( (const SfxBoolItem*)pItem )->GetValue()
880 ? STATE_CHECK : STATE_NOCHECK );
881 m_aSizeCB.EnableTriState( sal_False );
882 }
883 else
884 m_aSizeCB.SetState( STATE_DONTKNOW );
885 m_aSizeCB.SaveValue();
886
887 pItem = GetItem( rSet, SID_HTML_MODE );
888 if(pItem)
889 m_nHtmlMode = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
890 m_bHtmlMode = 0 != (m_bHtmlMode & HTMLMODE_ON);
891
892 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_IN_VERTICAL_TEXT );
893 if(pItem && static_cast<const SfxBoolItem*>(pItem)->GetValue())
894 {
895 String sHLabel = m_aHoriFT.GetText();
896 m_aHoriFT.SetText(m_aVertFT.GetText());
897 m_aVertFT.SetText(sHLabel);
898 m_bIsVerticalFrame = true;
899 }
900 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_IN_RTL_TEXT);
901 if(pItem)
902 m_bIsInRightToLeft = static_cast<const SfxBoolItem*>(pItem)->GetValue();
903
904 pItem = GetItem( rSet, SID_SW_FOLLOW_TEXT_FLOW);
905 if(pItem)
906 {
907 const bool bFollowTextFlow =
908 static_cast<const SfxBoolItem*>(pItem)->GetValue();
909 m_aFollowCB.Check( bFollowTextFlow );
910 }
911 m_aFollowCB.SaveValue();
912
913 if(m_bHtmlMode)
914 {
915 if( 0 == (m_nHtmlMode & HTMLMODE_FULL_ABS_POS))
916 {
917 m_aHeightFT .Enable( sal_False );
918 m_aHeightMF .Enable( sal_False );
919 }
920 if( 0 == (m_nHtmlMode & HTMLMODE_SOME_ABS_POS))
921 {
922 if(GetAnchorType() == TextContentAnchorType_AT_PAGE)
923 {
924 m_aToParaRB.Check();
925 }
926 m_aToPageRB.Enable(sal_False);
927 }
928 m_aHoriMirrorCB.Show(sal_False);
929 m_aKeepRatioCB.Enable(sal_False);
930 // OD 19.09.2003 #i18732# - hide checkbox in HTML mode
931 m_aFollowCB.Show(sal_False);
932 }
933 else
934 {
935 // OD 06.11.2003 #i18732# correct enable/disable of check box 'Mirror on..'
936 m_aHoriMirrorCB.Enable(!m_aAsCharRB.IsChecked() && !m_bIsMultiSelection);
937
938 // OD 06.11.2003 #i18732# - enable/disable check box 'Follow text flow'.
939 m_aFollowCB.Enable( m_aToParaRB.IsChecked() ||
940 m_aToCharRB.IsChecked() );
941 }
942
943 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_WIDTH );
944 sal_Int32 nWidth = Max( pItem ? ( static_cast<const SfxUInt32Item*>(pItem)->GetValue()) : 0, (sal_uInt32)1 );
945
946 m_aWidthMF.SetValue(m_aWidthMF.Normalize(nWidth), FUNIT_TWIP);
947
948 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_HEIGHT );
949 sal_Int32 nHeight = Max( pItem ? ( static_cast<const SfxUInt32Item*>(pItem)->GetValue()) : 0, (sal_uInt32)1 );
950 m_aHeightMF.SetValue(m_aHeightMF.Normalize(nHeight), FUNIT_TWIP);
951 m_fWidthHeightRatio = nHeight ? double(nWidth) / double(nHeight) : 1.0;
952
953 if(!m_bPositioningDisabled)
954 {
955 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_HORI_ORIENT);
956 if(pItem)
957 {
958 short nHoriOrientation = static_cast< const SfxInt16Item*>(pItem)->GetValue();
959 m_nOldH = nHoriOrientation;
960 }
961 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_VERT_ORIENT);
962 if(pItem)
963 {
964 short nVertOrientation = static_cast< const SfxInt16Item*>(pItem)->GetValue();
965 m_nOldV = nVertOrientation;
966 }
967 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_HORI_RELATION);
968 if(pItem)
969 {
970 m_nOldHRel = static_cast< const SfxInt16Item*>(pItem)->GetValue();
971 }
972
973 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_VERT_RELATION);
974 if(pItem)
975 {
976 m_nOldVRel = static_cast< const SfxInt16Item*>(pItem)->GetValue();
977 }
978 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_HORI_MIRROR);
979 if(pItem)
980 m_aHoriMirrorCB.Check(static_cast<const SfxBoolItem*>(pItem)->GetValue());
981 m_aHoriMirrorCB.SaveValue();
982
983 sal_Int32 nHoriPos = 0;
984 sal_Int32 nVertPos = 0;
985 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_HORI_POSITION);
986 if(pItem)
987 nHoriPos = static_cast<const SfxInt32Item*>(pItem)->GetValue();
988 pItem = GetItem( rSet, SID_ATTR_TRANSFORM_VERT_POSITION);
989 if(pItem)
990 nVertPos = static_cast<const SfxInt32Item*>(pItem)->GetValue();
991
992 InitPos(nAnchorType, m_nOldH, m_nOldHRel, m_nOldV, m_nOldVRel, nHoriPos, nVertPos);
993
994 m_aVertByMF.SaveValue();
995 m_aHoriByMF.SaveValue();
996 // OD 19.09.2003 #i18732#
997 m_aFollowCB.SaveValue();
998
999 RangeModifyHdl(&m_aWidthMF); // initially set maximum values
1000 }
1001 }
1002 /*-- 03.03.2004 12:21:35---------------------------------------------------
1003
1004 -----------------------------------------------------------------------*/
DeactivatePage(SfxItemSet * _pSet)1005 int SvxSwPosSizeTabPage::DeactivatePage( SfxItemSet* _pSet )
1006 {
1007 if( _pSet )
1008 FillItemSet( *_pSet );
1009 return( LEAVE_PAGE );
1010 }
1011 /*-- 04.03.2004 09:14:41---------------------------------------------------
1012
1013 -----------------------------------------------------------------------*/
EnableAnchorTypes(sal_uInt16 nAnchorEnable)1014 void SvxSwPosSizeTabPage::EnableAnchorTypes(sal_uInt16 nAnchorEnable)
1015 {
1016 if((nAnchorEnable & SVX_OBJ_AT_FLY))
1017 m_aToFrameRB.Show();
1018 if(!(nAnchorEnable & SVX_OBJ_PAGE))
1019 m_aToPageRB.Enable(sal_False);
1020 }
1021 /*-- 04.03.2004 09:33:33---------------------------------------------------
1022
1023 -----------------------------------------------------------------------*/
GetAnchorType(bool * pbHasChanged)1024 short SvxSwPosSizeTabPage::GetAnchorType(bool* pbHasChanged)
1025 {
1026 short nRet = -1;
1027 RadioButton* pCheckedButton = 0;
1028 if(m_aToParaRB.IsEnabled())
1029 {
1030 if(m_aToPageRB.IsChecked())
1031 {
1032 nRet = TextContentAnchorType_AT_PAGE;
1033 pCheckedButton = &m_aToPageRB;
1034 }
1035 else if(m_aToParaRB.IsChecked())
1036 {
1037 nRet = TextContentAnchorType_AT_PARAGRAPH;
1038 pCheckedButton = &m_aToParaRB;
1039 }
1040 else if(m_aToCharRB.IsChecked())
1041 {
1042 nRet = TextContentAnchorType_AT_CHARACTER;
1043 pCheckedButton = &m_aToCharRB;
1044 }
1045 else if(m_aAsCharRB.IsChecked())
1046 {
1047 nRet = TextContentAnchorType_AS_CHARACTER;
1048 pCheckedButton = &m_aAsCharRB;
1049 }
1050 else if(m_aToFrameRB.IsChecked())
1051 {
1052 nRet = TextContentAnchorType_AT_FRAME;
1053 pCheckedButton = &m_aToFrameRB;
1054 }
1055 }
1056 if(pbHasChanged)
1057 {
1058 if(pCheckedButton)
1059 *pbHasChanged = pCheckedButton->IsChecked() != pCheckedButton->GetSavedValue();
1060 else
1061 *pbHasChanged = false;
1062 }
1063 return nRet;
1064 }
1065 /*-- 05.03.2004 10:43:32---------------------------------------------------
1066
1067 -----------------------------------------------------------------------*/
IMPL_LINK(SvxSwPosSizeTabPage,RangeModifyHdl,Edit *,EMPTYARG)1068 IMPL_LINK( SvxSwPosSizeTabPage, RangeModifyHdl, Edit *, EMPTYARG )
1069 {
1070 if(m_bPositioningDisabled)
1071 return 0;
1072 SvxSwFrameValidation aVal;
1073
1074 aVal.nAnchorType = GetAnchorType();
1075 aVal.bAutoHeight = false;
1076 aVal.bAutoWidth = false;
1077 aVal.bMirror = m_aHoriMirrorCB.IsChecked();
1078 // OD 18.09.2003 #i18732#
1079 aVal.bFollowTextFlow = m_aFollowCB.IsChecked();
1080
1081 if ( m_pHMap )
1082 {
1083 // Ausrichtung Horizontal
1084 sal_uInt16 nMapPos = GetMapPos(m_pHMap, m_aHoriToLB);
1085 sal_uInt16 nAlign = GetAlignment(m_pHMap, nMapPos, m_aHoriLB, m_aHoriToLB);
1086 sal_uInt16 nRel = GetRelation(m_pHMap, m_aHoriToLB);
1087
1088 aVal.nHoriOrient = (short)nAlign;
1089 aVal.nHRelOrient = (short)nRel;
1090 }
1091 else
1092 aVal.nHoriOrient = HoriOrientation::NONE;
1093
1094 if ( m_pVMap )
1095 {
1096 // Ausrichtung Vertikal
1097 sal_uInt16 nMapPos = GetMapPos(m_pVMap, m_aVertLB);
1098 sal_uInt16 nAlign = GetAlignment(m_pVMap, nMapPos, m_aVertLB, m_aVertToLB);
1099 sal_uInt16 nRel = GetRelation(m_pVMap, m_aVertToLB);
1100
1101 aVal.nVertOrient = (short)nAlign;
1102 aVal.nVRelOrient = (short)nRel;
1103 }
1104 else
1105 aVal.nVertOrient = VertOrientation::NONE;
1106
1107 const long nAtHorzPosVal =
1108 static_cast<long>(m_aHoriByMF.Denormalize(m_aHoriByMF.GetValue(FUNIT_TWIP)));
1109 const long nAtVertPosVal =
1110 static_cast<long>(m_aVertByMF.Denormalize(m_aVertByMF.GetValue(FUNIT_TWIP)));
1111
1112 aVal.nHPos = nAtHorzPosVal;
1113 aVal.nVPos = nAtVertPosVal;
1114
1115 sal_Int32 nWidth = static_cast<sal_uInt32>(m_aWidthMF. Denormalize(m_aWidthMF.GetValue(FUNIT_TWIP)));
1116 sal_Int32 nHeight = static_cast<sal_uInt32>(m_aHeightMF.Denormalize(m_aHeightMF.GetValue(FUNIT_TWIP)));
1117 aVal.nWidth = nWidth;
1118 aVal.nHeight = nHeight;
1119
1120 if(m_aValidateLink.IsSet())
1121 m_aValidateLink.Call(&aVal);
1122
1123 nWidth = aVal.nWidth;
1124 nHeight = aVal.nHeight;
1125
1126 // Mindestbreite auch fuer Vorlage
1127 m_aHeightMF.SetMin(m_aHeightMF.Normalize(aVal.nMinHeight), FUNIT_TWIP);
1128 m_aWidthMF. SetMin(m_aWidthMF.Normalize(aVal.nMinWidth), FUNIT_TWIP);
1129
1130 sal_Int32 nMaxWidth(aVal.nMaxWidth);
1131 sal_Int32 nMaxHeight(aVal.nMaxHeight);
1132
1133 sal_Int64 nTmp = m_aHeightMF.Normalize(nMaxHeight);
1134 m_aHeightMF.SetMax(nTmp, FUNIT_TWIP);
1135
1136 nTmp = m_aWidthMF.Normalize(nMaxWidth);
1137 m_aWidthMF.SetMax(nTmp, FUNIT_TWIP);
1138
1139 m_aHoriByMF.SetMin(m_aHoriByMF.Normalize(aVal.nMinHPos), FUNIT_TWIP);
1140 m_aHoriByMF.SetMax(m_aHoriByMF.Normalize(aVal.nMaxHPos), FUNIT_TWIP);
1141 if ( aVal.nHPos != nAtHorzPosVal )
1142 m_aHoriByMF.SetValue(m_aHoriByMF.Normalize(aVal.nHPos), FUNIT_TWIP);
1143
1144 m_aVertByMF.SetMin(m_aVertByMF.Normalize(aVal.nMinVPos ), FUNIT_TWIP);
1145 m_aVertByMF.SetMax(m_aVertByMF.Normalize(aVal.nMaxVPos), FUNIT_TWIP);
1146 if ( aVal.nVPos != nAtVertPosVal )
1147 m_aVertByMF.SetValue(m_aVertByMF.Normalize(aVal.nVPos), FUNIT_TWIP);
1148
1149 return 0;
1150 }
1151 /*-- 05.03.2004 11:12:56---------------------------------------------------
1152
1153 -----------------------------------------------------------------------*/
IMPL_LINK(SvxSwPosSizeTabPage,AnchorTypeHdl,RadioButton *,EMPTYARG)1154 IMPL_LINK( SvxSwPosSizeTabPage, AnchorTypeHdl, RadioButton *, EMPTYARG )
1155 {
1156 m_aHoriMirrorCB.Enable(!m_aAsCharRB.IsChecked() && !m_bIsMultiSelection);
1157
1158 // OD 06.11.2003 #i18732# - enable check box 'Follow text flow' for anchor
1159 // type to-paragraph' and to-character
1160 m_aFollowCB.Enable( m_aToParaRB.IsChecked() || m_aToCharRB.IsChecked() );
1161
1162 short nId = GetAnchorType();
1163
1164 InitPos( nId, USHRT_MAX, 0, USHRT_MAX, 0, LONG_MAX, LONG_MAX);
1165 RangeModifyHdl(0);
1166
1167 if(m_bHtmlMode)
1168 {
1169 PosHdl(&m_aHoriLB);
1170 PosHdl(&m_aVertLB);
1171 }
1172 return 0;
1173 }
1174 /*-- 05.03.2004 14:20:19---------------------------------------------------
1175
1176 -----------------------------------------------------------------------*/
IMPL_LINK(SvxSwPosSizeTabPage,MirrorHdl,CheckBox *,EMPTYARG)1177 IMPL_LINK( SvxSwPosSizeTabPage, MirrorHdl, CheckBox *, EMPTYARG )
1178 {
1179 short nId = GetAnchorType();
1180 InitPos( nId, USHRT_MAX, 0, USHRT_MAX, 0, LONG_MAX, LONG_MAX);
1181
1182 return 0;
1183 }
1184 /*-- 05.03.2004 14:20:19---------------------------------------------------
1185
1186 -----------------------------------------------------------------------*/
IMPL_LINK(SvxSwPosSizeTabPage,RelHdl,ListBox *,pLB)1187 IMPL_LINK( SvxSwPosSizeTabPage, RelHdl, ListBox *, pLB )
1188 {
1189 sal_Bool bHori = pLB == &m_aHoriToLB;
1190
1191 UpdateExample();
1192
1193 if (bHori)
1194 m_bAtHoriPosModified = sal_True;
1195 else
1196 m_bAtVertPosModified = sal_True;
1197
1198 // OD 12.11.2003 #i22341# - following special handling no longer needed
1199 /*
1200 if (!bHori && m_pVMap == aVCharMap)
1201 {
1202 // Ausrichtung Vertikal
1203 String sEntry;
1204 sal_uInt16 nMapPos = GetMapPos(m_pVMap, m_aVertLB);
1205 sal_uInt16 nAlign = GetAlignment(m_pVMap, nMapPos, m_aVertLB, m_aVertToLB);
1206 sal_uInt16 nRel = GetRelation(m_pVMap, m_aVertToLB);
1207
1208 if (nRel == SwFPos::REL_CHAR)
1209 sEntry = m_aFramePosString.GetString(SwFPos::FROMBOTTOM);
1210 else
1211 sEntry = m_aFramePosString.GetString(SwFPos::FROMTOP);
1212
1213 sal_uInt16 nOldPos = m_aVertLB.GetSelectEntryPos();
1214
1215 String sName = m_aVertLB.GetEntry(m_aVertLB.GetEntryCount() - 1);
1216 if (sName != sEntry)
1217 {
1218 m_aVertLB.RemoveEntry(m_aVertLB.GetEntryCount() - 1);
1219 m_aVertLB.InsertEntry(sEntry);
1220 m_aVertLB.SelectEntryPos(nOldPos);
1221 }
1222 }
1223 */
1224 if(m_bHtmlMode && TextContentAnchorType_AT_CHARACTER == GetAnchorType()) // wieder Sonderbehandlung
1225 {
1226 if(bHori)
1227 {
1228 sal_uInt16 nRel = GetRelation(m_pHMap, m_aHoriToLB);
1229 if(RelOrientation::PRINT_AREA == nRel && 0 == m_aVertLB.GetSelectEntryPos())
1230 {
1231 m_aVertLB.SelectEntryPos(1);
1232 }
1233 else if(RelOrientation::CHAR == nRel && 1 == m_aVertLB.GetSelectEntryPos())
1234 {
1235 m_aVertLB.SelectEntryPos(0);
1236 }
1237 }
1238 }
1239 if (pLB) // Nur wenn Handler durch Aenderung des Controllers gerufen wurde
1240 RangeModifyHdl(0);
1241
1242 return 0;
1243
1244 }
1245 /*-- 05.03.2004 14:20:19---------------------------------------------------
1246
1247 -----------------------------------------------------------------------*/
IMPL_LINK(SvxSwPosSizeTabPage,PosHdl,ListBox *,pLB)1248 IMPL_LINK( SvxSwPosSizeTabPage, PosHdl, ListBox *, pLB )
1249 {
1250 sal_Bool bHori = pLB == &m_aHoriLB;
1251 ListBox *pRelLB = bHori ? &m_aHoriToLB : &m_aVertToLB;
1252 FixedText *pRelFT = bHori ? &m_aHoriToFT : &m_aVertToFT;
1253 FrmMap *pMap = bHori ? m_pHMap : m_pVMap;
1254
1255
1256 sal_uInt16 nMapPos = GetMapPos(pMap, *pLB);
1257 sal_uInt16 nAlign = GetAlignment(pMap, nMapPos, *pLB, *pRelLB);
1258
1259 if (bHori)
1260 {
1261 sal_Bool bEnable = HoriOrientation::NONE == nAlign;
1262 m_aHoriByMF.Enable( bEnable );
1263 m_aHoriByFT.Enable( bEnable );
1264 }
1265 else
1266 {
1267 sal_Bool bEnable = VertOrientation::NONE == nAlign;
1268 m_aVertByMF.Enable( bEnable );
1269 m_aVertByFT.Enable( bEnable );
1270 }
1271
1272 if (pLB) // Nur wenn Handler durch Aenderung des Controllers gerufen wurde
1273 RangeModifyHdl( 0 );
1274
1275 short nRel = 0;
1276 if (pLB->GetSelectEntryCount())
1277 {
1278
1279 if (pRelLB->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND)
1280 nRel = ((RelationMap *)pRelLB->GetEntryData(pRelLB->GetSelectEntryPos()))->nRelation;
1281
1282 FillRelLB(pMap, nMapPos, nAlign, nRel, *pRelLB, *pRelFT);
1283 }
1284 else
1285 pRelLB->Clear();
1286
1287 UpdateExample();
1288
1289 if (bHori)
1290 m_bAtHoriPosModified = sal_True;
1291 else
1292 m_bAtVertPosModified = sal_True;
1293
1294 // Sonderbehandlung fuer HTML-Mode mit horz-vert-Abhaengigkeiten
1295 if(m_bHtmlMode && m_nHtmlMode & HTMLMODE_SOME_ABS_POS &&
1296 TextContentAnchorType_AT_CHARACTER == GetAnchorType())
1297 {
1298 sal_Bool bSet = sal_False;
1299 if(bHori)
1300 {
1301 // rechts ist nur unterhalb erlaubt - von links nur oben
1302 // von links am Zeichen -> unterhalb
1303 if((HoriOrientation::LEFT == nAlign || HoriOrientation::RIGHT == nAlign) &&
1304 0 == m_aVertLB.GetSelectEntryPos())
1305 {
1306 if(RelOrientation::FRAME == nRel)
1307 m_aVertLB.SelectEntryPos(1);
1308 else
1309 m_aVertLB.SelectEntryPos(0);
1310 bSet = sal_True;
1311 }
1312 else if(HoriOrientation::LEFT == nAlign && 1 == m_aVertLB.GetSelectEntryPos())
1313 {
1314 m_aVertLB.SelectEntryPos(0);
1315 bSet = sal_True;
1316 }
1317 else if(HoriOrientation::NONE == nAlign && 1 == m_aVertLB.GetSelectEntryPos())
1318 {
1319 m_aVertLB.SelectEntryPos(0);
1320 bSet = sal_True;
1321 }
1322 if(bSet)
1323 PosHdl(&m_aVertLB);
1324 }
1325 else
1326 {
1327 if(VertOrientation::TOP == nAlign)
1328 {
1329 if(1 == m_aHoriLB.GetSelectEntryPos())
1330 {
1331 m_aHoriLB.SelectEntryPos(0);
1332 bSet = sal_True;
1333 }
1334 m_aHoriToLB.SelectEntryPos(1);
1335 }
1336 else if(VertOrientation::CHAR_BOTTOM == nAlign)
1337 {
1338 if(2 == m_aHoriLB.GetSelectEntryPos())
1339 {
1340 m_aHoriLB.SelectEntryPos(0);
1341 bSet = sal_True;
1342 }
1343 m_aHoriToLB.SelectEntryPos(0) ;
1344 }
1345 if(bSet)
1346 PosHdl(&m_aHoriLB);
1347 }
1348
1349 }
1350 return 0;
1351 }
1352 /*-- 05.03.2004 14:20:19---------------------------------------------------
1353
1354 -----------------------------------------------------------------------*/
IMPL_LINK(SvxSwPosSizeTabPage,ModifyHdl,Edit *,pEdit)1355 IMPL_LINK( SvxSwPosSizeTabPage, ModifyHdl, Edit *, pEdit )
1356 {
1357 sal_Int64 nWidth = m_aWidthMF.Denormalize(m_aWidthMF.GetValue(FUNIT_TWIP));
1358 sal_Int64 nHeight = m_aHeightMF.Denormalize(m_aHeightMF.GetValue(FUNIT_TWIP));
1359 if ( m_aKeepRatioCB.IsChecked() )
1360 {
1361 if ( pEdit == &m_aWidthMF )
1362 {
1363 nHeight = sal_Int64((double)nWidth / m_fWidthHeightRatio);
1364 m_aHeightMF.SetValue(m_aHeightMF.Normalize(nHeight), FUNIT_TWIP);
1365 }
1366 else if(pEdit == &m_aHeightMF)
1367 {
1368 nWidth = sal_Int64((double)nHeight * m_fWidthHeightRatio);
1369 m_aWidthMF.SetValue(m_aWidthMF.Normalize(nWidth), FUNIT_TWIP);
1370 }
1371 }
1372 m_fWidthHeightRatio = nHeight ? double(nWidth) / double(nHeight) : 1.0;
1373 UpdateExample();
1374 return 0;
1375 }
1376 /*-- 11.03.2004 15:40:17---------------------------------------------------
1377
1378 -----------------------------------------------------------------------*/
IMPL_LINK(SvxSwPosSizeTabPage,ProtectHdl,TriStateBox *,EMPTYARG)1379 IMPL_LINK( SvxSwPosSizeTabPage, ProtectHdl, TriStateBox *, EMPTYARG)
1380 {
1381 m_aSizeCB.Enable(m_aPositionCB.IsEnabled() && !m_aPositionCB.IsChecked());
1382 return 0;
1383 }
1384 /*-- 05.03.2004 14:20:19---------------------------------------------------
1385
1386 -----------------------------------------------------------------------*/
GetRelation(FrmMap *,ListBox & rRelationLB)1387 short SvxSwPosSizeTabPage::GetRelation(FrmMap *, ListBox &rRelationLB)
1388 {
1389 short nRel = 0;
1390 sal_uInt16 nPos = rRelationLB.GetSelectEntryPos();
1391
1392 if (nPos != LISTBOX_ENTRY_NOTFOUND)
1393 {
1394 RelationMap *pEntry = (RelationMap *)rRelationLB.GetEntryData(nPos);
1395 nRel = pEntry->nRelation;
1396 }
1397
1398 return nRel;
1399 }
1400 /*-- 05.03.2004 14:20:19---------------------------------------------------
1401
1402 -----------------------------------------------------------------------*/
GetAlignment(FrmMap * pMap,sal_uInt16 nMapPos,ListBox &,ListBox & rRelationLB)1403 short SvxSwPosSizeTabPage::GetAlignment(FrmMap *pMap, sal_uInt16 nMapPos, ListBox &/*rAlignLB*/, ListBox &rRelationLB)
1404 {
1405 short nAlign = 0;
1406
1407 // OD 14.11.2003 #i22341# - special handling also for map <aVCharMap>,
1408 // because it contains ambigous items for alignment
1409 if (pMap == aVAsCharHtmlMap || pMap == aVAsCharMap ||
1410 pMap == aVCharMap )
1411 {
1412 if (rRelationLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND)
1413 {
1414 sal_uLong nRel = ((RelationMap *)rRelationLB.GetEntryData(rRelationLB.GetSelectEntryPos()))->nLBRelation;
1415 std::size_t nMapCount = ::lcl_GetFrmMapCount(pMap);
1416 SvxSwFramePosString::StringId eStrId = pMap[nMapPos].eStrId;
1417
1418 for (std::size_t i = 0; i < nMapCount; i++)
1419 {
1420 if (pMap[i].eStrId == eStrId)
1421 {
1422 sal_uLong nLBRelations = pMap[i].nLBRelations;
1423 if (nLBRelations & nRel)
1424 {
1425 nAlign = pMap[i].nAlign;
1426 break;
1427 }
1428 }
1429 }
1430 }
1431 }
1432 else if (pMap)
1433 nAlign = pMap[nMapPos].nAlign;
1434
1435 return nAlign;
1436 }
1437 /*-- 05.03.2004 14:20:19---------------------------------------------------
1438
1439 -----------------------------------------------------------------------*/
GetMapPos(FrmMap * pMap,ListBox & rAlignLB)1440 sal_uInt16 SvxSwPosSizeTabPage::GetMapPos(FrmMap *pMap, ListBox &rAlignLB)
1441 {
1442 sal_uInt16 nMapPos = 0;
1443 sal_uInt16 nLBSelPos = rAlignLB.GetSelectEntryPos();
1444
1445 if (nLBSelPos != LISTBOX_ENTRY_NOTFOUND)
1446 {
1447 if (pMap == aVAsCharHtmlMap || pMap == aVAsCharMap)
1448 {
1449 std::size_t nMapCount = ::lcl_GetFrmMapCount(pMap);
1450 String sSelEntry(rAlignLB.GetSelectEntry());
1451
1452 for (std::size_t i = 0; i < nMapCount; i++)
1453 {
1454 SvxSwFramePosString::StringId eResId = pMap[i].eStrId;
1455
1456 String sEntry = m_aFramePosString.GetString(eResId);
1457
1458 if (sEntry == sSelEntry)
1459 {
1460 nMapPos = sal::static_int_cast< sal_uInt16 >(i);
1461 break;
1462 }
1463 }
1464 }
1465 else
1466 nMapPos = nLBSelPos;
1467 }
1468
1469 return nMapPos;
1470 }
1471 /*-- 05.03.2004 14:20:19---------------------------------------------------
1472
1473 -----------------------------------------------------------------------*/
InitPos(short nAnchor,sal_uInt16 nH,sal_uInt16 nHRel,sal_uInt16 nV,sal_uInt16 nVRel,long nX,long nY)1474 void SvxSwPosSizeTabPage::InitPos(short nAnchor,
1475 sal_uInt16 nH,
1476 sal_uInt16 nHRel,
1477 sal_uInt16 nV,
1478 sal_uInt16 nVRel,
1479 long nX,
1480 long nY)
1481 {
1482 sal_uInt16 nPos = m_aVertLB.GetSelectEntryPos();
1483 if ( nPos != LISTBOX_ENTRY_NOTFOUND && m_pVMap )
1484 {
1485 m_nOldV = m_pVMap[nPos].nAlign;
1486 nPos = m_aVertToLB.GetSelectEntryPos();
1487 if (nPos != LISTBOX_ENTRY_NOTFOUND)
1488 m_nOldVRel = ((RelationMap *)m_aVertToLB.GetEntryData(nPos))->nRelation;
1489 }
1490
1491 nPos = m_aHoriLB.GetSelectEntryPos();
1492 if ( nPos != LISTBOX_ENTRY_NOTFOUND && m_pHMap )
1493 {
1494 m_nOldH = m_pHMap[nPos].nAlign;
1495
1496 nPos = m_aHoriToLB.GetSelectEntryPos();
1497 if (nPos != LISTBOX_ENTRY_NOTFOUND)
1498 m_nOldHRel = ((RelationMap *)m_aHoriToLB.GetEntryData(nPos))->nRelation;
1499 }
1500
1501 sal_Bool bEnable = sal_True;
1502 if( m_bIsMultiSelection )
1503 {
1504 m_pVMap = aVMultiSelectionMap;
1505 m_pHMap = aHMultiSelectionMap;
1506 }
1507 else if( nAnchor == TextContentAnchorType_AT_PAGE )
1508 {
1509 m_pVMap = m_bHtmlMode ? aVPageHtmlMap : aVPageMap;
1510 m_pHMap = m_bHtmlMode ? aHPageHtmlMap : aHPageMap;
1511 }
1512 else if ( nAnchor == TextContentAnchorType_AT_FRAME )
1513 {
1514 // OD 19.09.2003 #i18732# - own vertical alignment map for to frame
1515 // anchored objects.
1516 m_pVMap = m_bHtmlMode ? aVFlyHtmlMap : aVFrameMap;
1517 m_pHMap = m_bHtmlMode ? aHFlyHtmlMap : aHFrameMap;
1518 }
1519 else if ( nAnchor == TextContentAnchorType_AT_PARAGRAPH )
1520 {
1521 if(m_bHtmlMode)
1522 {
1523 m_pVMap = aVParaHtmlMap;
1524 m_pHMap = m_nHtmlMode & HTMLMODE_SOME_ABS_POS ? aHParaHtmlAbsMap : aHParaHtmlMap;
1525 }
1526 else
1527 {
1528 m_pVMap = aVParaMap;
1529 m_pHMap = aHParaMap;
1530 }
1531 }
1532 else if ( nAnchor == TextContentAnchorType_AT_CHARACTER )
1533 {
1534 if(m_bHtmlMode)
1535 {
1536 m_pVMap = m_nHtmlMode & HTMLMODE_SOME_ABS_POS ? aVCharHtmlAbsMap : aVCharHtmlMap;
1537 m_pHMap = m_nHtmlMode & HTMLMODE_SOME_ABS_POS ? aHCharHtmlAbsMap : aHCharHtmlMap;
1538 }
1539 else
1540 {
1541 m_pVMap = aVCharMap;
1542 m_pHMap = aHCharMap;
1543 }
1544 }
1545 else if ( nAnchor == TextContentAnchorType_AS_CHARACTER )
1546 {
1547 m_pVMap = m_bHtmlMode ? aVAsCharHtmlMap : aVAsCharMap;
1548 m_pHMap = 0;
1549 bEnable = sal_False;
1550 }
1551 m_aHoriLB.Enable( bEnable );
1552 m_aHoriFT.Enable( bEnable );
1553
1554 // aktuelle Pos selektieren
1555 // Horizontal
1556 if ( nH == USHRT_MAX )
1557 {
1558 nH = m_nOldH;
1559 nHRel = m_nOldHRel;
1560 }
1561 // OD 12.11.2003 #i22341# - pass <nHRel> as 3rd parameter to method <FillPosLB>
1562 sal_uInt16 nMapPos = FillPosLB(m_pHMap, nH, nHRel, m_aHoriLB);
1563 FillRelLB(m_pHMap, nMapPos, nH, nHRel, m_aHoriToLB, m_aHoriToFT);
1564
1565 // Vertikal
1566 if ( nV == USHRT_MAX )
1567 {
1568 nV = m_nOldV;
1569 nVRel = m_nOldVRel;
1570 }
1571 // OD 12.11.2003 #i22341# - pass <nVRel> as 3rd parameter to method <FillPosLB>
1572 nMapPos = FillPosLB(m_pVMap, nV, nVRel, m_aVertLB);
1573 FillRelLB(m_pVMap, nMapPos, nV, nVRel, m_aVertToLB, m_aVertToFT);
1574
1575 // Edits init
1576 bEnable = nH == HoriOrientation::NONE &&
1577 nAnchor != TextContentAnchorType_AS_CHARACTER;//#61359# warum nicht in Formaten&& !bFormat;
1578 if (!bEnable)
1579 {
1580 m_aHoriByMF.SetValue( 0, FUNIT_TWIP );
1581 if (nX != LONG_MAX && m_bHtmlMode)
1582 m_aHoriByMF.SetModifyFlag();
1583 }
1584 else if(m_bIsMultiSelection)
1585 {
1586 m_aHoriByMF.SetValue( m_aHoriByMF.Normalize(m_aRect.Left()), FUNIT_TWIP );
1587 }
1588 else
1589 {
1590 if (nX != LONG_MAX)
1591 m_aHoriByMF.SetValue( m_aHoriByMF.Normalize(nX), FUNIT_TWIP );
1592 }
1593 m_aHoriByFT.Enable( bEnable );
1594 m_aHoriByMF.Enable( bEnable );
1595
1596 bEnable = nV == VertOrientation::NONE;
1597 if ( !bEnable )
1598 {
1599 m_aVertByMF.SetValue( 0, FUNIT_TWIP );
1600 if(nY != LONG_MAX && m_bHtmlMode)
1601 m_aVertByMF.SetModifyFlag();
1602 }
1603 else if(m_bIsMultiSelection)
1604 {
1605 m_aVertByMF.SetValue( m_aVertByMF.Normalize(m_aRect.Top()), FUNIT_TWIP );
1606 }
1607 else
1608 {
1609 if ( nAnchor == TextContentAnchorType_AS_CHARACTER )
1610 {
1611 if ( nY == LONG_MAX )
1612 nY = 0;
1613 else
1614 nY *= -1;
1615 }
1616 if ( nY != LONG_MAX )
1617 m_aVertByMF.SetValue( m_aVertByMF.Normalize(nY), FUNIT_TWIP );
1618 }
1619 m_aVertByFT.Enable( bEnable );
1620 m_aVertByMF.Enable( bEnable );
1621 UpdateExample();
1622 }
1623 /*-- 05.03.2004 14:20:19---------------------------------------------------
1624
1625 -----------------------------------------------------------------------*/
UpdateExample()1626 void SvxSwPosSizeTabPage::UpdateExample()
1627 {
1628 sal_uInt16 nPos = m_aHoriLB.GetSelectEntryPos();
1629 if ( m_pHMap && nPos != LISTBOX_ENTRY_NOTFOUND )
1630 {
1631 sal_uInt16 nMapPos = GetMapPos(m_pHMap, m_aHoriLB);
1632 short nAlign = GetAlignment(m_pHMap, nMapPos, m_aHoriLB, m_aHoriToLB);
1633 short nRel = GetRelation(m_pHMap, m_aHoriToLB);
1634
1635 m_aExampleWN.SetHAlign(nAlign);
1636 m_aExampleWN.SetHoriRel(nRel);
1637 }
1638
1639 nPos = m_aVertLB.GetSelectEntryPos();
1640 if ( m_pVMap && nPos != LISTBOX_ENTRY_NOTFOUND )
1641 {
1642 sal_uInt16 nMapPos = GetMapPos(m_pVMap, m_aVertLB);
1643 sal_uInt16 nAlign = GetAlignment(m_pVMap, nMapPos, m_aVertLB, m_aVertToLB);
1644 sal_uInt16 nRel = GetRelation(m_pVMap, m_aVertToLB);
1645
1646 m_aExampleWN.SetVAlign(nAlign);
1647 m_aExampleWN.SetVertRel(nRel);
1648 }
1649
1650 // Size
1651 long nXPos = static_cast<long>(m_aHoriByMF.Denormalize(m_aHoriByMF.GetValue(FUNIT_TWIP)));
1652 long nYPos = static_cast<long>(m_aVertByMF.Denormalize(m_aVertByMF.GetValue(FUNIT_TWIP)));
1653 m_aExampleWN.SetRelPos(Point(nXPos, nYPos));
1654
1655 m_aExampleWN.SetAnchor( GetAnchorType() );
1656 m_aExampleWN.Invalidate();
1657 }
1658 /*-- 05.03.2004 14:20:19---------------------------------------------------
1659
1660 -----------------------------------------------------------------------*/
FillRelLB(FrmMap * pMap,sal_uInt16 nMapPos,sal_uInt16 nAlign,sal_uInt16 nRel,ListBox & rLB,FixedText & rFT)1661 sal_uLong SvxSwPosSizeTabPage::FillRelLB(FrmMap *pMap, sal_uInt16 nMapPos, sal_uInt16 nAlign,
1662 sal_uInt16 nRel, ListBox &rLB, FixedText &rFT)
1663 {
1664 String sSelEntry;
1665 sal_uLong nLBRelations = 0;
1666 std::size_t nMapCount = ::lcl_GetFrmMapCount(pMap);
1667
1668 rLB.Clear();
1669
1670 if (nMapPos < nMapCount)
1671 {
1672 if (pMap == aVAsCharHtmlMap || pMap == aVAsCharMap)
1673 {
1674 String sOldEntry(rLB.GetSelectEntry());
1675 sal_uInt16 nRelCount = sizeof(aAsCharRelationMap) / sizeof(RelationMap);
1676 SvxSwFramePosString::StringId eStrId = pMap[nMapPos].eStrId;
1677
1678 for (std::size_t _nMapPos = 0; _nMapPos < nMapCount; _nMapPos++)
1679 {
1680 if (pMap[_nMapPos].eStrId == eStrId)
1681 {
1682 nLBRelations = pMap[_nMapPos].nLBRelations;
1683 for (sal_uInt16 nRelPos = 0; nRelPos < nRelCount; nRelPos++)
1684 {
1685 if (nLBRelations & aAsCharRelationMap[nRelPos].nLBRelation)
1686 {
1687 SvxSwFramePosString::StringId sStrId1 = aAsCharRelationMap[nRelPos].eStrId;
1688
1689 sStrId1 = lcl_ChangeResIdToVerticalOrRTL(sStrId1, m_bIsVerticalFrame, m_bIsInRightToLeft);
1690 String sEntry = m_aFramePosString.GetString(sStrId1);
1691 sal_uInt16 nPos = rLB.InsertEntry(sEntry);
1692 rLB.SetEntryData(nPos, &aAsCharRelationMap[nRelPos]);
1693 if (pMap[_nMapPos].nAlign == nAlign)
1694 sSelEntry = sEntry;
1695 break;
1696 }
1697 }
1698 }
1699 }
1700 if (sSelEntry.Len())
1701 rLB.SelectEntry(sSelEntry);
1702 else
1703 {
1704 rLB.SelectEntry(sOldEntry);
1705
1706 if (!rLB.GetSelectEntryCount())
1707 {
1708 for (sal_uInt16 i = 0; i < rLB.GetEntryCount(); i++)
1709 {
1710 RelationMap *pEntry = (RelationMap *)rLB.GetEntryData(i);
1711 if (pEntry->nLBRelation == LB_REL_CHAR) // Default
1712 {
1713 rLB.SelectEntryPos(i);
1714 break;
1715 }
1716 }
1717 }
1718 }
1719 }
1720 else
1721 {
1722 sal_uInt16 nRelCount = sizeof(aRelationMap) / sizeof(RelationMap);
1723
1724 // OD 14.11.2003 #i22341# - special handling for map <aVCharMap>,
1725 // because its ambigous in its <eStrId>/<eMirrorStrId>.
1726 if ( pMap == aVCharMap )
1727 {
1728 nLBRelations = ::lcl_GetLBRelationsForStrID( pMap,
1729 ( m_aHoriMirrorCB.IsChecked()
1730 ? pMap[nMapPos].eMirrorStrId
1731 : pMap[nMapPos].eStrId ),
1732 m_aHoriMirrorCB.IsChecked() );
1733 }
1734 else
1735 {
1736 nLBRelations = pMap[nMapPos].nLBRelations;
1737 }
1738
1739 for (sal_uLong nBit = 1; nBit < 0x80000000; nBit <<= 1)
1740 {
1741 if (nLBRelations & nBit)
1742 {
1743 for (sal_uInt16 nRelPos = 0; nRelPos < nRelCount; nRelPos++)
1744 {
1745 if (aRelationMap[nRelPos].nLBRelation == nBit)
1746 {
1747 SvxSwFramePosString::StringId sStrId1 = m_aHoriMirrorCB.IsChecked() ? aRelationMap[nRelPos].eMirrorStrId : aRelationMap[nRelPos].eStrId;
1748 sStrId1 = lcl_ChangeResIdToVerticalOrRTL(sStrId1, m_bIsVerticalFrame, m_bIsInRightToLeft);
1749 String sEntry = m_aFramePosString.GetString(sStrId1);
1750 sal_uInt16 nPos = rLB.InsertEntry(sEntry);
1751 rLB.SetEntryData(nPos, &aRelationMap[nRelPos]);
1752 if (!sSelEntry.Len() && aRelationMap[nRelPos].nRelation == nRel)
1753 sSelEntry = sEntry;
1754 }
1755 }
1756 }
1757 }
1758 if (sSelEntry.Len())
1759 rLB.SelectEntry(sSelEntry);
1760 else
1761 {
1762 // Warscheinlich Ankerwechsel. Daher aehnliche Relation suchen
1763 switch (nRel)
1764 {
1765 case RelOrientation::FRAME: nRel = RelOrientation::PAGE_FRAME; break;
1766 case RelOrientation::PRINT_AREA: nRel = RelOrientation::PAGE_PRINT_AREA; break;
1767 case RelOrientation::PAGE_LEFT: nRel = RelOrientation::FRAME_LEFT; break;
1768 case RelOrientation::PAGE_RIGHT: nRel = RelOrientation::FRAME_RIGHT; break;
1769 case RelOrientation::FRAME_LEFT: nRel = RelOrientation::PAGE_LEFT; break;
1770 case RelOrientation::FRAME_RIGHT: nRel = RelOrientation::PAGE_RIGHT; break;
1771 case RelOrientation::PAGE_FRAME: nRel = RelOrientation::FRAME; break;
1772 case RelOrientation::PAGE_PRINT_AREA: nRel = RelOrientation::PRINT_AREA; break;
1773
1774 default:
1775 if (rLB.GetEntryCount())
1776 {
1777 RelationMap *pEntry = (RelationMap *)rLB.GetEntryData(rLB.GetEntryCount() - 1);
1778 nRel = pEntry->nRelation;
1779 }
1780 break;
1781 }
1782
1783 for (sal_uInt16 i = 0; i < rLB.GetEntryCount(); i++)
1784 {
1785 RelationMap *pEntry = (RelationMap *)rLB.GetEntryData(i);
1786 if (pEntry->nRelation == nRel)
1787 {
1788 rLB.SelectEntryPos(i);
1789 break;
1790 }
1791 }
1792
1793 if (!rLB.GetSelectEntryCount())
1794 rLB.SelectEntryPos(0);
1795 }
1796 }
1797 }
1798
1799 rLB.Enable(rLB.GetEntryCount() != 0);
1800 rFT.Enable(rLB.GetEntryCount() != 0);
1801
1802 RelHdl(&rLB);
1803
1804 return nLBRelations;
1805 }
1806 /*-- 05.03.2004 14:20:19---------------------------------------------------
1807
1808 -----------------------------------------------------------------------*/
FillPosLB(FrmMap * _pMap,sal_uInt16 _nAlign,const sal_uInt16 _nRel,ListBox & _rLB)1809 sal_uInt16 SvxSwPosSizeTabPage::FillPosLB(FrmMap *_pMap,
1810 sal_uInt16 _nAlign,
1811 const sal_uInt16 _nRel,
1812 ListBox &_rLB)
1813 {
1814 String sSelEntry, sOldEntry;
1815 sOldEntry = _rLB.GetSelectEntry();
1816
1817 _rLB.Clear();
1818
1819 // OD 12.11.2003 #i22341# - determine all possible listbox relations for
1820 // given relation for map <aVCharMap>
1821 const sal_uLong nLBRelations = (_pMap != aVCharMap)
1822 ? 0L
1823 : ::lcl_GetLBRelationsForRelations( _nRel );
1824
1825 // Listbox fuellen
1826 std::size_t nCount = ::lcl_GetFrmMapCount(_pMap);
1827 for (std::size_t i = 0; _pMap && i < nCount; ++i)
1828 {
1829 // #61359# Warum nicht von links/von innen bzw. von oben?
1830 // if (!bFormat || (pMap[i].eStrId != SwFPos::FROMLEFT && pMap[i].eStrId != SwFPos::FROMTOP))
1831 {
1832 SvxSwFramePosString::StringId eStrId = m_aHoriMirrorCB.IsChecked() ? _pMap[i].eMirrorStrId : _pMap[i].eStrId;
1833 eStrId = lcl_ChangeResIdToVerticalOrRTL(eStrId, m_bIsVerticalFrame, m_bIsInRightToLeft);
1834 String sEntry(m_aFramePosString.GetString(eStrId));
1835 if (_rLB.GetEntryPos(sEntry) == LISTBOX_ENTRY_NOTFOUND)
1836 {
1837 // bei zeichengebundenen Rahmen keine doppelten Eintraege einfuegen
1838 _rLB.InsertEntry(sEntry);
1839 }
1840 // OD 12.11.2003 #i22341# - add condition to handle map <aVCharMap>
1841 // that is ambigous in the alignment.
1842 if ( _pMap[i].nAlign == _nAlign &&
1843 ( !(_pMap == aVCharMap) || _pMap[i].nLBRelations & nLBRelations ) )
1844 {
1845 sSelEntry = sEntry;
1846 }
1847 }
1848 }
1849
1850 _rLB.SelectEntry(sSelEntry);
1851 if (!_rLB.GetSelectEntryCount())
1852 _rLB.SelectEntry(sOldEntry);
1853
1854 if (!_rLB.GetSelectEntryCount())
1855 _rLB.SelectEntryPos(0);
1856
1857 PosHdl(&_rLB);
1858
1859 return GetMapPos(_pMap, _rLB);
1860 }
1861 /*-- 09.03.2004 15:37:50---------------------------------------------------
1862
1863 -----------------------------------------------------------------------*/
SetView(const SdrView * pSdrView)1864 void SvxSwPosSizeTabPage::SetView( const SdrView* pSdrView )
1865 {
1866 m_pSdrView = pSdrView;
1867 if(!m_pSdrView)
1868 {
1869 DBG_ERROR("No SdrView* set");
1870 return;
1871 }
1872
1873 // Setzen des Rechtecks und der Workingarea
1874 m_aRect = m_pSdrView->GetAllMarkedRect();
1875 m_pSdrView->GetSdrPageView()->LogicToPagePos( m_aRect );
1876
1877 // get WorkArea
1878 m_aWorkArea = m_pSdrView->GetWorkArea();
1879
1880 // Beruecksichtigung Ankerposition (bei Writer)
1881 const SdrMarkList& rMarkList = m_pSdrView->GetMarkedObjectList();
1882 if( rMarkList.GetMarkCount() >= 1 )
1883 {
1884 const SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
1885 m_aAnchorPos = pObj->GetAnchorPos();
1886
1887 if( m_aAnchorPos != Point(0,0) ) // -> Writer
1888 {
1889 for( sal_uInt16 i = 1; i < rMarkList.GetMarkCount(); i++ )
1890 {
1891 pObj = rMarkList.GetMark( i )->GetMarkedSdrObj();
1892 if( m_aAnchorPos != pObj->GetAnchorPos() )
1893 {
1894 // different anchor positions -> disable positioning
1895 m_aPositionFL.Enable(sal_False);
1896 m_aHoriFT.Enable(sal_False);
1897 m_aHoriLB.Enable(sal_False);
1898 m_aHoriByFT.Enable(sal_False);
1899 m_aHoriByMF.Enable(sal_False);
1900 m_aHoriToFT.Enable(sal_False);
1901 m_aHoriToLB.Enable(sal_False);
1902 m_aHoriMirrorCB.Enable(sal_False);
1903 m_aVertFT.Enable(sal_False);
1904 m_aVertLB.Enable(sal_False);
1905 m_aVertByFT.Enable(sal_False);
1906 m_aVertByMF.Enable(sal_False);
1907 m_aVertToFT.Enable(sal_False);
1908 m_aVertToLB.Enable(sal_False);
1909 m_aFollowCB.Enable(sal_False);
1910 m_aHoriByMF.SetText(String());
1911 m_aVertByMF.SetText(String());
1912
1913 m_bPositioningDisabled = true;
1914 return;
1915 }
1916 }
1917 }
1918 Point aPt = m_aAnchorPos * -1;
1919 Point aPt2 = aPt;
1920
1921 aPt += m_aWorkArea.TopLeft();
1922 m_aWorkArea.SetPos( aPt );
1923
1924 aPt2 += m_aRect.TopLeft();
1925 m_aRect.SetPos( aPt2 );
1926 }
1927
1928 // this should happen via SID_ATTR_TRANSFORM_AUTOSIZE
1929 if( rMarkList.GetMarkCount() == 1 )
1930 {
1931 const SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
1932 SdrObjKind eKind = (SdrObjKind) pObj->GetObjIdentifier();
1933 if( ( pObj->GetObjInventor() == SdrInventor ) &&
1934 ( eKind==OBJ_TEXT || eKind==OBJ_TITLETEXT || eKind==OBJ_OUTLINETEXT) &&
1935 pObj->HasText() )
1936 {
1937 DBG_ERROR("AutoWidth/AutoHeight should be enabled");
1938 }
1939 }
1940 else
1941 m_bIsMultiSelection = true;
1942
1943 // use page offset and recalculate
1944 Point aPt( m_pSdrView->GetSdrPageView()->GetPageOrigin() );
1945
1946 // Massstab
1947 Fraction aUIScale = m_pSdrView->GetModel()->GetUIScale();
1948
1949 // lcl_ScaleRect( m_aWorkArea, aUIScale );
1950 // lcl_ScaleRect( m_aRect, aUIScale );
1951 // lcl_ScalePoint( aPt, aUIScale );
1952
1953 // Metrik konvertieren
1954 // int nDigits = maMtrPosX.GetDecimalDigits();
1955
1956 // aPt = lcl_ConvertPoint( aPt, nDigits, (MapUnit) mePoolUnit, meDlgUnit );
1957 // m_aWorkArea = lcl_ConvertRect( m_aWorkArea, nDigits, (MapUnit) mePoolUnit, meDlgUnit );
1958 // m_aRect = lcl_ConvertRect( m_aRect, nDigits, (MapUnit) mePoolUnit, meDlgUnit );
1959
1960 // use page offset
1961 // aPt *= -1;
1962 // aPt += m_aWorkArea.TopLeft();
1963 // m_aWorkArea.SetPos( aPt );
1964
1965 //SetMinMaxPosition();
1966 }
1967
1968