Line data Source code
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 <sfx2/app.hxx>
21 :
22 : #include <cmdid.h>
23 : #include <hintids.hxx>
24 : #include <swtypes.hxx>
25 : #include <globals.hrc>
26 : #include <svx/xtable.hxx>
27 : #include <uitool.hxx>
28 : #include <editeng/sizeitem.hxx>
29 : #include <editeng/lrspitem.hxx>
30 : #include <editeng/ulspitem.hxx>
31 : #include <editeng/boxitem.hxx>
32 : #include <editeng/frmdiritem.hxx>
33 : #include <svx/ruler.hxx>
34 : #include <pggrid.hxx>
35 : #include <tgrditem.hxx>
36 : #include <pggrid.hrc>
37 :
38 : #include "wrtsh.hxx"
39 : #include "doc.hxx"
40 : #include "uiitems.hxx"
41 : #include "swmodule.hxx"
42 : #include "view.hxx"
43 :
44 0 : SwTextGridPage::SwTextGridPage(Window *pParent, const SfxItemSet &rSet) :
45 : SfxTabPage(pParent, SW_RES(TP_TEXTGRID_PAGE), rSet),
46 : aGridTypeFL (this, SW_RES(FL_GRID_TYPE )),
47 : aNoGridRB (this, SW_RES(RB_NOGRID )),
48 : aLinesGridRB (this, SW_RES(RB_LINESGRID )),
49 : aCharsGridRB (this, SW_RES(RB_CHARSGRID )),
50 : aSnapToCharsCB (this, SW_RES(CB_SNAPTOCHARS )),
51 : aExampleWN (this, SW_RES(WN_EXAMPLE )),
52 : aLayoutFL (this, SW_RES(FL_LAYOUT )),
53 : aLinesPerPageFT (this, SW_RES(FT_LINESPERPAGE )),
54 : aLinesPerPageNF (this, SW_RES(NF_LINESPERPAGE )),
55 : aLinesRangeFT (this, SW_RES(FT_LINERANGE )),
56 : aTextSizeFT (this, SW_RES(FT_TEXTSIZE )),
57 : aTextSizeMF (this, SW_RES(MF_TEXTSIZE )),
58 : aCharsPerLineFT (this, SW_RES(FT_CHARSPERLINE )),
59 : aCharsPerLineNF (this, SW_RES(NF_CHARSPERLINE )),
60 : aCharsRangeFT (this, SW_RES(FT_CHARRANGE )),
61 : aCharWidthFT (this, SW_RES(FT_CHARWIDTH )),
62 : aCharWidthMF (this, SW_RES(MF_CHARWIDTH )),
63 : aRubySizeFT (this, SW_RES(FT_RUBYSIZE )),
64 : aRubySizeMF (this, SW_RES(MF_RUBYSIZE )),
65 : aRubyBelowCB (this, SW_RES(CB_RUBYBELOW )),
66 : aDisplayFL (this, SW_RES(FL_DISPLAY )),
67 : aDisplayCB (this, SW_RES(CB_DISPLAY )),
68 : aPrintCB (this, SW_RES(CB_PRINT )),
69 : aColorFT (this, SW_RES(FT_COLOR )),
70 : aColorLB (this, SW_RES(LB_COLOR )),
71 : m_nRubyUserValue(0),
72 : m_bRubyUserValue(sal_False),
73 : m_aPageSize(MM50, MM50),
74 : m_bVertical(sal_False),
75 : m_bSquaredMode(sal_False),
76 : m_bHRulerChanged( sal_False ),
77 0 : m_bVRulerChanged( sal_False )
78 : {
79 0 : FreeResource();
80 :
81 0 : aControls[0] =&aLayoutFL;
82 0 : aControls[1] =&aLinesPerPageFT;
83 0 : aControls[2] =&aLinesPerPageNF;
84 0 : aControls[3] =&aTextSizeFT;
85 0 : aControls[4] =&aTextSizeMF;
86 0 : aControls[5] =&aCharsPerLineFT;
87 0 : aControls[6] =&aCharsPerLineNF;
88 0 : aControls[7] =&aCharWidthFT;
89 0 : aControls[8] =&aCharWidthMF;
90 0 : aControls[9] =&aRubySizeFT;
91 0 : aControls[10] =&aRubySizeMF;
92 0 : aControls[11] =&aRubyBelowCB;
93 0 : aControls[12] =&aDisplayFL;
94 0 : aControls[13] =&aDisplayCB;
95 0 : aControls[14] =&aPrintCB;
96 0 : aControls[15] =&aColorFT;
97 0 : aControls[16] =&aColorLB;
98 0 : aControls[17] =&aLinesRangeFT;
99 0 : aControls[18] =&aCharsRangeFT;
100 0 : aControls[19] =0;
101 :
102 0 : Link aLink = LINK(this, SwTextGridPage, CharorLineChangedHdl);
103 0 : aCharsPerLineNF.SetUpHdl(aLink);
104 0 : aCharsPerLineNF.SetDownHdl(aLink);
105 0 : aCharsPerLineNF.SetLoseFocusHdl(aLink);
106 0 : aLinesPerPageNF.SetUpHdl(aLink);
107 0 : aLinesPerPageNF.SetDownHdl(aLink);
108 0 : aLinesPerPageNF.SetLoseFocusHdl(aLink);
109 :
110 0 : Link aSizeLink = LINK(this, SwTextGridPage, TextSizeChangedHdl);
111 0 : aTextSizeMF.SetUpHdl(aSizeLink);
112 0 : aTextSizeMF.SetDownHdl(aSizeLink);
113 0 : aTextSizeMF.SetLoseFocusHdl(aSizeLink);
114 0 : aRubySizeMF.SetUpHdl(aSizeLink);
115 0 : aRubySizeMF.SetDownHdl(aSizeLink);
116 0 : aRubySizeMF.SetLoseFocusHdl(aSizeLink);
117 0 : aCharWidthMF.SetUpHdl(aSizeLink);
118 0 : aCharWidthMF.SetDownHdl(aSizeLink);
119 0 : aCharWidthMF.SetLoseFocusHdl(aSizeLink);
120 :
121 0 : Link aGridTypeHdl = LINK(this, SwTextGridPage, GridTypeHdl);
122 0 : aNoGridRB .SetClickHdl(aGridTypeHdl);
123 0 : aLinesGridRB.SetClickHdl(aGridTypeHdl);
124 0 : aCharsGridRB.SetClickHdl(aGridTypeHdl);
125 :
126 0 : Link aModifyLk = LINK(this, SwTextGridPage, GridModifyHdl);
127 0 : aColorLB.SetSelectHdl(aModifyLk);
128 0 : aPrintCB.SetClickHdl(aModifyLk);
129 0 : aRubyBelowCB.SetClickHdl(aModifyLk);
130 :
131 0 : aDisplayCB.SetClickHdl(LINK(this, SwTextGridPage, DisplayGridHdl));
132 :
133 0 : XColorListRef pColorLst = XColorList::GetStdColorList();
134 0 : aColorLB.InsertAutomaticEntryColor( Color( COL_AUTO ) );
135 0 : for( sal_uInt16 i = 0; i < pColorLst->Count(); ++i )
136 : {
137 0 : XColorEntry* pEntry = pColorLst->GetColor( i );
138 0 : Color aColor = pEntry->GetColor();
139 0 : String sName = pEntry->GetName();
140 0 : aColorLB.InsertEntry( aColor, sName );
141 0 : }
142 0 : aColorLB.SetUpdateMode( sal_True );
143 : //Get the default paper mode
144 0 : SwView *pView = ::GetActiveView();
145 0 : if( pView )
146 : {
147 0 : SwWrtShell* pSh = pView->GetWrtShellPtr();
148 0 : if( pSh )
149 : {
150 0 : m_bSquaredMode = pSh->GetDoc()->IsSquaredPageMode();
151 : }
152 : }
153 0 : if( m_bSquaredMode )
154 : {
155 0 : aRubySizeFT.Show();
156 0 : aRubySizeMF.Show();
157 0 : aRubyBelowCB.Show();
158 0 : aSnapToCharsCB.Hide();
159 0 : aCharWidthFT.Hide();
160 0 : aCharWidthMF.Hide();
161 : }
162 : else
163 : {
164 0 : aRubySizeFT.Hide();
165 0 : aRubySizeMF.Hide();
166 0 : aRubyBelowCB.Hide();
167 0 : aSnapToCharsCB.Show();
168 0 : aCharWidthFT.Show();
169 0 : aCharWidthMF.Show();
170 0 : }
171 0 : }
172 :
173 0 : SwTextGridPage::~SwTextGridPage()
174 : {
175 0 : }
176 :
177 0 : SfxTabPage *SwTextGridPage::Create(Window *pParent, const SfxItemSet &rSet)
178 : {
179 0 : return new SwTextGridPage(pParent, rSet);
180 : }
181 :
182 0 : sal_Bool SwTextGridPage::FillItemSet(SfxItemSet &rSet)
183 : {
184 0 : sal_Bool bRet = sal_False;
185 0 : if(aNoGridRB.GetSavedValue() != aNoGridRB.IsChecked()||
186 0 : aLinesGridRB.GetSavedValue() != aLinesGridRB.IsChecked()||
187 0 : aLinesPerPageNF.GetSavedValue().ToInt32()
188 0 : != aLinesPerPageNF.GetValue()||
189 0 : aTextSizeMF.GetSavedValue().ToInt32() != aTextSizeMF.GetValue()||
190 0 : aCharsPerLineNF.GetSavedValue().ToInt32()
191 0 : != aCharsPerLineNF.GetValue()||
192 0 : aSnapToCharsCB.GetSavedValue() != aSnapToCharsCB.IsChecked() ||
193 0 : aRubySizeMF.GetSavedValue().ToInt32() != aRubySizeMF.GetValue()||
194 0 : aCharWidthMF.GetSavedValue().ToInt32() != aCharWidthMF.GetValue()||
195 0 : aRubyBelowCB.GetSavedValue() != aRubyBelowCB.IsChecked()||
196 0 : aDisplayCB.GetSavedValue() != aDisplayCB.IsChecked()||
197 0 : aPrintCB.GetSavedValue() != aPrintCB.IsChecked()||
198 0 : aColorLB.GetSavedValue() != aColorLB.GetSelectEntryPos())
199 : {
200 0 : PutGridItem(rSet);
201 0 : bRet = sal_True;
202 : }
203 :
204 : // draw ticks of ruler
205 0 : SwView * pView = ::GetActiveView();
206 0 : if ( m_bHRulerChanged )
207 0 : pView->GetHLineal().DrawTicks();
208 0 : if ( m_bVRulerChanged )
209 0 : pView->GetVLineal().DrawTicks();
210 0 : return bRet;
211 : }
212 :
213 0 : void SwTextGridPage::Reset(const SfxItemSet &rSet)
214 : {
215 0 : if(SFX_ITEM_AVAILABLE <= rSet.GetItemState(RES_TEXTGRID, sal_True))
216 : {
217 0 : const SwTextGridItem& rGridItem = (const SwTextGridItem&)rSet.Get(RES_TEXTGRID);
218 0 : RadioButton* pButton = 0;
219 0 : switch(rGridItem.GetGridType())
220 : {
221 0 : case GRID_NONE : pButton = &aNoGridRB; break;
222 0 : case GRID_LINES_ONLY : pButton = &aLinesGridRB; break;
223 0 : default: pButton = &aCharsGridRB;
224 : }
225 0 : pButton->Check();
226 0 : aDisplayCB.Check(rGridItem.IsDisplayGrid());
227 0 : GridTypeHdl(pButton);
228 0 : aSnapToCharsCB.Check(rGridItem.IsSnapToChars());
229 0 : aLinesPerPageNF.SetValue(rGridItem.GetLines());
230 0 : SetLinesOrCharsRanges( aLinesRangeFT , aLinesPerPageNF.GetMax() );
231 0 : m_nRubyUserValue = rGridItem.GetBaseHeight();
232 0 : m_bRubyUserValue = sal_True;
233 0 : aTextSizeMF.SetValue(aTextSizeMF.Normalize(m_nRubyUserValue), FUNIT_TWIP);
234 0 : aRubySizeMF.SetValue(aRubySizeMF.Normalize(rGridItem.GetRubyHeight()), FUNIT_TWIP);
235 0 : aCharWidthMF.SetValue(aCharWidthMF.Normalize(rGridItem.GetBaseWidth()), FUNIT_TWIP);
236 0 : aRubyBelowCB.Check(rGridItem.IsRubyTextBelow());
237 0 : aPrintCB.Check(rGridItem.IsPrintGrid());
238 0 : aColorLB.SelectEntry(rGridItem.GetColor());
239 : }
240 0 : UpdatePageSize(rSet);
241 :
242 0 : aNoGridRB.SaveValue();
243 0 : aLinesGridRB.SaveValue();
244 0 : aSnapToCharsCB.SaveValue();
245 0 : aLinesPerPageNF.SaveValue();
246 0 : aTextSizeMF.SaveValue();
247 0 : aCharsPerLineNF.SaveValue();
248 0 : aRubySizeMF.SaveValue();
249 0 : aCharWidthMF.SaveValue();
250 0 : aRubyBelowCB.SaveValue();
251 0 : aDisplayCB.SaveValue();
252 0 : aPrintCB.SaveValue();
253 0 : aColorLB.SaveValue();
254 0 : }
255 :
256 0 : void SwTextGridPage::ActivatePage( const SfxItemSet& rSet )
257 : {
258 0 : aExampleWN.Hide();
259 0 : aExampleWN.UpdateExample( rSet );
260 0 : UpdatePageSize(rSet);
261 0 : aExampleWN.Show();
262 0 : aExampleWN.Invalidate();
263 0 : }
264 :
265 0 : int SwTextGridPage::DeactivatePage( SfxItemSet* )
266 : {
267 0 : return LEAVE_PAGE;
268 : }
269 :
270 0 : void SwTextGridPage::PutGridItem(SfxItemSet& rSet)
271 : {
272 0 : SwTextGridItem aGridItem;
273 0 : aGridItem.SetGridType(aNoGridRB.IsChecked() ? GRID_NONE :
274 0 : aLinesGridRB.IsChecked() ? GRID_LINES_ONLY : GRID_LINES_CHARS );
275 0 : aGridItem.SetSnapToChars(aSnapToCharsCB.IsChecked());
276 0 : aGridItem.SetLines( static_cast< sal_uInt16 >(aLinesPerPageNF.GetValue()) );
277 : aGridItem.SetBaseHeight( static_cast< sal_uInt16 >(
278 : m_bRubyUserValue ? m_nRubyUserValue :
279 0 : aTextSizeMF.Denormalize(aTextSizeMF.GetValue(FUNIT_TWIP))) );
280 0 : aGridItem.SetRubyHeight( static_cast< sal_uInt16 >(aRubySizeMF.Denormalize(aRubySizeMF.GetValue(FUNIT_TWIP))) );
281 0 : aGridItem.SetBaseWidth( static_cast< sal_uInt16 >(aCharWidthMF.Denormalize(aCharWidthMF.GetValue(FUNIT_TWIP))) );
282 0 : aGridItem.SetRubyTextBelow(aRubyBelowCB.IsChecked());
283 0 : aGridItem.SetSquaredMode(m_bSquaredMode);
284 0 : aGridItem.SetDisplayGrid(aDisplayCB.IsChecked());
285 0 : aGridItem.SetPrintGrid(aPrintCB.IsChecked());
286 0 : aGridItem.SetColor(aColorLB.GetSelectEntryColor());
287 0 : rSet.Put(aGridItem);
288 :
289 0 : SwView * pView = ::GetActiveView();
290 0 : if ( aGridItem.GetGridType() != GRID_NONE )
291 : {
292 0 : if ( aGridItem.GetGridType() == GRID_LINES_CHARS )
293 : {
294 0 : m_bHRulerChanged = sal_True;
295 : }
296 0 : m_bVRulerChanged = sal_True;
297 0 : pView->GetHLineal().SetCharWidth((long)(aCharWidthMF.GetValue(FUNIT_TWIP)/56.7));
298 0 : pView->GetVLineal().SetLineHeight((long)(aTextSizeMF.GetValue(FUNIT_TWIP)/56.7));
299 0 : }
300 0 : }
301 :
302 0 : void SwTextGridPage::UpdatePageSize(const SfxItemSet& rSet)
303 : {
304 0 : if( SFX_ITEM_UNKNOWN != rSet.GetItemState( RES_FRAMEDIR, sal_True ))
305 : {
306 : const SvxFrameDirectionItem& rDirItem =
307 0 : (const SvxFrameDirectionItem&)rSet.Get(RES_FRAMEDIR);
308 0 : m_bVertical = rDirItem.GetValue() == FRMDIR_VERT_TOP_RIGHT||
309 0 : rDirItem.GetValue() == FRMDIR_VERT_TOP_LEFT;
310 : }
311 :
312 0 : if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PAGE_SIZE ))
313 : {
314 : const SvxSizeItem& rSize = (const SvxSizeItem&)rSet.Get(
315 0 : SID_ATTR_PAGE_SIZE);
316 : const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)rSet.Get(
317 0 : RES_LR_SPACE );
318 : const SvxULSpaceItem& rULSpace = (const SvxULSpaceItem&)rSet.Get(
319 0 : RES_UL_SPACE );
320 0 : const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
321 0 : sal_Int32 nDistanceLR = rLRSpace.GetLeft() + rLRSpace.GetRight();
322 0 : sal_Int32 nDistanceUL = rULSpace.GetUpper() + rULSpace.GetLower();
323 :
324 0 : sal_Int32 nValue1 = rSize.GetSize().Height() - nDistanceUL -
325 0 : rBox.GetDistance(BOX_LINE_TOP) -
326 0 : rBox.GetDistance(BOX_LINE_BOTTOM);
327 0 : sal_Int32 nValue2 = rSize.GetSize().Width() - nDistanceLR -
328 0 : rBox.GetDistance(BOX_LINE_LEFT) -
329 0 : rBox.GetDistance(BOX_LINE_RIGHT);
330 0 : if(m_bVertical)
331 : {
332 0 : m_aPageSize.Width() = nValue1;
333 0 : m_aPageSize.Height() = nValue2;
334 : }
335 : else
336 : {
337 0 : m_aPageSize.Width() = nValue2;
338 0 : m_aPageSize.Height() = nValue1;
339 : }
340 :
341 : sal_Int32 nTextSize = static_cast< sal_Int32 >(m_bRubyUserValue ?
342 : m_nRubyUserValue :
343 0 : aTextSizeMF.Denormalize(aTextSizeMF.GetValue(FUNIT_TWIP)));
344 :
345 0 : if ( m_bSquaredMode )
346 : {
347 0 : aCharsPerLineNF.SetValue(m_aPageSize.Width() / nTextSize);
348 0 : aCharsPerLineNF.SetMax( aCharsPerLineNF.GetValue() );
349 0 : aLinesPerPageNF.SetMax( m_aPageSize.Height() /
350 0 : ( aTextSizeMF.Denormalize(aTextSizeMF.GetValue(FUNIT_TWIP)) +
351 0 : aRubySizeMF.Denormalize(aRubySizeMF.GetValue(FUNIT_TWIP))));
352 0 : SetLinesOrCharsRanges( aCharsRangeFT , aCharsPerLineNF.GetMax() );
353 0 : SetLinesOrCharsRanges( aLinesRangeFT , aLinesPerPageNF.GetMax() );
354 : }
355 : else
356 : {
357 0 : sal_Int32 nTextWidth = static_cast< sal_Int32 >(aCharWidthMF.Denormalize(aCharWidthMF.GetValue(FUNIT_TWIP)));
358 0 : aLinesPerPageNF.SetValue(m_aPageSize.Height() / nTextSize);
359 0 : if (nTextWidth)
360 0 : aCharsPerLineNF.SetValue(m_aPageSize.Width() / nTextWidth);
361 : else
362 0 : aCharsPerLineNF.SetValue( 45 );
363 0 : SetLinesOrCharsRanges( aCharsRangeFT , aCharsPerLineNF.GetMax() );
364 0 : SetLinesOrCharsRanges( aLinesRangeFT , aLinesPerPageNF.GetMax() );
365 : }
366 : }
367 0 : }
368 :
369 0 : void SwTextGridPage::SetLinesOrCharsRanges(FixedText & rField, const sal_Int32 nValue )
370 : {
371 0 : String aFieldStr = rtl::OUString("( 1 -");
372 0 : aFieldStr += rtl::OUString::valueOf(nValue);
373 0 : aFieldStr += rtl::OUString(" )");
374 0 : rField.SetText( aFieldStr );
375 0 : }
376 :
377 0 : sal_uInt16* SwTextGridPage::GetRanges()
378 : {
379 : static sal_uInt16 aPageRg[] = {
380 : RES_TEXTGRID, RES_TEXTGRID,
381 : 0};
382 0 : return aPageRg;
383 : }
384 :
385 0 : IMPL_LINK(SwTextGridPage, CharorLineChangedHdl, SpinField*, pField)
386 : {
387 : //if in squared mode
388 0 : if ( m_bSquaredMode )
389 : {
390 0 : if(&aCharsPerLineNF == pField)
391 : {
392 0 : long nWidth = (long)(m_aPageSize.Width() / aCharsPerLineNF.GetValue());
393 0 : aTextSizeMF.SetValue(aTextSizeMF.Normalize(nWidth), FUNIT_TWIP);
394 : //prevent rounding errors in the MetricField by saving the used value
395 0 : m_nRubyUserValue = nWidth;
396 0 : m_bRubyUserValue = sal_True;
397 :
398 : }
399 : //set maximum line per page
400 : {
401 0 : sal_Int32 nMaxLines = static_cast< sal_Int32 >(m_aPageSize.Height() /
402 0 : ( aTextSizeMF.Denormalize(aTextSizeMF.GetValue(FUNIT_TWIP)) +
403 0 : aRubySizeMF.Denormalize(aRubySizeMF.GetValue(FUNIT_TWIP))));
404 0 : aLinesPerPageNF.SetMax(nMaxLines);
405 : }
406 0 : SetLinesOrCharsRanges( aLinesRangeFT , aLinesPerPageNF.GetMax() );
407 0 : SetLinesOrCharsRanges( aCharsRangeFT , aCharsPerLineNF.GetMax() );
408 : }
409 : else//in normal mode
410 : {
411 0 : if(&aLinesPerPageNF == pField)
412 : {
413 0 : long nHeight = static_cast< sal_Int32 >(m_aPageSize.Height() / aLinesPerPageNF.GetValue());
414 0 : aTextSizeMF.SetValue(aTextSizeMF.Normalize(nHeight), FUNIT_TWIP);
415 0 : aRubySizeMF.SetValue(0, FUNIT_TWIP);
416 0 : SetLinesOrCharsRanges( aLinesRangeFT , aLinesPerPageNF.GetMax() );
417 :
418 0 : m_nRubyUserValue = nHeight;
419 0 : m_bRubyUserValue = sal_True;
420 : }
421 0 : else if (&aCharsPerLineNF == pField)
422 : {
423 0 : long nWidth = static_cast< sal_Int32 >(m_aPageSize.Width() / aCharsPerLineNF.GetValue());
424 0 : aCharWidthMF.SetValue(aCharWidthMF.Normalize(nWidth), FUNIT_TWIP);
425 0 : SetLinesOrCharsRanges( aCharsRangeFT , aCharsPerLineNF.GetMax() );
426 : }
427 : }
428 0 : GridModifyHdl(0);
429 0 : return 0;
430 : }
431 :
432 0 : IMPL_LINK(SwTextGridPage, TextSizeChangedHdl, SpinField*, pField)
433 : {
434 : //if in squared mode
435 0 : if( m_bSquaredMode )
436 : {
437 0 : if (&aTextSizeMF == pField)
438 : {
439 0 : m_bRubyUserValue = sal_False;
440 :
441 : // fdo#50941: set maximum characters per line
442 0 : sal_Int32 nTextSize = static_cast< sal_Int32 >(aTextSizeMF.Denormalize(aTextSizeMF.GetValue(FUNIT_TWIP)));
443 0 : if (nTextSize > 0)
444 : {
445 0 : sal_Int32 nMaxChars = m_aPageSize.Width() / nTextSize;
446 0 : aCharsPerLineNF.SetValue(nMaxChars);
447 0 : aCharsPerLineNF.SetMax(nMaxChars);
448 0 : SetLinesOrCharsRanges( aCharsRangeFT , aCharsPerLineNF.GetMax() );
449 : }
450 : }
451 : //set maximum line per page
452 : {
453 0 : sal_Int32 nMaxLines = static_cast< sal_Int32 >(m_aPageSize.Height() /
454 0 : ( aTextSizeMF.Denormalize(aTextSizeMF.GetValue(FUNIT_TWIP)) +
455 0 : aRubySizeMF.Denormalize(aRubySizeMF.GetValue(FUNIT_TWIP))));
456 0 : aLinesPerPageNF.SetMax(nMaxLines);
457 0 : SetLinesOrCharsRanges( aLinesRangeFT , aLinesPerPageNF.GetMax() );
458 : }
459 : }
460 : else
461 : {
462 0 : if (&aTextSizeMF == pField)
463 : {
464 0 : sal_Int32 nTextSize = static_cast< sal_Int32 >(aTextSizeMF.Denormalize(aTextSizeMF.GetValue(FUNIT_TWIP)));
465 0 : aLinesPerPageNF.SetValue(m_aPageSize.Height() / nTextSize);
466 0 : m_bRubyUserValue = sal_False;
467 0 : SetLinesOrCharsRanges( aLinesRangeFT , aLinesPerPageNF.GetMax() );
468 : }
469 0 : else if (&aCharWidthMF == pField)
470 : {
471 0 : sal_Int32 nTextWidth = static_cast< sal_Int32 >(aCharWidthMF.Denormalize(aCharWidthMF.GetValue(FUNIT_TWIP)));
472 0 : sal_Int32 nMaxChar = 45 ;
473 0 : if (nTextWidth)
474 0 : nMaxChar = m_aPageSize.Width() / nTextWidth;
475 0 : aCharsPerLineNF.SetValue( nMaxChar );
476 0 : SetLinesOrCharsRanges( aCharsRangeFT , aCharsPerLineNF.GetMax() );
477 : }
478 : //rubySize is disabled
479 : }
480 0 : GridModifyHdl(0);
481 0 : return 0;
482 : }
483 :
484 0 : IMPL_LINK(SwTextGridPage, GridTypeHdl, RadioButton*, pButton)
485 : {
486 0 : sal_Bool bEnable = &aNoGridRB != pButton;
487 0 : sal_Int32 nIndex = 0;
488 0 : while(aControls[nIndex])
489 0 : aControls[nIndex++]->Enable(bEnable);
490 : //one special case
491 0 : if(bEnable)
492 0 : DisplayGridHdl(&aDisplayCB);
493 :
494 0 : bEnable = &aCharsGridRB == pButton;
495 0 : aSnapToCharsCB.Enable(bEnable);
496 :
497 0 : bEnable = &aLinesGridRB == pButton;
498 0 : if(bEnable && !m_bSquaredMode )
499 : {
500 0 : aCharsPerLineFT.Enable(sal_False);
501 0 : aCharsPerLineNF.Enable(sal_False);
502 0 : aCharsRangeFT.Enable(sal_False);
503 0 : aCharWidthFT.Enable(sal_False);
504 0 : aCharWidthMF.Enable(sal_False);
505 : }
506 :
507 0 : GridModifyHdl(0);
508 0 : return 0;
509 : }
510 :
511 0 : IMPL_LINK_NOARG(SwTextGridPage, DisplayGridHdl)
512 : {
513 0 : sal_Bool bChecked = aDisplayCB.IsChecked();
514 0 : aPrintCB.Enable(bChecked);
515 0 : aPrintCB.Check(bChecked);
516 0 : return 0;
517 : }
518 :
519 0 : IMPL_LINK_NOARG(SwTextGridPage, GridModifyHdl)
520 : {
521 0 : const SfxItemSet& rOldSet = GetItemSet();
522 0 : SfxItemSet aSet(rOldSet);
523 0 : const SfxItemSet* pExSet = GetTabDialog()->GetExampleSet();
524 0 : if(pExSet)
525 0 : aSet.Put(*pExSet);
526 0 : PutGridItem(aSet);
527 0 : aExampleWN.UpdateExample(aSet);
528 0 : return 0;
529 0 : }
530 :
531 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|