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