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