Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <com/sun/star/embed/Aspects.hpp>
21 : #include <com/sun/star/embed/EmbedMisc.hpp>
22 :
23 : #include <cmdid.h>
24 : #include <helpid.h>
25 : #include <hintids.hxx>
26 : #include <vcl/msgbox.hxx>
27 : #include <vcl/mnemonic.hxx>
28 : #include <svl/urihelper.hxx>
29 : #include <svl/stritem.hxx>
30 : #include <svx/htmlmode.hxx>
31 : #include <editeng/sizeitem.hxx>
32 : #include <editeng/opaqitem.hxx>
33 : #include <editeng/protitem.hxx>
34 : #include <editeng/prntitem.hxx>
35 : #include <editeng/brshitem.hxx>
36 : #include <editeng/ulspitem.hxx>
37 : #include <editeng/frmdiritem.hxx>
38 : #include <svx/swframevalidation.hxx>
39 : #include <sot/clsids.hxx>
40 :
41 : #include <sfx2/viewfrm.hxx>
42 : #include <fmturl.hxx>
43 : #include <fmteiro.hxx>
44 : #include <fmtcnct.hxx>
45 : #include <view.hxx>
46 : #include <wrtsh.hxx>
47 : #include <swmodule.hxx>
48 : #include <uitool.hxx>
49 : #include <docsh.hxx>
50 : #include <viewopt.hxx>
51 : #include <frmatr.hxx>
52 : #include <frmdlg.hxx>
53 : #include <frmmgr.hxx>
54 : #include <frmpage.hxx>
55 : #include <wrap.hxx>
56 : #include <colmgr.hxx>
57 : #include <grfatr.hxx>
58 : #include <uiitems.hxx>
59 : #include <fmtfollowtextflow.hxx>
60 :
61 : #include <frmui.hrc>
62 : #include <frmpage.hrc>
63 : #include <sfx2/filedlghelper.hxx>
64 : #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
65 : #include <com/sun/star/ui/dialogs/XFilePicker.hpp>
66 : #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
67 : #include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
68 : #include <svtools/filter.hxx>
69 :
70 : using namespace ::com::sun::star;
71 : using ::rtl::OUString;
72 : using namespace ::sfx2;
73 :
74 : #define SwFPos SvxSwFramePosString
75 :
76 : struct FrmMap
77 : {
78 : SvxSwFramePosString::StringId eStrId;
79 : SvxSwFramePosString::StringId eMirrorStrId;
80 : sal_uInt16 nAlign;
81 : sal_uLong nLBRelations;
82 : };
83 :
84 : struct RelationMap
85 : {
86 : SvxSwFramePosString::StringId eStrId;
87 : SvxSwFramePosString::StringId eMirrorStrId;
88 : sal_uLong nLBRelation;
89 : sal_uInt16 nRelation;
90 : };
91 :
92 : struct StringIdPair_Impl
93 : {
94 : SvxSwFramePosString::StringId eHori;
95 : SvxSwFramePosString::StringId eVert;
96 : };
97 :
98 : #define MAX_PERCENT_WIDTH 254L
99 : #define MAX_PERCENT_HEIGHT 254L
100 :
101 : #define LB_FRAME 0x00000001L // text region of the paragraph
102 : #define LB_PRTAREA 0x00000002L // text region of the paragraph + indentions
103 : #define LB_VERT_FRAME 0x00000004L // vertical text region of the paragraph
104 : #define LB_VERT_PRTAREA 0x00000008L // vertival text region of the paragraph + indentions
105 : #define LB_REL_FRM_LEFT 0x00000010L // left paragraph edge
106 : #define LB_REL_FRM_RIGHT 0x00000020L // right paragraph edge
107 :
108 : #define LB_REL_PG_LEFT 0x00000040L // left page edge
109 : #define LB_REL_PG_RIGHT 0x00000080L // right page edge
110 : #define LB_REL_PG_FRAME 0x00000100L // whole page
111 : #define LB_REL_PG_PRTAREA 0x00000200L // text region of the page
112 :
113 : #define LB_FLY_REL_PG_LEFT 0x00000400L // left frame edge
114 : #define LB_FLY_REL_PG_RIGHT 0x00000800L // right frame edge
115 : #define LB_FLY_REL_PG_FRAME 0x00001000L // whole frame
116 : #define LB_FLY_REL_PG_PRTAREA 0x00002000L // inside of the frame
117 :
118 : #define LB_REL_BASE 0x00010000L // character alignment Base
119 : #define LB_REL_CHAR 0x00020000L // character alignment Character
120 : #define LB_REL_ROW 0x00040000L // character alignment Row
121 :
122 : #define LB_FLY_VERT_FRAME 0x00100000L // vertical entire frame
123 : #define LB_FLY_VERT_PRTAREA 0x00200000L // vertical frame text area
124 :
125 : #define LB_VERT_LINE 0x00400000L // vertical text line
126 :
127 : static RelationMap aRelationMap[] =
128 : {
129 : {SwFPos::FRAME, SwFPos::FRAME, LB_FRAME, text::RelOrientation::FRAME},
130 : {SwFPos::PRTAREA, SwFPos::PRTAREA, LB_PRTAREA, text::RelOrientation::PRINT_AREA},
131 : {SwFPos::REL_PG_LEFT, SwFPos::MIR_REL_PG_LEFT, LB_REL_PG_LEFT, text::RelOrientation::PAGE_LEFT},
132 : {SwFPos::REL_PG_RIGHT, SwFPos::MIR_REL_PG_RIGHT, LB_REL_PG_RIGHT, text::RelOrientation::PAGE_RIGHT},
133 : {SwFPos::REL_FRM_LEFT, SwFPos::MIR_REL_FRM_LEFT, LB_REL_FRM_LEFT, text::RelOrientation::FRAME_LEFT},
134 : {SwFPos::REL_FRM_RIGHT, SwFPos::MIR_REL_FRM_RIGHT, LB_REL_FRM_RIGHT, text::RelOrientation::FRAME_RIGHT},
135 : {SwFPos::REL_PG_FRAME, SwFPos::REL_PG_FRAME, LB_REL_PG_FRAME, text::RelOrientation::PAGE_FRAME},
136 : {SwFPos::REL_PG_PRTAREA, SwFPos::REL_PG_PRTAREA, LB_REL_PG_PRTAREA, text::RelOrientation::PAGE_PRINT_AREA},
137 : {SwFPos::REL_CHAR, SwFPos::REL_CHAR, LB_REL_CHAR, text::RelOrientation::CHAR},
138 :
139 : {SwFPos::FLY_REL_PG_LEFT, SwFPos::FLY_MIR_REL_PG_LEFT, LB_FLY_REL_PG_LEFT, text::RelOrientation::PAGE_LEFT},
140 : {SwFPos::FLY_REL_PG_RIGHT, SwFPos::FLY_MIR_REL_PG_RIGHT, LB_FLY_REL_PG_RIGHT, text::RelOrientation::PAGE_RIGHT},
141 : {SwFPos::FLY_REL_PG_FRAME, SwFPos::FLY_REL_PG_FRAME, LB_FLY_REL_PG_FRAME, text::RelOrientation::PAGE_FRAME},
142 : {SwFPos::FLY_REL_PG_PRTAREA, SwFPos::FLY_REL_PG_PRTAREA, LB_FLY_REL_PG_PRTAREA, text::RelOrientation::PAGE_PRINT_AREA},
143 :
144 : {SwFPos::REL_BORDER, SwFPos::REL_BORDER, LB_VERT_FRAME, text::RelOrientation::FRAME},
145 : {SwFPos::REL_PRTAREA, SwFPos::REL_PRTAREA, LB_VERT_PRTAREA, text::RelOrientation::PRINT_AREA},
146 :
147 : {SwFPos::FLY_REL_PG_FRAME, SwFPos::FLY_REL_PG_FRAME, LB_FLY_VERT_FRAME, text::RelOrientation::FRAME},
148 : {SwFPos::FLY_REL_PG_PRTAREA, SwFPos::FLY_REL_PG_PRTAREA, LB_FLY_VERT_PRTAREA, text::RelOrientation::PRINT_AREA},
149 :
150 : {SwFPos::REL_LINE, SwFPos::REL_LINE, LB_VERT_LINE, text::RelOrientation::TEXT_LINE}
151 : };
152 :
153 : static RelationMap aAsCharRelationMap[] =
154 : {
155 : {SwFPos::REL_BASE, SwFPos::REL_BASE, LB_REL_BASE, text::RelOrientation::FRAME},
156 : {SwFPos::REL_CHAR, SwFPos::REL_CHAR, LB_REL_CHAR, text::RelOrientation::FRAME},
157 : {SwFPos::REL_ROW, SwFPos::REL_ROW, LB_REL_ROW, text::RelOrientation::FRAME}
158 : };
159 :
160 : /*--------------------------------------------------------------------
161 : Description: site anchored
162 : --------------------------------------------------------------------*/
163 : #define HORI_PAGE_REL (LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_PG_LEFT| \
164 : LB_REL_PG_RIGHT)
165 :
166 : static FrmMap aHPageMap[] =
167 : {
168 : {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, HORI_PAGE_REL},
169 : {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, HORI_PAGE_REL},
170 : {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, text::HoriOrientation::CENTER, HORI_PAGE_REL},
171 : {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, HORI_PAGE_REL}
172 : };
173 :
174 : static FrmMap aHPageHtmlMap[] =
175 : {
176 : {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, LB_REL_PG_FRAME}
177 : };
178 :
179 : #define VERT_PAGE_REL (LB_REL_PG_FRAME|LB_REL_PG_PRTAREA)
180 :
181 : static FrmMap aVPageMap[] =
182 : {
183 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, VERT_PAGE_REL},
184 : {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::BOTTOM, VERT_PAGE_REL},
185 : {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, VERT_PAGE_REL},
186 : {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, VERT_PAGE_REL}
187 : };
188 :
189 : static FrmMap aVPageHtmlMap[] =
190 : {
191 : {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, LB_REL_PG_FRAME}
192 : };
193 :
194 : /*--------------------------------------------------------------------
195 : Description: frame anchored
196 : --------------------------------------------------------------------*/
197 : #define HORI_FRAME_REL (LB_FLY_REL_PG_FRAME|LB_FLY_REL_PG_PRTAREA| \
198 : LB_FLY_REL_PG_LEFT|LB_FLY_REL_PG_RIGHT)
199 :
200 : static FrmMap aHFrameMap[] =
201 : {
202 : {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, HORI_FRAME_REL},
203 : {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, HORI_FRAME_REL},
204 : {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, text::HoriOrientation::CENTER, HORI_FRAME_REL},
205 : {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, HORI_FRAME_REL}
206 : };
207 :
208 : static FrmMap aHFlyHtmlMap[] =
209 : {
210 : {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, LB_FLY_REL_PG_FRAME},
211 : {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, LB_FLY_REL_PG_FRAME}
212 : };
213 :
214 : // own vertical alignment map for objects anchored to frame
215 : #define VERT_FRAME_REL (LB_FLY_VERT_FRAME|LB_FLY_VERT_PRTAREA)
216 :
217 : static FrmMap aVFrameMap[] =
218 : {
219 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, VERT_FRAME_REL},
220 : {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::BOTTOM, VERT_FRAME_REL},
221 : {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, VERT_FRAME_REL},
222 : {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, VERT_FRAME_REL}
223 : };
224 :
225 : static FrmMap aVFlyHtmlMap[] =
226 : {
227 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, LB_FLY_VERT_FRAME},
228 : {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, LB_FLY_VERT_FRAME}
229 : };
230 :
231 : /*--------------------------------------------------------------------
232 : Description: paragraph anchored
233 : --------------------------------------------------------------------*/
234 : #define HORI_PARA_REL (LB_FRAME|LB_PRTAREA|LB_REL_PG_LEFT|LB_REL_PG_RIGHT| \
235 : LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_FRM_LEFT| \
236 : LB_REL_FRM_RIGHT)
237 :
238 : static FrmMap aHParaMap[] =
239 : {
240 : {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, HORI_PARA_REL},
241 : {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, HORI_PARA_REL},
242 : {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, text::HoriOrientation::CENTER, HORI_PARA_REL},
243 : {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, HORI_PARA_REL}
244 : };
245 :
246 : #define HTML_HORI_PARA_REL (LB_FRAME|LB_PRTAREA)
247 :
248 : static FrmMap aHParaHtmlMap[] =
249 : {
250 : {SwFPos::LEFT, SwFPos::LEFT, text::HoriOrientation::LEFT, HTML_HORI_PARA_REL},
251 : {SwFPos::RIGHT, SwFPos::RIGHT, text::HoriOrientation::RIGHT, HTML_HORI_PARA_REL}
252 : };
253 :
254 : static FrmMap aHParaHtmlAbsMap[] =
255 : {
256 : {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, HTML_HORI_PARA_REL},
257 : {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, HTML_HORI_PARA_REL}
258 : };
259 :
260 : // allow vertical alignment at page areas
261 : #define VERT_PARA_REL (LB_VERT_FRAME|LB_VERT_PRTAREA| \
262 : LB_REL_PG_FRAME|LB_REL_PG_PRTAREA)
263 :
264 : static FrmMap aVParaMap[] =
265 : {
266 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, VERT_PARA_REL},
267 : {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::BOTTOM, VERT_PARA_REL},
268 : {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, VERT_PARA_REL},
269 : {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, VERT_PARA_REL}
270 : };
271 :
272 : static FrmMap aVParaHtmlMap[] =
273 : {
274 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, LB_VERT_PRTAREA}
275 : };
276 :
277 : /*--------------------------------------------------------------------
278 : Description: anchored relative to the character
279 : --------------------------------------------------------------------*/
280 : #define HORI_CHAR_REL (LB_FRAME|LB_PRTAREA|LB_REL_PG_LEFT|LB_REL_PG_RIGHT| \
281 : LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_FRM_LEFT| \
282 : LB_REL_FRM_RIGHT|LB_REL_CHAR)
283 :
284 : static FrmMap aHCharMap[] =
285 : {
286 : {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, HORI_CHAR_REL},
287 : {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, HORI_CHAR_REL},
288 : {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, text::HoriOrientation::CENTER, HORI_CHAR_REL},
289 : {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, HORI_CHAR_REL}
290 : };
291 :
292 : #define HTML_HORI_CHAR_REL (LB_FRAME|LB_PRTAREA|LB_REL_CHAR)
293 :
294 : static FrmMap aHCharHtmlMap[] =
295 : {
296 : {SwFPos::LEFT, SwFPos::LEFT, text::HoriOrientation::LEFT, HTML_HORI_CHAR_REL},
297 : {SwFPos::RIGHT, SwFPos::RIGHT, text::HoriOrientation::RIGHT, HTML_HORI_CHAR_REL}
298 : };
299 :
300 : static FrmMap aHCharHtmlAbsMap[] =
301 : {
302 : {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, LB_PRTAREA|LB_REL_CHAR},
303 : {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, LB_PRTAREA},
304 : {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, LB_REL_PG_FRAME}
305 : };
306 :
307 : // allow vertical alignment at page areas
308 : #define VERT_CHAR_REL (LB_VERT_FRAME|LB_VERT_PRTAREA| \
309 : LB_REL_PG_FRAME|LB_REL_PG_PRTAREA)
310 :
311 : static FrmMap aVCharMap[] =
312 : {
313 : // introduce mappings for new vertical alignment at top of line <LB_VERT_LINE>
314 : // and correct mapping for vertical alignment at character for position <FROM_BOTTOM>
315 : // Note: Because of these adjustments the map becomes ambigous in its values
316 : // <eStrId>/<eMirrorStrId> and <nAlign>. These ambiguities are considered
317 : // in the methods <SwFrmPage::FillRelLB(..)>, <SwFrmPage::GetAlignment(..)>
318 : // and <SwFrmPage::FillPosLB(..)>
319 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, VERT_CHAR_REL|LB_REL_CHAR},
320 : {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::BOTTOM, VERT_CHAR_REL|LB_REL_CHAR},
321 : {SwFPos::BELOW, SwFPos::BELOW, text::VertOrientation::CHAR_BOTTOM, LB_REL_CHAR},
322 : {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, VERT_CHAR_REL|LB_REL_CHAR},
323 : {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, VERT_CHAR_REL},
324 : {SwFPos::FROMBOTTOM, SwFPos::FROMBOTTOM, text::VertOrientation::NONE, LB_REL_CHAR|LB_VERT_LINE},
325 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::LINE_TOP, LB_VERT_LINE},
326 : {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::LINE_BOTTOM, LB_VERT_LINE},
327 : {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::LINE_CENTER, LB_VERT_LINE}
328 : };
329 :
330 : static FrmMap aVCharHtmlMap[] =
331 : {
332 : {SwFPos::BELOW, SwFPos::BELOW, text::VertOrientation::CHAR_BOTTOM, LB_REL_CHAR}
333 : };
334 :
335 : static FrmMap aVCharHtmlAbsMap[] =
336 : {
337 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, LB_REL_CHAR},
338 : {SwFPos::BELOW, SwFPos::BELOW, text::VertOrientation::CHAR_BOTTOM, LB_REL_CHAR}
339 : };
340 :
341 : /*--------------------------------------------------------------------
342 : Description: anchored as character
343 : --------------------------------------------------------------------*/
344 : static FrmMap aVAsCharMap[] =
345 : {
346 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, LB_REL_BASE},
347 : {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::BOTTOM, LB_REL_BASE},
348 : {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, LB_REL_BASE},
349 :
350 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::CHAR_TOP, LB_REL_CHAR},
351 : {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::CHAR_BOTTOM, LB_REL_CHAR},
352 : {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CHAR_CENTER, LB_REL_CHAR},
353 :
354 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::LINE_TOP, LB_REL_ROW},
355 : {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::LINE_BOTTOM, LB_REL_ROW},
356 : {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::LINE_CENTER, LB_REL_ROW},
357 :
358 : {SwFPos::FROMBOTTOM, SwFPos::FROMBOTTOM, text::VertOrientation::NONE, LB_REL_BASE}
359 : };
360 :
361 : static FrmMap aVAsCharHtmlMap[] =
362 : {
363 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, LB_REL_BASE},
364 : {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, LB_REL_BASE},
365 :
366 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::CHAR_TOP, LB_REL_CHAR},
367 :
368 : {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::LINE_TOP, LB_REL_ROW},
369 : {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::LINE_BOTTOM, LB_REL_ROW},
370 : {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::LINE_CENTER, LB_REL_ROW}
371 : };
372 :
373 : static sal_uInt16 aPageRg[] = {
374 : RES_FRM_SIZE, RES_FRM_SIZE,
375 : RES_VERT_ORIENT, RES_ANCHOR,
376 : RES_COL, RES_COL,
377 : RES_FOLLOW_TEXT_FLOW, RES_FOLLOW_TEXT_FLOW,
378 : 0
379 : };
380 : static sal_uInt16 aAddPgRg[] = {
381 : RES_PROTECT, RES_PROTECT,
382 : RES_PRINT, RES_PRINT,
383 : FN_SET_FRM_NAME, FN_SET_FRM_NAME,
384 : FN_SET_FRM_ALT_NAME, FN_SET_FRM_ALT_NAME,
385 : 0
386 : };
387 :
388 0 : static size_t lcl_GetFrmMapCount( const FrmMap* pMap)
389 : {
390 0 : if ( pMap )
391 : {
392 0 : int aSizeOf = sizeof(FrmMap);
393 0 : if( pMap == aVParaHtmlMap)
394 0 : return sizeof(aVParaHtmlMap) / aSizeOf;
395 0 : if( pMap == aVAsCharHtmlMap)
396 0 : return sizeof(aVAsCharHtmlMap) / aSizeOf;
397 0 : if( pMap == aHParaHtmlMap)
398 0 : return sizeof(aHParaHtmlMap) / aSizeOf;
399 0 : if( pMap == aHParaHtmlAbsMap)
400 0 : return sizeof(aHParaHtmlAbsMap) / aSizeOf;
401 0 : if ( pMap == aVPageMap )
402 0 : return sizeof(aVPageMap) / aSizeOf;
403 0 : if ( pMap == aVPageHtmlMap )
404 0 : return sizeof(aVPageHtmlMap) / aSizeOf;
405 0 : if ( pMap == aVAsCharMap )
406 0 : return sizeof(aVAsCharMap) / aSizeOf;
407 0 : if ( pMap == aVParaMap )
408 0 : return sizeof(aVParaMap) / aSizeOf;
409 0 : if ( pMap == aHParaMap )
410 0 : return sizeof(aHParaMap) / aSizeOf;
411 0 : if ( pMap == aHFrameMap )
412 0 : return sizeof(aHFrameMap) / aSizeOf;
413 0 : if ( pMap == aVFrameMap )
414 0 : return sizeof(aVFrameMap) / aSizeOf;
415 0 : if ( pMap == aHCharMap )
416 0 : return sizeof(aHCharMap) / aSizeOf;
417 0 : if ( pMap == aHCharHtmlMap )
418 0 : return sizeof(aHCharHtmlMap) / aSizeOf;
419 0 : if ( pMap == aHCharHtmlAbsMap )
420 0 : return sizeof(aHCharHtmlAbsMap) / aSizeOf;
421 0 : if ( pMap == aVCharMap )
422 0 : return sizeof(aVCharMap) / aSizeOf;
423 0 : if ( pMap == aVCharHtmlMap )
424 0 : return sizeof(aVCharHtmlMap) / aSizeOf;
425 0 : if ( pMap == aVCharHtmlAbsMap )
426 0 : return sizeof(aVCharHtmlAbsMap) / aSizeOf;
427 0 : if ( pMap == aHPageHtmlMap )
428 0 : return sizeof(aHPageHtmlMap) / aSizeOf;
429 0 : if ( pMap == aHFlyHtmlMap )
430 0 : return sizeof(aHFlyHtmlMap) / aSizeOf;
431 0 : if ( pMap == aVFlyHtmlMap )
432 0 : return sizeof(aVFlyHtmlMap) / aSizeOf;
433 0 : return sizeof(aHPageMap) / aSizeOf;
434 : }
435 0 : return 0;
436 : }
437 :
438 0 : static void lcl_InsertVectors(ListBox& rBox,
439 : const ::std::vector< String >& rPrev, const ::std::vector< String >& rThis,
440 : const ::std::vector< String >& rNext, const ::std::vector< String >& rRemain)
441 : {
442 0 : ::std::vector< String >::const_iterator aIt;
443 0 : sal_uInt16 nEntry = 0;
444 0 : for(aIt = rPrev.begin(); aIt != rPrev.end(); ++aIt)
445 0 : nEntry = rBox.InsertEntry(*aIt);
446 0 : for(aIt = rThis.begin(); aIt != rThis.end(); ++aIt)
447 0 : nEntry = rBox.InsertEntry(*aIt);
448 0 : for(aIt = rNext.begin(); aIt != rNext.end(); ++aIt)
449 0 : nEntry = rBox.InsertEntry(*aIt);
450 0 : rBox.SetSeparatorPos(nEntry);
451 : //now insert all strings sorted
452 0 : sal_uInt16 nStartPos = rBox.GetEntryCount();
453 :
454 0 : for(aIt = rPrev.begin(); aIt != rPrev.end(); ++aIt)
455 0 : ::InsertStringSorted(*aIt, rBox, nStartPos );
456 0 : for(aIt = rThis.begin(); aIt != rThis.end(); ++aIt)
457 0 : ::InsertStringSorted(*aIt, rBox, nStartPos );
458 0 : for(aIt = rNext.begin(); aIt != rNext.end(); ++aIt)
459 0 : ::InsertStringSorted(*aIt, rBox, nStartPos );
460 0 : for(aIt = rRemain.begin(); aIt != rRemain.end(); ++aIt)
461 0 : ::InsertStringSorted(*aIt, rBox, nStartPos );
462 0 : }
463 :
464 : // --> OD 2009-08-31 #mongolianlayout#
465 : // add input parameter
466 0 : static SvxSwFramePosString::StringId lcl_ChangeResIdToVerticalOrRTL(SvxSwFramePosString::StringId eStringId, sal_Bool bVertical, sal_Bool bVerticalL2R, sal_Bool bRTL)
467 : {
468 : //special handling of STR_FROMLEFT
469 0 : if ( SwFPos::FROMLEFT == eStringId )
470 : {
471 : eStringId = bVertical
472 : ? ( bRTL
473 : ? SwFPos::FROMBOTTOM
474 : : SwFPos::FROMTOP )
475 : : ( bRTL
476 : ? SwFPos::FROMRIGHT
477 0 : : SwFPos::FROMLEFT );
478 0 : return eStringId;
479 : }
480 : // --> OD 2009-08-31 #mongolianlayout#
481 : // special handling of STR_FROMTOP in case of mongolianlayout (vertical left-to-right)
482 0 : if ( SwFPos::FROMTOP == eStringId &&
483 : bVertical && bVerticalL2R )
484 : {
485 0 : eStringId = SwFPos::FROMLEFT;
486 0 : return eStringId;
487 : }
488 0 : if ( bVertical )
489 : {
490 : //exchange horizontal strings with vertical strings and vice versa
491 : static const StringIdPair_Impl aHoriIds[] =
492 : {
493 : {SwFPos::LEFT, SwFPos::TOP},
494 : {SwFPos::RIGHT, SwFPos::BOTTOM},
495 : {SwFPos::CENTER_HORI, SwFPos::CENTER_VERT},
496 : {SwFPos::FROMTOP, SwFPos::FROMRIGHT},
497 : {SwFPos::REL_PG_LEFT, SwFPos::REL_PG_TOP},
498 : {SwFPos::REL_PG_RIGHT, SwFPos::REL_PG_BOTTOM} ,
499 : {SwFPos::REL_FRM_LEFT, SwFPos::REL_FRM_TOP},
500 : {SwFPos::REL_FRM_RIGHT, SwFPos::REL_FRM_BOTTOM}
501 : };
502 : static const StringIdPair_Impl aVertIds[] =
503 : {
504 : {SwFPos::TOP, SwFPos::RIGHT},
505 : {SwFPos::BOTTOM, SwFPos::LEFT },
506 : {SwFPos::CENTER_VERT, SwFPos::CENTER_HORI},
507 : {SwFPos::FROMTOP, SwFPos::FROMRIGHT },
508 : {SwFPos::REL_PG_TOP, SwFPos::REL_PG_LEFT },
509 : {SwFPos::REL_PG_BOTTOM, SwFPos::REL_PG_RIGHT } ,
510 : {SwFPos::REL_FRM_TOP, SwFPos::REL_FRM_LEFT },
511 : {SwFPos::REL_FRM_BOTTOM, SwFPos::REL_FRM_RIGHT }
512 : };
513 : // --> OD 2009-08-31 #monglianlayout#
514 : static const StringIdPair_Impl aVertL2RIds[] =
515 : {
516 : {SwFPos::TOP, SwFPos::LEFT },
517 : {SwFPos::BOTTOM, SwFPos::RIGHT },
518 : {SwFPos::CENTER_VERT, SwFPos::CENTER_HORI },
519 : {SwFPos::FROMTOP, SwFPos::FROMLEFT },
520 : {SwFPos::REL_PG_TOP, SwFPos::REL_PG_LEFT },
521 : {SwFPos::REL_PG_BOTTOM, SwFPos::REL_PG_RIGHT } ,
522 : {SwFPos::REL_FRM_TOP, SwFPos::REL_FRM_LEFT },
523 : {SwFPos::REL_FRM_BOTTOM, SwFPos::REL_FRM_RIGHT }
524 : };
525 : sal_uInt16 nIndex;
526 0 : for(nIndex = 0; nIndex < sizeof(aHoriIds) / sizeof(StringIdPair_Impl); ++nIndex)
527 : {
528 0 : if(aHoriIds[nIndex].eHori == eStringId)
529 : {
530 0 : eStringId = aHoriIds[nIndex].eVert;
531 0 : return eStringId;
532 : }
533 : }
534 0 : nIndex = 0;
535 0 : for(nIndex = 0; nIndex < sizeof(aVertIds) / sizeof(StringIdPair_Impl); ++nIndex)
536 : {
537 : // --> OD 2009-08-31 #mongolianlayout#
538 0 : if ( !bVerticalL2R )
539 : {
540 0 : if(aVertIds[nIndex].eHori == eStringId)
541 : {
542 0 : eStringId = aVertIds[nIndex].eVert;
543 0 : break;
544 : }
545 : }
546 : else
547 : {
548 0 : if(aVertL2RIds[nIndex].eHori == eStringId)
549 : {
550 0 : eStringId = aVertL2RIds[nIndex].eVert;
551 0 : break;
552 : }
553 : }
554 : }
555 : }
556 0 : return eStringId;
557 : }
558 :
559 : // helper method in order to determine all possible
560 : // listbox relations in a relation map for a given relation
561 0 : static sal_uLong lcl_GetLBRelationsForRelations( const sal_uInt16 _nRel )
562 : {
563 0 : sal_uLong nLBRelations = 0L;
564 :
565 0 : sal_uInt16 nRelMapSize = sizeof(aRelationMap) / sizeof(RelationMap);
566 0 : for ( sal_uInt16 nRelMapPos = 0; nRelMapPos < nRelMapSize; ++nRelMapPos )
567 : {
568 0 : if ( aRelationMap[nRelMapPos].nRelation == _nRel )
569 : {
570 0 : nLBRelations |= aRelationMap[nRelMapPos].nLBRelation;
571 : }
572 : }
573 :
574 0 : return nLBRelations;
575 : }
576 :
577 : // helper method on order to determine all possible
578 : // listbox relations in a relation map for a given string ID
579 0 : static sal_uLong lcl_GetLBRelationsForStrID( const FrmMap* _pMap,
580 : const SvxSwFramePosString::StringId _eStrId,
581 : const bool _bUseMirrorStr )
582 : {
583 0 : sal_uLong nLBRelations = 0L;
584 :
585 0 : size_t nRelMapSize = lcl_GetFrmMapCount( _pMap );
586 0 : for ( size_t nRelMapPos = 0; nRelMapPos < nRelMapSize; ++nRelMapPos )
587 : {
588 0 : if ( ( !_bUseMirrorStr && _pMap[nRelMapPos].eStrId == _eStrId ) ||
589 0 : ( _bUseMirrorStr && _pMap[nRelMapPos].eMirrorStrId == _eStrId ) )
590 : {
591 0 : nLBRelations |= _pMap[nRelMapPos].nLBRelations;
592 : }
593 : }
594 :
595 0 : return nLBRelations;
596 : }
597 :
598 : /*--------------------------------------------------------------------
599 : Description: standard frame TabPage
600 : --------------------------------------------------------------------*/
601 : namespace
602 : {
603 0 : void HandleAutoCB( sal_Bool _bChecked, FixedText& _rFT_man, FixedText& _rFT_auto )
604 : {
605 0 : _rFT_man.Show( !_bChecked );
606 0 : _rFT_auto.Show( _bChecked );
607 0 : }
608 : }
609 :
610 0 : SwFrmPage::SwFrmPage ( Window *pParent, const SfxItemSet &rSet ) :
611 : SfxTabPage (pParent, SW_RES(TP_FRM_STD), rSet),
612 :
613 : aSizeFL (this, SW_RES(FL_SIZE)),
614 : aWidthFT (this, SW_RES(FT_WIDTH)),
615 : aWidthAutoFT (this, SW_RES(FT_WIDTH_AUTO)),
616 : aWidthED (this, SW_RES(ED_WIDTH)),
617 : aRelWidthCB (this, SW_RES(CB_REL_WIDTH)),
618 : aAutoWidthCB (this, SW_RES(CB_AUTOWIDTH)),
619 : aHeightFT (this, SW_RES(FT_HEIGHT)),
620 : aHeightAutoFT (this, SW_RES(FT_HEIGHT_AUTO)),
621 : aHeightED (this, SW_RES(ED_HEIGHT)),
622 : aRelHeightCB (this, SW_RES(CB_REL_HEIGHT)),
623 : aAutoHeightCB (this, SW_RES(CB_AUTOHEIGHT)),
624 : aFixedRatioCB (this, SW_RES(CB_FIXEDRATIO)),
625 : aRealSizeBT (this, SW_RES(BT_REALSIZE)),
626 :
627 : aTypeSepFL (this, SW_RES(FL_TYPE_SEP)),
628 : aTypeFL (this, SW_RES(FL_TYPE)),
629 : aAnchorAtPageRB (this, SW_RES(RB_ANCHOR_PAGE)),
630 : aAnchorAtParaRB (this, SW_RES(RB_ANCHOR_PARA)),
631 : aAnchorAtCharRB (this, SW_RES(RB_ANCHOR_AT_CHAR)),
632 : aAnchorAsCharRB (this, SW_RES(RB_ANCHOR_AS_CHAR)),
633 : aAnchorAtFrameRB(this, SW_RES(RB_ANCHOR_FRAME)),
634 :
635 : aPositionFL (this, SW_RES(FL_POSITION)),
636 : aHorizontalFT (this, SW_RES(FT_HORIZONTAL)),
637 : aHorizontalDLB (this, SW_RES(DLB_HORIZONTAL)),
638 : aAtHorzPosFT (this, SW_RES(FT_AT_HORZ_POS)),
639 : aAtHorzPosED (this, SW_RES(ED_AT_HORZ_POS)),
640 : aHoriRelationFT (this, SW_RES(FT_HORI_RELATION)),
641 : aHoriRelationLB (this, SW_RES(LB_HORI_RELATION)),
642 : aMirrorPagesCB (this, SW_RES(CB_MIRROR)),
643 : aVerticalFT (this, SW_RES(FT_VERTICAL)),
644 : aVerticalDLB (this, SW_RES(DLB_VERTICAL)),
645 : aAtVertPosFT (this, SW_RES(FT_AT_VERT_POS)),
646 : aAtVertPosED (this, SW_RES(ED_AT_VERT_POS)),
647 : aVertRelationFT (this, SW_RES(FT_VERT_RELATION)),
648 : aVertRelationLB (this, SW_RES(LB_VERT_RELATION)),
649 : aFollowTextFlowCB(this, SW_RES(CB_FOLLOWTEXTFLOW)),
650 :
651 : aExampleWN (this, SW_RES(WN_BSP)),
652 :
653 : bAtHorzPosModified( sal_False ),
654 : bAtVertPosModified( sal_False ),
655 : bFormat(sal_False),
656 : bNew(sal_True),
657 : bNoModifyHdl(sal_True),
658 : // --> OD 2009-08-31 #mongolianlayout# - no used
659 : // bVerticalChanged(sal_False),
660 : bIsVerticalFrame(sal_False),
661 : bIsVerticalL2R(sal_False),
662 : bIsInRightToLeft(sal_False),
663 : bHtmlMode(sal_False),
664 : nHtmlMode(0),
665 : nDlgType(0),
666 : nUpperBorder(0),
667 : nLowerBorder(0),
668 : fWidthHeightRatio(1.0),
669 : mpToCharCntntPos( NULL ),
670 :
671 : nOldH(text::HoriOrientation::CENTER),
672 : nOldHRel(text::RelOrientation::FRAME),
673 : nOldV(text::VertOrientation::TOP),
674 : nOldVRel(text::RelOrientation::PRINT_AREA),
675 : pVMap( 0 ),
676 : pHMap( 0 ),
677 : m_bAllowVertPositioning( true ),
678 : m_bIsMathOLE( false ),
679 0 : m_bIsMathBaselineAlignment( true )
680 : {
681 0 : FreeResource();
682 0 : SetExchangeSupport();
683 :
684 0 : aRealSizeBT.SetAccessibleRelationMemberOf(&aSizeFL);
685 :
686 0 : Link aLk = LINK(this, SwFrmPage, RangeModifyHdl);
687 0 : aWidthED. SetLoseFocusHdl( aLk );
688 0 : aHeightED. SetLoseFocusHdl( aLk );
689 0 : aAtHorzPosED.SetLoseFocusHdl( aLk );
690 0 : aAtVertPosED.SetLoseFocusHdl( aLk );
691 0 : aFollowTextFlowCB.SetClickHdl( aLk );
692 :
693 0 : aLk = LINK(this, SwFrmPage, ModifyHdl);
694 0 : aWidthED. SetModifyHdl( aLk );
695 0 : aHeightED. SetModifyHdl( aLk );
696 0 : aAtHorzPosED.SetModifyHdl( aLk );
697 0 : aAtVertPosED.SetModifyHdl( aLk );
698 :
699 0 : aLk = LINK(this, SwFrmPage, AnchorTypeHdl);
700 0 : aAnchorAtPageRB.SetClickHdl( aLk );
701 0 : aAnchorAtParaRB.SetClickHdl( aLk );
702 0 : aAnchorAtCharRB.SetClickHdl( aLk );
703 0 : aAnchorAsCharRB.SetClickHdl( aLk );
704 0 : aAnchorAtFrameRB.SetClickHdl( aLk );
705 :
706 0 : aHorizontalDLB.SetSelectHdl(LINK(this, SwFrmPage, PosHdl));
707 0 : aVerticalDLB. SetSelectHdl(LINK(this, SwFrmPage, PosHdl));
708 :
709 0 : aHoriRelationLB.SetSelectHdl(LINK(this, SwFrmPage, RelHdl));
710 0 : aVertRelationLB.SetSelectHdl(LINK(this, SwFrmPage, RelHdl));
711 :
712 0 : aMirrorPagesCB.SetClickHdl(LINK(this, SwFrmPage, MirrorHdl));
713 :
714 0 : aLk = LINK(this, SwFrmPage, RelSizeClickHdl);
715 0 : aRelWidthCB.SetClickHdl( aLk );
716 0 : aRelHeightCB.SetClickHdl( aLk );
717 :
718 0 : aAutoWidthCB.SetClickHdl( LINK( this, SwFrmPage, AutoWidthClickHdl ) );
719 0 : aAutoHeightCB.SetClickHdl( LINK( this, SwFrmPage, AutoHeightClickHdl ) );
720 0 : }
721 :
722 : /*--------------------------------------------------------------------
723 : Description: Dtor
724 : --------------------------------------------------------------------*/
725 0 : SwFrmPage::~SwFrmPage()
726 : {
727 0 : }
728 :
729 0 : SfxTabPage* SwFrmPage::Create(Window *pParent, const SfxItemSet &rSet)
730 : {
731 0 : return new SwFrmPage( pParent, rSet );
732 : }
733 :
734 : namespace
735 : {
736 0 : void MoveControl( Control& _rCtrl, long _nOffsetY )
737 : {
738 0 : Point aPt( _rCtrl.GetPosPixel() );
739 0 : aPt.Move( 0, _nOffsetY );
740 0 : _rCtrl.SetPosPixel( aPt );
741 0 : }
742 : }
743 :
744 0 : void SwFrmPage::EnableGraficMode( void )
745 : {
746 : // i#39692 - mustn't be called more than once
747 0 : if(!aRealSizeBT.IsVisible())
748 : {
749 0 : long nOffset1 = aRelWidthCB.GetPosPixel().Y() - aAutoWidthCB.GetPosPixel().Y();
750 0 : long nOffset2 = nOffset1 + aRelHeightCB.GetPosPixel().Y() - aAutoHeightCB.GetPosPixel().Y();
751 :
752 0 : MoveControl( aHeightFT, nOffset1 );
753 0 : MoveControl( aHeightED, nOffset1 );
754 0 : MoveControl( aRelHeightCB, nOffset1 );
755 0 : MoveControl( aFixedRatioCB, nOffset2 );
756 :
757 0 : aWidthFT.Show();
758 0 : aWidthAutoFT.Hide();
759 0 : aAutoHeightCB.Hide();
760 :
761 0 : aHeightFT.Show();
762 0 : aHeightAutoFT.Hide();
763 0 : aAutoWidthCB.Hide();
764 :
765 0 : aRealSizeBT.Show();
766 : }
767 0 : }
768 :
769 0 : SwWrtShell *SwFrmPage::getFrmDlgParentShell()
770 : {
771 0 : return ((SwFrmDlg*)GetParentDialog())->GetWrtShell();
772 : }
773 :
774 0 : void SwFrmPage::Reset( const SfxItemSet &rSet )
775 : {
776 : SwWrtShell* pSh = bFormat ? ::GetActiveWrtShell() :
777 0 : getFrmDlgParentShell();
778 :
779 0 : nHtmlMode = ::GetHtmlMode(pSh->GetView().GetDocShell());
780 0 : bHtmlMode = nHtmlMode & HTMLMODE_ON ? sal_True : sal_False;
781 :
782 0 : FieldUnit aMetric = ::GetDfltMetric(bHtmlMode);
783 0 : SetMetric( aWidthED, aMetric );
784 0 : SetMetric( aHeightED, aMetric );
785 0 : SetMetric( aAtHorzPosED, aMetric );
786 0 : SetMetric( aAtVertPosED, aMetric );
787 :
788 0 : const SfxPoolItem* pItem = NULL;
789 0 : const SwFmtAnchor& rAnchor = (const SwFmtAnchor&)rSet.Get(RES_ANCHOR);
790 :
791 0 : if (SFX_ITEM_SET == rSet.GetItemState(FN_OLE_IS_MATH, sal_False, &pItem))
792 0 : m_bIsMathOLE = ((const SfxBoolItem*)pItem)->GetValue();
793 0 : if (SFX_ITEM_SET == rSet.GetItemState(FN_MATH_BASELINE_ALIGNMENT, sal_False, &pItem))
794 0 : m_bIsMathBaselineAlignment = ((const SfxBoolItem*)pItem)->GetValue();
795 : EnableVerticalPositioning( !(m_bIsMathOLE && m_bIsMathBaselineAlignment
796 0 : && FLY_AS_CHAR == rAnchor.GetAnchorId()) );
797 :
798 0 : if (bFormat)
799 : {
800 : // at formats no anchor editing
801 0 : aAnchorAtPageRB.Enable( sal_False );
802 0 : aAnchorAtParaRB.Enable( sal_False );
803 0 : aAnchorAtCharRB.Enable( sal_False );
804 0 : aAnchorAsCharRB.Enable( sal_False );
805 0 : aAnchorAtFrameRB.Enable( sal_False );
806 0 : aTypeFL.Enable( sal_False );
807 0 : aFixedRatioCB.Enable(sal_False);
808 : }
809 : else
810 : {
811 0 : if (rAnchor.GetAnchorId() != FLY_AT_FLY && !pSh->IsFlyInFly())
812 0 : aAnchorAtFrameRB.Hide();
813 : // --> OD 2009-08-31 #mongolianlayout#
814 : // if ( !bVerticalChanged && pSh->IsFrmVertical(sal_True, bIsInRightToLeft) )
815 0 : if ( pSh->IsFrmVertical( sal_True, bIsInRightToLeft, bIsVerticalL2R ) )
816 : {
817 0 : String sHLabel = aHorizontalFT.GetText();
818 0 : aHorizontalFT.SetText(aVerticalFT.GetText());
819 0 : aVerticalFT.SetText(sHLabel);
820 0 : bIsVerticalFrame = sal_True;
821 : }
822 : }
823 :
824 0 : if ( nDlgType == DLG_FRM_GRF || nDlgType == DLG_FRM_OLE )
825 : {
826 : OSL_ENSURE(pSh , "shell not found");
827 : //OS: only for the variant Insert/Graphic/Properties
828 0 : if(SFX_ITEM_SET == rSet.GetItemState(FN_PARAM_GRF_REALSIZE, sal_False, &pItem))
829 0 : aGrfSize = ((const SvxSizeItem*)pItem)->GetSize();
830 : else
831 0 : pSh->GetGrfSize( aGrfSize );
832 :
833 0 : if ( !bNew )
834 : {
835 0 : aRealSizeBT.SetClickHdl(LINK(this, SwFrmPage, RealSizeHdl));
836 0 : EnableGraficMode();
837 : }
838 :
839 0 : if ( nDlgType == DLG_FRM_GRF )
840 0 : aFixedRatioCB.Check( sal_False );
841 : else
842 : {
843 0 : if ( bNew )
844 0 : SetText( SW_RESSTR(STR_OLE_INSERT));
845 : else
846 0 : SetText( SW_RESSTR(STR_OLE_EDIT));
847 : }
848 : }
849 : else
850 : {
851 0 : aGrfSize = ((const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE)).GetSize();
852 : }
853 :
854 : // entering procent value made possible
855 0 : aWidthED. SetBaseValue( aWidthED.Normalize(aGrfSize.Width()), FUNIT_TWIP );
856 0 : aHeightED.SetBaseValue( aHeightED.Normalize(aGrfSize.Height()), FUNIT_TWIP );
857 : //the available space is not yet known so the RefValue has to be calculated from size and relative size values
858 : //this is needed only if relative values are already set
859 :
860 0 : const SwFmtFrmSize& rFrmSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
861 :
862 0 : if (rFrmSize.GetWidthPercent() != 0xff && rFrmSize.GetWidthPercent() != 0)
863 : {
864 : //calculate the rerference value from the with and relative width values
865 0 : sal_Int32 nSpace = rFrmSize.GetWidth() * 100 / rFrmSize.GetWidthPercent();
866 0 : aWidthED. SetRefValue( nSpace );
867 : }
868 :
869 0 : if (rFrmSize.GetHeightPercent() != 0xff && rFrmSize.GetHeightPercent() != 0)
870 : {
871 : //calculate the rerference value from the with and relative width values
872 0 : sal_Int32 nSpace = rFrmSize.GetHeight() * 100 / rFrmSize.GetHeightPercent();
873 0 : aHeightED.SetRefValue( nSpace );
874 : }
875 :
876 : // general initialisation part
877 0 : switch(rAnchor.GetAnchorId())
878 : {
879 0 : case FLY_AT_PAGE: aAnchorAtPageRB.Check(); break;
880 0 : case FLY_AT_PARA: aAnchorAtParaRB.Check(); break;
881 0 : case FLY_AT_CHAR: aAnchorAtCharRB.Check(); break;
882 0 : case FLY_AS_CHAR: aAnchorAsCharRB.Check(); break;
883 0 : case FLY_AT_FLY: aAnchorAtFrameRB.Check();break;
884 : default:; //prevent warning
885 : }
886 :
887 : // i#22341 - determine content position of character
888 : // Note: content position can be NULL
889 0 : mpToCharCntntPos = rAnchor.GetCntntAnchor();
890 :
891 : // i#18732 - init checkbox value
892 : {
893 : const bool bFollowTextFlow =
894 0 : static_cast<const SwFmtFollowTextFlow&>(rSet.Get(RES_FOLLOW_TEXT_FLOW)).GetValue();
895 0 : aFollowTextFlowCB.Check( bFollowTextFlow );
896 : }
897 :
898 0 : if(bHtmlMode)
899 : {
900 0 : aAutoHeightCB.Enable(sal_False);
901 0 : aAutoWidthCB.Enable(sal_False);
902 0 : aMirrorPagesCB.Show(sal_False);
903 0 : if(nDlgType == DLG_FRM_STD)
904 0 : aFixedRatioCB.Enable(sal_False);
905 : // i#18732 hide checkbox in HTML mode
906 0 : aFollowTextFlowCB.Show(sal_False);
907 : }
908 : else
909 : {
910 : // enable/disable of check box 'Mirror on..'
911 0 : aMirrorPagesCB.Enable(!aAnchorAsCharRB.IsChecked());
912 :
913 : // enable/disable check box 'Follow text flow'.
914 : // enable check box 'Follow text
915 : // flow' also for anchor type to-frame.
916 0 : aFollowTextFlowCB.Enable( aAnchorAtParaRB.IsChecked() ||
917 0 : aAnchorAtCharRB.IsChecked() ||
918 0 : aAnchorAtFrameRB.IsChecked() );
919 : }
920 :
921 0 : Init( rSet, sal_True );
922 0 : aAtVertPosED.SaveValue();
923 0 : aAtHorzPosED.SaveValue();
924 0 : aFollowTextFlowCB.SaveValue();
925 :
926 0 : bNoModifyHdl = sal_False;
927 : //lock PercentFields
928 0 : aWidthED.LockAutoCalculation(sal_True);
929 0 : aHeightED.LockAutoCalculation(sal_True);
930 0 : RangeModifyHdl(&aWidthED); // set all maximum values initially
931 0 : aHeightED.LockAutoCalculation(sal_False);
932 0 : aWidthED.LockAutoCalculation(sal_False);
933 :
934 0 : aAutoHeightCB.SaveValue();
935 0 : aAutoWidthCB.SaveValue();
936 :
937 0 : SwTwips nWidth = static_cast< SwTwips >(aWidthED.DenormalizePercent(aWidthED.GetValue(FUNIT_TWIP)));
938 0 : SwTwips nHeight = static_cast< SwTwips >(aHeightED.DenormalizePercent(aHeightED.GetValue(FUNIT_TWIP)));
939 0 : fWidthHeightRatio = nHeight ? double(nWidth) / double(nHeight) : 1.0;
940 0 : }
941 :
942 : /*--------------------------------------------------------------------
943 : Description: stuff attributes into the set when OK
944 : --------------------------------------------------------------------*/
945 0 : sal_Bool SwFrmPage::FillItemSet(SfxItemSet &rSet)
946 : {
947 0 : sal_Bool bRet = sal_False;
948 : SwWrtShell* pSh = bFormat ? ::GetActiveWrtShell()
949 0 : : getFrmDlgParentShell();
950 : OSL_ENSURE( pSh , "shell not found");
951 0 : const SfxItemSet& rOldSet = GetItemSet();
952 0 : const SfxPoolItem* pOldItem = 0;
953 :
954 0 : RndStdIds eAnchorId = (RndStdIds)GetAnchor();
955 :
956 0 : if ( !bFormat )
957 : {
958 0 : pOldItem = GetOldItem(rSet, RES_ANCHOR);
959 0 : if (bNew || !pOldItem || eAnchorId != ((const SwFmtAnchor*)pOldItem)->GetAnchorId())
960 : {
961 0 : SwFmtAnchor aAnc( eAnchorId, pSh->GetPhyPageNum() );
962 0 : bRet = 0 != rSet.Put( aAnc );
963 : }
964 : }
965 :
966 0 : if ( pHMap )
967 : {
968 : SwFmtHoriOrient aHoriOrient( (const SwFmtHoriOrient&)
969 0 : rOldSet.Get(RES_HORI_ORIENT) );
970 :
971 0 : sal_uInt16 nMapPos = GetMapPos(pHMap, aHorizontalDLB);
972 0 : short nAlign = GetAlignment(pHMap, nMapPos, aHorizontalDLB, aHoriRelationLB);
973 0 : short nRel = GetRelation(pHMap, aHoriRelationLB);
974 :
975 0 : const sal_Int16 eHOri = nAlign;
976 0 : const sal_Int16 eRel = nRel;
977 :
978 0 : aHoriOrient.SetHoriOrient( eHOri );
979 0 : aHoriOrient.SetRelationOrient( eRel );
980 0 : aHoriOrient.SetPosToggle(aMirrorPagesCB.IsChecked());
981 :
982 0 : sal_Bool bMod = aAtHorzPosED.GetText() != aAtHorzPosED.GetSavedValue();
983 0 : bMod |= aMirrorPagesCB.GetState() != aMirrorPagesCB.GetSavedValue();
984 :
985 0 : if ( eHOri == text::HoriOrientation::NONE &&
986 : (bNew || (bAtHorzPosModified || bMod) || nOldH != eHOri ) )
987 : {
988 0 : SwTwips nX = static_cast< SwTwips >(aAtHorzPosED.Denormalize(aAtHorzPosED.GetValue(FUNIT_TWIP)));
989 0 : aHoriOrient.SetPos( nX );
990 : }
991 :
992 0 : pOldItem = GetOldItem(rSet, FN_HORI_ORIENT);
993 0 : sal_Bool bSame = sal_False;
994 0 : if ((bNew == bFormat) && pOldItem)
995 : {
996 0 : bSame = static_cast< sal_Bool >(aHoriOrient == (SwFmtHoriOrient&)*pOldItem);
997 : }
998 0 : if ((bNew && !bFormat) || ((bAtHorzPosModified || bMod) && !bSame))
999 : {
1000 0 : bRet |= 0 != rSet.Put( aHoriOrient );
1001 0 : }
1002 : }
1003 :
1004 0 : if ( pVMap )
1005 : {
1006 : // alignment vertical
1007 : SwFmtVertOrient aVertOrient( (const SwFmtVertOrient&)
1008 0 : rOldSet.Get(RES_VERT_ORIENT) );
1009 :
1010 0 : sal_uInt16 nMapPos = GetMapPos(pVMap, aVerticalDLB);
1011 0 : short nAlign = GetAlignment(pVMap, nMapPos, aVerticalDLB, aVertRelationLB);
1012 0 : short nRel = GetRelation(pVMap, aVertRelationLB);
1013 :
1014 0 : const sal_Int16 eVOri = nAlign;
1015 0 : const sal_Int16 eRel = nRel;
1016 :
1017 0 : aVertOrient.SetVertOrient ( eVOri);
1018 0 : aVertOrient.SetRelationOrient( eRel );
1019 :
1020 0 : sal_Bool bMod = aAtVertPosED.GetText() != aAtVertPosED.GetSavedValue();
1021 :
1022 0 : if ( eVOri == text::VertOrientation::NONE &&
1023 : ( bNew || (bAtVertPosModified || bMod) || nOldV != eVOri) )
1024 : {
1025 : // vertival position
1026 : // recalculate offset for character bound frames
1027 0 : SwTwips nY = static_cast< SwTwips >(aAtVertPosED.Denormalize(aAtVertPosED.GetValue(FUNIT_TWIP)));
1028 0 : if (eAnchorId == FLY_AS_CHAR)
1029 : {
1030 0 : nY *= -1;
1031 : }
1032 0 : aVertOrient.SetPos( nY );
1033 : }
1034 0 : pOldItem = GetOldItem(rSet, FN_VERT_ORIENT);
1035 0 : sal_Bool bSame = sal_False;
1036 0 : if((bNew == bFormat) && pOldItem)
1037 : {
1038 : bSame = static_cast< sal_Bool >( bFormat ?
1039 0 : aVertOrient.GetVertOrient() == ((SwFmtVertOrient*)pOldItem)->GetVertOrient() &&
1040 0 : aVertOrient.GetRelationOrient() == ((SwFmtVertOrient*)pOldItem)->GetRelationOrient() &&
1041 0 : aVertOrient.GetPos() == ((SwFmtVertOrient*)pOldItem)->GetPos()
1042 :
1043 0 : : aVertOrient == (SwFmtVertOrient&)*pOldItem );
1044 : }
1045 0 : if( ( bNew && !bFormat ) || ((bAtVertPosModified || bMod) && !bSame ))
1046 : {
1047 0 : bRet |= 0 != rSet.Put( aVertOrient );
1048 0 : }
1049 : }
1050 :
1051 : // set size
1052 : // new exception: when the size of pMgr(, 0), then the properties
1053 : // for a graphic that isn't even loaded, are set. Then no SetSize
1054 : // is done here when the size settings were not changed by the
1055 : // user.
1056 0 : const SwFmtFrmSize& rOldSize = (const SwFmtFrmSize& )rOldSet.Get(RES_FRM_SIZE);
1057 0 : SwFmtFrmSize aSz( rOldSize );
1058 :
1059 0 : sal_Bool bValueModified = (aWidthED.IsValueModified() || aHeightED.IsValueModified());
1060 0 : sal_Bool bCheckChanged = (aRelWidthCB.GetSavedValue() != aRelWidthCB.IsChecked()
1061 0 : || aRelHeightCB.GetSavedValue() != aRelHeightCB.IsChecked());
1062 :
1063 0 : sal_Bool bLegalValue = !(!rOldSize.GetWidth () && !rOldSize.GetHeight() &&
1064 0 : aWidthED .GetValue() == aWidthED .GetMin() &&
1065 0 : aHeightED.GetValue() == aHeightED.GetMin());
1066 :
1067 0 : if ((bNew && !bFormat) || ((bValueModified || bCheckChanged) && bLegalValue))
1068 : {
1069 0 : sal_Int64 nNewWidth = aWidthED.DenormalizePercent(aWidthED.GetRealValue(FUNIT_TWIP));
1070 0 : sal_Int64 nNewHeight = aHeightED.DenormalizePercent(aHeightED.GetRealValue(FUNIT_TWIP));
1071 0 : aSz.SetWidth (static_cast< SwTwips >(nNewWidth));
1072 0 : aSz.SetHeight(static_cast< SwTwips >(nNewHeight));
1073 :
1074 0 : if (aRelWidthCB.IsChecked())
1075 : {
1076 0 : aSz.SetWidthPercent((sal_uInt8)Min( static_cast< sal_Int64 >(MAX_PERCENT_WIDTH), aWidthED.Convert(aWidthED.NormalizePercent(nNewWidth), FUNIT_TWIP, FUNIT_CUSTOM)));
1077 : }
1078 : else
1079 0 : aSz.SetWidthPercent(0);
1080 0 : if (aRelHeightCB.IsChecked())
1081 0 : aSz.SetHeightPercent((sal_uInt8)Min(static_cast< sal_Int64 >(MAX_PERCENT_HEIGHT), aHeightED.Convert(aHeightED.NormalizePercent(nNewHeight), FUNIT_TWIP, FUNIT_CUSTOM)));
1082 : else
1083 0 : aSz.SetHeightPercent(0);
1084 :
1085 0 : if (aFixedRatioCB.IsChecked() && (aRelWidthCB.IsChecked() ^ aRelHeightCB.IsChecked()))
1086 : {
1087 0 : if (aRelWidthCB.IsChecked())
1088 0 : aSz.SetHeightPercent(0xff);
1089 : else
1090 0 : aSz.SetWidthPercent(0xff);
1091 : }
1092 : }
1093 0 : if( !IsInGraficMode() )
1094 : {
1095 0 : if( aAutoHeightCB.GetState() != aAutoHeightCB.GetSavedValue() )
1096 : {
1097 0 : SwFrmSize eFrmSize = (SwFrmSize) aAutoHeightCB.IsChecked()? ATT_MIN_SIZE : ATT_FIX_SIZE;
1098 0 : if( eFrmSize != aSz.GetHeightSizeType() )
1099 0 : aSz.SetHeightSizeType(eFrmSize);
1100 : }
1101 0 : if( aAutoWidthCB.GetState() != aAutoWidthCB.GetSavedValue() )
1102 : {
1103 0 : SwFrmSize eFrmSize = (SwFrmSize) aAutoWidthCB.IsChecked()? ATT_MIN_SIZE : ATT_FIX_SIZE;
1104 0 : if( eFrmSize != aSz.GetWidthSizeType() )
1105 0 : aSz.SetWidthSizeType( eFrmSize );
1106 : }
1107 : }
1108 0 : if( !bFormat && aFixedRatioCB.GetSavedValue() != aFixedRatioCB.IsChecked())
1109 0 : bRet |= 0 != rSet.Put(SfxBoolItem(FN_KEEP_ASPECT_RATIO, aFixedRatioCB.IsChecked()));
1110 :
1111 0 : pOldItem = GetOldItem(rSet, RES_FRM_SIZE);
1112 :
1113 0 : if ((pOldItem && aSz != *pOldItem) || (!pOldItem && !bFormat) ||
1114 : (bFormat &&
1115 0 : (aSz.GetWidth() > 0 || aSz.GetWidthPercent() > 0) &&
1116 0 : (aSz.GetHeight() > 0 || aSz.GetHeightPercent() > 0)))
1117 : {
1118 0 : if (aSz.GetHeightSizeType() == ATT_VAR_SIZE) // there is no VAR_SIZE in frames
1119 0 : aSz.SetHeightSizeType(ATT_MIN_SIZE);
1120 :
1121 0 : bRet |= 0 != rSet.Put( aSz );
1122 : }
1123 0 : if(aFollowTextFlowCB.IsChecked() != aFollowTextFlowCB.GetSavedValue())
1124 : {
1125 0 : bRet |= 0 != rSet.Put(SwFmtFollowTextFlow(aFollowTextFlowCB.IsChecked()));
1126 : }
1127 0 : return bRet;
1128 : }
1129 :
1130 : /*--------------------------------------------------------------------
1131 : Description: initialise horizonal and vertical Pos
1132 : --------------------------------------------------------------------*/
1133 0 : void SwFrmPage::InitPos(RndStdIds eId,
1134 : sal_uInt16 nH,
1135 : sal_uInt16 nHRel,
1136 : sal_uInt16 nV,
1137 : sal_uInt16 nVRel,
1138 : long nX,
1139 : long nY)
1140 : {
1141 0 : sal_uInt16 nPos = aVerticalDLB.GetSelectEntryPos();
1142 0 : if ( nPos != LISTBOX_ENTRY_NOTFOUND && pVMap )
1143 : {
1144 0 : nOldV = pVMap[nPos].nAlign;
1145 :
1146 0 : nPos = aVertRelationLB.GetSelectEntryPos();
1147 0 : if (nPos != LISTBOX_ENTRY_NOTFOUND)
1148 0 : nOldVRel = ((RelationMap *)aVertRelationLB.GetEntryData(nPos))->nRelation;
1149 : }
1150 :
1151 0 : nPos = aHorizontalDLB.GetSelectEntryPos();
1152 0 : if ( nPos != LISTBOX_ENTRY_NOTFOUND && pHMap )
1153 : {
1154 0 : nOldH = pHMap[nPos].nAlign;
1155 :
1156 0 : nPos = aHoriRelationLB.GetSelectEntryPos();
1157 0 : if (nPos != LISTBOX_ENTRY_NOTFOUND)
1158 0 : nOldHRel = ((RelationMap *)aHoriRelationLB.GetEntryData(nPos))->nRelation;
1159 : }
1160 :
1161 0 : sal_Bool bEnable = sal_True;
1162 0 : if ( eId == FLY_AT_PAGE )
1163 : {
1164 0 : pVMap = bHtmlMode ? aVPageHtmlMap : aVPageMap;
1165 0 : pHMap = bHtmlMode ? aHPageHtmlMap : aHPageMap;
1166 : }
1167 0 : else if ( eId == FLY_AT_FLY )
1168 : {
1169 : // own vertical alignment map for to frame
1170 : // anchored objects.
1171 0 : pVMap = bHtmlMode ? aVFlyHtmlMap : aVFrameMap;
1172 0 : pHMap = bHtmlMode ? aHFlyHtmlMap : aHFrameMap;
1173 : }
1174 0 : else if ( eId == FLY_AT_PARA )
1175 : {
1176 0 : if(bHtmlMode)
1177 : {
1178 0 : pVMap = aVParaHtmlMap;
1179 0 : pHMap = aHParaHtmlAbsMap;
1180 : }
1181 : else
1182 : {
1183 0 : pVMap = aVParaMap;
1184 0 : pHMap = aHParaMap;
1185 : }
1186 : }
1187 0 : else if ( eId == FLY_AT_CHAR )
1188 : {
1189 0 : if(bHtmlMode)
1190 : {
1191 0 : pVMap = aVCharHtmlAbsMap;
1192 0 : pHMap = aHCharHtmlAbsMap;
1193 : }
1194 : else
1195 : {
1196 0 : pVMap = aVCharMap;
1197 0 : pHMap = aHCharMap;
1198 : }
1199 : }
1200 0 : else if ( eId == FLY_AS_CHAR )
1201 : {
1202 0 : pVMap = bHtmlMode ? aVAsCharHtmlMap : aVAsCharMap;
1203 0 : pHMap = 0;
1204 0 : bEnable = sal_False;
1205 : }
1206 0 : aHorizontalDLB.Enable( bEnable );
1207 0 : aHorizontalFT.Enable( bEnable );
1208 :
1209 : // select current Pos
1210 : // horizontal
1211 0 : if ( nH == USHRT_MAX )
1212 : {
1213 0 : nH = nOldH;
1214 0 : nHRel = nOldHRel;
1215 : }
1216 0 : sal_uInt16 nMapPos = FillPosLB(pHMap, nH, nHRel, aHorizontalDLB);
1217 0 : FillRelLB(pHMap, nMapPos, nH, nHRel, aHoriRelationLB, aHoriRelationFT);
1218 :
1219 : // vertical
1220 0 : if ( nV == USHRT_MAX )
1221 : {
1222 0 : nV = nOldV;
1223 0 : nVRel = nOldVRel;
1224 : }
1225 0 : nMapPos = FillPosLB(pVMap, nV, nVRel, aVerticalDLB);
1226 0 : FillRelLB(pVMap, nMapPos, nV, nVRel, aVertRelationLB, aVertRelationFT);
1227 :
1228 0 : bEnable = nH == text::HoriOrientation::NONE && eId != FLY_AS_CHAR;
1229 0 : if (!bEnable)
1230 : {
1231 0 : aAtHorzPosED.SetValue( 0, FUNIT_TWIP );
1232 0 : if (nX != LONG_MAX && bHtmlMode)
1233 0 : aAtHorzPosED.SetModifyFlag();
1234 : }
1235 : else
1236 : {
1237 0 : if (nX != LONG_MAX)
1238 0 : aAtHorzPosED.SetValue( aAtHorzPosED.Normalize(nX), FUNIT_TWIP );
1239 : }
1240 0 : aAtHorzPosFT.Enable( bEnable );
1241 0 : aAtHorzPosED.Enable( bEnable );
1242 :
1243 0 : bEnable = nV == text::VertOrientation::NONE;
1244 0 : if ( !bEnable )
1245 : {
1246 0 : aAtVertPosED.SetValue( 0, FUNIT_TWIP );
1247 0 : if(nY != LONG_MAX && bHtmlMode)
1248 0 : aAtVertPosED.SetModifyFlag();
1249 : }
1250 : else
1251 : {
1252 0 : if ( eId == FLY_AS_CHAR )
1253 : {
1254 0 : if ( nY == LONG_MAX )
1255 0 : nY = 0;
1256 : else
1257 0 : nY *= -1;
1258 : }
1259 0 : if ( nY != LONG_MAX )
1260 0 : aAtVertPosED.SetValue( aAtVertPosED.Normalize(nY), FUNIT_TWIP );
1261 : }
1262 0 : aAtVertPosFT.Enable( bEnable && m_bAllowVertPositioning );
1263 0 : aAtVertPosED.Enable( bEnable && m_bAllowVertPositioning );
1264 0 : UpdateExample();
1265 0 : }
1266 :
1267 0 : sal_uInt16 SwFrmPage::FillPosLB(const FrmMap* _pMap,
1268 : const sal_uInt16 _nAlign,
1269 : const sal_uInt16 _nRel,
1270 : ListBox& _rLB )
1271 : {
1272 0 : String sSelEntry, sOldEntry;
1273 0 : sOldEntry = _rLB.GetSelectEntry();
1274 :
1275 0 : _rLB.Clear();
1276 :
1277 : // i#22341 determine all possible listbox relations for
1278 : // given relation for map <aVCharMap>
1279 : const sal_uLong nLBRelations = (_pMap != aVCharMap)
1280 : ? 0L
1281 0 : : ::lcl_GetLBRelationsForRelations( _nRel );
1282 :
1283 : // fill Listbox
1284 0 : size_t nCount = ::lcl_GetFrmMapCount(_pMap);
1285 0 : for (size_t i = 0; _pMap && i < nCount; ++i)
1286 : {
1287 : // Why not from the left/from inside or from above?
1288 : {
1289 0 : SvxSwFramePosString::StringId eStrId = aMirrorPagesCB.IsChecked() ? _pMap[i].eMirrorStrId : _pMap[i].eStrId;
1290 : // --> OD 2009-08-31 #mongolianlayout#
1291 : eStrId = lcl_ChangeResIdToVerticalOrRTL( eStrId,
1292 : bIsVerticalFrame,
1293 : bIsVerticalL2R,
1294 0 : bIsInRightToLeft);
1295 0 : String sEntry(aFramePosString.GetString(eStrId));
1296 0 : if (_rLB.GetEntryPos(sEntry) == LISTBOX_ENTRY_NOTFOUND)
1297 : {
1298 : // don't insert entries when frames are character bound
1299 0 : _rLB.InsertEntry(sEntry);
1300 : }
1301 : // i#22341 - add condition to handle map <aVCharMap>
1302 : // that is ambigous in the alignment.
1303 0 : if ( _pMap[i].nAlign == _nAlign &&
1304 0 : ( !(_pMap == aVCharMap) || _pMap[i].nLBRelations & nLBRelations ) )
1305 : {
1306 0 : sSelEntry = sEntry;
1307 0 : }
1308 : }
1309 : }
1310 :
1311 0 : _rLB.SelectEntry(sSelEntry);
1312 0 : if (!_rLB.GetSelectEntryCount())
1313 0 : _rLB.SelectEntry(sOldEntry);
1314 :
1315 0 : if (!_rLB.GetSelectEntryCount())
1316 0 : _rLB.SelectEntryPos(0);
1317 :
1318 0 : PosHdl(&_rLB);
1319 :
1320 0 : return GetMapPos(_pMap, _rLB);
1321 : }
1322 :
1323 0 : sal_uLong SwFrmPage::FillRelLB( const FrmMap* _pMap,
1324 : const sal_uInt16 _nLBSelPos,
1325 : const sal_uInt16 _nAlign,
1326 : sal_uInt16 _nRel,
1327 : ListBox& _rLB,
1328 : FixedText& _rFT )
1329 : {
1330 0 : String sSelEntry;
1331 0 : sal_uLong nLBRelations = 0;
1332 0 : size_t nMapCount = ::lcl_GetFrmMapCount(_pMap);
1333 :
1334 0 : _rLB.Clear();
1335 :
1336 0 : if (_nLBSelPos < nMapCount)
1337 : {
1338 0 : if (_pMap == aVAsCharHtmlMap || _pMap == aVAsCharMap)
1339 : {
1340 0 : String sOldEntry(_rLB.GetSelectEntry());
1341 0 : sal_uInt16 nRelCount = sizeof(aAsCharRelationMap) / sizeof(RelationMap);
1342 0 : SvxSwFramePosString::StringId eStrId = _pMap[_nLBSelPos].eStrId;
1343 :
1344 0 : for (size_t nMapPos = 0; nMapPos < nMapCount; nMapPos++)
1345 : {
1346 0 : if (_pMap[nMapPos].eStrId == eStrId)
1347 : {
1348 0 : nLBRelations = _pMap[nMapPos].nLBRelations;
1349 0 : for (sal_uInt16 nRelPos = 0; nRelPos < nRelCount; nRelPos++)
1350 : {
1351 0 : if (nLBRelations & aAsCharRelationMap[nRelPos].nLBRelation)
1352 : {
1353 0 : SvxSwFramePosString::StringId sStrId1 = aAsCharRelationMap[nRelPos].eStrId;
1354 :
1355 : // --> OD 2009-08-31 #mongolianlayout#
1356 : sStrId1 =
1357 : lcl_ChangeResIdToVerticalOrRTL( sStrId1,
1358 : bIsVerticalFrame,
1359 : bIsVerticalL2R,
1360 0 : bIsInRightToLeft);
1361 0 : String sEntry = aFramePosString.GetString(sStrId1);
1362 0 : sal_uInt16 nPos = _rLB.InsertEntry(sEntry);
1363 0 : _rLB.SetEntryData(nPos, &aAsCharRelationMap[nRelPos]);
1364 0 : if (_pMap[nMapPos].nAlign == _nAlign)
1365 0 : sSelEntry = sEntry;
1366 0 : break;
1367 : }
1368 : }
1369 : }
1370 : }
1371 0 : if (sSelEntry.Len())
1372 0 : _rLB.SelectEntry(sSelEntry);
1373 : else
1374 : {
1375 0 : _rLB.SelectEntry(sOldEntry);
1376 :
1377 0 : if (!_rLB.GetSelectEntryCount())
1378 : {
1379 0 : for (sal_uInt16 i = 0; i < _rLB.GetEntryCount(); i++)
1380 : {
1381 0 : RelationMap *pEntry = (RelationMap *)_rLB.GetEntryData(i);
1382 0 : if (pEntry->nLBRelation == LB_REL_CHAR) // default
1383 : {
1384 0 : _rLB.SelectEntryPos(i);
1385 0 : break;
1386 : }
1387 : }
1388 : }
1389 0 : }
1390 : }
1391 : else
1392 : {
1393 0 : sal_uInt16 nRelCount = sizeof(aRelationMap) / sizeof(RelationMap);
1394 :
1395 : // special handling for map <aVCharMap>,
1396 : // because its ambigous in its <eStrId>/<eMirrorStrId>.
1397 0 : if ( _pMap == aVCharMap )
1398 : {
1399 : nLBRelations = ::lcl_GetLBRelationsForStrID( _pMap,
1400 0 : ( aMirrorPagesCB.IsChecked()
1401 0 : ? _pMap[_nLBSelPos].eMirrorStrId
1402 0 : : _pMap[_nLBSelPos].eStrId),
1403 0 : aMirrorPagesCB.IsChecked() );
1404 : }
1405 : else
1406 : {
1407 0 : nLBRelations = _pMap[_nLBSelPos].nLBRelations;
1408 : }
1409 :
1410 0 : for (sal_uLong nBit = 1; nBit < 0x80000000; nBit <<= 1)
1411 : {
1412 0 : if (nLBRelations & nBit)
1413 : {
1414 0 : for (sal_uInt16 nRelPos = 0; nRelPos < nRelCount; nRelPos++)
1415 : {
1416 0 : if (aRelationMap[nRelPos].nLBRelation == nBit)
1417 : {
1418 0 : SvxSwFramePosString::StringId eStrId1 = aMirrorPagesCB.IsChecked() ?
1419 0 : aRelationMap[nRelPos].eMirrorStrId : aRelationMap[nRelPos].eStrId;
1420 : // --> OD 2009-08-31 #mongolianlayout#
1421 : eStrId1 =
1422 : lcl_ChangeResIdToVerticalOrRTL( eStrId1,
1423 : bIsVerticalFrame,
1424 : bIsVerticalL2R,
1425 0 : bIsInRightToLeft);
1426 0 : String sEntry = aFramePosString.GetString(eStrId1);
1427 0 : sal_uInt16 nPos = _rLB.InsertEntry(sEntry);
1428 0 : _rLB.SetEntryData(nPos, &aRelationMap[nRelPos]);
1429 0 : if (!sSelEntry.Len() && aRelationMap[nRelPos].nRelation == _nRel)
1430 0 : sSelEntry = sEntry;
1431 : }
1432 : }
1433 : }
1434 : }
1435 0 : if (sSelEntry.Len())
1436 0 : _rLB.SelectEntry(sSelEntry);
1437 : else
1438 : {
1439 : // Probably anchor switch. So look for similar relation
1440 0 : switch (_nRel)
1441 : {
1442 0 : case text::RelOrientation::FRAME: _nRel = text::RelOrientation::PAGE_FRAME; break;
1443 0 : case text::RelOrientation::PRINT_AREA: _nRel = text::RelOrientation::PAGE_PRINT_AREA; break;
1444 0 : case text::RelOrientation::PAGE_LEFT: _nRel = text::RelOrientation::FRAME_LEFT; break;
1445 0 : case text::RelOrientation::PAGE_RIGHT: _nRel = text::RelOrientation::FRAME_RIGHT; break;
1446 0 : case text::RelOrientation::FRAME_LEFT: _nRel = text::RelOrientation::PAGE_LEFT; break;
1447 0 : case text::RelOrientation::FRAME_RIGHT: _nRel = text::RelOrientation::PAGE_RIGHT; break;
1448 0 : case text::RelOrientation::PAGE_FRAME: _nRel = text::RelOrientation::FRAME; break;
1449 0 : case text::RelOrientation::PAGE_PRINT_AREA: _nRel = text::RelOrientation::PRINT_AREA; break;
1450 :
1451 : default:
1452 0 : if (_rLB.GetEntryCount())
1453 : {
1454 0 : RelationMap *pEntry = (RelationMap *)_rLB.GetEntryData(_rLB.GetEntryCount() - 1);
1455 0 : _nRel = pEntry->nRelation;
1456 : }
1457 0 : break;
1458 : }
1459 :
1460 0 : for (sal_uInt16 i = 0; i < _rLB.GetEntryCount(); i++)
1461 : {
1462 0 : RelationMap *pEntry = (RelationMap *)_rLB.GetEntryData(i);
1463 0 : if (pEntry->nRelation == _nRel)
1464 : {
1465 0 : _rLB.SelectEntryPos(i);
1466 0 : break;
1467 : }
1468 : }
1469 :
1470 0 : if (!_rLB.GetSelectEntryCount())
1471 0 : _rLB.SelectEntryPos(0);
1472 : }
1473 : }
1474 : }
1475 :
1476 0 : const bool bEnable = _rLB.GetEntryCount() != 0
1477 0 : && (&_rLB != &aVertRelationLB || m_bAllowVertPositioning);
1478 0 : _rLB.Enable( bEnable );
1479 0 : _rFT.Enable( bEnable );
1480 :
1481 0 : RelHdl(&_rLB);
1482 :
1483 0 : return nLBRelations;
1484 : }
1485 :
1486 0 : short SwFrmPage::GetRelation(FrmMap * /*pMap*/, ListBox &rRelationLB)
1487 : {
1488 0 : short nRel = 0;
1489 0 : sal_uInt16 nPos = rRelationLB.GetSelectEntryPos();
1490 :
1491 0 : if (nPos != LISTBOX_ENTRY_NOTFOUND)
1492 : {
1493 0 : RelationMap *pEntry = (RelationMap *)rRelationLB.GetEntryData(nPos);
1494 0 : nRel = pEntry->nRelation;
1495 : }
1496 :
1497 0 : return nRel;
1498 : }
1499 :
1500 0 : short SwFrmPage::GetAlignment(FrmMap *pMap, sal_uInt16 nMapPos,
1501 : ListBox &/*rAlignLB*/, ListBox &rRelationLB)
1502 : {
1503 0 : short nAlign = 0;
1504 :
1505 : // i#22341 special handling also for map <aVCharMap>,
1506 : // because it contains ambigous items for alignment
1507 0 : if ( pMap == aVAsCharHtmlMap || pMap == aVAsCharMap ||
1508 : pMap == aVCharMap )
1509 : {
1510 0 : if (rRelationLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND)
1511 : {
1512 0 : sal_uLong nRel = ((RelationMap *)rRelationLB.GetEntryData(rRelationLB.GetSelectEntryPos()))->nLBRelation;
1513 0 : size_t nMapCount = ::lcl_GetFrmMapCount(pMap);
1514 0 : SvxSwFramePosString::StringId eStrId = pMap[nMapPos].eStrId;
1515 :
1516 0 : for (size_t i = 0; i < nMapCount; i++)
1517 : {
1518 0 : if (pMap[i].eStrId == eStrId)
1519 : {
1520 0 : sal_uLong nLBRelations = pMap[i].nLBRelations;
1521 0 : if (nLBRelations & nRel)
1522 : {
1523 0 : nAlign = pMap[i].nAlign;
1524 0 : break;
1525 : }
1526 : }
1527 : }
1528 0 : }
1529 : }
1530 0 : else if (pMap)
1531 0 : nAlign = pMap[nMapPos].nAlign;
1532 :
1533 0 : return nAlign;
1534 : }
1535 :
1536 0 : sal_uInt16 SwFrmPage::GetMapPos( const FrmMap *pMap, ListBox &rAlignLB )
1537 : {
1538 0 : sal_uInt16 nMapPos = 0;
1539 0 : sal_uInt16 nLBSelPos = rAlignLB.GetSelectEntryPos();
1540 :
1541 0 : if (nLBSelPos != LISTBOX_ENTRY_NOTFOUND)
1542 : {
1543 0 : if (pMap == aVAsCharHtmlMap || pMap == aVAsCharMap)
1544 : {
1545 0 : size_t nMapCount = ::lcl_GetFrmMapCount(pMap);
1546 0 : String sSelEntry(rAlignLB.GetSelectEntry());
1547 :
1548 0 : for (size_t i = 0; i < nMapCount; i++)
1549 : {
1550 0 : SvxSwFramePosString::StringId eResId = pMap[i].eStrId;
1551 :
1552 0 : String sEntry = aFramePosString.GetString(eResId);
1553 0 : sEntry = MnemonicGenerator::EraseAllMnemonicChars( sEntry );
1554 :
1555 0 : if (sEntry == sSelEntry)
1556 : {
1557 0 : nMapPos = static_cast< sal_uInt16 >(i);
1558 : break;
1559 : }
1560 0 : }
1561 : }
1562 : else
1563 0 : nMapPos = nLBSelPos;
1564 : }
1565 :
1566 0 : return nMapPos;
1567 : }
1568 :
1569 0 : RndStdIds SwFrmPage::GetAnchor()
1570 : {
1571 0 : RndStdIds nRet = FLY_AT_PAGE;
1572 0 : if(aAnchorAtParaRB.IsChecked())
1573 : {
1574 0 : nRet = FLY_AT_PARA;
1575 : }
1576 0 : else if(aAnchorAtCharRB.IsChecked())
1577 : {
1578 0 : nRet = FLY_AT_CHAR;
1579 : }
1580 0 : else if(aAnchorAsCharRB.IsChecked())
1581 : {
1582 0 : nRet = FLY_AS_CHAR;
1583 : }
1584 0 : else if(aAnchorAtFrameRB.IsChecked())
1585 : {
1586 0 : nRet = FLY_AT_FLY;
1587 : }
1588 0 : return nRet;
1589 : }
1590 :
1591 : /*--------------------------------------------------------------------
1592 : Description: Bsp - Update
1593 : --------------------------------------------------------------------*/
1594 0 : void SwFrmPage::ActivatePage(const SfxItemSet& rSet)
1595 : {
1596 0 : bNoModifyHdl = sal_True;
1597 0 : Init(rSet);
1598 0 : bNoModifyHdl = sal_False;
1599 : //lock PercentFields
1600 0 : aWidthED.LockAutoCalculation(sal_True);
1601 0 : aHeightED.LockAutoCalculation(sal_True);
1602 0 : RangeModifyHdl(&aWidthED); // set all maximum values initially
1603 0 : aHeightED.LockAutoCalculation(sal_False);
1604 0 : aWidthED.LockAutoCalculation(sal_False);
1605 0 : aFollowTextFlowCB.SaveValue();
1606 0 : }
1607 :
1608 0 : int SwFrmPage::DeactivatePage(SfxItemSet * _pSet)
1609 : {
1610 0 : if ( _pSet )
1611 : {
1612 0 : FillItemSet( *_pSet );
1613 :
1614 : //FillItemSet doesn't set the anchor into the set when it matches
1615 : //the original. But for the other pages we need the current anchor.
1616 : SwWrtShell* pSh = bFormat ? ::GetActiveWrtShell()
1617 0 : : getFrmDlgParentShell();
1618 0 : RndStdIds eAnchorId = (RndStdIds)GetAnchor();
1619 0 : SwFmtAnchor aAnc( eAnchorId, pSh->GetPhyPageNum() );
1620 0 : _pSet->Put( aAnc );
1621 : }
1622 :
1623 0 : return sal_True;
1624 : }
1625 :
1626 : /*--------------------------------------------------------------------
1627 : Description: swap left/right with inside/outside
1628 : --------------------------------------------------------------------*/
1629 0 : IMPL_LINK_NOARG(SwFrmPage, MirrorHdl)
1630 : {
1631 0 : RndStdIds eId = GetAnchor();
1632 0 : InitPos( eId, USHRT_MAX, 0, USHRT_MAX, 0, LONG_MAX, LONG_MAX);
1633 :
1634 0 : return 0;
1635 : }
1636 :
1637 0 : IMPL_LINK( SwFrmPage, RelSizeClickHdl, CheckBox *, pBtn )
1638 : {
1639 0 : if (pBtn == &aRelWidthCB)
1640 : {
1641 0 : aWidthED.ShowPercent(pBtn->IsChecked());
1642 0 : if(pBtn->IsChecked())
1643 0 : aWidthED.MetricField::SetMax(MAX_PERCENT_WIDTH);
1644 : }
1645 : else // pBtn == &aRelHeightCB
1646 : {
1647 0 : aHeightED.ShowPercent(pBtn->IsChecked());
1648 0 : if(pBtn->IsChecked())
1649 0 : aHeightED.MetricField::SetMax(MAX_PERCENT_HEIGHT);
1650 : }
1651 :
1652 0 : if (pBtn) // only when Handler was called by change of the controller
1653 0 : RangeModifyHdl(&aWidthED); // correct the values again
1654 :
1655 0 : if (pBtn == &aRelWidthCB)
1656 0 : ModifyHdl(&aWidthED);
1657 : else // pBtn == &aRelHeightCB
1658 0 : ModifyHdl(&aHeightED);
1659 :
1660 0 : return 0;
1661 : }
1662 :
1663 : /*--------------------------------------------------------------------
1664 : Description: range check
1665 : --------------------------------------------------------------------*/
1666 0 : IMPL_LINK_NOARG(SwFrmPage, RangeModifyHdl)
1667 : {
1668 0 : if (bNoModifyHdl)
1669 0 : return 0;
1670 :
1671 : SwWrtShell* pSh = bFormat ? ::GetActiveWrtShell()
1672 0 : : getFrmDlgParentShell();
1673 : OSL_ENSURE(pSh , "shell not found");
1674 0 : SwFlyFrmAttrMgr aMgr( bNew, pSh, (const SwAttrSet&)GetItemSet() );
1675 0 : SvxSwFrameValidation aVal;
1676 :
1677 0 : aVal.nAnchorType = static_cast< sal_uInt16 >(GetAnchor());
1678 0 : aVal.bAutoHeight = aAutoHeightCB.IsChecked();
1679 0 : aVal.bAutoWidth = aAutoWidthCB.IsChecked();
1680 0 : aVal.bMirror = aMirrorPagesCB.IsChecked();
1681 0 : aVal.bFollowTextFlow = aFollowTextFlowCB.IsChecked();
1682 :
1683 0 : if ( pHMap )
1684 : {
1685 : // alignment horizonal
1686 0 : sal_uInt16 nMapPos = GetMapPos(pHMap, aHorizontalDLB);
1687 0 : short nAlign = GetAlignment(pHMap, nMapPos, aHorizontalDLB, aHoriRelationLB);
1688 0 : short nRel = GetRelation(pHMap, aHoriRelationLB);
1689 :
1690 0 : aVal.nHoriOrient = nAlign;
1691 0 : aVal.nHRelOrient = nRel;
1692 : }
1693 : else
1694 0 : aVal.nHoriOrient = text::HoriOrientation::NONE;
1695 :
1696 0 : if ( pVMap )
1697 : {
1698 : // alignment vertical
1699 0 : sal_uInt16 nMapPos = GetMapPos(pVMap, aVerticalDLB);
1700 0 : short nAlign = GetAlignment(pVMap, nMapPos, aVerticalDLB, aVertRelationLB);
1701 0 : short nRel = GetRelation(pVMap, aVertRelationLB);
1702 :
1703 0 : aVal.nVertOrient = nAlign;
1704 0 : aVal.nVRelOrient = nRel;
1705 : }
1706 : else
1707 0 : aVal.nVertOrient = text::VertOrientation::NONE;
1708 :
1709 : const long nAtHorzPosVal = static_cast< long >(
1710 0 : aAtHorzPosED.Denormalize(aAtHorzPosED.GetValue(FUNIT_TWIP)) );
1711 : const long nAtVertPosVal = static_cast< long >(
1712 0 : aAtVertPosED.Denormalize(aAtVertPosED.GetValue(FUNIT_TWIP)) );
1713 :
1714 0 : aVal.nHPos = nAtHorzPosVal;
1715 0 : aVal.nVPos = nAtVertPosVal;
1716 :
1717 0 : aMgr.ValidateMetrics(aVal, mpToCharCntntPos, sal_True); // one time, to get reference values for percental values
1718 :
1719 : // set reference values for percental values (100%) ...
1720 0 : aWidthED.SetRefValue(aVal.aPercentSize.Width());
1721 0 : aHeightED.SetRefValue(aVal.aPercentSize.Height());
1722 :
1723 : // ... and correctly convert width and height with it
1724 0 : SwTwips nWidth = static_cast< SwTwips >(aWidthED. DenormalizePercent(aWidthED.GetValue(FUNIT_TWIP)));
1725 0 : SwTwips nHeight = static_cast< SwTwips >(aHeightED.DenormalizePercent(aHeightED.GetValue(FUNIT_TWIP)));
1726 0 : aVal.nWidth = nWidth;
1727 0 : aVal.nHeight = nHeight;
1728 :
1729 0 : aMgr.ValidateMetrics(aVal, mpToCharCntntPos); // one more time, to determine all remaining values with correct width and height.
1730 :
1731 : // all columns have to be correct
1732 0 : if(GetTabDialog()->GetExampleSet() &&
1733 0 : SFX_ITEM_DEFAULT <= GetTabDialog()->GetExampleSet()->GetItemState(RES_COL))
1734 : {
1735 0 : const SwFmtCol& rCol = (const SwFmtCol&)GetTabDialog()->GetExampleSet()->Get(RES_COL);
1736 0 : if ( rCol.GetColumns().size() > 1 )
1737 : {
1738 0 : for ( sal_uInt16 i = 0; i < rCol.GetColumns().size(); ++i )
1739 : {
1740 0 : aVal.nMinWidth += rCol.GetColumns()[i].GetLeft() +
1741 0 : rCol.GetColumns()[i].GetRight() +
1742 0 : MINFLY;
1743 : }
1744 0 : aVal.nMinWidth -= MINFLY;//one was already in there!
1745 : }
1746 : }
1747 :
1748 0 : nWidth = aVal.nWidth;
1749 0 : nHeight = aVal.nHeight;
1750 :
1751 : // minimum range also for template
1752 0 : aHeightED.SetMin(aHeightED.NormalizePercent(aVal.nMinHeight), FUNIT_TWIP);
1753 0 : aWidthED. SetMin(aWidthED.NormalizePercent(aVal.nMinWidth), FUNIT_TWIP);
1754 :
1755 0 : SwTwips nMaxWidth(aVal.nMaxWidth);
1756 0 : SwTwips nMaxHeight(aVal.nMaxHeight);
1757 :
1758 0 : if (aVal.bAutoHeight && (nDlgType == DLG_FRM_GRF || nDlgType == DLG_FRM_OLE))
1759 : {
1760 0 : SwTwips nTmp = Min(nWidth * nMaxHeight / Max(nHeight, 1L), nMaxHeight);
1761 0 : aWidthED.SetMax(aWidthED.NormalizePercent(nTmp), FUNIT_TWIP);
1762 :
1763 0 : nTmp = Min(nHeight * nMaxWidth / Max(nWidth, 1L), nMaxWidth);
1764 0 : aHeightED.SetMax(aWidthED.NormalizePercent(nTmp), FUNIT_TWIP);
1765 : }
1766 : else
1767 : {
1768 0 : SwTwips nTmp = static_cast< SwTwips >(aHeightED.NormalizePercent(nMaxHeight));
1769 0 : aHeightED.SetMax(nTmp, FUNIT_TWIP);
1770 :
1771 0 : nTmp = static_cast< SwTwips >(aWidthED.NormalizePercent(nMaxWidth));
1772 0 : aWidthED.SetMax(nTmp, FUNIT_TWIP);
1773 : }
1774 :
1775 0 : aAtHorzPosED.SetMin(aAtHorzPosED.Normalize(aVal.nMinHPos), FUNIT_TWIP);
1776 0 : aAtHorzPosED.SetMax(aAtHorzPosED.Normalize(aVal.nMaxHPos), FUNIT_TWIP);
1777 0 : if ( aVal.nHPos != nAtHorzPosVal )
1778 0 : aAtHorzPosED.SetValue(aAtHorzPosED.Normalize(aVal.nHPos), FUNIT_TWIP);
1779 :
1780 : const SwTwips nUpperOffset = (aVal.nAnchorType == FLY_AS_CHAR)
1781 0 : ? nUpperBorder : 0;
1782 : const SwTwips nLowerOffset = (aVal.nAnchorType == FLY_AS_CHAR)
1783 0 : ? nLowerBorder : 0;
1784 :
1785 0 : aAtVertPosED.SetMin(aAtVertPosED.Normalize(aVal.nMinVPos + nLowerOffset + nUpperOffset), FUNIT_TWIP);
1786 0 : aAtVertPosED.SetMax(aAtVertPosED.Normalize(aVal.nMaxVPos), FUNIT_TWIP);
1787 0 : if ( aVal.nVPos != nAtVertPosVal )
1788 0 : aAtVertPosED.SetValue(aAtVertPosED.Normalize(aVal.nVPos), FUNIT_TWIP);
1789 :
1790 0 : return 0;
1791 : }
1792 :
1793 0 : IMPL_LINK_NOARG(SwFrmPage, AnchorTypeHdl)
1794 : {
1795 0 : aMirrorPagesCB.Enable(!aAnchorAsCharRB.IsChecked());
1796 :
1797 : // i#18732 - enable check box 'Follow text flow' for anchor
1798 : // type to-paragraph' and to-character
1799 : // i#22305 - enable check box 'Follow text
1800 : // flow' also for anchor type to-frame.
1801 0 : aFollowTextFlowCB.Enable( aAnchorAtParaRB.IsChecked() ||
1802 0 : aAnchorAtCharRB.IsChecked() ||
1803 0 : aAnchorAtFrameRB.IsChecked() );
1804 :
1805 0 : RndStdIds eId = GetAnchor();
1806 :
1807 0 : InitPos( eId, USHRT_MAX, 0, USHRT_MAX, 0, LONG_MAX, LONG_MAX);
1808 0 : RangeModifyHdl(0);
1809 :
1810 0 : if(bHtmlMode)
1811 : {
1812 0 : PosHdl(&aHorizontalDLB);
1813 0 : PosHdl(&aVerticalDLB);
1814 : }
1815 :
1816 : EnableVerticalPositioning( !(m_bIsMathOLE && m_bIsMathBaselineAlignment
1817 0 : && FLY_AS_CHAR == eId) );
1818 :
1819 0 : return 0;
1820 : }
1821 :
1822 0 : IMPL_LINK( SwFrmPage, PosHdl, ListBox *, pLB )
1823 : {
1824 0 : sal_Bool bHori = pLB == &aHorizontalDLB;
1825 0 : ListBox *pRelLB = bHori ? &aHoriRelationLB : &aVertRelationLB;
1826 0 : FixedText *pRelFT = bHori ? &aHoriRelationFT : &aVertRelationFT;
1827 0 : FrmMap *pMap = bHori ? pHMap : pVMap;
1828 :
1829 0 : sal_uInt16 nMapPos = GetMapPos(pMap, *pLB);
1830 0 : short nAlign = GetAlignment(pMap, nMapPos, *pLB, *pRelLB);
1831 :
1832 0 : if (bHori)
1833 : {
1834 0 : sal_Bool bEnable = text::HoriOrientation::NONE == nAlign;
1835 0 : aAtHorzPosED.Enable( bEnable );
1836 0 : aAtHorzPosFT.Enable( bEnable );
1837 : }
1838 : else
1839 : {
1840 0 : sal_Bool bEnable = text::VertOrientation::NONE == nAlign && m_bAllowVertPositioning;
1841 0 : aAtVertPosED.Enable( bEnable );
1842 0 : aAtVertPosFT.Enable( bEnable );
1843 : }
1844 :
1845 0 : if (pLB) // only when Handler was called by changing of the controller
1846 0 : RangeModifyHdl( 0 );
1847 :
1848 0 : sal_uInt16 nRel = 0;
1849 0 : if (pLB->GetSelectEntryCount())
1850 : {
1851 :
1852 0 : if (pRelLB->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND)
1853 0 : nRel = ((RelationMap *)pRelLB->GetEntryData(pRelLB->GetSelectEntryPos()))->nRelation;
1854 :
1855 0 : FillRelLB(pMap, nMapPos, nAlign, nRel, *pRelLB, *pRelFT);
1856 : }
1857 : else
1858 0 : pRelLB->Clear();
1859 :
1860 0 : UpdateExample();
1861 :
1862 0 : if (bHori)
1863 0 : bAtHorzPosModified = sal_True;
1864 : else
1865 0 : bAtVertPosModified = sal_True;
1866 :
1867 : // special treatment for HTML-Mode with horizonal-vertical-dependencies
1868 0 : if(bHtmlMode && (FLY_AT_CHAR == GetAnchor()))
1869 : {
1870 0 : sal_Bool bSet = sal_False;
1871 0 : if(bHori)
1872 : {
1873 : // right is allowed only above - from the left only above
1874 : // from the left at character -> below
1875 0 : if((text::HoriOrientation::LEFT == nAlign || text::HoriOrientation::RIGHT == nAlign) &&
1876 0 : 0 == aVerticalDLB.GetSelectEntryPos())
1877 : {
1878 0 : if(text::RelOrientation::FRAME == nRel)
1879 0 : aVerticalDLB.SelectEntryPos(1);
1880 : else
1881 0 : aVerticalDLB.SelectEntryPos(0);
1882 0 : bSet = sal_True;
1883 : }
1884 0 : else if(text::HoriOrientation::LEFT == nAlign && 1 == aVerticalDLB.GetSelectEntryPos())
1885 : {
1886 0 : aVerticalDLB.SelectEntryPos(0);
1887 0 : bSet = sal_True;
1888 : }
1889 0 : else if(text::HoriOrientation::NONE == nAlign && 1 == aVerticalDLB.GetSelectEntryPos())
1890 : {
1891 0 : aVerticalDLB.SelectEntryPos(0);
1892 0 : bSet = sal_True;
1893 : }
1894 0 : if(bSet)
1895 0 : PosHdl(&aVerticalDLB);
1896 : }
1897 : else
1898 : {
1899 0 : if(text::VertOrientation::TOP == nAlign)
1900 : {
1901 0 : if(1 == aHorizontalDLB.GetSelectEntryPos())
1902 : {
1903 0 : aHorizontalDLB.SelectEntryPos(0);
1904 0 : bSet = sal_True;
1905 : }
1906 0 : aHoriRelationLB.SelectEntryPos(1);
1907 : }
1908 0 : else if(text::VertOrientation::CHAR_BOTTOM == nAlign)
1909 : {
1910 0 : if(2 == aHorizontalDLB.GetSelectEntryPos())
1911 : {
1912 0 : aHorizontalDLB.SelectEntryPos(0);
1913 0 : bSet = sal_True;
1914 : }
1915 0 : aHoriRelationLB.SelectEntryPos(0) ;
1916 : }
1917 0 : if(bSet)
1918 0 : PosHdl(&aHorizontalDLB);
1919 : }
1920 :
1921 : }
1922 0 : return 0;
1923 : }
1924 :
1925 : /*--------------------------------------------------------------------
1926 : Description: horizontal Pos
1927 : --------------------------------------------------------------------*/
1928 0 : IMPL_LINK( SwFrmPage, RelHdl, ListBox *, pLB )
1929 : {
1930 0 : sal_Bool bHori = pLB == &aHoriRelationLB;
1931 :
1932 0 : UpdateExample();
1933 :
1934 0 : if (bHori)
1935 0 : bAtHorzPosModified = sal_True;
1936 : else
1937 0 : bAtVertPosModified = sal_True;
1938 :
1939 0 : if (bHtmlMode && (FLY_AT_CHAR == GetAnchor()))
1940 : {
1941 0 : if(bHori)
1942 : {
1943 0 : sal_uInt16 nRel = GetRelation(pHMap, aHoriRelationLB);
1944 0 : if(text::RelOrientation::PRINT_AREA == nRel && 0 == aVerticalDLB.GetSelectEntryPos())
1945 : {
1946 0 : aVerticalDLB.SelectEntryPos(1);
1947 : }
1948 0 : else if(text::RelOrientation::CHAR == nRel && 1 == aVerticalDLB.GetSelectEntryPos())
1949 : {
1950 0 : aVerticalDLB.SelectEntryPos(0);
1951 : }
1952 : }
1953 : }
1954 0 : if (pLB) // Only when Handler was called by changing of the controller
1955 0 : RangeModifyHdl(0);
1956 :
1957 0 : return 0;
1958 : }
1959 :
1960 0 : IMPL_LINK_NOARG_INLINE_START(SwFrmPage, RealSizeHdl)
1961 : {
1962 0 : aWidthED.SetUserValue( aWidthED. NormalizePercent(aGrfSize.Width() ), FUNIT_TWIP);
1963 0 : aHeightED.SetUserValue(aHeightED.NormalizePercent(aGrfSize.Height()), FUNIT_TWIP);
1964 0 : fWidthHeightRatio = aGrfSize.Height() ? double(aGrfSize.Width()) / double(aGrfSize.Height()) : 1.0;
1965 0 : UpdateExample();
1966 0 : return 0;
1967 : }
1968 0 : IMPL_LINK_NOARG_INLINE_END(SwFrmPage, RealSizeHdl)
1969 :
1970 0 : IMPL_LINK_NOARG(SwFrmPage, AutoWidthClickHdl)
1971 : {
1972 0 : if( !IsInGraficMode() )
1973 0 : HandleAutoCB( aAutoWidthCB.IsChecked(), aWidthFT, aWidthAutoFT );
1974 0 : return 0;
1975 : }
1976 :
1977 0 : IMPL_LINK_NOARG(SwFrmPage, AutoHeightClickHdl)
1978 : {
1979 0 : if( !IsInGraficMode() )
1980 0 : HandleAutoCB( aAutoHeightCB.IsChecked(), aHeightFT, aHeightAutoFT );
1981 0 : return 0;
1982 : }
1983 :
1984 0 : IMPL_LINK( SwFrmPage, ModifyHdl, Edit *, pEdit )
1985 : {
1986 0 : SwTwips nWidth = static_cast< SwTwips >(aWidthED.DenormalizePercent(aWidthED.GetValue(FUNIT_TWIP)));
1987 0 : SwTwips nHeight = static_cast< SwTwips >(aHeightED.DenormalizePercent(aHeightED.GetValue(FUNIT_TWIP)));
1988 0 : if ( aFixedRatioCB.IsChecked() )
1989 : {
1990 0 : if ( pEdit == &aWidthED )
1991 : {
1992 0 : nHeight = SwTwips((double)nWidth / fWidthHeightRatio);
1993 0 : aHeightED.SetPrcntValue(aHeightED.NormalizePercent(nHeight), FUNIT_TWIP);
1994 : }
1995 0 : else if(pEdit == &aHeightED)
1996 : {
1997 0 : nWidth = SwTwips((double)nHeight * fWidthHeightRatio);
1998 0 : aWidthED.SetPrcntValue(aWidthED.NormalizePercent(nWidth), FUNIT_TWIP);
1999 : }
2000 : }
2001 0 : fWidthHeightRatio = nHeight ? double(nWidth) / double(nHeight) : 1.0;
2002 0 : UpdateExample();
2003 0 : return 0;
2004 : }
2005 :
2006 0 : void SwFrmPage::UpdateExample()
2007 : {
2008 0 : sal_uInt16 nPos = aHorizontalDLB.GetSelectEntryPos();
2009 0 : if ( pHMap && nPos != LISTBOX_ENTRY_NOTFOUND )
2010 : {
2011 0 : sal_uInt16 nMapPos = GetMapPos(pHMap, aHorizontalDLB);
2012 0 : short nAlign = GetAlignment(pHMap, nMapPos, aHorizontalDLB, aHoriRelationLB);
2013 0 : short nRel = GetRelation(pHMap, aHoriRelationLB);
2014 :
2015 0 : aExampleWN.SetHAlign(nAlign);
2016 0 : aExampleWN.SetHoriRel(nRel);
2017 : }
2018 :
2019 0 : nPos = aVerticalDLB.GetSelectEntryPos();
2020 0 : if ( pVMap && nPos != LISTBOX_ENTRY_NOTFOUND )
2021 : {
2022 0 : sal_uInt16 nMapPos = GetMapPos(pVMap, aVerticalDLB);
2023 0 : short nAlign = GetAlignment(pVMap, nMapPos, aVerticalDLB, aVertRelationLB);
2024 0 : short nRel = GetRelation(pVMap, aVertRelationLB);
2025 :
2026 0 : aExampleWN.SetVAlign(nAlign);
2027 0 : aExampleWN.SetVertRel(nRel);
2028 : }
2029 :
2030 : // size
2031 0 : long nXPos = static_cast< long >(aAtHorzPosED.Denormalize(aAtHorzPosED.GetValue(FUNIT_TWIP)));
2032 0 : long nYPos = static_cast< long >(aAtVertPosED.Denormalize(aAtVertPosED.GetValue(FUNIT_TWIP)));
2033 0 : aExampleWN.SetRelPos(Point(nXPos, nYPos));
2034 :
2035 0 : aExampleWN.SetAnchor( static_cast< sal_uInt16 >(GetAnchor()) );
2036 0 : aExampleWN.Invalidate();
2037 0 : }
2038 :
2039 0 : void SwFrmPage::Init(const SfxItemSet& rSet, sal_Bool bReset)
2040 : {
2041 0 : if(!bFormat)
2042 : {
2043 0 : SwWrtShell* pSh = getFrmDlgParentShell();
2044 :
2045 : // size
2046 0 : const sal_Bool bSizeFixed = pSh->IsSelObjProtected( FLYPROTECT_FIXED );
2047 :
2048 0 : aWidthED .Enable( !bSizeFixed );
2049 0 : aHeightED.Enable( !bSizeFixed );
2050 :
2051 : // size controls for math OLE objects
2052 0 : if ( DLG_FRM_OLE == nDlgType && ! bNew )
2053 : {
2054 : // disable width and height for math objects
2055 0 : const SvGlobalName& rFactNm( pSh->GetOLEObject()->getClassID() );
2056 :
2057 : struct _GlobalNameId {
2058 : sal_uInt32 n1;
2059 : sal_uInt16 n2, n3;
2060 : sal_uInt8 b8, b9, b10, b11, b12, b13, b14, b15;
2061 : } aGlbNmIds[4] = { { SO3_SM_CLASSID_60 }, { SO3_SM_CLASSID_50 },
2062 0 : { SO3_SM_CLASSID_40 }, { SO3_SM_CLASSID_30 } };
2063 :
2064 0 : for ( int i = 0; i < 4; ++i ) {
2065 0 : const _GlobalNameId& rId = aGlbNmIds[ i ];
2066 :
2067 : SvGlobalName aGlbNm( rId.n1, rId.n2, rId.n3,
2068 : rId.b8, rId.b9, rId.b10, rId.b11,
2069 0 : rId.b12, rId.b13, rId.b14, rId.b15 );
2070 :
2071 0 : if( rFactNm == aGlbNm )
2072 : {
2073 : // disable size controls for math OLE objects
2074 0 : aWidthFT.Disable();
2075 0 : aWidthED.Disable();
2076 0 : aRelWidthCB.Disable();
2077 0 : aHeightFT.Disable();
2078 0 : aHeightED.Disable();
2079 0 : aRelHeightCB.Disable();
2080 0 : aFixedRatioCB.Disable();
2081 0 : aRealSizeBT.Disable();
2082 : break;
2083 : }
2084 0 : }
2085 :
2086 : // TODO/LATER: get correct aspect
2087 0 : if(0 != (pSh->GetOLEObject()->getStatus( embed::Aspects::MSOLE_CONTENT ) & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE ) )
2088 0 : aRealSizeBT.Disable();
2089 : }
2090 : }
2091 :
2092 0 : const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
2093 0 : sal_Int64 nWidth = aWidthED.NormalizePercent(rSize.GetWidth());
2094 0 : sal_Int64 nHeight = aHeightED.NormalizePercent(rSize.GetHeight());
2095 :
2096 0 : if (nWidth != aWidthED.GetValue(FUNIT_TWIP))
2097 : {
2098 0 : if(!bReset)
2099 : {
2100 : // value was changed by circulation-Tabpage and
2101 : // has to be set with Modify-Flag
2102 0 : aWidthED.SetUserValue(nWidth, FUNIT_TWIP);
2103 : }
2104 : else
2105 0 : aWidthED.SetPrcntValue(nWidth, FUNIT_TWIP);
2106 : }
2107 :
2108 0 : if (nHeight != aHeightED.GetValue(FUNIT_TWIP))
2109 : {
2110 0 : if (!bReset)
2111 : {
2112 : // values was changed by circulation-Tabpage and
2113 : // has to be set with Modify-Flag
2114 0 : aHeightED.SetUserValue(nHeight, FUNIT_TWIP);
2115 : }
2116 : else
2117 0 : aHeightED.SetPrcntValue(nHeight, FUNIT_TWIP);
2118 : }
2119 :
2120 0 : if (!IsInGraficMode())
2121 : {
2122 0 : SwFrmSize eSize = rSize.GetHeightSizeType();
2123 0 : sal_Bool bCheck = eSize != ATT_FIX_SIZE;
2124 0 : aAutoHeightCB.Check( bCheck );
2125 0 : HandleAutoCB( bCheck, aHeightFT, aHeightAutoFT );
2126 0 : if( eSize == ATT_VAR_SIZE )
2127 0 : aHeightED.SetValue( aHeightED.GetMin(), FUNIT_NONE );
2128 :
2129 0 : eSize = rSize.GetWidthSizeType();
2130 0 : bCheck = eSize != ATT_FIX_SIZE;
2131 0 : aAutoWidthCB.Check( bCheck );
2132 0 : HandleAutoCB( bCheck, aWidthFT, aWidthAutoFT );
2133 0 : if( eSize == ATT_VAR_SIZE )
2134 0 : aWidthED.SetValue( aWidthED.GetMin(), FUNIT_NONE );
2135 :
2136 0 : if ( !bFormat )
2137 : {
2138 0 : SwWrtShell* pSh = getFrmDlgParentShell();
2139 0 : const SwFrmFmt* pFmt = pSh->GetFlyFrmFmt();
2140 0 : if( pFmt && pFmt->GetChain().GetNext() )
2141 0 : aAutoHeightCB.Enable( sal_False );
2142 : }
2143 : }
2144 : else
2145 0 : aAutoHeightCB.Hide();
2146 :
2147 : // organise circulation-gap for character bound frames
2148 0 : const SvxULSpaceItem &rUL = (const SvxULSpaceItem &)rSet.Get(RES_UL_SPACE);
2149 0 : nUpperBorder = rUL.GetUpper();
2150 0 : nLowerBorder = rUL.GetLower();
2151 :
2152 0 : if(SFX_ITEM_SET == rSet.GetItemState(FN_KEEP_ASPECT_RATIO))
2153 : {
2154 0 : aFixedRatioCB.Check(((const SfxBoolItem&)rSet.Get(FN_KEEP_ASPECT_RATIO)).GetValue());
2155 0 : aFixedRatioCB.SaveValue();
2156 : }
2157 :
2158 : // columns
2159 0 : SwFmtCol aCol( (const SwFmtCol&)rSet.Get(RES_COL) );
2160 0 : ::FitToActualSize( aCol, (sal_uInt16)rSize.GetWidth() );
2161 :
2162 0 : RndStdIds eAnchorId = (RndStdIds)GetAnchor();
2163 :
2164 0 : if ( bNew && !bFormat )
2165 0 : InitPos(eAnchorId, USHRT_MAX, 0, USHRT_MAX, USHRT_MAX, LONG_MAX, LONG_MAX);
2166 : else
2167 : {
2168 0 : const SwFmtHoriOrient& rHori = (const SwFmtHoriOrient&)rSet.Get(RES_HORI_ORIENT);
2169 0 : const SwFmtVertOrient& rVert = (const SwFmtVertOrient&)rSet.Get(RES_VERT_ORIENT);
2170 0 : nOldH = rHori.GetHoriOrient();
2171 0 : nOldHRel = rHori.GetRelationOrient();
2172 0 : nOldV = rVert.GetVertOrient(),
2173 0 : nOldVRel = rVert.GetRelationOrient();
2174 :
2175 0 : if (eAnchorId == FLY_AT_PAGE)
2176 : {
2177 0 : if (nOldHRel == text::RelOrientation::FRAME)
2178 0 : nOldHRel = text::RelOrientation::PAGE_FRAME;
2179 0 : else if (nOldHRel == text::RelOrientation::PRINT_AREA)
2180 0 : nOldHRel = text::RelOrientation::PAGE_PRINT_AREA;
2181 0 : if (nOldVRel == text::RelOrientation::FRAME)
2182 0 : nOldVRel = text::RelOrientation::PAGE_FRAME;
2183 0 : else if (nOldVRel == text::RelOrientation::PRINT_AREA)
2184 0 : nOldVRel = text::RelOrientation::PAGE_PRINT_AREA;
2185 : }
2186 :
2187 0 : aMirrorPagesCB.Check(rHori.IsPosToggle());
2188 0 : aMirrorPagesCB.SaveValue();
2189 :
2190 : InitPos(eAnchorId,
2191 : nOldH,
2192 : nOldHRel,
2193 : nOldV,
2194 : nOldVRel,
2195 : rHori.GetPos(),
2196 0 : rVert.GetPos());
2197 : }
2198 :
2199 : // transparent for example
2200 : // circulation for example
2201 0 : const SwFmtSurround& rSurround = (const SwFmtSurround&)rSet.Get(RES_SURROUND);
2202 0 : aExampleWN.SetWrap ( static_cast< sal_uInt16 >(rSurround.GetSurround()) );
2203 :
2204 0 : if ( rSurround.GetSurround() == SURROUND_THROUGHT )
2205 : {
2206 0 : const SvxOpaqueItem& rOpaque = (const SvxOpaqueItem&)rSet.Get(RES_OPAQUE);
2207 0 : aExampleWN.SetTransparent(!rOpaque.GetValue());
2208 : }
2209 :
2210 : // switch to percent if applicable
2211 0 : RangeModifyHdl(&aWidthED); // set reference values (for 100%)
2212 :
2213 0 : if (rSize.GetWidthPercent() == 0xff || rSize.GetHeightPercent() == 0xff)
2214 0 : aFixedRatioCB.Check(sal_True);
2215 0 : if (rSize.GetWidthPercent() && rSize.GetWidthPercent() != 0xff &&
2216 0 : !aRelWidthCB.IsChecked())
2217 : {
2218 0 : aRelWidthCB.Check(sal_True);
2219 0 : RelSizeClickHdl(&aRelWidthCB);
2220 0 : aWidthED.SetPrcntValue(rSize.GetWidthPercent(), FUNIT_CUSTOM);
2221 : }
2222 0 : if (rSize.GetHeightPercent() && rSize.GetHeightPercent() != 0xff &&
2223 0 : !aRelHeightCB.IsChecked())
2224 : {
2225 0 : aRelHeightCB.Check(sal_True);
2226 0 : RelSizeClickHdl(&aRelHeightCB);
2227 0 : aHeightED.SetPrcntValue(rSize.GetHeightPercent(), FUNIT_CUSTOM);
2228 : }
2229 0 : aRelWidthCB.SaveValue();
2230 0 : aRelHeightCB.SaveValue();
2231 0 : }
2232 :
2233 0 : sal_uInt16* SwFrmPage::GetRanges()
2234 : {
2235 0 : return aPageRg;
2236 : }
2237 :
2238 0 : void SwFrmPage::SetFormatUsed(sal_Bool bFmt)
2239 : {
2240 0 : bFormat = bFmt;
2241 0 : if(bFormat)
2242 : {
2243 0 : aAnchorAtPageRB.Hide();
2244 0 : aAnchorAtParaRB.Hide();
2245 0 : aAnchorAtCharRB.Hide();
2246 0 : aAnchorAsCharRB.Hide();
2247 0 : aAnchorAtFrameRB.Hide();
2248 0 : aTypeFL.Hide();
2249 0 : aTypeSepFL.Hide();
2250 : }
2251 0 : }
2252 :
2253 :
2254 0 : void SwFrmPage::EnableVerticalPositioning( bool bEnable )
2255 : {
2256 0 : m_bAllowVertPositioning = bEnable;
2257 0 : aVerticalFT.Enable( bEnable );
2258 0 : aVerticalDLB.Enable( bEnable );
2259 0 : aAtVertPosFT.Enable( bEnable );
2260 0 : aAtVertPosED.Enable( bEnable );
2261 0 : aVertRelationFT.Enable( bEnable );
2262 0 : aVertRelationLB.Enable( bEnable );
2263 0 : }
2264 :
2265 :
2266 0 : SwGrfExtPage::SwGrfExtPage(Window *pParent, const SfxItemSet &rSet) :
2267 : SfxTabPage( pParent, SW_RES(TP_GRF_EXT), rSet ),
2268 : aMirrorFL (this, SW_RES( FL_MIRROR )),
2269 : aMirrorVertBox (this, SW_RES( CB_VERT )),
2270 : aMirrorHorzBox (this, SW_RES( CB_HOR )),
2271 : aAllPagesRB (this, SW_RES( RB_MIRROR_ALL_PAGES )),
2272 : aLeftPagesRB (this, SW_RES( RB_MIRROR_LEFT_PAGES )),
2273 : aRightPagesRB (this, SW_RES( RB_MIRROR_RIGHT_PAGES )),
2274 : aBmpWin (this, WN_BMP, Graphic(), BitmapEx(SW_RES(BMP_EXAMPLE))),
2275 : aConnectFL (this, SW_RES( FL_CONNECT )),
2276 : aConnectFT (this, SW_RES( FT_CONNECT )),
2277 : aConnectED (this, SW_RES( ED_CONNECT )),
2278 : aBrowseBT (this, SW_RES( PB_BROWSE )),
2279 0 : pGrfDlg ( 0 )
2280 : {
2281 0 : FreeResource();
2282 :
2283 0 : aBrowseBT.SetAccessibleRelationMemberOf(&aConnectFL);
2284 :
2285 0 : SetExchangeSupport();
2286 0 : aMirrorHorzBox.SetClickHdl( LINK(this, SwGrfExtPage, MirrorHdl));
2287 0 : aMirrorVertBox.SetClickHdl( LINK(this, SwGrfExtPage, MirrorHdl));
2288 0 : aBrowseBT.SetClickHdl ( LINK(this, SwGrfExtPage, BrowseHdl));
2289 0 : }
2290 :
2291 0 : SwGrfExtPage::~SwGrfExtPage()
2292 : {
2293 0 : delete pGrfDlg;
2294 0 : }
2295 :
2296 0 : SfxTabPage* SwGrfExtPage::Create( Window *pParent, const SfxItemSet &rSet )
2297 : {
2298 0 : return new SwGrfExtPage( pParent, rSet );
2299 : }
2300 :
2301 0 : void SwGrfExtPage::Reset(const SfxItemSet &rSet)
2302 : {
2303 : const SfxPoolItem* pItem;
2304 0 : sal_uInt16 nHtmlMode = ::GetHtmlMode((const SwDocShell*)SfxObjectShell::Current());
2305 0 : bHtmlMode = nHtmlMode & HTMLMODE_ON ? sal_True : sal_False;
2306 :
2307 0 : if( SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_GRF_CONNECT, sal_True, &pItem)
2308 0 : && ((const SfxBoolItem *)pItem)->GetValue() )
2309 : {
2310 0 : aBrowseBT.Enable();
2311 0 : aConnectED.SetReadOnly(sal_False);
2312 : }
2313 :
2314 0 : ActivatePage(rSet);
2315 0 : }
2316 :
2317 0 : void SwGrfExtPage::ActivatePage(const SfxItemSet& rSet)
2318 : {
2319 0 : const SvxProtectItem& rProt = (const SvxProtectItem& )rSet.Get(RES_PROTECT);
2320 0 : sal_Bool bProtCntnt = rProt.IsCntntProtected();
2321 :
2322 0 : const SfxPoolItem* pItem = 0;
2323 0 : sal_Bool bEnable = sal_False;
2324 0 : sal_Bool bEnableMirrorRB = sal_False;
2325 :
2326 0 : SfxItemState eState = rSet.GetItemState(RES_GRFATR_MIRRORGRF, sal_True, &pItem);
2327 0 : if( SFX_ITEM_UNKNOWN != eState && !bProtCntnt && !bHtmlMode )
2328 : {
2329 0 : if( SFX_ITEM_SET != eState )
2330 0 : pItem = &rSet.Get( RES_GRFATR_MIRRORGRF );
2331 :
2332 0 : bEnable = sal_True;
2333 :
2334 0 : MirrorGraph eMirror = static_cast< MirrorGraph >(((const SwMirrorGrf* )pItem)->GetValue());
2335 0 : switch( eMirror )
2336 : {
2337 0 : case RES_MIRROR_GRAPH_DONT: break;
2338 0 : case RES_MIRROR_GRAPH_VERT: aMirrorHorzBox.Check(sal_True); break;
2339 0 : case RES_MIRROR_GRAPH_HOR: aMirrorVertBox.Check(sal_True); break;
2340 0 : case RES_MIRROR_GRAPH_BOTH: aMirrorHorzBox.Check(sal_True);
2341 0 : aMirrorVertBox.Check(sal_True);
2342 0 : break;
2343 : default:
2344 : ;
2345 : }
2346 :
2347 0 : sal_uInt16 nPos = ((const SwMirrorGrf* )pItem)->IsGrfToggle() ? 1 : 0;
2348 : nPos += (eMirror == RES_MIRROR_GRAPH_VERT || eMirror == RES_MIRROR_GRAPH_BOTH)
2349 0 : ? 2 : 0;
2350 :
2351 0 : bEnableMirrorRB = nPos != 0;
2352 :
2353 0 : switch (nPos)
2354 : {
2355 : case 1: // mirror at left / even pages
2356 0 : aLeftPagesRB.Check();
2357 0 : aMirrorHorzBox.Check(sal_True);
2358 0 : break;
2359 : case 2: // mirror on all pages
2360 0 : aAllPagesRB.Check();
2361 0 : break;
2362 : case 3: // mirror on right / odd pages
2363 0 : aRightPagesRB.Check();
2364 0 : break;
2365 : default:
2366 0 : aAllPagesRB.Check();
2367 0 : break;
2368 : }
2369 : }
2370 :
2371 0 : if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_GRAF_GRAPHIC, sal_False, &pItem ) )
2372 : {
2373 0 : const SvxBrushItem& rBrush = *(SvxBrushItem*)pItem;
2374 0 : if( rBrush.GetGraphicLink() )
2375 : {
2376 0 : aGrfName = aNewGrfName = *rBrush.GetGraphicLink();
2377 0 : aConnectED.SetText( aNewGrfName );
2378 : }
2379 0 : const Graphic* pGrf = rBrush.GetGraphic();
2380 0 : if( pGrf )
2381 0 : aBmpWin.SetGraphic( *pGrf );
2382 : }
2383 :
2384 0 : aAllPagesRB .Enable(bEnableMirrorRB);
2385 0 : aLeftPagesRB.Enable(bEnableMirrorRB);
2386 0 : aRightPagesRB.Enable(bEnableMirrorRB);
2387 0 : aMirrorHorzBox.Enable(bEnable);
2388 0 : aMirrorVertBox.Enable(bEnable);
2389 0 : aMirrorFL.Enable(bEnable);
2390 :
2391 0 : aAllPagesRB .SaveValue();
2392 0 : aLeftPagesRB.SaveValue();
2393 0 : aRightPagesRB.SaveValue();
2394 0 : aMirrorHorzBox.SaveValue();
2395 0 : aMirrorVertBox.SaveValue();
2396 :
2397 0 : aBmpWin.MirrorHorz( aMirrorVertBox.IsChecked() );
2398 0 : aBmpWin.MirrorVert( aMirrorHorzBox.IsChecked() );
2399 0 : aBmpWin.Invalidate();
2400 0 : }
2401 :
2402 0 : sal_Bool SwGrfExtPage::FillItemSet( SfxItemSet &rSet )
2403 : {
2404 0 : sal_Bool bModified = sal_False;
2405 0 : if ( aMirrorHorzBox.GetSavedValue() != aMirrorHorzBox.IsChecked() ||
2406 0 : aMirrorVertBox.GetSavedValue() != aMirrorVertBox.IsChecked() ||
2407 0 : aAllPagesRB .GetSavedValue() != aAllPagesRB .IsChecked() ||
2408 0 : aLeftPagesRB.GetSavedValue() != aLeftPagesRB.IsChecked() ||
2409 0 : aRightPagesRB.GetSavedValue() != aRightPagesRB.IsChecked())
2410 : {
2411 0 : bModified = sal_True;
2412 :
2413 0 : sal_Bool bHori = sal_False;
2414 :
2415 0 : if (aMirrorHorzBox.IsChecked() &&
2416 0 : !aLeftPagesRB.IsChecked())
2417 0 : bHori = sal_True;
2418 :
2419 : MirrorGraph eMirror;
2420 0 : eMirror = aMirrorVertBox.IsChecked() && bHori ?
2421 : RES_MIRROR_GRAPH_BOTH : bHori ?
2422 0 : RES_MIRROR_GRAPH_VERT : aMirrorVertBox.IsChecked() ?
2423 0 : RES_MIRROR_GRAPH_HOR : RES_MIRROR_GRAPH_DONT;
2424 :
2425 0 : sal_Bool bMirror = !aAllPagesRB.IsChecked();
2426 0 : SwMirrorGrf aMirror( eMirror );
2427 0 : aMirror.SetGrfToggle(bMirror );
2428 0 : rSet.Put( aMirror );
2429 : }
2430 :
2431 0 : if( aGrfName != aNewGrfName || aConnectED.IsModified() )
2432 : {
2433 0 : bModified = sal_True;
2434 0 : aGrfName = aConnectED.GetText();
2435 : rSet.Put( SvxBrushItem( aGrfName, aFilterName, GPOS_LT,
2436 0 : SID_ATTR_GRAF_GRAPHIC ));
2437 : }
2438 0 : return bModified;
2439 : }
2440 :
2441 0 : int SwGrfExtPage::DeactivatePage(SfxItemSet *_pSet)
2442 : {
2443 0 : if( _pSet )
2444 0 : FillItemSet( *_pSet );
2445 0 : return sal_True;
2446 : }
2447 :
2448 0 : IMPL_LINK_NOARG(SwGrfExtPage, BrowseHdl)
2449 : {
2450 0 : if(!pGrfDlg)
2451 : {
2452 : pGrfDlg = new FileDialogHelper(
2453 : ui::dialogs::TemplateDescription::FILEOPEN_LINK_PREVIEW,
2454 0 : SFXWB_GRAPHIC );
2455 0 : pGrfDlg->SetTitle(SW_RESSTR(STR_EDIT_GRF ));
2456 : }
2457 0 : pGrfDlg->SetDisplayDirectory( aConnectED.GetText() );
2458 0 : uno::Reference < ui::dialogs::XFilePicker > xFP = pGrfDlg->GetFilePicker();
2459 0 : uno::Reference < ui::dialogs::XFilePickerControlAccess > xCtrlAcc(xFP, uno::UNO_QUERY);
2460 0 : sal_Bool bTrue = sal_True;
2461 0 : uno::Any aVal(&bTrue, ::getBooleanCppuType());
2462 0 : xCtrlAcc->setValue( ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_LINK, 0, aVal);
2463 :
2464 0 : if ( pGrfDlg->Execute() == ERRCODE_NONE )
2465 : { // remember selected filter
2466 0 : aFilterName = pGrfDlg->GetCurrentFilter();
2467 : aNewGrfName = INetURLObject::decode( pGrfDlg->GetPath(),
2468 : INET_HEX_ESCAPE,
2469 : INetURLObject::DECODE_UNAMBIGUOUS,
2470 0 : RTL_TEXTENCODING_UTF8 );
2471 0 : aConnectED.SetModifyFlag();
2472 0 : aConnectED.SetText( aNewGrfName );
2473 : //reset mirrors because maybe a Bitmap was swapped with
2474 : //another type of graphic that cannot be mirrored.
2475 0 : aMirrorVertBox.Check(sal_False);
2476 0 : aMirrorHorzBox.Check(sal_False);
2477 0 : aAllPagesRB .Enable(sal_False);
2478 0 : aLeftPagesRB.Enable(sal_False);
2479 0 : aRightPagesRB.Enable(sal_False);
2480 0 : aBmpWin.MirrorHorz(sal_False);
2481 0 : aBmpWin.MirrorVert(sal_False);
2482 :
2483 0 : Graphic aGraphic;
2484 0 : GraphicFilter::LoadGraphic( pGrfDlg->GetPath(), aEmptyStr, aGraphic );
2485 0 : aBmpWin.SetGraphic(aGraphic);
2486 :
2487 0 : sal_Bool bEnable = GRAPHIC_BITMAP == aGraphic.GetType() ||
2488 0 : GRAPHIC_GDIMETAFILE == aGraphic.GetType();
2489 0 : aMirrorVertBox.Enable(bEnable);
2490 0 : aMirrorHorzBox.Enable(bEnable);
2491 0 : aAllPagesRB .Enable(bEnable);
2492 0 : aLeftPagesRB.Enable(bEnable);
2493 0 : aRightPagesRB.Enable(bEnable);
2494 : }
2495 0 : return 0;
2496 : }
2497 :
2498 0 : IMPL_LINK_NOARG(SwGrfExtPage, MirrorHdl)
2499 : {
2500 0 : sal_Bool bEnable = aMirrorHorzBox.IsChecked();
2501 :
2502 0 : aBmpWin.MirrorHorz( aMirrorVertBox.IsChecked() );
2503 0 : aBmpWin.MirrorVert( bEnable );
2504 :
2505 0 : aAllPagesRB .Enable(bEnable);
2506 0 : aLeftPagesRB.Enable(bEnable);
2507 0 : aRightPagesRB.Enable(bEnable);
2508 :
2509 0 : if (!aAllPagesRB.IsChecked() && !aLeftPagesRB.IsChecked() && !aRightPagesRB.IsChecked())
2510 0 : aAllPagesRB.Check();
2511 :
2512 0 : return 0;
2513 : }
2514 :
2515 : /*--------------------------------------------------------------------
2516 : Description: example window
2517 : --------------------------------------------------------------------*/
2518 0 : BmpWindow::BmpWindow( Window* pPar, sal_uInt16 nId,
2519 : const Graphic& rGraphic, const BitmapEx& rBmp ) :
2520 : Window(pPar, SW_RES(nId)),
2521 : aGraphic(rGraphic),
2522 : aBmp(rBmp),
2523 : bHorz(sal_False),
2524 : bVert(sal_False),
2525 : bGraphic(sal_False),
2526 0 : bLeftAlign(sal_False)
2527 : {
2528 0 : SetBackground();
2529 0 : SetPaintTransparent(sal_True);
2530 0 : }
2531 :
2532 0 : void BmpWindow::Paint( const Rectangle& )
2533 : {
2534 0 : Point aPntPos;
2535 0 : Size aPntSz( GetSizePixel() );
2536 0 : Size aGrfSize;
2537 0 : if(bGraphic)
2538 0 : aGrfSize = ::GetGraphicSizeTwip(aGraphic, this);
2539 : //it should show the default bitmap also if no graphic can be found
2540 0 : if(!aGrfSize.Width() && !aGrfSize.Height())
2541 0 : aGrfSize = PixelToLogic(aBmp.GetSizePixel());
2542 :
2543 0 : long nRelGrf = aGrfSize.Width() * 100L / aGrfSize.Height();
2544 0 : long nRelWin = aPntSz.Width() * 100L / aPntSz.Height();
2545 0 : if(nRelGrf < nRelWin)
2546 : {
2547 0 : const long nWidth = aPntSz.Width();
2548 : // if we use a replacement preview, try to draw at original size
2549 0 : if ( !bGraphic && ( aGrfSize.Width() <= aPntSz.Width() ) && ( aGrfSize.Height() <= aPntSz.Height() ) )
2550 : {
2551 0 : const long nHeight = aPntSz.Height();
2552 0 : aPntSz.Width() = aGrfSize.Width();
2553 0 : aPntSz.Height() = aGrfSize.Height();
2554 0 : aPntPos.Y() += (nHeight - aPntSz.Height()) / 2;
2555 : }
2556 : else
2557 0 : aPntSz.Width() = aPntSz.Height() * nRelGrf /100;
2558 :
2559 0 : if(!bLeftAlign)
2560 0 : aPntPos.X() += nWidth - aPntSz.Width() ;
2561 : }
2562 :
2563 0 : if ( bHorz )
2564 : {
2565 0 : aPntPos.Y() += aPntSz.Height();
2566 0 : aPntPos.Y() --;
2567 0 : aPntSz.Height() *= -1;
2568 : }
2569 0 : if ( bVert )
2570 : {
2571 0 : aPntPos.X() += aPntSz.Width();
2572 0 : aPntPos.X()--;
2573 0 : aPntSz.Width() *= -1;
2574 : }
2575 :
2576 0 : if ( bGraphic )
2577 0 : aGraphic.Draw( this, aPntPos, aPntSz );
2578 : else
2579 : {
2580 0 : DrawBitmapEx( aPntPos, aPntSz, aBmp );
2581 : }
2582 0 : }
2583 :
2584 0 : BmpWindow::~BmpWindow()
2585 : {
2586 0 : }
2587 :
2588 0 : void BmpWindow::SetGraphic(const Graphic& rGrf)
2589 : {
2590 0 : aGraphic = rGrf;
2591 0 : Size aGrfSize = ::GetGraphicSizeTwip(aGraphic, this);
2592 0 : bGraphic = aGrfSize.Width() && aGrfSize.Height();
2593 0 : Invalidate();
2594 0 : }
2595 :
2596 : /***************************************************************************
2597 : Description: set URL and ImageMap at frames
2598 : ***************************************************************************/
2599 0 : SwFrmURLPage::SwFrmURLPage( Window *pParent, const SfxItemSet &rSet ) :
2600 : SfxTabPage(pParent, SW_RES(TP_FRM_URL), rSet),
2601 : aHyperLinkFL (this, SW_RES( FL_HYPERLINK )),
2602 : aURLFT (this, SW_RES( FT_URL )),
2603 : aURLED (this, SW_RES( ED_URL )),
2604 : aSearchPB (this, SW_RES( PB_SEARCH )),
2605 : aNameFT (this, SW_RES( FT_NAME )),
2606 : aNameED (this, SW_RES( ED_NAME )),
2607 : aFrameFT (this, SW_RES( FT_FRAME )),
2608 : aFrameCB (this, SW_RES( CB_FRAME )),
2609 :
2610 : aImageFL (this, SW_RES( FL_IMAGE )),
2611 : aServerCB (this, SW_RES( CB_SERVER )),
2612 0 : aClientCB (this, SW_RES( CB_CLIENT ))
2613 : {
2614 0 : FreeResource();
2615 0 : aSearchPB.SetClickHdl(LINK(this, SwFrmURLPage, InsertFileHdl));
2616 0 : }
2617 :
2618 0 : SwFrmURLPage::~SwFrmURLPage()
2619 : {
2620 0 : }
2621 :
2622 0 : void SwFrmURLPage::Reset( const SfxItemSet &rSet )
2623 : {
2624 : const SfxPoolItem* pItem;
2625 0 : if ( SFX_ITEM_SET == rSet.GetItemState( SID_DOCFRAME, sal_True, &pItem))
2626 : {
2627 0 : TargetList* pList = new TargetList;
2628 0 : ((const SfxFrameItem*)pItem)->GetFrame()->GetTargetList(*pList);
2629 0 : if( !pList->empty() )
2630 : {
2631 0 : size_t nCount = pList->size();
2632 0 : for ( size_t i = 0; i < nCount; i++ )
2633 : {
2634 0 : aFrameCB.InsertEntry( *pList->at( i ) );
2635 : }
2636 0 : for ( size_t i = nCount; i; )
2637 : {
2638 0 : delete pList->at( --i );
2639 : }
2640 : }
2641 0 : delete pList;
2642 : }
2643 :
2644 0 : if ( SFX_ITEM_SET == rSet.GetItemState( RES_URL, sal_True, &pItem ) )
2645 : {
2646 0 : const SwFmtURL* pFmtURL = (const SwFmtURL*)pItem;
2647 0 : aURLED.SetText( INetURLObject::decode( pFmtURL->GetURL(),
2648 : INET_HEX_ESCAPE,
2649 : INetURLObject::DECODE_UNAMBIGUOUS,
2650 0 : RTL_TEXTENCODING_UTF8 ));
2651 0 : aNameED.SetText( pFmtURL->GetName());
2652 :
2653 0 : aClientCB.Enable( pFmtURL->GetMap() != 0 );
2654 0 : aClientCB.Check ( pFmtURL->GetMap() != 0 );
2655 0 : aServerCB.Check ( pFmtURL->IsServerMap() );
2656 :
2657 0 : aFrameCB.SetText(pFmtURL->GetTargetFrameName());
2658 0 : aFrameCB.SaveValue();
2659 : }
2660 : else
2661 0 : aClientCB.Enable( sal_False );
2662 :
2663 0 : aServerCB.SaveValue();
2664 0 : aClientCB.SaveValue();
2665 0 : }
2666 :
2667 0 : sal_Bool SwFrmURLPage::FillItemSet(SfxItemSet &rSet)
2668 : {
2669 0 : sal_Bool bModified = sal_False;
2670 0 : const SwFmtURL* pOldURL = (SwFmtURL*)GetOldItem(rSet, RES_URL);
2671 : SwFmtURL* pFmtURL;
2672 0 : if(pOldURL)
2673 0 : pFmtURL = (SwFmtURL*)pOldURL->Clone();
2674 : else
2675 0 : pFmtURL = new SwFmtURL();
2676 :
2677 : {
2678 0 : String sText = aURLED.GetText();
2679 :
2680 0 : if( pFmtURL->GetURL() != sText ||
2681 0 : pFmtURL->GetName() != aNameED.GetText() ||
2682 0 : aServerCB.IsChecked() != pFmtURL->IsServerMap() )
2683 : {
2684 0 : pFmtURL->SetURL( sText, aServerCB.IsChecked() );
2685 0 : pFmtURL->SetName( aNameED.GetText() );
2686 0 : bModified = sal_True;
2687 0 : }
2688 : }
2689 :
2690 0 : if(!aClientCB.IsChecked() && pFmtURL->GetMap() != 0)
2691 : {
2692 0 : pFmtURL->SetMap(0);
2693 0 : bModified = sal_True;
2694 : }
2695 :
2696 0 : if(pFmtURL->GetTargetFrameName() != aFrameCB.GetText())
2697 : {
2698 0 : pFmtURL->SetTargetFrameName(aFrameCB.GetText());
2699 0 : bModified = sal_True;
2700 : }
2701 0 : rSet.Put(*pFmtURL);
2702 0 : delete pFmtURL;
2703 0 : return bModified;
2704 : }
2705 :
2706 0 : SfxTabPage* SwFrmURLPage::Create(Window *pParent, const SfxItemSet &rSet)
2707 : {
2708 0 : return new SwFrmURLPage( pParent, rSet );
2709 : }
2710 :
2711 0 : IMPL_LINK_NOARG(SwFrmURLPage, InsertFileHdl)
2712 : {
2713 0 : FileDialogHelper aDlgHelper( ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
2714 0 : uno::Reference < ui::dialogs::XFilePicker > xFP = aDlgHelper.GetFilePicker();
2715 :
2716 : try
2717 : {
2718 0 : String sTemp(aURLED.GetText());
2719 0 : if(sTemp.Len())
2720 0 : xFP->setDisplayDirectory(sTemp);
2721 : }
2722 0 : catch( const uno::Exception& rEx )
2723 : {
2724 : (void) rEx;
2725 : }
2726 0 : if( aDlgHelper.Execute() == ERRCODE_NONE )
2727 : {
2728 0 : aURLED.SetText( xFP->getFiles().getConstArray()[0] );
2729 : }
2730 :
2731 0 : return 0;
2732 : }
2733 :
2734 0 : static void lcl_Move(Window& rWin, sal_Int32 nDiff)
2735 : {
2736 0 : Point aPos(rWin.GetPosPixel());
2737 0 : aPos.Y() -= nDiff;
2738 0 : rWin.SetPosPixel(aPos);
2739 0 : }
2740 :
2741 0 : SwFrmAddPage::SwFrmAddPage(Window *pParent, const SfxItemSet &rSet ) :
2742 : SfxTabPage(pParent, SW_RES(TP_FRM_ADD), rSet),
2743 :
2744 : aNamesFL (this, SW_RES(FL_NAME)),
2745 : aNameFT (this, SW_RES(FT_NAME)),
2746 : aNameED (this, SW_RES(ED_NAME)),
2747 : aAltNameFT (this, SW_RES(FT_ALT_NAME)),
2748 : aAltNameED (this, SW_RES(ED_ALT_NAME)),
2749 : aPrevFT (this, SW_RES(FT_PREV)),
2750 : aPrevLB (this, SW_RES(LB_PREV)),
2751 : aNextFT (this, SW_RES(FT_NEXT)),
2752 : aNextLB (this, SW_RES(LB_NEXT)),
2753 :
2754 : aProtectFL (this, SW_RES(FL_PROTECT)),
2755 : aProtectContentCB (this, SW_RES(CB_PROTECT_CONTENT)),
2756 : aProtectFrameCB (this, SW_RES(CB_PROTECT_FRAME)),
2757 : aProtectSizeCB (this, SW_RES(CB_PROTECT_SIZE)),
2758 : aExtFL (this, SW_RES(FL_EXT)),
2759 :
2760 : aEditInReadonlyCB (this, SW_RES(CB_EDIT_IN_READONLY)),
2761 : aPrintFrameCB (this, SW_RES(CB_PRINT_FRAME)),
2762 : aTextFlowFT (this, SW_RES(FT_TEXTFLOW)),
2763 : aTextFlowLB (this, SW_RES(LB_TEXTFLOW)),
2764 :
2765 : pWrtSh(0),
2766 :
2767 : nDlgType(0),
2768 : bHtmlMode(sal_False),
2769 : bFormat(sal_False),
2770 0 : bNew(sal_False)
2771 : {
2772 0 : FreeResource();
2773 :
2774 0 : }
2775 :
2776 0 : SwFrmAddPage::~SwFrmAddPage()
2777 : {
2778 0 : }
2779 :
2780 0 : SfxTabPage* SwFrmAddPage::Create(Window *pParent, const SfxItemSet &rSet)
2781 : {
2782 0 : return new SwFrmAddPage(pParent, rSet);
2783 : }
2784 :
2785 0 : void SwFrmAddPage::Reset(const SfxItemSet &rSet )
2786 : {
2787 : const SfxPoolItem* pItem;
2788 0 : sal_uInt16 nHtmlMode = ::GetHtmlMode((const SwDocShell*)SfxObjectShell::Current());
2789 0 : bHtmlMode = nHtmlMode & HTMLMODE_ON ? sal_True : sal_False;
2790 0 : if(bHtmlMode)
2791 : {
2792 0 : aProtectContentCB .Hide();
2793 0 : aProtectFrameCB .Hide();
2794 0 : aProtectSizeCB .Hide();
2795 0 : aEditInReadonlyCB .Hide();
2796 0 : aPrintFrameCB .Hide();
2797 0 : aExtFL .Hide();
2798 0 : aProtectFL.Hide();
2799 : }
2800 0 : if ( DLG_FRM_GRF == nDlgType || DLG_FRM_OLE == nDlgType )
2801 : {
2802 0 : aEditInReadonlyCB.Hide();
2803 0 : aPrintFrameCB.SetPosPixel(aEditInReadonlyCB.GetPosPixel());
2804 : }
2805 :
2806 0 : if(SFX_ITEM_SET == rSet.GetItemState(FN_SET_FRM_ALT_NAME, sal_False, &pItem))
2807 : {
2808 0 : aAltNameED.SetText(((const SfxStringItem*)pItem)->GetValue());
2809 0 : aAltNameED.SaveValue();
2810 : }
2811 :
2812 0 : if(!bFormat)
2813 : {
2814 : // insert graphic - properties
2815 : // bNew is not set, so recognise by selection
2816 0 : String aTmpName1;
2817 0 : if(SFX_ITEM_SET == rSet.GetItemState(FN_SET_FRM_NAME, sal_False, &pItem))
2818 : {
2819 0 : aTmpName1 = ((const SfxStringItem*)pItem)->GetValue();
2820 : }
2821 :
2822 : OSL_ENSURE(pWrtSh, "keine Shell?");
2823 0 : if( bNew || !aTmpName1.Len() )
2824 :
2825 0 : switch( nDlgType )
2826 : {
2827 : case DLG_FRM_GRF:
2828 0 : aTmpName1 = pWrtSh->GetUniqueGrfName();
2829 0 : break;
2830 : case DLG_FRM_OLE:
2831 0 : aTmpName1 = pWrtSh->GetUniqueOLEName();
2832 0 : break;
2833 : default:
2834 0 : aTmpName1 = pWrtSh->GetUniqueFrameName();
2835 0 : break;
2836 : }
2837 :
2838 0 : aNameED.SetText( aTmpName1 );
2839 0 : aNameED.SaveValue();
2840 : }
2841 : else
2842 : {
2843 0 : aNameED.Enable( sal_False );
2844 0 : aAltNameED.Enable(sal_False);
2845 0 : aNameFT.Enable( sal_False );
2846 0 : aAltNameFT.Enable(sal_False);
2847 0 : aNamesFL.Enable(sal_False);
2848 : }
2849 0 : if(nDlgType == DLG_FRM_STD && aAltNameFT.IsVisible())
2850 : {
2851 0 : aAltNameFT.Hide();
2852 0 : aAltNameED.Hide();
2853 : //move all controls one step up
2854 : Window* aWindows[] =
2855 : {
2856 : &aPrevFT,
2857 : &aPrevLB,
2858 : &aNextFT,
2859 : &aNextLB,
2860 : &aNamesFL,
2861 : &aProtectContentCB,
2862 : &aProtectFrameCB,
2863 : &aProtectSizeCB,
2864 : &aProtectFL,
2865 : &aEditInReadonlyCB,
2866 : &aPrintFrameCB,
2867 : &aTextFlowFT,
2868 : &aTextFlowLB,
2869 : &aExtFL,
2870 : 0
2871 0 : };
2872 0 : sal_Int32 nOffset = aAltNameED.GetPosPixel().Y() - aNameED.GetPosPixel().Y();
2873 0 : sal_Int32 nIdx = 0;
2874 0 : while(aWindows[nIdx])
2875 : {
2876 0 : lcl_Move(*aWindows[nIdx++], nOffset);
2877 : }
2878 : }
2879 : else
2880 : {
2881 0 : aNameED.SetModifyHdl(LINK(this, SwFrmAddPage, EditModifyHdl));
2882 : }
2883 :
2884 0 : if (!bNew)
2885 : {
2886 0 : SwFrmFmt* pFmt = pWrtSh->GetFlyFrmFmt();
2887 :
2888 0 : if (pFmt)
2889 : {
2890 0 : const SwFmtChain &rChain = pFmt->GetChain();
2891 : const SwFlyFrmFmt* pFlyFmt;
2892 0 : String sNextChain, sPrevChain;
2893 0 : if ((pFlyFmt = rChain.GetPrev()) != 0)
2894 : {
2895 0 : sPrevChain = pFlyFmt->GetName();
2896 : }
2897 :
2898 0 : if ((pFlyFmt = rChain.GetNext()) != 0)
2899 : {
2900 0 : sNextChain = pFlyFmt->GetName();
2901 : }
2902 : //determine chainable frames
2903 0 : ::std::vector< String > aPrevPageFrames;
2904 0 : ::std::vector< String > aThisPageFrames;
2905 0 : ::std::vector< String > aNextPageFrames;
2906 0 : ::std::vector< String > aRemainFrames;
2907 : pWrtSh->GetConnectableFrmFmts(*pFmt, sNextChain, sal_False,
2908 0 : aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames );
2909 0 : lcl_InsertVectors(aPrevLB, aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames);
2910 0 : if(sPrevChain.Len())
2911 : {
2912 0 : if(LISTBOX_ENTRY_NOTFOUND == aPrevLB.GetEntryPos(sPrevChain))
2913 0 : aPrevLB.InsertEntry(sPrevChain, 1);
2914 0 : aPrevLB.SelectEntry(sPrevChain);
2915 : }
2916 : else
2917 0 : aPrevLB.SelectEntryPos(0);
2918 0 : aPrevPageFrames.erase(aPrevPageFrames.begin(), aPrevPageFrames.end());
2919 0 : aNextPageFrames.erase(aNextPageFrames.begin(), aNextPageFrames.end());
2920 0 : aThisPageFrames.erase(aThisPageFrames.begin(), aThisPageFrames.end());
2921 0 : aRemainFrames.erase(aRemainFrames.begin(), aRemainFrames.end());
2922 :
2923 : pWrtSh->GetConnectableFrmFmts(*pFmt, sPrevChain, sal_True,
2924 0 : aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames );
2925 0 : lcl_InsertVectors(aNextLB, aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames);
2926 0 : if(sNextChain.Len())
2927 : {
2928 0 : if(LISTBOX_ENTRY_NOTFOUND == aNextLB.GetEntryPos(sNextChain))
2929 0 : aNextLB.InsertEntry(sNextChain, 1);
2930 0 : aNextLB.SelectEntry(sNextChain);
2931 : }
2932 : else
2933 0 : aNextLB.SelectEntryPos(0);
2934 0 : Link aLink(LINK(this, SwFrmAddPage, ChainModifyHdl));
2935 0 : aPrevLB.SetSelectHdl(aLink);
2936 0 : aNextLB.SetSelectHdl(aLink);
2937 : }
2938 : }
2939 : // Pos Protected
2940 0 : const SvxProtectItem& rProt = (const SvxProtectItem& )rSet.Get(RES_PROTECT);
2941 0 : aProtectFrameCB.Check(rProt.IsPosProtected());
2942 0 : aProtectContentCB.Check(rProt.IsCntntProtected());
2943 0 : aProtectSizeCB.Check(rProt.IsSizeProtected());
2944 :
2945 0 : const SwFmtEditInReadonly& rEdit = (const SwFmtEditInReadonly& )rSet.Get(RES_EDIT_IN_READONLY);
2946 0 : aEditInReadonlyCB.Check(rEdit.GetValue()); aEditInReadonlyCB.SaveValue();
2947 :
2948 : // print
2949 0 : const SvxPrintItem& rPrt = (const SvxPrintItem&)rSet.Get(RES_PRINT);
2950 0 : aPrintFrameCB.Check(rPrt.GetValue()); aPrintFrameCB.SaveValue();
2951 :
2952 : // textflow
2953 : SfxItemState eState;
2954 0 : if( (!bHtmlMode || (0 != (nHtmlMode&HTMLMODE_SOME_STYLES)))
2955 : && DLG_FRM_GRF != nDlgType && DLG_FRM_OLE != nDlgType &&
2956 : SFX_ITEM_UNKNOWN != ( eState = rSet.GetItemState(
2957 : RES_FRAMEDIR, sal_True )) )
2958 : {
2959 0 : aTextFlowFT.Show();
2960 0 : aTextFlowLB.Show();
2961 :
2962 : //vertical text flow is not possible in HTML
2963 0 : if(bHtmlMode)
2964 : {
2965 0 : sal_uLong nData = FRMDIR_VERT_TOP_RIGHT;
2966 0 : aTextFlowLB.RemoveEntry(aTextFlowLB.GetEntryPos((void*)nData));
2967 : }
2968 0 : sal_uInt16 nPos, nVal = ((SvxFrameDirectionItem&)rSet.Get(RES_FRAMEDIR)).GetValue();
2969 0 : for( nPos = aTextFlowLB.GetEntryCount(); nPos; )
2970 0 : if( (sal_uInt16)(long)aTextFlowLB.GetEntryData( --nPos ) == nVal )
2971 0 : break;
2972 0 : aTextFlowLB.SelectEntryPos( nPos );
2973 0 : aTextFlowLB.SaveValue();
2974 : }
2975 : else
2976 : {
2977 0 : aTextFlowFT.Hide();
2978 0 : aTextFlowLB.Hide();
2979 : }
2980 0 : }
2981 :
2982 0 : sal_Bool SwFrmAddPage::FillItemSet(SfxItemSet &rSet)
2983 : {
2984 0 : sal_Bool bRet = sal_False;
2985 0 : if (aNameED.GetText() != aNameED.GetSavedValue())
2986 0 : bRet |= 0 != rSet.Put(SfxStringItem(FN_SET_FRM_NAME, aNameED.GetText()));
2987 0 : if (aAltNameED.GetText() != aAltNameED.GetSavedValue())
2988 0 : bRet |= 0 != rSet.Put(SfxStringItem(FN_SET_FRM_ALT_NAME, aAltNameED.GetText()));
2989 :
2990 : const SfxPoolItem* pOldItem;
2991 0 : SvxProtectItem aProt ( (const SvxProtectItem& )GetItemSet().Get(RES_PROTECT) );
2992 0 : aProt.SetCntntProtect( aProtectContentCB.IsChecked() );
2993 0 : aProt.SetSizeProtect ( aProtectSizeCB.IsChecked() );
2994 0 : aProt.SetPosProtect ( aProtectFrameCB.IsChecked() );
2995 0 : if ( 0 == (pOldItem = GetOldItem(rSet, FN_SET_PROTECT)) ||
2996 0 : aProt != *pOldItem )
2997 0 : bRet |= 0 != rSet.Put( aProt);
2998 :
2999 : sal_Bool bChecked;
3000 0 : if ( (bChecked = aEditInReadonlyCB.IsChecked()) != aEditInReadonlyCB.GetSavedValue() )
3001 0 : bRet |= 0 != rSet.Put( SwFmtEditInReadonly( RES_EDIT_IN_READONLY, bChecked));
3002 :
3003 0 : if ( (bChecked = aPrintFrameCB.IsChecked()) != aPrintFrameCB.GetSavedValue() )
3004 0 : bRet |= 0 != rSet.Put( SvxPrintItem( RES_PRINT, bChecked));
3005 :
3006 : // textflow
3007 0 : if( aTextFlowLB.IsVisible() )
3008 : {
3009 0 : sal_uInt16 nPos = aTextFlowLB.GetSelectEntryPos();
3010 0 : if( nPos != aTextFlowLB.GetSavedValue() )
3011 : {
3012 0 : nPos = (sal_uInt16)(long)aTextFlowLB.GetEntryData( nPos );
3013 : bRet |= 0 != rSet.Put( SvxFrameDirectionItem(
3014 0 : (SvxFrameDirection)nPos, RES_FRAMEDIR ));
3015 : }
3016 : }
3017 0 : if(pWrtSh)
3018 : {
3019 0 : const SwFrmFmt* pFmt = pWrtSh->GetFlyFrmFmt();
3020 0 : if (pFmt)
3021 : {
3022 0 : String sCurrentPrevChain, sCurrentNextChain;
3023 0 : if(aPrevLB.GetSelectEntryPos())
3024 0 : sCurrentPrevChain = aPrevLB.GetSelectEntry();
3025 0 : if(aNextLB.GetSelectEntryPos())
3026 0 : sCurrentNextChain = aNextLB.GetSelectEntry();
3027 0 : const SwFmtChain &rChain = pFmt->GetChain();
3028 : const SwFlyFrmFmt* pFlyFmt;
3029 0 : String sNextChain, sPrevChain;
3030 0 : if ((pFlyFmt = rChain.GetPrev()) != 0)
3031 0 : sPrevChain = pFlyFmt->GetName();
3032 :
3033 0 : if ((pFlyFmt = rChain.GetNext()) != 0)
3034 0 : sNextChain = pFlyFmt->GetName();
3035 0 : if(sPrevChain != sCurrentPrevChain)
3036 0 : bRet |= 0 != rSet.Put(SfxStringItem(FN_PARAM_CHAIN_PREVIOUS, sCurrentPrevChain));
3037 0 : if(sNextChain != sCurrentNextChain)
3038 0 : bRet |= 0 != rSet.Put(SfxStringItem(FN_PARAM_CHAIN_NEXT, sCurrentNextChain));
3039 : }
3040 : }
3041 0 : return bRet;
3042 : }
3043 :
3044 0 : sal_uInt16* SwFrmAddPage::GetRanges()
3045 : {
3046 0 : return aAddPgRg;
3047 : }
3048 :
3049 0 : IMPL_LINK_NOARG(SwFrmAddPage, EditModifyHdl)
3050 : {
3051 0 : sal_Bool bEnable = 0 != aNameED.GetText().Len();
3052 0 : aAltNameED.Enable(bEnable);
3053 0 : aAltNameFT.Enable(bEnable);
3054 :
3055 0 : return 0;
3056 : }
3057 :
3058 0 : void SwFrmAddPage::SetFormatUsed(sal_Bool bFmt)
3059 : {
3060 0 : bFormat = bFmt;
3061 0 : if(bFormat)
3062 : {
3063 0 : aNameFT.Show(sal_False);
3064 0 : aNameED.Show(sal_False);
3065 0 : aAltNameFT.Show(sal_False);
3066 0 : aAltNameED.Show(sal_False);
3067 0 : aPrevFT.Show(sal_False);
3068 0 : aPrevLB.Show(sal_False);
3069 0 : aNextFT.Show(sal_False);
3070 0 : aNextLB.Show(sal_False);
3071 0 : aNamesFL.Show(sal_False);
3072 :
3073 0 : sal_Int32 nDiff = aExtFL.GetPosPixel().Y() - aNamesFL.GetPosPixel().Y();
3074 : Window* aWindows[] =
3075 : {
3076 : &aProtectContentCB,
3077 : &aProtectFrameCB,
3078 : &aProtectSizeCB,
3079 : &aProtectFL,
3080 : &aEditInReadonlyCB,
3081 : &aPrintFrameCB,
3082 : &aExtFL,
3083 : &aTextFlowFT,
3084 : &aTextFlowLB,
3085 : 0
3086 0 : };
3087 0 : sal_Int32 nIdx = 0;
3088 0 : while(aWindows[nIdx])
3089 0 : lcl_Move(*aWindows[nIdx++], nDiff);
3090 : }
3091 0 : }
3092 :
3093 0 : IMPL_LINK(SwFrmAddPage, ChainModifyHdl, ListBox*, pBox)
3094 : {
3095 0 : String sCurrentPrevChain, sCurrentNextChain;
3096 0 : if(aPrevLB.GetSelectEntryPos())
3097 0 : sCurrentPrevChain = aPrevLB.GetSelectEntry();
3098 0 : if(aNextLB.GetSelectEntryPos())
3099 0 : sCurrentNextChain = aNextLB.GetSelectEntry();
3100 0 : SwFrmFmt* pFmt = pWrtSh->GetFlyFrmFmt();
3101 0 : if (pFmt)
3102 : {
3103 0 : sal_Bool bNextBox = &aNextLB == pBox;
3104 0 : ListBox& rChangeLB = bNextBox ? aPrevLB : aNextLB;
3105 0 : for(sal_uInt16 nEntry = rChangeLB.GetEntryCount(); nEntry > 1; nEntry--)
3106 0 : rChangeLB.RemoveEntry(nEntry - 1);
3107 : //determine chainable frames
3108 0 : ::std::vector< String > aPrevPageFrames;
3109 0 : ::std::vector< String > aThisPageFrames;
3110 0 : ::std::vector< String > aNextPageFrames;
3111 0 : ::std::vector< String > aRemainFrames;
3112 : pWrtSh->GetConnectableFrmFmts(*pFmt, bNextBox ? sCurrentNextChain : sCurrentPrevChain, !bNextBox,
3113 0 : aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames );
3114 : lcl_InsertVectors(rChangeLB,
3115 0 : aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames);
3116 0 : String sToSelect = bNextBox ? sCurrentPrevChain : sCurrentNextChain;
3117 0 : if(rChangeLB.GetEntryPos(sToSelect) != LISTBOX_ENTRY_NOTFOUND)
3118 0 : rChangeLB.SelectEntry(sToSelect);
3119 : else
3120 0 : rChangeLB.SelectEntryPos(0);
3121 :
3122 : }
3123 0 : return 0;
3124 0 : }
3125 :
3126 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|