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