xref: /trunk/main/sc/source/ui/pagedlg/tphf.cxx (revision b77af630)
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_scui.hxx"
26 
27 #undef SC_DLLIMPLEMENTATION
28 
29 
30 
31 //------------------------------------------------------------------
32 
33 #define _TPHF_CXX
34 #include "scitems.hxx"
35 #include <sfx2/basedlgs.hxx>
36 #include <svl/style.hxx>
37 #include <vcl/svapp.hxx>
38 #include <vcl/msgbox.hxx>
39 
40 #include "tphf.hxx"
41 #include "sc.hrc"
42 #include "globstr.hrc"
43 #include "tabvwsh.hxx"
44 #include "viewdata.hxx"
45 #include "document.hxx"
46 //CHINA001 #include "tphfedit.hxx"
47 #include "hfedtdlg.hxx"
48 #include "styledlg.hxx"
49 #include "scresid.hxx"
50 #include "scuitphfedit.hxx" //CHINA001
51 #undef _TPHF_CXX
52 
53 
54 
55 //==================================================================
56 // class ScHFPage
57 //==================================================================
58 
59 ScHFPage::ScHFPage( Window* pParent, sal_uInt16 nResId,
60 					const SfxItemSet& rSet, sal_uInt16 nSetId )
61 
62 	:	SvxHFPage	( pParent, nResId, rSet, nSetId ),
63 		aBtnEdit	( this, ScResId( RID_SCBTN_HFEDIT ) ),
64 		aDataSet 	( *rSet.GetPool(),
65 					   ATTR_PAGE_HEADERLEFT, ATTR_PAGE_FOOTERRIGHT,
66 					   ATTR_PAGE, ATTR_PAGE, 0 ),
67 		nPageUsage	( (sal_uInt16)SVX_PAGE_ALL ),
68 		pStyleDlg	( NULL )
69 {
70 	SetExchangeSupport();
71 
72 	SfxViewShell*	pSh = SfxViewShell::Current();
73 	ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell,pSh);
74 	Point			aPos( aBackgroundBtn.GetPosPixel() );
75 
76 	// aBackgroundBtn position not changed anymore
77 
78 	aPos.X() += aBackgroundBtn.GetSizePixel().Width();
79 	aPos.X() += LogicToPixel( Size(3,0), MAP_APPFONT ).Width();
80 	aBtnEdit.SetPosPixel( aPos );
81 	aBtnEdit.Show();
82 
83 	aDataSet.Put( rSet );
84 
85 	if ( pViewSh )
86 	{
87 		ScViewData* pViewData = pViewSh->GetViewData();
88 		ScDocument* pDoc	  = pViewData->GetDocument();
89 
90 		aStrPageStyle = pDoc->GetPageStyle( pViewData->GetTabNo() );
91 	}
92 
93 	aBtnEdit.SetClickHdl 	( LINK( this, ScHFPage, BtnHdl ) );
94 	aTurnOnBox.SetClickHdl	( LINK( this, ScHFPage, TurnOnHdl ) );
95 
96 	if ( nId == SID_ATTR_PAGE_HEADERSET )
97 		aBtnEdit.SetHelpId( HID_SC_HEADER_EDIT );
98 	else
99 		aBtnEdit.SetHelpId( HID_SC_FOOTER_EDIT );
100 
101 	aBtnEdit.SetAccessibleRelationMemberOf(&aFrm);
102 }
103 
104 //------------------------------------------------------------------
105 
106 __EXPORT ScHFPage::~ScHFPage()
107 {
108 }
109 
110 //------------------------------------------------------------------
111 
112 void __EXPORT ScHFPage::Reset( const SfxItemSet& rSet )
113 {
114 	SvxHFPage::Reset( rSet );
115 	TurnOnHdl( 0 );
116 }
117 
118 //------------------------------------------------------------------
119 
120 sal_Bool __EXPORT ScHFPage::FillItemSet( SfxItemSet& rOutSet )
121 {
122 	sal_Bool bResult = SvxHFPage::FillItemSet( rOutSet );
123 
124 	if ( nId == SID_ATTR_PAGE_HEADERSET )
125 	{
126 		rOutSet.Put( aDataSet.Get( ATTR_PAGE_HEADERLEFT ) );
127 		rOutSet.Put( aDataSet.Get( ATTR_PAGE_HEADERRIGHT ) );
128 	}
129 	else
130 	{
131 		rOutSet.Put( aDataSet.Get( ATTR_PAGE_FOOTERLEFT ) );
132 		rOutSet.Put( aDataSet.Get( ATTR_PAGE_FOOTERRIGHT ) );
133 	}
134 
135 	return bResult;
136 }
137 
138 //------------------------------------------------------------------
139 
140 void __EXPORT ScHFPage::ActivatePage( const SfxItemSet& rSet )
141 {
142 	sal_uInt16				nPageWhich = GetWhich( SID_ATTR_PAGE );
143 	const SvxPageItem&	rPageItem  = (const SvxPageItem&)
144 									 rSet.Get(nPageWhich);
145 
146 	nPageUsage = rPageItem.GetPageUsage();
147 
148 	if ( pStyleDlg )
149 		aStrPageStyle = pStyleDlg->GetStyleSheet().GetName();
150 
151 	aDataSet.Put( rSet.Get(ATTR_PAGE) );
152 
153 	SvxHFPage::ActivatePage( rSet );
154 }
155 
156 //------------------------------------------------------------------
157 
158 int __EXPORT ScHFPage::DeactivatePage( SfxItemSet* pSetP )
159 {
160     if ( LEAVE_PAGE == SvxHFPage::DeactivatePage( pSetP ) )
161         if ( pSetP )
162             FillItemSet( *pSetP );
163 
164 	return LEAVE_PAGE;
165 }
166 
167 //------------------------------------------------------------------
168 
169 void ScHFPage::ActivatePage()
170 {
171 }
172 
173 void ScHFPage::DeactivatePage()
174 {
175 }
176 
177 //------------------------------------------------------------------
178 // Handler:
179 //------------------------------------------------------------------
180 
181 IMPL_LINK( ScHFPage, TurnOnHdl, CheckBox*, EMPTYARG )
182 {
183 	SvxHFPage::TurnOnHdl( &aTurnOnBox );
184 
185 	if ( aTurnOnBox.IsChecked() )
186 		aBtnEdit.Enable();
187 	else
188 		aBtnEdit.Disable();
189 
190 	return 0;
191 }
192 
193 
194 //------------------------------------------------------------------
195 
196 IMPL_LINK( ScHFPage, BtnHdl, PushButton*, EMPTYARG )
197 {
198 	//	Wenn der Bearbeiten-Dialog direkt aus dem Click-Handler des Buttons
199 	//	aufgerufen wird, funktioniert im Bearbeiten-Dialog unter OS/2 das
200 	//	GrabFocus nicht (Bug #41805#).
201 	//	Mit dem neuen StarView sollte dieser Workaround wieder raus koennen!
202 
203 	Application::PostUserEvent( LINK( this, ScHFPage, HFEditHdl ) );
204 	return 0;
205 }
206 
207 IMPL_LINK( ScHFPage, HFEditHdl, void*, EMPTYARG )
208 {
209 	SfxViewShell*	pViewSh = SfxViewShell::Current();
210 
211 	if ( !pViewSh )
212 	{
213 		DBG_ERROR( "Current ViewShell not found." );
214 		return 0;
215 	}
216 
217 	if (   aCntSharedBox.IsEnabled()
218 		&& !aCntSharedBox.IsChecked() )
219 	{
220 		sal_uInt16 nResId = ( nId == SID_ATTR_PAGE_HEADERSET )
221 							? RID_SCDLG_HFED_HEADER
222 							: RID_SCDLG_HFED_FOOTER;
223 
224 		ScHFEditDlg* pDlg
225 			 = new ScHFEditDlg( pViewSh->GetViewFrame(), this,
226 								aDataSet, aStrPageStyle, nResId );
227 
228 		if ( pDlg->Execute() == RET_OK )
229 		{
230 			aDataSet.Put( *pDlg->GetOutputItemSet() );
231 		}
232 
233 		delete pDlg;
234 	}
235 	else
236 	{
237 		String				aText;
238 		SfxSingleTabDialog* pDlg = new SfxSingleTabDialog( this, aDataSet, 42 );
239 		sal_Bool bRightPage =   aCntSharedBox.IsChecked()
240 						 || ( SVX_PAGE_LEFT != SvxPageUsage(nPageUsage) );
241 
242 		if ( nId == SID_ATTR_PAGE_HEADERSET )
243 		{
244 			aText = ScGlobal::GetRscString( STR_PAGEHEADER );
245 			if ( bRightPage )
246 				pDlg->SetTabPage( ScRightHeaderEditPage::Create( pDlg, aDataSet ) );
247 			else
248 				pDlg->SetTabPage( ScLeftHeaderEditPage::Create( pDlg, aDataSet ) );
249 		}
250 		else
251 		{
252 			aText = ScGlobal::GetRscString( STR_PAGEFOOTER );
253 			if ( bRightPage )
254 				pDlg->SetTabPage( ScRightFooterEditPage::Create( pDlg, aDataSet ) );
255 			else
256 				pDlg->SetTabPage( ScLeftFooterEditPage::Create( pDlg, aDataSet ) );
257 		}
258 
259 		SvxNumType eNumType = ((const SvxPageItem&)aDataSet.Get(ATTR_PAGE)).GetNumType();
260 		((ScHFEditPage*)pDlg->GetTabPage())->SetNumType(eNumType);
261 
262 		aText.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " (" ));
263 		aText += ScGlobal::GetRscString( STR_PAGESTYLE );
264 		aText.AppendAscii(RTL_CONSTASCII_STRINGPARAM( ": " ));
265 		aText += aStrPageStyle;
266 		aText += ')';
267 
268 		pDlg->SetText( aText );
269 
270 		if ( pDlg->Execute() == RET_OK )
271 		{
272 			aDataSet.Put( *pDlg->GetOutputItemSet() );
273 		}
274 
275 		delete pDlg;
276 	}
277 
278 	return 0;
279 }
280 
281 //==================================================================
282 // class ScHeaderPage
283 //==================================================================
284 
285 ScHeaderPage::ScHeaderPage( Window* pParent, const SfxItemSet& rSet )
286 	: ScHFPage( pParent, RID_SVXPAGE_HEADER, rSet, SID_ATTR_PAGE_HEADERSET )
287 {
288 }
289 
290 //------------------------------------------------------------------
291 
292 SfxTabPage* __EXPORT ScHeaderPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
293 {
294 	return ( new ScHeaderPage( pParent, rCoreSet ) );
295 }
296 
297 //------------------------------------------------------------------
298 
299 sal_uInt16* __EXPORT ScHeaderPage::GetRanges()
300 {
301 	return SvxHeaderPage::GetRanges();
302 }
303 
304 //==================================================================
305 // class ScFooterPage
306 //==================================================================
307 
308 ScFooterPage::ScFooterPage( Window* pParent, const SfxItemSet& rSet )
309 	: ScHFPage( pParent, RID_SVXPAGE_FOOTER, rSet, SID_ATTR_PAGE_FOOTERSET )
310 {
311 }
312 
313 //------------------------------------------------------------------
314 
315 SfxTabPage* __EXPORT ScFooterPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
316 {
317 	return ( new ScFooterPage( pParent, rCoreSet ) );
318 }
319 
320 //------------------------------------------------------------------
321 
322 sal_uInt16* __EXPORT ScFooterPage::GetRanges()
323 {
324 	return SvxHeaderPage::GetRanges();
325 }
326 
327 
328 
329 
330