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