xref: /trunk/main/sc/source/ui/pagedlg/tphf.cxx (revision 787035a67208d8b88c9b4853f45484c146ed253a)
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 
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 
105 __EXPORT ScHFPage::~ScHFPage()
106 {
107 }
108 
109 //------------------------------------------------------------------
110 
111 void __EXPORT ScHFPage::Reset( const SfxItemSet& rSet )
112 {
113     SvxHFPage::Reset( rSet );
114     TurnOnHdl( 0 );
115 }
116 
117 //------------------------------------------------------------------
118 
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 
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 
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 
168 void ScHFPage::ActivatePage()
169 {
170 }
171 
172 void ScHFPage::DeactivatePage()
173 {
174 }
175 
176 //------------------------------------------------------------------
177 // Handler:
178 //------------------------------------------------------------------
179 
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 
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 
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 
284 ScHeaderPage::ScHeaderPage( Window* pParent, const SfxItemSet& rSet )
285     : ScHFPage( pParent, RID_SVXPAGE_HEADER, rSet, SID_ATTR_PAGE_HEADERSET )
286 {
287 }
288 
289 //------------------------------------------------------------------
290 
291 SfxTabPage* __EXPORT ScHeaderPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
292 {
293     return ( new ScHeaderPage( pParent, rCoreSet ) );
294 }
295 
296 //------------------------------------------------------------------
297 
298 sal_uInt16* __EXPORT ScHeaderPage::GetRanges()
299 {
300     return SvxHeaderPage::GetRanges();
301 }
302 
303 //==================================================================
304 // class ScFooterPage
305 //==================================================================
306 
307 ScFooterPage::ScFooterPage( Window* pParent, const SfxItemSet& rSet )
308     : ScHFPage( pParent, RID_SVXPAGE_FOOTER, rSet, SID_ATTR_PAGE_FOOTERSET )
309 {
310 }
311 
312 //------------------------------------------------------------------
313 
314 SfxTabPage* __EXPORT ScFooterPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
315 {
316     return ( new ScFooterPage( pParent, rCoreSet ) );
317 }
318 
319 //------------------------------------------------------------------
320 
321 sal_uInt16* __EXPORT ScFooterPage::GetRanges()
322 {
323     return SvxHeaderPage::GetRanges();
324 }
325 
326 
327 
328 
329