blob: 0e5729c426cf838e07690231cff115cc9233f4a1 [file] [log] [blame]
/**************************************************************
*
* 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_sc.hxx"
#undef SC_DLLIMPLEMENTATION
#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 );
}
}