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 27 28 #include <com/sun/star/text/RelOrientation.hpp> 29 #include <com/sun/star/text/VertOrientation.hpp> 30 #include <com/sun/star/text/HorizontalAdjust.hpp> 31 #include <com/sun/star/text/DocumentStatistic.hpp> 32 #include <com/sun/star/text/HoriOrientation.hpp> 33 #include <com/sun/star/text/HoriOrientationFormat.hpp> 34 #include <com/sun/star/text/NotePrintMode.hpp> 35 #include <com/sun/star/text/SizeType.hpp> 36 #include <com/sun/star/text/VertOrientationFormat.hpp> 37 #include <com/sun/star/text/WrapTextMode.hpp> 38 #include <com/sun/star/text/GraphicCrop.hpp> 39 #include <com/sun/star/text/XTextGraphicObjectsSupplier.hpp> 40 #include <com/sun/star/drawing/ColorMode.hpp> 41 #include <svtools/grfmgr.hxx> 42 #include <swtypes.hxx> 43 #include <grfatr.hxx> 44 #include <swunohelper.hxx> 45 46 #ifndef _CMDID_H 47 #include <cmdid.h> 48 #endif 49 #ifndef _UNOMID_H 50 #include <unomid.h> 51 #endif 52 53 using namespace ::com::sun::star; 54 55 TYPEINIT1_AUTOFACTORY(SwCropGrf, SfxPoolItem) 56 TYPEINIT1_AUTOFACTORY(SwGammaGrf, SfxPoolItem) 57 58 /****************************************************************************** 59 * Implementierung class SwMirrorGrf 60 ******************************************************************************/ 61 62 SfxPoolItem* SwMirrorGrf::Clone( SfxItemPool* ) const 63 { 64 return new SwMirrorGrf( *this ); 65 } 66 67 sal_uInt16 SwMirrorGrf::GetValueCount() const 68 { 69 return RES_MIRROR_GRAPH_END - RES_MIRROR_GRAPH_BEGIN; 70 } 71 72 int SwMirrorGrf::operator==( const SfxPoolItem& rItem) const 73 { 74 return SfxEnumItem::operator==(rItem) && 75 ((SwMirrorGrf&)rItem).IsGrfToggle() == IsGrfToggle(); 76 } 77 78 sal_Bool lcl_IsHoriOnEvenPages(int nEnum, sal_Bool bToggle) 79 { 80 sal_Bool bEnum = nEnum == RES_MIRROR_GRAPH_VERT || 81 nEnum == RES_MIRROR_GRAPH_BOTH; 82 return bEnum != bToggle; 83 } 84 sal_Bool lcl_IsHoriOnOddPages(int nEnum) 85 { 86 sal_Bool bEnum = nEnum == RES_MIRROR_GRAPH_VERT || 87 nEnum == RES_MIRROR_GRAPH_BOTH; 88 return bEnum; 89 } 90 sal_Bool SwMirrorGrf::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const 91 { 92 sal_Bool bRet = sal_True, 93 bVal; 94 // Vertikal und Horizontal sind mal getauscht worden! 95 nMemberId &= ~CONVERT_TWIPS; 96 switch ( nMemberId ) 97 { 98 case MID_MIRROR_HORZ_EVEN_PAGES: 99 bVal = lcl_IsHoriOnEvenPages(GetValue(), IsGrfToggle()); 100 break; 101 case MID_MIRROR_HORZ_ODD_PAGES: 102 bVal = lcl_IsHoriOnOddPages(GetValue()); 103 break; 104 case MID_MIRROR_VERT: 105 bVal = GetValue() == RES_MIRROR_GRAPH_HOR || 106 GetValue() == RES_MIRROR_GRAPH_BOTH; 107 break; 108 default: 109 ASSERT( !this, "unknown MemberId" ); 110 bRet = sal_False; 111 } 112 rVal.setValue( &bVal, ::getBooleanCppuType() ); 113 return bRet; 114 } 115 116 sal_Bool SwMirrorGrf::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId ) 117 { 118 sal_Bool bRet = sal_True; 119 sal_Bool bVal = *(sal_Bool*)rVal.getValue(); 120 // Vertikal und Horizontal sind mal getauscht worden! 121 nMemberId &= ~CONVERT_TWIPS; 122 switch ( nMemberId ) 123 { 124 case MID_MIRROR_HORZ_EVEN_PAGES: 125 case MID_MIRROR_HORZ_ODD_PAGES: 126 { 127 sal_Bool bIsVert = GetValue() == RES_MIRROR_GRAPH_HOR || 128 GetValue() == RES_MIRROR_GRAPH_BOTH; 129 sal_Bool bOnOddPages = nMemberId == MID_MIRROR_HORZ_EVEN_PAGES ? 130 lcl_IsHoriOnOddPages(GetValue()) : bVal; 131 sal_Bool bOnEvenPages = nMemberId == MID_MIRROR_HORZ_ODD_PAGES ? 132 lcl_IsHoriOnEvenPages(GetValue(), IsGrfToggle()) : bVal; 133 MirrorGraph nEnum = bOnOddPages ? 134 bIsVert ? RES_MIRROR_GRAPH_BOTH : RES_MIRROR_GRAPH_VERT : 135 bIsVert ? RES_MIRROR_GRAPH_HOR : RES_MIRROR_GRAPH_DONT; 136 sal_Bool bToggle = bOnOddPages != bOnEvenPages; 137 SetValue(static_cast<sal_uInt16>(nEnum)); 138 SetGrfToggle( bToggle ); 139 } 140 break; 141 case MID_MIRROR_VERT: 142 if ( bVal ) 143 { 144 if ( GetValue() == RES_MIRROR_GRAPH_VERT ) 145 SetValue( RES_MIRROR_GRAPH_BOTH ); 146 else if ( GetValue() != RES_MIRROR_GRAPH_BOTH ) 147 SetValue( RES_MIRROR_GRAPH_HOR ); 148 } 149 else 150 { 151 if ( GetValue() == RES_MIRROR_GRAPH_BOTH ) 152 SetValue( RES_MIRROR_GRAPH_VERT ); 153 else if ( GetValue() == RES_MIRROR_GRAPH_HOR ) 154 SetValue( RES_MIRROR_GRAPH_DONT ); 155 } 156 break; 157 default: 158 ASSERT( !this, "unknown MemberId" ); 159 bRet = sal_False; 160 } 161 return bRet; 162 } 163 164 165 /****************************************************************************** 166 * Implementierung class SwCropGrf 167 ******************************************************************************/ 168 169 SwCropGrf::SwCropGrf() 170 : SvxGrfCrop( RES_GRFATR_CROPGRF ) 171 {} 172 173 SwCropGrf::SwCropGrf(sal_Int32 nL, sal_Int32 nR, sal_Int32 nT, sal_Int32 nB ) 174 : SvxGrfCrop( nL, nR, nT, nB, RES_GRFATR_CROPGRF ) 175 {} 176 177 SfxPoolItem* SwCropGrf::Clone( SfxItemPool* ) const 178 { 179 return new SwCropGrf( *this ); 180 } 181 182 // ------------------------------------------------------------------ 183 184 SfxPoolItem* SwRotationGrf::Clone( SfxItemPool * ) const 185 { 186 return new SwRotationGrf( GetValue(), aUnrotatedSize ); 187 } 188 189 190 int SwRotationGrf::operator==( const SfxPoolItem& rCmp ) const 191 { 192 return SfxUInt16Item::operator==( rCmp ) && 193 GetUnrotatedSize() == ((SwRotationGrf&)rCmp).GetUnrotatedSize(); 194 } 195 196 197 sal_Bool SwRotationGrf::QueryValue( uno::Any& rVal, sal_uInt8 ) const 198 { 199 // SfxUInt16Item::QueryValue returns sal_Int32 in Any now... (srx642w) 200 // where we still want this to be a sal_Int16 201 rVal <<= (sal_Int16)GetValue(); 202 return sal_True; 203 } 204 205 sal_Bool SwRotationGrf::PutValue( const uno::Any& rVal, sal_uInt8 ) 206 { 207 // SfxUInt16Item::QueryValue returns sal_Int32 in Any now... (srx642w) 208 // where we still want this to be a sal_Int16 209 sal_Int16 nValue = 0; 210 if (rVal >>= nValue) 211 { 212 // sal_uInt16 argument needed 213 SetValue( (sal_uInt16) nValue ); 214 return sal_True; 215 } 216 217 DBG_ERROR( "SwRotationGrf::PutValue - Wrong type!" ); 218 return sal_False; 219 } 220 221 // ------------------------------------------------------------------ 222 223 SfxPoolItem* SwLuminanceGrf::Clone( SfxItemPool * ) const 224 { 225 return new SwLuminanceGrf( *this ); 226 } 227 228 // ------------------------------------------------------------------ 229 230 SfxPoolItem* SwContrastGrf::Clone( SfxItemPool * ) const 231 { 232 return new SwContrastGrf( *this ); 233 } 234 235 // ------------------------------------------------------------------ 236 237 SfxPoolItem* SwChannelRGrf::Clone( SfxItemPool * ) const 238 { 239 return new SwChannelRGrf( *this ); 240 } 241 242 // ------------------------------------------------------------------ 243 244 SfxPoolItem* SwChannelGGrf::Clone( SfxItemPool * ) const 245 { 246 return new SwChannelGGrf( *this ); 247 } 248 249 // ------------------------------------------------------------------ 250 251 SfxPoolItem* SwChannelBGrf::Clone( SfxItemPool * ) const 252 { 253 return new SwChannelBGrf( *this ); 254 } 255 256 // ------------------------------------------------------------------ 257 258 SfxPoolItem* SwGammaGrf::Clone( SfxItemPool * ) const 259 { 260 return new SwGammaGrf( *this ); 261 } 262 263 int SwGammaGrf::operator==( const SfxPoolItem& rCmp ) const 264 { 265 return SfxPoolItem::operator==( rCmp ) && 266 nValue == ((SwGammaGrf&)rCmp).GetValue(); 267 } 268 269 sal_Bool SwGammaGrf::QueryValue( uno::Any& rVal, sal_uInt8 ) const 270 { 271 rVal <<= nValue; 272 return sal_True; 273 } 274 275 sal_Bool SwGammaGrf::PutValue( const uno::Any& rVal, sal_uInt8 ) 276 { 277 return rVal >>= nValue; 278 } 279 280 // ------------------------------------------------------------------ 281 282 SfxPoolItem* SwInvertGrf::Clone( SfxItemPool * ) const 283 { 284 return new SwInvertGrf( *this ); 285 } 286 287 // ------------------------------------------------------------------ 288 289 SfxPoolItem* SwTransparencyGrf::Clone( SfxItemPool * ) const 290 { 291 return new SwTransparencyGrf( *this ); 292 } 293 // ------------------------------------------------------------------ 294 sal_Bool SwTransparencyGrf::QueryValue( uno::Any& rVal, 295 sal_uInt8 ) const 296 { 297 DBG_ASSERT(ISA(SfxByteItem),"Put/QueryValue should be removed!"); 298 sal_Int16 nRet = GetValue(); 299 DBG_ASSERT( 0 <= nRet && nRet <= 100, "value out of range" ); 300 rVal <<= nRet; 301 return sal_True; 302 } 303 // ------------------------------------------------------------------ 304 sal_Bool SwTransparencyGrf::PutValue( const uno::Any& rVal, 305 sal_uInt8 ) 306 { 307 //temporary conversion until this is a SfxInt16Item! 308 DBG_ASSERT(ISA(SfxByteItem),"Put/QueryValue should be removed!"); 309 sal_Int16 nVal = 0; 310 if(!(rVal >>= nVal) || nVal < -100 || nVal > 100) 311 return sal_False; 312 if(nVal < 0) 313 { 314 // for compatibility with old documents 315 // OD 05.11.2002 #104308# - introduce rounding as for SO 6.0 PP2 316 // introduced by fix of #104293#. 317 nVal = ( ( nVal * 128 ) - (99/2) ) / 100; 318 nVal += 128; 319 } 320 DBG_ASSERT( 0 <= nVal && nVal <= 100, "value out of range" ); 321 SetValue(static_cast<sal_uInt8>(nVal)); 322 return sal_True; 323 } 324 325 // ------------------------------------------------------------------ 326 327 SfxPoolItem* SwDrawModeGrf::Clone( SfxItemPool * ) const 328 { 329 return new SwDrawModeGrf( *this ); 330 } 331 332 sal_uInt16 SwDrawModeGrf::GetValueCount() const 333 { 334 // GRAPHICDRAWMODE_STANDARD = 0, 335 // GRAPHICDRAWMODE_GREYS = 1, 336 // GRAPHICDRAWMODE_MONO = 2, 337 // GRAPHICDRAWMODE_WATERMARK = 3 338 return GRAPHICDRAWMODE_WATERMARK + 1; 339 } 340 341 sal_Bool SwDrawModeGrf::QueryValue( uno::Any& rVal, 342 sal_uInt8 ) const 343 { 344 drawing::ColorMode eRet = (drawing::ColorMode)GetEnumValue(); 345 rVal <<= eRet; 346 return sal_True; 347 } 348 349 sal_Bool SwDrawModeGrf::PutValue( const uno::Any& rVal, 350 sal_uInt8 ) 351 { 352 sal_Int32 eVal = SWUnoHelper::GetEnumAsInt32( rVal ); 353 if(eVal >= 0 && eVal <= GRAPHICDRAWMODE_WATERMARK) 354 { 355 SetEnumValue((sal_uInt16)eVal); 356 return sal_True; 357 } 358 return sal_False; 359 } 360 361 362 363