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