xref: /trunk/main/svx/source/dialog/paraprev.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
1*f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*f6e50924SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*f6e50924SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*f6e50924SAndrew Rist  * distributed with this work for additional information
6*f6e50924SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*f6e50924SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*f6e50924SAndrew Rist  * "License"); you may not use this file except in compliance
9*f6e50924SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*f6e50924SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*f6e50924SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*f6e50924SAndrew Rist  * software distributed under the License is distributed on an
15*f6e50924SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f6e50924SAndrew Rist  * KIND, either express or implied.  See the License for the
17*f6e50924SAndrew Rist  * specific language governing permissions and limitations
18*f6e50924SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*f6e50924SAndrew Rist  *************************************************************/
21*f6e50924SAndrew Rist 
22*f6e50924SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svx.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir // include ---------------------------------------------------------------
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include <svx/paraprev.hxx>
30cdf0e10cSrcweir 
31cdf0e10cSrcweir // STATIC DATA -----------------------------------------------------------
32cdf0e10cSrcweir 
33cdf0e10cSrcweir #define FOUR_POINTS 80
34cdf0e10cSrcweir 
35cdf0e10cSrcweir // class SvxParaPrevWindow -----------------------------------------------
36cdf0e10cSrcweir 
SvxParaPrevWindow(Window * pParent,const ResId & rId)37cdf0e10cSrcweir SvxParaPrevWindow::SvxParaPrevWindow( Window* pParent, const ResId& rId ) :
38cdf0e10cSrcweir 
39cdf0e10cSrcweir     Window( pParent, rId ),
40cdf0e10cSrcweir 
41cdf0e10cSrcweir     nLeftMargin     ( 0 ),
42cdf0e10cSrcweir     nRightMargin    ( 0 ),
43cdf0e10cSrcweir     nFirstLineOfst  ( 0 ),
44cdf0e10cSrcweir     nUpper          ( 0 ),
45cdf0e10cSrcweir     nLower          ( 0 ),
46cdf0e10cSrcweir     eAdjust         ( SVX_ADJUST_LEFT ),
47cdf0e10cSrcweir     eLastLine       ( SVX_ADJUST_LEFT ),
48cdf0e10cSrcweir     eLine           ( SVX_PREV_LINESPACE_1 ),
49cdf0e10cSrcweir     nLineVal        ( 0 )
50cdf0e10cSrcweir 
51cdf0e10cSrcweir {
52cdf0e10cSrcweir     // defaultmaessing in Twips rechnen
53cdf0e10cSrcweir     SetMapMode( MapMode( MAP_TWIP ) );
54cdf0e10cSrcweir     aWinSize = GetOutputSizePixel();
55cdf0e10cSrcweir     aWinSize = PixelToLogic( aWinSize );
56cdf0e10cSrcweir     Size aTmp(1, 1);
57cdf0e10cSrcweir     aTmp = PixelToLogic(aTmp);
58cdf0e10cSrcweir     aWinSize.Width() -= aTmp.Width() /2;
59cdf0e10cSrcweir     aWinSize.Height() -= aTmp.Height() /2;
60cdf0e10cSrcweir 
61cdf0e10cSrcweir     aSize = Size( 11905, 16837 );
62cdf0e10cSrcweir 
63cdf0e10cSrcweir     SetBorderStyle( WINDOW_BORDER_MONO );
64cdf0e10cSrcweir }
65cdf0e10cSrcweir 
66cdf0e10cSrcweir // -----------------------------------------------------------------------
67cdf0e10cSrcweir 
Paint(const Rectangle &)68cdf0e10cSrcweir void SvxParaPrevWindow::Paint( const Rectangle& )
69cdf0e10cSrcweir {
70cdf0e10cSrcweir     DrawParagraph( sal_True );
71cdf0e10cSrcweir }
72cdf0e10cSrcweir 
73cdf0e10cSrcweir // -----------------------------------------------------------------------
74cdf0e10cSrcweir 
75cdf0e10cSrcweir #define DEF_MARGIN  120
76cdf0e10cSrcweir 
DrawParagraph(sal_Bool bAll)77cdf0e10cSrcweir void SvxParaPrevWindow::DrawParagraph( sal_Bool bAll )
78cdf0e10cSrcweir {
79cdf0e10cSrcweir     const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
80cdf0e10cSrcweir     const Color& rWinColor = rStyleSettings.GetWindowColor();
81cdf0e10cSrcweir     Color aGrayColor(COL_LIGHTGRAY);
82cdf0e10cSrcweir 
83cdf0e10cSrcweir     SetFillColor( Color( rWinColor ) );
84cdf0e10cSrcweir     if( bAll )
85cdf0e10cSrcweir         DrawRect( Rectangle( Point(), aWinSize ) );
86cdf0e10cSrcweir 
87cdf0e10cSrcweir     SetLineColor();
88cdf0e10cSrcweir 
89cdf0e10cSrcweir     long nH = aWinSize.Height() / 19;
90cdf0e10cSrcweir     Size aLineSiz( aWinSize.Width() - DEF_MARGIN, nH ),
91cdf0e10cSrcweir          aSiz = aLineSiz;
92cdf0e10cSrcweir     Point aPnt;
93cdf0e10cSrcweir     aPnt.X() = DEF_MARGIN / 2;
94cdf0e10cSrcweir     SetFillColor( aGrayColor );
95cdf0e10cSrcweir 
96cdf0e10cSrcweir     for ( sal_uInt16 i = 0; i < 9; ++i )
97cdf0e10cSrcweir     {
98cdf0e10cSrcweir         if ( 3 == i )
99cdf0e10cSrcweir         {
100cdf0e10cSrcweir             SetFillColor( Color( COL_GRAY ) );
101cdf0e10cSrcweir             long nTop = nUpper * aLineSiz.Height() / aSize.Height();
102cdf0e10cSrcweir             aPnt.Y() += nTop * 2;
103cdf0e10cSrcweir         }
104cdf0e10cSrcweir 
105cdf0e10cSrcweir         if ( 6 == i )
106cdf0e10cSrcweir             SetFillColor( aGrayColor );
107cdf0e10cSrcweir 
108cdf0e10cSrcweir         if ( 3 <= i && 6 > i )
109cdf0e10cSrcweir         {
110cdf0e10cSrcweir             long nLeft = nLeftMargin * aLineSiz.Width() / aSize.Width();
111cdf0e10cSrcweir             long nFirst = nFirstLineOfst * aLineSiz.Width() / aSize.Width();
112cdf0e10cSrcweir             long nTmp = nLeft + nFirst;
113cdf0e10cSrcweir 
114cdf0e10cSrcweir             if ( 3 == i )
115cdf0e10cSrcweir             {
116cdf0e10cSrcweir                 aPnt.X() += nTmp;
117cdf0e10cSrcweir                 aSiz.Width() -= nTmp;
118cdf0e10cSrcweir             }
119cdf0e10cSrcweir             else
120cdf0e10cSrcweir             {
121cdf0e10cSrcweir                 aPnt.X() += nLeft;
122cdf0e10cSrcweir                 aSiz.Width() -= nLeft;
123cdf0e10cSrcweir             }
124cdf0e10cSrcweir             long nRight = nRightMargin * aLineSiz.Width() / aSize.Width();
125cdf0e10cSrcweir             aSiz.Width() -= nRight;
126cdf0e10cSrcweir         }
127cdf0e10cSrcweir 
128cdf0e10cSrcweir         if ( 4 == i || 5 == i || 6 == i )
129cdf0e10cSrcweir         {
130cdf0e10cSrcweir             switch ( eLine )
131cdf0e10cSrcweir             {
132cdf0e10cSrcweir                 case SVX_PREV_LINESPACE_1:                      break;
133cdf0e10cSrcweir                 case SVX_PREV_LINESPACE_15: aPnt.Y() += nH / 2; break;
134cdf0e10cSrcweir                 case SVX_PREV_LINESPACE_2:  aPnt.Y() += nH;     break;
135cdf0e10cSrcweir 
136cdf0e10cSrcweir                 case SVX_PREV_LINESPACE_PROP:
137cdf0e10cSrcweir                 case SVX_PREV_LINESPACE_MIN:
138cdf0e10cSrcweir                 case SVX_PREV_LINESPACE_DURCH:                  break;
139cdf0e10cSrcweir             }
140cdf0e10cSrcweir         }
141cdf0e10cSrcweir 
142cdf0e10cSrcweir         aPnt.Y() += nH;
143cdf0e10cSrcweir 
144cdf0e10cSrcweir         if ( (3 <= i) && (5 >= i) )
145cdf0e10cSrcweir         {
146cdf0e10cSrcweir             long nLW;
147cdf0e10cSrcweir             switch( i )
148cdf0e10cSrcweir             {
149cdf0e10cSrcweir                 default:
150cdf0e10cSrcweir                 case 3: nLW = aLineSiz.Width() * 8 / 10;    break;
151cdf0e10cSrcweir                 case 4: nLW = aLineSiz.Width() * 9 / 10;    break;
152cdf0e10cSrcweir                 case 5: nLW = aLineSiz.Width() / 2;         break;
153cdf0e10cSrcweir             }
154cdf0e10cSrcweir 
155cdf0e10cSrcweir             if ( nLW > aSiz.Width() )
156cdf0e10cSrcweir                 nLW = aSiz.Width();
157cdf0e10cSrcweir 
158cdf0e10cSrcweir             switch ( eAdjust )
159cdf0e10cSrcweir             {
160cdf0e10cSrcweir                 case SVX_ADJUST_LEFT:
161cdf0e10cSrcweir                     break;
162cdf0e10cSrcweir                 case SVX_ADJUST_RIGHT:
163cdf0e10cSrcweir                     aPnt.X() += ( aSiz.Width() - nLW );
164cdf0e10cSrcweir                     break;
165cdf0e10cSrcweir                 case SVX_ADJUST_CENTER:
166cdf0e10cSrcweir                     aPnt.X() += ( aSiz.Width() - nLW ) / 2;
167cdf0e10cSrcweir                     break;
168cdf0e10cSrcweir                 default: ; //prevent warning
169cdf0e10cSrcweir             }
170cdf0e10cSrcweir             if( SVX_ADJUST_BLOCK == eAdjust )
171cdf0e10cSrcweir             {
172cdf0e10cSrcweir                 if( 5 == i )
173cdf0e10cSrcweir                 {
174cdf0e10cSrcweir                     switch( eLastLine )
175cdf0e10cSrcweir                     {
176cdf0e10cSrcweir                         case SVX_ADJUST_LEFT:
177cdf0e10cSrcweir                             break;
178cdf0e10cSrcweir                         case SVX_ADJUST_RIGHT:
179cdf0e10cSrcweir                             aPnt.X() += ( aSiz.Width() - nLW );
180cdf0e10cSrcweir                             break;
181cdf0e10cSrcweir                         case SVX_ADJUST_CENTER:
182cdf0e10cSrcweir                             aPnt.X() += ( aSiz.Width() - nLW ) / 2;
183cdf0e10cSrcweir                             break;
184cdf0e10cSrcweir                         case SVX_ADJUST_BLOCK:
185cdf0e10cSrcweir                             nLW = aSiz.Width();
186cdf0e10cSrcweir                             break;
187cdf0e10cSrcweir                         default: ; //prevent warning
188cdf0e10cSrcweir                     }
189cdf0e10cSrcweir                 }
190cdf0e10cSrcweir                 else
191cdf0e10cSrcweir                     nLW = aSiz.Width();
192cdf0e10cSrcweir             }
193cdf0e10cSrcweir             aSiz.Width() = nLW;
194cdf0e10cSrcweir         }
195cdf0e10cSrcweir 
196cdf0e10cSrcweir         Rectangle aRect( aPnt, aSiz );
197cdf0e10cSrcweir 
198cdf0e10cSrcweir         if ( Lines[i] != aRect || bAll )
199cdf0e10cSrcweir         {
200cdf0e10cSrcweir             if ( !bAll )
201cdf0e10cSrcweir             {
202cdf0e10cSrcweir                 Color aFillCol = GetFillColor();
203cdf0e10cSrcweir                 SetFillColor( rWinColor );
204cdf0e10cSrcweir                 DrawRect( Lines[i] );
205cdf0e10cSrcweir                 SetFillColor( aFillCol );
206cdf0e10cSrcweir             }
207cdf0e10cSrcweir             DrawRect( aRect );
208cdf0e10cSrcweir             Lines[i] = aRect;
209cdf0e10cSrcweir         }
210cdf0e10cSrcweir 
211cdf0e10cSrcweir         if ( 5 == i )
212cdf0e10cSrcweir         {
213cdf0e10cSrcweir             long nBottom = nLower * aLineSiz.Height() / aSize.Height();
214cdf0e10cSrcweir             aPnt.Y() += nBottom * 2;
215cdf0e10cSrcweir         }
216cdf0e10cSrcweir 
217cdf0e10cSrcweir         aPnt.Y() += nH;
218cdf0e10cSrcweir         // wieder zuruecksetzen, fuer jede Linie neu berechnen
219cdf0e10cSrcweir         aPnt.X() = DEF_MARGIN / 2;
220cdf0e10cSrcweir         aSiz = aLineSiz;
221cdf0e10cSrcweir     }
222cdf0e10cSrcweir }
223cdf0e10cSrcweir 
224cdf0e10cSrcweir #undef DEF_MARGIN
225cdf0e10cSrcweir 
226cdf0e10cSrcweir // -----------------------------------------------------------------------
227cdf0e10cSrcweir 
OutputSizeChanged()228cdf0e10cSrcweir void SvxParaPrevWindow::OutputSizeChanged()
229cdf0e10cSrcweir {
230cdf0e10cSrcweir     aWinSize = GetOutputSizePixel();
231cdf0e10cSrcweir     aWinSize = PixelToLogic( aWinSize );
232cdf0e10cSrcweir     Invalidate();
233cdf0e10cSrcweir }
234