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