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