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