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