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