247 lines
7.3 KiB
C++
247 lines
7.3 KiB
C++
/*************************************************************************
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: paraprev.cxx,v $
|
|
*
|
|
* $Revision: 1.12 $
|
|
*
|
|
* last change: $Author: obo $ $Date: 2006-10-12 12:24:42 $
|
|
*
|
|
* The Contents of this file are made available subject to
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
|
*
|
|
*
|
|
* GNU Lesser General Public License Version 2.1
|
|
* =============================================
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License version 2.1, as published by the Free Software Foundation.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*
|
|
************************************************************************/
|
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
#include "precompiled_svx.hxx"
|
|
|
|
// include ---------------------------------------------------------------
|
|
|
|
#include "paraprev.hxx"
|
|
|
|
// STATIC DATA -----------------------------------------------------------
|
|
|
|
#define FOUR_POINTS 80
|
|
|
|
// class SvxParaPrevWindow -----------------------------------------------
|
|
|
|
SvxParaPrevWindow::SvxParaPrevWindow( Window* pParent, const ResId& rId ) :
|
|
|
|
Window( pParent, rId ),
|
|
|
|
nLeftMargin ( 0 ),
|
|
nRightMargin ( 0 ),
|
|
nFirstLineOfst ( 0 ),
|
|
nUpper ( 0 ),
|
|
nLower ( 0 ),
|
|
eAdjust ( SVX_ADJUST_LEFT ),
|
|
eLastLine ( SVX_ADJUST_LEFT ),
|
|
eLine ( SVX_PREV_LINESPACE_1 ),
|
|
nLineVal ( 0 )
|
|
|
|
{
|
|
// defaultmaessing in Twips rechnen
|
|
SetMapMode( MapMode( MAP_TWIP ) );
|
|
aWinSize = GetOutputSizePixel();
|
|
aWinSize = PixelToLogic( aWinSize );
|
|
Size aTmp(1, 1);
|
|
aTmp = PixelToLogic(aTmp);
|
|
aWinSize.Width() -= aTmp.Width() /2;
|
|
aWinSize.Height() -= aTmp.Height() /2;
|
|
|
|
aSize = Size( 11905, 16837 );
|
|
|
|
SetBorderStyle( WINDOW_BORDER_MONO );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvxParaPrevWindow::Paint( const Rectangle& )
|
|
{
|
|
DrawParagraph( TRUE );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
#define DEF_MARGIN 120
|
|
|
|
void SvxParaPrevWindow::DrawParagraph( BOOL bAll )
|
|
{
|
|
const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
|
|
const Color& rWinColor = rStyleSettings.GetWindowColor();
|
|
Color aGrayColor(COL_LIGHTGRAY);
|
|
|
|
SetFillColor( Color( rWinColor ) );
|
|
if( bAll )
|
|
DrawRect( Rectangle( Point(), aWinSize ) );
|
|
|
|
SetLineColor();
|
|
|
|
long nH = aWinSize.Height() / 19;
|
|
Size aLineSiz( aWinSize.Width() - DEF_MARGIN, nH ),
|
|
aSiz = aLineSiz;
|
|
Point aPnt;
|
|
aPnt.X() = DEF_MARGIN / 2;
|
|
SetFillColor( aGrayColor );
|
|
|
|
for ( USHORT i = 0; i < 9; ++i )
|
|
{
|
|
if ( 3 == i )
|
|
{
|
|
SetFillColor( Color( COL_GRAY ) );
|
|
long nTop = nUpper * aLineSiz.Height() / aSize.Height();
|
|
aPnt.Y() += nTop * 2;
|
|
}
|
|
|
|
if ( 6 == i )
|
|
SetFillColor( aGrayColor );
|
|
|
|
if ( 3 <= i && 6 > i )
|
|
{
|
|
long nLeft = nLeftMargin * aLineSiz.Width() / aSize.Width();
|
|
long nFirst = nFirstLineOfst * aLineSiz.Width() / aSize.Width();
|
|
long nTmp = nLeft + nFirst;
|
|
|
|
if ( 3 == i )
|
|
{
|
|
aPnt.X() += nTmp;
|
|
aSiz.Width() -= nTmp;
|
|
}
|
|
else
|
|
{
|
|
aPnt.X() += nLeft;
|
|
aSiz.Width() -= nLeft;
|
|
}
|
|
long nRight = nRightMargin * aLineSiz.Width() / aSize.Width();
|
|
aSiz.Width() -= nRight;
|
|
}
|
|
|
|
if ( 4 == i || 5 == i || 6 == i )
|
|
{
|
|
switch ( eLine )
|
|
{
|
|
case SVX_PREV_LINESPACE_1: break;
|
|
case SVX_PREV_LINESPACE_15: aPnt.Y() += nH / 2; break;
|
|
case SVX_PREV_LINESPACE_2: aPnt.Y() += nH; break;
|
|
|
|
case SVX_PREV_LINESPACE_PROP:
|
|
case SVX_PREV_LINESPACE_MIN:
|
|
case SVX_PREV_LINESPACE_DURCH: break;
|
|
}
|
|
}
|
|
|
|
aPnt.Y() += nH;
|
|
|
|
if ( (3 <= i) && (5 >= i) )
|
|
{
|
|
long nLW;
|
|
switch( i )
|
|
{
|
|
default:
|
|
case 3: nLW = aLineSiz.Width() * 8 / 10; break;
|
|
case 4: nLW = aLineSiz.Width() * 9 / 10; break;
|
|
case 5: nLW = aLineSiz.Width() / 2; break;
|
|
}
|
|
|
|
if ( nLW > aSiz.Width() )
|
|
nLW = aSiz.Width();
|
|
|
|
switch ( eAdjust )
|
|
{
|
|
case SVX_ADJUST_LEFT:
|
|
break;
|
|
case SVX_ADJUST_RIGHT:
|
|
aPnt.X() += ( aSiz.Width() - nLW );
|
|
break;
|
|
case SVX_ADJUST_CENTER:
|
|
aPnt.X() += ( aSiz.Width() - nLW ) / 2;
|
|
break;
|
|
default: ; //prevent warning
|
|
}
|
|
if( SVX_ADJUST_BLOCK == eAdjust )
|
|
{
|
|
if( 5 == i )
|
|
{
|
|
switch( eLastLine )
|
|
{
|
|
case SVX_ADJUST_LEFT:
|
|
break;
|
|
case SVX_ADJUST_RIGHT:
|
|
aPnt.X() += ( aSiz.Width() - nLW );
|
|
break;
|
|
case SVX_ADJUST_CENTER:
|
|
aPnt.X() += ( aSiz.Width() - nLW ) / 2;
|
|
break;
|
|
case SVX_ADJUST_BLOCK:
|
|
nLW = aSiz.Width();
|
|
break;
|
|
default: ; //prevent warning
|
|
}
|
|
}
|
|
else
|
|
nLW = aSiz.Width();
|
|
}
|
|
aSiz.Width() = nLW;
|
|
}
|
|
|
|
Rectangle aRect( aPnt, aSiz );
|
|
|
|
if ( Lines[i] != aRect || bAll )
|
|
{
|
|
if ( !bAll )
|
|
{
|
|
Color aFillCol = GetFillColor();
|
|
SetFillColor( rWinColor );
|
|
DrawRect( Lines[i] );
|
|
SetFillColor( aFillCol );
|
|
}
|
|
DrawRect( aRect );
|
|
Lines[i] = aRect;
|
|
}
|
|
|
|
if ( 5 == i )
|
|
{
|
|
long nBottom = nLower * aLineSiz.Height() / aSize.Height();
|
|
aPnt.Y() += nBottom * 2;
|
|
}
|
|
|
|
aPnt.Y() += nH;
|
|
// wieder zuruecksetzen, fuer jede Linie neu berechnen
|
|
aPnt.X() = DEF_MARGIN / 2;
|
|
aSiz = aLineSiz;
|
|
}
|
|
}
|
|
|
|
#undef DEF_MARGIN
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
void SvxParaPrevWindow::OutputSizeChanged()
|
|
{
|
|
aWinSize = GetOutputSizePixel();
|
|
aWinSize = PixelToLogic( aWinSize );
|
|
Invalidate();
|
|
}
|
|
|