xref: /core/sw/source/ui/misc/pggrid.cxx (revision eaeabd78)
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  *   Licensed to the Apache Software Foundation (ASF) under one or more
12  *   contributor license agreements. See the NOTICE file distributed
13  *   with this work for additional information regarding copyright
14  *   ownership. The ASF licenses this file to you under the Apache
15  *   License, Version 2.0 (the "License"); you may not use this file
16  *   except in compliance with the License. You may obtain a copy of
17  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <cmdid.h>
21 #include <hintids.hxx>
22 #include <swtypes.hxx>
23 #include <svx/colorbox.hxx>
24 #include <editeng/sizeitem.hxx>
25 #include <editeng/lrspitem.hxx>
26 #include <editeng/ulspitem.hxx>
27 #include <editeng/boxitem.hxx>
28 #include <editeng/frmdiritem.hxx>
29 #include <svx/ruler.hxx>
30 #include <pggrid.hxx>
31 #include <tgrditem.hxx>
32 
33 #include <wrtsh.hxx>
34 #include <doc.hxx>
35 #include <swmodule.hxx>
36 #include <view.hxx>
37 
38 SwTextGridPage::SwTextGridPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet &rSet)
39     : SfxTabPage(pPage, pController, "modules/swriter/ui/textgridpage.ui", "TextGridPage", &rSet)
40     , m_nRubyUserValue(0)
41     , m_bRubyUserValue(false)
42     , m_aPageSize(MM50, MM50)
43     , m_bVertical(false)
44     , m_bSquaredMode(false)
45     , m_bHRulerChanged(false)
46     , m_bVRulerChanged(false)
47     , m_xNoGridRB(m_xBuilder->weld_radio_button("radioRB_NOGRID"))
48     , m_xLinesGridRB(m_xBuilder->weld_radio_button("radioRB_LINESGRID"))
49     , m_xCharsGridRB(m_xBuilder->weld_radio_button("radioRB_CHARSGRID"))
50     , m_xSnapToCharsCB(m_xBuilder->weld_check_button("checkCB_SNAPTOCHARS"))
51     , m_xExampleWN(new weld::CustomWeld(*m_xBuilder, "drawingareaWN_EXAMPLE", m_aExampleWN))
52     , m_xLayoutFL(m_xBuilder->weld_widget("frameFL_LAYOUT"))
53     , m_xLinesPerPageNF(m_xBuilder->weld_spin_button("spinNF_LINESPERPAGE"))
54     , m_xLinesRangeFT(m_xBuilder->weld_label("labelFT_LINERANGE"))
55     , m_xTextSizeMF(m_xBuilder->weld_metric_spin_button("spinMF_TEXTSIZE", FieldUnit::POINT))
56     , m_xCharsPerLineFT(m_xBuilder->weld_label("labelFT_CHARSPERLINE"))
57     , m_xCharsPerLineNF(m_xBuilder->weld_spin_button("spinNF_CHARSPERLINE"))
58     , m_xCharsRangeFT(m_xBuilder->weld_label("labelFT_CHARRANGE"))
59     , m_xCharWidthFT(m_xBuilder->weld_label("labelFT_CHARWIDTH"))
60     , m_xCharWidthMF(m_xBuilder->weld_metric_spin_button("spinMF_CHARWIDTH", FieldUnit::POINT))
61     , m_xRubySizeFT(m_xBuilder->weld_label("labelFT_RUBYSIZE"))
62     , m_xRubySizeMF(m_xBuilder->weld_metric_spin_button("spinMF_RUBYSIZE", FieldUnit::POINT))
63     , m_xRubyBelowCB(m_xBuilder->weld_check_button("checkCB_RUBYBELOW"))
64     , m_xDisplayFL(m_xBuilder->weld_widget("frameFL_DISPLAY"))
65     , m_xDisplayCB(m_xBuilder->weld_check_button("checkCB_DISPLAY"))
66     , m_xPrintCB(m_xBuilder->weld_check_button("checkCB_PRINT"))
67     , m_xColorLB(new ColorListBox(m_xBuilder->weld_menu_button("listLB_COLOR"), pController->getDialog()))
68 {
69     Link<weld::SpinButton&,void> aLink = LINK(this, SwTextGridPage, CharorLineChangedHdl);
70     m_xCharsPerLineNF->connect_value_changed(aLink);
71     m_xLinesPerPageNF->connect_value_changed(aLink);
72 
73     Link<weld::MetricSpinButton&,void> aSizeLink = LINK(this, SwTextGridPage, TextSizeChangedHdl);
74     m_xTextSizeMF->connect_value_changed(aSizeLink);
75     m_xRubySizeMF->connect_value_changed(aSizeLink);
76     m_xCharWidthMF->connect_value_changed(aSizeLink);
77 
78     Link<weld::ToggleButton&,void> aGridTypeHdl = LINK(this, SwTextGridPage, GridTypeHdl);
79     m_xNoGridRB->connect_toggled(aGridTypeHdl);
80     m_xLinesGridRB->connect_toggled(aGridTypeHdl);
81     m_xCharsGridRB->connect_toggled(aGridTypeHdl);
82 
83     m_xColorLB->SetSelectHdl(LINK(this, SwTextGridPage, ColorModifyHdl));
84     m_xPrintCB->connect_toggled(LINK(this, SwTextGridPage, GridModifyClickHdl));
85     m_xRubyBelowCB->connect_toggled(LINK(this, SwTextGridPage, GridModifyClickHdl));
86 
87     m_xDisplayCB->connect_toggled(LINK(this, SwTextGridPage, DisplayGridHdl));
88 
89     //Get the default paper mode
90     SwView *pView   = ::GetActiveView();
91     if( pView )
92     {
93         SwWrtShell* pSh = pView->GetWrtShellPtr();
94         if( pSh )
95         {
96             m_bSquaredMode = pSh->GetDoc()->IsSquaredPageMode();
97         }
98     }
99     if( m_bSquaredMode )
100     {
101 
102         m_xRubySizeFT->show();
103         m_xRubySizeMF->show();
104         m_xRubyBelowCB->show();
105         m_xSnapToCharsCB->hide();
106         m_xCharWidthFT->hide();
107         m_xCharWidthMF->hide();
108     }
109     else
110     {
111         m_xRubySizeFT->hide();
112         m_xRubySizeMF->hide();
113         m_xRubyBelowCB->hide();
114         m_xSnapToCharsCB->show();
115         m_xCharWidthFT->show();
116         m_xCharWidthMF->show();
117     }
118 }
119 
120 SwTextGridPage::~SwTextGridPage()
121 {
122     m_xColorLB.reset();
123 }
124 
125 std::unique_ptr<SfxTabPage> SwTextGridPage::Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet *rSet)
126 {
127     return std::make_unique<SwTextGridPage>(pPage, pController, *rSet);
128 }
129 
130 bool SwTextGridPage::FillItemSet(SfxItemSet *rSet)
131 {
132     bool bRet = false;
133     if (m_xNoGridRB->get_state_changed_from_saved() ||
134         m_xLinesGridRB->get_state_changed_from_saved() ||
135         m_xLinesPerPageNF->get_value_changed_from_saved() ||
136         m_xTextSizeMF->get_value_changed_from_saved() ||
137         m_xCharsPerLineNF->get_value_changed_from_saved() ||
138         m_xSnapToCharsCB->get_state_changed_from_saved() ||
139         m_xRubySizeMF->get_value_changed_from_saved() ||
140         m_xCharWidthMF->get_value_changed_from_saved() ||
141         m_xRubyBelowCB->get_state_changed_from_saved() ||
142         m_xDisplayCB->get_state_changed_from_saved() ||
143         m_xPrintCB->get_state_changed_from_saved() ||
144         m_xColorLB->IsValueChangedFromSaved())
145     {
146         PutGridItem(*rSet);
147         bRet = true;
148     }
149 
150     // draw ticks of ruler
151     SwView * pView = ::GetActiveView();
152     if ( m_bHRulerChanged )
153         pView->GetHRuler().DrawTicks();
154     if ( m_bVRulerChanged )
155         pView->GetVRuler().DrawTicks();
156     return bRet;
157 }
158 
159 void    SwTextGridPage::Reset(const SfxItemSet *rSet)
160 {
161     sal_Int32 nLinesPerPage = 0;
162 
163     if(SfxItemState::DEFAULT <= rSet->GetItemState(RES_TEXTGRID))
164     {
165         const SwTextGridItem& rGridItem = rSet->Get(RES_TEXTGRID);
166         weld::RadioButton* pButton = nullptr;
167         switch(rGridItem.GetGridType())
168         {
169             case GRID_NONE :        pButton = m_xNoGridRB.get();    break;
170             case GRID_LINES_ONLY  : pButton = m_xLinesGridRB.get(); break;
171             default:                pButton = m_xCharsGridRB.get();
172         }
173         pButton->set_active(true);
174         m_xDisplayCB->set_active(rGridItem.IsDisplayGrid());
175         GridTypeHdl(*pButton);
176         m_xSnapToCharsCB->set_active(rGridItem.IsSnapToChars());
177         nLinesPerPage = rGridItem.GetLines();
178 
179         SetLinesOrCharsRanges(*m_xLinesRangeFT , m_xLinesPerPageNF->get_max());
180         m_nRubyUserValue = rGridItem.GetBaseHeight();
181         m_bRubyUserValue = true;
182         m_xTextSizeMF->set_value(m_xTextSizeMF->normalize(m_nRubyUserValue), FieldUnit::TWIP);
183         m_xRubySizeMF->set_value(m_xRubySizeMF->normalize(rGridItem.GetRubyHeight()), FieldUnit::TWIP);
184         m_xCharWidthMF->set_value(m_xCharWidthMF->normalize(rGridItem.GetBaseWidth()), FieldUnit::TWIP);
185         m_xRubyBelowCB->set_active(rGridItem.IsRubyTextBelow());
186         m_xPrintCB->set_active(rGridItem.IsPrintGrid());
187         m_xColorLB->SelectEntry(rGridItem.GetColor());
188     }
189     UpdatePageSize(*rSet);
190 
191     if (nLinesPerPage > 0)
192         m_xLinesPerPageNF->set_value(nLinesPerPage);
193 
194     m_xNoGridRB->save_state();
195     m_xLinesGridRB->save_state();
196     m_xSnapToCharsCB->save_state();
197     m_xLinesPerPageNF->save_value();
198     m_xTextSizeMF->save_value();
199     m_xCharsPerLineNF->save_value();
200     m_xRubySizeMF->save_value();
201     m_xCharWidthMF->save_value();
202     m_xRubyBelowCB->save_state();
203     m_xDisplayCB->save_state();
204     m_xPrintCB->save_state();
205     m_xColorLB->SaveValue();
206 }
207 
208 void    SwTextGridPage::ActivatePage( const SfxItemSet& rSet )
209 {
210     m_aExampleWN.Hide();
211     m_aExampleWN.UpdateExample(rSet);
212     UpdatePageSize(rSet);
213     m_aExampleWN.Show();
214     m_aExampleWN.Invalidate();
215 }
216 
217 DeactivateRC SwTextGridPage::DeactivatePage( SfxItemSet* )
218 {
219     return DeactivateRC::LeavePage;
220 }
221 
222 void SwTextGridPage::PutGridItem(SfxItemSet& rSet)
223 {
224         SwTextGridItem aGridItem;
225         aGridItem.SetGridType(m_xNoGridRB->get_active() ? GRID_NONE :
226             m_xLinesGridRB->get_active() ? GRID_LINES_ONLY : GRID_LINES_CHARS );
227         aGridItem.SetSnapToChars(m_xSnapToCharsCB->get_active());
228         aGridItem.SetLines( static_cast< sal_uInt16 >(m_xLinesPerPageNF->get_value()) );
229         aGridItem.SetBaseHeight( static_cast< sal_uInt16 >(
230             m_bRubyUserValue ? m_nRubyUserValue :
231                 m_xTextSizeMF->denormalize(m_xTextSizeMF->get_value(FieldUnit::TWIP))) );
232         aGridItem.SetRubyHeight( static_cast< sal_uInt16 >(m_xRubySizeMF->denormalize(m_xRubySizeMF->get_value(FieldUnit::TWIP))) );
233         aGridItem.SetBaseWidth( static_cast< sal_uInt16 >(m_xCharWidthMF->denormalize(m_xCharWidthMF->get_value(FieldUnit::TWIP))) );
234         aGridItem.SetRubyTextBelow(m_xRubyBelowCB->get_active());
235         aGridItem.SetSquaredMode(m_bSquaredMode);
236         aGridItem.SetDisplayGrid(m_xDisplayCB->get_active());
237         aGridItem.SetPrintGrid(m_xPrintCB->get_active());
238         aGridItem.SetColor(m_xColorLB->GetSelectEntryColor());
239         rSet.Put(aGridItem);
240 
241         SwView * pView = ::GetActiveView();
242         if ( aGridItem.GetGridType() != GRID_NONE )
243         {
244             if ( aGridItem.GetGridType() == GRID_LINES_CHARS )
245             {
246                 m_bHRulerChanged = true;
247             }
248             m_bVRulerChanged = true;
249             pView->GetHRuler().SetCharWidth(static_cast<long>(m_xCharWidthMF->get_value(FieldUnit::TWIP)/56.7));
250             pView->GetVRuler().SetLineHeight(static_cast<long>(m_xTextSizeMF->get_value(FieldUnit::TWIP)/56.7));
251         }
252 }
253 
254 void SwTextGridPage::UpdatePageSize(const SfxItemSet& rSet)
255 {
256     if( SfxItemState::UNKNOWN !=  rSet.GetItemState( RES_FRAMEDIR ))
257     {
258         const SvxFrameDirectionItem& rDirItem =
259                     rSet.Get(RES_FRAMEDIR);
260         m_bVertical = rDirItem.GetValue() == SvxFrameDirection::Vertical_RL_TB||
261                     rDirItem.GetValue() == SvxFrameDirection::Vertical_LR_TB;
262     }
263 
264     if( SfxItemState::SET != rSet.GetItemState( SID_ATTR_PAGE_SIZE ))
265         return;
266 
267     const SvxSizeItem& rSize = rSet.Get(SID_ATTR_PAGE_SIZE);
268     const SvxLRSpaceItem& rLRSpace = rSet.Get( RES_LR_SPACE );
269     const SvxULSpaceItem& rULSpace = rSet.Get( RES_UL_SPACE );
270     const SvxBoxItem& rBox = rSet.Get(RES_BOX);
271     sal_Int32 nDistanceLR = rLRSpace.GetLeft() + rLRSpace.GetRight();
272     sal_Int32 nDistanceUL = rULSpace.GetUpper() + rULSpace.GetLower();
273 
274     sal_Int32 nValue1 = rSize.GetSize().Height() - nDistanceUL -
275             rBox.GetDistance(SvxBoxItemLine::TOP) -
276                                 rBox.GetDistance(SvxBoxItemLine::BOTTOM);
277     sal_Int32 nValue2 = rSize.GetSize().Width() - nDistanceLR -
278             rBox.GetDistance(SvxBoxItemLine::LEFT) -
279                                 rBox.GetDistance(SvxBoxItemLine::RIGHT);
280     if(m_bVertical)
281     {
282         m_aPageSize.setWidth( nValue1 );
283         m_aPageSize.setHeight( nValue2 );
284     }
285     else
286     {
287         m_aPageSize.setWidth( nValue2 );
288         m_aPageSize.setHeight( nValue1 );
289     }
290 
291     sal_Int32 nTextSize = static_cast< sal_Int32 >(m_bRubyUserValue ?
292                 m_nRubyUserValue :
293                     m_xTextSizeMF->denormalize(m_xTextSizeMF->get_value(FieldUnit::TWIP)));
294 
295     if ( m_bSquaredMode )
296     {
297         sal_Int32 nCharsPerLine = m_aPageSize.Width() / nTextSize;
298         m_xCharsPerLineNF->set_max(nCharsPerLine);
299         m_xCharsPerLineNF->set_value(nCharsPerLine);
300         m_xLinesPerPageNF->set_max(m_aPageSize.Height() /
301         (   m_xTextSizeMF->denormalize(m_xTextSizeMF->get_value(FieldUnit::TWIP)) +
302                     m_xRubySizeMF->denormalize(m_xRubySizeMF->get_value(FieldUnit::TWIP))));
303         SetLinesOrCharsRanges( *m_xCharsRangeFT , m_xCharsPerLineNF->get_max() );
304         SetLinesOrCharsRanges( *m_xLinesRangeFT , m_xLinesPerPageNF->get_max() );
305     }
306     else
307     {
308         sal_Int32 nTextWidth = static_cast< sal_Int32 >(m_xCharWidthMF->denormalize(m_xCharWidthMF->get_value(FieldUnit::TWIP)));
309         m_xLinesPerPageNF->set_value(m_aPageSize.Height() / nTextSize);
310         if (nTextWidth)
311             m_xCharsPerLineNF->set_value(m_aPageSize.Width() / nTextWidth);
312         else
313             m_xCharsPerLineNF->set_value(45);
314         SetLinesOrCharsRanges( *m_xCharsRangeFT , m_xCharsPerLineNF->get_max() );
315         SetLinesOrCharsRanges( *m_xLinesRangeFT , m_xLinesPerPageNF->get_max() );
316     }
317 }
318 
319 void SwTextGridPage::SetLinesOrCharsRanges(weld::Label& rField, const sal_Int32 nValue )
320 {
321     OUString aFieldStr = "( 1 -" + OUString::number(nValue) + " )";
322     rField.set_label(aFieldStr);
323 }
324 
325 const sal_uInt16* SwTextGridPage::GetRanges()
326 {
327     static const sal_uInt16 aPageRg[] = {
328         RES_TEXTGRID, RES_TEXTGRID,
329         0};
330     return aPageRg;
331 }
332 
333 IMPL_LINK(SwTextGridPage, CharorLineChangedHdl, weld::SpinButton&, rField, void)
334 {
335     //if in squared mode
336     if ( m_bSquaredMode )
337     {
338         if (m_xCharsPerLineNF.get() == &rField)
339         {
340             auto nValue = m_xCharsPerLineNF->get_value();
341             assert(nValue && "div-by-zero");
342             auto nWidth = m_aPageSize.Width() / nValue;
343             m_xTextSizeMF->set_value(m_xTextSizeMF->normalize(nWidth), FieldUnit::TWIP);
344             //prevent rounding errors in the MetricField by saving the used value
345             m_nRubyUserValue = nWidth;
346             m_bRubyUserValue = true;
347 
348         }
349         //set maximum line per page
350         {
351             sal_Int32 nMaxLines = static_cast< sal_Int32 >(m_aPageSize.Height() /
352                 (   m_xTextSizeMF->denormalize(m_xTextSizeMF->get_value(FieldUnit::TWIP)) +
353                     m_xRubySizeMF->denormalize(m_xRubySizeMF->get_value(FieldUnit::TWIP))));
354             m_xLinesPerPageNF->set_max(nMaxLines);
355         }
356         SetLinesOrCharsRanges( *m_xLinesRangeFT , m_xLinesPerPageNF->get_max() );
357         SetLinesOrCharsRanges( *m_xCharsRangeFT , m_xCharsPerLineNF->get_max() );
358     }
359     else//in normal mode
360     {
361         if (m_xLinesPerPageNF.get() == &rField)
362         {
363             auto nValue = m_xLinesPerPageNF->get_value();
364             assert(nValue && "div-by-zero");
365             auto nHeight = m_aPageSize.Height() / nValue;
366             m_xTextSizeMF->set_value(m_xTextSizeMF->normalize(nHeight), FieldUnit::TWIP);
367             m_xRubySizeMF->set_value(0, FieldUnit::TWIP);
368             SetLinesOrCharsRanges( *m_xLinesRangeFT , m_xLinesPerPageNF->get_max() );
369 
370             m_nRubyUserValue = nHeight;
371             m_bRubyUserValue = true;
372         }
373         else if (m_xCharsPerLineNF.get() == &rField)
374         {
375             auto nValue = m_xCharsPerLineNF->get_value();
376             assert(nValue && "div-by-zero");
377             auto nWidth = m_aPageSize.Width() / nValue;
378             m_xCharWidthMF->set_value(m_xCharWidthMF->normalize(nWidth), FieldUnit::TWIP);
379             SetLinesOrCharsRanges( *m_xCharsRangeFT , m_xCharsPerLineNF->get_max() );
380         }
381     }
382     GridModifyHdl();
383 }
384 
385 IMPL_LINK(SwTextGridPage, TextSizeChangedHdl, weld::MetricSpinButton&, rField, void)
386 {
387     //if in squared mode
388     if( m_bSquaredMode )
389     {
390         if (m_xTextSizeMF.get() == &rField)
391         {
392             m_bRubyUserValue = false;
393 
394             // fdo#50941: set maximum characters per line
395             sal_Int32 nTextSize = static_cast< sal_Int32 >(m_xTextSizeMF->denormalize(m_xTextSizeMF->get_value(FieldUnit::TWIP)));
396             if (nTextSize > 0)
397             {
398                 sal_Int32 nMaxChars = m_aPageSize.Width() / nTextSize;
399                 m_xCharsPerLineNF->set_value(nMaxChars);
400                 m_xCharsPerLineNF->set_max(nMaxChars);
401                 SetLinesOrCharsRanges( *m_xCharsRangeFT , m_xCharsPerLineNF->get_max() );
402             }
403         }
404         //set maximum line per page
405         {
406             sal_Int32 nMaxLines = static_cast< sal_Int32 >(m_aPageSize.Height() /
407                 (   m_xTextSizeMF->denormalize(m_xTextSizeMF->get_value(FieldUnit::TWIP)) +
408                     m_xRubySizeMF->denormalize(m_xRubySizeMF->get_value(FieldUnit::TWIP))));
409             m_xLinesPerPageNF->set_max(nMaxLines);
410             SetLinesOrCharsRanges( *m_xLinesRangeFT , m_xLinesPerPageNF->get_max() );
411         }
412     }
413     else
414     {
415         if (m_xTextSizeMF.get() == &rField)
416         {
417             sal_Int32 nTextSize = static_cast< sal_Int32 >(m_xTextSizeMF->denormalize(m_xTextSizeMF->get_value(FieldUnit::TWIP)));
418             m_xLinesPerPageNF->set_value(m_aPageSize.Height() / nTextSize);
419             m_bRubyUserValue = false;
420             SetLinesOrCharsRanges( *m_xLinesRangeFT , m_xLinesPerPageNF->get_max() );
421         }
422         else if (m_xCharWidthMF.get() == &rField)
423         {
424             sal_Int32 nTextWidth = static_cast< sal_Int32 >(m_xCharWidthMF->denormalize(m_xCharWidthMF->get_value(FieldUnit::TWIP)));
425             sal_Int32 nMaxChar = 45 ;
426             if (nTextWidth)
427                 nMaxChar = m_aPageSize.Width() / nTextWidth;
428             m_xCharsPerLineNF->set_value( nMaxChar );
429             SetLinesOrCharsRanges( *m_xCharsRangeFT , m_xCharsPerLineNF->get_max() );
430         }
431         //rubySize is disabled
432     }
433     GridModifyHdl();
434 }
435 
436 IMPL_LINK(SwTextGridPage, GridTypeHdl, weld::ToggleButton&, rButton, void)
437 {
438     bool bEnable = m_xNoGridRB.get() != &rButton;
439     m_xLayoutFL->set_sensitive(bEnable);
440     m_xDisplayFL->set_sensitive(bEnable);
441 
442     //one special case
443     if (bEnable)
444         DisplayGridHdl(*m_xDisplayCB);
445 
446     bEnable = m_xCharsGridRB.get() == &rButton;
447     m_xSnapToCharsCB->set_sensitive(bEnable);
448 
449     bEnable = m_xLinesGridRB.get() == &rButton;
450     if (bEnable && !m_bSquaredMode)
451     {
452         m_xCharsPerLineFT->set_sensitive(false);
453         m_xCharsPerLineNF->set_sensitive(false);
454         m_xCharsRangeFT->set_sensitive(false);
455         m_xCharWidthFT->set_sensitive(false);
456         m_xCharWidthMF->set_sensitive(false);
457     }
458 
459     GridModifyHdl();
460 }
461 
462 IMPL_LINK_NOARG(SwTextGridPage, DisplayGridHdl, weld::ToggleButton&, void)
463 {
464     bool bChecked = m_xDisplayCB->get_active();
465     m_xPrintCB->set_sensitive(bChecked);
466     m_xPrintCB->set_active(bChecked);
467 }
468 
469 IMPL_LINK_NOARG(SwTextGridPage, GridModifyClickHdl, weld::ToggleButton&, void)
470 {
471     GridModifyHdl();
472 }
473 
474 IMPL_LINK_NOARG(SwTextGridPage, ColorModifyHdl, ColorListBox&, void)
475 {
476     GridModifyHdl();
477 }
478 
479 void SwTextGridPage::GridModifyHdl()
480 {
481     const SfxItemSet& rOldSet = GetItemSet();
482     SfxItemSet aSet(rOldSet);
483     const SfxItemSet* pExSet = GetDialogExampleSet();
484     if(pExSet)
485         aSet.Put(*pExSet);
486     PutGridItem(aSet);
487     m_aExampleWN.UpdateExample(aSet);
488 }
489 
490 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
491