xref: /AOO41X/main/cui/source/options/optfltr.cxx (revision 2ee96f1cdb99d49425d866b1ec4c5567f37285e6)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_cui.hxx"
26 
27 // include ---------------------------------------------------------------
28 #include <unotools/moduleoptions.hxx>
29 #include <unotools/fltrcfg.hxx>
30 #include "optfltr.hxx"
31 #include "optfltr.hrc"
32 #include <cuires.hrc>
33 #include "helpid.hrc"
34 #include <dialmgr.hxx>
35 
36 enum MSFltrPg2_CheckBoxEntries {
37     Math,
38     Writer,
39     Calc,
40     Impress,
41     InvalidCBEntry
42 };
43 
44 #define CBCOL_FIRST     0
45 #define CBCOL_SECOND    1
46 
47 // -----------------------------------------------------------------------
48 
OfaMSFilterTabPage(Window * pParent,const SfxItemSet & rSet)49 OfaMSFilterTabPage::OfaMSFilterTabPage(Window* pParent, const SfxItemSet& rSet)
50     : SfxTabPage( pParent, CUI_RES( RID_OFAPAGE_MSFILTEROPT ), rSet ),
51     aMSWordGB       ( this, CUI_RES( GB_WORD        ) ),
52     aWBasicCodeCB   ( this, CUI_RES( CB_WBAS_CODE ) ),
53     aWBasicStgCB    ( this, CUI_RES( CB_WBAS_STG  ) ),
54     aMSExcelGB      ( this, CUI_RES( GB_EXCEL     ) ),
55     aEBasicCodeCB   ( this, CUI_RES( CB_EBAS_CODE ) ),
56     aEBasicExectblCB( this, CUI_RES( CB_EBAS_EXECTBL ) ),
57     aEBasicStgCB    ( this, CUI_RES( CB_EBAS_STG  ) ),
58     aMSPPointGB     ( this, CUI_RES( GB_PPOINT    ) ),
59     aPBasicCodeCB   ( this, CUI_RES( CB_PBAS_CODE ) ),
60     aPBasicStgCB    ( this, CUI_RES( CB_PBAS_STG  ) )
61 {
62     FreeResource();
63 
64     aEBasicCodeCB.SetClickHdl( LINK( this, OfaMSFilterTabPage, LoadExcelBasicCheckHdl_Impl ) );
65 }
66 
~OfaMSFilterTabPage()67 OfaMSFilterTabPage::~OfaMSFilterTabPage()
68 {
69 }
70 
IMPL_LINK(OfaMSFilterTabPage,LoadExcelBasicCheckHdl_Impl,CheckBox *,EMPTYARG)71 IMPL_LINK( OfaMSFilterTabPage, LoadExcelBasicCheckHdl_Impl, CheckBox*, EMPTYARG )
72 {
73     aEBasicExectblCB.Enable( aEBasicCodeCB.IsChecked() );
74     return 0;
75 }
76 
Create(Window * pParent,const SfxItemSet & rAttrSet)77 SfxTabPage* OfaMSFilterTabPage::Create( Window* pParent,
78                                         const SfxItemSet& rAttrSet )
79 {
80     return new OfaMSFilterTabPage( pParent, rAttrSet );
81 }
82 
FillItemSet(SfxItemSet &)83 sal_Bool OfaMSFilterTabPage::FillItemSet( SfxItemSet& )
84 {
85     SvtFilterOptions* pOpt = SvtFilterOptions::Get();
86 
87     sal_Bool bFlag;
88     if( aWBasicCodeCB.GetSavedValue() != (bFlag = aWBasicCodeCB.IsChecked()))
89         pOpt->SetLoadWordBasicCode( bFlag );
90     if( aWBasicStgCB.GetSavedValue() != (bFlag = aWBasicStgCB.IsChecked()))
91         pOpt->SetLoadWordBasicStorage( bFlag );
92 
93     if( aEBasicCodeCB.GetSavedValue() != (bFlag = aEBasicCodeCB.IsChecked()))
94         pOpt->SetLoadExcelBasicCode( bFlag );
95     if( aEBasicExectblCB.GetSavedValue() != (bFlag = aEBasicExectblCB.IsChecked()))
96         pOpt->SetLoadExcelBasicExecutable( bFlag );
97     if( aEBasicStgCB.GetSavedValue() != (bFlag = aEBasicStgCB.IsChecked()))
98         pOpt->SetLoadExcelBasicStorage( bFlag );
99 
100     if( aPBasicCodeCB.GetSavedValue() != (bFlag = aPBasicCodeCB.IsChecked()))
101         pOpt->SetLoadPPointBasicCode( bFlag );
102     if( aPBasicStgCB.GetSavedValue() != (bFlag = aPBasicStgCB.IsChecked()))
103         pOpt->SetLoadPPointBasicStorage( bFlag );
104 
105     return sal_False;
106 }
107 
108 /*-----------------02.09.96 13.47-------------------
109 
110 --------------------------------------------------*/
111 
Reset(const SfxItemSet &)112 void OfaMSFilterTabPage::Reset( const SfxItemSet& )
113 {
114     SvtFilterOptions* pOpt = SvtFilterOptions::Get();
115 
116     aWBasicCodeCB.Check( pOpt->IsLoadWordBasicCode() );
117     aWBasicCodeCB.SaveValue();
118     aWBasicStgCB.Check( pOpt->IsLoadWordBasicStorage() );
119     aWBasicStgCB.SaveValue();
120 
121     aEBasicCodeCB.Check( pOpt->IsLoadExcelBasicCode() );
122     aEBasicCodeCB.SaveValue();
123     aEBasicExectblCB.Check( pOpt->IsLoadExcelBasicExecutable() );
124     aEBasicExectblCB.SaveValue();
125     aEBasicStgCB.Check( pOpt->IsLoadExcelBasicStorage() );
126     aEBasicStgCB.SaveValue();
127     LoadExcelBasicCheckHdl_Impl( &aEBasicCodeCB );
128 
129     aPBasicCodeCB.Check( pOpt->IsLoadPPointBasicCode() );
130     aPBasicCodeCB.SaveValue();
131     aPBasicStgCB.Check( pOpt->IsLoadPPointBasicStorage() );
132     aPBasicStgCB.SaveValue();
133 
134 }
135 
136 /*-----------------29.06.00 13:22-------------------
137  *
138  * --------------------------------------------------*/
OfaMSFilterTabPage2(Window * pParent,const SfxItemSet & rSet)139 OfaMSFilterTabPage2::OfaMSFilterTabPage2( Window* pParent,
140                                         const SfxItemSet& rSet )
141     : SfxTabPage( pParent, CUI_RES( RID_OFAPAGE_MSFILTEROPT2 ), rSet ),
142     aCheckLB            ( this, CUI_RES( CLB_SETTINGS   )),
143     aHeader1FT          ( this, CUI_RES( FT_HEADER1_EXPLANATION )),
144     aHeader2FT          ( this, CUI_RES( FT_HEADER2_EXPLANATION )),
145     sHeader1            ( CUI_RES( ST_HEADER1 )),
146     sHeader2            ( CUI_RES( ST_HEADER2 )),
147     sChgToFromMath      ( CUI_RES( ST_CHG_MATH  )),
148     sChgToFromWriter    ( CUI_RES( ST_CHG_WRITER )),
149     sChgToFromCalc      ( CUI_RES( ST_CHG_CALC )),
150     sChgToFromImpress   ( CUI_RES( ST_CHG_IMPRESS )),
151     pCheckButtonData(0)
152 {
153     FreeResource();
154 
155     static long aStaticTabs[] = { 3, 0, 20, 40 };
156     aCheckLB.SvxSimpleTable::SetTabs( aStaticTabs );
157 
158     String sHeader( sHeader1 );
159     (( sHeader += '\t' ) += sHeader2 ) += '\t';
160     aCheckLB.InsertHeaderEntry( sHeader, HEADERBAR_APPEND,
161                     HIB_CENTER | HIB_VCENTER | HIB_FIXEDPOS | HIB_FIXED );
162 
163     aCheckLB.SetHelpId( HID_OFAPAGE_MSFLTR2_CLB );
164     aCheckLB.SetStyle( aCheckLB.GetStyle()|WB_HSCROLL| WB_VSCROLL );
165 }
166 
~OfaMSFilterTabPage2()167 OfaMSFilterTabPage2::~OfaMSFilterTabPage2()
168 {
169     delete pCheckButtonData;
170 }
171 
Create(Window * pParent,const SfxItemSet & rAttrSet)172 SfxTabPage* OfaMSFilterTabPage2::Create( Window* pParent,
173                                 const SfxItemSet& rAttrSet )
174 {
175     return new OfaMSFilterTabPage2( pParent, rAttrSet );
176 }
177 
FillItemSet(SfxItemSet &)178 sal_Bool OfaMSFilterTabPage2::FillItemSet( SfxItemSet& )
179 {
180     sal_Bool bModified = sal_False;
181     SvtFilterOptions* pOpt = SvtFilterOptions::Get();
182 
183     static struct ChkCBoxEntries{
184         MSFltrPg2_CheckBoxEntries eType;
185         sal_Bool (SvtFilterOptions:: *FnIs)() const;
186         void (SvtFilterOptions:: *FnSet)( sal_Bool bFlag );
187     } aChkArr[] = {
188         { Math,     &SvtFilterOptions::IsMathType2Math,
189                         &SvtFilterOptions::SetMathType2Math },
190         { Math,     &SvtFilterOptions::IsMath2MathType,
191                         &SvtFilterOptions::SetMath2MathType },
192         { Writer,   &SvtFilterOptions::IsWinWord2Writer,
193                         &SvtFilterOptions::SetWinWord2Writer },
194         { Writer,   &SvtFilterOptions::IsWriter2WinWord,
195                         &SvtFilterOptions::SetWriter2WinWord },
196         { Calc,     &SvtFilterOptions::IsExcel2Calc,
197                         &SvtFilterOptions::SetExcel2Calc },
198         { Calc,     &SvtFilterOptions::IsCalc2Excel,
199                         &SvtFilterOptions::SetCalc2Excel },
200         { Impress,  &SvtFilterOptions::IsPowerPoint2Impress,
201                         &SvtFilterOptions::SetPowerPoint2Impress },
202         { Impress,  &SvtFilterOptions::IsImpress2PowerPoint,
203                         &SvtFilterOptions::SetImpress2PowerPoint },
204         { InvalidCBEntry, 0, 0 }
205     };
206 
207     sal_Bool bCheck, bFirst = sal_True;
208     for( const ChkCBoxEntries* pArr = aChkArr;
209             InvalidCBEntry != pArr->eType; ++pArr, bFirst = !bFirst )
210     {
211         sal_uInt16 nCol = bFirst ? 1 : 2;
212         SvLBoxEntry* pEntry = GetEntry4Type( pArr->eType );
213         if( pEntry )
214         {
215             SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem( nCol ));
216             if( pItem && ((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON )
217             {
218                 sal_uInt16 nButtonFlags = pItem->GetButtonFlags();
219                 bCheck = SV_BUTTON_CHECKED ==
220                         pCheckButtonData->ConvertToButtonState( nButtonFlags );
221 
222                 if( bCheck != (pOpt->*pArr->FnIs)() )
223                 {
224                     bModified = sal_True;
225                     (pOpt->*pArr->FnSet)( bCheck );
226                 }
227             }
228         }
229     }
230 
231     return sal_True;
232 }
233 
Reset(const SfxItemSet &)234 void OfaMSFilterTabPage2::Reset( const SfxItemSet& )
235 {
236     SvtFilterOptions* pOpt = SvtFilterOptions::Get();
237 
238     aCheckLB.SetUpdateMode(sal_False);
239     aCheckLB.Clear();
240 
241     SvtModuleOptions aModuleOpt;
242 
243     // int the same sequence as the enums of MSFltrPg2_CheckBoxEntries
244     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SMATH ) )
245         InsertEntry( sChgToFromMath, static_cast< sal_IntPtr >( Math ) );
246     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SWRITER ) )
247         InsertEntry( sChgToFromWriter, static_cast< sal_IntPtr >( Writer ) );
248     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SCALC ) )
249         InsertEntry( sChgToFromCalc, static_cast< sal_IntPtr >( Calc ) );
250     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SIMPRESS ) )
251         InsertEntry( sChgToFromImpress, static_cast< sal_IntPtr >( Impress ) );
252 
253     static struct ChkCBoxEntries{
254         MSFltrPg2_CheckBoxEntries eType;
255         sal_Bool (SvtFilterOptions:: *FnIs)() const;
256     } aChkArr[] = {
257         { Math,     &SvtFilterOptions::IsMathType2Math },
258         { Math,     &SvtFilterOptions::IsMath2MathType },
259         { Writer,   &SvtFilterOptions::IsWinWord2Writer },
260         { Writer,   &SvtFilterOptions::IsWriter2WinWord },
261         { Calc,     &SvtFilterOptions::IsExcel2Calc },
262         { Calc,     &SvtFilterOptions::IsCalc2Excel },
263         { Impress,  &SvtFilterOptions::IsPowerPoint2Impress },
264         { Impress,  &SvtFilterOptions::IsImpress2PowerPoint },
265         { InvalidCBEntry, NULL }
266     };
267 
268     sal_Bool bFirst = sal_True;
269     for( const ChkCBoxEntries* pArr = aChkArr;
270             InvalidCBEntry != pArr->eType; ++pArr, bFirst = !bFirst )
271     {
272         sal_uInt16 nCol = bFirst ? 1 : 2;
273         SvLBoxEntry* pEntry = GetEntry4Type( static_cast< sal_IntPtr >( pArr->eType ) );
274         if( pEntry )
275         {
276             SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem( nCol ));
277             if( pItem && ((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON )
278             {
279                 if( (pOpt->*pArr->FnIs)() )
280                     pItem->SetStateChecked();
281                 else
282                     pItem->SetStateUnchecked();
283                 aCheckLB.InvalidateEntry( pEntry );
284             }
285         }
286     }
287     aCheckLB.SetUpdateMode( sal_True );
288 }
289 
InsertEntry(const String & _rTxt,sal_IntPtr _nType)290 void OfaMSFilterTabPage2::InsertEntry( const String& _rTxt, sal_IntPtr _nType )
291 {
292     SvLBoxEntry* pEntry = new SvLBoxEntry;
293 
294     if( !pCheckButtonData )
295         pCheckButtonData = new SvLBoxButtonData( &aCheckLB );
296 
297     pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0));
298     pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox,
299                                        0, pCheckButtonData ) );
300     pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox,
301                                        0, pCheckButtonData ) );
302     pEntry->AddItem( new SvLBoxString( pEntry, 0, _rTxt ) );
303 
304     pEntry->SetUserData( (void*)_nType );
305     aCheckLB.Insert( pEntry );
306 }
307 
GetEntry4Type(sal_IntPtr _nType) const308 SvLBoxEntry* OfaMSFilterTabPage2::GetEntry4Type( sal_IntPtr _nType ) const
309 {
310     SvLBoxEntry* pEntry = aCheckLB.First();
311     while ( pEntry )
312     {
313         if ( _nType == sal_IntPtr( pEntry->GetUserData() ) )
314             return pEntry;
315         pEntry = aCheckLB.Next( pEntry );
316     }
317     return NULL;
318 }
319 
SetTabs()320 void OfaMSFilterTabPage2::MSFltrSimpleTable::SetTabs()
321 {
322     SvxSimpleTable::SetTabs();
323     sal_uInt16 nAdjust = SV_LBOXTAB_ADJUST_RIGHT|SV_LBOXTAB_ADJUST_LEFT|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_ADJUST_NUMERIC|SV_LBOXTAB_FORCE;
324 
325     if( aTabs.Count() > 1 )
326     {
327         SvLBoxTab* pTab = (SvLBoxTab*)aTabs.GetObject(1);
328         pTab->nFlags &= ~nAdjust;
329         pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE;
330     }
331     if( aTabs.Count() > 2 )
332     {
333         SvLBoxTab* pTab = (SvLBoxTab*)aTabs.GetObject(2);
334         pTab->nFlags &= ~nAdjust;
335         pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE;
336     }
337 }
338 
HBarClick()339 void OfaMSFilterTabPage2::MSFltrSimpleTable::HBarClick()
340 {
341     // Sortierung durch diese Ueberladung abgeklemmt
342 }
343 /* -----------------------------2002/06/20 11:51------------------------------
344 
345  ---------------------------------------------------------------------------*/
SetCheckButtonState(SvLBoxEntry * pEntry,sal_uInt16 nCol,SvButtonState eState)346 void OfaMSFilterTabPage2::MSFltrSimpleTable::SetCheckButtonState(
347                             SvLBoxEntry* pEntry, sal_uInt16 nCol, SvButtonState eState)
348 {
349     SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1));
350 
351     DBG_ASSERT(pItem,"SetCheckButton:Item not found");
352     if (((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON)
353     {
354         switch( eState )
355         {
356             case SV_BUTTON_CHECKED:
357                 pItem->SetStateChecked();
358                 break;
359 
360             case SV_BUTTON_UNCHECKED:
361                 pItem->SetStateUnchecked();
362                 break;
363 
364             case SV_BUTTON_TRISTATE:
365                 pItem->SetStateTristate();
366                 break;
367         }
368         InvalidateEntry( pEntry );
369     }
370 }
371 /* -----------------------------2002/06/20 11:56------------------------------
372 
373  ---------------------------------------------------------------------------*/
GetCheckButtonState(SvLBoxEntry * pEntry,sal_uInt16 nCol) const374 SvButtonState OfaMSFilterTabPage2::MSFltrSimpleTable::GetCheckButtonState(
375                                     SvLBoxEntry* pEntry, sal_uInt16 nCol ) const
376 {
377     SvButtonState eState = SV_BUTTON_UNCHECKED;
378     SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1));
379     DBG_ASSERT(pItem,"GetChButnState:Item not found");
380 
381     if (((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON)
382     {
383         sal_uInt16 nButtonFlags = pItem->GetButtonFlags();
384         eState = pCheckButtonData->ConvertToButtonState( nButtonFlags );
385     }
386 
387     return eState;
388 }
389 /* -----------------------------2002/06/20 11:57------------------------------
390 
391  ---------------------------------------------------------------------------*/
CheckEntryPos(sal_uLong nPos,sal_uInt16 nCol,sal_Bool bChecked)392 void OfaMSFilterTabPage2::MSFltrSimpleTable::CheckEntryPos(sal_uLong nPos, sal_uInt16 nCol, sal_Bool bChecked)
393 {
394     if ( nPos < GetEntryCount() )
395         SetCheckButtonState(
396             GetEntry(nPos),
397             nCol,
398             bChecked ? SvButtonState( SV_BUTTON_CHECKED ) :
399                                        SvButtonState( SV_BUTTON_UNCHECKED ) );
400 }
401 /* -----------------------------2002/06/20 11:51------------------------------
402 
403  ---------------------------------------------------------------------------*/
KeyInput(const KeyEvent & rKEvt)404 void OfaMSFilterTabPage2::MSFltrSimpleTable::KeyInput( const KeyEvent& rKEvt )
405 {
406     if(!rKEvt.GetKeyCode().GetModifier() &&
407         KEY_SPACE == rKEvt.GetKeyCode().GetCode())
408     {
409         sal_uLong nSelPos = GetModel()->GetAbsPos(GetCurEntry());
410         sal_uInt16 nCol = GetCurrentTabPos() - 1;
411         if ( nCol < 2 )
412         {
413             SvLBoxEntry* pEntry = GetEntry( nSelPos );
414             sal_Bool bIsChecked = ( GetCheckButtonState( pEntry, nCol ) == SV_BUTTON_CHECKED );
415             CheckEntryPos( nSelPos, nCol, !bIsChecked );
416             CallImplEventListeners( VCLEVENT_CHECKBOX_TOGGLE, (void*)pEntry );
417         }
418         else
419         {
420             sal_uInt16 nCheck = GetCheckButtonState( GetEntry(nSelPos), 1 ) == SV_BUTTON_CHECKED ? 1 : 0;
421             if(GetCheckButtonState( GetEntry(nSelPos), 0 ))
422                 nCheck += 2;
423             nCheck--;
424             nCheck &= 3;
425             CheckEntryPos(nSelPos, 1, 0 != (nCheck & 1));
426             CheckEntryPos(nSelPos, 0, 0 != (nCheck & 2));
427         }
428     }
429     else
430         SvxSimpleTable::KeyInput(rKEvt);
431 }
432 
433