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_sw.hxx" 26 #ifdef SW_DLLIMPLEMENTATION 27 #undef SW_DLLIMPLEMENTATION 28 #endif 29 30 #include <hintids.hxx> 31 #include <regionsw.hxx> 32 #include <svl/urihelper.hxx> 33 #include <svl/PasswordHelper.hxx> 34 #include <vcl/svapp.hxx> 35 #include <vcl/msgbox.hxx> 36 #include <svl/stritem.hxx> 37 #include <svl/eitem.hxx> 38 #include <sfx2/passwd.hxx> 39 #include <sfx2/docfilt.hxx> 40 #include <sfx2/request.hxx> 41 #include <sfx2/docfile.hxx> 42 #include <sfx2/linkmgr.hxx> 43 #include <sfx2/docinsert.hxx> 44 #include <sfx2/filedlghelper.hxx> 45 #include <editeng/sizeitem.hxx> 46 #include <svtools/htmlcfg.hxx> 47 48 #include <comphelper/storagehelper.hxx> 49 #include <uitool.hxx> 50 #include <IMark.hxx> 51 #include <section.hxx> 52 #include <docary.hxx> 53 #include <doc.hxx> // fuers SwSectionFmt-Array 54 #include <basesh.hxx> 55 #include <wdocsh.hxx> 56 #include <view.hxx> 57 #include <swmodule.hxx> 58 #include <wrtsh.hxx> 59 #include <swundo.hxx> // fuer Undo-Ids 60 #include <column.hxx> 61 #include <fmtfsize.hxx> 62 #include <swunodef.hxx> 63 #include <shellio.hxx> 64 65 #include <helpid.h> 66 #include <cmdid.h> 67 #include <regionsw.hrc> 68 #include <comcore.hrc> 69 #include <globals.hrc> 70 #include <sfx2/bindings.hxx> 71 #include <svx/htmlmode.hxx> 72 #include <svx/dlgutil.hxx> 73 #include <svx/dialogs.hrc> 74 #include <svx/svxdlg.hxx> 75 #include <svx/flagsdef.hxx> 76 77 using namespace ::com::sun::star; 78 79 80 // sw/inc/docary.hxx 81 SV_IMPL_PTRARR( SwSectionFmts, SwSectionFmtPtr ) 82 83 #define FILE_NAME_LENGTH 17 84 85 static void lcl_ReadSections( SfxMedium& rMedium, ComboBox& rBox ); 86 87 void lcl_FillList( SwWrtShell& rSh, ComboBox& rSubRegions, ComboBox* pAvailNames, const SwSectionFmt* pNewFmt ) 88 { 89 const SwSectionFmt* pFmt; 90 if( !pNewFmt ) 91 { 92 sal_uInt16 nCount = rSh.GetSectionFmtCount(); 93 for(sal_uInt16 i=0;i<nCount;i++) 94 { 95 SectionType eTmpType; 96 if( !(pFmt = &rSh.GetSectionFmt(i))->GetParent() && 97 pFmt->IsInNodesArr() && 98 (eTmpType = pFmt->GetSection()->GetType()) != TOX_CONTENT_SECTION 99 && TOX_HEADER_SECTION != eTmpType ) 100 { 101 String* pString = 102 new String(pFmt->GetSection()->GetSectionName()); 103 if(pAvailNames) 104 pAvailNames->InsertEntry(*pString); 105 rSubRegions.InsertEntry(*pString); 106 lcl_FillList( rSh, rSubRegions, pAvailNames, pFmt ); 107 } 108 } 109 } 110 else 111 { 112 SwSections aTmpArr; 113 sal_uInt16 nCnt = pNewFmt->GetChildSections(aTmpArr,SORTSECT_POS); 114 if( nCnt ) 115 { 116 SectionType eTmpType; 117 for( sal_uInt16 n = 0; n < nCnt; ++n ) 118 if( (pFmt = aTmpArr[n]->GetFmt())->IsInNodesArr()&& 119 (eTmpType = pFmt->GetSection()->GetType()) != TOX_CONTENT_SECTION 120 && TOX_HEADER_SECTION != eTmpType ) 121 { 122 String* pString = 123 new String(pFmt->GetSection()->GetSectionName()); 124 if(pAvailNames) 125 pAvailNames->InsertEntry(*pString); 126 rSubRegions.InsertEntry(*pString); 127 lcl_FillList( rSh, rSubRegions, pAvailNames, pFmt ); 128 } 129 } 130 } 131 } 132 133 void lcl_FillSubRegionList( SwWrtShell& rSh, ComboBox& rSubRegions, ComboBox* pAvailNames ) 134 { 135 lcl_FillList( rSh, rSubRegions, pAvailNames, 0 ); 136 IDocumentMarkAccess* const pMarkAccess = rSh.getIDocumentMarkAccess(); 137 for( IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getMarksBegin(); 138 ppMark != pMarkAccess->getMarksEnd(); 139 ppMark++) 140 { 141 const ::sw::mark::IMark* pBkmk = ppMark->get(); 142 if( pBkmk->IsExpanded() ) 143 rSubRegions.InsertEntry( pBkmk->GetName() ); 144 } 145 } 146 147 /* -----------------25.06.99 15:38------------------- 148 149 --------------------------------------------------*/ 150 class SwTestPasswdDlg : public SfxPasswordDialog 151 { 152 public: 153 SwTestPasswdDlg(Window* pParent) : 154 SfxPasswordDialog(pParent) 155 { 156 SetHelpId(HID_DLG_PASSWD_SECTION); 157 } 158 }; 159 160 /*---------------------------------------------------------------------------- 161 Beschreibung: User Data Klasse fuer Bereichsinformationen 162 ----------------------------------------------------------------------------*/ 163 164 class SectRepr 165 { 166 private: 167 SwSectionData m_SectionData; 168 SwFmtCol m_Col; 169 SvxBrushItem m_Brush; 170 SwFmtFtnAtTxtEnd m_FtnNtAtEnd; 171 SwFmtEndAtTxtEnd m_EndNtAtEnd; 172 SwFmtNoBalancedColumns m_Balance; 173 SvxFrameDirectionItem m_FrmDirItem; 174 SvxLRSpaceItem m_LRSpaceItem; 175 sal_uInt16 m_nArrPos; 176 // zeigt an, ob evtl. Textinhalt im Bereich ist 177 bool m_bContent : 1; 178 // fuer Multiselektion erst markieren, dann mit der TreeListBox arbeiten! 179 bool m_bSelected : 1; 180 uno::Sequence<sal_Int8> m_TempPasswd; 181 182 public: 183 SectRepr(sal_uInt16 nPos, SwSection& rSect); 184 bool operator==(SectRepr& rSectRef) const 185 { return m_nArrPos == rSectRef.GetArrPos(); } 186 187 bool operator< (SectRepr& rSectRef) const 188 { return m_nArrPos < rSectRef.GetArrPos(); } 189 190 SwSectionData & GetSectionData() { return m_SectionData; } 191 SwSectionData const&GetSectionData() const { return m_SectionData; } 192 SwFmtCol& GetCol() { return m_Col; } 193 SvxBrushItem& GetBackground() { return m_Brush; } 194 SwFmtFtnAtTxtEnd& GetFtnNtAtEnd() { return m_FtnNtAtEnd; } 195 SwFmtEndAtTxtEnd& GetEndNtAtEnd() { return m_EndNtAtEnd; } 196 SwFmtNoBalancedColumns& GetBalance() { return m_Balance; } 197 SvxFrameDirectionItem& GetFrmDir() { return m_FrmDirItem; } 198 SvxLRSpaceItem& GetLRSpace() { return m_LRSpaceItem; } 199 200 sal_uInt16 GetArrPos() const { return m_nArrPos; } 201 String GetFile() const; 202 String GetSubRegion() const; 203 void SetFile(String const& rFile); 204 void SetFilter(String const& rFilter); 205 void SetSubRegion(String const& rSubRegion); 206 207 bool IsContent() { return m_bContent; } 208 void SetContent(bool const bValue) { m_bContent = bValue; } 209 210 void SetSelected() { m_bSelected = true; } 211 bool IsSelected() const { return m_bSelected; } 212 213 uno::Sequence<sal_Int8> & GetTempPasswd() { return m_TempPasswd; } 214 void SetTempPasswd(const uno::Sequence<sal_Int8> & rPasswd) 215 { m_TempPasswd = rPasswd; } 216 }; 217 218 219 SV_IMPL_OP_PTRARR_SORT( SectReprArr, SectReprPtr ) 220 221 SectRepr::SectRepr( sal_uInt16 nPos, SwSection& rSect ) 222 : m_SectionData( rSect ) 223 , m_Brush( RES_BACKGROUND ) 224 , m_FrmDirItem( FRMDIR_ENVIRONMENT, RES_FRAMEDIR ) 225 , m_LRSpaceItem( RES_LR_SPACE ) 226 , m_nArrPos(nPos) 227 , m_bContent(m_SectionData.GetLinkFileName().Len() == 0) 228 , m_bSelected(false) 229 { 230 SwSectionFmt *pFmt = rSect.GetFmt(); 231 if( pFmt ) 232 { 233 m_Col = pFmt->GetCol(); 234 m_Brush = pFmt->GetBackground(); 235 m_FtnNtAtEnd = pFmt->GetFtnAtTxtEnd(); 236 m_EndNtAtEnd = pFmt->GetEndAtTxtEnd(); 237 m_Balance.SetValue(pFmt->GetBalancedColumns().GetValue()); 238 m_FrmDirItem = pFmt->GetFrmDir(); 239 m_LRSpaceItem = pFmt->GetLRSpace(); 240 } 241 } 242 243 void SectRepr::SetFile( const String& rFile ) 244 { 245 String sNewFile( INetURLObject::decode( rFile, INET_HEX_ESCAPE, 246 INetURLObject::DECODE_UNAMBIGUOUS, 247 RTL_TEXTENCODING_UTF8 )); 248 String sOldFileName( m_SectionData.GetLinkFileName() ); 249 String sSub( sOldFileName.GetToken( 2, sfx2::cTokenSeperator ) ); 250 251 if( rFile.Len() || sSub.Len() ) 252 { 253 sNewFile += sfx2::cTokenSeperator; 254 if( rFile.Len() ) // Filter nur mit FileName 255 sNewFile += sOldFileName.GetToken( 1, sfx2::cTokenSeperator ); 256 257 sNewFile += sfx2::cTokenSeperator; 258 sNewFile += sSub; 259 } 260 261 m_SectionData.SetLinkFileName( sNewFile ); 262 263 if( rFile.Len() || sSub.Len() ) 264 { 265 m_SectionData.SetType( FILE_LINK_SECTION ); 266 } 267 else 268 { 269 m_SectionData.SetType( CONTENT_SECTION ); 270 } 271 } 272 273 274 void SectRepr::SetFilter( const String& rFilter ) 275 { 276 String sNewFile; 277 String sOldFileName( m_SectionData.GetLinkFileName() ); 278 String sFile( sOldFileName.GetToken( 0, sfx2::cTokenSeperator ) ); 279 String sSub( sOldFileName.GetToken( 2, sfx2::cTokenSeperator ) ); 280 281 if( sFile.Len() ) 282 (((( sNewFile = sFile ) += sfx2::cTokenSeperator ) += rFilter ) 283 += sfx2::cTokenSeperator ) += sSub; 284 else if( sSub.Len() ) 285 (( sNewFile = sfx2::cTokenSeperator ) += sfx2::cTokenSeperator ) += sSub; 286 287 m_SectionData.SetLinkFileName( sNewFile ); 288 289 if( sNewFile.Len() ) 290 { 291 m_SectionData.SetType( FILE_LINK_SECTION ); 292 } 293 } 294 295 void SectRepr::SetSubRegion(const String& rSubRegion) 296 { 297 String sNewFile; 298 String sOldFileName( m_SectionData.GetLinkFileName() ); 299 String sFilter( sOldFileName.GetToken( 1, sfx2::cTokenSeperator ) ); 300 sOldFileName = sOldFileName.GetToken( 0, sfx2::cTokenSeperator ); 301 302 if( rSubRegion.Len() || sOldFileName.Len() ) 303 (((( sNewFile = sOldFileName ) += sfx2::cTokenSeperator ) += sFilter ) 304 += sfx2::cTokenSeperator ) += rSubRegion; 305 306 m_SectionData.SetLinkFileName( sNewFile ); 307 308 if( rSubRegion.Len() || sOldFileName.Len() ) 309 { 310 m_SectionData.SetType( FILE_LINK_SECTION ); 311 } 312 else 313 { 314 m_SectionData.SetType( CONTENT_SECTION ); 315 } 316 } 317 318 319 String SectRepr::GetFile() const 320 { 321 String sLinkFile( m_SectionData.GetLinkFileName() ); 322 if( sLinkFile.Len() ) 323 { 324 if (DDE_LINK_SECTION == m_SectionData.GetType()) 325 { 326 sal_uInt16 n = sLinkFile.SearchAndReplace( sfx2::cTokenSeperator, ' ' ); 327 sLinkFile.SearchAndReplace( sfx2::cTokenSeperator, ' ', n ); 328 } 329 else 330 sLinkFile = INetURLObject::decode( sLinkFile.GetToken( 0, 331 sfx2::cTokenSeperator ), 332 INET_HEX_ESCAPE, 333 INetURLObject::DECODE_UNAMBIGUOUS, 334 RTL_TEXTENCODING_UTF8 ); 335 } 336 return sLinkFile; 337 } 338 339 340 String SectRepr::GetSubRegion() const 341 { 342 String sLinkFile( m_SectionData.GetLinkFileName() ); 343 if( sLinkFile.Len() ) 344 sLinkFile = sLinkFile.GetToken( 2, sfx2::cTokenSeperator ); 345 return sLinkFile; 346 } 347 348 349 350 /*---------------------------------------------------------------------------- 351 Beschreibung: Dialog Bearbeiten Bereiche 352 ----------------------------------------------------------------------------*/ 353 354 //--------------------------------------------------------------------- 355 356 SwEditRegionDlg::SwEditRegionDlg( Window* pParent, SwWrtShell& rWrtSh ) 357 : SfxModalDialog( pParent, SW_RES(MD_EDIT_REGION) ), 358 aNameFL ( this, SW_RES( FL_NAME ) ), 359 aCurName ( this, SW_RES( ED_RANAME ) ), 360 aTree ( this, SW_RES( TLB_SECTION )), 361 aLinkFL ( this, SW_RES( FL_LINK ) ), 362 aFileCB ( this, SW_RES( CB_FILE ) ), 363 aDDECB ( this, SW_RES( CB_DDE ) ) , 364 aFileNameFT ( this, SW_RES( FT_FILE ) ) , 365 aDDECommandFT ( this, SW_RES( FT_DDE ) ) , 366 aFileNameED ( this, SW_RES( ED_FILE ) ), 367 aFilePB ( this, SW_RES( PB_FILE ) ), 368 aSubRegionFT ( this, SW_RES( FT_SUBREG ) ) , 369 aSubRegionED ( this, SW_RES( LB_SUBREG ) ) , 370 bSubRegionsFilled( false ), 371 372 aProtectFL ( this, SW_RES( FL_PROTECT ) ), 373 aProtectCB ( this, SW_RES( CB_PROTECT ) ), 374 aPasswdCB ( this, SW_RES( CB_PASSWD ) ), 375 aPasswdPB ( this, SW_RES( PB_PASSWD ) ), 376 377 aHideFL ( this, SW_RES( FL_HIDE ) ), 378 aHideCB ( this, SW_RES( CB_HIDE ) ), 379 aConditionFT ( this, SW_RES( FT_CONDITION ) ), 380 aConditionED ( this, SW_RES( ED_CONDITION ) ), 381 382 // --> FME 2004-06-22 #114856# edit in readonly sections 383 aPropertiesFL ( this, SW_RES( FL_PROPERTIES ) ), 384 aEditInReadonlyCB ( this, SW_RES( CB_EDIT_IN_READONLY ) ), 385 // <-- 386 387 aOK ( this, SW_RES( PB_OK ) ), 388 aCancel ( this, SW_RES( PB_CANCEL ) ), 389 aOptionsPB ( this, SW_RES( PB_OPTIONS ) ), 390 aDismiss ( this, SW_RES( CB_DISMISS ) ), 391 aHelp ( this, SW_RES( PB_HELP ) ), 392 393 aImageIL ( SW_RES(IL_BITMAPS)), 394 aImageILH ( SW_RES(ILH_BITMAPS)), 395 396 rSh( rWrtSh ), 397 pAktEntry( 0 ), 398 m_pDocInserter ( NULL ), 399 m_pOldDefDlgParent ( NULL ), 400 bDontCheckPasswd ( sal_True) 401 { 402 FreeResource(); 403 404 bWeb = 0 != PTR_CAST( SwWebDocShell, rSh.GetView().GetDocShell() ); 405 406 aTree.SetSelectHdl ( LINK( this, SwEditRegionDlg, GetFirstEntryHdl)); 407 aTree.SetDeselectHdl ( LINK( this, SwEditRegionDlg, DeselectHdl)); 408 aCurName.SetModifyHdl ( LINK( this, SwEditRegionDlg, NameEditHdl)); 409 aConditionED.SetModifyHdl( LINK( this, SwEditRegionDlg, ConditionEditHdl)); 410 aOK.SetClickHdl ( LINK( this, SwEditRegionDlg, OkHdl)); 411 aPasswdCB.SetClickHdl ( LINK( this, SwEditRegionDlg, ChangePasswdHdl)); 412 aPasswdPB.SetClickHdl ( LINK( this, SwEditRegionDlg, ChangePasswdHdl)); 413 aHideCB.SetClickHdl ( LINK( this, SwEditRegionDlg, ChangeHideHdl)); 414 // --> FME 2004-06-22 #114856# edit in readonly sections 415 aEditInReadonlyCB.SetClickHdl ( LINK( this, SwEditRegionDlg, ChangeEditInReadonlyHdl)); 416 // <-- 417 418 aOptionsPB.Show(); 419 aOptionsPB.SetClickHdl ( LINK( this, SwEditRegionDlg, OptionsHdl)); 420 aProtectCB.SetClickHdl ( LINK( this, SwEditRegionDlg, ChangeProtectHdl)); 421 aDismiss.SetClickHdl ( LINK( this, SwEditRegionDlg, ChangeDismissHdl)); 422 aFileCB.SetClickHdl ( LINK( this, SwEditRegionDlg, UseFileHdl )); 423 aFilePB.SetClickHdl ( LINK( this, SwEditRegionDlg, FileSearchHdl )); 424 aFileNameED.SetModifyHdl( LINK( this, SwEditRegionDlg, FileNameHdl )); 425 aSubRegionED.SetModifyHdl( LINK( this, SwEditRegionDlg, FileNameHdl )); 426 aSubRegionED.AddEventListener( LINK( this, SwEditRegionDlg, SubRegionEventHdl )); 427 aSubRegionED.EnableAutocomplete( sal_True, sal_True ); 428 429 aTree.SetHelpId(HID_REGION_TREE); 430 aTree.SetSelectionMode( MULTIPLE_SELECTION ); 431 aTree.SetStyle(aTree.GetStyle()|WB_HASBUTTONSATROOT|WB_CLIPCHILDREN|WB_HSCROLL); 432 aTree.SetSpaceBetweenEntries(0); 433 434 if(bWeb) 435 { 436 aConditionFT .Hide(); 437 aConditionED .Hide(); 438 aPasswdCB .Hide(); 439 aHideCB .Hide(); 440 441 aDDECB .Hide(); 442 aDDECommandFT .Hide(); 443 } 444 445 aDDECB.SetClickHdl ( LINK( this, SwEditRegionDlg, DDEHdl )); 446 447 //Ermitteln der vorhandenen Bereiche 448 pCurrSect = rSh.GetCurrSection(); 449 RecurseList( 0, 0 ); 450 //falls der Cursor nicht in einem Bereich steht, 451 //wird immer der erste selektiert 452 if( !aTree.FirstSelected() && aTree.First() ) 453 aTree.Select( aTree.First() ); 454 aTree.Show(); 455 bDontCheckPasswd = sal_False; 456 457 aPasswdPB.SetAccessibleRelationMemberOf(&aProtectFL); 458 aPasswdPB.SetAccessibleRelationLabeledBy(&aPasswdCB); 459 aSubRegionED.SetAccessibleName(aSubRegionFT.GetText()); 460 //IAccessibility2 Impplementaton 2009----- 461 aTree.SetAllEntriesAccessibleRoleType(TREEBOX_ALLITEM_ACCROLE_TYPE_TREE); 462 //-----IAccessibility2 Impplementaton 2009 463 } 464 /* -----------------------------26.04.01 14:56-------------------------------- 465 466 ---------------------------------------------------------------------------*/ 467 sal_Bool SwEditRegionDlg::CheckPasswd(CheckBox* pBox) 468 { 469 if(bDontCheckPasswd) 470 return sal_True; 471 sal_Bool bRet = sal_True; 472 SvLBoxEntry* pEntry = aTree.FirstSelected(); 473 while( pEntry ) 474 { 475 SectReprPtr pRepr = (SectReprPtr)pEntry->GetUserData(); 476 if (!pRepr->GetTempPasswd().getLength() 477 && pRepr->GetSectionData().GetPassword().getLength()) 478 { 479 SwTestPasswdDlg aPasswdDlg(this); 480 bRet = sal_False; 481 if (aPasswdDlg.Execute()) 482 { 483 String sNewPasswd( aPasswdDlg.GetPassword() ); 484 UNO_NMSPC::Sequence <sal_Int8 > aNewPasswd; 485 SvPasswordHelper::GetHashPassword( aNewPasswd, sNewPasswd ); 486 if (SvPasswordHelper::CompareHashPassword( 487 pRepr->GetSectionData().GetPassword(), sNewPasswd)) 488 { 489 pRepr->SetTempPasswd(aNewPasswd); 490 bRet = sal_True; 491 } 492 else 493 { 494 InfoBox(this, SW_RES(REG_WRONG_PASSWORD)).Execute(); 495 } 496 } 497 } 498 pEntry = aTree.NextSelected(pEntry); 499 } 500 if(!bRet && pBox) 501 { 502 //reset old button state 503 if(pBox->IsTriStateEnabled()) 504 pBox->SetState(pBox->IsChecked() ? STATE_NOCHECK : STATE_DONTKNOW); 505 else 506 pBox->Check(!pBox->IsChecked()); 507 } 508 509 return bRet; 510 } 511 /*--------------------------------------------------------------------- 512 Beschreibung: Durchsuchen nach Child-Sections, rekursiv 513 ---------------------------------------------------------------------*/ 514 515 void SwEditRegionDlg::RecurseList( const SwSectionFmt* pFmt, SvLBoxEntry* pEntry ) 516 { 517 SwSection* pSect = 0; 518 SvLBoxEntry* pSelEntry = 0; 519 520 if (!pFmt) 521 { 522 sal_uInt16 nCount=rSh.GetSectionFmtCount(); 523 for ( sal_uInt16 n=0; n < nCount; n++ ) 524 { 525 SectionType eTmpType; 526 if( !( pFmt = &rSh.GetSectionFmt(n))->GetParent() && 527 pFmt->IsInNodesArr() && 528 (eTmpType = pFmt->GetSection()->GetType()) != TOX_CONTENT_SECTION 529 && TOX_HEADER_SECTION != eTmpType ) 530 { 531 SectRepr* pSectRepr = new SectRepr( n, 532 *(pSect=pFmt->GetSection()) ); 533 Image aImg = BuildBitmap( pSect->IsProtect(),pSect->IsHidden(), sal_False); 534 pEntry = aTree.InsertEntry(pSect->GetSectionName(), aImg, aImg); 535 Image aHCImg = BuildBitmap( pSect->IsProtect(),pSect->IsHidden(), sal_True); 536 aTree.SetExpandedEntryBmp(pEntry, aHCImg, BMP_COLOR_HIGHCONTRAST); 537 aTree.SetCollapsedEntryBmp(pEntry, aHCImg, BMP_COLOR_HIGHCONTRAST); 538 pEntry->SetUserData(pSectRepr); 539 RecurseList( pFmt, pEntry ); 540 if (pEntry->HasChilds()) 541 aTree.Expand(pEntry); 542 if (pCurrSect==pSect) 543 aTree.Select(pEntry); 544 } 545 } 546 } 547 else 548 { 549 SwSections aTmpArr; 550 SvLBoxEntry* pNEntry; 551 sal_uInt16 nCnt = pFmt->GetChildSections(aTmpArr,SORTSECT_POS); 552 if( nCnt ) 553 { 554 for( sal_uInt16 n = 0; n < nCnt; ++n ) 555 { 556 SectionType eTmpType; 557 pFmt = aTmpArr[n]->GetFmt(); 558 if( pFmt->IsInNodesArr() && 559 (eTmpType = pFmt->GetSection()->GetType()) != TOX_CONTENT_SECTION 560 && TOX_HEADER_SECTION != eTmpType ) 561 { 562 pSect=aTmpArr[n]; 563 SectRepr* pSectRepr=new SectRepr( 564 FindArrPos( pSect->GetFmt() ), *pSect ); 565 Image aImage = BuildBitmap( pSect->IsProtect(), 566 pSect->IsHidden(), sal_False); 567 pNEntry = aTree.InsertEntry( 568 pSect->GetSectionName(), aImage, aImage, pEntry); 569 Image aHCImg = BuildBitmap( pSect->IsProtect(),pSect->IsHidden(), sal_True); 570 aTree.SetExpandedEntryBmp(pEntry, aHCImg, BMP_COLOR_HIGHCONTRAST); 571 aTree.SetCollapsedEntryBmp(pEntry, aHCImg, BMP_COLOR_HIGHCONTRAST); 572 pNEntry->SetUserData(pSectRepr); 573 RecurseList( aTmpArr[n]->GetFmt(), pNEntry ); 574 if( pNEntry->HasChilds()) 575 aTree.Expand(pNEntry); 576 if (pCurrSect==pSect) 577 pSelEntry = pNEntry; 578 } 579 } 580 } 581 } 582 if(0 != pSelEntry) 583 { 584 aTree.MakeVisible(pSelEntry); 585 aTree.Select(pSelEntry); 586 } 587 } 588 /*--------------------------------------------------------------------- 589 590 ---------------------------------------------------------------------*/ 591 592 sal_uInt16 SwEditRegionDlg::FindArrPos(const SwSectionFmt* pFmt ) 593 { 594 sal_uInt16 nCount=rSh.GetSectionFmtCount(); 595 for (sal_uInt16 i=0;i<nCount;i++) 596 if (pFmt==&rSh.GetSectionFmt(i)) 597 return i; 598 599 DBG_ERROR( "SectionFormat nicht in der Liste" ); 600 return USHRT_MAX; 601 } 602 /*--------------------------------------------------------------------- 603 Beschreibung: 604 ---------------------------------------------------------------------*/ 605 606 SwEditRegionDlg::~SwEditRegionDlg( ) 607 { 608 SvLBoxEntry* pEntry = aTree.First(); 609 while( pEntry ) 610 { 611 delete (SectRepr*)pEntry->GetUserData(); 612 pEntry = aTree.Next( pEntry ); 613 } 614 615 aSectReprArr.DeleteAndDestroy( 0, aSectReprArr.Count() ); 616 delete m_pDocInserter; 617 } 618 /* -----------------------------09.10.2001 15:41------------------------------ 619 620 ---------------------------------------------------------------------------*/ 621 void SwEditRegionDlg::SelectSection(const String& rSectionName) 622 { 623 SvLBoxEntry* pEntry = aTree.First(); 624 while(pEntry) 625 { 626 SectReprPtr pRepr = (SectReprPtr)pEntry->GetUserData(); 627 if (pRepr->GetSectionData().GetSectionName() == rSectionName) 628 break; 629 pEntry = aTree.Next(pEntry); 630 } 631 if(pEntry) 632 { 633 aTree.SelectAll( sal_False); 634 aTree.Select(pEntry); 635 aTree.MakeVisible(pEntry); 636 } 637 } 638 /*--------------------------------------------------------------------- 639 Beschreibung: Selektierte Eintrag in der TreeListBox wird im 640 Edit-Fenster angezeigt 641 Bei Multiselektion werden einige Controls disabled 642 ---------------------------------------------------------------------*/ 643 644 IMPL_LINK( SwEditRegionDlg, GetFirstEntryHdl, SvTreeListBox *, pBox ) 645 { 646 bDontCheckPasswd = sal_True; 647 SvLBoxEntry* pEntry=pBox->FirstSelected(); 648 aHideCB .Enable(sal_True); 649 // --> FME 2004-06-22 #114856# edit in readonly sections 650 aEditInReadonlyCB.Enable(sal_True); 651 // <-- 652 aProtectCB .Enable(sal_True); 653 aFileCB .Enable(sal_True); 654 UNO_NMSPC::Sequence <sal_Int8> aCurPasswd; 655 if( 1 < pBox->GetSelectionCount() ) 656 { 657 aHideCB.EnableTriState( sal_True ); 658 aProtectCB.EnableTriState( sal_True ); 659 // --> FME 2004-06-22 #114856# edit in readonly sections 660 aEditInReadonlyCB.EnableTriState ( sal_True ); 661 // <-- 662 aFileCB.EnableTriState( sal_True ); 663 664 bool bHiddenValid = true; 665 bool bProtectValid = true; 666 bool bConditionValid = true; 667 // --> FME 2004-06-22 #114856# edit in readonly sections 668 bool bEditInReadonlyValid = true; 669 bool bEditInReadonly = true; 670 // <-- 671 bool bHidden = true; 672 bool bProtect = true; 673 String sCondition; 674 sal_Bool bFirst = sal_True; 675 sal_Bool bFileValid = sal_True; 676 sal_Bool bFile = sal_True; 677 sal_Bool bPasswdValid = sal_True; 678 679 while( pEntry ) 680 { 681 SectRepr* pRepr=(SectRepr*) pEntry->GetUserData(); 682 SwSectionData const& rData( pRepr->GetSectionData() ); 683 if(bFirst) 684 { 685 sCondition = rData.GetCondition(); 686 bHidden = rData.IsHidden(); 687 bProtect = rData.IsProtectFlag(); 688 // --> FME 2004-06-22 #114856# edit in readonly sections 689 bEditInReadonly = rData.IsEditInReadonlyFlag(); 690 // <-- 691 bFile = (rData.GetType() != CONTENT_SECTION); 692 aCurPasswd = rData.GetPassword(); 693 } 694 else 695 { 696 String sTemp(rData.GetCondition()); 697 if(sCondition != sTemp) 698 bConditionValid = sal_False; 699 bHiddenValid = (bHidden == rData.IsHidden()); 700 bProtectValid = (bProtect == rData.IsProtectFlag()); 701 // --> FME 2004-06-22 #114856# edit in readonly sections 702 bEditInReadonlyValid = 703 (bEditInReadonly == rData.IsEditInReadonlyFlag()); 704 // <-- 705 bFileValid = (bFile == 706 (rData.GetType() != CONTENT_SECTION)); 707 bPasswdValid = (aCurPasswd == rData.GetPassword()); 708 } 709 pEntry = pBox->NextSelected(pEntry); 710 bFirst = sal_False; 711 } 712 713 aHideCB.SetState( !bHiddenValid ? STATE_DONTKNOW : 714 bHidden ? STATE_CHECK : STATE_NOCHECK); 715 aProtectCB.SetState( !bProtectValid ? STATE_DONTKNOW : 716 bProtect ? STATE_CHECK : STATE_NOCHECK); 717 // --> FME 2004-06-22 #114856# edit in readonly sections 718 aEditInReadonlyCB.SetState( !bEditInReadonlyValid ? STATE_DONTKNOW : 719 bEditInReadonly ? STATE_CHECK : STATE_NOCHECK); 720 // <-- 721 aFileCB.SetState(!bFileValid ? STATE_DONTKNOW : 722 bFile ? STATE_CHECK : STATE_NOCHECK); 723 724 if(bConditionValid) 725 aConditionED.SetText(sCondition); 726 else 727 { 728 // aConditionED.SetText(aEmptyStr); 729 aConditionFT.Enable(sal_False); 730 aConditionED.Enable(sal_False); 731 } 732 733 aFilePB.Enable(sal_False); 734 aFileNameFT .Enable(sal_False); 735 aFileNameED .Enable(sal_False); 736 aSubRegionFT.Enable(sal_False); 737 aSubRegionED.Enable(sal_False); 738 // aNameFT .Enable(sal_False); 739 aCurName .Enable(sal_False); 740 aOptionsPB .Enable(sal_False); 741 aDDECB .Enable(sal_False); 742 aDDECommandFT .Enable(sal_False); 743 sal_Bool bPasswdEnabled = aProtectCB.GetState() == STATE_CHECK; 744 aPasswdCB.Enable(bPasswdEnabled); 745 aPasswdPB.Enable(bPasswdEnabled); 746 if(!bPasswdValid) 747 { 748 pEntry = pBox->FirstSelected(); 749 pBox->SelectAll( sal_False ); 750 pBox->Select( pEntry ); 751 GetFirstEntryHdl(pBox); 752 return 0; 753 } 754 else 755 aPasswdCB.Check(aCurPasswd.getLength() > 0); 756 } 757 else if (pEntry ) 758 { 759 // aNameFT .Enable(sal_True); 760 aCurName .Enable(sal_True); 761 aOptionsPB .Enable(sal_True); 762 SectRepr* pRepr=(SectRepr*) pEntry->GetUserData(); 763 SwSectionData const& rData( pRepr->GetSectionData() ); 764 aConditionED.SetText(rData.GetCondition()); 765 aHideCB.Enable(); 766 aHideCB.SetState((rData.IsHidden()) ? STATE_CHECK : STATE_NOCHECK); 767 sal_Bool bHide = STATE_CHECK == aHideCB.GetState(); 768 aConditionED.Enable(bHide); 769 aConditionFT.Enable(bHide); 770 aPasswdCB.Check(rData.GetPassword().getLength() > 0); 771 772 aOK.Enable(); 773 aPasswdCB.Enable(); 774 aCurName.SetText(pBox->GetEntryText(pEntry)); 775 aCurName.Enable(); 776 aDismiss.Enable(); 777 String aFile = pRepr->GetFile(); 778 String sSub = pRepr->GetSubRegion(); 779 bSubRegionsFilled = false; 780 aSubRegionED.Clear(); 781 if(aFile.Len()||sSub.Len()) 782 { 783 aFileCB.Check(sal_True); 784 aFileNameED.SetText(aFile); 785 aSubRegionED.SetText(sSub); 786 aDDECB.Check(rData.GetType() == DDE_LINK_SECTION); 787 } 788 else 789 { 790 aFileCB.Check(sal_False); 791 aFileNameED.SetText(aFile); 792 aDDECB.Enable(sal_False); 793 aDDECB.Check(sal_False); 794 } 795 UseFileHdl(&aFileCB); 796 DDEHdl( &aDDECB ); 797 aProtectCB.SetState((rData.IsProtectFlag()) 798 ? STATE_CHECK : STATE_NOCHECK); 799 aProtectCB.Enable(); 800 801 // --> FME 2004-06-22 #114856# edit in readonly sections 802 aEditInReadonlyCB.SetState((rData.IsEditInReadonlyFlag()) 803 ? STATE_CHECK : STATE_NOCHECK); 804 aEditInReadonlyCB.Enable(); 805 // <-- 806 807 sal_Bool bPasswdEnabled = aProtectCB.IsChecked(); 808 aPasswdCB.Enable(bPasswdEnabled); 809 aPasswdPB.Enable(bPasswdEnabled); 810 } 811 bDontCheckPasswd = sal_False; 812 return 0; 813 } 814 /*-----------------28.06.97 09:19------------------- 815 816 --------------------------------------------------*/ 817 IMPL_LINK( SwEditRegionDlg, DeselectHdl, SvTreeListBox *, pBox ) 818 { 819 if( !pBox->GetSelectionCount() ) 820 { 821 aHideCB .Enable(sal_False); 822 aProtectCB .Enable(sal_False); 823 // --> FME 2004-06-22 #114856# edit in readonly sections 824 aEditInReadonlyCB.Enable(sal_False); 825 // <-- 826 aPasswdCB .Enable(sal_False); 827 aPasswdCB .Enable(sal_False); 828 aConditionFT .Enable(sal_False); 829 aConditionED.Enable(sal_False); 830 aFileCB .Enable(sal_False); 831 aFilePB .Enable(sal_False); 832 aFileNameFT .Enable(sal_False); 833 aFileNameED .Enable(sal_False); 834 aSubRegionFT .Enable(sal_False); 835 aSubRegionED .Enable(sal_False); 836 // aNameFT .Enable(sal_False); 837 aCurName .Enable(sal_False); 838 aDDECB .Enable(sal_False); 839 aDDECommandFT .Enable(sal_False); 840 841 UseFileHdl(&aFileCB); 842 DDEHdl( &aDDECB ); 843 } 844 return 0; 845 } 846 847 /*--------------------------------------------------------------------- 848 Beschreibung: Im OkHdl werden die veraenderten Einstellungen 849 uebernommen und aufgehobene Bereiche geloescht 850 ---------------------------------------------------------------------*/ 851 852 IMPL_LINK( SwEditRegionDlg, OkHdl, CheckBox *, EMPTYARG ) 853 { 854 // JP 13.03.96: 855 // temp. Array weil sich waehrend des aendern eines Bereiches die 856 // Position innerhalb des "Core-Arrays" verschieben kann: 857 // - bei gelinkten Bereichen, wenn sie weitere SubBereiche haben oder 858 // neu erhalten. 859 // JP 30.05.97: StartUndo darf natuerlich auch erst nach dem Kopieren 860 // der Formate erfolgen (ClearRedo!) 861 862 const SwSectionFmts& rDocFmts = rSh.GetDoc()->GetSections(); 863 SwSectionFmts aOrigArray( 0, 5 ); 864 aOrigArray.Insert( &rDocFmts, 0 ); 865 866 rSh.StartAllAction(); 867 rSh.StartUndo(); 868 rSh.ResetSelect( 0,sal_False ); 869 SvLBoxEntry* pEntry = aTree.First(); 870 871 while( pEntry ) 872 { 873 SectReprPtr pRepr = (SectReprPtr) pEntry->GetUserData(); 874 SwSectionFmt* pFmt = aOrigArray[ pRepr->GetArrPos() ]; 875 if (!pRepr->GetSectionData().IsProtectFlag()) 876 { 877 pRepr->GetSectionData().SetPassword(uno::Sequence<sal_Int8 >()); 878 } 879 sal_uInt16 nNewPos = rDocFmts.GetPos( pFmt ); 880 if( USHRT_MAX != nNewPos ) 881 { 882 SfxItemSet* pSet = pFmt->GetAttrSet().Clone( sal_False ); 883 if( pFmt->GetCol() != pRepr->GetCol() ) 884 pSet->Put( pRepr->GetCol() ); 885 886 if( pFmt->GetBackground(sal_False) != pRepr->GetBackground() ) 887 pSet->Put( pRepr->GetBackground() ); 888 889 if( pFmt->GetFtnAtTxtEnd(sal_False) != pRepr->GetFtnNtAtEnd() ) 890 pSet->Put( pRepr->GetFtnNtAtEnd() ); 891 892 if( pFmt->GetEndAtTxtEnd(sal_False) != pRepr->GetEndNtAtEnd() ) 893 pSet->Put( pRepr->GetEndNtAtEnd() ); 894 895 if( pFmt->GetBalancedColumns() != pRepr->GetBalance() ) 896 pSet->Put( pRepr->GetBalance() ); 897 898 if( pFmt->GetFrmDir() != pRepr->GetFrmDir() ) 899 pSet->Put( pRepr->GetFrmDir() ); 900 901 if( pFmt->GetLRSpace() != pRepr->GetLRSpace()) 902 pSet->Put( pRepr->GetLRSpace()); 903 904 rSh.UpdateSection( nNewPos, pRepr->GetSectionData(), 905 pSet->Count() ? pSet : 0 ); 906 delete pSet; 907 } 908 pEntry = aTree.Next( pEntry ); 909 } 910 911 for(sal_uInt16 i = aSectReprArr.Count(); i; ) 912 { 913 SwSectionFmt* pFmt = aOrigArray[ aSectReprArr[ --i ]->GetArrPos() ]; 914 sal_uInt16 nNewPos = rDocFmts.GetPos( pFmt ); 915 if( USHRT_MAX != nNewPos ) 916 rSh.DelSectionFmt( nNewPos ); 917 } 918 // rSh.ChgSectionPasswd(aNewPasswd); 919 920 aOrigArray.Remove( 0, aOrigArray.Count() ); 921 922 //JP 21.05.97: EndDialog muss vor Ende der EndAction gerufen werden, 923 // sonst kann es ScrollFehler geben. 924 EndDialog(RET_OK); 925 926 rSh.EndUndo(); 927 rSh.EndAllAction(); 928 929 return 0; 930 } 931 /*--------------------------------------------------------------------- 932 Beschreibung: Toggle protect 933 ---------------------------------------------------------------------*/ 934 935 IMPL_LINK( SwEditRegionDlg, ChangeProtectHdl, TriStateBox *, pBox ) 936 { 937 if(!CheckPasswd(pBox)) 938 return 0; 939 pBox->EnableTriState( sal_False ); 940 SvLBoxEntry* pEntry=aTree.FirstSelected(); 941 DBG_ASSERT(pEntry,"kein Entry gefunden"); 942 sal_Bool bCheck = STATE_CHECK == pBox->GetState(); 943 while( pEntry ) 944 { 945 SectReprPtr pRepr = (SectReprPtr) pEntry->GetUserData(); 946 pRepr->GetSectionData().SetProtectFlag(bCheck); 947 Image aImage = BuildBitmap( bCheck, 948 STATE_CHECK == aHideCB.GetState(), sal_False); 949 aTree.SetExpandedEntryBmp(pEntry, aImage, BMP_COLOR_NORMAL); 950 aTree.SetCollapsedEntryBmp(pEntry, aImage, BMP_COLOR_NORMAL); 951 Image aHCImg = BuildBitmap( bCheck, STATE_CHECK == aHideCB.GetState(), sal_True); 952 aTree.SetExpandedEntryBmp(pEntry, aHCImg, BMP_COLOR_HIGHCONTRAST); 953 aTree.SetCollapsedEntryBmp(pEntry, aHCImg, BMP_COLOR_HIGHCONTRAST); 954 pEntry = aTree.NextSelected(pEntry); 955 } 956 aPasswdCB.Enable(bCheck); 957 aPasswdPB.Enable(bCheck); 958 return 0; 959 } 960 /*--------------------------------------------------------------------- 961 Beschreibung: Toggle hide 962 ---------------------------------------------------------------------*/ 963 964 IMPL_LINK( SwEditRegionDlg, ChangeHideHdl, TriStateBox *, pBox ) 965 { 966 if(!CheckPasswd(pBox)) 967 return 0; 968 pBox->EnableTriState( sal_False ); 969 SvLBoxEntry* pEntry=aTree.FirstSelected(); 970 DBG_ASSERT(pEntry,"kein Entry gefunden"); 971 while( pEntry ) 972 { 973 SectReprPtr pRepr = (SectReprPtr) pEntry->GetUserData(); 974 pRepr->GetSectionData().SetHidden(STATE_CHECK == pBox->GetState()); 975 Image aImage = BuildBitmap(STATE_CHECK == aProtectCB.GetState(), 976 STATE_CHECK == pBox->GetState(), sal_False); 977 aTree.SetExpandedEntryBmp(pEntry, aImage, BMP_COLOR_NORMAL); 978 aTree.SetCollapsedEntryBmp(pEntry, aImage, BMP_COLOR_NORMAL); 979 Image aHCImg = BuildBitmap( STATE_CHECK == aProtectCB.GetState(), 980 STATE_CHECK == pBox->GetState(), sal_True); 981 aTree.SetExpandedEntryBmp(pEntry, aHCImg, BMP_COLOR_HIGHCONTRAST); 982 aTree.SetCollapsedEntryBmp(pEntry, aHCImg, BMP_COLOR_HIGHCONTRAST); 983 984 pEntry = aTree.NextSelected(pEntry); 985 } 986 987 sal_Bool bHide = STATE_CHECK == pBox->GetState(); 988 aConditionED.Enable(bHide); 989 aConditionFT.Enable(bHide); 990 return 0; 991 } 992 993 /*--------------------------------------------------------------------- 994 Beschreibung: Toggle edit in readonly 995 ---------------------------------------------------------------------*/ 996 997 IMPL_LINK( SwEditRegionDlg, ChangeEditInReadonlyHdl, TriStateBox *, pBox ) 998 { 999 if(!CheckPasswd(pBox)) 1000 return 0; 1001 pBox->EnableTriState( sal_False ); 1002 SvLBoxEntry* pEntry=aTree.FirstSelected(); 1003 DBG_ASSERT(pEntry,"kein Entry gefunden"); 1004 while( pEntry ) 1005 { 1006 SectReprPtr pRepr = (SectReprPtr) pEntry->GetUserData(); 1007 pRepr->GetSectionData().SetEditInReadonlyFlag( 1008 STATE_CHECK == pBox->GetState()); 1009 pEntry = aTree.NextSelected(pEntry); 1010 } 1011 1012 return 0; 1013 } 1014 1015 /*--------------------------------------------------------------------- 1016 Beschreibung: selektierten Bereich aufheben 1017 ---------------------------------------------------------------------*/ 1018 1019 IMPL_LINK( SwEditRegionDlg, ChangeDismissHdl, CheckBox *, EMPTYARG ) 1020 { 1021 if(!CheckPasswd()) 1022 return 0; 1023 SvLBoxEntry* pEntry = aTree.FirstSelected(); 1024 SvLBoxEntry* pChild; 1025 SvLBoxEntry* pParent; 1026 //zuerst alle selektierten markieren 1027 while(pEntry) 1028 { 1029 const SectReprPtr pSectRepr = (SectRepr*)pEntry->GetUserData(); 1030 pSectRepr->SetSelected(); 1031 pEntry = aTree.NextSelected(pEntry); 1032 } 1033 pEntry = aTree.FirstSelected(); 1034 // dann loeschen 1035 while(pEntry) 1036 { 1037 const SectReprPtr pSectRepr = (SectRepr*)pEntry->GetUserData(); 1038 SvLBoxEntry* pRemove = 0; 1039 sal_Bool bRestart = sal_False; 1040 if(pSectRepr->IsSelected()) 1041 { 1042 aSectReprArr.Insert( pSectRepr ); 1043 while( (pChild = aTree.FirstChild(pEntry) )!= 0 ) 1044 { 1045 //durch das Umhaengen muss wieder am Anfang aufgesetzt werden 1046 bRestart = sal_True; 1047 pParent=aTree.GetParent(pEntry); 1048 aTree.GetModel()->Move(pChild, pParent, aTree.GetModel()->GetRelPos(pEntry)); 1049 } 1050 pRemove = pEntry; 1051 } 1052 if(bRestart) 1053 pEntry = aTree.First(); 1054 else 1055 pEntry = aTree.Next(pEntry); 1056 if(pRemove) 1057 aTree.GetModel()->Remove( pRemove ); 1058 } 1059 1060 if ( (pEntry=aTree.FirstSelected()) == 0 ) 1061 { 1062 aConditionFT. Enable(sal_False); 1063 aConditionED. Enable(sal_False); 1064 aDismiss. Enable(sal_False); 1065 aCurName. Enable(sal_False); 1066 aProtectCB. Enable(sal_False); 1067 aPasswdCB. Enable(sal_False); 1068 aHideCB. Enable(sal_False); 1069 // --> FME 2004-06-22 #114856# edit in readonly sections 1070 aEditInReadonlyCB.Enable(sal_False); 1071 aEditInReadonlyCB.SetState(STATE_NOCHECK); 1072 // <-- 1073 aProtectCB. SetState(STATE_NOCHECK); 1074 aPasswdCB. Check(sal_False); 1075 aHideCB. SetState(STATE_NOCHECK); 1076 aFileCB. Check(sal_False); 1077 //sonst liegt der Focus auf dem HelpButton 1078 aOK.GrabFocus(); 1079 UseFileHdl(&aFileCB); 1080 } 1081 return 0; 1082 } 1083 /*--------------------------------------------------------------------- 1084 Beschreibung: CheckBox mit Datei verknuepfen? 1085 ---------------------------------------------------------------------*/ 1086 1087 IMPL_LINK( SwEditRegionDlg, UseFileHdl, CheckBox *, pBox ) 1088 { 1089 if(!CheckPasswd(pBox)) 1090 return 0; 1091 SvLBoxEntry* pEntry = aTree.FirstSelected(); 1092 pBox->EnableTriState(sal_False); 1093 sal_Bool bMulti = 1 < aTree.GetSelectionCount(); 1094 sal_Bool bFile = pBox->IsChecked(); 1095 if(pEntry) 1096 { 1097 while(pEntry) 1098 { 1099 const SectReprPtr pSectRepr = (SectRepr*)pEntry->GetUserData(); 1100 sal_Bool bContent = pSectRepr->IsContent(); 1101 if( pBox->IsChecked() && bContent && rSh.HasSelection() ) 1102 { 1103 if( RET_NO == QueryBox( this, SW_RES(QB_CONNECT) ).Execute() ) 1104 pBox->Check( sal_False ); 1105 } 1106 if( bFile ) 1107 pSectRepr->SetContent(sal_False); 1108 else 1109 { 1110 pSectRepr->SetFile(aEmptyStr); 1111 pSectRepr->SetSubRegion(aEmptyStr); 1112 pSectRepr->GetSectionData().SetLinkFilePassword(aEmptyStr); 1113 } 1114 1115 pEntry = aTree.NextSelected(pEntry); 1116 } 1117 aFileNameFT.Enable(bFile && ! bMulti); 1118 aFileNameED.Enable(bFile && ! bMulti); 1119 aFilePB.Enable(bFile && ! bMulti); 1120 aSubRegionED.Enable(bFile && ! bMulti); 1121 aSubRegionFT.Enable(bFile && ! bMulti); 1122 aDDECommandFT.Enable(bFile && ! bMulti); 1123 aDDECB.Enable(bFile && ! bMulti); 1124 if( bFile ) 1125 { 1126 aProtectCB.SetState(STATE_CHECK); 1127 aFileNameED.GrabFocus(); 1128 1129 } 1130 else 1131 { 1132 aDDECB.Check(sal_False); 1133 DDEHdl(&aDDECB); 1134 // aFileNameED.SetText(aEmptyStr); 1135 aSubRegionED.SetText(aEmptyStr); 1136 } 1137 } 1138 else 1139 { 1140 pBox->Check(sal_False); 1141 pBox->Enable(sal_False); 1142 aFilePB.Enable(sal_False); 1143 aFileNameED.Enable(sal_False); 1144 aFileNameFT.Enable(sal_False); 1145 aSubRegionED.Enable(sal_False); 1146 aSubRegionFT.Enable(sal_False); 1147 aDDECB.Check(sal_False); 1148 aDDECB.Enable(sal_False); 1149 aDDECommandFT.Enable(sal_False); 1150 } 1151 return 0; 1152 } 1153 1154 /*--------------------------------------------------------------------- 1155 Beschreibung: Dialog Datei einfuegen rufen 1156 ---------------------------------------------------------------------*/ 1157 1158 IMPL_LINK( SwEditRegionDlg, FileSearchHdl, PushButton *, EMPTYARG ) 1159 { 1160 if(!CheckPasswd(0)) 1161 return 0; 1162 1163 m_pOldDefDlgParent = Application::GetDefDialogParent(); 1164 Application::SetDefDialogParent( this ); 1165 if ( m_pDocInserter ) 1166 delete m_pDocInserter; 1167 m_pDocInserter = new ::sfx2::DocumentInserter( 0, String::CreateFromAscii("swriter") ); 1168 m_pDocInserter->StartExecuteModal( LINK( this, SwEditRegionDlg, DlgClosedHdl ) ); 1169 return 0; 1170 } 1171 1172 /*--------------------------------------------------------------------- 1173 Beschreibung: 1174 ---------------------------------------------------------------------*/ 1175 1176 IMPL_LINK( SwEditRegionDlg, OptionsHdl, PushButton *, EMPTYARG ) 1177 { 1178 if(!CheckPasswd()) 1179 return 0; 1180 SvLBoxEntry* pEntry = aTree.FirstSelected(); 1181 1182 if(pEntry) 1183 { 1184 SectReprPtr pSectRepr = (SectRepr*)pEntry->GetUserData(); 1185 SfxItemSet aSet(rSh.GetView().GetPool(), 1186 RES_COL, RES_COL, 1187 RES_COLUMNBALANCE, RES_FRAMEDIR, 1188 RES_BACKGROUND, RES_BACKGROUND, 1189 RES_FRM_SIZE, RES_FRM_SIZE, 1190 SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE, 1191 RES_LR_SPACE, RES_LR_SPACE, 1192 RES_FTN_AT_TXTEND, RES_END_AT_TXTEND, 1193 0); 1194 1195 aSet.Put( pSectRepr->GetCol() ); 1196 aSet.Put( pSectRepr->GetBackground() ); 1197 aSet.Put( pSectRepr->GetFtnNtAtEnd() ); 1198 aSet.Put( pSectRepr->GetEndNtAtEnd() ); 1199 aSet.Put( pSectRepr->GetBalance() ); 1200 aSet.Put( pSectRepr->GetFrmDir() ); 1201 aSet.Put( pSectRepr->GetLRSpace() ); 1202 1203 const SwSectionFmts& rDocFmts = rSh.GetDoc()->GetSections(); 1204 SwSectionFmts aOrigArray( 0, 5 ); 1205 aOrigArray.Insert( &rDocFmts, 0 ); 1206 1207 SwSectionFmt* pFmt = aOrigArray[pSectRepr->GetArrPos()]; 1208 long nWidth = rSh.GetSectionWidth(*pFmt); 1209 aOrigArray.Remove( 0, aOrigArray.Count() ); 1210 if (!nWidth) 1211 nWidth = USHRT_MAX; 1212 1213 aSet.Put(SwFmtFrmSize(ATT_VAR_SIZE, nWidth)); 1214 aSet.Put(SvxSizeItem(SID_ATTR_PAGE_SIZE, Size(nWidth, nWidth))); 1215 1216 SwSectionPropertyTabDialog aTabDlg(this, aSet, rSh); 1217 if(RET_OK == aTabDlg.Execute()) 1218 { 1219 const SfxItemSet* pOutSet = aTabDlg.GetOutputItemSet(); 1220 if( pOutSet && pOutSet->Count() ) 1221 { 1222 const SfxPoolItem *pColItem, *pBrushItem, 1223 *pFtnItem, *pEndItem, *pBalanceItem, 1224 *pFrmDirItem, *pLRSpaceItem; 1225 SfxItemState eColState = pOutSet->GetItemState( 1226 RES_COL, sal_False, &pColItem ); 1227 SfxItemState eBrushState = pOutSet->GetItemState( 1228 RES_BACKGROUND, sal_False, &pBrushItem ); 1229 SfxItemState eFtnState = pOutSet->GetItemState( 1230 RES_FTN_AT_TXTEND, sal_False, &pFtnItem ); 1231 SfxItemState eEndState = pOutSet->GetItemState( 1232 RES_END_AT_TXTEND, sal_False, &pEndItem ); 1233 SfxItemState eBalanceState = pOutSet->GetItemState( 1234 RES_COLUMNBALANCE, sal_False, &pBalanceItem ); 1235 SfxItemState eFrmDirState = pOutSet->GetItemState( 1236 RES_FRAMEDIR, sal_False, &pFrmDirItem ); 1237 SfxItemState eLRState = pOutSet->GetItemState( 1238 RES_LR_SPACE, sal_False, &pLRSpaceItem); 1239 1240 if( SFX_ITEM_SET == eColState || 1241 SFX_ITEM_SET == eBrushState || 1242 SFX_ITEM_SET == eFtnState || 1243 SFX_ITEM_SET == eEndState || 1244 SFX_ITEM_SET == eBalanceState|| 1245 SFX_ITEM_SET == eFrmDirState|| 1246 SFX_ITEM_SET == eLRState) 1247 { 1248 SvLBoxEntry* pSelEntry = aTree.FirstSelected(); 1249 while( pSelEntry ) 1250 { 1251 SectReprPtr pRepr = (SectReprPtr)pSelEntry->GetUserData(); 1252 if( SFX_ITEM_SET == eColState ) 1253 pRepr->GetCol() = *(SwFmtCol*)pColItem; 1254 if( SFX_ITEM_SET == eBrushState ) 1255 pRepr->GetBackground() = *(SvxBrushItem*)pBrushItem; 1256 if( SFX_ITEM_SET == eFtnState ) 1257 pRepr->GetFtnNtAtEnd() = *(SwFmtFtnAtTxtEnd*)pFtnItem; 1258 if( SFX_ITEM_SET == eEndState ) 1259 pRepr->GetEndNtAtEnd() = *(SwFmtEndAtTxtEnd*)pEndItem; 1260 if( SFX_ITEM_SET == eBalanceState ) 1261 pRepr->GetBalance().SetValue(((SwFmtNoBalancedColumns*)pBalanceItem)->GetValue()); 1262 if( SFX_ITEM_SET == eFrmDirState ) 1263 pRepr->GetFrmDir().SetValue(((SvxFrameDirectionItem*)pFrmDirItem)->GetValue()); 1264 if( SFX_ITEM_SET == eLRState ) 1265 pRepr->GetLRSpace() = *(SvxLRSpaceItem*)pLRSpaceItem; 1266 1267 pSelEntry = aTree.NextSelected(pSelEntry); 1268 } 1269 } 1270 } 1271 } 1272 } 1273 1274 return 0; 1275 } 1276 1277 /*--------------------------------------------------------------------- 1278 Beschreibung: Uebernahme des Dateinamen oder 1279 des verknuepften Bereichs 1280 ---------------------------------------------------------------------*/ 1281 1282 IMPL_LINK( SwEditRegionDlg, FileNameHdl, Edit *, pEdit ) 1283 { 1284 Selection aSelect = pEdit->GetSelection(); 1285 if(!CheckPasswd()) 1286 return 0; 1287 pEdit->SetSelection(aSelect); 1288 SvLBoxEntry* pEntry=aTree.FirstSelected(); 1289 DBG_ASSERT(pEntry,"kein Entry gefunden"); 1290 SectReprPtr pSectRepr = (SectRepr*)pEntry->GetUserData(); 1291 if(pEdit == &aFileNameED) 1292 { 1293 bSubRegionsFilled = false; 1294 aSubRegionED.Clear(); 1295 if( aDDECB.IsChecked() ) 1296 { 1297 String sLink( pEdit->GetText() ); 1298 sal_uInt16 nPos = 0; 1299 while( STRING_NOTFOUND != (nPos = sLink.SearchAscii( " ", nPos )) ) 1300 sLink.Erase( nPos--, 1 ); 1301 1302 nPos = sLink.SearchAndReplace( ' ', sfx2::cTokenSeperator ); 1303 sLink.SearchAndReplace( ' ', sfx2::cTokenSeperator, nPos ); 1304 1305 pSectRepr->GetSectionData().SetLinkFileName( sLink ); 1306 pSectRepr->GetSectionData().SetType( DDE_LINK_SECTION ); 1307 } 1308 else 1309 { 1310 String sTmp(pEdit->GetText()); 1311 if(sTmp.Len()) 1312 { 1313 SfxMedium* pMedium = rSh.GetView().GetDocShell()->GetMedium(); 1314 INetURLObject aAbs; 1315 if( pMedium ) 1316 aAbs = pMedium->GetURLObject(); 1317 sTmp = URIHelper::SmartRel2Abs( 1318 aAbs, sTmp, URIHelper::GetMaybeFileHdl() ); 1319 } 1320 pSectRepr->SetFile( sTmp ); 1321 pSectRepr->GetSectionData().SetLinkFilePassword( aEmptyStr ); 1322 } 1323 } 1324 else 1325 { 1326 pSectRepr->SetSubRegion( pEdit->GetText() ); 1327 } 1328 return 0; 1329 } 1330 /*--------------------------------------------------------------------- 1331 Beschreibung: 1332 ---------------------------------------------------------------------*/ 1333 1334 IMPL_LINK( SwEditRegionDlg, DDEHdl, CheckBox*, pBox ) 1335 { 1336 if(!CheckPasswd(pBox)) 1337 return 0; 1338 SvLBoxEntry* pEntry=aTree.FirstSelected(); 1339 if(pEntry) 1340 { 1341 sal_Bool bFile = aFileCB.IsChecked(); 1342 SectReprPtr pSectRepr = (SectRepr*)pEntry->GetUserData(); 1343 SwSectionData & rData( pSectRepr->GetSectionData() ); 1344 sal_Bool bDDE = pBox->IsChecked(); 1345 if(bDDE) 1346 { 1347 aFileNameFT.Hide(); 1348 aDDECommandFT.Enable(); 1349 aDDECommandFT.Show(); 1350 aSubRegionFT.Hide(); 1351 aSubRegionED.Hide(); 1352 if (FILE_LINK_SECTION == rData.GetType()) 1353 { 1354 pSectRepr->SetFile(aEmptyStr); 1355 aFileNameED.SetText(aEmptyStr); 1356 rData.SetLinkFilePassword( aEmptyStr ); 1357 } 1358 rData.SetType(DDE_LINK_SECTION); 1359 aFileNameED.SetAccessibleName(aDDECommandFT.GetText()); 1360 } 1361 else 1362 { 1363 aDDECommandFT.Hide(); 1364 aFileNameFT.Enable(bFile); 1365 aFileNameFT.Show(); 1366 aSubRegionED.Show(); 1367 aSubRegionFT.Show(); 1368 aSubRegionED.Enable(bFile); 1369 aSubRegionFT.Enable(bFile); 1370 aSubRegionED.Enable(bFile); 1371 if (DDE_LINK_SECTION == rData.GetType()) 1372 { 1373 rData.SetType(FILE_LINK_SECTION); 1374 pSectRepr->SetFile(aEmptyStr); 1375 rData.SetLinkFilePassword( aEmptyStr ); 1376 aFileNameED.SetText(aEmptyStr); 1377 } 1378 aFileNameED.SetAccessibleName(aFileNameFT.GetText()); 1379 } 1380 aFilePB.Enable(bFile && !bDDE); 1381 } 1382 return 0; 1383 } 1384 /*--------------------------------------------------------------------- 1385 1386 ---------------------------------------------------------------------*/ 1387 1388 IMPL_LINK( SwEditRegionDlg, ChangePasswdHdl, Button *, pBox ) 1389 { 1390 sal_Bool bChange = pBox == &aPasswdPB; 1391 if(!CheckPasswd(0)) 1392 { 1393 if(!bChange) 1394 aPasswdCB.Check(!aPasswdCB.IsChecked()); 1395 return 0; 1396 } 1397 SvLBoxEntry* pEntry=aTree.FirstSelected(); 1398 sal_Bool bSet = bChange ? bChange : aPasswdCB.IsChecked(); 1399 DBG_ASSERT(pEntry,"kein Entry gefunden"); 1400 while( pEntry ) 1401 { 1402 SectReprPtr pRepr = (SectReprPtr)pEntry->GetUserData(); 1403 if(bSet) 1404 { 1405 if(!pRepr->GetTempPasswd().getLength() || bChange) 1406 { 1407 SwTestPasswdDlg aPasswdDlg(this); 1408 aPasswdDlg.ShowExtras(SHOWEXTRAS_CONFIRM); 1409 if(RET_OK == aPasswdDlg.Execute()) 1410 { 1411 String sNewPasswd( aPasswdDlg.GetPassword() ); 1412 if( aPasswdDlg.GetConfirm() == sNewPasswd ) 1413 { 1414 SvPasswordHelper::GetHashPassword( pRepr->GetTempPasswd(), sNewPasswd ); 1415 } 1416 else 1417 { 1418 InfoBox(pBox, SW_RES(REG_WRONG_PASSWD_REPEAT)).Execute(); 1419 ChangePasswdHdl(pBox); 1420 break; 1421 } 1422 } 1423 else 1424 { 1425 if(!bChange) 1426 aPasswdCB.Check(sal_False); 1427 break; 1428 } 1429 } 1430 pRepr->GetSectionData().SetPassword(pRepr->GetTempPasswd()); 1431 } 1432 else 1433 { 1434 pRepr->GetSectionData().SetPassword(uno::Sequence<sal_Int8 >()); 1435 } 1436 pEntry = aTree.NextSelected(pEntry); 1437 } 1438 return 0; 1439 } 1440 /*--------------------------------------------------------------------- 1441 Beschreibung: Aktueller Bereichsname wird sofort beim editieren 1442 in die TreeListBox eingetragen, mit leerem String 1443 kein Ok() 1444 ---------------------------------------------------------------------*/ 1445 1446 IMPL_LINK( SwEditRegionDlg, NameEditHdl, Edit *, EMPTYARG ) 1447 { 1448 if(!CheckPasswd(0)) 1449 return 0; 1450 SvLBoxEntry* pEntry=aTree.FirstSelected(); 1451 DBG_ASSERT(pEntry,"kein Entry gefunden"); 1452 if (pEntry) 1453 { 1454 String aName = aCurName.GetText(); 1455 aTree.SetEntryText(pEntry,aName); 1456 SectReprPtr pRepr = (SectReprPtr) pEntry->GetUserData(); 1457 pRepr->GetSectionData().SetSectionName(aName); 1458 1459 aOK.Enable(aName.Len() != 0); 1460 } 1461 return 0; 1462 } 1463 /*--------------------------------------------------------------------- 1464 1465 ---------------------------------------------------------------------*/ 1466 1467 IMPL_LINK( SwEditRegionDlg, ConditionEditHdl, Edit *, pEdit ) 1468 { 1469 Selection aSelect = pEdit->GetSelection(); 1470 if(!CheckPasswd(0)) 1471 return 0; 1472 pEdit->SetSelection(aSelect); 1473 SvLBoxEntry* pEntry = aTree.FirstSelected(); 1474 DBG_ASSERT(pEntry,"kein Entry gefunden"); 1475 while( pEntry ) 1476 { 1477 SectReprPtr pRepr = (SectReprPtr)pEntry->GetUserData(); 1478 pRepr->GetSectionData().SetCondition(pEdit->GetText()); 1479 pEntry = aTree.NextSelected(pEntry); 1480 } 1481 return 0; 1482 } 1483 1484 IMPL_LINK( SwEditRegionDlg, DlgClosedHdl, sfx2::FileDialogHelper *, _pFileDlg ) 1485 { 1486 String sFileName, sFilterName, sPassword; 1487 if ( _pFileDlg->GetError() == ERRCODE_NONE ) 1488 { 1489 SfxMedium* pMedium = m_pDocInserter->CreateMedium(); 1490 if ( pMedium ) 1491 { 1492 sFileName = pMedium->GetURLObject().GetMainURL( INetURLObject::NO_DECODE ); 1493 sFilterName = pMedium->GetFilter()->GetFilterName(); 1494 const SfxPoolItem* pItem; 1495 if ( SFX_ITEM_SET == pMedium->GetItemSet()->GetItemState( SID_PASSWORD, sal_False, &pItem ) ) 1496 sPassword = ( (SfxStringItem*)pItem )->GetValue(); 1497 ::lcl_ReadSections( *pMedium, aSubRegionED ); 1498 delete pMedium; 1499 } 1500 } 1501 1502 SvLBoxEntry* pEntry = aTree.FirstSelected(); 1503 DBG_ASSERT( pEntry, "no entry found" ); 1504 if ( pEntry ) 1505 { 1506 SectReprPtr pSectRepr = (SectRepr*)pEntry->GetUserData(); 1507 pSectRepr->SetFile( sFileName ); 1508 pSectRepr->SetFilter( sFilterName ); 1509 pSectRepr->GetSectionData().SetLinkFilePassword(sPassword); 1510 aFileNameED.SetText( pSectRepr->GetFile() ); 1511 } 1512 1513 Application::SetDefDialogParent( m_pOldDefDlgParent ); 1514 return 0; 1515 } 1516 /*-- 03.09.2009 16:24:18--------------------------------------------------- 1517 1518 -----------------------------------------------------------------------*/ 1519 IMPL_LINK( SwEditRegionDlg, SubRegionEventHdl, VclWindowEvent *, pEvent ) 1520 { 1521 if( !bSubRegionsFilled && pEvent && pEvent->GetId() == VCLEVENT_DROPDOWN_PRE_OPEN ) 1522 { 1523 //if necessary fill the names bookmarks/sections/tables now 1524 1525 rtl::OUString sFileName = aFileNameED.GetText(); 1526 if(sFileName.getLength()) 1527 { 1528 SfxMedium* pMedium = rSh.GetView().GetDocShell()->GetMedium(); 1529 INetURLObject aAbs; 1530 if( pMedium ) 1531 aAbs = pMedium->GetURLObject(); 1532 sFileName = URIHelper::SmartRel2Abs( 1533 aAbs, sFileName, URIHelper::GetMaybeFileHdl() ); 1534 1535 //load file and set the shell 1536 SfxMedium aMedium( sFileName, STREAM_STD_READ ); 1537 sFileName = aMedium.GetURLObject().GetMainURL( INetURLObject::NO_DECODE ); 1538 ::lcl_ReadSections( aMedium, aSubRegionED ); 1539 } 1540 else 1541 lcl_FillSubRegionList( rSh, aSubRegionED, 0 ); 1542 bSubRegionsFilled = true; 1543 } 1544 return 0; 1545 } 1546 1547 /* -----------------------------08.05.2002 15:00------------------------------ 1548 1549 ---------------------------------------------------------------------------*/ 1550 Image SwEditRegionDlg::BuildBitmap(sal_Bool bProtect,sal_Bool bHidden, sal_Bool bHighContrast) 1551 { 1552 ImageList& rImgLst = bHighContrast ? aImageILH : aImageIL; 1553 return rImgLst.GetImage((!bHidden+(bProtect<<1)) + 1); 1554 } 1555 1556 /*-------------------------------------------------------------------- 1557 Beschreibung: Hilfsfunktion - Bereichsnamen aus dem Medium lesen 1558 --------------------------------------------------------------------*/ 1559 1560 static void lcl_ReadSections( SfxMedium& rMedium, ComboBox& rBox ) 1561 { 1562 rBox.Clear(); 1563 uno::Reference < embed::XStorage > xStg; 1564 if( rMedium.IsStorage() && (xStg = rMedium.GetStorage()).is() ) 1565 { 1566 SvStrings aArr( 10, 10 ); 1567 sal_uInt32 nFormat = SotStorage::GetFormatID( xStg ); 1568 if ( nFormat == SOT_FORMATSTR_ID_STARWRITER_60 || nFormat == SOT_FORMATSTR_ID_STARWRITERGLOB_60 || 1569 nFormat == SOT_FORMATSTR_ID_STARWRITER_8 || nFormat == SOT_FORMATSTR_ID_STARWRITERGLOB_8) 1570 SwGetReaderXML()->GetSectionList( rMedium, aArr ); 1571 1572 for( sal_uInt16 n = 0; n < aArr.Count(); ++n ) 1573 rBox.InsertEntry( *aArr[ n ] ); 1574 1575 aArr.DeleteAndDestroy(0, aArr.Count()); 1576 } 1577 } 1578 /* -----------------21.05.99 10:16------------------- 1579 * 1580 * --------------------------------------------------*/ 1581 SwInsertSectionTabDialog::SwInsertSectionTabDialog( 1582 Window* pParent, const SfxItemSet& rSet, SwWrtShell& rSh) : 1583 SfxTabDialog( pParent, SW_RES(DLG_INSERT_SECTION), &rSet ), 1584 rWrtSh(rSh) 1585 , m_pSectionData(0) 1586 { 1587 String sInsert(SW_RES(ST_INSERT)); 1588 GetOKButton().SetText(sInsert); 1589 FreeResource(); 1590 SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); 1591 DBG_ASSERT(pFact, "Dialogdiet fail!"); 1592 AddTabPage(TP_INSERT_SECTION, SwInsertSectionTabPage::Create, 0); 1593 AddTabPage(TP_COLUMN, SwColumnPage::Create, 0); 1594 AddTabPage(TP_BACKGROUND, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BACKGROUND ), 0); 1595 AddTabPage(TP_SECTION_FTNENDNOTES, SwSectionFtnEndTabPage::Create, 0); 1596 AddTabPage(TP_SECTION_INDENTS, SwSectionIndentTabPage::Create, 0); 1597 1598 SvxHtmlOptions* pHtmlOpt = SvxHtmlOptions::Get(); 1599 long nHtmlMode = pHtmlOpt->GetExportMode(); 1600 1601 sal_Bool bWeb = 0 != PTR_CAST( SwWebDocShell, rSh.GetView().GetDocShell() ); 1602 if(bWeb) 1603 { 1604 RemoveTabPage(TP_SECTION_FTNENDNOTES); 1605 RemoveTabPage(TP_SECTION_INDENTS); 1606 if( HTML_CFG_NS40 != nHtmlMode && HTML_CFG_WRITER != nHtmlMode) 1607 RemoveTabPage(TP_COLUMN); 1608 } 1609 SetCurPageId(TP_INSERT_SECTION); 1610 } 1611 /* -----------------21.05.99 10:17------------------- 1612 * 1613 * --------------------------------------------------*/ 1614 SwInsertSectionTabDialog::~SwInsertSectionTabDialog() 1615 { 1616 } 1617 /* -----------------21.05.99 10:23------------------- 1618 * 1619 * --------------------------------------------------*/ 1620 void SwInsertSectionTabDialog::PageCreated( sal_uInt16 nId, SfxTabPage &rPage ) 1621 { 1622 if(TP_INSERT_SECTION == nId) 1623 ((SwInsertSectionTabPage&)rPage).SetWrtShell(rWrtSh); 1624 else if( TP_BACKGROUND == nId ) 1625 { 1626 SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); 1627 aSet.Put (SfxUInt32Item(SID_FLAG_TYPE, SVX_SHOW_SELECTOR)); 1628 rPage.PageCreated(aSet); 1629 } 1630 else if( TP_COLUMN == nId ) 1631 { 1632 const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)GetInputSetImpl()->Get(RES_FRM_SIZE); 1633 ((SwColumnPage&)rPage).SetPageWidth(rSize.GetWidth()); 1634 ((SwColumnPage&)rPage).ShowBalance(sal_True); 1635 ((SwColumnPage&)rPage).SetInSection(sal_True); 1636 } 1637 else if(TP_SECTION_INDENTS == nId) 1638 ((SwSectionIndentTabPage&)rPage).SetWrtShell(rWrtSh); 1639 } 1640 /* -----------------21.05.99 13:08------------------- 1641 * 1642 * --------------------------------------------------*/ 1643 1644 void SwInsertSectionTabDialog::SetSectionData(SwSectionData const& rSect) 1645 { 1646 m_pSectionData.reset( new SwSectionData(rSect) ); 1647 } 1648 /* -----------------21.05.99 13:10------------------- 1649 * 1650 * --------------------------------------------------*/ 1651 short SwInsertSectionTabDialog::Ok() 1652 { 1653 short nRet = SfxTabDialog::Ok(); 1654 DBG_ASSERT(m_pSectionData.get(), 1655 "SwInsertSectionTabDialog: no SectionData?"); 1656 const SfxItemSet* pOutputItemSet = GetOutputItemSet(); 1657 rWrtSh.InsertSection(*m_pSectionData, pOutputItemSet); 1658 SfxViewFrame* pViewFrm = rWrtSh.GetView().GetViewFrame(); 1659 uno::Reference< frame::XDispatchRecorder > xRecorder = 1660 pViewFrm->GetBindings().GetRecorder(); 1661 if ( xRecorder.is() ) 1662 { 1663 SfxRequest aRequest( pViewFrm, FN_INSERT_REGION); 1664 const SfxPoolItem* pCol; 1665 if(SFX_ITEM_SET == pOutputItemSet->GetItemState(RES_COL, sal_False, &pCol)) 1666 { 1667 aRequest.AppendItem(SfxUInt16Item(SID_ATTR_COLUMNS, 1668 ((const SwFmtCol*)pCol)->GetColumns().Count())); 1669 } 1670 aRequest.AppendItem(SfxStringItem( FN_PARAM_REGION_NAME, 1671 m_pSectionData->GetSectionName())); 1672 aRequest.AppendItem(SfxStringItem( FN_PARAM_REGION_CONDITION, 1673 m_pSectionData->GetCondition())); 1674 aRequest.AppendItem(SfxBoolItem( FN_PARAM_REGION_HIDDEN, 1675 m_pSectionData->IsHidden())); 1676 aRequest.AppendItem(SfxBoolItem( FN_PARAM_REGION_PROTECT, 1677 m_pSectionData->IsProtectFlag())); 1678 // --> FME 2004-06-22 #114856# edit in readonly sections 1679 aRequest.AppendItem(SfxBoolItem( FN_PARAM_REGION_EDIT_IN_READONLY, 1680 m_pSectionData->IsEditInReadonlyFlag())); 1681 // <-- 1682 1683 String sLinkFileName( m_pSectionData->GetLinkFileName() ); 1684 aRequest.AppendItem(SfxStringItem( FN_PARAM_1, sLinkFileName.GetToken( 0, sfx2::cTokenSeperator ))); 1685 aRequest.AppendItem(SfxStringItem( FN_PARAM_2, sLinkFileName.GetToken( 1, sfx2::cTokenSeperator ))); 1686 aRequest.AppendItem(SfxStringItem( FN_PARAM_3, sLinkFileName.GetToken( 2, sfx2::cTokenSeperator ))); 1687 aRequest.Done(); 1688 } 1689 return nRet; 1690 } 1691 1692 /* -----------------21.05.99 10:31------------------- 1693 * 1694 * --------------------------------------------------*/ 1695 SwInsertSectionTabPage::SwInsertSectionTabPage( 1696 Window *pParent, const SfxItemSet &rAttrSet) : 1697 SfxTabPage( pParent, SW_RES(TP_INSERT_SECTION), rAttrSet ), 1698 aNameFL ( this, SW_RES( FL_NAME ) ), 1699 aCurName ( this, SW_RES( ED_RNAME ) ), 1700 aLinkFL ( this, SW_RES( FL_LINK ) ), 1701 aFileCB ( this, SW_RES( CB_FILE ) ), 1702 aDDECB ( this, SW_RES( CB_DDE ) ) , 1703 aDDECommandFT ( this, SW_RES( FT_DDE ) ) , 1704 aFileNameFT ( this, SW_RES( FT_FILE ) ) , 1705 aFileNameED ( this, SW_RES( ED_FILE ) ), 1706 aFilePB ( this, SW_RES( PB_FILE ) ), 1707 aSubRegionFT ( this, SW_RES( FT_SUBREG ) ) , 1708 aSubRegionED ( this, SW_RES( LB_SUBREG ) ) , 1709 1710 aProtectFL ( this, SW_RES( FL_PROTECT ) ), 1711 aProtectCB ( this, SW_RES( CB_PROTECT ) ), 1712 aPasswdCB ( this, SW_RES( CB_PASSWD ) ), 1713 aPasswdPB ( this, SW_RES( PB_PASSWD ) ), 1714 1715 aHideFL ( this, SW_RES( FL_HIDE ) ), 1716 aHideCB ( this, SW_RES( CB_HIDE ) ), 1717 aConditionFT ( this, SW_RES( FT_CONDITION ) ), 1718 aConditionED ( this, SW_RES( ED_CONDITION ) ), 1719 // --> FME 2004-06-22 #114856# edit in readonly sections 1720 aPropertiesFL ( this, SW_RES( FL_PROPERTIES ) ), 1721 aEditInReadonlyCB ( this, SW_RES( CB_EDIT_IN_READONLY ) ), 1722 // <-- 1723 1724 m_pWrtSh(0), 1725 m_pDocInserter(NULL), 1726 m_pOldDefDlgParent(NULL) 1727 { 1728 FreeResource(); 1729 1730 aProtectCB.SetClickHdl ( LINK( this, SwInsertSectionTabPage, ChangeProtectHdl)); 1731 aPasswdCB.SetClickHdl ( LINK( this, SwInsertSectionTabPage, ChangePasswdHdl)); 1732 aPasswdPB.SetClickHdl ( LINK( this, SwInsertSectionTabPage, ChangePasswdHdl)); 1733 aHideCB.SetClickHdl ( LINK( this, SwInsertSectionTabPage, ChangeHideHdl)); 1734 // --> FME 2004-06-22 #114856# edit in readonly sections 1735 aEditInReadonlyCB.SetClickHdl ( LINK( this, SwInsertSectionTabPage, ChangeEditInReadonlyHdl)); 1736 // <-- 1737 aFileCB.SetClickHdl ( LINK( this, SwInsertSectionTabPage, UseFileHdl )); 1738 aFilePB.SetClickHdl ( LINK( this, SwInsertSectionTabPage, FileSearchHdl )); 1739 aCurName.SetModifyHdl ( LINK( this, SwInsertSectionTabPage, NameEditHdl)); 1740 aDDECB.SetClickHdl ( LINK( this, SwInsertSectionTabPage, DDEHdl )); 1741 ChangeProtectHdl(&aProtectCB); 1742 aPasswdPB.SetAccessibleRelationMemberOf(&aProtectFL); 1743 aSubRegionED.EnableAutocomplete( sal_True, sal_True ); 1744 } 1745 /* -----------------21.05.99 10:31------------------- 1746 * 1747 * --------------------------------------------------*/ 1748 SwInsertSectionTabPage::~SwInsertSectionTabPage() 1749 { 1750 delete m_pDocInserter; 1751 } 1752 1753 void SwInsertSectionTabPage::SetWrtShell(SwWrtShell& rSh) 1754 { 1755 m_pWrtSh = &rSh; 1756 1757 sal_Bool bWeb = 0 != PTR_CAST(SwWebDocShell, m_pWrtSh->GetView().GetDocShell()); 1758 if(bWeb) 1759 { 1760 aHideCB .Hide(); 1761 aConditionED .Hide(); 1762 aConditionFT .Hide(); 1763 aDDECB .Hide(); 1764 aDDECommandFT .Hide(); 1765 } 1766 1767 lcl_FillSubRegionList( *m_pWrtSh, aSubRegionED, &aCurName ); 1768 1769 SwSectionData *const pSectionData = 1770 static_cast<SwInsertSectionTabDialog*>(GetTabDialog()) 1771 ->GetSectionData(); 1772 if (pSectionData) // something set? 1773 { 1774 aCurName.SetText( 1775 rSh.GetUniqueSectionName(& pSectionData->GetSectionName())); 1776 aProtectCB.Check( 0 != pSectionData->IsProtectFlag() ); 1777 m_sFileName = pSectionData->GetLinkFileName(); 1778 m_sFilePasswd = pSectionData->GetLinkFilePassword(); 1779 aFileCB.Check( 0 != m_sFileName.Len() ); 1780 aFileNameED.SetText( m_sFileName ); 1781 UseFileHdl( &aFileCB ); 1782 } 1783 else 1784 { 1785 aCurName.SetText( rSh.GetUniqueSectionName() ); 1786 } 1787 } 1788 /* -----------------21.05.99 10:32------------------- 1789 * 1790 * --------------------------------------------------*/ 1791 sal_Bool SwInsertSectionTabPage::FillItemSet( SfxItemSet& ) 1792 { 1793 SwSectionData aSection(CONTENT_SECTION, aCurName.GetText()); 1794 aSection.SetCondition(aConditionED.GetText()); 1795 sal_Bool bProtected = aProtectCB.IsChecked(); 1796 aSection.SetProtectFlag(bProtected); 1797 aSection.SetHidden(aHideCB.IsChecked()); 1798 // --> FME 2004-06-22 #114856# edit in readonly sections 1799 aSection.SetEditInReadonlyFlag(aEditInReadonlyCB.IsChecked()); 1800 // <-- 1801 if(bProtected) 1802 { 1803 aSection.SetPassword(m_aNewPasswd); 1804 } 1805 String sFileName = aFileNameED.GetText(); 1806 String sSubRegion = aSubRegionED.GetText(); 1807 sal_Bool bDDe = aDDECB.IsChecked(); 1808 if(aFileCB.IsChecked() && (sFileName.Len() || sSubRegion.Len() || bDDe)) 1809 { 1810 String aLinkFile; 1811 if( bDDe ) 1812 { 1813 aLinkFile = sFileName; 1814 1815 sal_uInt16 nPos = 0; 1816 while( STRING_NOTFOUND != (nPos = aLinkFile.SearchAscii( " ", nPos )) ) 1817 aLinkFile.Erase( nPos--, 1 ); 1818 1819 nPos = aLinkFile.SearchAndReplace( ' ', sfx2::cTokenSeperator ); 1820 aLinkFile.SearchAndReplace( ' ', sfx2::cTokenSeperator, nPos ); 1821 } 1822 else 1823 { 1824 if(sFileName.Len()) 1825 { 1826 SfxMedium* pMedium = m_pWrtSh->GetView().GetDocShell()->GetMedium(); 1827 INetURLObject aAbs; 1828 if( pMedium ) 1829 aAbs = pMedium->GetURLObject(); 1830 aLinkFile = URIHelper::SmartRel2Abs( 1831 aAbs, sFileName, URIHelper::GetMaybeFileHdl() ); 1832 aSection.SetLinkFilePassword( m_sFilePasswd ); 1833 } 1834 1835 aLinkFile += sfx2::cTokenSeperator; 1836 aLinkFile += m_sFilterName; 1837 aLinkFile += sfx2::cTokenSeperator; 1838 aLinkFile += sSubRegion; 1839 } 1840 1841 aSection.SetLinkFileName(aLinkFile); 1842 if(aLinkFile.Len()) 1843 { 1844 aSection.SetType( aDDECB.IsChecked() ? 1845 DDE_LINK_SECTION : 1846 FILE_LINK_SECTION); 1847 } 1848 } 1849 ((SwInsertSectionTabDialog*)GetTabDialog())->SetSectionData(aSection); 1850 return sal_True; 1851 } 1852 /* -----------------21.05.99 10:32------------------- 1853 * 1854 * --------------------------------------------------*/ 1855 void SwInsertSectionTabPage::Reset( const SfxItemSet& ) 1856 { 1857 } 1858 /* -----------------21.05.99 11:22------------------- 1859 * 1860 * --------------------------------------------------*/ 1861 SfxTabPage* SwInsertSectionTabPage::Create( Window* pParent, 1862 const SfxItemSet& rAttrSet) 1863 { 1864 return new SwInsertSectionTabPage(pParent, rAttrSet); 1865 } 1866 /*--------------------------------------------------------------------- 1867 1868 ---------------------------------------------------------------------*/ 1869 1870 IMPL_LINK( SwInsertSectionTabPage, ChangeHideHdl, CheckBox *, pBox ) 1871 { 1872 sal_Bool bHide = pBox->IsChecked(); 1873 aConditionED.Enable(bHide); 1874 aConditionFT.Enable(bHide); 1875 return 0; 1876 } 1877 /*--------------------------------------------------------------------- 1878 1879 ---------------------------------------------------------------------*/ 1880 1881 IMPL_LINK( SwInsertSectionTabPage, ChangeEditInReadonlyHdl, CheckBox *, EMPTYARG ) 1882 { 1883 return 0; 1884 } 1885 /*--------------------------------------------------------------------- 1886 1887 ---------------------------------------------------------------------*/ 1888 1889 IMPL_LINK( SwInsertSectionTabPage, ChangeProtectHdl, CheckBox *, pBox ) 1890 { 1891 sal_Bool bCheck = pBox->IsChecked(); 1892 aPasswdCB.Enable(bCheck); 1893 aPasswdPB.Enable(bCheck); 1894 return 0; 1895 } 1896 /* -----------------------------26.04.01 14:50-------------------------------- 1897 1898 ---------------------------------------------------------------------------*/ 1899 IMPL_LINK( SwInsertSectionTabPage, ChangePasswdHdl, Button *, pButton ) 1900 { 1901 sal_Bool bChange = pButton == &aPasswdPB; 1902 sal_Bool bSet = bChange ? bChange : aPasswdCB.IsChecked(); 1903 if(bSet) 1904 { 1905 if(!m_aNewPasswd.getLength() || bChange) 1906 { 1907 SwTestPasswdDlg aPasswdDlg(this); 1908 aPasswdDlg.ShowExtras(SHOWEXTRAS_CONFIRM); 1909 if(RET_OK == aPasswdDlg.Execute()) 1910 { 1911 String sNewPasswd( aPasswdDlg.GetPassword() ); 1912 if( aPasswdDlg.GetConfirm() == sNewPasswd ) 1913 { 1914 SvPasswordHelper::GetHashPassword( m_aNewPasswd, sNewPasswd ); 1915 } 1916 else 1917 { 1918 InfoBox(pButton, SW_RES(REG_WRONG_PASSWD_REPEAT)).Execute(); 1919 } 1920 } 1921 else if(!bChange) 1922 aPasswdCB.Check(sal_False); 1923 } 1924 } 1925 else 1926 m_aNewPasswd.realloc(0); 1927 return 0; 1928 } 1929 /*--------------------------------------------------------------------- 1930 1931 ---------------------------------------------------------------------*/ 1932 1933 IMPL_LINK_INLINE_START( SwInsertSectionTabPage, NameEditHdl, Edit *, EMPTYARG ) 1934 { 1935 String aName=aCurName.GetText(); 1936 GetTabDialog()->GetOKButton().Enable(aName.Len() && aCurName.GetEntryPos( aName ) == USHRT_MAX); 1937 return 0; 1938 } 1939 IMPL_LINK_INLINE_END( SwInsertSectionTabPage, NameEditHdl, Edit *, EMPTYARG ) 1940 1941 /*--------------------------------------------------------------------- 1942 1943 ---------------------------------------------------------------------*/ 1944 1945 IMPL_LINK( SwInsertSectionTabPage, UseFileHdl, CheckBox *, pBox ) 1946 { 1947 if( pBox->IsChecked() ) 1948 { 1949 if( m_pWrtSh->HasSelection() && 1950 RET_NO == QueryBox( this, SW_RES(QB_CONNECT) ).Execute() ) 1951 pBox->Check( sal_False ); 1952 } 1953 1954 sal_Bool bFile = pBox->IsChecked(); 1955 aFileNameFT.Enable(bFile); 1956 aFileNameED.Enable(bFile); 1957 aFilePB.Enable(bFile); 1958 aSubRegionFT.Enable(bFile); 1959 aSubRegionED.Enable(bFile); 1960 aDDECommandFT.Enable(bFile); 1961 aDDECB.Enable(bFile); 1962 if( bFile ) 1963 { 1964 // aFileNameED.SetText( aFileName ); 1965 aFileNameED.GrabFocus(); 1966 aProtectCB.Check( sal_True ); 1967 } 1968 else 1969 { 1970 aDDECB.Check(sal_False); 1971 DDEHdl(&aDDECB); 1972 // aFileNameED.SetText(aEmptyStr); 1973 } 1974 return 0; 1975 } 1976 1977 /*--------------------------------------------------------------------- 1978 1979 ---------------------------------------------------------------------*/ 1980 1981 IMPL_LINK( SwInsertSectionTabPage, FileSearchHdl, PushButton *, EMPTYARG ) 1982 { 1983 m_pOldDefDlgParent = Application::GetDefDialogParent(); 1984 Application::SetDefDialogParent( this ); 1985 if ( m_pDocInserter ) 1986 delete m_pDocInserter; 1987 m_pDocInserter = new ::sfx2::DocumentInserter( 0, String::CreateFromAscii("swriter") ); 1988 m_pDocInserter->StartExecuteModal( LINK( this, SwInsertSectionTabPage, DlgClosedHdl ) ); 1989 return 0; 1990 } 1991 1992 /*--------------------------------------------------------------------- 1993 1994 ---------------------------------------------------------------------*/ 1995 1996 IMPL_LINK( SwInsertSectionTabPage, DDEHdl, CheckBox*, pBox ) 1997 { 1998 sal_Bool bDDE = pBox->IsChecked(); 1999 sal_Bool bFile = aFileCB.IsChecked(); 2000 aFilePB.Enable(!bDDE && bFile); 2001 if(bDDE) 2002 { 2003 aFileNameFT.Hide(); 2004 aDDECommandFT.Enable(bDDE); 2005 aDDECommandFT.Show(); 2006 aSubRegionFT.Hide(); 2007 aSubRegionED.Hide(); 2008 aFileNameED.SetAccessibleName(aDDECommandFT.GetText()); 2009 } 2010 else 2011 { 2012 aDDECommandFT.Hide(); 2013 aFileNameFT.Enable(bFile); 2014 aFileNameFT.Show(); 2015 aSubRegionFT.Show(); 2016 aSubRegionED.Show(); 2017 aSubRegionED.Enable(bFile); 2018 aFileNameED.SetAccessibleName(aFileNameFT.GetText()); 2019 } 2020 return 0; 2021 } 2022 2023 IMPL_LINK( SwInsertSectionTabPage, DlgClosedHdl, sfx2::FileDialogHelper *, _pFileDlg ) 2024 { 2025 if ( _pFileDlg->GetError() == ERRCODE_NONE ) 2026 { 2027 SfxMedium* pMedium = m_pDocInserter->CreateMedium(); 2028 if ( pMedium ) 2029 { 2030 m_sFileName = pMedium->GetURLObject().GetMainURL( INetURLObject::NO_DECODE ); 2031 m_sFilterName = pMedium->GetFilter()->GetFilterName(); 2032 const SfxPoolItem* pItem; 2033 if ( SFX_ITEM_SET == pMedium->GetItemSet()->GetItemState( SID_PASSWORD, sal_False, &pItem ) ) 2034 m_sFilePasswd = ( (SfxStringItem*)pItem )->GetValue(); 2035 aFileNameED.SetText( INetURLObject::decode( 2036 m_sFileName, INET_HEX_ESCAPE, INetURLObject::DECODE_UNAMBIGUOUS, RTL_TEXTENCODING_UTF8 ) ); 2037 ::lcl_ReadSections( *pMedium, aSubRegionED ); 2038 delete pMedium; 2039 } 2040 } 2041 else 2042 m_sFilterName = m_sFilePasswd = aEmptyStr; 2043 2044 Application::SetDefDialogParent( m_pOldDefDlgParent ); 2045 return 0; 2046 } 2047 2048 // -------------------------------------------------------------- 2049 2050 // Numerierungsformat Umsetzung: 2051 // ListBox - Format - Enum-Wert 2052 // 0 - A, B, C, ... - 0 2053 // 1 - a, b, c, ... - 1 2054 // 2 - I, II, III, ... - 2 2055 // 3 - i, ii, iii, ... - 3 2056 // 4 - 1, 2, 3, ... - 4 2057 // 5 - A, .., AA, .., - 9 2058 // 6 - a, .., aa, .., - 10 2059 2060 inline sal_uInt16 GetNumPos( sal_uInt16 n ) 2061 { 2062 return SVX_NUM_ARABIC < n ? n - 4 : n; 2063 } 2064 2065 inline SvxExtNumType GetNumType( sal_uInt16 n ) 2066 { 2067 return (SvxExtNumType)(4 < n ? n + 4 : n ); 2068 } 2069 2070 SwSectionFtnEndTabPage::SwSectionFtnEndTabPage( Window *pParent, 2071 const SfxItemSet &rAttrSet) 2072 : SfxTabPage( pParent, SW_RES( TP_SECTION_FTNENDNOTES ), rAttrSet ), 2073 aFtnFL ( this, SW_RES( FL_FTN ) ), 2074 aFtnNtAtTextEndCB ( this, SW_RES( CB_FTN_AT_TXTEND ) ), 2075 2076 aFtnNtNumCB ( this, SW_RES( CB_FTN_NUM ) ), 2077 aFtnOffsetLbl ( this, SW_RES( FT_FTN_OFFSET )), 2078 aFtnOffsetFld ( this, SW_RES( FLD_FTN_OFFSET )), 2079 2080 aFtnNtNumFmtCB ( this, SW_RES( CB_FTN_NUM_FMT ) ), 2081 aFtnPrefixFT ( this, SW_RES( FT_FTN_PREFIX )), 2082 aFtnPrefixED ( this, SW_RES( ED_FTN_PREFIX )), 2083 aFtnNumViewBox ( this, SW_RES( LB_FTN_NUMVIEW ), INSERT_NUM_EXTENDED_TYPES), 2084 aFtnSuffixFT ( this, SW_RES( FT_FTN_SUFFIX )), 2085 aFtnSuffixED ( this, SW_RES( ED_FTN_SUFFIX )), 2086 2087 aEndFL ( this, SW_RES( FL_END ) ), 2088 aEndNtAtTextEndCB ( this, SW_RES( CB_END_AT_TXTEND )), 2089 2090 aEndNtNumCB ( this, SW_RES( CB_END_NUM )), 2091 aEndOffsetLbl ( this, SW_RES( FT_END_OFFSET )), 2092 aEndOffsetFld ( this, SW_RES( FLD_END_OFFSET )), 2093 2094 aEndNtNumFmtCB ( this, SW_RES( CB_END_NUM_FMT ) ), 2095 aEndPrefixFT ( this, SW_RES( FT_END_PREFIX )), 2096 aEndPrefixED ( this, SW_RES( ED_END_PREFIX )), 2097 aEndNumViewBox ( this, SW_RES( LB_END_NUMVIEW ), INSERT_NUM_EXTENDED_TYPES), 2098 aEndSuffixFT ( this, SW_RES( FT_END_SUFFIX )), 2099 aEndSuffixED ( this, SW_RES( ED_END_SUFFIX )) 2100 { 2101 FreeResource(); 2102 2103 Link aLk( LINK( this, SwSectionFtnEndTabPage, FootEndHdl)); 2104 aFtnNtAtTextEndCB.SetClickHdl( aLk ); 2105 aFtnNtNumCB.SetClickHdl( aLk ); 2106 aEndNtAtTextEndCB.SetClickHdl( aLk ); 2107 aEndNtNumCB.SetClickHdl( aLk ); 2108 aFtnNtNumFmtCB.SetClickHdl( aLk ); 2109 aEndNtNumFmtCB.SetClickHdl( aLk ); 2110 } 2111 2112 SwSectionFtnEndTabPage::~SwSectionFtnEndTabPage() 2113 { 2114 } 2115 2116 sal_Bool SwSectionFtnEndTabPage::FillItemSet( SfxItemSet& rSet ) 2117 { 2118 SwFmtFtnAtTxtEnd aFtn( aFtnNtAtTextEndCB.IsChecked() 2119 ? ( aFtnNtNumCB.IsChecked() 2120 ? ( aFtnNtNumFmtCB.IsChecked() 2121 ? FTNEND_ATTXTEND_OWNNUMANDFMT 2122 : FTNEND_ATTXTEND_OWNNUMSEQ ) 2123 : FTNEND_ATTXTEND ) 2124 : FTNEND_ATPGORDOCEND ); 2125 2126 switch( aFtn.GetValue() ) 2127 { 2128 case FTNEND_ATTXTEND_OWNNUMANDFMT: 2129 aFtn.SetNumType( aFtnNumViewBox.GetSelectedNumberingType() ); 2130 aFtn.SetPrefix( aFtnPrefixED.GetText() ); 2131 aFtn.SetSuffix( aFtnSuffixED.GetText() ); 2132 // no break; 2133 2134 case FTNEND_ATTXTEND_OWNNUMSEQ: 2135 aFtn.SetOffset( static_cast< sal_uInt16 >( aFtnOffsetFld.GetValue()-1 ) ); 2136 // no break; 2137 } 2138 2139 SwFmtEndAtTxtEnd aEnd( aEndNtAtTextEndCB.IsChecked() 2140 ? ( aEndNtNumCB.IsChecked() 2141 ? ( aEndNtNumFmtCB.IsChecked() 2142 ? FTNEND_ATTXTEND_OWNNUMANDFMT 2143 : FTNEND_ATTXTEND_OWNNUMSEQ ) 2144 : FTNEND_ATTXTEND ) 2145 : FTNEND_ATPGORDOCEND ); 2146 2147 switch( aEnd.GetValue() ) 2148 { 2149 case FTNEND_ATTXTEND_OWNNUMANDFMT: 2150 aEnd.SetNumType( aEndNumViewBox.GetSelectedNumberingType() ); 2151 aEnd.SetPrefix( aEndPrefixED.GetText() ); 2152 aEnd.SetSuffix( aEndSuffixED.GetText() ); 2153 // no break; 2154 2155 case FTNEND_ATTXTEND_OWNNUMSEQ: 2156 aEnd.SetOffset( static_cast< sal_uInt16 >( aEndOffsetFld.GetValue()-1 ) ); 2157 // no break; 2158 } 2159 2160 rSet.Put( aFtn ); 2161 rSet.Put( aEnd ); 2162 2163 return sal_True; 2164 } 2165 2166 void SwSectionFtnEndTabPage::ResetState( sal_Bool bFtn, 2167 const SwFmtFtnEndAtTxtEnd& rAttr ) 2168 { 2169 CheckBox *pNtAtTextEndCB, *pNtNumCB, *pNtNumFmtCB; 2170 FixedText*pPrefixFT, *pSuffixFT; 2171 Edit *pPrefixED, *pSuffixED; 2172 SwNumberingTypeListBox *pNumViewBox; 2173 FixedText* pOffsetTxt; 2174 NumericField *pOffsetFld; 2175 2176 if( bFtn ) 2177 { 2178 pNtAtTextEndCB = &aFtnNtAtTextEndCB; 2179 pNtNumCB = &aFtnNtNumCB; 2180 pNtNumFmtCB = &aFtnNtNumFmtCB; 2181 pPrefixFT = &aFtnPrefixFT; 2182 pPrefixED = &aFtnPrefixED; 2183 pSuffixFT = &aFtnSuffixFT; 2184 pSuffixED = &aFtnSuffixED; 2185 pNumViewBox = &aFtnNumViewBox; 2186 pOffsetTxt = &aFtnOffsetLbl; 2187 pOffsetFld = &aFtnOffsetFld; 2188 } 2189 else 2190 { 2191 pNtAtTextEndCB = &aEndNtAtTextEndCB; 2192 pNtNumCB = &aEndNtNumCB; 2193 pNtNumFmtCB = &aEndNtNumFmtCB; 2194 pPrefixFT = &aEndPrefixFT; 2195 pPrefixED = &aEndPrefixED; 2196 pSuffixFT = &aEndSuffixFT; 2197 pSuffixED = &aEndSuffixED; 2198 pNumViewBox = &aEndNumViewBox; 2199 pOffsetTxt = &aEndOffsetLbl; 2200 pOffsetFld = &aEndOffsetFld; 2201 } 2202 2203 sal_uInt16 eState = rAttr.GetValue(); 2204 switch( eState ) 2205 { 2206 // case FTNEND_ATPGORDOCEND: 2207 case FTNEND_ATTXTEND_OWNNUMANDFMT: 2208 pNtNumFmtCB->SetState( STATE_CHECK ); 2209 // no break; 2210 2211 case FTNEND_ATTXTEND_OWNNUMSEQ: 2212 pNtNumCB->SetState( STATE_CHECK ); 2213 // no break; 2214 2215 case FTNEND_ATTXTEND: 2216 pNtAtTextEndCB->SetState( STATE_CHECK ); 2217 // no break; 2218 } 2219 2220 pNumViewBox->SelectNumberingType( rAttr.GetNumType() ); 2221 pOffsetFld->SetValue( rAttr.GetOffset() + 1 ); 2222 pPrefixED->SetText( rAttr.GetPrefix() ); 2223 pSuffixED->SetText( rAttr.GetSuffix() ); 2224 2225 switch( eState ) 2226 { 2227 case FTNEND_ATPGORDOCEND: 2228 pNtNumCB->Enable( sal_False ); 2229 // no break; 2230 2231 case FTNEND_ATTXTEND: 2232 pNtNumFmtCB->Enable( sal_False ); 2233 pOffsetFld->Enable( sal_False ); 2234 pOffsetTxt->Enable( sal_False ); 2235 // no break; 2236 2237 case FTNEND_ATTXTEND_OWNNUMSEQ: 2238 pNumViewBox->Enable( sal_False ); 2239 pPrefixFT->Enable( sal_False ); 2240 pPrefixED->Enable( sal_False ); 2241 pSuffixFT->Enable( sal_False ); 2242 pSuffixED->Enable( sal_False ); 2243 // no break; 2244 } 2245 } 2246 2247 void SwSectionFtnEndTabPage::Reset( const SfxItemSet& rSet ) 2248 { 2249 ResetState( sal_True, (const SwFmtFtnAtTxtEnd&)rSet.Get( 2250 RES_FTN_AT_TXTEND, sal_False )); 2251 ResetState( sal_False, (const SwFmtEndAtTxtEnd&)rSet.Get( 2252 RES_END_AT_TXTEND, sal_False )); 2253 } 2254 2255 SfxTabPage* SwSectionFtnEndTabPage::Create( Window* pParent, 2256 const SfxItemSet& rAttrSet) 2257 { 2258 return new SwSectionFtnEndTabPage(pParent, rAttrSet); 2259 } 2260 2261 IMPL_LINK( SwSectionFtnEndTabPage, FootEndHdl, CheckBox *, pBox ) 2262 { 2263 // pBox->EnableTriState( sal_False ); 2264 sal_Bool bFoot = &aFtnNtAtTextEndCB == pBox || &aFtnNtNumCB == pBox || 2265 &aFtnNtNumFmtCB == pBox ; 2266 2267 CheckBox *pNumBox, *pNumFmtBox, *pEndBox; 2268 SwNumberingTypeListBox* pNumViewBox; 2269 FixedText* pOffsetTxt; 2270 NumericField *pOffsetFld; 2271 FixedText*pPrefixFT, *pSuffixFT; 2272 Edit *pPrefixED, *pSuffixED; 2273 2274 if( bFoot ) 2275 { 2276 pEndBox = &aFtnNtAtTextEndCB; 2277 pNumBox = &aFtnNtNumCB; 2278 pNumFmtBox = &aFtnNtNumFmtCB; 2279 pNumViewBox = &aFtnNumViewBox; 2280 pOffsetTxt = &aFtnOffsetLbl; 2281 pOffsetFld = &aFtnOffsetFld; 2282 pPrefixFT = &aFtnPrefixFT; 2283 pSuffixFT = &aFtnSuffixFT; 2284 pPrefixED = &aFtnPrefixED; 2285 pSuffixED = &aFtnSuffixED; 2286 } 2287 else 2288 { 2289 pEndBox = &aEndNtAtTextEndCB; 2290 pNumBox = &aEndNtNumCB; 2291 pNumFmtBox = &aEndNtNumFmtCB; 2292 pNumViewBox = &aEndNumViewBox; 2293 pOffsetTxt = &aEndOffsetLbl; 2294 pOffsetFld = &aEndOffsetFld; 2295 pPrefixFT = &aEndPrefixFT; 2296 pSuffixFT = &aEndSuffixFT; 2297 pPrefixED = &aEndPrefixED; 2298 pSuffixED = &aEndSuffixED; 2299 } 2300 2301 sal_Bool bEnableAtEnd = STATE_CHECK == pEndBox->GetState(); 2302 sal_Bool bEnableNum = bEnableAtEnd && STATE_CHECK == pNumBox->GetState(); 2303 sal_Bool bEnableNumFmt = bEnableNum && STATE_CHECK == pNumFmtBox->GetState(); 2304 2305 pNumBox->Enable( bEnableAtEnd ); 2306 pOffsetTxt->Enable( bEnableNum ); 2307 pOffsetFld->Enable( bEnableNum ); 2308 pNumFmtBox->Enable( bEnableNum ); 2309 pNumViewBox->Enable( bEnableNumFmt ); 2310 pPrefixED->Enable( bEnableNumFmt ); 2311 pSuffixED->Enable( bEnableNumFmt ); 2312 pPrefixFT->Enable( bEnableNumFmt ); 2313 pSuffixFT->Enable( bEnableNumFmt ); 2314 2315 return 0; 2316 } 2317 2318 /* -----------------21.05.99 13:59------------------- 2319 * 2320 * --------------------------------------------------*/ 2321 SwSectionPropertyTabDialog::SwSectionPropertyTabDialog( 2322 Window* pParent, const SfxItemSet& rSet, SwWrtShell& rSh) : 2323 SfxTabDialog(pParent, SW_RES(DLG_SECTION_PROPERTIES), &rSet), 2324 rWrtSh(rSh) 2325 { 2326 FreeResource(); 2327 SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); 2328 DBG_ASSERT(pFact, "Dialogdiet fail!"); 2329 AddTabPage(TP_COLUMN, SwColumnPage::Create, 0); 2330 AddTabPage(TP_BACKGROUND, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BACKGROUND ), 0 ); 2331 AddTabPage(TP_SECTION_FTNENDNOTES, SwSectionFtnEndTabPage::Create, 0); 2332 AddTabPage(TP_SECTION_INDENTS, SwSectionIndentTabPage::Create, 0); 2333 2334 SvxHtmlOptions* pHtmlOpt = SvxHtmlOptions::Get(); 2335 long nHtmlMode = pHtmlOpt->GetExportMode(); 2336 sal_Bool bWeb = 0 != PTR_CAST( SwWebDocShell, rSh.GetView().GetDocShell() ); 2337 if(bWeb) 2338 { 2339 RemoveTabPage(TP_SECTION_FTNENDNOTES); 2340 RemoveTabPage(TP_SECTION_INDENTS); 2341 if( HTML_CFG_NS40 != nHtmlMode && HTML_CFG_WRITER != nHtmlMode) 2342 RemoveTabPage(TP_COLUMN); 2343 } 2344 } 2345 /* -----------------21.05.99 13:59------------------- 2346 * 2347 * --------------------------------------------------*/ 2348 SwSectionPropertyTabDialog::~SwSectionPropertyTabDialog() 2349 { 2350 } 2351 /* -----------------21.05.99 13:59------------------- 2352 * 2353 * --------------------------------------------------*/ 2354 void SwSectionPropertyTabDialog::PageCreated( sal_uInt16 nId, SfxTabPage &rPage ) 2355 { 2356 if( TP_BACKGROUND == nId ) 2357 { 2358 SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); 2359 aSet.Put (SfxUInt32Item(SID_FLAG_TYPE, SVX_SHOW_SELECTOR)); 2360 rPage.PageCreated(aSet); 2361 } 2362 else if( TP_COLUMN == nId ) 2363 { 2364 ((SwColumnPage&)rPage).ShowBalance(sal_True); 2365 ((SwColumnPage&)rPage).SetInSection(sal_True); 2366 } 2367 else if(TP_SECTION_INDENTS == nId) 2368 ((SwSectionIndentTabPage&)rPage).SetWrtShell(rWrtSh); 2369 } 2370 /*-- 13.06.2003 09:59:08--------------------------------------------------- 2371 2372 -----------------------------------------------------------------------*/ 2373 SwSectionIndentTabPage::SwSectionIndentTabPage( Window *pParent, const SfxItemSet &rAttrSet ) : 2374 SfxTabPage(pParent, SW_RES(TP_SECTION_INDENTS), rAttrSet), 2375 aIndentFL(this, SW_RES(FL_INDENT )), 2376 aBeforeFT(this, SW_RES(FT_BEFORE )), 2377 aBeforeMF(this, SW_RES(MF_BEFORE )), 2378 aAfterFT(this, SW_RES(FT_AFTER )), 2379 aAfterMF(this, SW_RES(MF_AFTER )), 2380 aPreviewWin(this, SW_RES(WIN_PREVIEW )) 2381 { 2382 FreeResource(); 2383 Link aLk = LINK(this, SwSectionIndentTabPage, IndentModifyHdl); 2384 aBeforeMF.SetModifyHdl(aLk); 2385 aAfterMF.SetModifyHdl(aLk); 2386 aPreviewWin.SetAccessibleName(aIndentFL.GetText()); 2387 } 2388 /*-- 13.06.2003 09:59:23--------------------------------------------------- 2389 2390 -----------------------------------------------------------------------*/ 2391 SwSectionIndentTabPage::~SwSectionIndentTabPage() 2392 { 2393 } 2394 /*-- 13.06.2003 09:59:23--------------------------------------------------- 2395 2396 -----------------------------------------------------------------------*/ 2397 sal_Bool SwSectionIndentTabPage::FillItemSet( SfxItemSet& rSet) 2398 { 2399 if(aBeforeMF.IsValueModified() || 2400 aAfterMF.IsValueModified()) 2401 { 2402 SvxLRSpaceItem aLRSpace( 2403 static_cast< long >(aBeforeMF.Denormalize(aBeforeMF.GetValue(FUNIT_TWIP))) , 2404 static_cast< long >(aAfterMF.Denormalize(aAfterMF.GetValue(FUNIT_TWIP))), 0, 0, RES_LR_SPACE); 2405 rSet.Put(aLRSpace); 2406 } 2407 return sal_True; 2408 } 2409 /*-- 13.06.2003 09:59:24--------------------------------------------------- 2410 2411 -----------------------------------------------------------------------*/ 2412 void SwSectionIndentTabPage::Reset( const SfxItemSet& rSet) 2413 { 2414 //this page doesn't show up in HTML mode 2415 FieldUnit aMetric = ::GetDfltMetric(sal_False); 2416 SetMetric(aBeforeMF, aMetric); 2417 SetMetric(aAfterMF , aMetric); 2418 2419 SfxItemState eItemState = rSet.GetItemState( RES_LR_SPACE ); 2420 if ( eItemState >= SFX_ITEM_AVAILABLE ) 2421 { 2422 const SvxLRSpaceItem& rSpace = 2423 (const SvxLRSpaceItem&)rSet.Get( RES_LR_SPACE ); 2424 2425 aBeforeMF.SetValue( aBeforeMF.Normalize(rSpace.GetLeft()), FUNIT_TWIP ); 2426 aAfterMF.SetValue( aAfterMF.Normalize(rSpace.GetRight()), FUNIT_TWIP ); 2427 } 2428 else 2429 { 2430 aBeforeMF.SetEmptyFieldValue(); 2431 aAfterMF.SetEmptyFieldValue(); 2432 } 2433 aBeforeMF.SaveValue(); 2434 aAfterMF.SaveValue(); 2435 IndentModifyHdl(0); 2436 } 2437 /*-- 13.06.2003 09:59:24--------------------------------------------------- 2438 2439 -----------------------------------------------------------------------*/ 2440 SfxTabPage* SwSectionIndentTabPage::Create( Window* pParent, const SfxItemSet& rAttrSet) 2441 { 2442 return new SwSectionIndentTabPage(pParent, rAttrSet); 2443 } 2444 /* -----------------13.06.2003 13:57----------------- 2445 2446 --------------------------------------------------*/ 2447 void SwSectionIndentTabPage::SetWrtShell(SwWrtShell& rSh) 2448 { 2449 //set sensible values at the preview 2450 aPreviewWin.SetAdjust(SVX_ADJUST_BLOCK); 2451 aPreviewWin.SetLastLine(SVX_ADJUST_BLOCK); 2452 const SwRect& rPageRect = rSh.GetAnyCurRect( RECT_PAGE, 0 ); 2453 Size aPageSize(rPageRect.Width(), rPageRect.Height()); 2454 aPreviewWin.SetSize(aPageSize); 2455 } 2456 /* -----------------13.06.2003 14:02----------------- 2457 2458 --------------------------------------------------*/ 2459 IMPL_LINK(SwSectionIndentTabPage, IndentModifyHdl, MetricField*, EMPTYARG) 2460 { 2461 aPreviewWin.SetLeftMargin( static_cast< long >(aBeforeMF.Denormalize(aBeforeMF.GetValue(FUNIT_TWIP))) ); 2462 aPreviewWin.SetRightMargin( static_cast< long >(aAfterMF.Denormalize(aAfterMF.GetValue(FUNIT_TWIP))) ); 2463 aPreviewWin.Draw(sal_True); 2464 return 0; 2465 } 2466 2467