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