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