summaryrefslogtreecommitdiff
path: root/cui/source/options/optfltr.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cui/source/options/optfltr.cxx')
-rw-r--r--cui/source/options/optfltr.cxx439
1 files changed, 439 insertions, 0 deletions
diff --git a/cui/source/options/optfltr.cxx b/cui/source/options/optfltr.cxx
new file mode 100644
index 000000000000..feb38daff447
--- /dev/null
+++ b/cui/source/options/optfltr.cxx
@@ -0,0 +1,439 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: optfltr.cxx,v $
+ * $Revision: 1.16 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_cui.hxx"
+
+// include ---------------------------------------------------------------
+#include <unotools/moduleoptions.hxx>
+#include <unotools/fltrcfg.hxx>
+#include "optfltr.hxx"
+#include "optfltr.hrc"
+#include <cuires.hrc>
+#include "helpid.hrc"
+#include <dialmgr.hxx>
+
+enum MSFltrPg2_CheckBoxEntries {
+ Math,
+ Writer,
+ Calc,
+ Impress,
+ InvalidCBEntry
+};
+
+#define CBCOL_FIRST 0
+#define CBCOL_SECOND 1
+
+// -----------------------------------------------------------------------
+
+OfaMSFilterTabPage::OfaMSFilterTabPage(Window* pParent, const SfxItemSet& rSet)
+ : SfxTabPage( pParent, CUI_RES( RID_OFAPAGE_MSFILTEROPT ), rSet ),
+ aMSWordGB ( this, CUI_RES( GB_WORD ) ),
+ aWBasicCodeCB ( this, CUI_RES( CB_WBAS_CODE ) ),
+ aWBasicStgCB ( this, CUI_RES( CB_WBAS_STG ) ),
+ aMSExcelGB ( this, CUI_RES( GB_EXCEL ) ),
+ aEBasicCodeCB ( this, CUI_RES( CB_EBAS_CODE ) ),
+ aEBasicExectblCB( this, CUI_RES( CB_EBAS_EXECTBL ) ),
+ aEBasicStgCB ( this, CUI_RES( CB_EBAS_STG ) ),
+ aMSPPointGB ( this, CUI_RES( GB_PPOINT ) ),
+ aPBasicCodeCB ( this, CUI_RES( CB_PBAS_CODE ) ),
+ aPBasicStgCB ( this, CUI_RES( CB_PBAS_STG ) )
+{
+ FreeResource();
+
+ aEBasicCodeCB.SetClickHdl( LINK( this, OfaMSFilterTabPage, LoadExcelBasicCheckHdl_Impl ) );
+}
+
+OfaMSFilterTabPage::~OfaMSFilterTabPage()
+{
+}
+
+IMPL_LINK( OfaMSFilterTabPage, LoadExcelBasicCheckHdl_Impl, CheckBox*, EMPTYARG )
+{
+ aEBasicExectblCB.Enable( aEBasicCodeCB.IsChecked() );
+ return 0;
+}
+
+SfxTabPage* OfaMSFilterTabPage::Create( Window* pParent,
+ const SfxItemSet& rAttrSet )
+{
+ return new OfaMSFilterTabPage( pParent, rAttrSet );
+}
+
+BOOL OfaMSFilterTabPage::FillItemSet( SfxItemSet& )
+{
+ SvtFilterOptions* pOpt = SvtFilterOptions::Get();
+
+ BOOL bFlag;
+ if( aWBasicCodeCB.GetSavedValue() != (bFlag = aWBasicCodeCB.IsChecked()))
+ pOpt->SetLoadWordBasicCode( bFlag );
+ if( aWBasicStgCB.GetSavedValue() != (bFlag = aWBasicStgCB.IsChecked()))
+ pOpt->SetLoadWordBasicStorage( bFlag );
+
+ if( aEBasicCodeCB.GetSavedValue() != (bFlag = aEBasicCodeCB.IsChecked()))
+ pOpt->SetLoadExcelBasicCode( bFlag );
+ if( aEBasicExectblCB.GetSavedValue() != (bFlag = aEBasicExectblCB.IsChecked()))
+ pOpt->SetLoadExcelBasicExecutable( bFlag );
+ if( aEBasicStgCB.GetSavedValue() != (bFlag = aEBasicStgCB.IsChecked()))
+ pOpt->SetLoadExcelBasicStorage( bFlag );
+
+ if( aPBasicCodeCB.GetSavedValue() != (bFlag = aPBasicCodeCB.IsChecked()))
+ pOpt->SetLoadPPointBasicCode( bFlag );
+ if( aPBasicStgCB.GetSavedValue() != (bFlag = aPBasicStgCB.IsChecked()))
+ pOpt->SetLoadPPointBasicStorage( bFlag );
+
+ return FALSE;
+}
+
+/*-----------------02.09.96 13.47-------------------
+
+--------------------------------------------------*/
+
+void OfaMSFilterTabPage::Reset( const SfxItemSet& )
+{
+ SvtFilterOptions* pOpt = SvtFilterOptions::Get();
+
+ aWBasicCodeCB.Check( pOpt->IsLoadWordBasicCode() );
+ aWBasicCodeCB.SaveValue();
+ aWBasicStgCB.Check( pOpt->IsLoadWordBasicStorage() );
+ aWBasicStgCB.SaveValue();
+
+ aEBasicCodeCB.Check( pOpt->IsLoadExcelBasicCode() );
+ aEBasicCodeCB.SaveValue();
+ aEBasicExectblCB.Check( pOpt->IsLoadExcelBasicExecutable() );
+ aEBasicExectblCB.SaveValue();
+ aEBasicStgCB.Check( pOpt->IsLoadExcelBasicStorage() );
+ aEBasicStgCB.SaveValue();
+ LoadExcelBasicCheckHdl_Impl( &aEBasicCodeCB );
+
+ aPBasicCodeCB.Check( pOpt->IsLoadPPointBasicCode() );
+ aPBasicCodeCB.SaveValue();
+ aPBasicStgCB.Check( pOpt->IsLoadPPointBasicStorage() );
+ aPBasicStgCB.SaveValue();
+
+}
+
+/*-----------------29.06.00 13:22-------------------
+ *
+ * --------------------------------------------------*/
+OfaMSFilterTabPage2::OfaMSFilterTabPage2( Window* pParent,
+ const SfxItemSet& rSet )
+ : SfxTabPage( pParent, CUI_RES( RID_OFAPAGE_MSFILTEROPT2 ), rSet ),
+ aCheckLB ( this, CUI_RES( CLB_SETTINGS )),
+ aHeader1FT ( this, CUI_RES( FT_HEADER1_EXPLANATION )),
+ aHeader2FT ( this, CUI_RES( FT_HEADER2_EXPLANATION )),
+ sHeader1 ( CUI_RES( ST_HEADER1 )),
+ sHeader2 ( CUI_RES( ST_HEADER2 )),
+ sChgToFromMath ( CUI_RES( ST_CHG_MATH )),
+ sChgToFromWriter ( CUI_RES( ST_CHG_WRITER )),
+ sChgToFromCalc ( CUI_RES( ST_CHG_CALC )),
+ sChgToFromImpress ( CUI_RES( ST_CHG_IMPRESS )),
+ pCheckButtonData(0)
+{
+ FreeResource();
+
+ static long aStaticTabs[] = { 3, 0, 20, 40 };
+ aCheckLB.SvxSimpleTable::SetTabs( aStaticTabs );
+
+ String sHeader( sHeader1 );
+ (( sHeader += '\t' ) += sHeader2 ) += '\t';
+ aCheckLB.InsertHeaderEntry( sHeader, HEADERBAR_APPEND,
+ HIB_CENTER | HIB_VCENTER | HIB_FIXEDPOS | HIB_FIXED );
+
+ aCheckLB.SetHelpId( HID_OFAPAGE_MSFLTR2_CLB );
+ aCheckLB.SetWindowBits( WB_HSCROLL| WB_VSCROLL );
+}
+
+OfaMSFilterTabPage2::~OfaMSFilterTabPage2()
+{
+ delete pCheckButtonData;
+}
+
+SfxTabPage* OfaMSFilterTabPage2::Create( Window* pParent,
+ const SfxItemSet& rAttrSet )
+{
+ return new OfaMSFilterTabPage2( pParent, rAttrSet );
+}
+
+BOOL OfaMSFilterTabPage2::FillItemSet( SfxItemSet& )
+{
+ BOOL bModified = FALSE;
+ SvtFilterOptions* pOpt = SvtFilterOptions::Get();
+
+ static struct ChkCBoxEntries{
+ MSFltrPg2_CheckBoxEntries eType;
+ BOOL (SvtFilterOptions:: *FnIs)() const;
+ void (SvtFilterOptions:: *FnSet)( BOOL bFlag );
+ } aChkArr[] = {
+ { Math, &SvtFilterOptions::IsMathType2Math,
+ &SvtFilterOptions::SetMathType2Math },
+ { Math, &SvtFilterOptions::IsMath2MathType,
+ &SvtFilterOptions::SetMath2MathType },
+ { Writer, &SvtFilterOptions::IsWinWord2Writer,
+ &SvtFilterOptions::SetWinWord2Writer },
+ { Writer, &SvtFilterOptions::IsWriter2WinWord,
+ &SvtFilterOptions::SetWriter2WinWord },
+ { Calc, &SvtFilterOptions::IsExcel2Calc,
+ &SvtFilterOptions::SetExcel2Calc },
+ { Calc, &SvtFilterOptions::IsCalc2Excel,
+ &SvtFilterOptions::SetCalc2Excel },
+ { Impress, &SvtFilterOptions::IsPowerPoint2Impress,
+ &SvtFilterOptions::SetPowerPoint2Impress },
+ { Impress, &SvtFilterOptions::IsImpress2PowerPoint,
+ &SvtFilterOptions::SetImpress2PowerPoint },
+ { InvalidCBEntry, 0, 0 }
+ };
+
+ BOOL bCheck, bFirst = TRUE;
+ for( const ChkCBoxEntries* pArr = aChkArr;
+ InvalidCBEntry != pArr->eType; ++pArr, bFirst = !bFirst )
+ {
+ USHORT nCol = bFirst ? 1 : 2;
+ SvLBoxEntry* pEntry = GetEntry4Type( pArr->eType );
+ if( pEntry )
+ {
+ SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem( nCol ));
+ if( pItem && ((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON )
+ {
+ USHORT nButtonFlags = pItem->GetButtonFlags();
+ bCheck = SV_BUTTON_CHECKED ==
+ pCheckButtonData->ConvertToButtonState( nButtonFlags );
+
+ if( bCheck != (pOpt->*pArr->FnIs)() )
+ {
+ bModified = TRUE;
+ (pOpt->*pArr->FnSet)( bCheck );
+ }
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+void OfaMSFilterTabPage2::Reset( const SfxItemSet& )
+{
+ SvtFilterOptions* pOpt = SvtFilterOptions::Get();
+
+ aCheckLB.SetUpdateMode(FALSE);
+ aCheckLB.Clear();
+
+ SvtModuleOptions aModuleOpt;
+
+ // int the same sequence as the enums of MSFltrPg2_CheckBoxEntries
+ if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SMATH ) )
+ InsertEntry( sChgToFromMath, static_cast< sal_IntPtr >( Math ) );
+ if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SWRITER ) )
+ InsertEntry( sChgToFromWriter, static_cast< sal_IntPtr >( Writer ) );
+ if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SCALC ) )
+ InsertEntry( sChgToFromCalc, static_cast< sal_IntPtr >( Calc ) );
+ if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SIMPRESS ) )
+ InsertEntry( sChgToFromImpress, static_cast< sal_IntPtr >( Impress ) );
+
+ static struct ChkCBoxEntries{
+ MSFltrPg2_CheckBoxEntries eType;
+ BOOL (SvtFilterOptions:: *FnIs)() const;
+ } aChkArr[] = {
+ { Math, &SvtFilterOptions::IsMathType2Math },
+ { Math, &SvtFilterOptions::IsMath2MathType },
+ { Writer, &SvtFilterOptions::IsWinWord2Writer },
+ { Writer, &SvtFilterOptions::IsWriter2WinWord },
+ { Calc, &SvtFilterOptions::IsExcel2Calc },
+ { Calc, &SvtFilterOptions::IsCalc2Excel },
+ { Impress, &SvtFilterOptions::IsPowerPoint2Impress },
+ { Impress, &SvtFilterOptions::IsImpress2PowerPoint },
+ { InvalidCBEntry, NULL }
+ };
+
+ BOOL bFirst = TRUE;
+ for( const ChkCBoxEntries* pArr = aChkArr;
+ InvalidCBEntry != pArr->eType; ++pArr, bFirst = !bFirst )
+ {
+ USHORT nCol = bFirst ? 1 : 2;
+ SvLBoxEntry* pEntry = GetEntry4Type( static_cast< sal_IntPtr >( pArr->eType ) );
+ if( pEntry )
+ {
+ SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem( nCol ));
+ if( pItem && ((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON )
+ {
+ if( (pOpt->*pArr->FnIs)() )
+ pItem->SetStateChecked();
+ else
+ pItem->SetStateUnchecked();
+ aCheckLB.InvalidateEntry( pEntry );
+ }
+ }
+ }
+ aCheckLB.SetUpdateMode( TRUE );
+}
+
+void OfaMSFilterTabPage2::InsertEntry( const String& _rTxt, sal_IntPtr _nType )
+{
+ SvLBoxEntry* pEntry = new SvLBoxEntry;
+
+ if( !pCheckButtonData )
+ pCheckButtonData = new SvLBoxButtonData( &aCheckLB );
+
+ pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0));
+ pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox,
+ 0, pCheckButtonData ) );
+ pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox,
+ 0, pCheckButtonData ) );
+ pEntry->AddItem( new SvLBoxString( pEntry, 0, _rTxt ) );
+
+ pEntry->SetUserData( (void*)_nType );
+ aCheckLB.Insert( pEntry );
+}
+
+SvLBoxEntry* OfaMSFilterTabPage2::GetEntry4Type( sal_IntPtr _nType ) const
+{
+ SvLBoxEntry* pEntry = aCheckLB.First();
+ while ( pEntry )
+ {
+ if ( _nType == sal_IntPtr( pEntry->GetUserData() ) )
+ return pEntry;
+ pEntry = aCheckLB.Next( pEntry );
+ }
+ return NULL;
+}
+
+void OfaMSFilterTabPage2::MSFltrSimpleTable::SetTabs()
+{
+ SvxSimpleTable::SetTabs();
+ USHORT nAdjust = SV_LBOXTAB_ADJUST_RIGHT|SV_LBOXTAB_ADJUST_LEFT|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_ADJUST_NUMERIC|SV_LBOXTAB_FORCE;
+
+ if( aTabs.Count() > 1 )
+ {
+ SvLBoxTab* pTab = (SvLBoxTab*)aTabs.GetObject(1);
+ pTab->nFlags &= ~nAdjust;
+ pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE;
+ }
+ if( aTabs.Count() > 2 )
+ {
+ SvLBoxTab* pTab = (SvLBoxTab*)aTabs.GetObject(2);
+ pTab->nFlags &= ~nAdjust;
+ pTab->nFlags |= SV_LBOXTAB_PUSHABLE|SV_LBOXTAB_ADJUST_CENTER|SV_LBOXTAB_FORCE;
+ }
+}
+
+void OfaMSFilterTabPage2::MSFltrSimpleTable::HBarClick()
+{
+ // Sortierung durch diese Ueberladung abgeklemmt
+}
+/* -----------------------------2002/06/20 11:51------------------------------
+
+ ---------------------------------------------------------------------------*/
+void OfaMSFilterTabPage2::MSFltrSimpleTable::SetCheckButtonState(
+ SvLBoxEntry* pEntry, USHORT nCol, SvButtonState eState)
+{
+ SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1));
+
+ DBG_ASSERT(pItem,"SetCheckButton:Item not found");
+ if (((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON)
+ {
+ switch( eState )
+ {
+ case SV_BUTTON_CHECKED:
+ pItem->SetStateChecked();
+ break;
+
+ case SV_BUTTON_UNCHECKED:
+ pItem->SetStateUnchecked();
+ break;
+
+ case SV_BUTTON_TRISTATE:
+ pItem->SetStateTristate();
+ break;
+ }
+ InvalidateEntry( pEntry );
+ }
+}
+/* -----------------------------2002/06/20 11:56------------------------------
+
+ ---------------------------------------------------------------------------*/
+SvButtonState OfaMSFilterTabPage2::MSFltrSimpleTable::GetCheckButtonState(
+ SvLBoxEntry* pEntry, USHORT nCol ) const
+{
+ SvButtonState eState = SV_BUTTON_UNCHECKED;
+ SvLBoxButton* pItem = (SvLBoxButton*)(pEntry->GetItem(nCol + 1));
+ DBG_ASSERT(pItem,"GetChButnState:Item not found");
+
+ if (((SvLBoxItem*)pItem)->IsA() == SV_ITEM_ID_LBOXBUTTON)
+ {
+ USHORT nButtonFlags = pItem->GetButtonFlags();
+ eState = pCheckButtonData->ConvertToButtonState( nButtonFlags );
+ }
+
+ return eState;
+}
+/* -----------------------------2002/06/20 11:57------------------------------
+
+ ---------------------------------------------------------------------------*/
+void OfaMSFilterTabPage2::MSFltrSimpleTable::CheckEntryPos(ULONG nPos, USHORT nCol, BOOL bChecked)
+{
+ if ( nPos < GetEntryCount() )
+ SetCheckButtonState(
+ GetEntry(nPos),
+ nCol,
+ bChecked ? SvButtonState( SV_BUTTON_CHECKED ) :
+ SvButtonState( SV_BUTTON_UNCHECKED ) );
+}
+/* -----------------------------2002/06/20 11:51------------------------------
+
+ ---------------------------------------------------------------------------*/
+void OfaMSFilterTabPage2::MSFltrSimpleTable::KeyInput( const KeyEvent& rKEvt )
+{
+ if(!rKEvt.GetKeyCode().GetModifier() &&
+ KEY_SPACE == rKEvt.GetKeyCode().GetCode())
+ {
+ ULONG nSelPos = GetModel()->GetAbsPos(GetCurEntry());
+ USHORT nCol = GetCurrentTabPos() - 1;
+ if ( nCol < 2 )
+ {
+ SvLBoxEntry* pEntry = GetEntry( nSelPos );
+ sal_Bool bIsChecked = ( GetCheckButtonState( pEntry, nCol ) == SV_BUTTON_CHECKED );
+ CheckEntryPos( nSelPos, nCol, !bIsChecked );
+ CallImplEventListeners( VCLEVENT_CHECKBOX_TOGGLE, (void*)pEntry );
+ }
+ else
+ {
+ USHORT nCheck = GetCheckButtonState( GetEntry(nSelPos), 1 ) == SV_BUTTON_CHECKED ? 1 : 0;
+ if(GetCheckButtonState( GetEntry(nSelPos), 0 ))
+ nCheck += 2;
+ nCheck--;
+ nCheck &= 3;
+ CheckEntryPos(nSelPos, 1, 0 != (nCheck & 1));
+ CheckEntryPos(nSelPos, 0, 0 != (nCheck & 2));
+ }
+ }
+ else
+ SvxSimpleTable::KeyInput(rKEvt);
+}
+