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 "sal/config.h"
21 :
22 : #include <officecfg/Office/Common.hxx>
23 : #include <svtools/ctrltool.hxx>
24 : #include <svtools/svlbitm.hxx>
25 : #include <vcl/svapp.hxx>
26 : #include <vcl/wrkwin.hxx>
27 : #include <svtools/fontsubstconfig.hxx>
28 : #include "fontsubs.hxx"
29 : #include <dialmgr.hxx>
30 : #include "helpid.hrc"
31 : #include <cuires.hrc>
32 :
33 : /*********************************************************************/
34 : /* */
35 : /* TabPage font replacement */
36 : /* */
37 : /*********************************************************************/
38 :
39 0 : SvxFontSubstTabPage::SvxFontSubstTabPage( vcl::Window* pParent,
40 : const SfxItemSet& rSet )
41 : : SfxTabPage(pParent, "OptFontsPage", "cui/ui/optfontspage.ui", &rSet)
42 0 : , pConfig(new SvtFontSubstConfig)
43 0 : , pCheckButtonData(0)
44 : {
45 0 : get(m_pUseTableCB, "usetable");
46 0 : get(m_pReplacements, "replacements");
47 0 : get(m_pFont1CB, "font1");
48 0 : get(m_pFont2CB, "font2");
49 0 : m_pFont1CB->SetStyle(m_pFont1CB->GetStyle() | WB_SORT);
50 0 : m_pFont2CB->SetStyle(m_pFont2CB->GetStyle() | WB_SORT);
51 0 : get(m_pApply, "apply");
52 0 : get(m_pDelete, "delete");
53 0 : get(m_pFontNameLB, "fontname");
54 0 : m_sAutomatic = m_pFontNameLB->GetEntry(0);
55 : assert(!m_sAutomatic.isEmpty());
56 0 : get(m_pNonPropFontsOnlyCB, "nonpropfontonly");
57 0 : get(m_pFontHeightLB, "fontheight");
58 :
59 0 : SvSimpleTableContainer *pCheckLBContainer = get<SvSimpleTableContainer>("checklb");
60 0 : Size aControlSize(248, 75);
61 0 : aControlSize = LogicToPixel(aControlSize, MAP_APPFONT);
62 0 : pCheckLBContainer->set_width_request(aControlSize.Width());
63 0 : pCheckLBContainer->set_height_request(aControlSize.Height());
64 :
65 0 : m_pCheckLB = VclPtr<SvxFontSubstCheckListBox>::Create(*pCheckLBContainer, 0);
66 0 : m_pCheckLB->SetHelpId(HID_OFA_FONT_SUBST_CLB);
67 :
68 0 : m_pCheckLB->SetStyle(m_pCheckLB->GetStyle()|WB_HSCROLL|WB_VSCROLL);
69 0 : m_pCheckLB->SetSelectionMode(MULTIPLE_SELECTION);
70 0 : m_pCheckLB->SortByCol(2);
71 0 : long aStaticTabs[] = { 4, 0, 0, 0, 0 };
72 0 : m_pCheckLB->SvSimpleTable::SetTabs(&aStaticTabs[0]);
73 :
74 0 : OUString sHeader1(get<FixedText>("always")->GetText());
75 0 : OUString sHeader2(get<FixedText>("screenonly")->GetText());
76 0 : OUStringBuffer sHeader;
77 0 : sHeader.append(sHeader1).append("\t").append(sHeader2)
78 0 : .append("\t ").append(get<FixedText>("font")->GetText())
79 0 : .append("\t ").append(get<FixedText>("replacewith")->GetText());
80 0 : m_pCheckLB->InsertHeaderEntry(sHeader.makeStringAndClear());
81 :
82 0 : HeaderBar &rBar = m_pCheckLB->GetTheHeaderBar();
83 0 : HeaderBarItemBits nBits = rBar.GetItemBits(1) | HeaderBarItemBits::FIXEDPOS | HeaderBarItemBits::FIXED;
84 0 : nBits &= ~HeaderBarItemBits::CLICKABLE;
85 0 : rBar.SetItemBits(1, nBits);
86 0 : rBar.SetItemBits(2, nBits);
87 :
88 0 : m_pCheckLB->setColSizes();
89 :
90 0 : aTextColor = m_pCheckLB->GetTextColor();
91 0 : Link<> aLink(LINK(this, SvxFontSubstTabPage, SelectHdl));
92 :
93 0 : m_pCheckLB->SetSelectHdl(aLink);
94 0 : m_pUseTableCB->SetClickHdl(aLink);
95 0 : m_pFont1CB->SetSelectHdl(aLink);
96 0 : m_pFont1CB->SetModifyHdl(aLink);
97 0 : m_pFont2CB->SetSelectHdl(aLink);
98 0 : m_pFont2CB->SetModifyHdl(aLink);
99 0 : m_pApply->SetClickHdl(aLink);
100 0 : m_pDelete->SetClickHdl(aLink);
101 :
102 0 : m_pNonPropFontsOnlyCB->SetClickHdl(LINK(this, SvxFontSubstTabPage, NonPropFontsHdl));
103 :
104 : sal_uInt16 nHeight;
105 0 : for(nHeight = 6; nHeight <= 16; nHeight++)
106 0 : m_pFontHeightLB->InsertEntry(OUString::number(nHeight));
107 0 : for(nHeight = 18; nHeight <= 28; nHeight+= 2)
108 0 : m_pFontHeightLB->InsertEntry(OUString::number(nHeight));
109 0 : for(nHeight = 32; nHeight <= 48; nHeight+= 4)
110 0 : m_pFontHeightLB->InsertEntry(OUString::number(nHeight));
111 0 : for(nHeight = 54; nHeight <= 72; nHeight+= 6)
112 0 : m_pFontHeightLB->InsertEntry(OUString::number(nHeight));
113 0 : for(nHeight = 80; nHeight <= 96; nHeight+= 8)
114 0 : m_pFontHeightLB->InsertEntry(OUString::number(nHeight));
115 0 : }
116 :
117 0 : SvTreeListEntry* SvxFontSubstTabPage::CreateEntry(OUString& rFont1, OUString& rFont2)
118 : {
119 0 : SvTreeListEntry* pEntry = new SvTreeListEntry;
120 :
121 0 : if( !pCheckButtonData )
122 0 : pCheckButtonData = new SvLBoxButtonData( m_pCheckLB );
123 :
124 0 : pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), false)); // Sonst Puff!
125 :
126 : pEntry->AddItem( new SvLBoxButton( pEntry,
127 : SvLBoxButtonKind_enabledCheckbox, 0,
128 0 : pCheckButtonData ) );
129 : pEntry->AddItem( new SvLBoxButton( pEntry,
130 : SvLBoxButtonKind_enabledCheckbox, 0,
131 0 : pCheckButtonData ) );
132 :
133 0 : pEntry->AddItem( new SvLBoxString( pEntry, 0, rFont1 ) );
134 0 : pEntry->AddItem( new SvLBoxString( pEntry, 0, rFont2 ) );
135 :
136 0 : return pEntry;
137 : }
138 :
139 0 : SvxFontSubstTabPage::~SvxFontSubstTabPage()
140 : {
141 0 : disposeOnce();
142 0 : }
143 :
144 0 : void SvxFontSubstTabPage::dispose()
145 : {
146 0 : delete pCheckButtonData;
147 0 : pCheckButtonData = NULL;
148 0 : delete pConfig;
149 0 : pConfig = NULL;
150 0 : m_pCheckLB.disposeAndClear();
151 0 : m_pUseTableCB.clear();
152 0 : m_pReplacements.clear();
153 0 : m_pFont1CB.clear();
154 0 : m_pFont2CB.clear();
155 0 : m_pApply.clear();
156 0 : m_pDelete.clear();
157 0 : m_pFontNameLB.clear();
158 0 : m_pNonPropFontsOnlyCB.clear();
159 0 : m_pFontHeightLB.clear();
160 0 : SfxTabPage::dispose();
161 0 : }
162 :
163 0 : VclPtr<SfxTabPage> SvxFontSubstTabPage::Create( vcl::Window* pParent,
164 : const SfxItemSet* rAttrSet)
165 : {
166 0 : return VclPtr<SvxFontSubstTabPage>::Create(pParent, *rAttrSet);
167 : }
168 :
169 0 : bool SvxFontSubstTabPage::FillItemSet( SfxItemSet* )
170 : {
171 0 : pConfig->ClearSubstitutions();// remove all entries
172 :
173 0 : pConfig->Enable(m_pUseTableCB->IsChecked());
174 :
175 0 : SvTreeListEntry* pEntry = m_pCheckLB->First();
176 :
177 0 : while (pEntry)
178 : {
179 0 : SubstitutionStruct aAdd;
180 0 : aAdd.sFont = SvTabListBox::GetEntryText(pEntry, 0);
181 0 : aAdd.sReplaceBy = SvTabListBox::GetEntryText(pEntry, 1);
182 0 : aAdd.bReplaceAlways = SvxFontSubstCheckListBox::IsChecked(pEntry, 0);
183 0 : aAdd.bReplaceOnScreenOnly = SvxFontSubstCheckListBox::IsChecked(pEntry, 1);
184 0 : pConfig->AddSubstitution(aAdd);
185 0 : pEntry = m_pCheckLB->Next(pEntry);
186 0 : }
187 0 : if(pConfig->IsModified())
188 0 : pConfig->Commit();
189 0 : pConfig->Apply();
190 : std::shared_ptr< comphelper::ConfigurationChanges > batch(
191 0 : comphelper::ConfigurationChanges::create());
192 0 : if(m_pFontHeightLB->IsValueChangedFromSaved())
193 : officecfg::Office::Common::Font::SourceViewFont::FontHeight::set(
194 0 : static_cast< sal_Int16 >(m_pFontHeightLB->GetSelectEntry().toInt32()),
195 0 : batch);
196 0 : if(m_pNonPropFontsOnlyCB->IsValueChangedFromSaved())
197 : officecfg::Office::Common::Font::SourceViewFont::
198 : NonProportionalFontsOnly::set(
199 0 : m_pNonPropFontsOnlyCB->IsChecked(), batch);
200 : //font name changes cannot be detected by saved values
201 0 : OUString sFontName;
202 0 : if(m_pFontNameLB->GetSelectEntryPos())
203 0 : sFontName = m_pFontNameLB->GetSelectEntry();
204 : officecfg::Office::Common::Font::SourceViewFont::FontName::set(
205 0 : boost::optional< OUString >(sFontName), batch);
206 0 : batch->commit();
207 :
208 0 : return false;
209 : }
210 :
211 0 : void SvxFontSubstTabPage::Reset( const SfxItemSet* )
212 : {
213 0 : m_pCheckLB->SetUpdateMode(false);
214 0 : m_pCheckLB->Clear();
215 :
216 0 : FontList aFntLst( Application::GetDefaultDevice() );
217 0 : m_pFont1CB->Fill( &aFntLst );
218 0 : m_pFont2CB->Fill( &aFntLst );
219 :
220 0 : sal_Int32 nCount = pConfig->SubstitutionCount();
221 0 : if (nCount)
222 0 : m_pUseTableCB->Check(pConfig->IsEnabled());
223 :
224 0 : for (sal_Int32 i = 0; i < nCount; ++i)
225 : {
226 0 : const SubstitutionStruct* pSubs = pConfig->GetSubstitution(i);
227 0 : OUString aTmpStr1(pSubs->sFont);
228 0 : OUString aTmpStr2(pSubs->sReplaceBy);
229 0 : SvTreeListEntry* pEntry = CreateEntry(aTmpStr1, aTmpStr2);
230 0 : m_pCheckLB->Insert(pEntry);
231 0 : m_pCheckLB->CheckEntry(pEntry, 0, pSubs->bReplaceAlways);
232 0 : m_pCheckLB->CheckEntry(pEntry, 1, pSubs->bReplaceOnScreenOnly);
233 0 : }
234 :
235 0 : CheckEnable();
236 0 : m_pCheckLB->SetUpdateMode(true);
237 :
238 : //fill font name box first
239 : m_pNonPropFontsOnlyCB->Check(
240 : officecfg::Office::Common::Font::SourceViewFont::
241 0 : NonProportionalFontsOnly::get());
242 0 : NonPropFontsHdl(m_pNonPropFontsOnlyCB);
243 : OUString sFontName(
244 : officecfg::Office::Common::Font::SourceViewFont::FontName::get().
245 0 : get_value_or(OUString()));
246 0 : if(!sFontName.isEmpty())
247 0 : m_pFontNameLB->SelectEntry(sFontName);
248 : else
249 0 : m_pFontNameLB->SelectEntryPos(0);
250 : m_pFontHeightLB->SelectEntry(
251 : OUString::number(
252 : officecfg::Office::Common::Font::SourceViewFont::FontHeight::
253 0 : get()));
254 0 : m_pNonPropFontsOnlyCB->SaveValue();
255 0 : m_pFontHeightLB->SaveValue();
256 0 : }
257 :
258 0 : IMPL_LINK(SvxFontSubstTabPage, SelectHdl, vcl::Window*, pWin)
259 : {
260 0 : if (pWin == m_pApply || pWin == m_pDelete)
261 : {
262 : SvTreeListEntry* pEntry;
263 : // nCol is stupidly the nCol'th text column, not counted!
264 : // Therefore "0" as column.
265 0 : sal_uLong nPos = m_pCheckLB->GetEntryPos(m_pFont1CB->GetText(), 0);
266 :
267 0 : if (pWin == m_pApply)
268 : {
269 0 : if (nPos != 0xffffffff)
270 : {
271 : // change entry
272 0 : m_pCheckLB->SetEntryText(m_pFont2CB->GetText(), nPos, 1);
273 0 : pEntry = m_pCheckLB->GetEntry(nPos);
274 : }
275 : else
276 : {
277 : // new entry
278 0 : OUString sFont1 = m_pFont1CB->GetText();
279 0 : OUString sFont2 = m_pFont2CB->GetText();
280 :
281 0 : pEntry = CreateEntry(sFont1, sFont2);
282 0 : m_pCheckLB->Insert(pEntry);
283 : }
284 0 : m_pCheckLB->SelectAll(false);
285 0 : m_pCheckLB->Select(pEntry);
286 : }
287 0 : else if (pWin == m_pDelete)
288 : {
289 0 : if (nPos != 0xffffffff)
290 : {
291 0 : pEntry = m_pCheckLB->FirstSelected();
292 0 : while (pEntry)
293 : {
294 0 : SvTreeListEntry* pDelEntry = pEntry;
295 0 : pEntry = m_pCheckLB->NextSelected(pEntry);
296 0 : m_pCheckLB->RemoveEntry(pDelEntry);
297 : }
298 : }
299 : }
300 : }
301 :
302 0 : if (pWin == m_pCheckLB)
303 : {
304 0 : SvTreeListEntry* pEntry = m_pCheckLB->FirstSelected();
305 :
306 0 : if (m_pCheckLB->NextSelected(pEntry) == 0)
307 : {
308 0 : m_pFont1CB->SetText(SvTabListBox::GetEntryText(pEntry, 0));
309 0 : m_pFont2CB->SetText(SvTabListBox::GetEntryText(pEntry, 1));
310 : }
311 : }
312 :
313 0 : if (pWin == m_pFont1CB)
314 : {
315 0 : sal_uLong nPos = m_pCheckLB->GetEntryPos(m_pFont1CB->GetText(), 0);
316 :
317 0 : if (nPos != 0xffffffff)
318 : {
319 0 : SvTreeListEntry* pEntry = m_pCheckLB->GetEntry(nPos);
320 :
321 0 : if (pEntry != m_pCheckLB->FirstSelected())
322 : {
323 0 : m_pCheckLB->SelectAll(false);
324 0 : m_pCheckLB->Select(pEntry);
325 : }
326 : }
327 : }
328 :
329 0 : CheckEnable();
330 :
331 0 : return 0;
332 : }
333 :
334 :
335 0 : IMPL_LINK(SvxFontSubstTabPage, NonPropFontsHdl, CheckBox*, pBox)
336 : {
337 0 : OUString sFontName = m_pFontNameLB->GetSelectEntry();
338 0 : bool bNonPropOnly = pBox->IsChecked();
339 0 : m_pFontNameLB->Clear();
340 0 : FontList aFntLst( Application::GetDefaultDevice() );
341 0 : m_pFontNameLB->InsertEntry(m_sAutomatic);
342 0 : sal_uInt16 nFontCount = aFntLst.GetFontNameCount();
343 0 : for(sal_uInt16 nFont = 0; nFont < nFontCount; nFont++)
344 : {
345 0 : const vcl::FontInfo& rInfo = aFntLst.GetFontName( nFont );
346 0 : if(!bNonPropOnly || rInfo.GetPitch() == PITCH_FIXED)
347 0 : m_pFontNameLB->InsertEntry(rInfo.GetName());
348 : }
349 0 : m_pFontNameLB->SelectEntry(sFontName);
350 0 : return 0;
351 : }
352 :
353 0 : void SvxFontSubstTabPage::CheckEnable()
354 : {
355 0 : bool bEnableAll = m_pUseTableCB->IsChecked();
356 0 : m_pReplacements->Enable(bEnableAll);
357 0 : if (bEnableAll)
358 : {
359 : bool bApply, bDelete;
360 :
361 0 : SvTreeListEntry* pEntry = m_pCheckLB->FirstSelected();
362 :
363 0 : OUString sEntry = m_pFont1CB->GetText();
364 0 : sEntry += "\t";
365 0 : sEntry += m_pFont2CB->GetText();
366 :
367 : // because of OS/2 optimization error (Bug #56267) a bit more intricate:
368 0 : if (m_pFont1CB->GetText().isEmpty() || m_pFont2CB->GetText().isEmpty())
369 0 : bApply = false;
370 0 : else if(m_pFont1CB->GetText() == m_pFont2CB->GetText())
371 0 : bApply = false;
372 0 : else if(m_pCheckLB->GetEntryPos(sEntry) != 0xffffffff)
373 0 : bApply = false;
374 0 : else if(pEntry != 0 && m_pCheckLB->NextSelected(pEntry) != 0)
375 0 : bApply = false;
376 : else
377 0 : bApply = true;
378 :
379 0 : bDelete = pEntry != 0;
380 :
381 0 : m_pApply->Enable(bApply);
382 0 : m_pDelete->Enable(bDelete);
383 : }
384 :
385 0 : if (bEnableAll)
386 : {
387 0 : if (!m_pCheckLB->IsEnabled())
388 : {
389 0 : m_pCheckLB->EnableTable();
390 0 : m_pCheckLB->SetTextColor(aTextColor);
391 0 : m_pCheckLB->Invalidate();
392 0 : SelectHdl(m_pFont1CB);
393 : }
394 : }
395 : else
396 : {
397 0 : if (m_pCheckLB->IsEnabled())
398 : {
399 0 : m_pCheckLB->DisableTable();
400 0 : m_pCheckLB->SetTextColor(Color(COL_GRAY));
401 0 : m_pCheckLB->Invalidate();
402 0 : m_pCheckLB->SelectAll(false);
403 : }
404 : }
405 0 : }
406 :
407 0 : void SvxFontSubstCheckListBox::setColSizes()
408 : {
409 0 : HeaderBar &rBar = GetTheHeaderBar();
410 0 : if (rBar.GetItemCount() < 4)
411 0 : return;
412 0 : long nW1 = rBar.GetTextWidth(rBar.GetItemText(3));
413 0 : long nW2 = rBar.GetTextWidth(rBar.GetItemText(4));
414 0 : long nMax = std::max( nW1, nW2 ) + 6; // width of the longest header + a little offset
415 0 : long nMin = rBar.LogicToPixel(Size(10, 0), MAP_APPFONT).Width();
416 0 : nMax = std::max( nMax, nMin );
417 0 : const long nDoubleMax = 2*nMax;
418 0 : const long nRest = GetSizePixel().Width() - nDoubleMax;
419 0 : long aStaticTabs[] = { 4, 0, 0, 0, 0 };
420 0 : aStaticTabs[2] = nMax;
421 0 : aStaticTabs[3] = nDoubleMax;
422 0 : aStaticTabs[4] = nDoubleMax + nRest/2;
423 0 : SvSimpleTable::SetTabs(aStaticTabs, MAP_PIXEL);
424 : }
425 :
426 0 : void SvxFontSubstCheckListBox::Resize()
427 : {
428 0 : SvSimpleTable::Resize();
429 0 : setColSizes();
430 0 : }
431 :
432 0 : void SvxFontSubstCheckListBox::SetTabs()
433 : {
434 0 : SvSimpleTable::SetTabs();
435 0 : SvLBoxTabFlags nAdjust = SvLBoxTabFlags::ADJUST_RIGHT|SvLBoxTabFlags::ADJUST_LEFT|SvLBoxTabFlags::ADJUST_CENTER|SvLBoxTabFlags::ADJUST_NUMERIC|SvLBoxTabFlags::FORCE;
436 :
437 0 : SvLBoxTab* pTab = aTabs[1];
438 0 : pTab->nFlags &= ~nAdjust;
439 0 : pTab->nFlags |= SvLBoxTabFlags::PUSHABLE|SvLBoxTabFlags::ADJUST_CENTER|SvLBoxTabFlags::FORCE;
440 :
441 0 : pTab = aTabs[2];
442 0 : pTab->nFlags &= ~nAdjust;
443 0 : pTab->nFlags |= SvLBoxTabFlags::PUSHABLE|SvLBoxTabFlags::ADJUST_CENTER|SvLBoxTabFlags::FORCE;
444 0 : }
445 :
446 0 : void SvxFontSubstCheckListBox::KeyInput( const KeyEvent& rKEvt )
447 : {
448 0 : if(!rKEvt.GetKeyCode().GetModifier() &&
449 0 : KEY_SPACE == rKEvt.GetKeyCode().GetCode())
450 : {
451 0 : sal_uLong nSelPos = GetModel()->GetAbsPos(GetCurEntry());
452 0 : sal_uInt16 nCol = GetCurrentTabPos() - 1;
453 0 : if ( nCol < 2 )
454 : {
455 0 : CheckEntryPos( nSelPos, nCol, !IsChecked( nSelPos, nCol ) );
456 0 : CallImplEventListeners( VCLEVENT_CHECKBOX_TOGGLE, static_cast<void*>(GetEntry( nSelPos )) );
457 : }
458 : else
459 : {
460 0 : sal_uInt16 nCheck = IsChecked(nSelPos, 1) ? 1 : 0;
461 0 : if(IsChecked(nSelPos, 0))
462 0 : nCheck += 2;
463 0 : nCheck--;
464 0 : nCheck &= 3;
465 0 : CheckEntryPos(nSelPos, 1, 0 != (nCheck & 1));
466 0 : CheckEntryPos(nSelPos, 0, 0 != (nCheck & 2));
467 : }
468 : }
469 : else
470 0 : SvSimpleTable::KeyInput(rKEvt);
471 0 : }
472 :
473 0 : void SvxFontSubstCheckListBox::CheckEntryPos(sal_uLong nPos, sal_uInt16 nCol, bool bChecked)
474 : {
475 0 : if ( nPos < GetEntryCount() )
476 : SetCheckButtonState(
477 : GetEntry(nPos),
478 : nCol,
479 : bChecked ? SvButtonState( SV_BUTTON_CHECKED ) :
480 0 : SvButtonState( SV_BUTTON_UNCHECKED ) );
481 0 : }
482 :
483 0 : void SvxFontSubstCheckListBox::CheckEntry(SvTreeListEntry* pEntry, sal_uInt16 nCol, bool bChecked)
484 : {
485 0 : if ( pEntry )
486 : SetCheckButtonState(
487 : pEntry,
488 : nCol,
489 : bChecked ? SvButtonState( SV_BUTTON_CHECKED ) :
490 0 : SvButtonState( SV_BUTTON_UNCHECKED ) );
491 0 : }
492 :
493 0 : bool SvxFontSubstCheckListBox::IsChecked(sal_uLong nPos, sal_uInt16 nCol)
494 : {
495 0 : return GetCheckButtonState( GetEntry(nPos), nCol ) == SV_BUTTON_CHECKED;
496 : }
497 :
498 0 : bool SvxFontSubstCheckListBox::IsChecked(SvTreeListEntry* pEntry, sal_uInt16 nCol)
499 : {
500 0 : return GetCheckButtonState( pEntry, nCol ) == SV_BUTTON_CHECKED;
501 : }
502 :
503 0 : void SvxFontSubstCheckListBox::SetCheckButtonState( SvTreeListEntry* pEntry, sal_uInt16 nCol, SvButtonState eState)
504 : {
505 0 : SvLBoxButton* pItem = static_cast<SvLBoxButton*>(pEntry->GetItem(nCol + 1));
506 :
507 : DBG_ASSERT(pItem,"SetCheckButton:Item not found");
508 0 : if (pItem->GetType() == SV_ITEM_ID_LBOXBUTTON)
509 : {
510 0 : switch( eState )
511 : {
512 : case SV_BUTTON_CHECKED:
513 0 : pItem->SetStateChecked();
514 0 : break;
515 :
516 : case SV_BUTTON_UNCHECKED:
517 0 : pItem->SetStateUnchecked();
518 0 : break;
519 :
520 : case SV_BUTTON_TRISTATE:
521 0 : pItem->SetStateTristate();
522 0 : break;
523 : }
524 0 : InvalidateEntry( pEntry );
525 : }
526 0 : }
527 :
528 0 : SvButtonState SvxFontSubstCheckListBox::GetCheckButtonState( SvTreeListEntry* pEntry, sal_uInt16 nCol )
529 : {
530 0 : SvButtonState eState = SV_BUTTON_UNCHECKED;
531 0 : SvLBoxButton* pItem = static_cast<SvLBoxButton*>(pEntry->GetItem(nCol + 1));
532 : DBG_ASSERT(pItem,"GetChButnState:Item not found");
533 :
534 0 : if (pItem->GetType() == SV_ITEM_ID_LBOXBUTTON)
535 : {
536 0 : SvItemStateFlags nButtonFlags = pItem->GetButtonFlags();
537 0 : eState = SvLBoxButtonData::ConvertToButtonState( nButtonFlags );
538 : }
539 :
540 0 : return eState;
541 0 : }
542 :
543 :
544 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|