1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_cui.hxx" 30 #include <tools/shl.hxx> 31 #include <svtools/ctrltool.hxx> 32 #include <vcl/svapp.hxx> 33 #include <vcl/wrkwin.hxx> 34 #include <svtools/fontsubstconfig.hxx> 35 #include <unotools/sourceviewconfig.hxx> 36 #include "fontsubs.hrc" 37 #include "fontsubs.hxx" 38 #include <dialmgr.hxx> 39 #include "helpid.hrc" 40 #include <cuires.hrc> 41 42 /*********************************************************************/ 43 /* */ 44 /* TabPage Fontersetzung */ 45 /* */ 46 /*********************************************************************/ 47 48 #define CBCOL_FIRST 0 49 #define CBCOL_SECOND 1 50 #define CBCOL_BOTH 2 51 52 SvxFontSubstTabPage::SvxFontSubstTabPage( Window* pParent, 53 const SfxItemSet& rSet ) : 54 SfxTabPage(pParent, CUI_RES(RID_SVX_FONT_SUBSTITUTION), rSet), 55 aUseTableCB (this, CUI_RES(CB_USETABLE)), 56 aFont1FT (this, CUI_RES(FT_FONT1)), 57 aFont1CB (this, CUI_RES(CB_FONT1)), 58 aFont2FT (this, CUI_RES(FT_FONT2)), 59 aFont2CB (this, CUI_RES(CB_FONT2)), 60 aNewDelTBX (this, CUI_RES(TBX_SUBSTNEWDEL)), 61 aCheckLB (this, CUI_RES(CLB_SUBSTITUTES)), 62 63 aSourceViewFontsFL (this, CUI_RES(FL_SOURCEVIEW )), 64 aFontNameFT (this, CUI_RES(FT_FONTNAME )), 65 aFontNameLB (this, CUI_RES(LB_FONTNAME )), 66 aNonPropFontsOnlyCB(this, CUI_RES(CB_NONPROP )), 67 aFontHeightFT (this, CUI_RES(FT_FONTHEIGHT )), 68 aFontHeightLB (this, CUI_RES(LB_FONTHEIGHT )), 69 70 aImageList (CUI_RES(IL_ICON)), 71 72 sAutomatic (CUI_RES( STR_AUTOMATIC )), 73 pConfig(new SvtFontSubstConfig), 74 pSourceViewConfig(new utl::SourceViewConfig), 75 76 sHeader1 (CUI_RES( STR_HEADER1 )), 77 sHeader2 (CUI_RES( STR_HEADER2 )), 78 sHeader3 (CUI_RES( STR_HEADER3 )), 79 sHeader4 (CUI_RES( STR_HEADER4 )), 80 81 sFontGroup ("FontSubstitution"), 82 pCheckButtonData(0) 83 { 84 FreeResource(); 85 86 aTextColor = aCheckLB.GetTextColor(); 87 88 for(sal_uInt16 k = 0; k < aNewDelTBX.GetItemCount(); k++) 89 aNewDelTBX.SetItemImage(aNewDelTBX.GetItemId(k), 90 aImageList.GetImage(aNewDelTBX.GetItemId(k))); 91 92 aNewDelTBX.SetSizePixel( aNewDelTBX.CalcWindowSizePixel() ); 93 94 long nDelta = ( aFont1CB.GetSizePixel().Height() - 95 aNewDelTBX.GetSizePixel().Height() ) / 2; 96 Point aNewPnt = aNewDelTBX.GetPosPixel(); 97 aNewPnt.Y() += nDelta; 98 aNewDelTBX.SetPosPixel( aNewPnt ); 99 100 aCheckLB.SetHelpId(HID_OFA_FONT_SUBST_CLB); 101 aCheckLB.SetStyle(aCheckLB.GetStyle()|WB_HSCROLL|WB_VSCROLL); 102 aCheckLB.SetSelectionMode(MULTIPLE_SELECTION); 103 aCheckLB.SortByCol(2); 104 105 Link aLink(LINK(this, SvxFontSubstTabPage, SelectHdl)); 106 107 aCheckLB.SetSelectHdl(aLink); 108 aUseTableCB.SetClickHdl(aLink); 109 aFont1CB.SetSelectHdl(aLink); 110 aFont1CB.SetModifyHdl(aLink); 111 aFont2CB.SetSelectHdl(aLink); 112 aFont2CB.SetModifyHdl(aLink); 113 aNewDelTBX.SetClickHdl(aLink); 114 115 aNonPropFontsOnlyCB.SetClickHdl(LINK(this, SvxFontSubstTabPage, NonPropFontsHdl)); 116 117 static long aStaticTabs[] = { 4, 0, 0, 0, 0 }; 118 long nW1 = GetTextWidth( sHeader1 ); 119 long nW2 = GetTextWidth( sHeader2 ); 120 long nMax = Max( nW1, nW2 ) + 6; // width of the longest header + a little offset 121 long nMin = aFontNameFT.LogicToPixel( Size( 30, 0 ), MAP_APPFONT ).Width(); 122 nMax = Max( nMax, nMin ); 123 const long nDoubleMax = 2*nMax; 124 const long nRest = aCheckLB.GetSizePixel().Width() - nDoubleMax; 125 aStaticTabs[2] = nMax; 126 aStaticTabs[3] = nDoubleMax; 127 aStaticTabs[4] = nDoubleMax + nRest/2; 128 aCheckLB.SvxSimpleTable::SetTabs( aStaticTabs, MAP_PIXEL ); 129 130 String sHeader(sHeader1); 131 String sTab(String::CreateFromAscii("\t")); 132 String sTabSpace(String::CreateFromAscii("\t ")); 133 sHeader += sTab; 134 sHeader += sHeader2; 135 sHeader += sTabSpace; 136 sHeader += sHeader3; 137 sHeader += sTabSpace; 138 sHeader += sHeader4; 139 // sHeader += sTabSpace; 140 aCheckLB.InsertHeaderEntry(sHeader); 141 142 HeaderBar* pBar = aCheckLB.GetTheHeaderBar(); 143 144 HeaderBarItemBits nBits = pBar->GetItemBits(1) | HIB_FIXEDPOS | HIB_FIXED; 145 nBits &= ~HIB_CLICKABLE; 146 pBar->SetItemBits(1, nBits); 147 pBar->SetItemBits(2, nBits); 148 149 sal_uInt16 nHeight; 150 for(nHeight = 6; nHeight <= 16; nHeight++) 151 aFontHeightLB.InsertEntry(String::CreateFromInt32(nHeight)); 152 for(nHeight = 18; nHeight <= 28; nHeight+= 2) 153 aFontHeightLB.InsertEntry(String::CreateFromInt32(nHeight)); 154 for(nHeight = 32; nHeight <= 48; nHeight+= 4) 155 aFontHeightLB.InsertEntry(String::CreateFromInt32(nHeight)); 156 for(nHeight = 54; nHeight <= 72; nHeight+= 6) 157 aFontHeightLB.InsertEntry(String::CreateFromInt32(nHeight)); 158 for(nHeight = 80; nHeight <= 96; nHeight+= 8) 159 aFontHeightLB.InsertEntry(String::CreateFromInt32(nHeight)); 160 } 161 162 /*********************************************************************/ 163 /* */ 164 /*********************************************************************/ 165 166 SvLBoxEntry* SvxFontSubstTabPage::CreateEntry(String& rFont1, String& rFont2) 167 { 168 SvLBoxEntry* pEntry = new SvLBoxEntry; 169 170 if( !pCheckButtonData ) 171 pCheckButtonData = new SvLBoxButtonData( &aCheckLB ); 172 173 pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0)); // Sonst Puff! 174 175 pEntry->AddItem( new SvLBoxButton( pEntry, 176 SvLBoxButtonKind_enabledCheckbox, 0, 177 pCheckButtonData ) ); 178 pEntry->AddItem( new SvLBoxButton( pEntry, 179 SvLBoxButtonKind_enabledCheckbox, 0, 180 pCheckButtonData ) ); 181 182 pEntry->AddItem( new SvLBoxString( pEntry, 0, rFont1 ) ); 183 pEntry->AddItem( new SvLBoxString( pEntry, 0, rFont2 ) ); 184 185 return pEntry; 186 } 187 188 /*********************************************************************/ 189 /* */ 190 /*********************************************************************/ 191 192 193 SvxFontSubstTabPage::~SvxFontSubstTabPage() 194 { 195 delete pCheckButtonData; 196 delete pConfig; 197 delete pSourceViewConfig; 198 } 199 200 /*********************************************************************/ 201 /* */ 202 /*********************************************************************/ 203 204 SfxTabPage* SvxFontSubstTabPage::Create( Window* pParent, 205 const SfxItemSet& rAttrSet) 206 { 207 return new SvxFontSubstTabPage(pParent, rAttrSet); 208 } 209 210 /*********************************************************************/ 211 /* */ 212 /*********************************************************************/ 213 214 sal_Bool SvxFontSubstTabPage::FillItemSet( SfxItemSet& ) 215 { 216 pConfig->ClearSubstitutions();// remove all entries 217 218 pConfig->Enable(aUseTableCB.IsChecked()); 219 220 SvLBoxEntry* pEntry = aCheckLB.First(); 221 222 while (pEntry) 223 { 224 SubstitutionStruct aAdd; 225 aAdd.sFont = aCheckLB.GetEntryText(pEntry, 0); 226 aAdd.sReplaceBy = aCheckLB.GetEntryText(pEntry, 1); 227 aAdd.bReplaceAlways = aCheckLB.IsChecked(pEntry, 0); 228 aAdd.bReplaceOnScreenOnly = aCheckLB.IsChecked(pEntry, 1); 229 pConfig->AddSubstitution(aAdd); 230 pEntry = aCheckLB.Next(pEntry); 231 } 232 if(pConfig->IsModified()) 233 pConfig->Commit(); 234 pConfig->Apply(); 235 if(aFontHeightLB.GetSavedValue() != aFontHeightLB.GetSelectEntryPos()) 236 pSourceViewConfig->SetFontHeight((sal_Int16)aFontHeightLB.GetSelectEntry().ToInt32()); 237 if(aNonPropFontsOnlyCB.GetSavedValue() != aNonPropFontsOnlyCB.IsChecked()) 238 pSourceViewConfig->SetShowProportionalFontsOnly(aNonPropFontsOnlyCB.IsChecked()); 239 //font name changes cannot be detected by saved values 240 String sFontName; 241 if(aFontNameLB.GetSelectEntryPos()) 242 sFontName = aFontNameLB.GetSelectEntry(); 243 pSourceViewConfig->SetFontName(sFontName); 244 245 return sal_False; 246 } 247 248 /*********************************************************************/ 249 /* */ 250 /*********************************************************************/ 251 252 253 void SvxFontSubstTabPage::Reset( const SfxItemSet& ) 254 { 255 aCheckLB.SetUpdateMode(sal_False); 256 aCheckLB.Clear(); 257 258 FontList aFntLst( Application::GetDefaultDevice() ); 259 aFont1CB.Fill( &aFntLst ); 260 aFont2CB.Fill( &aFntLst ); 261 262 sal_Int32 nCount = pConfig->SubstitutionCount(); 263 if (nCount) 264 aUseTableCB.Check(pConfig->IsEnabled()); 265 266 for (sal_Int32 i = 0; i < nCount; i++) 267 { 268 const SubstitutionStruct* pSubs = pConfig->GetSubstitution(i); 269 String aTmpStr1(pSubs->sFont); 270 String aTmpStr2(pSubs->sReplaceBy); 271 SvLBoxEntry* pEntry = CreateEntry(aTmpStr1, aTmpStr2); 272 aCheckLB.Insert(pEntry); 273 aCheckLB.CheckEntry(pEntry, 0, pSubs->bReplaceAlways); 274 aCheckLB.CheckEntry(pEntry, 1, pSubs->bReplaceOnScreenOnly); 275 } 276 277 CheckEnable(); 278 aCheckLB.SetUpdateMode(sal_True); 279 280 //fill font name box first 281 aNonPropFontsOnlyCB.Check(pSourceViewConfig->IsShowProportionalFontsOnly()); 282 NonPropFontsHdl(&aNonPropFontsOnlyCB); 283 String sFontName(pSourceViewConfig->GetFontName()); 284 if(sFontName.Len()) 285 aFontNameLB.SelectEntry(sFontName); 286 else 287 aFontNameLB.SelectEntryPos(0); 288 short nFontHeight = pSourceViewConfig->GetFontHeight(); 289 aFontHeightLB.SelectEntry(String::CreateFromInt32(nFontHeight)); 290 aNonPropFontsOnlyCB.SaveValue(); 291 aFontHeightLB.SaveValue(); 292 } 293 294 /*********************************************************************/ 295 /* */ 296 /*********************************************************************/ 297 298 IMPL_LINK(SvxFontSubstTabPage, SelectHdl, Window*, pWin) 299 { 300 if (pWin == &aNewDelTBX) 301 { 302 SvLBoxEntry* pEntry; 303 // nCol ist behaemmerterweise die nCol'te Textspalte, werden nicht gezaehlt! 304 // Daher als Spalte "0". 305 sal_uLong nPos = aCheckLB.GetEntryPos(aFont1CB.GetText(), 0); 306 307 switch (aNewDelTBX.GetCurItemId()) 308 { 309 case BT_SUBSTAPPLY: 310 { 311 if (nPos != 0xffffffff) 312 { 313 // Eintrag aendern 314 aCheckLB.SetEntryText(aFont2CB.GetText(), nPos, 1); 315 pEntry = aCheckLB.GetEntry(nPos); 316 } 317 else 318 { 319 // Neuer Eintrag 320 String sFont1 = aFont1CB.GetText(); 321 String sFont2 = aFont2CB.GetText(); 322 323 pEntry = CreateEntry(sFont1, sFont2); 324 aCheckLB.Insert(pEntry); 325 } 326 aCheckLB.SelectAll(sal_False); 327 aCheckLB.Select(pEntry); 328 } 329 break; 330 331 case BT_SUBSTDELETE: 332 { 333 if (nPos != 0xffffffff) 334 { 335 pEntry = aCheckLB.FirstSelected(); 336 while (pEntry) 337 { 338 SvLBoxEntry* pDelEntry = pEntry; 339 pEntry = aCheckLB.NextSelected(pEntry); 340 aCheckLB.RemoveEntry(pDelEntry); 341 } 342 } 343 } 344 break; 345 } 346 } 347 348 if (pWin == &aCheckLB) 349 { 350 SvLBoxEntry* pEntry = aCheckLB.FirstSelected(); 351 352 if (aCheckLB.NextSelected(pEntry) == 0) 353 { 354 aFont1CB.SetText(aCheckLB.GetEntryText(pEntry, 0)); 355 aFont2CB.SetText(aCheckLB.GetEntryText(pEntry, 1)); 356 } 357 } 358 359 if (pWin == &aFont1CB) 360 { 361 sal_uLong nPos = aCheckLB.GetEntryPos(aFont1CB.GetText(), 0); 362 363 if (nPos != 0xffffffff) 364 { 365 SvLBoxEntry* pEntry = aCheckLB.GetEntry(nPos); 366 367 if (pEntry != aCheckLB.FirstSelected()) 368 { 369 aCheckLB.SelectAll(sal_False); 370 aCheckLB.Select(pEntry); 371 } 372 } 373 } 374 375 CheckEnable(); 376 377 return 0; 378 } 379 /* -----------------------------29.08.2002 11:47------------------------------ 380 381 ---------------------------------------------------------------------------*/ 382 IMPL_LINK(SvxFontSubstTabPage, NonPropFontsHdl, CheckBox*, pBox) 383 { 384 String sFontName = aFontNameLB.GetSelectEntry(); 385 sal_Bool bNonPropOnly = pBox->IsChecked(); 386 aFontNameLB.Clear(); 387 FontList aFntLst( Application::GetDefaultDevice() ); 388 aFontNameLB.InsertEntry(sAutomatic); 389 sal_uInt16 nFontCount = aFntLst.GetFontNameCount(); 390 for(sal_uInt16 nFont = 0; nFont < nFontCount; nFont++) 391 { 392 const FontInfo& rInfo = aFntLst.GetFontName( nFont ); 393 if(!bNonPropOnly || rInfo.GetPitch() == PITCH_FIXED) 394 aFontNameLB.InsertEntry(rInfo.GetName()); 395 } 396 aFontNameLB.SelectEntry(sFontName); 397 return 0; 398 } 399 /*********************************************************************/ 400 /* */ 401 /*********************************************************************/ 402 403 void SvxFontSubstTabPage::CheckEnable() 404 { 405 sal_Bool bEnableAll = aUseTableCB.IsChecked(); 406 407 if (bEnableAll) 408 { 409 sal_Bool bApply, bDelete; 410 411 SvLBoxEntry* pEntry = aCheckLB.FirstSelected(); 412 413 String sEntry = aFont1CB.GetText(); 414 sEntry += '\t'; 415 sEntry += aFont2CB.GetText(); 416 417 /* if (!aFont1CB.GetText().Len() || !aFont2CB.GetText().Len() || 418 aFont1CB.GetText() == aFont2CB.GetText() || 419 aCheckLB.GetEntryPos(sEntry) != 0xffffffff || 420 (pEntry != 0 && aCheckLB.NextSelected(pEntry) != 0)) 421 bApply = sal_False; 422 else 423 bApply = sal_True;*/ 424 425 // Wegen OS/2-Optimierungsfehler (Bug #56267) etwas umstaendlicher: 426 if (!aFont1CB.GetText().Len() || !aFont2CB.GetText().Len()) 427 bApply = sal_False; 428 else if(aFont1CB.GetText() == aFont2CB.GetText()) 429 bApply = sal_False; 430 else if(aCheckLB.GetEntryPos(sEntry) != 0xffffffff) 431 bApply = sal_False; 432 else if(pEntry != 0 && aCheckLB.NextSelected(pEntry) != 0) 433 bApply = sal_False; 434 else 435 bApply = sal_True; 436 437 bDelete = pEntry != 0; 438 439 aNewDelTBX.EnableItem(BT_SUBSTAPPLY, bApply); 440 aNewDelTBX.EnableItem(BT_SUBSTDELETE, bDelete); 441 } 442 443 if (bEnableAll) 444 { 445 if (!aCheckLB.IsEnabled()) 446 { 447 aCheckLB.EnableTable(); 448 aCheckLB.SetTextColor(aTextColor); 449 aCheckLB.Invalidate(); 450 SelectHdl(&aFont1CB); 451 } 452 } 453 else 454 { 455 if (aCheckLB.IsEnabled()) 456 { 457 aCheckLB.DisableTable(); 458 aCheckLB.SetTextColor(Color(COL_GRAY)); 459 aCheckLB.Invalidate(); 460 aCheckLB.SelectAll(sal_False); 461 } 462 } 463 aNewDelTBX.Enable(bEnableAll); 464 aFont1FT.Enable(bEnableAll); 465 aFont1CB.Enable(bEnableAll); 466 aFont2FT.Enable(bEnableAll); 467 aFont2CB.Enable(bEnableAll); 468 } 469 470 /*********************************************************************/ 471 /* */ 472 /*********************************************************************/ 473 474 void SvxFontSubstCheckListBox::SetTabs() 475 { 476 SvxSimpleTable::SetTabs(); 477 sal_uInt16 nAdjust = SV_LBOXTAB_ADJUST_RIGHT|SV_LBOXTAB_ADJUST_LEFT|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_ADJUST_NUMERIC|SV_LBOXTAB_FORCE; 478 479 SvLBoxTab* pTab = (SvLBoxTab*)aTabs.GetObject(1); 480 pTab->nFlags &= ~nAdjust; 481 pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE; 482 483 pTab = (SvLBoxTab*)aTabs.GetObject(2); 484 pTab->nFlags &= ~nAdjust; 485 pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE; 486 } 487 /* -----------------------------22.05.2002 11:06------------------------------ 488 489 ---------------------------------------------------------------------------*/ 490 void SvxFontSubstCheckListBox::KeyInput( const KeyEvent& rKEvt ) 491 { 492 if(!rKEvt.GetKeyCode().GetModifier() && 493 KEY_SPACE == rKEvt.GetKeyCode().GetCode()) 494 { 495 sal_uLong nSelPos = GetModel()->GetAbsPos(GetCurEntry()); 496 sal_uInt16 nCol = GetCurrentTabPos() - 1; 497 if ( nCol < 2 ) 498 { 499 CheckEntryPos( nSelPos, nCol, !IsChecked( nSelPos, nCol ) ); 500 CallImplEventListeners( VCLEVENT_CHECKBOX_TOGGLE, (void*)GetEntry( nSelPos ) ); 501 } 502 else 503 { 504 sal_uInt16 nCheck = IsChecked(nSelPos, 1) ? 1 : 0; 505 if(IsChecked(nSelPos, 0)) 506 nCheck += 2; 507 nCheck--; 508 nCheck &= 3; 509 CheckEntryPos(nSelPos, 1, 0 != (nCheck & 1)); 510 CheckEntryPos(nSelPos, 0, 0 != (nCheck & 2)); 511 } 512 } 513 else 514 SvxSimpleTable::KeyInput(rKEvt); 515 } 516 517 /*********************************************************************/ 518 /* */ 519 /*********************************************************************/ 520 521 void SvxFontSubstCheckListBox::CheckEntryPos(sal_uLong nPos, sal_uInt16 nCol, sal_Bool bChecked) 522 { 523 if ( nPos < GetEntryCount() ) 524 SetCheckButtonState( 525 GetEntry(nPos), 526 nCol, 527 bChecked ? SvButtonState( SV_BUTTON_CHECKED ) : 528 SvButtonState( SV_BUTTON_UNCHECKED ) ); 529 } 530 531 /*********************************************************************/ 532 /* */ 533 /*********************************************************************/ 534 535 void SvxFontSubstCheckListBox::CheckEntry(SvLBoxEntry* pEntry, sal_uInt16 nCol, sal_Bool bChecked) 536 { 537 if ( pEntry ) 538 SetCheckButtonState( 539 pEntry, 540 nCol, 541 bChecked ? SvButtonState( SV_BUTTON_CHECKED ) : 542 SvButtonState( SV_BUTTON_UNCHECKED ) ); 543 } 544 545 /*********************************************************************/ 546 /* */ 547 /*********************************************************************/ 548 549 sal_Bool SvxFontSubstCheckListBox::IsChecked(sal_uLong nPos, sal_uInt16 nCol) 550 { 551 return GetCheckButtonState( GetEntry(nPos), nCol ) == SV_BUTTON_CHECKED; 552 } 553 554 /*********************************************************************/ 555 /* */ 556 /*********************************************************************/ 557 558 sal_Bool SvxFontSubstCheckListBox::IsChecked(SvLBoxEntry* pEntry, sal_uInt16 nCol) 559 { 560 return GetCheckButtonState( pEntry, nCol ) == SV_BUTTON_CHECKED; 561 } 562 563 /*********************************************************************/ 564 /* */ 565 /*********************************************************************/ 566 567 void SvxFontSubstCheckListBox::SetCheckButtonState( SvLBoxEntry* pEntry, sal_uInt16 nCol, SvButtonState eState) 568 { 569 SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1)); 570 571 DBG_ASSERT(pItem,"SetCheckButton:Item not found"); 572 if (((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON) 573 { 574 switch( eState ) 575 { 576 case SV_BUTTON_CHECKED: 577 pItem->SetStateChecked(); 578 break; 579 580 case SV_BUTTON_UNCHECKED: 581 pItem->SetStateUnchecked(); 582 break; 583 584 case SV_BUTTON_TRISTATE: 585 pItem->SetStateTristate(); 586 break; 587 } 588 InvalidateEntry( pEntry ); 589 } 590 } 591 592 /*********************************************************************/ 593 /* */ 594 /*********************************************************************/ 595 596 SvButtonState SvxFontSubstCheckListBox::GetCheckButtonState( SvLBoxEntry* pEntry, sal_uInt16 nCol ) const 597 { 598 SvButtonState eState = SV_BUTTON_UNCHECKED; 599 SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1)); 600 DBG_ASSERT(pItem,"GetChButnState:Item not found"); 601 602 if (((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON) 603 { 604 sal_uInt16 nButtonFlags = pItem->GetButtonFlags(); 605 eState = pCheckButtonData->ConvertToButtonState( nButtonFlags ); 606 } 607 608 return eState; 609 } 610 611 612