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