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 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 67 OfaMSFilterTabPage::~OfaMSFilterTabPage() 68 { 69 } 70 71 IMPL_LINK( OfaMSFilterTabPage, LoadExcelBasicCheckHdl_Impl, CheckBox*, EMPTYARG ) 72 { 73 aEBasicExectblCB.Enable( aEBasicCodeCB.IsChecked() ); 74 return 0; 75 } 76 77 SfxTabPage* OfaMSFilterTabPage::Create( Window* pParent, 78 const SfxItemSet& rAttrSet ) 79 { 80 return new OfaMSFilterTabPage( pParent, rAttrSet ); 81 } 82 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 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 * --------------------------------------------------*/ 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 167 OfaMSFilterTabPage2::~OfaMSFilterTabPage2() 168 { 169 delete pCheckButtonData; 170 } 171 172 SfxTabPage* OfaMSFilterTabPage2::Create( Window* pParent, 173 const SfxItemSet& rAttrSet ) 174 { 175 return new OfaMSFilterTabPage2( pParent, rAttrSet ); 176 } 177 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 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 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 308 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 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 339 void OfaMSFilterTabPage2::MSFltrSimpleTable::HBarClick() 340 { 341 // Sortierung durch diese Ueberladung abgeklemmt 342 } 343 /* -----------------------------2002/06/20 11:51------------------------------ 344 345 ---------------------------------------------------------------------------*/ 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 ---------------------------------------------------------------------------*/ 374 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 ---------------------------------------------------------------------------*/ 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 ---------------------------------------------------------------------------*/ 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