1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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"
26 #include <dialmgr.hxx>
28 #include "svtools/svlbitm.hxx"
29 #include "svtools/treelistentry.hxx"
31 enum MSFltrPg2_CheckBoxEntries
{
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() );
67 IMPL_LINK_NOARG(OfaMSFilterTabPage
, LoadExcelBasicCheckHdl_Impl
)
69 aEBasicExectblCB
->Enable( aEBasicCodeCB
->IsChecked() );
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();
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
);
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
)),
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
);
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
);
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
);
224 void OfaMSFilterTabPage2::Reset( const SfxItemSet
& )
226 SvtFilterOptions
& rOpt
= SvtFilterOptions::Get();
228 aCheckLB
.SetUpdateMode(sal_False
);
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;
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
) );
266 SvLBoxButton
* pItem
= (SvLBoxButton
*)(pEntry
->GetItem( nCol
));
267 if (pItem
&& pItem
->GetType() == SV_ITEM_ID_LBOXBUTTON
)
269 if( (rOpt
.*pArr
->FnIs
)() )
270 pItem
->SetStateChecked();
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();
303 if ( _nType
== sal_IntPtr( pEntry
->GetUserData() ) )
305 pEntry
= aCheckLB
.Next( pEntry
);
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
)
344 case SV_BUTTON_CHECKED
:
345 pItem
->SetStateChecked();
348 case SV_BUTTON_UNCHECKED
:
349 pItem
->SetStateUnchecked();
352 case SV_BUTTON_TRISTATE
:
353 pItem
->SetStateTristate();
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
);
376 void OfaMSFilterTabPage2::MSFltrSimpleTable::CheckEntryPos(sal_uLong nPos
, sal_uInt16 nCol
, sal_Bool bChecked
)
378 if ( nPos
< GetEntryCount() )
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;
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
);
402 sal_uInt16 nCheck
= GetCheckButtonState( GetEntry(nSelPos
), 1 ) == SV_BUTTON_CHECKED
? 1 : 0;
403 if(GetCheckButtonState( GetEntry(nSelPos
), 0 ))
407 CheckEntryPos(nSelPos
, 1, 0 != (nCheck
& 1));
408 CheckEntryPos(nSelPos
, 0, 0 != (nCheck
& 2));
412 SvxSimpleTable::KeyInput(rKEvt
);
415 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */