1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sw.hxx" 26 #ifdef SW_DLLIMPLEMENTATION 27 #undef SW_DLLIMPLEMENTATION 28 #endif 29 30 #include <com/sun/star/embed/Aspects.hpp> 31 #include <com/sun/star/embed/EmbedMisc.hpp> 32 33 #include <cmdid.h> 34 #include <helpid.h> 35 #include <hintids.hxx> 36 #include <vcl/msgbox.hxx> 37 #include <vcl/mnemonic.hxx> 38 #include <svl/urihelper.hxx> 39 #include <svl/stritem.hxx> 40 #include <svx/htmlmode.hxx> 41 #include <editeng/sizeitem.hxx> 42 #include <editeng/opaqitem.hxx> 43 #include <editeng/protitem.hxx> 44 #include <editeng/prntitem.hxx> 45 #include <editeng/brshitem.hxx> 46 #include <editeng/ulspitem.hxx> 47 #include <editeng/frmdiritem.hxx> 48 #include <svx/swframevalidation.hxx> 49 #include <sot/clsids.hxx> 50 51 #include <sfx2/viewfrm.hxx> 52 #include <fmturl.hxx> 53 #include <fmteiro.hxx> 54 #include <fmtcnct.hxx> 55 #include <view.hxx> 56 #include <wrtsh.hxx> 57 #include <swmodule.hxx> 58 #include <uitool.hxx> 59 #include <docsh.hxx> 60 #include <viewopt.hxx> 61 #include <frmatr.hxx> 62 #include <frmdlg.hxx> 63 #include <frmmgr.hxx> 64 #include <frmpage.hxx> 65 #include <wrap.hxx> 66 #include <colmgr.hxx> 67 #include <grfatr.hxx> 68 #include <uiitems.hxx> 69 // OD 19.09.2003 #i18732# 70 #include <fmtfollowtextflow.hxx> 71 72 #include <frmui.hrc> 73 #include <frmpage.hrc> 74 #include <sfx2/filedlghelper.hxx> 75 #include "com/sun/star/ui/dialogs/TemplateDescription.hpp" 76 #include <com/sun/star/ui/dialogs/XFilePicker.hpp> 77 #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> 78 #include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp> 79 #include <svtools/filter.hxx> 80 81 using namespace ::com::sun::star; 82 using ::rtl::OUString; 83 using namespace ::sfx2; 84 85 #define SwFPos SvxSwFramePosString 86 87 struct FrmMap 88 { 89 SvxSwFramePosString::StringId eStrId; 90 SvxSwFramePosString::StringId eMirrorStrId; 91 sal_uInt16 nAlign; 92 sal_uLong nLBRelations; 93 }; 94 95 struct RelationMap 96 { 97 SvxSwFramePosString::StringId eStrId; 98 SvxSwFramePosString::StringId eMirrorStrId; 99 sal_uLong nLBRelation; 100 sal_uInt16 nRelation; 101 }; 102 103 struct StringIdPair_Impl 104 { 105 SvxSwFramePosString::StringId eHori; 106 SvxSwFramePosString::StringId eVert; 107 }; 108 109 #define MAX_PERCENT_WIDTH 254L 110 #define MAX_PERCENT_HEIGHT 254L 111 112 // OD 19.09.2003 #i18732# - change order of alignments 113 #define LB_FRAME 0x00000001L // Textbereich des Absatzes 114 #define LB_PRTAREA 0x00000002L // Textbereich des Absatzes + Einzuege 115 #define LB_VERT_FRAME 0x00000004L // Vertikaler Textbereich des Absatzes 116 #define LB_VERT_PRTAREA 0x00000008L // Vertikaler Textbereich des Absatzes + Einzuege 117 #define LB_REL_FRM_LEFT 0x00000010L // Linker Absatzrand 118 #define LB_REL_FRM_RIGHT 0x00000020L // Rechter Absatzrand 119 120 #define LB_REL_PG_LEFT 0x00000040L // Linker Seitenrand 121 #define LB_REL_PG_RIGHT 0x00000080L // Rechter Seitenrand 122 #define LB_REL_PG_FRAME 0x00000100L // Gesamte Seite 123 #define LB_REL_PG_PRTAREA 0x00000200L // Textbereich der Seite 124 125 #define LB_FLY_REL_PG_LEFT 0x00000400L // Linker Rahmenrand 126 #define LB_FLY_REL_PG_RIGHT 0x00000800L // Rechter Rahmenrand 127 #define LB_FLY_REL_PG_FRAME 0x00001000L // Gesamte Rahmen 128 #define LB_FLY_REL_PG_PRTAREA 0x00002000L // Rahmeninneres 129 130 #define LB_REL_BASE 0x00010000L // Zeichenausrichtung Basis 131 #define LB_REL_CHAR 0x00020000L // Zeichenausrichtung Zeichen 132 #define LB_REL_ROW 0x00040000L // Zeichenausrichtung Zeile 133 134 // OD 10.11.2003 #i22305# 135 #define LB_FLY_VERT_FRAME 0x00100000L // vertical entire frame 136 #define LB_FLY_VERT_PRTAREA 0x00200000L // vertical frame text area 137 138 // OD 11.11.2003 #i22341# 139 #define LB_VERT_LINE 0x00400000L // vertical text line 140 141 static RelationMap __FAR_DATA aRelationMap[] = 142 { 143 {SwFPos::FRAME, SwFPos::FRAME, LB_FRAME, text::RelOrientation::FRAME}, 144 {SwFPos::PRTAREA, SwFPos::PRTAREA, LB_PRTAREA, text::RelOrientation::PRINT_AREA}, 145 {SwFPos::REL_PG_LEFT, SwFPos::MIR_REL_PG_LEFT, LB_REL_PG_LEFT, text::RelOrientation::PAGE_LEFT}, 146 {SwFPos::REL_PG_RIGHT, SwFPos::MIR_REL_PG_RIGHT, LB_REL_PG_RIGHT, text::RelOrientation::PAGE_RIGHT}, 147 {SwFPos::REL_FRM_LEFT, SwFPos::MIR_REL_FRM_LEFT, LB_REL_FRM_LEFT, text::RelOrientation::FRAME_LEFT}, 148 {SwFPos::REL_FRM_RIGHT, SwFPos::MIR_REL_FRM_RIGHT, LB_REL_FRM_RIGHT, text::RelOrientation::FRAME_RIGHT}, 149 {SwFPos::REL_PG_FRAME, SwFPos::REL_PG_FRAME, LB_REL_PG_FRAME, text::RelOrientation::PAGE_FRAME}, 150 {SwFPos::REL_PG_PRTAREA, SwFPos::REL_PG_PRTAREA, LB_REL_PG_PRTAREA, text::RelOrientation::PAGE_PRINT_AREA}, 151 {SwFPos::REL_CHAR, SwFPos::REL_CHAR, LB_REL_CHAR, text::RelOrientation::CHAR}, 152 153 {SwFPos::FLY_REL_PG_LEFT, SwFPos::FLY_MIR_REL_PG_LEFT, LB_FLY_REL_PG_LEFT, text::RelOrientation::PAGE_LEFT}, 154 {SwFPos::FLY_REL_PG_RIGHT, SwFPos::FLY_MIR_REL_PG_RIGHT, LB_FLY_REL_PG_RIGHT, text::RelOrientation::PAGE_RIGHT}, 155 {SwFPos::FLY_REL_PG_FRAME, SwFPos::FLY_REL_PG_FRAME, LB_FLY_REL_PG_FRAME, text::RelOrientation::PAGE_FRAME}, 156 {SwFPos::FLY_REL_PG_PRTAREA, SwFPos::FLY_REL_PG_PRTAREA, LB_FLY_REL_PG_PRTAREA, text::RelOrientation::PAGE_PRINT_AREA}, 157 158 {SwFPos::REL_BORDER, SwFPos::REL_BORDER, LB_VERT_FRAME, text::RelOrientation::FRAME}, 159 {SwFPos::REL_PRTAREA, SwFPos::REL_PRTAREA, LB_VERT_PRTAREA, text::RelOrientation::PRINT_AREA}, 160 161 // OD 10.11.2003 #i22305# 162 {SwFPos::FLY_REL_PG_FRAME, SwFPos::FLY_REL_PG_FRAME, LB_FLY_VERT_FRAME, text::RelOrientation::FRAME}, 163 {SwFPos::FLY_REL_PG_PRTAREA, SwFPos::FLY_REL_PG_PRTAREA, LB_FLY_VERT_PRTAREA, text::RelOrientation::PRINT_AREA}, 164 165 // OD 11.11.2003 #i22341# 166 {SwFPos::REL_LINE, SwFPos::REL_LINE, LB_VERT_LINE, text::RelOrientation::TEXT_LINE} 167 }; 168 169 static RelationMap __FAR_DATA aAsCharRelationMap[] = 170 { 171 {SwFPos::REL_BASE, SwFPos::REL_BASE, LB_REL_BASE, text::RelOrientation::FRAME}, 172 {SwFPos::REL_CHAR, SwFPos::REL_CHAR, LB_REL_CHAR, text::RelOrientation::FRAME}, 173 {SwFPos::REL_ROW, SwFPos::REL_ROW, LB_REL_ROW, text::RelOrientation::FRAME} 174 }; 175 176 /*-------------------------------------------------------------------- 177 Beschreibung: Seite verankert 178 --------------------------------------------------------------------*/ 179 180 #define HORI_PAGE_REL (LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_PG_LEFT| \ 181 LB_REL_PG_RIGHT) 182 183 static FrmMap __FAR_DATA aHPageMap[] = 184 { 185 {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, HORI_PAGE_REL}, 186 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, HORI_PAGE_REL}, 187 {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, text::HoriOrientation::CENTER, HORI_PAGE_REL}, 188 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, HORI_PAGE_REL} 189 }; 190 191 static FrmMap __FAR_DATA aHPageHtmlMap[] = 192 { 193 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, LB_REL_PG_FRAME} 194 }; 195 196 #define VERT_PAGE_REL (LB_REL_PG_FRAME|LB_REL_PG_PRTAREA) 197 198 static FrmMap __FAR_DATA aVPageMap[] = 199 { 200 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, VERT_PAGE_REL}, 201 {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::BOTTOM, VERT_PAGE_REL}, 202 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, VERT_PAGE_REL}, 203 {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, VERT_PAGE_REL} 204 }; 205 206 static FrmMap __FAR_DATA aVPageHtmlMap[] = 207 { 208 {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, LB_REL_PG_FRAME} 209 }; 210 211 /*-------------------------------------------------------------------- 212 Beschreibung: Rahmen verankert 213 --------------------------------------------------------------------*/ 214 215 #define HORI_FRAME_REL (LB_FLY_REL_PG_FRAME|LB_FLY_REL_PG_PRTAREA| \ 216 LB_FLY_REL_PG_LEFT|LB_FLY_REL_PG_RIGHT) 217 218 static FrmMap __FAR_DATA aHFrameMap[] = 219 { 220 {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, HORI_FRAME_REL}, 221 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, HORI_FRAME_REL}, 222 {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, text::HoriOrientation::CENTER, HORI_FRAME_REL}, 223 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, HORI_FRAME_REL} 224 }; 225 226 static FrmMap __FAR_DATA aHFlyHtmlMap[] = 227 { 228 {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, LB_FLY_REL_PG_FRAME}, 229 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, LB_FLY_REL_PG_FRAME} 230 }; 231 232 // OD 19.09.2003 #i18732# - own vertical alignment map for to frame anchored objects 233 // OD 10.11.2003 #i22305# 234 #define VERT_FRAME_REL (LB_FLY_VERT_FRAME|LB_FLY_VERT_PRTAREA) 235 236 static FrmMap __FAR_DATA aVFrameMap[] = 237 { 238 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, VERT_FRAME_REL}, 239 {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::BOTTOM, VERT_FRAME_REL}, 240 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, VERT_FRAME_REL}, 241 {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, VERT_FRAME_REL} 242 }; 243 244 static FrmMap __FAR_DATA aVFlyHtmlMap[] = 245 { 246 // OD 10.11.2003 #i22305# 247 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, LB_FLY_VERT_FRAME}, 248 {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, LB_FLY_VERT_FRAME} 249 }; 250 251 /*-------------------------------------------------------------------- 252 Beschreibung: Absatz verankert 253 --------------------------------------------------------------------*/ 254 255 #define HORI_PARA_REL (LB_FRAME|LB_PRTAREA|LB_REL_PG_LEFT|LB_REL_PG_RIGHT| \ 256 LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_FRM_LEFT| \ 257 LB_REL_FRM_RIGHT) 258 259 static FrmMap __FAR_DATA aHParaMap[] = 260 { 261 {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, HORI_PARA_REL}, 262 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, HORI_PARA_REL}, 263 {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, text::HoriOrientation::CENTER, HORI_PARA_REL}, 264 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, HORI_PARA_REL} 265 }; 266 267 #define HTML_HORI_PARA_REL (LB_FRAME|LB_PRTAREA) 268 269 static FrmMap __FAR_DATA aHParaHtmlMap[] = 270 { 271 {SwFPos::LEFT, SwFPos::LEFT, text::HoriOrientation::LEFT, HTML_HORI_PARA_REL}, 272 {SwFPos::RIGHT, SwFPos::RIGHT, text::HoriOrientation::RIGHT, HTML_HORI_PARA_REL} 273 }; 274 275 static FrmMap __FAR_DATA aHParaHtmlAbsMap[] = 276 { 277 {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, HTML_HORI_PARA_REL}, 278 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, HTML_HORI_PARA_REL} 279 }; 280 281 // OD 19.09.2003 #i18732# - allow vertical alignment at page areas 282 #define VERT_PARA_REL (LB_VERT_FRAME|LB_VERT_PRTAREA| \ 283 LB_REL_PG_FRAME|LB_REL_PG_PRTAREA) 284 285 static FrmMap __FAR_DATA aVParaMap[] = 286 { 287 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, VERT_PARA_REL}, 288 {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::BOTTOM, VERT_PARA_REL}, 289 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, VERT_PARA_REL}, 290 {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, VERT_PARA_REL} 291 }; 292 293 static FrmMap __FAR_DATA aVParaHtmlMap[] = 294 { 295 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, LB_VERT_PRTAREA} 296 }; 297 298 /*-------------------------------------------------------------------- 299 Beschreibung: Relativ zum Zeichen verankert 300 --------------------------------------------------------------------*/ 301 302 #define HORI_CHAR_REL (LB_FRAME|LB_PRTAREA|LB_REL_PG_LEFT|LB_REL_PG_RIGHT| \ 303 LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_FRM_LEFT| \ 304 LB_REL_FRM_RIGHT|LB_REL_CHAR) 305 306 static FrmMap __FAR_DATA aHCharMap[] = 307 { 308 {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, HORI_CHAR_REL}, 309 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, HORI_CHAR_REL}, 310 {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, text::HoriOrientation::CENTER, HORI_CHAR_REL}, 311 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, HORI_CHAR_REL} 312 }; 313 314 #define HTML_HORI_CHAR_REL (LB_FRAME|LB_PRTAREA|LB_REL_CHAR) 315 316 static FrmMap __FAR_DATA aHCharHtmlMap[] = 317 { 318 {SwFPos::LEFT, SwFPos::LEFT, text::HoriOrientation::LEFT, HTML_HORI_CHAR_REL}, 319 {SwFPos::RIGHT, SwFPos::RIGHT, text::HoriOrientation::RIGHT, HTML_HORI_CHAR_REL} 320 }; 321 322 static FrmMap __FAR_DATA aHCharHtmlAbsMap[] = 323 { 324 {SwFPos::LEFT, SwFPos::MIR_LEFT, text::HoriOrientation::LEFT, LB_PRTAREA|LB_REL_CHAR}, 325 {SwFPos::RIGHT, SwFPos::MIR_RIGHT, text::HoriOrientation::RIGHT, LB_PRTAREA}, 326 {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, text::HoriOrientation::NONE, LB_REL_PG_FRAME} 327 }; 328 329 // OD 19.09.2003 #i18732# - allow vertical alignment at page areas 330 // OD 12.11.2003 #i22341# - handle <LB_REL_CHAR> on its own 331 #define VERT_CHAR_REL (LB_VERT_FRAME|LB_VERT_PRTAREA| \ 332 LB_REL_PG_FRAME|LB_REL_PG_PRTAREA) 333 334 static FrmMap __FAR_DATA aVCharMap[] = 335 { 336 // OD 11.11.2003 #i22341# 337 // introduce mappings for new vertical alignment at top of line <LB_VERT_LINE> 338 // and correct mapping for vertical alignment at character for position <FROM_BOTTOM> 339 // Note: Because of these adjustments the map becomes ambigous in its values 340 // <eStrId>/<eMirrorStrId> and <nAlign>. These ambiguities are considered 341 // in the methods <SwFrmPage::FillRelLB(..)>, <SwFrmPage::GetAlignment(..)> 342 // and <SwFrmPage::FillPosLB(..)> 343 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, VERT_CHAR_REL|LB_REL_CHAR}, 344 {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::BOTTOM, VERT_CHAR_REL|LB_REL_CHAR}, 345 {SwFPos::BELOW, SwFPos::BELOW, text::VertOrientation::CHAR_BOTTOM, LB_REL_CHAR}, 346 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, VERT_CHAR_REL|LB_REL_CHAR}, 347 {SwFPos::FROMTOP, SwFPos::FROMTOP, text::VertOrientation::NONE, VERT_CHAR_REL}, 348 {SwFPos::FROMBOTTOM, SwFPos::FROMBOTTOM, text::VertOrientation::NONE, LB_REL_CHAR|LB_VERT_LINE}, 349 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::LINE_TOP, LB_VERT_LINE}, 350 {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::LINE_BOTTOM, LB_VERT_LINE}, 351 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::LINE_CENTER, LB_VERT_LINE} 352 }; 353 354 355 static FrmMap __FAR_DATA aVCharHtmlMap[] = 356 { 357 {SwFPos::BELOW, SwFPos::BELOW, text::VertOrientation::CHAR_BOTTOM, LB_REL_CHAR} 358 }; 359 360 static FrmMap __FAR_DATA aVCharHtmlAbsMap[] = 361 { 362 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, LB_REL_CHAR}, 363 {SwFPos::BELOW, SwFPos::BELOW, text::VertOrientation::CHAR_BOTTOM, LB_REL_CHAR} 364 }; 365 /*-------------------------------------------------------------------- 366 Beschreibung: Als Zeichen verankert 367 --------------------------------------------------------------------*/ 368 369 static FrmMap __FAR_DATA aVAsCharMap[] = 370 { 371 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, LB_REL_BASE}, 372 {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::BOTTOM, LB_REL_BASE}, 373 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, LB_REL_BASE}, 374 375 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::CHAR_TOP, LB_REL_CHAR}, 376 {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::CHAR_BOTTOM, LB_REL_CHAR}, 377 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CHAR_CENTER, LB_REL_CHAR}, 378 379 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::LINE_TOP, LB_REL_ROW}, 380 {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::LINE_BOTTOM, LB_REL_ROW}, 381 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::LINE_CENTER, LB_REL_ROW}, 382 383 {SwFPos::FROMBOTTOM, SwFPos::FROMBOTTOM, text::VertOrientation::NONE, LB_REL_BASE} 384 }; 385 386 static FrmMap __FAR_DATA aVAsCharHtmlMap[] = 387 { 388 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::TOP, LB_REL_BASE}, 389 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::CENTER, LB_REL_BASE}, 390 391 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::CHAR_TOP, LB_REL_CHAR}, 392 393 {SwFPos::TOP, SwFPos::TOP, text::VertOrientation::LINE_TOP, LB_REL_ROW}, 394 {SwFPos::BOTTOM, SwFPos::BOTTOM, text::VertOrientation::LINE_BOTTOM, LB_REL_ROW}, 395 {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, text::VertOrientation::LINE_CENTER, LB_REL_ROW} 396 }; 397 398 static sal_uInt16 __FAR_DATA aPageRg[] = { 399 RES_FRM_SIZE, RES_FRM_SIZE, 400 RES_VERT_ORIENT, RES_ANCHOR, 401 RES_COL, RES_COL, 402 RES_FOLLOW_TEXT_FLOW, RES_FOLLOW_TEXT_FLOW, 403 0 404 }; 405 static sal_uInt16 __FAR_DATA aAddPgRg[] = { 406 RES_PROTECT, RES_PROTECT, 407 RES_PRINT, RES_PRINT, 408 FN_SET_FRM_NAME, FN_SET_FRM_NAME, 409 FN_SET_FRM_ALT_NAME, FN_SET_FRM_ALT_NAME, 410 0 411 }; 412 413 /*-------------------------------------------------------------------- 414 Beschreibung: 415 --------------------------------------------------------------------*/ 416 417 size_t lcl_GetFrmMapCount( const FrmMap* pMap) 418 { 419 if ( pMap ) 420 { 421 int aSizeOf = sizeof(FrmMap); 422 if( pMap == aVParaHtmlMap) 423 return sizeof(aVParaHtmlMap) / aSizeOf; 424 if( pMap == aVAsCharHtmlMap) 425 return sizeof(aVAsCharHtmlMap) / aSizeOf; 426 if( pMap == aHParaHtmlMap) 427 return sizeof(aHParaHtmlMap) / aSizeOf; 428 if( pMap == aHParaHtmlAbsMap) 429 return sizeof(aHParaHtmlAbsMap) / aSizeOf; 430 if ( pMap == aVPageMap ) 431 return sizeof(aVPageMap) / aSizeOf; 432 if ( pMap == aVPageHtmlMap ) 433 return sizeof(aVPageHtmlMap) / aSizeOf; 434 if ( pMap == aVAsCharMap ) 435 return sizeof(aVAsCharMap) / aSizeOf; 436 if ( pMap == aVParaMap ) 437 return sizeof(aVParaMap) / aSizeOf; 438 if ( pMap == aHParaMap ) 439 return sizeof(aHParaMap) / aSizeOf; 440 if ( pMap == aHFrameMap ) 441 return sizeof(aHFrameMap) / aSizeOf; 442 // OD 19.09.2003 #i18732# - own vertical alignment map for to frame anchored objects 443 if ( pMap == aVFrameMap ) 444 return sizeof(aVFrameMap) / aSizeOf; 445 if ( pMap == aHCharMap ) 446 return sizeof(aHCharMap) / aSizeOf; 447 if ( pMap == aHCharHtmlMap ) 448 return sizeof(aHCharHtmlMap) / aSizeOf; 449 if ( pMap == aHCharHtmlAbsMap ) 450 return sizeof(aHCharHtmlAbsMap) / aSizeOf; 451 if ( pMap == aVCharMap ) 452 return sizeof(aVCharMap) / aSizeOf; 453 if ( pMap == aVCharHtmlMap ) 454 return sizeof(aVCharHtmlMap) / aSizeOf; 455 if ( pMap == aVCharHtmlAbsMap ) 456 return sizeof(aVCharHtmlAbsMap) / aSizeOf; 457 if ( pMap == aHPageHtmlMap ) 458 return sizeof(aHPageHtmlMap) / aSizeOf; 459 if ( pMap == aHFlyHtmlMap ) 460 return sizeof(aHFlyHtmlMap) / aSizeOf; 461 if ( pMap == aVFlyHtmlMap ) 462 return sizeof(aVFlyHtmlMap) / aSizeOf; 463 return sizeof(aHPageMap) / aSizeOf; 464 } 465 return 0; 466 } 467 /* -----------------------------08.08.2002 14:45------------------------------ 468 469 ---------------------------------------------------------------------------*/ 470 void lcl_InsertVectors(ListBox& rBox, 471 const ::std::vector< String >& rPrev, const ::std::vector< String >& rThis, 472 const ::std::vector< String >& rNext, const ::std::vector< String >& rRemain) 473 { 474 ::std::vector< String >::const_iterator aIt; 475 sal_uInt16 nEntry = 0; 476 for(aIt = rPrev.begin(); aIt != rPrev.end(); aIt++) 477 nEntry = rBox.InsertEntry(*aIt); 478 for(aIt = rThis.begin(); aIt != rThis.end(); aIt++) 479 nEntry = rBox.InsertEntry(*aIt); 480 for(aIt = rNext.begin(); aIt != rNext.end(); aIt++) 481 nEntry = rBox.InsertEntry(*aIt); 482 rBox.SetSeparatorPos(nEntry); 483 //now insert all strings sorted 484 sal_uInt16 nStartPos = rBox.GetEntryCount(); 485 486 for(aIt = rPrev.begin(); aIt != rPrev.end(); aIt++) 487 ::InsertStringSorted(*aIt, rBox, nStartPos ); 488 for(aIt = rThis.begin(); aIt != rThis.end(); aIt++) 489 ::InsertStringSorted(*aIt, rBox, nStartPos ); 490 for(aIt = rNext.begin(); aIt != rNext.end(); aIt++) 491 ::InsertStringSorted(*aIt, rBox, nStartPos ); 492 for(aIt = rRemain.begin(); aIt != rRemain.end(); aIt++) 493 ::InsertStringSorted(*aIt, rBox, nStartPos ); 494 } 495 496 /* -----------------------------20.08.2002 16:12------------------------------ 497 498 ---------------------------------------------------------------------------*/ 499 // --> OD 2009-08-31 #mongolianlayout# 500 // add input parameter 501 SvxSwFramePosString::StringId lcl_ChangeResIdToVerticalOrRTL(SvxSwFramePosString::StringId eStringId, sal_Bool bVertical, sal_Bool bVerticalL2R, sal_Bool bRTL) 502 { 503 //special handling of STR_FROMLEFT 504 if ( SwFPos::FROMLEFT == eStringId ) 505 { 506 eStringId = bVertical 507 ? ( bRTL 508 ? SwFPos::FROMBOTTOM 509 : SwFPos::FROMTOP ) 510 : ( bRTL 511 ? SwFPos::FROMRIGHT 512 : SwFPos::FROMLEFT ); 513 return eStringId; 514 } 515 // --> OD 2009-08-31 #mongolianlayout# 516 // special handling of STR_FROMTOP in case of mongolianlayout (vertical left-to-right) 517 if ( SwFPos::FROMTOP == eStringId && 518 bVertical && bVerticalL2R ) 519 { 520 eStringId = SwFPos::FROMLEFT; 521 return eStringId; 522 } 523 // <-- 524 if ( bVertical ) 525 { 526 //exchange horizontal strings with vertical strings and vice versa 527 static const StringIdPair_Impl aHoriIds[] = 528 { 529 {SwFPos::LEFT, SwFPos::TOP}, 530 {SwFPos::RIGHT, SwFPos::BOTTOM}, 531 {SwFPos::CENTER_HORI, SwFPos::CENTER_VERT}, 532 {SwFPos::FROMTOP, SwFPos::FROMRIGHT}, 533 {SwFPos::REL_PG_LEFT, SwFPos::REL_PG_TOP}, 534 {SwFPos::REL_PG_RIGHT, SwFPos::REL_PG_BOTTOM} , 535 {SwFPos::REL_FRM_LEFT, SwFPos::REL_FRM_TOP}, 536 {SwFPos::REL_FRM_RIGHT, SwFPos::REL_FRM_BOTTOM} 537 }; 538 static const StringIdPair_Impl aVertIds[] = 539 { 540 {SwFPos::TOP, SwFPos::RIGHT}, 541 {SwFPos::BOTTOM, SwFPos::LEFT }, 542 {SwFPos::CENTER_VERT, SwFPos::CENTER_HORI}, 543 {SwFPos::FROMTOP, SwFPos::FROMRIGHT }, 544 {SwFPos::REL_PG_TOP, SwFPos::REL_PG_LEFT }, 545 {SwFPos::REL_PG_BOTTOM, SwFPos::REL_PG_RIGHT } , 546 {SwFPos::REL_FRM_TOP, SwFPos::REL_FRM_LEFT }, 547 {SwFPos::REL_FRM_BOTTOM, SwFPos::REL_FRM_RIGHT } 548 }; 549 // --> OD 2009-08-31 #monglianlayout# 550 static const StringIdPair_Impl aVertL2RIds[] = 551 { 552 {SwFPos::TOP, SwFPos::LEFT }, 553 {SwFPos::BOTTOM, SwFPos::RIGHT }, 554 {SwFPos::CENTER_VERT, SwFPos::CENTER_HORI }, 555 {SwFPos::FROMTOP, SwFPos::FROMLEFT }, 556 {SwFPos::REL_PG_TOP, SwFPos::REL_PG_LEFT }, 557 {SwFPos::REL_PG_BOTTOM, SwFPos::REL_PG_RIGHT } , 558 {SwFPos::REL_FRM_TOP, SwFPos::REL_FRM_LEFT }, 559 {SwFPos::REL_FRM_BOTTOM, SwFPos::REL_FRM_RIGHT } 560 }; 561 // <-- 562 sal_uInt16 nIndex; 563 for(nIndex = 0; nIndex < sizeof(aHoriIds) / sizeof(StringIdPair_Impl); ++nIndex) 564 { 565 if(aHoriIds[nIndex].eHori == eStringId) 566 { 567 eStringId = aHoriIds[nIndex].eVert; 568 return eStringId; 569 } 570 } 571 nIndex = 0; 572 for(nIndex = 0; nIndex < sizeof(aVertIds) / sizeof(StringIdPair_Impl); ++nIndex) 573 { 574 // --> OD 2009-08-31 #mongolianlayout# 575 if ( !bVerticalL2R ) 576 { 577 if(aVertIds[nIndex].eHori == eStringId) 578 { 579 eStringId = aVertIds[nIndex].eVert; 580 break; 581 } 582 } 583 else 584 { 585 if(aVertL2RIds[nIndex].eHori == eStringId) 586 { 587 eStringId = aVertL2RIds[nIndex].eVert; 588 break; 589 } 590 } 591 // <-- 592 } 593 } 594 return eStringId; 595 } 596 597 // OD 12.11.2003 #i22341# - helper method in order to determine all possible 598 // listbox relations in a relation map for a given relation 599 sal_uLong lcl_GetLBRelationsForRelations( const sal_uInt16 _nRel ) 600 { 601 sal_uLong nLBRelations = 0L; 602 603 sal_uInt16 nRelMapSize = sizeof(aRelationMap) / sizeof(RelationMap); 604 for ( sal_uInt16 nRelMapPos = 0; nRelMapPos < nRelMapSize; ++nRelMapPos ) 605 { 606 if ( aRelationMap[nRelMapPos].nRelation == _nRel ) 607 { 608 nLBRelations |= aRelationMap[nRelMapPos].nLBRelation; 609 } 610 } 611 612 return nLBRelations; 613 } 614 615 // OD 14.11.2003 #i22341# - helper method on order to determine all possible 616 // listbox relations in a relation map for a given string ID 617 sal_uLong lcl_GetLBRelationsForStrID( const FrmMap* _pMap, 618 const SvxSwFramePosString::StringId _eStrId, 619 const bool _bUseMirrorStr ) 620 { 621 sal_uLong nLBRelations = 0L; 622 623 size_t nRelMapSize = lcl_GetFrmMapCount( _pMap ); 624 for ( size_t nRelMapPos = 0; nRelMapPos < nRelMapSize; ++nRelMapPos ) 625 { 626 if ( ( !_bUseMirrorStr && _pMap[nRelMapPos].eStrId == _eStrId ) || 627 ( _bUseMirrorStr && _pMap[nRelMapPos].eMirrorStrId == _eStrId ) ) 628 { 629 nLBRelations |= _pMap[nRelMapPos].nLBRelations; 630 } 631 } 632 633 return nLBRelations; 634 } 635 636 /*-------------------------------------------------------------------- 637 Beschreibung: StandardRahmenTabPage 638 --------------------------------------------------------------------*/ 639 640 namespace 641 { 642 //IAccessibility2 Implementation 2009----- 643 void HandleAutoCB( sal_Bool _bChecked, FixedText& _rFT_man, FixedText& _rFT_auto, PercentField& _rPF_Edit) 644 { 645 _rFT_man.Show( !_bChecked ); 646 _rFT_auto.Show( _bChecked ); 647 String accName = _bChecked ? _rFT_auto.GetText() : _rFT_man.GetText(); 648 _rPF_Edit.SetAccessibleName(accName); 649 } 650 //-----IAccessibility2 Implementation 2009 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 //IAccessibility2 Implementation 2009----- 2099 HandleAutoCB( aAutoWidthCB.IsChecked(), aWidthFT, aWidthAutoFT, aWidthED ); 2100 //-----IAccessibility2 Implementation 2009 2101 return 0; 2102 } 2103 2104 IMPL_LINK( SwFrmPage, AutoHeightClickHdl, void*, EMPTYARG ) 2105 { 2106 if( !IsInGraficMode() ) 2107 //IAccessibility2 Implementation 2009----- 2108 HandleAutoCB( aAutoHeightCB.IsChecked(), aHeightFT, aHeightAutoFT, aWidthED ); 2109 //-----IAccessibility2 Implementation 2009 2110 return 0; 2111 } 2112 2113 IMPL_LINK( SwFrmPage, ModifyHdl, Edit *, pEdit ) 2114 { 2115 SwTwips nWidth = static_cast< SwTwips >(aWidthED.DenormalizePercent(aWidthED.GetValue(FUNIT_TWIP))); 2116 SwTwips nHeight = static_cast< SwTwips >(aHeightED.DenormalizePercent(aHeightED.GetValue(FUNIT_TWIP))); 2117 if ( aFixedRatioCB.IsChecked() ) 2118 { 2119 if ( pEdit == &aWidthED ) 2120 { 2121 nHeight = SwTwips((double)nWidth / fWidthHeightRatio); 2122 aHeightED.SetPrcntValue(aHeightED.NormalizePercent(nHeight), FUNIT_TWIP); 2123 } 2124 else if(pEdit == &aHeightED) 2125 { 2126 nWidth = SwTwips((double)nHeight * fWidthHeightRatio); 2127 aWidthED.SetPrcntValue(aWidthED.NormalizePercent(nWidth), FUNIT_TWIP); 2128 } 2129 } 2130 fWidthHeightRatio = nHeight ? double(nWidth) / double(nHeight) : 1.0; 2131 UpdateExample(); 2132 return 0; 2133 } 2134 2135 /*-------------------------------------------------------------------- 2136 Beschreibung: 2137 --------------------------------------------------------------------*/ 2138 2139 void SwFrmPage::UpdateExample() 2140 { 2141 sal_uInt16 nPos = aHorizontalDLB.GetSelectEntryPos(); 2142 if ( pHMap && nPos != LISTBOX_ENTRY_NOTFOUND ) 2143 { 2144 sal_uInt16 nMapPos = GetMapPos(pHMap, aHorizontalDLB); 2145 short nAlign = GetAlignment(pHMap, nMapPos, aHorizontalDLB, aHoriRelationLB); 2146 short nRel = GetRelation(pHMap, aHoriRelationLB); 2147 2148 aExampleWN.SetHAlign(nAlign); 2149 aExampleWN.SetHoriRel(nRel); 2150 } 2151 2152 nPos = aVerticalDLB.GetSelectEntryPos(); 2153 if ( pVMap && nPos != LISTBOX_ENTRY_NOTFOUND ) 2154 { 2155 sal_uInt16 nMapPos = GetMapPos(pVMap, aVerticalDLB); 2156 short nAlign = GetAlignment(pVMap, nMapPos, aVerticalDLB, aVertRelationLB); 2157 short nRel = GetRelation(pVMap, aVertRelationLB); 2158 2159 aExampleWN.SetVAlign(nAlign); 2160 aExampleWN.SetVertRel(nRel); 2161 } 2162 2163 // Size 2164 long nXPos = static_cast< long >(aAtHorzPosED.Denormalize(aAtHorzPosED.GetValue(FUNIT_TWIP))); 2165 long nYPos = static_cast< long >(aAtVertPosED.Denormalize(aAtVertPosED.GetValue(FUNIT_TWIP))); 2166 aExampleWN.SetRelPos(Point(nXPos, nYPos)); 2167 2168 aExampleWN.SetAnchor( static_cast< sal_uInt16 >(GetAnchor()) ); 2169 aExampleWN.Invalidate(); 2170 } 2171 2172 void SwFrmPage::Init(const SfxItemSet& rSet, sal_Bool bReset) 2173 { 2174 if(!bFormat) 2175 { 2176 SwWrtShell* pSh = ((SwFrmDlg*)GetParent()->GetParent())->GetWrtShell(); 2177 2178 // Size 2179 const sal_Bool bSizeFixed = pSh->IsSelObjProtected( FLYPROTECT_FIXED ); 2180 2181 aWidthED .Enable( !bSizeFixed ); 2182 aHeightED.Enable( !bSizeFixed ); 2183 2184 // size controls for math OLE objects 2185 if ( DLG_FRM_OLE == nDlgType && ! bNew ) 2186 { 2187 // disable width and height for math objects 2188 const SvGlobalName& rFactNm( pSh->GetOLEObject()->getClassID() ); 2189 2190 struct _GlobalNameId { 2191 sal_uInt32 n1; 2192 sal_uInt16 n2, n3; 2193 sal_uInt8 b8, b9, b10, b11, b12, b13, b14, b15; 2194 } aGlbNmIds[4] = { { SO3_SM_CLASSID_60 }, { SO3_SM_CLASSID_50 }, 2195 { SO3_SM_CLASSID_40 }, { SO3_SM_CLASSID_30 } }; 2196 2197 for ( int i = 0; i < 4; ++i ) { 2198 const _GlobalNameId& rId = aGlbNmIds[ i ]; 2199 2200 SvGlobalName aGlbNm( rId.n1, rId.n2, rId.n3, 2201 rId.b8, rId.b9, rId.b10, rId.b11, 2202 rId.b12, rId.b13, rId.b14, rId.b15 ); 2203 2204 if( rFactNm == aGlbNm ) 2205 { 2206 // disable size controls for math OLE objects 2207 aWidthFT.Disable(); 2208 aWidthED.Disable(); 2209 aRelWidthCB.Disable(); 2210 aHeightFT.Disable(); 2211 aHeightED.Disable(); 2212 aRelHeightCB.Disable(); 2213 aFixedRatioCB.Disable(); 2214 aRealSizeBT.Disable(); 2215 break; 2216 } 2217 } 2218 2219 // TODO/LATER: get correct aspect 2220 if(0 != (pSh->GetOLEObject()->getStatus( embed::Aspects::MSOLE_CONTENT ) & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE ) ) 2221 aRealSizeBT.Disable(); 2222 } 2223 } 2224 2225 const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE); 2226 sal_Int64 nWidth = aWidthED.NormalizePercent(rSize.GetWidth()); 2227 sal_Int64 nHeight = aHeightED.NormalizePercent(rSize.GetHeight()); 2228 2229 if (nWidth != aWidthED.GetValue(FUNIT_TWIP)) 2230 { 2231 if(!bReset) 2232 { 2233 // Wert wurde von Umlauf-Tabpage geaendert und muss 2234 // mit Modify-Flag gesetzt werden 2235 aWidthED.SetUserValue(nWidth, FUNIT_TWIP); 2236 } 2237 else 2238 aWidthED.SetPrcntValue(nWidth, FUNIT_TWIP); 2239 } 2240 2241 if (nHeight != aHeightED.GetValue(FUNIT_TWIP)) 2242 { 2243 if (!bReset) 2244 { 2245 // Wert wurde von Umlauf-Tabpage geaendert und muss 2246 // mit Modify-Flag gesetzt werden 2247 aHeightED.SetUserValue(nHeight, FUNIT_TWIP); 2248 } 2249 else 2250 aHeightED.SetPrcntValue(nHeight, FUNIT_TWIP); 2251 } 2252 2253 if (!IsInGraficMode()) 2254 { 2255 SwFrmSize eSize = rSize.GetHeightSizeType(); 2256 sal_Bool bCheck = eSize != ATT_FIX_SIZE; 2257 aAutoHeightCB.Check( bCheck ); 2258 //IAccessibility2 Implementation 2009----- 2259 HandleAutoCB( bCheck, aHeightFT, aHeightAutoFT, aWidthED ); 2260 //-----IAccessibility2 Implementation 2009 2261 if( eSize == ATT_VAR_SIZE ) 2262 aHeightED.SetValue( aHeightED.GetMin(), FUNIT_NONE ); 2263 2264 eSize = rSize.GetWidthSizeType(); 2265 bCheck = eSize != ATT_FIX_SIZE; 2266 aAutoWidthCB.Check( bCheck ); 2267 //IAccessibility2 Implementation 2009----- 2268 HandleAutoCB( bCheck, aWidthFT, aWidthAutoFT, aWidthED ); 2269 //-----IAccessibility2 Implementation 2009 2270 if( eSize == ATT_VAR_SIZE ) 2271 aWidthED.SetValue( aWidthED.GetMin(), FUNIT_NONE ); 2272 2273 if ( !bFormat ) 2274 { 2275 SwWrtShell* pSh = ((SwFrmDlg*)GetParent()->GetParent())->GetWrtShell(); 2276 const SwFrmFmt* pFmt = pSh->GetFlyFrmFmt(); 2277 if( pFmt && pFmt->GetChain().GetNext() ) 2278 aAutoHeightCB.Enable( sal_False ); 2279 } 2280 } 2281 else 2282 aAutoHeightCB.Hide(); 2283 2284 // Umlauf-Abstand fuer zeichengebundene Rahmen organisieren 2285 const SvxULSpaceItem &rUL = (const SvxULSpaceItem &)rSet.Get(RES_UL_SPACE); 2286 nUpperBorder = rUL.GetUpper(); 2287 nLowerBorder = rUL.GetLower(); 2288 2289 if(SFX_ITEM_SET == rSet.GetItemState(FN_KEEP_ASPECT_RATIO)) 2290 { 2291 aFixedRatioCB.Check(((const SfxBoolItem&)rSet.Get(FN_KEEP_ASPECT_RATIO)).GetValue()); 2292 aFixedRatioCB.SaveValue(); 2293 } 2294 2295 // Spalten 2296 SwFmtCol aCol( (const SwFmtCol&)rSet.Get(RES_COL) ); 2297 ::FitToActualSize( aCol, (sal_uInt16)rSize.GetWidth() ); 2298 2299 RndStdIds eAnchorId = (RndStdIds)GetAnchor(); 2300 2301 if ( bNew && !bFormat ) 2302 InitPos(eAnchorId, USHRT_MAX, 0, USHRT_MAX, USHRT_MAX, LONG_MAX, LONG_MAX); 2303 else 2304 { 2305 const SwFmtHoriOrient& rHori = (const SwFmtHoriOrient&)rSet.Get(RES_HORI_ORIENT); 2306 const SwFmtVertOrient& rVert = (const SwFmtVertOrient&)rSet.Get(RES_VERT_ORIENT); 2307 nOldH = rHori.GetHoriOrient(); 2308 nOldHRel = rHori.GetRelationOrient(); 2309 nOldV = rVert.GetVertOrient(), 2310 nOldVRel = rVert.GetRelationOrient(); 2311 2312 if (eAnchorId == FLY_AT_PAGE) 2313 { 2314 if (nOldHRel == text::RelOrientation::FRAME) 2315 nOldHRel = text::RelOrientation::PAGE_FRAME; 2316 else if (nOldHRel == text::RelOrientation::PRINT_AREA) 2317 nOldHRel = text::RelOrientation::PAGE_PRINT_AREA; 2318 if (nOldVRel == text::RelOrientation::FRAME) 2319 nOldVRel = text::RelOrientation::PAGE_FRAME; 2320 else if (nOldVRel == text::RelOrientation::PRINT_AREA) 2321 nOldVRel = text::RelOrientation::PAGE_PRINT_AREA; 2322 } 2323 2324 aMirrorPagesCB.Check(rHori.IsPosToggle()); 2325 aMirrorPagesCB.SaveValue(); 2326 2327 InitPos(eAnchorId, 2328 nOldH, 2329 nOldHRel, 2330 nOldV, 2331 nOldVRel, 2332 rHori.GetPos(), 2333 rVert.GetPos()); 2334 } 2335 2336 // Transparent fuers Bsp 2337 // Umlauf fuers Bsp 2338 const SwFmtSurround& rSurround = (const SwFmtSurround&)rSet.Get(RES_SURROUND); 2339 aExampleWN.SetWrap ( static_cast< sal_uInt16 >(rSurround.GetSurround()) ); 2340 2341 if ( rSurround.GetSurround() == SURROUND_THROUGHT ) 2342 { 2343 const SvxOpaqueItem& rOpaque = (const SvxOpaqueItem&)rSet.Get(RES_OPAQUE); 2344 aExampleWN.SetTransparent(!rOpaque.GetValue()); 2345 } 2346 2347 // ggf auf Prozent umschalten 2348 RangeModifyHdl(&aWidthED); // Referenzwerte setzen (fuer 100%) 2349 2350 if (rSize.GetWidthPercent() == 0xff || rSize.GetHeightPercent() == 0xff) 2351 aFixedRatioCB.Check(sal_True); 2352 if (rSize.GetWidthPercent() && rSize.GetWidthPercent() != 0xff && 2353 !aRelWidthCB.IsChecked()) 2354 { 2355 aRelWidthCB.Check(sal_True); 2356 RelSizeClickHdl(&aRelWidthCB); 2357 aWidthED.SetPrcntValue(rSize.GetWidthPercent(), FUNIT_CUSTOM); 2358 } 2359 if (rSize.GetHeightPercent() && rSize.GetHeightPercent() != 0xff && 2360 !aRelHeightCB.IsChecked()) 2361 { 2362 aRelHeightCB.Check(sal_True); 2363 RelSizeClickHdl(&aRelHeightCB); 2364 aHeightED.SetPrcntValue(rSize.GetHeightPercent(), FUNIT_CUSTOM); 2365 } 2366 aRelWidthCB.SaveValue(); 2367 aRelHeightCB.SaveValue(); 2368 } 2369 2370 sal_uInt16* SwFrmPage::GetRanges() 2371 { 2372 return aPageRg; 2373 } 2374 /* -----------------------------03.11.00 10:52-------------------------------- 2375 2376 ---------------------------------------------------------------------------*/ 2377 void SwFrmPage::SetFormatUsed(sal_Bool bFmt) 2378 { 2379 bFormat = bFmt; 2380 if(bFormat) 2381 { 2382 aAnchorAtPageRB.Hide(); 2383 aAnchorAtParaRB.Hide(); 2384 aAnchorAtCharRB.Hide(); 2385 aAnchorAsCharRB.Hide(); 2386 aAnchorAtFrameRB.Hide(); 2387 aTypeFL.Hide(); 2388 aTypeSepFL.Hide(); 2389 2390 // Point aSizePos = aSizeFL.GetPosPixel(); 2391 // Size aSizeSize = aSizeFL.GetSizePixel(); 2392 // aSizeSize.Width() = aTypeFL.GetPosPixel().X() + 2393 // aTypeFL.GetSizePixel().Width() - aSizePos.X(); 2394 // aSizeFL.SetSizePixel(aSizeSize); 2395 } 2396 } 2397 2398 2399 void SwFrmPage::EnableVerticalPositioning( bool bEnable ) 2400 { 2401 m_bAllowVertPositioning = bEnable; 2402 aVerticalFT.Enable( bEnable ); 2403 aVerticalDLB.Enable( bEnable ); 2404 aAtVertPosFT.Enable( bEnable ); 2405 aAtVertPosED.Enable( bEnable ); 2406 aVertRelationFT.Enable( bEnable ); 2407 aVertRelationLB.Enable( bEnable ); 2408 } 2409 2410 2411 /*-------------------------------------------------------------------- 2412 Beschreibung: 2413 --------------------------------------------------------------------*/ 2414 2415 SwGrfExtPage::SwGrfExtPage(Window *pParent, const SfxItemSet &rSet) : 2416 SfxTabPage( pParent, SW_RES(TP_GRF_EXT), rSet ), 2417 aMirrorFL (this, SW_RES( FL_MIRROR )), 2418 aMirrorVertBox (this, SW_RES( CB_VERT )), 2419 aMirrorHorzBox (this, SW_RES( CB_HOR )), 2420 aAllPagesRB (this, SW_RES( RB_MIRROR_ALL_PAGES )), 2421 aLeftPagesRB (this, SW_RES( RB_MIRROR_LEFT_PAGES )), 2422 aRightPagesRB (this, SW_RES( RB_MIRROR_RIGHT_PAGES )), 2423 aBmpWin (this, WN_BMP, Graphic(), BitmapEx(SW_RES(BMP_EXAMPLE)), BitmapEx(SW_RES(BMP_EXAMPLE_HC)) ), 2424 aConnectFL (this, SW_RES( FL_CONNECT )), 2425 aConnectFT (this, SW_RES( FT_CONNECT )), 2426 aConnectED (this, SW_RES( ED_CONNECT )), 2427 aBrowseBT (this, SW_RES( PB_BROWSE )), 2428 pGrfDlg ( 0 ) 2429 { 2430 FreeResource(); 2431 2432 aBrowseBT.SetAccessibleRelationMemberOf(&aConnectFL); 2433 2434 SetExchangeSupport(); 2435 aMirrorHorzBox.SetClickHdl( LINK(this, SwGrfExtPage, MirrorHdl)); 2436 aMirrorVertBox.SetClickHdl( LINK(this, SwGrfExtPage, MirrorHdl)); 2437 aBrowseBT.SetClickHdl ( LINK(this, SwGrfExtPage, BrowseHdl)); 2438 } 2439 2440 /*-------------------------------------------------------------------- 2441 Beschreibung: 2442 --------------------------------------------------------------------*/ 2443 2444 SwGrfExtPage::~SwGrfExtPage() 2445 { 2446 delete pGrfDlg; 2447 } 2448 2449 /*-------------------------------------------------------------------- 2450 Beschreibung: 2451 --------------------------------------------------------------------*/ 2452 2453 SfxTabPage* SwGrfExtPage::Create( Window *pParent, const SfxItemSet &rSet ) 2454 { 2455 return new SwGrfExtPage( pParent, rSet ); 2456 } 2457 2458 /*-------------------------------------------------------------------- 2459 Beschreibung: 2460 --------------------------------------------------------------------*/ 2461 2462 void SwGrfExtPage::Reset(const SfxItemSet &rSet) 2463 { 2464 const SfxPoolItem* pItem; 2465 sal_uInt16 nHtmlMode = ::GetHtmlMode((const SwDocShell*)SfxObjectShell::Current()); 2466 bHtmlMode = nHtmlMode & HTMLMODE_ON ? sal_True : sal_False; 2467 2468 if( SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_GRF_CONNECT, sal_True, &pItem) 2469 && ((const SfxBoolItem *)pItem)->GetValue() ) 2470 { 2471 aBrowseBT.Enable(); 2472 aConnectED.SetReadOnly(sal_False); 2473 } 2474 2475 ActivatePage(rSet); 2476 } 2477 2478 /*-------------------------------------------------------------------- 2479 Beschreibung: 2480 --------------------------------------------------------------------*/ 2481 2482 void SwGrfExtPage::ActivatePage(const SfxItemSet& rSet) 2483 { 2484 const SvxProtectItem& rProt = (const SvxProtectItem& )rSet.Get(RES_PROTECT); 2485 sal_Bool bProtCntnt = rProt.IsCntntProtected(); 2486 2487 const SfxPoolItem* pItem = 0; 2488 sal_Bool bEnable = sal_False; 2489 sal_Bool bEnableMirrorRB = sal_False; 2490 2491 SfxItemState eState = rSet.GetItemState(RES_GRFATR_MIRRORGRF, sal_True, &pItem); 2492 if( SFX_ITEM_UNKNOWN != eState && !bProtCntnt && !bHtmlMode ) 2493 { 2494 if( SFX_ITEM_SET != eState ) 2495 pItem = &rSet.Get( RES_GRFATR_MIRRORGRF ); 2496 2497 bEnable = sal_True; 2498 2499 MirrorGraph eMirror = static_cast< MirrorGraph >(((const SwMirrorGrf* )pItem)->GetValue()); 2500 switch( eMirror ) 2501 { 2502 case RES_MIRROR_GRAPH_DONT: break; 2503 case RES_MIRROR_GRAPH_VERT: aMirrorHorzBox.Check(sal_True); break; 2504 case RES_MIRROR_GRAPH_HOR: aMirrorVertBox.Check(sal_True); break; 2505 case RES_MIRROR_GRAPH_BOTH: aMirrorHorzBox.Check(sal_True); 2506 aMirrorVertBox.Check(sal_True); 2507 break; 2508 default: 2509 ; 2510 } 2511 2512 sal_uInt16 nPos = ((const SwMirrorGrf* )pItem)->IsGrfToggle() ? 1 : 0; 2513 nPos += (eMirror == RES_MIRROR_GRAPH_VERT || eMirror == RES_MIRROR_GRAPH_BOTH) 2514 ? 2 : 0; 2515 2516 bEnableMirrorRB = nPos != 0; 2517 2518 switch (nPos) 2519 { 2520 case 1: // Auf linken bzw geraden Seiten spiegeln 2521 aLeftPagesRB.Check(); 2522 aMirrorHorzBox.Check(sal_True); 2523 break; 2524 case 2: // Auf allen Seiten spiegeln 2525 aAllPagesRB.Check(); 2526 break; 2527 case 3: // Auf rechten bzw ungeraden Seiten spiegeln 2528 aRightPagesRB.Check(); 2529 break; 2530 default: 2531 aAllPagesRB.Check(); 2532 break; 2533 } 2534 } 2535 2536 if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_GRAF_GRAPHIC, sal_False, &pItem ) ) 2537 { 2538 const SvxBrushItem& rBrush = *(SvxBrushItem*)pItem; 2539 if( rBrush.GetGraphicLink() ) 2540 { 2541 aGrfName = aNewGrfName = *rBrush.GetGraphicLink(); 2542 aConnectED.SetText( aNewGrfName ); 2543 } 2544 const Graphic* pGrf = rBrush.GetGraphic(); 2545 if( pGrf ) 2546 aBmpWin.SetGraphic( *pGrf ); 2547 } 2548 2549 aAllPagesRB .Enable(bEnableMirrorRB); 2550 aLeftPagesRB.Enable(bEnableMirrorRB); 2551 aRightPagesRB.Enable(bEnableMirrorRB); 2552 aMirrorHorzBox.Enable(bEnable); 2553 aMirrorVertBox.Enable(bEnable); 2554 aMirrorFL.Enable(bEnable); 2555 2556 aAllPagesRB .SaveValue(); 2557 aLeftPagesRB.SaveValue(); 2558 aRightPagesRB.SaveValue(); 2559 aMirrorHorzBox.SaveValue(); 2560 aMirrorVertBox.SaveValue(); 2561 2562 aBmpWin.MirrorHorz( aMirrorVertBox.IsChecked() ); 2563 aBmpWin.MirrorVert( aMirrorHorzBox.IsChecked() ); 2564 aBmpWin.Invalidate(); 2565 } 2566 2567 /*-------------------------------------------------------------------- 2568 Beschreibung: 2569 --------------------------------------------------------------------*/ 2570 2571 sal_Bool SwGrfExtPage::FillItemSet( SfxItemSet &rSet ) 2572 { 2573 sal_Bool bModified = sal_False; 2574 if ( aMirrorHorzBox.GetSavedValue() != aMirrorHorzBox.IsChecked() || 2575 aMirrorVertBox.GetSavedValue() != aMirrorVertBox.IsChecked() || 2576 aAllPagesRB .GetSavedValue() != aAllPagesRB .IsChecked() || 2577 aLeftPagesRB.GetSavedValue() != aLeftPagesRB.IsChecked() || 2578 aRightPagesRB.GetSavedValue() != aRightPagesRB.IsChecked()) 2579 { 2580 bModified = sal_True; 2581 2582 sal_Bool bHori = sal_False; 2583 2584 if (aMirrorHorzBox.IsChecked() && 2585 !aLeftPagesRB.IsChecked()) 2586 bHori = sal_True; 2587 2588 MirrorGraph eMirror; 2589 eMirror = aMirrorVertBox.IsChecked() && bHori ? 2590 RES_MIRROR_GRAPH_BOTH : bHori ? 2591 RES_MIRROR_GRAPH_VERT : aMirrorVertBox.IsChecked() ? 2592 RES_MIRROR_GRAPH_HOR : RES_MIRROR_GRAPH_DONT; 2593 2594 sal_Bool bMirror = !aAllPagesRB.IsChecked(); 2595 SwMirrorGrf aMirror( eMirror ); 2596 aMirror.SetGrfToggle(bMirror ); 2597 rSet.Put( aMirror ); 2598 } 2599 2600 if( aGrfName != aNewGrfName || aConnectED.IsModified() ) 2601 { 2602 bModified = sal_True; 2603 aGrfName = aConnectED.GetText(); 2604 rSet.Put( SvxBrushItem( aGrfName, aFilterName, GPOS_LT, 2605 SID_ATTR_GRAF_GRAPHIC )); 2606 } 2607 return bModified; 2608 } 2609 /*-------------------------------------------------------------------- 2610 Beschreibung: 2611 --------------------------------------------------------------------*/ 2612 2613 int SwGrfExtPage::DeactivatePage(SfxItemSet *_pSet) 2614 { 2615 if( _pSet ) 2616 FillItemSet( *_pSet ); 2617 return sal_True; 2618 } 2619 2620 /*-------------------------------------------------------------------- 2621 Beschreibung: 2622 --------------------------------------------------------------------*/ 2623 2624 IMPL_LINK( SwGrfExtPage, BrowseHdl, Button *, EMPTYARG ) 2625 { 2626 if(!pGrfDlg) 2627 { 2628 pGrfDlg = new FileDialogHelper( SFXWB_GRAPHIC ); 2629 pGrfDlg->SetTitle(SW_RESSTR(STR_EDIT_GRF )); 2630 } 2631 pGrfDlg->SetDisplayDirectory( aConnectED.GetText() ); 2632 uno::Reference < ui::dialogs::XFilePicker > xFP = pGrfDlg->GetFilePicker(); 2633 uno::Reference < ui::dialogs::XFilePickerControlAccess > xCtrlAcc(xFP, uno::UNO_QUERY); 2634 sal_Bool bTrue = sal_True; 2635 uno::Any aVal(&bTrue, ::getBooleanCppuType()); 2636 xCtrlAcc->setValue( ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_LINK, 0, aVal); 2637 2638 if ( pGrfDlg->Execute() == ERRCODE_NONE ) 2639 { // ausgewaehlten Filter merken 2640 aFilterName = pGrfDlg->GetCurrentFilter(); 2641 aNewGrfName = INetURLObject::decode( pGrfDlg->GetPath(), 2642 INET_HEX_ESCAPE, 2643 INetURLObject::DECODE_UNAMBIGUOUS, 2644 RTL_TEXTENCODING_UTF8 ); 2645 aConnectED.SetModifyFlag(); 2646 aConnectED.SetText( aNewGrfName ); 2647 //Spiegeln zuruecksetzen, da u. U. eine Bitmap 2648 //gegen eine andere Art von Grafik ausgetauscht worden ist, 2649 //die nicht gespiegelt werden kann. 2650 aMirrorVertBox.Check(sal_False); 2651 aMirrorHorzBox.Check(sal_False); 2652 aAllPagesRB .Enable(sal_False); 2653 aLeftPagesRB.Enable(sal_False); 2654 aRightPagesRB.Enable(sal_False); 2655 aBmpWin.MirrorHorz(sal_False); 2656 aBmpWin.MirrorVert(sal_False); 2657 2658 Graphic aGraphic; 2659 GraphicFilter::LoadGraphic( pGrfDlg->GetPath(), aEmptyStr, aGraphic ); 2660 aBmpWin.SetGraphic(aGraphic); 2661 2662 sal_Bool bEnable = GRAPHIC_BITMAP == aGraphic.GetType() || 2663 GRAPHIC_GDIMETAFILE == aGraphic.GetType(); 2664 aMirrorVertBox.Enable(bEnable); 2665 aMirrorHorzBox.Enable(bEnable); 2666 aAllPagesRB .Enable(bEnable); 2667 aLeftPagesRB.Enable(bEnable); 2668 aRightPagesRB.Enable(bEnable); 2669 } 2670 return 0; 2671 } 2672 /*-------------------------------------------------------------------- 2673 Beschreibung: 2674 --------------------------------------------------------------------*/ 2675 2676 IMPL_LINK( SwGrfExtPage, MirrorHdl, CheckBox *, EMPTYARG ) 2677 { 2678 sal_Bool bEnable = aMirrorHorzBox.IsChecked(); 2679 2680 aBmpWin.MirrorHorz( aMirrorVertBox.IsChecked() ); 2681 aBmpWin.MirrorVert( bEnable ); 2682 2683 aAllPagesRB .Enable(bEnable); 2684 aLeftPagesRB.Enable(bEnable); 2685 aRightPagesRB.Enable(bEnable); 2686 2687 if (!aAllPagesRB.IsChecked() && !aLeftPagesRB.IsChecked() && !aRightPagesRB.IsChecked()) 2688 aAllPagesRB.Check(); 2689 2690 return 0; 2691 } 2692 2693 /*-------------------------------------------------------------------- 2694 Beschreibung: BeispielWindow 2695 --------------------------------------------------------------------*/ 2696 2697 BmpWindow::BmpWindow( Window* pPar, sal_uInt16 nId, 2698 const Graphic& rGraphic, const BitmapEx& rBmp, const BitmapEx& rBmpHC ) : 2699 Window(pPar, SW_RES(nId)), 2700 aGraphic(rGraphic), 2701 aBmp(rBmp), 2702 aBmpHC(rBmpHC), 2703 bHorz(sal_False), 2704 bVert(sal_False), 2705 bGraphic(sal_False), 2706 bLeftAlign(sal_False) 2707 { 2708 // #119307# use background, the graphic might have transparency 2709 SetBackground(Wallpaper(Color(COL_WHITE))); 2710 } 2711 2712 void BmpWindow::Paint( const Rectangle& ) 2713 { 2714 Point aPntPos; 2715 Size aPntSz( GetSizePixel() ); 2716 Size aGrfSize; 2717 if(bGraphic) 2718 aGrfSize = ::GetGraphicSizeTwip(aGraphic, this); 2719 //it should show the default bitmap also if no graphic can be found 2720 if(!aGrfSize.Width() && !aGrfSize.Height()) 2721 aGrfSize = PixelToLogic(aBmp.GetSizePixel()); 2722 2723 long nRelGrf = aGrfSize.Width() * 100L / aGrfSize.Height(); 2724 long nRelWin = aPntSz.Width() * 100L / aPntSz.Height(); 2725 if(nRelGrf < nRelWin) 2726 { 2727 const long nWidth = aPntSz.Width(); 2728 aPntSz.Width() = aPntSz.Height() * nRelGrf /100; 2729 if(!bLeftAlign) 2730 aPntPos.X() += nWidth - aPntSz.Width() ; 2731 } 2732 2733 if ( bHorz ) 2734 { 2735 aPntPos.Y() += aPntSz.Height(); 2736 aPntPos.Y() --; 2737 aPntSz.Height() *= -1; 2738 } 2739 if ( bVert ) 2740 { 2741 aPntPos.X() += aPntSz.Width(); 2742 aPntPos.X()--; 2743 aPntSz.Width() *= -1; 2744 } 2745 2746 // #119307# clear window background, the graphic might have transparency 2747 Erase(); 2748 2749 if ( bGraphic ) 2750 aGraphic.Draw( this, aPntPos, aPntSz ); 2751 else 2752 { 2753 bool bHC = GetSettings().GetStyleSettings().GetHighContrastMode(); 2754 DrawBitmapEx( aPntPos, aPntSz, bHC ? aBmpHC : aBmp ); 2755 } 2756 } 2757 2758 BmpWindow::~BmpWindow() 2759 { 2760 } 2761 2762 void BmpWindow::SetGraphic(const Graphic& rGrf) 2763 { 2764 aGraphic = rGrf; 2765 Size aGrfSize = ::GetGraphicSizeTwip(aGraphic, this); 2766 bGraphic = aGrfSize.Width() && aGrfSize.Height(); 2767 Invalidate(); 2768 } 2769 2770 /*************************************************************************** 2771 Beschreibung: URL und ImageMap an Rahmen einstellen 2772 ***************************************************************************/ 2773 2774 2775 SwFrmURLPage::SwFrmURLPage( Window *pParent, const SfxItemSet &rSet ) : 2776 SfxTabPage(pParent, SW_RES(TP_FRM_URL), rSet), 2777 aHyperLinkFL (this, SW_RES( FL_HYPERLINK )), 2778 aURLFT (this, SW_RES( FT_URL )), 2779 aURLED (this, SW_RES( ED_URL )), 2780 aSearchPB (this, SW_RES( PB_SEARCH )), 2781 aNameFT (this, SW_RES( FT_NAME )), 2782 aNameED (this, SW_RES( ED_NAME )), 2783 aFrameFT (this, SW_RES( FT_FRAME )), 2784 aFrameCB (this, SW_RES( CB_FRAME )), 2785 2786 aImageFL (this, SW_RES( FL_IMAGE )), 2787 aServerCB (this, SW_RES( CB_SERVER )), 2788 aClientCB (this, SW_RES( CB_CLIENT )) 2789 { 2790 FreeResource(); 2791 aSearchPB.SetClickHdl(LINK(this, SwFrmURLPage, InsertFileHdl)); 2792 } 2793 2794 /*************************************************************************** 2795 Beschreibung: 2796 ***************************************************************************/ 2797 2798 SwFrmURLPage::~SwFrmURLPage() 2799 { 2800 } 2801 2802 /*************************************************************************** 2803 Beschreibung: 2804 ***************************************************************************/ 2805 2806 void SwFrmURLPage::Reset( const SfxItemSet &rSet ) 2807 { 2808 const SfxPoolItem* pItem; 2809 if ( SFX_ITEM_SET == rSet.GetItemState( SID_DOCFRAME, sal_True, &pItem)) 2810 { 2811 TargetList* pList = new TargetList; 2812 ((const SfxFrameItem*)pItem)->GetFrame()->GetTargetList(*pList); 2813 sal_uInt16 nCount = (sal_uInt16)pList->Count(); 2814 if( nCount ) 2815 { 2816 sal_uInt16 i; 2817 for ( i = 0; i < nCount; i++ ) 2818 { 2819 aFrameCB.InsertEntry(*pList->GetObject(i)); 2820 } 2821 for ( i = nCount; i; i-- ) 2822 { 2823 delete pList->GetObject( i - 1 ); 2824 } 2825 } 2826 delete pList; 2827 } 2828 2829 if ( SFX_ITEM_SET == rSet.GetItemState( RES_URL, sal_True, &pItem ) ) 2830 { 2831 const SwFmtURL* pFmtURL = (const SwFmtURL*)pItem; 2832 aURLED.SetText( INetURLObject::decode( pFmtURL->GetURL(), 2833 INET_HEX_ESCAPE, 2834 INetURLObject::DECODE_UNAMBIGUOUS, 2835 RTL_TEXTENCODING_UTF8 )); 2836 aNameED.SetText( pFmtURL->GetName()); 2837 2838 aClientCB.Enable( pFmtURL->GetMap() != 0 ); 2839 aClientCB.Check ( pFmtURL->GetMap() != 0 ); 2840 aServerCB.Check ( pFmtURL->IsServerMap() ); 2841 2842 aFrameCB.SetText(pFmtURL->GetTargetFrameName()); 2843 aFrameCB.SaveValue(); 2844 } 2845 else 2846 aClientCB.Enable( sal_False ); 2847 2848 aServerCB.SaveValue(); 2849 aClientCB.SaveValue(); 2850 } 2851 2852 2853 2854 /*************************************************************************** 2855 Beschreibung: 2856 ***************************************************************************/ 2857 2858 sal_Bool SwFrmURLPage::FillItemSet(SfxItemSet &rSet) 2859 { 2860 sal_Bool bModified = sal_False; 2861 const SwFmtURL* pOldURL = (SwFmtURL*)GetOldItem(rSet, RES_URL); 2862 SwFmtURL* pFmtURL; 2863 if(pOldURL) 2864 pFmtURL = (SwFmtURL*)pOldURL->Clone(); 2865 else 2866 pFmtURL = new SwFmtURL(); 2867 2868 { 2869 String sText = aURLED.GetText(); 2870 2871 if( pFmtURL->GetURL() != sText || 2872 pFmtURL->GetName() != aNameED.GetText() || 2873 aServerCB.IsChecked() != pFmtURL->IsServerMap() ) 2874 { 2875 pFmtURL->SetURL( sText, aServerCB.IsChecked() ); 2876 pFmtURL->SetName( aNameED.GetText() ); 2877 bModified = sal_True; 2878 } 2879 } 2880 2881 if(!aClientCB.IsChecked() && pFmtURL->GetMap() != 0) 2882 { 2883 pFmtURL->SetMap(0); 2884 bModified = sal_True; 2885 } 2886 2887 if(pFmtURL->GetTargetFrameName() != aFrameCB.GetText()) 2888 { 2889 pFmtURL->SetTargetFrameName(aFrameCB.GetText()); 2890 bModified = sal_True; 2891 } 2892 rSet.Put(*pFmtURL); 2893 delete pFmtURL; 2894 return bModified; 2895 } 2896 2897 /*************************************************************************** 2898 Beschreibung: 2899 ***************************************************************************/ 2900 2901 SfxTabPage* SwFrmURLPage::Create(Window *pParent, const SfxItemSet &rSet) 2902 { 2903 return new SwFrmURLPage( pParent, rSet ); 2904 } 2905 2906 /*************************************************************************** 2907 Beschreibung: 2908 ***************************************************************************/ 2909 2910 IMPL_LINK( SwFrmURLPage, InsertFileHdl, PushButton *, EMPTYARG ) 2911 { 2912 FileDialogHelper aDlgHelper( ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 ); 2913 uno::Reference < ui::dialogs::XFilePicker > xFP = aDlgHelper.GetFilePicker(); 2914 2915 try 2916 { 2917 String sTemp(aURLED.GetText()); 2918 if(sTemp.Len()) 2919 xFP->setDisplayDirectory(sTemp); 2920 } 2921 catch( const uno::Exception& rEx ) 2922 { 2923 (void) rEx; 2924 } 2925 if( aDlgHelper.Execute() == ERRCODE_NONE ) 2926 { 2927 aURLED.SetText( xFP->getFiles().getConstArray()[0] ); 2928 } 2929 2930 return 0; 2931 } 2932 2933 /* -----------------------------03.11.00 10:56-------------------------------- 2934 2935 ---------------------------------------------------------------------------*/ 2936 void lcl_Move(Window& rWin, sal_Int32 nDiff) 2937 { 2938 Point aPos(rWin.GetPosPixel()); 2939 aPos.Y() -= nDiff; 2940 rWin.SetPosPixel(aPos); 2941 } 2942 2943 /*-----------------13.11.96 13.15------------------- 2944 2945 --------------------------------------------------*/ 2946 2947 SwFrmAddPage::SwFrmAddPage(Window *pParent, const SfxItemSet &rSet ) : 2948 SfxTabPage(pParent, SW_RES(TP_FRM_ADD), rSet), 2949 2950 aNamesFL (this, SW_RES(FL_NAME)), 2951 aNameFT (this, SW_RES(FT_NAME)), 2952 aNameED (this, SW_RES(ED_NAME)), 2953 aAltNameFT (this, SW_RES(FT_ALT_NAME)), 2954 aAltNameED (this, SW_RES(ED_ALT_NAME)), 2955 aPrevFT (this, SW_RES(FT_PREV)), 2956 aPrevLB (this, SW_RES(LB_PREV)), 2957 aNextFT (this, SW_RES(FT_NEXT)), 2958 aNextLB (this, SW_RES(LB_NEXT)), 2959 2960 aProtectFL (this, SW_RES(FL_PROTECT)), 2961 aProtectContentCB (this, SW_RES(CB_PROTECT_CONTENT)), 2962 aProtectFrameCB (this, SW_RES(CB_PROTECT_FRAME)), 2963 aProtectSizeCB (this, SW_RES(CB_PROTECT_SIZE)), 2964 aExtFL (this, SW_RES(FL_EXT)), 2965 2966 aEditInReadonlyCB (this, SW_RES(CB_EDIT_IN_READONLY)), 2967 aPrintFrameCB (this, SW_RES(CB_PRINT_FRAME)), 2968 aTextFlowFT (this, SW_RES(FT_TEXTFLOW)), 2969 aTextFlowLB (this, SW_RES(LB_TEXTFLOW)), 2970 2971 pWrtSh(0), 2972 2973 nDlgType(0), 2974 bHtmlMode(sal_False), 2975 bFormat(sal_False), 2976 bNew(sal_False) 2977 { 2978 FreeResource(); 2979 2980 } 2981 2982 /*-----------------13.11.96 13.15------------------- 2983 2984 --------------------------------------------------*/ 2985 2986 SwFrmAddPage::~SwFrmAddPage() 2987 { 2988 } 2989 2990 /*-----------------13.11.96 13.15------------------- 2991 2992 --------------------------------------------------*/ 2993 2994 SfxTabPage* SwFrmAddPage::Create(Window *pParent, const SfxItemSet &rSet) 2995 { 2996 return new SwFrmAddPage(pParent, rSet); 2997 } 2998 2999 /*-----------------13.11.96 13.14------------------- 3000 3001 --------------------------------------------------*/ 3002 3003 void SwFrmAddPage::Reset(const SfxItemSet &rSet ) 3004 { 3005 const SfxPoolItem* pItem; 3006 sal_uInt16 nHtmlMode = ::GetHtmlMode((const SwDocShell*)SfxObjectShell::Current()); 3007 bHtmlMode = nHtmlMode & HTMLMODE_ON ? sal_True : sal_False; 3008 if(bHtmlMode) 3009 { 3010 aProtectContentCB .Hide(); 3011 aProtectFrameCB .Hide(); 3012 aProtectSizeCB .Hide(); 3013 aEditInReadonlyCB .Hide(); 3014 aPrintFrameCB .Hide(); 3015 aExtFL .Hide(); 3016 aProtectFL.Hide(); 3017 } 3018 if ( DLG_FRM_GRF == nDlgType || DLG_FRM_OLE == nDlgType ) 3019 { 3020 aEditInReadonlyCB.Hide(); 3021 aPrintFrameCB.SetPosPixel(aEditInReadonlyCB.GetPosPixel()); 3022 } 3023 3024 if(SFX_ITEM_SET == rSet.GetItemState(FN_SET_FRM_ALT_NAME, sal_False, &pItem)) 3025 { 3026 aAltNameED.SetText(((const SfxStringItem*)pItem)->GetValue()); 3027 aAltNameED.SaveValue(); 3028 } 3029 3030 if(!bFormat) 3031 { 3032 // Grafik einfuegen - Eigenschaften 3033 // bNew ist nicht gesetzt, deswegen ueber Selektion erkennen 3034 String aTmpName1; 3035 if(SFX_ITEM_SET == rSet.GetItemState(FN_SET_FRM_NAME, sal_False, &pItem)) 3036 { 3037 aTmpName1 = ((const SfxStringItem*)pItem)->GetValue(); 3038 } 3039 3040 DBG_ASSERT(pWrtSh, "keine Shell?"); 3041 if( bNew || !aTmpName1.Len() ) 3042 3043 switch( nDlgType ) 3044 { 3045 case DLG_FRM_GRF: 3046 aTmpName1 = pWrtSh->GetUniqueGrfName(); 3047 break; 3048 case DLG_FRM_OLE: 3049 aTmpName1 = pWrtSh->GetUniqueOLEName(); 3050 break; 3051 default: 3052 aTmpName1 = pWrtSh->GetUniqueFrameName(); 3053 break; 3054 } 3055 3056 aNameED.SetText( aTmpName1 ); 3057 aNameED.SaveValue(); 3058 } 3059 else 3060 { 3061 aNameED.Enable( sal_False ); 3062 aAltNameED.Enable(sal_False); 3063 aNameFT.Enable( sal_False ); 3064 aAltNameFT.Enable(sal_False); 3065 aNamesFL.Enable(sal_False); 3066 } 3067 if(nDlgType == DLG_FRM_STD && aAltNameFT.IsVisible()) 3068 { 3069 aAltNameFT.Hide(); 3070 aAltNameED.Hide(); 3071 //move all controls one step up 3072 Window* aWindows[] = 3073 { 3074 &aPrevFT, 3075 &aPrevLB, 3076 &aNextFT, 3077 &aNextLB, 3078 &aNamesFL, 3079 &aProtectContentCB, 3080 &aProtectFrameCB, 3081 &aProtectSizeCB, 3082 &aProtectFL, 3083 &aEditInReadonlyCB, 3084 &aPrintFrameCB, 3085 &aTextFlowFT, 3086 &aTextFlowLB, 3087 &aExtFL, 3088 0 3089 }; 3090 sal_Int32 nOffset = aAltNameED.GetPosPixel().Y() - aNameED.GetPosPixel().Y(); 3091 sal_Int32 nIdx = 0; 3092 while(aWindows[nIdx]) 3093 { 3094 lcl_Move(*aWindows[nIdx++], nOffset); 3095 } 3096 } 3097 else 3098 { 3099 aNameED.SetModifyHdl(LINK(this, SwFrmAddPage, EditModifyHdl)); 3100 } 3101 3102 if (!bNew) 3103 { 3104 SwFrmFmt* pFmt = pWrtSh->GetFlyFrmFmt(); 3105 3106 if (pFmt) 3107 { 3108 const SwFmtChain &rChain = pFmt->GetChain(); 3109 const SwFlyFrmFmt* pFlyFmt; 3110 String sNextChain, sPrevChain; 3111 if ((pFlyFmt = rChain.GetPrev()) != 0) 3112 { 3113 sPrevChain = pFlyFmt->GetName(); 3114 } 3115 3116 if ((pFlyFmt = rChain.GetNext()) != 0) 3117 { 3118 sNextChain = pFlyFmt->GetName(); 3119 } 3120 //determine chainable frames 3121 ::std::vector< String > aPrevPageFrames; 3122 ::std::vector< String > aThisPageFrames; 3123 ::std::vector< String > aNextPageFrames; 3124 ::std::vector< String > aRemainFrames; 3125 pWrtSh->GetConnectableFrmFmts(*pFmt, sNextChain, sal_False, 3126 aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames ); 3127 lcl_InsertVectors(aPrevLB, aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames); 3128 if(sPrevChain.Len()) 3129 { 3130 if(LISTBOX_ENTRY_NOTFOUND == aPrevLB.GetEntryPos(sPrevChain)) 3131 aPrevLB.InsertEntry(sPrevChain, 1); 3132 aPrevLB.SelectEntry(sPrevChain); 3133 } 3134 else 3135 aPrevLB.SelectEntryPos(0); 3136 aPrevPageFrames.erase(aPrevPageFrames.begin(), aPrevPageFrames.end()); 3137 aNextPageFrames.erase(aNextPageFrames.begin(), aNextPageFrames.end()); 3138 aThisPageFrames.erase(aThisPageFrames.begin(), aThisPageFrames.end()); 3139 aRemainFrames.erase(aRemainFrames.begin(), aRemainFrames.end()); 3140 3141 3142 pWrtSh->GetConnectableFrmFmts(*pFmt, sPrevChain, sal_True, 3143 aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames ); 3144 lcl_InsertVectors(aNextLB, aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames); 3145 if(sNextChain.Len()) 3146 { 3147 if(LISTBOX_ENTRY_NOTFOUND == aNextLB.GetEntryPos(sNextChain)) 3148 aNextLB.InsertEntry(sNextChain, 1); 3149 aNextLB.SelectEntry(sNextChain); 3150 } 3151 else 3152 aNextLB.SelectEntryPos(0); 3153 Link aLink(LINK(this, SwFrmAddPage, ChainModifyHdl)); 3154 aPrevLB.SetSelectHdl(aLink); 3155 aNextLB.SetSelectHdl(aLink); 3156 } 3157 } 3158 // Pos Protected 3159 const SvxProtectItem& rProt = (const SvxProtectItem& )rSet.Get(RES_PROTECT); 3160 aProtectFrameCB.Check(rProt.IsPosProtected()); 3161 aProtectContentCB.Check(rProt.IsCntntProtected()); 3162 aProtectSizeCB.Check(rProt.IsSizeProtected()); 3163 3164 const SwFmtEditInReadonly& rEdit = (const SwFmtEditInReadonly& )rSet.Get(RES_EDIT_IN_READONLY); 3165 aEditInReadonlyCB.Check(rEdit.GetValue()); aEditInReadonlyCB.SaveValue(); 3166 3167 // drucken 3168 const SvxPrintItem& rPrt = (const SvxPrintItem&)rSet.Get(RES_PRINT); 3169 aPrintFrameCB.Check(rPrt.GetValue()); aPrintFrameCB.SaveValue(); 3170 3171 // textflow 3172 SfxItemState eState; 3173 if( (!bHtmlMode || (0 != (nHtmlMode&HTMLMODE_SOME_STYLES))) 3174 && DLG_FRM_GRF != nDlgType && DLG_FRM_OLE != nDlgType && 3175 SFX_ITEM_UNKNOWN != ( eState = rSet.GetItemState( 3176 RES_FRAMEDIR, sal_True )) ) 3177 { 3178 aTextFlowFT.Show(); 3179 aTextFlowLB.Show(); 3180 3181 //vertical text flow is not possible in HTML 3182 if(bHtmlMode) 3183 { 3184 sal_uLong nData = FRMDIR_VERT_TOP_RIGHT; 3185 aTextFlowLB.RemoveEntry(aTextFlowLB.GetEntryPos((void*)nData)); 3186 } 3187 sal_uInt16 nPos, nVal = ((SvxFrameDirectionItem&)rSet.Get(RES_FRAMEDIR)).GetValue(); 3188 for( nPos = aTextFlowLB.GetEntryCount(); nPos; ) 3189 if( (sal_uInt16)(long)aTextFlowLB.GetEntryData( --nPos ) == nVal ) 3190 break; 3191 aTextFlowLB.SelectEntryPos( nPos ); 3192 aTextFlowLB.SaveValue(); 3193 } 3194 else 3195 { 3196 aTextFlowFT.Hide(); 3197 aTextFlowLB.Hide(); 3198 } 3199 } 3200 3201 /*-----------------13.11.96 13.20------------------- 3202 3203 --------------------------------------------------*/ 3204 3205 sal_Bool SwFrmAddPage::FillItemSet(SfxItemSet &rSet) 3206 { 3207 sal_Bool bRet = sal_False; 3208 if (aNameED.GetText() != aNameED.GetSavedValue()) 3209 bRet |= 0 != rSet.Put(SfxStringItem(FN_SET_FRM_NAME, aNameED.GetText())); 3210 if (aAltNameED.GetText() != aAltNameED.GetSavedValue()) 3211 bRet |= 0 != rSet.Put(SfxStringItem(FN_SET_FRM_ALT_NAME, aAltNameED.GetText())); 3212 3213 const SfxPoolItem* pOldItem; 3214 SvxProtectItem aProt ( (const SvxProtectItem& )GetItemSet().Get(RES_PROTECT) ); 3215 aProt.SetCntntProtect( aProtectContentCB.IsChecked() ); 3216 aProt.SetSizeProtect ( aProtectSizeCB.IsChecked() ); 3217 aProt.SetPosProtect ( aProtectFrameCB.IsChecked() ); 3218 if ( 0 == (pOldItem = GetOldItem(rSet, FN_SET_PROTECT)) || 3219 aProt != *pOldItem ) 3220 bRet |= 0 != rSet.Put( aProt); 3221 3222 sal_Bool bChecked; 3223 if ( (bChecked = aEditInReadonlyCB.IsChecked()) != aEditInReadonlyCB.GetSavedValue() ) 3224 bRet |= 0 != rSet.Put( SwFmtEditInReadonly( RES_EDIT_IN_READONLY, bChecked)); 3225 3226 if ( (bChecked = aPrintFrameCB.IsChecked()) != aPrintFrameCB.GetSavedValue() ) 3227 bRet |= 0 != rSet.Put( SvxPrintItem( RES_PRINT, bChecked)); 3228 3229 // textflow 3230 if( aTextFlowLB.IsVisible() ) 3231 { 3232 sal_uInt16 nPos = aTextFlowLB.GetSelectEntryPos(); 3233 if( nPos != aTextFlowLB.GetSavedValue() ) 3234 { 3235 nPos = (sal_uInt16)(long)aTextFlowLB.GetEntryData( nPos ); 3236 bRet |= 0 != rSet.Put( SvxFrameDirectionItem( 3237 (SvxFrameDirection)nPos, RES_FRAMEDIR )); 3238 } 3239 } 3240 if(pWrtSh) 3241 { 3242 const SwFrmFmt* pFmt = pWrtSh->GetFlyFrmFmt(); 3243 if (pFmt) 3244 { 3245 String sCurrentPrevChain, sCurrentNextChain; 3246 if(aPrevLB.GetSelectEntryPos()) 3247 sCurrentPrevChain = aPrevLB.GetSelectEntry(); 3248 if(aNextLB.GetSelectEntryPos()) 3249 sCurrentNextChain = aNextLB.GetSelectEntry(); 3250 const SwFmtChain &rChain = pFmt->GetChain(); 3251 const SwFlyFrmFmt* pFlyFmt; 3252 String sNextChain, sPrevChain; 3253 if ((pFlyFmt = rChain.GetPrev()) != 0) 3254 sPrevChain = pFlyFmt->GetName(); 3255 3256 if ((pFlyFmt = rChain.GetNext()) != 0) 3257 sNextChain = pFlyFmt->GetName(); 3258 if(sPrevChain != sCurrentPrevChain) 3259 bRet |= 0 != rSet.Put(SfxStringItem(FN_PARAM_CHAIN_PREVIOUS, sCurrentPrevChain)); 3260 if(sNextChain != sCurrentNextChain) 3261 bRet |= 0 != rSet.Put(SfxStringItem(FN_PARAM_CHAIN_NEXT, sCurrentNextChain)); 3262 } 3263 } 3264 return bRet; 3265 } 3266 3267 /*-----------------13.11.96 15.05------------------- 3268 3269 --------------------------------------------------*/ 3270 3271 sal_uInt16* SwFrmAddPage::GetRanges() 3272 { 3273 return aAddPgRg; 3274 } 3275 3276 /*-----------------13.11.96 16.12------------------- 3277 3278 --------------------------------------------------*/ 3279 3280 IMPL_LINK(SwFrmAddPage, EditModifyHdl, Edit*, EMPTYARG) 3281 { 3282 sal_Bool bEnable = 0 != aNameED.GetText().Len(); 3283 aAltNameED.Enable(bEnable); 3284 aAltNameFT.Enable(bEnable); 3285 3286 return 0; 3287 } 3288 //----------------------------------------------------------------------------- 3289 void SwFrmAddPage::SetFormatUsed(sal_Bool bFmt) 3290 { 3291 bFormat = bFmt; 3292 if(bFormat) 3293 { 3294 aNameFT.Show(sal_False); 3295 aNameED.Show(sal_False); 3296 aAltNameFT.Show(sal_False); 3297 aAltNameED.Show(sal_False); 3298 aPrevFT.Show(sal_False); 3299 aPrevLB.Show(sal_False); 3300 aNextFT.Show(sal_False); 3301 aNextLB.Show(sal_False); 3302 aNamesFL.Show(sal_False); 3303 3304 sal_Int32 nDiff = aExtFL.GetPosPixel().Y() - aNamesFL.GetPosPixel().Y(); 3305 Window* aWindows[] = 3306 { 3307 &aProtectContentCB, 3308 &aProtectFrameCB, 3309 &aProtectSizeCB, 3310 &aProtectFL, 3311 &aEditInReadonlyCB, 3312 &aPrintFrameCB, 3313 &aExtFL, 3314 &aTextFlowFT, 3315 &aTextFlowLB, 3316 0 3317 }; 3318 sal_Int32 nIdx = 0; 3319 while(aWindows[nIdx]) 3320 lcl_Move(*aWindows[nIdx++], nDiff); 3321 } 3322 } 3323 /* -----------------------------08.08.2002 16:24------------------------------ 3324 3325 ---------------------------------------------------------------------------*/ 3326 IMPL_LINK(SwFrmAddPage, ChainModifyHdl, ListBox*, pBox) 3327 { 3328 String sCurrentPrevChain, sCurrentNextChain; 3329 if(aPrevLB.GetSelectEntryPos()) 3330 sCurrentPrevChain = aPrevLB.GetSelectEntry(); 3331 if(aNextLB.GetSelectEntryPos()) 3332 sCurrentNextChain = aNextLB.GetSelectEntry(); 3333 SwFrmFmt* pFmt = pWrtSh->GetFlyFrmFmt(); 3334 if (pFmt) 3335 { 3336 sal_Bool bNextBox = &aNextLB == pBox; 3337 ListBox& rChangeLB = bNextBox ? aPrevLB : aNextLB; 3338 for(sal_uInt16 nEntry = rChangeLB.GetEntryCount(); nEntry > 1; nEntry--) 3339 rChangeLB.RemoveEntry(nEntry - 1); 3340 //determine chainable frames 3341 ::std::vector< String > aPrevPageFrames; 3342 ::std::vector< String > aThisPageFrames; 3343 ::std::vector< String > aNextPageFrames; 3344 ::std::vector< String > aRemainFrames; 3345 pWrtSh->GetConnectableFrmFmts(*pFmt, bNextBox ? sCurrentNextChain : sCurrentPrevChain, !bNextBox, 3346 aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames ); 3347 lcl_InsertVectors(rChangeLB, 3348 aPrevPageFrames, aThisPageFrames, aNextPageFrames, aRemainFrames); 3349 String sToSelect = bNextBox ? sCurrentPrevChain : sCurrentNextChain; 3350 if(rChangeLB.GetEntryPos(sToSelect) != LISTBOX_ENTRY_NOTFOUND) 3351 rChangeLB.SelectEntry(sToSelect); 3352 else 3353 rChangeLB.SelectEntryPos(0); 3354 3355 } 3356 return 0; 3357 } 3358