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