Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : #undef SC_DLLIMPLEMENTATION
22 :
23 :
24 :
25 : #include "global.hxx"
26 : #include "document.hxx"
27 : #include "attrib.hxx"
28 : #include "scresid.hxx"
29 : #include "sc.hrc"
30 :
31 : #include "attrdlg.hrc"
32 : #include "tabpages.hxx"
33 :
34 : // STATIC DATA -----------------------------------------------------------
35 :
36 : static sal_uInt16 pProtectionRanges[] =
37 : {
38 : SID_SCATTR_PROTECTION,
39 : SID_SCATTR_PROTECTION,
40 : 0
41 : };
42 :
43 : //========================================================================
44 : // Zellschutz-Tabpage:
45 : //========================================================================
46 :
47 0 : ScTabPageProtection::ScTabPageProtection( Window* pParent,
48 : const SfxItemSet& rCoreAttrs )
49 : : SfxTabPage ( pParent,
50 : ScResId( RID_SCPAGE_PROTECTION ),
51 : rCoreAttrs ),
52 : //
53 : aFlProtect ( this, ScResId( FL_PROTECTION ) ),
54 : aBtnHideCell ( this, ScResId( BTN_HIDE_ALL ) ),
55 : aBtnProtect ( this, ScResId( BTN_PROTECTED ) ),
56 : aBtnHideFormula ( this, ScResId( BTN_HIDE_FORMULAR ) ),
57 : aTxtHint ( this, ScResId( FT_HINT ) ),
58 : aFlPrint ( this, ScResId( FL_PRINT ) ),
59 : aBtnHidePrint ( this, ScResId( BTN_HIDE_PRINT ) ),
60 0 : aTxtHint2 ( this, ScResId( FT_HINT2 ) )
61 : {
62 : // diese Page braucht ExchangeSupport
63 0 : SetExchangeSupport();
64 :
65 : // States werden in Reset gesetzt
66 0 : bTriEnabled = bDontCare = bProtect = bHideForm = bHideCell = bHidePrint = false;
67 :
68 0 : aBtnProtect.SetClickHdl( LINK( this, ScTabPageProtection, ButtonClickHdl ) );
69 0 : aBtnHideCell.SetClickHdl( LINK( this, ScTabPageProtection, ButtonClickHdl ) );
70 0 : aBtnHideFormula.SetClickHdl( LINK( this, ScTabPageProtection, ButtonClickHdl ) );
71 0 : aBtnHidePrint.SetClickHdl( LINK( this, ScTabPageProtection, ButtonClickHdl ) );
72 :
73 0 : FreeResource();
74 0 : }
75 :
76 : // -----------------------------------------------------------------------
77 :
78 0 : ScTabPageProtection::~ScTabPageProtection()
79 : {
80 0 : }
81 :
82 : //------------------------------------------------------------------------
83 :
84 0 : sal_uInt16* ScTabPageProtection::GetRanges()
85 : {
86 0 : return pProtectionRanges;
87 : }
88 :
89 : // -----------------------------------------------------------------------
90 :
91 0 : SfxTabPage* ScTabPageProtection::Create( Window* pParent,
92 : const SfxItemSet& rAttrSet )
93 : {
94 0 : return ( new ScTabPageProtection( pParent, rAttrSet ) );
95 : }
96 :
97 : //------------------------------------------------------------------------
98 :
99 0 : void ScTabPageProtection::Reset( const SfxItemSet& rCoreAttrs )
100 : {
101 : // Variablen initialisieren
102 :
103 0 : sal_uInt16 nWhich = GetWhich( SID_SCATTR_PROTECTION );
104 0 : const ScProtectionAttr* pProtAttr = NULL;
105 : SfxItemState eItemState = rCoreAttrs.GetItemState( nWhich, false,
106 0 : (const SfxPoolItem**)&pProtAttr );
107 :
108 : // handelt es sich um ein Default-Item?
109 0 : if ( eItemState == SFX_ITEM_DEFAULT )
110 0 : pProtAttr = (const ScProtectionAttr*)&(rCoreAttrs.Get(nWhich));
111 : // bei SFX_ITEM_DONTCARE auf 0 lassen
112 :
113 0 : bTriEnabled = ( pProtAttr == NULL ); // TriState, wenn DontCare
114 0 : bDontCare = bTriEnabled;
115 0 : if (bTriEnabled)
116 : {
117 : // Defaults, die erscheinen wenn ein TriState weggeklickt wird:
118 : // (weil alles zusammen ein Attribut ist, kann auch nur alles zusammen
119 : // auf DontCare stehen - #38543#)
120 0 : bProtect = sal_True;
121 0 : bHideForm = bHideCell = bHidePrint = false;
122 : }
123 : else
124 : {
125 0 : bProtect = pProtAttr->GetProtection();
126 0 : bHideCell = pProtAttr->GetHideCell();
127 0 : bHideForm = pProtAttr->GetHideFormula();
128 0 : bHidePrint = pProtAttr->GetHidePrint();
129 : }
130 :
131 : // Controls initialisieren
132 :
133 0 : aBtnProtect .EnableTriState( bTriEnabled );
134 0 : aBtnHideCell .EnableTriState( bTriEnabled );
135 0 : aBtnHideFormula .EnableTriState( bTriEnabled );
136 0 : aBtnHidePrint .EnableTriState( bTriEnabled );
137 :
138 0 : UpdateButtons();
139 0 : }
140 :
141 : // -----------------------------------------------------------------------
142 :
143 0 : sal_Bool ScTabPageProtection::FillItemSet( SfxItemSet& rCoreAttrs )
144 : {
145 0 : sal_Bool bAttrsChanged = false;
146 0 : sal_uInt16 nWhich = GetWhich( SID_SCATTR_PROTECTION );
147 0 : const SfxPoolItem* pOldItem = GetOldItem( rCoreAttrs, SID_SCATTR_PROTECTION );
148 0 : const SfxItemSet& rOldSet = GetItemSet();
149 0 : SfxItemState eItemState = rOldSet.GetItemState( nWhich, false );
150 0 : ScProtectionAttr aProtAttr;
151 :
152 0 : if ( !bDontCare )
153 : {
154 0 : aProtAttr.SetProtection( bProtect );
155 0 : aProtAttr.SetHideCell( bHideCell );
156 0 : aProtAttr.SetHideFormula( bHideForm );
157 0 : aProtAttr.SetHidePrint( bHidePrint );
158 :
159 0 : if ( bTriEnabled )
160 0 : bAttrsChanged = sal_True; // DontCare -> richtiger Wert
161 : else
162 0 : bAttrsChanged = !pOldItem || !( aProtAttr == *(const ScProtectionAttr*)pOldItem );
163 : }
164 :
165 : //--------------------------------------------------
166 :
167 0 : if ( bAttrsChanged )
168 0 : rCoreAttrs.Put( aProtAttr );
169 0 : else if ( eItemState == SFX_ITEM_DEFAULT )
170 0 : rCoreAttrs.ClearItem( nWhich );
171 :
172 0 : return bAttrsChanged;
173 : }
174 :
175 : //------------------------------------------------------------------------
176 :
177 0 : int ScTabPageProtection::DeactivatePage( SfxItemSet* pSetP )
178 : {
179 0 : if ( pSetP )
180 0 : FillItemSet( *pSetP );
181 :
182 0 : return LEAVE_PAGE;
183 : }
184 :
185 : //------------------------------------------------------------------------
186 :
187 0 : IMPL_LINK( ScTabPageProtection, ButtonClickHdl, TriStateBox*, pBox )
188 : {
189 0 : TriState eState = pBox->GetState();
190 0 : if ( eState == STATE_DONTKNOW )
191 0 : bDontCare = sal_True; // alles zusammen auf DontCare
192 : else
193 : {
194 0 : bDontCare = false; // DontCare ueberall aus
195 0 : sal_Bool bOn = ( eState == STATE_CHECK ); // ausgewaehlter Wert
196 :
197 0 : if ( pBox == &aBtnProtect )
198 0 : bProtect = bOn;
199 0 : else if ( pBox == &aBtnHideCell )
200 0 : bHideCell = bOn;
201 0 : else if ( pBox == &aBtnHideFormula )
202 0 : bHideForm = bOn;
203 0 : else if ( pBox == &aBtnHidePrint )
204 0 : bHidePrint = bOn;
205 : else
206 : {
207 : OSL_FAIL("falscher Button");
208 : }
209 : }
210 :
211 0 : UpdateButtons(); // TriState und Enable-Logik
212 :
213 0 : return 0;
214 : }
215 :
216 : //------------------------------------------------------------------------
217 :
218 0 : void ScTabPageProtection::UpdateButtons()
219 : {
220 0 : if ( bDontCare )
221 : {
222 0 : aBtnProtect.SetState( STATE_DONTKNOW );
223 0 : aBtnHideCell.SetState( STATE_DONTKNOW );
224 0 : aBtnHideFormula.SetState( STATE_DONTKNOW );
225 0 : aBtnHidePrint.SetState( STATE_DONTKNOW );
226 : }
227 : else
228 : {
229 0 : aBtnProtect.SetState( bProtect ? STATE_CHECK : STATE_NOCHECK );
230 0 : aBtnHideCell.SetState( bHideCell ? STATE_CHECK : STATE_NOCHECK );
231 0 : aBtnHideFormula.SetState( bHideForm ? STATE_CHECK : STATE_NOCHECK );
232 0 : aBtnHidePrint.SetState( bHidePrint ? STATE_CHECK : STATE_NOCHECK );
233 : }
234 :
235 0 : sal_Bool bEnable = ( aBtnHideCell.GetState() != STATE_CHECK );
236 : {
237 0 : aBtnProtect.Enable( bEnable );
238 0 : aBtnHideFormula.Enable( bEnable );
239 : }
240 0 : }
241 :
242 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|