bump product version to 4.1.6.2
[LibreOffice.git] / cui / source / options / optfltr.cxx
blob2271fab7e05788da3f9d7c51a6cd9bd4e6524883
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #include <unotools/moduleoptions.hxx>
21 #include <unotools/fltrcfg.hxx>
22 #include "optfltr.hxx"
23 #include "optfltr.hrc"
24 #include <cuires.hrc>
25 #include "helpid.hrc"
26 #include <dialmgr.hxx>
28 #include "svtools/svlbitm.hxx"
29 #include "svtools/treelistentry.hxx"
31 enum MSFltrPg2_CheckBoxEntries {
32 Math,
33 Writer,
34 Calc,
35 Impress,
36 InvalidCBEntry
39 // -----------------------------------------------------------------------
41 OfaMSFilterTabPage::OfaMSFilterTabPage(Window* pParent, const SfxItemSet& rSet)
42 : SfxTabPage( pParent, "OptFltrPage", "cui/ui/optfltrpage.ui", rSet )
44 get( aWBasicCodeCB , "wo_basic" );
45 get( aWBasicWbctblCB , "wo_exec" );
46 get( aWBasicStgCB , "wo_saveorig" );
47 get( aEBasicCodeCB , "ex_basic" );
48 get( aEBasicExectblCB , "ex_exec" );
49 get( aEBasicStgCB , "ex_saveorig" );
50 get( aPBasicCodeCB , "pp_basic" );
51 get( aPBasicStgCB , "pp_saveorig" );
53 aWBasicCodeCB->SetClickHdl( LINK( this, OfaMSFilterTabPage, LoadWordBasicCheckHdl_Impl ) );
54 aEBasicCodeCB->SetClickHdl( LINK( this, OfaMSFilterTabPage, LoadExcelBasicCheckHdl_Impl ) );
57 OfaMSFilterTabPage::~OfaMSFilterTabPage()
61 IMPL_LINK_NOARG(OfaMSFilterTabPage, LoadWordBasicCheckHdl_Impl)
63 aWBasicWbctblCB->Enable( aWBasicCodeCB->IsChecked() );
64 return 0;
67 IMPL_LINK_NOARG(OfaMSFilterTabPage, LoadExcelBasicCheckHdl_Impl)
69 aEBasicExectblCB->Enable( aEBasicCodeCB->IsChecked() );
70 return 0;
73 SfxTabPage* OfaMSFilterTabPage::Create( Window* pParent,
74 const SfxItemSet& rAttrSet )
76 return new OfaMSFilterTabPage( pParent, rAttrSet );
79 sal_Bool OfaMSFilterTabPage::FillItemSet( SfxItemSet& )
81 SvtFilterOptions& rOpt = SvtFilterOptions::Get();
83 sal_Bool bFlag;
84 if( aWBasicCodeCB->GetSavedValue() != (bFlag = aWBasicCodeCB->IsChecked()))
85 rOpt.SetLoadWordBasicCode( bFlag );
86 if( aWBasicWbctblCB->GetSavedValue() != (bFlag = aWBasicWbctblCB->IsChecked()))
87 rOpt.SetLoadWordBasicExecutable( bFlag );
88 if( aWBasicStgCB->GetSavedValue() != (bFlag = aWBasicStgCB->IsChecked()))
89 rOpt.SetLoadWordBasicStorage( bFlag );
91 if( aEBasicCodeCB->GetSavedValue() != (bFlag = aEBasicCodeCB->IsChecked()))
92 rOpt.SetLoadExcelBasicCode( bFlag );
93 if( aEBasicExectblCB->GetSavedValue() != (bFlag = aEBasicExectblCB->IsChecked()))
94 rOpt.SetLoadExcelBasicExecutable( bFlag );
95 if( aEBasicStgCB->GetSavedValue() != (bFlag = aEBasicStgCB->IsChecked()))
96 rOpt.SetLoadExcelBasicStorage( bFlag );
98 if( aPBasicCodeCB->GetSavedValue() != (bFlag = aPBasicCodeCB->IsChecked()))
99 rOpt.SetLoadPPointBasicCode( bFlag );
100 if( aPBasicStgCB->GetSavedValue() != (bFlag = aPBasicStgCB->IsChecked()))
101 rOpt.SetLoadPPointBasicStorage( bFlag );
103 return sal_False;
106 void OfaMSFilterTabPage::Reset( const SfxItemSet& )
108 const SvtFilterOptions& rOpt = SvtFilterOptions::Get();
110 aWBasicCodeCB->Check( rOpt.IsLoadWordBasicCode() );
111 aWBasicCodeCB->SaveValue();
112 aWBasicWbctblCB->Check( rOpt.IsLoadWordBasicExecutable() );
113 aWBasicWbctblCB->SaveValue();
114 aWBasicStgCB->Check( rOpt.IsLoadWordBasicStorage() );
115 aWBasicStgCB->SaveValue();
116 LoadWordBasicCheckHdl_Impl( aWBasicCodeCB );
118 aEBasicCodeCB->Check( rOpt.IsLoadExcelBasicCode() );
119 aEBasicCodeCB->SaveValue();
120 aEBasicExectblCB->Check( rOpt.IsLoadExcelBasicExecutable() );
121 aEBasicExectblCB->SaveValue();
122 aEBasicStgCB->Check( rOpt.IsLoadExcelBasicStorage() );
123 aEBasicStgCB->SaveValue();
124 LoadExcelBasicCheckHdl_Impl( aEBasicCodeCB );
126 aPBasicCodeCB->Check( rOpt.IsLoadPPointBasicCode() );
127 aPBasicCodeCB->SaveValue();
128 aPBasicStgCB->Check( rOpt.IsLoadPPointBasicStorage() );
129 aPBasicStgCB->SaveValue();
132 OfaMSFilterTabPage2::OfaMSFilterTabPage2( Window* pParent,
133 const SfxItemSet& rSet )
134 : SfxTabPage( pParent, CUI_RES( RID_OFAPAGE_MSFILTEROPT2 ), rSet ),
135 m_aCheckLBContainer(this, CUI_RES( CLB_SETTINGS)),
136 aCheckLB(m_aCheckLBContainer),
137 aHeader1FT ( this, CUI_RES( FT_HEADER1_EXPLANATION )),
138 aHeader2FT ( this, CUI_RES( FT_HEADER2_EXPLANATION )),
139 sHeader1 ( CUI_RES( ST_HEADER1 )),
140 sHeader2 ( CUI_RES( ST_HEADER2 )),
141 sChgToFromMath ( CUI_RES( ST_CHG_MATH )),
142 sChgToFromWriter ( CUI_RES( ST_CHG_WRITER )),
143 sChgToFromCalc ( CUI_RES( ST_CHG_CALC )),
144 sChgToFromImpress ( CUI_RES( ST_CHG_IMPRESS )),
145 pCheckButtonData(0)
147 FreeResource();
149 static long aStaticTabs[] = { 3, 0, 20, 40 };
150 aCheckLB.SvxSimpleTable::SetTabs( aStaticTabs );
152 String sHeader( sHeader1 );
153 (( sHeader += '\t' ) += sHeader2 ) += '\t';
154 aCheckLB.InsertHeaderEntry( sHeader, HEADERBAR_APPEND,
155 HIB_CENTER | HIB_VCENTER | HIB_FIXEDPOS | HIB_FIXED );
157 aCheckLB.SetHelpId( HID_OFAPAGE_MSFLTR2_CLB );
158 aCheckLB.SetStyle( aCheckLB.GetStyle()|WB_HSCROLL| WB_VSCROLL );
161 OfaMSFilterTabPage2::~OfaMSFilterTabPage2()
163 delete pCheckButtonData;
166 SfxTabPage* OfaMSFilterTabPage2::Create( Window* pParent,
167 const SfxItemSet& rAttrSet )
169 return new OfaMSFilterTabPage2( pParent, rAttrSet );
172 sal_Bool OfaMSFilterTabPage2::FillItemSet( SfxItemSet& )
174 SvtFilterOptions& rOpt = SvtFilterOptions::Get();
176 static struct ChkCBoxEntries{
177 MSFltrPg2_CheckBoxEntries eType;
178 sal_Bool (SvtFilterOptions:: *FnIs)() const;
179 void (SvtFilterOptions:: *FnSet)( sal_Bool bFlag );
180 } aChkArr[] = {
181 { Math, &SvtFilterOptions::IsMathType2Math,
182 &SvtFilterOptions::SetMathType2Math },
183 { Math, &SvtFilterOptions::IsMath2MathType,
184 &SvtFilterOptions::SetMath2MathType },
185 { Writer, &SvtFilterOptions::IsWinWord2Writer,
186 &SvtFilterOptions::SetWinWord2Writer },
187 { Writer, &SvtFilterOptions::IsWriter2WinWord,
188 &SvtFilterOptions::SetWriter2WinWord },
189 { Calc, &SvtFilterOptions::IsExcel2Calc,
190 &SvtFilterOptions::SetExcel2Calc },
191 { Calc, &SvtFilterOptions::IsCalc2Excel,
192 &SvtFilterOptions::SetCalc2Excel },
193 { Impress, &SvtFilterOptions::IsPowerPoint2Impress,
194 &SvtFilterOptions::SetPowerPoint2Impress },
195 { Impress, &SvtFilterOptions::IsImpress2PowerPoint,
196 &SvtFilterOptions::SetImpress2PowerPoint },
197 { InvalidCBEntry, 0, 0 }
200 sal_Bool bCheck, bFirst = sal_True;
201 for( const ChkCBoxEntries* pArr = aChkArr;
202 InvalidCBEntry != pArr->eType; ++pArr, bFirst = !bFirst )
204 sal_uInt16 nCol = bFirst ? 1 : 2;
205 SvTreeListEntry* pEntry = GetEntry4Type( pArr->eType );
206 if( pEntry )
208 SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem( nCol ));
209 if (pItem && pItem->GetType() == SV_ITEM_ID_LBOXBUTTON)
211 sal_uInt16 nButtonFlags = pItem->GetButtonFlags();
212 bCheck = SV_BUTTON_CHECKED ==
213 pCheckButtonData->ConvertToButtonState( nButtonFlags );
215 if( bCheck != (rOpt.*pArr->FnIs)() )
216 (rOpt.*pArr->FnSet)( bCheck );
221 return sal_True;
224 void OfaMSFilterTabPage2::Reset( const SfxItemSet& )
226 SvtFilterOptions& rOpt = SvtFilterOptions::Get();
228 aCheckLB.SetUpdateMode(sal_False);
229 aCheckLB.Clear();
231 SvtModuleOptions aModuleOpt;
233 // int the same sequence as the enums of MSFltrPg2_CheckBoxEntries
234 if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SMATH ) )
235 InsertEntry( sChgToFromMath, static_cast< sal_IntPtr >( Math ) );
236 if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SWRITER ) )
237 InsertEntry( sChgToFromWriter, static_cast< sal_IntPtr >( Writer ) );
238 if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SCALC ) )
239 InsertEntry( sChgToFromCalc, static_cast< sal_IntPtr >( Calc ) );
240 if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SIMPRESS ) )
241 InsertEntry( sChgToFromImpress, static_cast< sal_IntPtr >( Impress ) );
243 static struct ChkCBoxEntries{
244 MSFltrPg2_CheckBoxEntries eType;
245 sal_Bool (SvtFilterOptions:: *FnIs)() const;
246 } aChkArr[] = {
247 { Math, &SvtFilterOptions::IsMathType2Math },
248 { Math, &SvtFilterOptions::IsMath2MathType },
249 { Writer, &SvtFilterOptions::IsWinWord2Writer },
250 { Writer, &SvtFilterOptions::IsWriter2WinWord },
251 { Calc, &SvtFilterOptions::IsExcel2Calc },
252 { Calc, &SvtFilterOptions::IsCalc2Excel },
253 { Impress, &SvtFilterOptions::IsPowerPoint2Impress },
254 { Impress, &SvtFilterOptions::IsImpress2PowerPoint },
255 { InvalidCBEntry, NULL }
258 sal_Bool bFirst = sal_True;
259 for( const ChkCBoxEntries* pArr = aChkArr;
260 InvalidCBEntry != pArr->eType; ++pArr, bFirst = !bFirst )
262 sal_uInt16 nCol = bFirst ? 1 : 2;
263 SvTreeListEntry* pEntry = GetEntry4Type( static_cast< sal_IntPtr >( pArr->eType ) );
264 if( pEntry )
266 SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem( nCol ));
267 if (pItem && pItem->GetType() == SV_ITEM_ID_LBOXBUTTON)
269 if( (rOpt.*pArr->FnIs)() )
270 pItem->SetStateChecked();
271 else
272 pItem->SetStateUnchecked();
273 aCheckLB.InvalidateEntry( pEntry );
277 aCheckLB.SetUpdateMode( sal_True );
280 void OfaMSFilterTabPage2::InsertEntry( const String& _rTxt, sal_IntPtr _nType )
282 SvTreeListEntry* pEntry = new SvTreeListEntry;
284 if( !pCheckButtonData )
285 pCheckButtonData = new SvLBoxButtonData( &aCheckLB );
287 pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0));
288 pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox,
289 0, pCheckButtonData ) );
290 pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox,
291 0, pCheckButtonData ) );
292 pEntry->AddItem( new SvLBoxString( pEntry, 0, _rTxt ) );
294 pEntry->SetUserData( (void*)_nType );
295 aCheckLB.Insert( pEntry );
298 SvTreeListEntry* OfaMSFilterTabPage2::GetEntry4Type( sal_IntPtr _nType ) const
300 SvTreeListEntry* pEntry = aCheckLB.First();
301 while ( pEntry )
303 if ( _nType == sal_IntPtr( pEntry->GetUserData() ) )
304 return pEntry;
305 pEntry = aCheckLB.Next( pEntry );
307 return NULL;
310 void OfaMSFilterTabPage2::MSFltrSimpleTable::SetTabs()
312 SvxSimpleTable::SetTabs();
313 sal_uInt16 nAdjust = SV_LBOXTAB_ADJUST_RIGHT|SV_LBOXTAB_ADJUST_LEFT|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_ADJUST_NUMERIC|SV_LBOXTAB_FORCE;
315 if( aTabs.size() > 1 )
317 SvLBoxTab* pTab = aTabs[1];
318 pTab->nFlags &= ~nAdjust;
319 pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE;
321 if( aTabs.size() > 2 )
323 SvLBoxTab* pTab = aTabs[2];
324 pTab->nFlags &= ~nAdjust;
325 pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE;
329 void OfaMSFilterTabPage2::MSFltrSimpleTable::HBarClick()
331 // sorting is stopped by this overloading
334 void OfaMSFilterTabPage2::MSFltrSimpleTable::SetCheckButtonState(
335 SvTreeListEntry* pEntry, sal_uInt16 nCol, SvButtonState eState)
337 SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1));
339 DBG_ASSERT(pItem,"SetCheckButton:Item not found");
340 if (pItem->GetType() == SV_ITEM_ID_LBOXBUTTON)
342 switch( eState )
344 case SV_BUTTON_CHECKED:
345 pItem->SetStateChecked();
346 break;
348 case SV_BUTTON_UNCHECKED:
349 pItem->SetStateUnchecked();
350 break;
352 case SV_BUTTON_TRISTATE:
353 pItem->SetStateTristate();
354 break;
356 InvalidateEntry( pEntry );
360 SvButtonState OfaMSFilterTabPage2::MSFltrSimpleTable::GetCheckButtonState(
361 SvTreeListEntry* pEntry, sal_uInt16 nCol ) const
363 SvButtonState eState = SV_BUTTON_UNCHECKED;
364 SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1));
365 DBG_ASSERT(pItem,"GetChButnState:Item not found");
367 if (pItem->GetType() == SV_ITEM_ID_LBOXBUTTON)
369 sal_uInt16 nButtonFlags = pItem->GetButtonFlags();
370 eState = pCheckButtonData->ConvertToButtonState( nButtonFlags );
373 return eState;
376 void OfaMSFilterTabPage2::MSFltrSimpleTable::CheckEntryPos(sal_uLong nPos, sal_uInt16 nCol, sal_Bool bChecked)
378 if ( nPos < GetEntryCount() )
379 SetCheckButtonState(
380 GetEntry(nPos),
381 nCol,
382 bChecked ? SvButtonState( SV_BUTTON_CHECKED ) :
383 SvButtonState( SV_BUTTON_UNCHECKED ) );
386 void OfaMSFilterTabPage2::MSFltrSimpleTable::KeyInput( const KeyEvent& rKEvt )
388 if(!rKEvt.GetKeyCode().GetModifier() &&
389 KEY_SPACE == rKEvt.GetKeyCode().GetCode())
391 sal_uLong nSelPos = GetModel()->GetAbsPos(GetCurEntry());
392 sal_uInt16 nCol = GetCurrentTabPos() - 1;
393 if ( nCol < 2 )
395 SvTreeListEntry* pEntry = GetEntry( nSelPos );
396 sal_Bool bIsChecked = ( GetCheckButtonState( pEntry, nCol ) == SV_BUTTON_CHECKED );
397 CheckEntryPos( nSelPos, nCol, !bIsChecked );
398 CallImplEventListeners( VCLEVENT_CHECKBOX_TOGGLE, (void*)pEntry );
400 else
402 sal_uInt16 nCheck = GetCheckButtonState( GetEntry(nSelPos), 1 ) == SV_BUTTON_CHECKED ? 1 : 0;
403 if(GetCheckButtonState( GetEntry(nSelPos), 0 ))
404 nCheck += 2;
405 nCheck--;
406 nCheck &= 3;
407 CheckEntryPos(nSelPos, 1, 0 != (nCheck & 1));
408 CheckEntryPos(nSelPos, 0, 0 != (nCheck & 2));
411 else
412 SvxSimpleTable::KeyInput(rKEvt);
415 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */