/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_scui.hxx" #include "global.hxx" #include "document.hxx" #include "attrib.hxx" #include "scresid.hxx" #include "sc.hrc" #include "attrdlg.hrc" #include "tabpages.hxx" // STATIC DATA ----------------------------------------------------------- static sal_uInt16 pProtectionRanges[] = { SID_SCATTR_PROTECTION, SID_SCATTR_PROTECTION, 0 }; //======================================================================== // Zellschutz-Tabpage: //======================================================================== ScTabPageProtection::ScTabPageProtection( Window* pParent, const SfxItemSet& rCoreAttrs ) : SfxTabPage ( pParent, ScResId( RID_SCPAGE_PROTECTION ), rCoreAttrs ), // aFlProtect ( this, ScResId( FL_PROTECTION ) ), aBtnHideCell ( this, ScResId( BTN_HIDE_ALL ) ), aBtnProtect ( this, ScResId( BTN_PROTECTED ) ), aBtnHideFormula ( this, ScResId( BTN_HIDE_FORMULAR ) ), aTxtHint ( this, ScResId( FT_HINT ) ), aFlPrint ( this, ScResId( FL_PRINT ) ), aBtnHidePrint ( this, ScResId( BTN_HIDE_PRINT ) ), aTxtHint2 ( this, ScResId( FT_HINT2 ) ) { // diese Page braucht ExchangeSupport SetExchangeSupport(); // States werden in Reset gesetzt bTriEnabled = bDontCare = bProtect = bHideForm = bHideCell = bHidePrint = sal_False; aBtnProtect.SetClickHdl( LINK( this, ScTabPageProtection, ButtonClickHdl ) ); aBtnHideCell.SetClickHdl( LINK( this, ScTabPageProtection, ButtonClickHdl ) ); aBtnHideFormula.SetClickHdl( LINK( this, ScTabPageProtection, ButtonClickHdl ) ); aBtnHidePrint.SetClickHdl( LINK( this, ScTabPageProtection, ButtonClickHdl ) ); FreeResource(); } // ----------------------------------------------------------------------- __EXPORT ScTabPageProtection::~ScTabPageProtection() { } //------------------------------------------------------------------------ sal_uInt16* __EXPORT ScTabPageProtection::GetRanges() { return pProtectionRanges; } // ----------------------------------------------------------------------- SfxTabPage* __EXPORT ScTabPageProtection::Create( Window* pParent, const SfxItemSet& rAttrSet ) { return ( new ScTabPageProtection( pParent, rAttrSet ) ); } //------------------------------------------------------------------------ void __EXPORT ScTabPageProtection::Reset( const SfxItemSet& rCoreAttrs ) { // Variablen initialisieren sal_uInt16 nWhich = GetWhich( SID_SCATTR_PROTECTION ); const ScProtectionAttr* pProtAttr = NULL; SfxItemState eItemState = rCoreAttrs.GetItemState( nWhich, sal_False, (const SfxPoolItem**)&pProtAttr ); // handelt es sich um ein Default-Item? if ( eItemState == SFX_ITEM_DEFAULT ) pProtAttr = (const ScProtectionAttr*)&(rCoreAttrs.Get(nWhich)); // bei SFX_ITEM_DONTCARE auf 0 lassen bTriEnabled = ( pProtAttr == NULL ); // TriState, wenn DontCare bDontCare = bTriEnabled; if (bTriEnabled) { // Defaults, die erscheinen wenn ein TriState weggeklickt wird: // (weil alles zusammen ein Attribut ist, kann auch nur alles zusammen // auf DontCare stehen - #38543#) bProtect = sal_True; bHideForm = bHideCell = bHidePrint = sal_False; } else { bProtect = pProtAttr->GetProtection(); bHideCell = pProtAttr->GetHideCell(); bHideForm = pProtAttr->GetHideFormula(); bHidePrint = pProtAttr->GetHidePrint(); } // Controls initialisieren aBtnProtect .EnableTriState( bTriEnabled ); aBtnHideCell .EnableTriState( bTriEnabled ); aBtnHideFormula .EnableTriState( bTriEnabled ); aBtnHidePrint .EnableTriState( bTriEnabled ); UpdateButtons(); } // ----------------------------------------------------------------------- sal_Bool __EXPORT ScTabPageProtection::FillItemSet( SfxItemSet& rCoreAttrs ) { sal_Bool bAttrsChanged = sal_False; sal_uInt16 nWhich = GetWhich( SID_SCATTR_PROTECTION ); const SfxPoolItem* pOldItem = GetOldItem( rCoreAttrs, SID_SCATTR_PROTECTION ); const SfxItemSet& rOldSet = GetItemSet(); SfxItemState eItemState = rOldSet.GetItemState( nWhich, sal_False ); ScProtectionAttr aProtAttr; if ( !bDontCare ) { aProtAttr.SetProtection( bProtect ); aProtAttr.SetHideCell( bHideCell ); aProtAttr.SetHideFormula( bHideForm ); aProtAttr.SetHidePrint( bHidePrint ); if ( bTriEnabled ) bAttrsChanged = sal_True; // DontCare -> richtiger Wert else bAttrsChanged = !pOldItem || !( aProtAttr == *(const ScProtectionAttr*)pOldItem ); } //-------------------------------------------------- if ( bAttrsChanged ) rCoreAttrs.Put( aProtAttr ); else if ( eItemState == SFX_ITEM_DEFAULT ) rCoreAttrs.ClearItem( nWhich ); return bAttrsChanged; } //------------------------------------------------------------------------ int __EXPORT ScTabPageProtection::DeactivatePage( SfxItemSet* pSetP ) { if ( pSetP ) FillItemSet( *pSetP ); return LEAVE_PAGE; } //------------------------------------------------------------------------ IMPL_LINK( ScTabPageProtection, ButtonClickHdl, TriStateBox*, pBox ) { TriState eState = pBox->GetState(); if ( eState == STATE_DONTKNOW ) bDontCare = sal_True; // alles zusammen auf DontCare else { bDontCare = sal_False; // DontCare ueberall aus sal_Bool bOn = ( eState == STATE_CHECK ); // ausgewaehlter Wert if ( pBox == &aBtnProtect ) bProtect = bOn; else if ( pBox == &aBtnHideCell ) bHideCell = bOn; else if ( pBox == &aBtnHideFormula ) bHideForm = bOn; else if ( pBox == &aBtnHidePrint ) bHidePrint = bOn; else { DBG_ERRORFILE("falscher Button"); } } UpdateButtons(); // TriState und Enable-Logik return 0; } //------------------------------------------------------------------------ void ScTabPageProtection::UpdateButtons() { if ( bDontCare ) { aBtnProtect.SetState( STATE_DONTKNOW ); aBtnHideCell.SetState( STATE_DONTKNOW ); aBtnHideFormula.SetState( STATE_DONTKNOW ); aBtnHidePrint.SetState( STATE_DONTKNOW ); } else { aBtnProtect.SetState( bProtect ? STATE_CHECK : STATE_NOCHECK ); aBtnHideCell.SetState( bHideCell ? STATE_CHECK : STATE_NOCHECK ); aBtnHideFormula.SetState( bHideForm ? STATE_CHECK : STATE_NOCHECK ); aBtnHidePrint.SetState( bHidePrint ? STATE_CHECK : STATE_NOCHECK ); } sal_Bool bEnable = ( aBtnHideCell.GetState() != STATE_CHECK ); { aBtnProtect.Enable( bEnable ); aBtnHideFormula.Enable( bEnable ); } }