1*efeef26fSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*efeef26fSAndrew Rist * distributed with this work for additional information 6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance 9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at 10*efeef26fSAndrew Rist * 11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*efeef26fSAndrew Rist * 13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*efeef26fSAndrew Rist * software distributed under the License is distributed on an 15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the 17*efeef26fSAndrew Rist * specific language governing permissions and limitations 18*efeef26fSAndrew Rist * under the License. 19*efeef26fSAndrew Rist * 20*efeef26fSAndrew Rist *************************************************************/ 21*efeef26fSAndrew Rist 22*efeef26fSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sw.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir 28cdf0e10cSrcweir 29cdf0e10cSrcweir 30cdf0e10cSrcweir #include "cmdid.h" 31cdf0e10cSrcweir #include "hintids.hxx" 32cdf0e10cSrcweir #include <algorithm> 33cdf0e10cSrcweir 34cdf0e10cSrcweir 35cdf0e10cSrcweir #include <svl/eitem.hxx> 36cdf0e10cSrcweir #include <editeng/lrspitem.hxx> 37cdf0e10cSrcweir #include <editeng/ulspitem.hxx> 38cdf0e10cSrcweir #include <editeng/sizeitem.hxx> 39cdf0e10cSrcweir #include <svx/pageitem.hxx> 40cdf0e10cSrcweir #include <editeng/brshitem.hxx> 41cdf0e10cSrcweir #include <editeng/frmdiritem.hxx> 42cdf0e10cSrcweir #include <vcl/bitmap.hxx> 43cdf0e10cSrcweir #include <vcl/graph.hxx> 44cdf0e10cSrcweir #include <tgrditem.hxx> 45cdf0e10cSrcweir #include <viewopt.hxx> 46cdf0e10cSrcweir #include "colex.hxx" 47cdf0e10cSrcweir #include "colmgr.hxx" 48cdf0e10cSrcweir 49cdf0e10cSrcweir /*----------------------------------------------------------------------- 50cdf0e10cSrcweir Beschreibung: Uebernahme der aktualisierten Werte aus dem Set 51cdf0e10cSrcweir -----------------------------------------------------------------------*/ 52cdf0e10cSrcweir void SwPageExample::UpdateExample( const SfxItemSet& rSet ) 53cdf0e10cSrcweir { 54cdf0e10cSrcweir const SvxPageItem* pPage = 0; 55cdf0e10cSrcweir SfxItemPool* pPool = rSet.GetPool(); 56cdf0e10cSrcweir sal_uInt16 nWhich = pPool->GetWhich( SID_ATTR_PAGE ); 57cdf0e10cSrcweir 58cdf0e10cSrcweir if ( rSet.GetItemState( nWhich, sal_False ) == SFX_ITEM_SET ) 59cdf0e10cSrcweir { 60cdf0e10cSrcweir // Ausrichtung 61cdf0e10cSrcweir pPage = (const SvxPageItem*)&rSet.Get( nWhich ); 62cdf0e10cSrcweir 63cdf0e10cSrcweir if ( pPage ) 64cdf0e10cSrcweir SetUsage( pPage->GetPageUsage() ); 65cdf0e10cSrcweir } 66cdf0e10cSrcweir 67cdf0e10cSrcweir nWhich = pPool->GetWhich( SID_ATTR_PAGE_SIZE ); 68cdf0e10cSrcweir 69cdf0e10cSrcweir if ( rSet.GetItemState( nWhich, sal_False ) == SFX_ITEM_SET ) 70cdf0e10cSrcweir { 71cdf0e10cSrcweir // Orientation und Size aus dem PageItem 72cdf0e10cSrcweir const SvxSizeItem& rSize = (const SvxSizeItem&)rSet.Get( nWhich ); 73cdf0e10cSrcweir SetSize( rSize.GetSize() ); 74cdf0e10cSrcweir } 75cdf0e10cSrcweir nWhich = RES_LR_SPACE; 76cdf0e10cSrcweir if ( rSet.GetItemState( nWhich, sal_False ) == SFX_ITEM_SET ) 77cdf0e10cSrcweir { 78cdf0e10cSrcweir // linken und rechten Rand einstellen 79cdf0e10cSrcweir const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)rSet.Get( nWhich ); 80cdf0e10cSrcweir 81cdf0e10cSrcweir SetLeft( rLRSpace.GetLeft() ); 82cdf0e10cSrcweir SetRight( rLRSpace.GetRight() ); 83cdf0e10cSrcweir } 84cdf0e10cSrcweir else 85cdf0e10cSrcweir { 86cdf0e10cSrcweir SetLeft( 0 ); 87cdf0e10cSrcweir SetRight( 0 ); 88cdf0e10cSrcweir } 89cdf0e10cSrcweir 90cdf0e10cSrcweir nWhich = RES_UL_SPACE; 91cdf0e10cSrcweir 92cdf0e10cSrcweir if ( rSet.GetItemState( nWhich, sal_False ) == SFX_ITEM_SET ) 93cdf0e10cSrcweir { 94cdf0e10cSrcweir // oberen und unteren Rand einstellen 95cdf0e10cSrcweir const SvxULSpaceItem& rULSpace = (const SvxULSpaceItem&)rSet.Get( nWhich ); 96cdf0e10cSrcweir 97cdf0e10cSrcweir SetTop( rULSpace.GetUpper() ); 98cdf0e10cSrcweir SetBottom( rULSpace.GetLower() ); 99cdf0e10cSrcweir } 100cdf0e10cSrcweir else 101cdf0e10cSrcweir { 102cdf0e10cSrcweir SetTop( 0 ); 103cdf0e10cSrcweir SetBottom( 0 ); 104cdf0e10cSrcweir } 105cdf0e10cSrcweir 106cdf0e10cSrcweir 107cdf0e10cSrcweir // Kopfzeilen-Attribute auswerten 108cdf0e10cSrcweir const SfxPoolItem* pItem; 109cdf0e10cSrcweir if( SFX_ITEM_SET == rSet.GetItemState( pPool->GetWhich( SID_ATTR_PAGE_HEADERSET), 110cdf0e10cSrcweir sal_False, &pItem ) ) 111cdf0e10cSrcweir { 112cdf0e10cSrcweir const SfxItemSet& rHeaderSet = ((SvxSetItem*)pItem)->GetItemSet(); 113cdf0e10cSrcweir const SfxBoolItem& rHeaderOn = 114cdf0e10cSrcweir (const SfxBoolItem&)rHeaderSet.Get( pPool->GetWhich( SID_ATTR_PAGE_ON ) ); 115cdf0e10cSrcweir 116cdf0e10cSrcweir if ( rHeaderOn.GetValue() ) 117cdf0e10cSrcweir { 118cdf0e10cSrcweir const SvxSizeItem& rSize = 119cdf0e10cSrcweir (const SvxSizeItem&)rHeaderSet.Get(pPool->GetWhich(SID_ATTR_PAGE_SIZE)); 120cdf0e10cSrcweir 121cdf0e10cSrcweir const SvxULSpaceItem& rUL = (const SvxULSpaceItem&)rHeaderSet.Get( 122cdf0e10cSrcweir pPool->GetWhich(SID_ATTR_ULSPACE)); 123cdf0e10cSrcweir const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)rHeaderSet.Get( 124cdf0e10cSrcweir pPool->GetWhich(SID_ATTR_LRSPACE)); 125cdf0e10cSrcweir 126cdf0e10cSrcweir SetHdHeight( rSize.GetSize().Height() - rUL.GetLower()); 127cdf0e10cSrcweir SetHdDist( rUL.GetLower() ); 128cdf0e10cSrcweir SetHdLeft( rLR.GetLeft() ); 129cdf0e10cSrcweir SetHdRight( rLR.GetRight() ); 130cdf0e10cSrcweir SetHeader( sal_True ); 131cdf0e10cSrcweir if ( rHeaderSet.GetItemState( RES_BACKGROUND ) == SFX_ITEM_SET ) 132cdf0e10cSrcweir { 133cdf0e10cSrcweir const SvxBrushItem& rItem = 134cdf0e10cSrcweir (const SvxBrushItem&)rHeaderSet.Get( RES_BACKGROUND ); 135cdf0e10cSrcweir SetHdColor( rItem.GetColor() ); 136cdf0e10cSrcweir } 137cdf0e10cSrcweir if ( rHeaderSet.GetItemState( RES_BOX ) == SFX_ITEM_SET ) 138cdf0e10cSrcweir { 139cdf0e10cSrcweir const SvxBoxItem& rItem = 140cdf0e10cSrcweir (const SvxBoxItem&)rHeaderSet.Get( RES_BOX ); 141cdf0e10cSrcweir SetHdBorder( rItem ); 142cdf0e10cSrcweir } 143cdf0e10cSrcweir } 144cdf0e10cSrcweir else 145cdf0e10cSrcweir SetHeader( sal_False ); 146cdf0e10cSrcweir } 147cdf0e10cSrcweir 148cdf0e10cSrcweir if( SFX_ITEM_SET == rSet.GetItemState( pPool->GetWhich( SID_ATTR_PAGE_FOOTERSET), 149cdf0e10cSrcweir sal_False, &pItem ) ) 150cdf0e10cSrcweir { 151cdf0e10cSrcweir const SfxItemSet& rFooterSet = ((SvxSetItem*)pItem)->GetItemSet(); 152cdf0e10cSrcweir const SfxBoolItem& rFooterOn = 153cdf0e10cSrcweir (const SfxBoolItem&)rFooterSet.Get( SID_ATTR_PAGE_ON ); 154cdf0e10cSrcweir 155cdf0e10cSrcweir if ( rFooterOn.GetValue() ) 156cdf0e10cSrcweir { 157cdf0e10cSrcweir const SvxSizeItem& rSize = 158cdf0e10cSrcweir (const SvxSizeItem&)rFooterSet.Get( pPool->GetWhich( SID_ATTR_PAGE_SIZE ) ); 159cdf0e10cSrcweir 160cdf0e10cSrcweir const SvxULSpaceItem& rUL = (const SvxULSpaceItem&)rFooterSet.Get( 161cdf0e10cSrcweir pPool->GetWhich( SID_ATTR_ULSPACE ) ); 162cdf0e10cSrcweir const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)rFooterSet.Get( 163cdf0e10cSrcweir pPool->GetWhich( SID_ATTR_LRSPACE ) ); 164cdf0e10cSrcweir 165cdf0e10cSrcweir SetFtHeight( rSize.GetSize().Height() - rUL.GetUpper()); 166cdf0e10cSrcweir SetFtDist( rUL.GetUpper() ); 167cdf0e10cSrcweir SetFtLeft( rLR.GetLeft() ); 168cdf0e10cSrcweir SetFtRight( rLR.GetRight() ); 169cdf0e10cSrcweir SetFooter( sal_True ); 170cdf0e10cSrcweir if( rFooterSet.GetItemState( RES_BACKGROUND ) == SFX_ITEM_SET ) 171cdf0e10cSrcweir { 172cdf0e10cSrcweir const SvxBrushItem& rItem = 173cdf0e10cSrcweir (const SvxBrushItem&)rFooterSet.Get( RES_BACKGROUND ); 174cdf0e10cSrcweir SetFtColor( rItem.GetColor() ); 175cdf0e10cSrcweir } 176cdf0e10cSrcweir if( rFooterSet.GetItemState( RES_BOX ) == SFX_ITEM_SET ) 177cdf0e10cSrcweir { 178cdf0e10cSrcweir const SvxBoxItem& rItem = 179cdf0e10cSrcweir (const SvxBoxItem&)rFooterSet.Get( RES_BOX ); 180cdf0e10cSrcweir SetFtBorder( rItem ); 181cdf0e10cSrcweir } 182cdf0e10cSrcweir } 183cdf0e10cSrcweir else 184cdf0e10cSrcweir SetFooter( sal_False ); 185cdf0e10cSrcweir } 186cdf0e10cSrcweir if( SFX_ITEM_SET == rSet.GetItemState( RES_BACKGROUND, 187cdf0e10cSrcweir sal_False, &pItem ) ) 188cdf0e10cSrcweir { 189cdf0e10cSrcweir SetColor( ( (const SvxBrushItem*)pItem )->GetColor() ); 190cdf0e10cSrcweir const Graphic* pGrf = ( (const SvxBrushItem*)pItem )->GetGraphic(); 191cdf0e10cSrcweir 192cdf0e10cSrcweir if ( pGrf ) 193cdf0e10cSrcweir { 194cdf0e10cSrcweir Bitmap aBitmap = pGrf->GetBitmap(); 195cdf0e10cSrcweir SetBitmap( &aBitmap ); 196cdf0e10cSrcweir } 197cdf0e10cSrcweir else 198cdf0e10cSrcweir SetBitmap( NULL ); 199cdf0e10cSrcweir } 200cdf0e10cSrcweir 201cdf0e10cSrcweir Invalidate(); 202cdf0e10cSrcweir } 203cdf0e10cSrcweir /*----------------------------------------------------------------------- 204cdf0e10cSrcweir Beschreibung: 205cdf0e10cSrcweir -----------------------------------------------------------------------*/ 206cdf0e10cSrcweir 207cdf0e10cSrcweir 208cdf0e10cSrcweir void SwColExample::DrawPage( const Point& rOrg, 209cdf0e10cSrcweir const sal_Bool bSecond, 210cdf0e10cSrcweir const sal_Bool bEnabled ) 211cdf0e10cSrcweir { 212cdf0e10cSrcweir SwPageExample::DrawPage( rOrg, bSecond, bEnabled ); 213cdf0e10cSrcweir sal_uInt16 nColumnCount; 214cdf0e10cSrcweir if( pColMgr && 0 != (nColumnCount = pColMgr->GetCount())) 215cdf0e10cSrcweir { 216cdf0e10cSrcweir long nL = GetLeft(); 217cdf0e10cSrcweir long nR = GetRight(); 218cdf0e10cSrcweir 219cdf0e10cSrcweir if ( GetUsage() == SVX_PAGE_MIRROR && !bSecond ) 220cdf0e10cSrcweir { 221cdf0e10cSrcweir // fuer gespiegelt drehen 222cdf0e10cSrcweir nL = GetRight(); 223cdf0e10cSrcweir nR = GetLeft(); 224cdf0e10cSrcweir } 225cdf0e10cSrcweir 226cdf0e10cSrcweir SetFillColor( Color( COL_LIGHTGRAY ) ); 227cdf0e10cSrcweir Rectangle aRect; 228cdf0e10cSrcweir aRect.Right() = rOrg.X() + GetSize().Width() - nR; 229cdf0e10cSrcweir aRect.Left() = rOrg.X() + nL; 230cdf0e10cSrcweir aRect.Top() = rOrg.Y() + GetTop() 231cdf0e10cSrcweir + GetHdHeight() + GetHdDist(); 232cdf0e10cSrcweir aRect.Bottom()= rOrg.Y() + GetSize().Height() - GetBottom() 233cdf0e10cSrcweir - GetFtHeight() - GetFtDist(); 234cdf0e10cSrcweir DrawRect(aRect); 235cdf0e10cSrcweir 236cdf0e10cSrcweir if(GetColor() == Color(COL_TRANSPARENT)) 237cdf0e10cSrcweir { 238cdf0e10cSrcweir const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 239cdf0e10cSrcweir const Color& rFieldColor = rStyleSettings.GetFieldColor(); 240cdf0e10cSrcweir SetFillColor( rFieldColor ); 241cdf0e10cSrcweir } 242cdf0e10cSrcweir else 243cdf0e10cSrcweir SetFillColor( GetColor() ); 244cdf0e10cSrcweir 245cdf0e10cSrcweir // #97495# make sure that the automatic column widht's are always equal 246cdf0e10cSrcweir sal_Bool bAutoWidth = pColMgr->IsAutoWidth(); 247cdf0e10cSrcweir sal_Int32 nAutoColWidth = 0; 248cdf0e10cSrcweir if(bAutoWidth) 249cdf0e10cSrcweir { 250cdf0e10cSrcweir sal_Int32 nColumnWidthSum = 0; 251cdf0e10cSrcweir sal_uInt16 i; 252cdf0e10cSrcweir for(i = 0; i < nColumnCount; ++i) 253cdf0e10cSrcweir nColumnWidthSum += pColMgr->GetColWidth( i ); 254cdf0e10cSrcweir nAutoColWidth = nColumnWidthSum / nColumnCount; 255cdf0e10cSrcweir } 256cdf0e10cSrcweir 257cdf0e10cSrcweir sal_uInt16 i; 258cdf0e10cSrcweir for( i = 0; i < nColumnCount; i++) 259cdf0e10cSrcweir { 260cdf0e10cSrcweir if(!bAutoWidth) 261cdf0e10cSrcweir nAutoColWidth = pColMgr->GetColWidth( i ); 262cdf0e10cSrcweir aRect.Right() = aRect.Left() + nAutoColWidth; 263cdf0e10cSrcweir DrawRect(aRect); 264cdf0e10cSrcweir if(i < nColumnCount - 1) 265cdf0e10cSrcweir aRect.Left() = aRect.Right() + pColMgr->GetGutterWidth(i); 266cdf0e10cSrcweir } 267cdf0e10cSrcweir if(pColMgr->HasLine()) 268cdf0e10cSrcweir { 269cdf0e10cSrcweir Point aUp( rOrg.X() + nL, rOrg.Y() + GetTop() ); 270cdf0e10cSrcweir Point aDown( rOrg.X() + nL, rOrg.Y() + GetSize().Height() 271cdf0e10cSrcweir - GetBottom() - GetFtHeight() - GetFtDist() ); 272cdf0e10cSrcweir 273cdf0e10cSrcweir if( pColMgr->GetLineHeightPercent() != 100 ) 274cdf0e10cSrcweir { 275cdf0e10cSrcweir long nLength = aDown.Y() - aUp.Y(); 276cdf0e10cSrcweir nLength -= nLength * pColMgr->GetLineHeightPercent() / 100; 277cdf0e10cSrcweir switch(pColMgr->GetAdjust()) 278cdf0e10cSrcweir { 279cdf0e10cSrcweir case COLADJ_BOTTOM: aUp.Y() += nLength; break; 280cdf0e10cSrcweir case COLADJ_TOP: aDown.Y() -= nLength; break; 281cdf0e10cSrcweir case COLADJ_CENTER: 282cdf0e10cSrcweir aUp.Y() += nLength / 2; 283cdf0e10cSrcweir aDown.Y() -= nLength / 2; 284cdf0e10cSrcweir break; 285cdf0e10cSrcweir default:; // prevent warning 286cdf0e10cSrcweir } 287cdf0e10cSrcweir } 288cdf0e10cSrcweir 289cdf0e10cSrcweir int nDist; 290cdf0e10cSrcweir for( i = 0; i < nColumnCount - 1; i++) 291cdf0e10cSrcweir { 292cdf0e10cSrcweir int nGutter = pColMgr->GetGutterWidth(i); 293cdf0e10cSrcweir nDist = pColMgr->GetColWidth( i ) + nGutter; 294cdf0e10cSrcweir nDist -= (i == 0) ? 295cdf0e10cSrcweir nGutter/2 : 296cdf0e10cSrcweir 0; 297cdf0e10cSrcweir aUp.X() += nDist; 298cdf0e10cSrcweir aDown.X() += nDist; 299cdf0e10cSrcweir DrawLine( aUp, aDown ); 300cdf0e10cSrcweir 301cdf0e10cSrcweir } 302cdf0e10cSrcweir } 303cdf0e10cSrcweir } 304cdf0e10cSrcweir } 305cdf0e10cSrcweir 306cdf0e10cSrcweir /*-----------------25.10.96 09.15------------------- 307cdf0e10cSrcweir 308cdf0e10cSrcweir --------------------------------------------------*/ 309cdf0e10cSrcweir 310cdf0e10cSrcweir 311cdf0e10cSrcweir SwColumnOnlyExample::SwColumnOnlyExample( Window* pParent, const ResId& rResId) : 312cdf0e10cSrcweir Window(pParent, rResId), 313cdf0e10cSrcweir m_aFrmSize(1,1) 314cdf0e10cSrcweir { 315cdf0e10cSrcweir SetMapMode( MapMode( MAP_TWIP ) ); 316cdf0e10cSrcweir m_aWinSize = GetOutputSizePixel(); 317cdf0e10cSrcweir m_aWinSize.Height() -= 4; 318cdf0e10cSrcweir m_aWinSize.Width() -= 4; 319cdf0e10cSrcweir 320cdf0e10cSrcweir m_aWinSize = PixelToLogic( m_aWinSize ); 321cdf0e10cSrcweir 322cdf0e10cSrcweir SetBorderStyle( WINDOW_BORDER_MONO ); 323cdf0e10cSrcweir 324cdf0e10cSrcweir m_aFrmSize = SvxPaperInfo::GetPaperSize(PAPER_A4);// DIN A4 325cdf0e10cSrcweir ::FitToActualSize(m_aCols, (sal_uInt16)m_aFrmSize.Width()); 326cdf0e10cSrcweir 327cdf0e10cSrcweir long nHeight = m_aFrmSize.Height(); 328cdf0e10cSrcweir Fraction aScale( m_aWinSize.Height(), nHeight ); 329cdf0e10cSrcweir MapMode aMapMode( GetMapMode() ); 330cdf0e10cSrcweir aMapMode.SetScaleX( aScale ); 331cdf0e10cSrcweir aMapMode.SetScaleY( aScale ); 332cdf0e10cSrcweir SetMapMode( aMapMode ); 333cdf0e10cSrcweir } 334cdf0e10cSrcweir 335cdf0e10cSrcweir /*-----------------25.10.96 09.16------------------- 336cdf0e10cSrcweir 337cdf0e10cSrcweir --------------------------------------------------*/ 338cdf0e10cSrcweir 339cdf0e10cSrcweir 340cdf0e10cSrcweir void SwColumnOnlyExample::Paint( const Rectangle& /*rRect*/ ) 341cdf0e10cSrcweir { 342cdf0e10cSrcweir const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 343cdf0e10cSrcweir const Color& rFieldColor = rStyleSettings.GetFieldColor(); 344cdf0e10cSrcweir const Color& rDlgColor = rStyleSettings.GetDialogColor(); 345cdf0e10cSrcweir const Color& rFieldTextColor = SwViewOption::GetFontColor(); 346cdf0e10cSrcweir Color aGrayColor(COL_LIGHTGRAY); 347cdf0e10cSrcweir if(rFieldColor == aGrayColor) 348cdf0e10cSrcweir aGrayColor.Invert(); 349cdf0e10cSrcweir 350cdf0e10cSrcweir Size aLogSize(PixelToLogic(GetOutputSizePixel())); 351cdf0e10cSrcweir Rectangle aCompleteRect(Point(0,0), aLogSize); 352cdf0e10cSrcweir SetLineColor(rDlgColor); 353cdf0e10cSrcweir SetFillColor(rDlgColor); 354cdf0e10cSrcweir DrawRect(aCompleteRect); 355cdf0e10cSrcweir 356cdf0e10cSrcweir SetLineColor( rFieldTextColor ); 357cdf0e10cSrcweir Point aTL( (aLogSize.Width() - m_aFrmSize.Width()) / 2, 358cdf0e10cSrcweir (aLogSize.Height() - m_aFrmSize.Height()) / 2); 359cdf0e10cSrcweir Rectangle aRect(aTL, m_aFrmSize); 360cdf0e10cSrcweir 361cdf0e10cSrcweir //draw a shadow rectangle 362cdf0e10cSrcweir SetFillColor( Color(COL_GRAY) ); 363cdf0e10cSrcweir Rectangle aShadowRect(aRect); 364cdf0e10cSrcweir aShadowRect.Move(aTL.Y(), aTL.Y()); 365cdf0e10cSrcweir DrawRect(aShadowRect); 366cdf0e10cSrcweir 367cdf0e10cSrcweir SetFillColor( rFieldColor ); 368cdf0e10cSrcweir DrawRect(aRect); 369cdf0e10cSrcweir 370cdf0e10cSrcweir SetFillColor( aGrayColor ); 371cdf0e10cSrcweir 372cdf0e10cSrcweir //Spaltentrenner? 373cdf0e10cSrcweir long nLength = aLogSize.Height() - 2 * aTL.Y(); 374cdf0e10cSrcweir Point aUp( aTL ); 375cdf0e10cSrcweir Point aDown( aTL.X(), nLength ); 376cdf0e10cSrcweir sal_Bool bLines = sal_False; 377cdf0e10cSrcweir if(m_aCols.GetLineAdj() != COLADJ_NONE) 378cdf0e10cSrcweir { 379cdf0e10cSrcweir bLines = sal_True; 380cdf0e10cSrcweir 381cdf0e10cSrcweir sal_uInt16 nPercent = m_aCols.GetLineHeight(); 382cdf0e10cSrcweir if( nPercent != 100 ) 383cdf0e10cSrcweir { 384cdf0e10cSrcweir nLength -= nLength * nPercent / 100; 385cdf0e10cSrcweir switch(m_aCols.GetLineAdj()) 386cdf0e10cSrcweir { 387cdf0e10cSrcweir case COLADJ_BOTTOM: aUp.Y() += nLength; break; 388cdf0e10cSrcweir case COLADJ_TOP: aDown.Y() -= nLength; break; 389cdf0e10cSrcweir case COLADJ_CENTER: 390cdf0e10cSrcweir aUp.Y() += nLength / 2; 391cdf0e10cSrcweir aDown.Y() -= nLength / 2; 392cdf0e10cSrcweir break; 393cdf0e10cSrcweir default:; //prevent warning 394cdf0e10cSrcweir } 395cdf0e10cSrcweir } 396cdf0e10cSrcweir 397cdf0e10cSrcweir } 398cdf0e10cSrcweir const SwColumns& rCols = m_aCols.GetColumns(); 399cdf0e10cSrcweir sal_uInt16 nColCount = rCols.Count(); 400cdf0e10cSrcweir if( nColCount ) 401cdf0e10cSrcweir { 402cdf0e10cSrcweir DrawRect(aRect); 403cdf0e10cSrcweir SetFillColor( rFieldColor ); 404cdf0e10cSrcweir Rectangle aFrmRect(aTL, m_aFrmSize); 405cdf0e10cSrcweir long nSum = aTL.X(); 406cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nColCount; i++) 407cdf0e10cSrcweir { 408cdf0e10cSrcweir SwColumn* pCol = rCols[i]; 409cdf0e10cSrcweir aFrmRect.Left() = nSum + pCol->GetLeft();//nSum + pCol->GetLeft() + aTL.X(); 410cdf0e10cSrcweir nSum += pCol->GetWishWidth(); 411cdf0e10cSrcweir aFrmRect.Right() = nSum - pCol->GetRight(); 412cdf0e10cSrcweir DrawRect(aFrmRect); 413cdf0e10cSrcweir } 414cdf0e10cSrcweir if(bLines ) 415cdf0e10cSrcweir { 416cdf0e10cSrcweir nSum = aTL.X(); 417cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nColCount - 1; i++) 418cdf0e10cSrcweir { 419cdf0e10cSrcweir nSum += rCols[i]->GetWishWidth(); 420cdf0e10cSrcweir aUp.X() = nSum; 421cdf0e10cSrcweir aDown.X() = nSum; 422cdf0e10cSrcweir DrawLine(aUp, aDown); 423cdf0e10cSrcweir } 424cdf0e10cSrcweir } 425cdf0e10cSrcweir } 426cdf0e10cSrcweir } 427cdf0e10cSrcweir 428cdf0e10cSrcweir /*-----------------25.10.96 12.05------------------- 429cdf0e10cSrcweir 430cdf0e10cSrcweir --------------------------------------------------*/ 431cdf0e10cSrcweir 432cdf0e10cSrcweir 433cdf0e10cSrcweir void SwColumnOnlyExample::SetColumns(const SwFmtCol& rCol) 434cdf0e10cSrcweir { 435cdf0e10cSrcweir m_aCols = rCol; 436cdf0e10cSrcweir sal_uInt16 nWishSum = m_aCols.GetWishWidth(); 437cdf0e10cSrcweir long nFrmWidth = m_aFrmSize.Width(); 438cdf0e10cSrcweir SwColumns& rCols = m_aCols.GetColumns(); 439cdf0e10cSrcweir sal_uInt16 nColCount = rCols.Count(); 440cdf0e10cSrcweir 441cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nColCount; i++) 442cdf0e10cSrcweir { 443cdf0e10cSrcweir SwColumn* pCol = rCols[i]; 444cdf0e10cSrcweir long nWish = pCol->GetWishWidth(); 445cdf0e10cSrcweir nWish *= nFrmWidth; 446cdf0e10cSrcweir nWish /= nWishSum; 447cdf0e10cSrcweir pCol->SetWishWidth((sal_uInt16)nWish); 448cdf0e10cSrcweir long nLeft = pCol->GetLeft(); 449cdf0e10cSrcweir nLeft *= nFrmWidth; 450cdf0e10cSrcweir nLeft /= nWishSum; 451cdf0e10cSrcweir pCol->SetLeft((sal_uInt16)nLeft); 452cdf0e10cSrcweir long nRight = pCol->GetRight(); 453cdf0e10cSrcweir nRight *= nFrmWidth; 454cdf0e10cSrcweir nRight /= nWishSum; 455cdf0e10cSrcweir pCol->SetRight((sal_uInt16)nRight); 456cdf0e10cSrcweir } 457cdf0e10cSrcweir // #97495# make sure that the automatic column width's are always equal 458cdf0e10cSrcweir if(nColCount && m_aCols.IsOrtho()) 459cdf0e10cSrcweir { 460cdf0e10cSrcweir sal_Int32 nColumnWidthSum = 0; 461cdf0e10cSrcweir sal_uInt16 i; 462cdf0e10cSrcweir for(i = 0; i < nColCount; ++i) 463cdf0e10cSrcweir { 464cdf0e10cSrcweir SwColumn* pCol = rCols[i]; 465cdf0e10cSrcweir nColumnWidthSum += pCol->GetWishWidth(); 466cdf0e10cSrcweir nColumnWidthSum -= (pCol->GetRight() + pCol->GetLeft()); 467cdf0e10cSrcweir } 468cdf0e10cSrcweir nColumnWidthSum /= nColCount; 469cdf0e10cSrcweir for(i = 0; i < nColCount; ++i) 470cdf0e10cSrcweir { 471cdf0e10cSrcweir SwColumn* pCol = rCols[i]; 472cdf0e10cSrcweir pCol->SetWishWidth( static_cast< sal_uInt16 >(nColumnWidthSum + pCol->GetRight() + pCol->GetLeft())); 473cdf0e10cSrcweir } 474cdf0e10cSrcweir } 475cdf0e10cSrcweir } 476cdf0e10cSrcweir /* -----------------------------08.02.2002 11:44------------------------------ 477cdf0e10cSrcweir 478cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 479cdf0e10cSrcweir SwPageGridExample::~SwPageGridExample() 480cdf0e10cSrcweir { 481cdf0e10cSrcweir delete pGridItem; 482cdf0e10cSrcweir } 483cdf0e10cSrcweir /* -----------------------------08.02.2002 11:48------------------------------ 484cdf0e10cSrcweir 485cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 486cdf0e10cSrcweir #define MAX_ROWS 10 487cdf0e10cSrcweir #define MAX_LINES 15 488cdf0e10cSrcweir void SwPageGridExample::DrawPage( const Point& rOrg, 489cdf0e10cSrcweir const sal_Bool bSecond, 490cdf0e10cSrcweir const sal_Bool bEnabled ) 491cdf0e10cSrcweir { 492cdf0e10cSrcweir SwPageExample::DrawPage(rOrg, bSecond, bEnabled); 493cdf0e10cSrcweir if(pGridItem && pGridItem->GetGridType()) 494cdf0e10cSrcweir { 495cdf0e10cSrcweir //paint the grid now 496cdf0e10cSrcweir Color aLineColor = pGridItem->GetColor(); 497cdf0e10cSrcweir if(aLineColor.GetColor() == COL_AUTO) 498cdf0e10cSrcweir { 499cdf0e10cSrcweir aLineColor = GetFillColor(); 500cdf0e10cSrcweir aLineColor.Invert(); 501cdf0e10cSrcweir } 502cdf0e10cSrcweir SetLineColor(aLineColor); 503cdf0e10cSrcweir long nL = GetLeft(); 504cdf0e10cSrcweir long nR = GetRight(); 505cdf0e10cSrcweir 506cdf0e10cSrcweir if ( GetUsage() == SVX_PAGE_MIRROR && !bSecond ) 507cdf0e10cSrcweir { 508cdf0e10cSrcweir // fuer gespiegelt drehen 509cdf0e10cSrcweir nL = GetRight(); 510cdf0e10cSrcweir nR = GetLeft(); 511cdf0e10cSrcweir } 512cdf0e10cSrcweir 513cdf0e10cSrcweir Rectangle aRect; 514cdf0e10cSrcweir aRect.Right() = rOrg.X() + GetSize().Width() - nR; 515cdf0e10cSrcweir aRect.Left() = rOrg.X() + nL; 516cdf0e10cSrcweir aRect.Top() = rOrg.Y() + GetTop() 517cdf0e10cSrcweir + GetHdHeight() + GetHdDist(); 518cdf0e10cSrcweir aRect.Bottom()= rOrg.Y() + GetSize().Height() - GetBottom() 519cdf0e10cSrcweir - GetFtHeight() - GetFtDist(); 520cdf0e10cSrcweir 521cdf0e10cSrcweir //increase the values to get a 'viewable' preview 522cdf0e10cSrcweir sal_Int32 nBaseHeight = pGridItem->GetBaseHeight() * 3; 523cdf0e10cSrcweir sal_Int32 nRubyHeight = pGridItem->GetRubyHeight() * 3; 524cdf0e10cSrcweir 525cdf0e10cSrcweir //detect height of rectangles 526cdf0e10cSrcweir Rectangle aRubyRect(aRect.TopLeft(), 527cdf0e10cSrcweir m_bVertical ? 528cdf0e10cSrcweir Size(nRubyHeight, aRect.GetHeight()) : 529cdf0e10cSrcweir Size(aRect.GetWidth(), nRubyHeight)); 530cdf0e10cSrcweir Rectangle aCharRect(aRect.TopLeft(), 531cdf0e10cSrcweir m_bVertical ? 532cdf0e10cSrcweir Size(nBaseHeight, aRect.GetHeight()) : 533cdf0e10cSrcweir Size(aRect.GetWidth(), nBaseHeight)); 534cdf0e10cSrcweir 535cdf0e10cSrcweir sal_Int32 nLineHeight = nBaseHeight + nRubyHeight; 536cdf0e10cSrcweir 537cdf0e10cSrcweir //detect count of rectangles 538cdf0e10cSrcweir sal_Int32 nLines = (m_bVertical ? aRect.GetWidth(): aRect.GetHeight()) / nLineHeight; 539cdf0e10cSrcweir if(nLines > pGridItem->GetLines()) 540cdf0e10cSrcweir nLines = pGridItem->GetLines(); 541cdf0e10cSrcweir 542cdf0e10cSrcweir // determine start position 543cdf0e10cSrcweir if(m_bVertical) 544cdf0e10cSrcweir { 545cdf0e10cSrcweir sal_Int16 nXStart = static_cast< sal_Int16 >(aRect.GetWidth() / 2 - nLineHeight * nLines /2); 546cdf0e10cSrcweir aRubyRect.Move(nXStart, 0); 547cdf0e10cSrcweir aCharRect.Move(nXStart, 0); 548cdf0e10cSrcweir } 549cdf0e10cSrcweir else 550cdf0e10cSrcweir { 551cdf0e10cSrcweir sal_Int16 nYStart = static_cast< sal_Int16 >(aRect.GetHeight() / 2 - nLineHeight * nLines /2); 552cdf0e10cSrcweir aRubyRect.Move(0, nYStart); 553cdf0e10cSrcweir aCharRect.Move(0, nYStart); 554cdf0e10cSrcweir } 555cdf0e10cSrcweir 556cdf0e10cSrcweir if(pGridItem->IsRubyTextBelow()) 557cdf0e10cSrcweir m_bVertical ? aRubyRect.Move(nBaseHeight, 0) : aRubyRect.Move(0, nBaseHeight); 558cdf0e10cSrcweir else 559cdf0e10cSrcweir m_bVertical ? aCharRect.Move(nRubyHeight, 0) : aCharRect.Move(0, nRubyHeight); 560cdf0e10cSrcweir 561cdf0e10cSrcweir //vertical lines 562cdf0e10cSrcweir sal_Bool bBothLines = pGridItem->GetGridType() == GRID_LINES_CHARS; 563cdf0e10cSrcweir SetFillColor( Color( COL_TRANSPARENT ) ); 564cdf0e10cSrcweir sal_Int32 nXMove = m_bVertical ? nLineHeight : 0; 565cdf0e10cSrcweir sal_Int32 nYMove = m_bVertical ? 0 : nLineHeight; 566cdf0e10cSrcweir for(sal_Int32 nLine = 0; nLine < nLines; nLine++) 567cdf0e10cSrcweir { 568cdf0e10cSrcweir DrawRect(aRubyRect); 569cdf0e10cSrcweir DrawRect(aCharRect); 570cdf0e10cSrcweir if(bBothLines) 571cdf0e10cSrcweir { 572cdf0e10cSrcweir Point aStart = aCharRect.TopLeft(); 573cdf0e10cSrcweir Point aEnd = m_bVertical ? aCharRect.TopRight() : aCharRect.BottomLeft(); 574cdf0e10cSrcweir while(m_bVertical ? aStart.Y() < aRect.Bottom(): aStart.X() < aRect.Right()) 575cdf0e10cSrcweir { 576cdf0e10cSrcweir DrawLine(aStart, aEnd); 577cdf0e10cSrcweir if(m_bVertical) 578cdf0e10cSrcweir aStart.Y() = aEnd.Y() += nBaseHeight; 579cdf0e10cSrcweir else 580cdf0e10cSrcweir aStart.X() = aEnd.X() += nBaseHeight; 581cdf0e10cSrcweir } 582cdf0e10cSrcweir } 583cdf0e10cSrcweir aRubyRect.Move(nXMove, nYMove); 584cdf0e10cSrcweir aCharRect.Move(nXMove, nYMove); 585cdf0e10cSrcweir } 586cdf0e10cSrcweir } 587cdf0e10cSrcweir } 588cdf0e10cSrcweir /* -----------------------------08.02.2002 11:48------------------------------ 589cdf0e10cSrcweir 590cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 591cdf0e10cSrcweir void SwPageGridExample::UpdateExample( const SfxItemSet& rSet ) 592cdf0e10cSrcweir { 593cdf0e10cSrcweir DELETEZ(pGridItem); 594cdf0e10cSrcweir //get the grid information 595cdf0e10cSrcweir if(SFX_ITEM_AVAILABLE <= rSet.GetItemState(RES_TEXTGRID, sal_True)) 596cdf0e10cSrcweir pGridItem = (SwTextGridItem*)((const SwTextGridItem&)rSet.Get(RES_TEXTGRID)).Clone(); 597cdf0e10cSrcweir if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( RES_FRAMEDIR, sal_True )) 598cdf0e10cSrcweir { 599cdf0e10cSrcweir const SvxFrameDirectionItem& rDirItem = 600cdf0e10cSrcweir (const SvxFrameDirectionItem&)rSet.Get(RES_FRAMEDIR); 601cdf0e10cSrcweir m_bVertical = rDirItem.GetValue() == FRMDIR_VERT_TOP_RIGHT|| 602cdf0e10cSrcweir rDirItem.GetValue() == FRMDIR_VERT_TOP_LEFT; 603cdf0e10cSrcweir } 604cdf0e10cSrcweir SwPageExample::UpdateExample(rSet); 605cdf0e10cSrcweir } 606cdf0e10cSrcweir 607