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 "optcomp.hxx"
31
32 #include "docsh.hxx"
33 #include "swmodule.hxx"
34 #include "swtypes.hxx"
35 #include "uiitems.hxx"
36 #include "view.hxx"
37 #include "wrtsh.hxx"
38
39 #include "optcomp.hrc"
40 #include "globals.hrc"
41 #include <tools/urlobj.hxx>
42 #ifndef _UTL__HXX_
43 #include <unotools/configmgr.hxx>
44 #endif
45 #include <vcl/msgbox.hxx>
46 #include <sfx2/docfile.hxx>
47 #include <sfx2/docfilt.hxx>
48 #include <sfx2/fcontnr.hxx>
49 #include <IDocumentSettingAccess.hxx>
50
51 using namespace ::com::sun::star::beans;
52 using namespace ::com::sun::star::document;
53 using namespace ::com::sun::star::uno;
54 using ::rtl::OUString;
55 using namespace ::std;
56
57 #define ASCII_STR(s) OUString( RTL_CONSTASCII_USTRINGPARAM( s ) )
58 #define DEFAULT_ENTRY COMPATIBILITY_DEFAULT_NAME
59 #define USER_ENTRY ASCII_STR( "_user" )
60 #define BUTTON_BORDER 2
61
62 // struct CompatibilityItem ----------------------------------------------
63
64 struct CompatibilityItem
65 {
66 String m_sName;
67 String m_sModule;
68 bool m_bUsePrtMetrics;
69 bool m_bAddSpacing;
70 bool m_bAddSpacingAtPages;
71 bool m_bUseOurTabStops;
72 bool m_bNoExtLeading;
73 bool m_bUseLineSpacing;
74 bool m_bAddTableSpacing;
75 bool m_bUseObjPos;
76 bool m_bUseOurTextWrapping;
77 bool m_bConsiderWrappingStyle;
78 bool m_bExpandWordSpace;
79 bool m_bIsDefault;
80 bool m_bIsUser;
81
CompatibilityItemCompatibilityItem82 CompatibilityItem( const String& _rName, const String& _rModule,
83 bool _bUsePrtMetrics, bool _bAddSpacing, bool _bAddSpacingAtPages,
84 bool _bUseOurTabStops, bool _bNoExtLeading, bool _bUseLineSpacing,
85 bool _bAddTableSpacing, bool _bUseObjPos, bool _bUseOurTextWrapping,
86 bool _bConsiderWrappingStyle, bool _bExpandWordSpace,
87 bool _bIsDefault, bool _bIsUser ) :
88
89 m_sName ( _rName ),
90 m_sModule ( _rModule ),
91 m_bUsePrtMetrics ( _bUsePrtMetrics ),
92 m_bAddSpacing ( _bAddSpacing ),
93 m_bAddSpacingAtPages ( _bAddSpacingAtPages ),
94 m_bUseOurTabStops ( _bUseOurTabStops ),
95 m_bNoExtLeading ( _bNoExtLeading ),
96 m_bUseLineSpacing ( _bUseLineSpacing ),
97 m_bAddTableSpacing ( _bAddTableSpacing ),
98 m_bUseObjPos ( _bUseObjPos ),
99 m_bUseOurTextWrapping ( _bUseOurTextWrapping ),
100 m_bConsiderWrappingStyle( _bConsiderWrappingStyle ),
101 m_bExpandWordSpace ( _bExpandWordSpace ),
102 m_bIsDefault ( _bIsDefault ),
103 m_bIsUser ( _bIsUser ) {}
104 };
105
106 #include <vector>
107
108 struct SwCompatibilityOptPage_Impl
109 {
110 typedef vector< CompatibilityItem > SwCompatibilityItemList;
111
112 SwCompatibilityItemList m_aList;
113 };
114
115 // class SwCompatibilityOptPage ------------------------------------------
116
SwCompatibilityOptPage(Window * pParent,const SfxItemSet & rSet)117 SwCompatibilityOptPage::SwCompatibilityOptPage( Window* pParent, const SfxItemSet& rSet ) :
118
119 SfxTabPage( pParent, SW_RES( TP_OPTCOMPATIBILITY_PAGE ), rSet ),
120
121 m_aMainFL ( this, SW_RES( FL_MAIN ) ),
122 m_aFormattingFT ( this, SW_RES( FT_FORMATTING ) ),
123 m_aFormattingLB ( this, SW_RES( LB_FORMATTING ) ),
124 m_aOptionsFT ( this, SW_RES( FT_OPTIONS ) ),
125 m_aOptionsLB ( this, SW_RES( LB_OPTIONS ) ),
126 m_aResetPB ( this, SW_RES( PB_RESET ) ),
127 m_aDefaultPB ( this, SW_RES( PB_DEFAULT ) ),
128 m_sUserEntry ( SW_RES( STR_USERENTRY ) ),
129 m_sUseAsDefaultQuery( SW_RES( STR_QRYBOX_USEASDEFAULT ) ),
130 m_pWrtShell ( NULL ),
131 m_pImpl ( new SwCompatibilityOptPage_Impl ),
132 m_nSavedOptions ( 0 )
133
134 {
135 // init options strings with local resource ids -> so do it before FreeResource()
136 for ( sal_uInt16 nResId = STR_COMP_OPTIONS_START; nResId < STR_COMP_OPTIONS_END; ++nResId )
137 {
138 String sEntry = String( SW_RES( nResId ) );
139 if ( STR_TAB_ALIGNMENT == nResId ||
140 STR_LINE_SPACING == nResId ||
141 STR_USE_OBJPOSITIONING == nResId ||
142 STR_USE_OURTEXTWRAPPING == nResId )
143 ReplaceFormatName( sEntry );
144 SvLBoxEntry* pEntry = m_aOptionsLB.SvTreeListBox::InsertEntry( sEntry );
145 if ( pEntry )
146 {
147 m_aOptionsLB.SetCheckButtonState( pEntry, SV_BUTTON_UNCHECKED );
148 pEntry->SetUserData( (void*)(sal_uLong)nResId );
149 }
150 }
151 m_aOptionsLB.SetStyle( m_aOptionsLB.GetStyle() | WB_HSCROLL | WB_HIDESELECTION );
152 m_aOptionsLB.SetHighlightRange();
153
154 FreeResource();
155
156 InitControls( rSet );
157
158 // set handler
159 m_aFormattingLB.SetSelectHdl( LINK( this, SwCompatibilityOptPage, SelectHdl ) );
160 m_aDefaultPB.SetClickHdl( LINK( this, SwCompatibilityOptPage, UseAsDefaultHdl ) );
161
162 // hide some controls, will be implemented later!!!
163 m_aFormattingFT.Hide();
164 m_aFormattingLB.Hide();
165 m_aResetPB.Hide();
166 // so move and resize the other controls
167 Point aMovePnt = m_aFormattingFT.GetPosPixel();
168 Point aNewPnt = m_aOptionsFT.GetPosPixel();
169 aNewPnt.Y() = aMovePnt.Y();
170 m_aOptionsFT.SetPosPixel( aNewPnt );
171 aMovePnt = m_aFormattingLB.GetPosPixel();
172 aNewPnt = m_aOptionsLB.GetPosPixel();
173 long nDelta = aNewPnt.Y() - aMovePnt.Y();
174 aNewPnt.Y() = aMovePnt.Y();
175 m_aOptionsLB.SetPosPixel( aNewPnt );
176 Size aNewSz = m_aOptionsLB.GetSizePixel();
177 aNewSz.Height() += nDelta;
178 m_aOptionsLB.SetSizePixel( aNewSz );
179 }
180
181 // -----------------------------------------------------------------------
182
~SwCompatibilityOptPage()183 SwCompatibilityOptPage::~SwCompatibilityOptPage()
184 {
185 delete m_pImpl;
186 }
187
188 // -----------------------------------------------------------------------
189
ReplaceFormatName(String & rEntry)190 void SwCompatibilityOptPage::ReplaceFormatName( String& rEntry )
191 {
192 static const String sOpenOfficeName = String::CreateFromAscii("OpenOffice.org");
193 static const String sAsianName = String::CreateFromAscii("StarSuite");
194
195 Any aAny = ::utl::ConfigManager::
196 GetDirectConfigProperty( ::utl::ConfigManager::PRODUCTNAME );
197 rtl::OUString sTmp;
198 if ( aAny >>= sTmp )
199 {
200 String sFormatName = sTmp;
201 String sFormatVersion;
202 bool bOpenOffice = ( sOpenOfficeName == sFormatName );
203 if ( bOpenOffice )
204 sFormatVersion = String::CreateFromAscii("1.1");
205 else
206 sFormatVersion = String::CreateFromAscii("6.0/7");
207 if ( !bOpenOffice && ( sAsianName != sFormatName ) )
208 sFormatName = String::CreateFromAscii("StarOffice");
209
210 rEntry.SearchAndReplace( String::CreateFromAscii("%FORMATNAME"), sFormatName );
211 rEntry.SearchAndReplace( String::CreateFromAscii("%FORMATVERSION"), sFormatVersion );
212 }
213 }
214
215 // -----------------------------------------------------------------------
216
convertBools2Ulong_Impl(bool _bUsePrtMetrics,bool _bAddSpacing,bool _bAddSpacingAtPages,bool _bUseOurTabStops,bool _bNoExtLeading,bool _bUseLineSpacing,bool _bAddTableSpacing,bool _bUseObjPos,bool _bUseOurTextWrapping,bool _bConsiderWrappingStyle,bool _bExpandWordSpace)217 sal_uLong convertBools2Ulong_Impl
218 (
219 bool _bUsePrtMetrics,
220 bool _bAddSpacing,
221 bool _bAddSpacingAtPages,
222 bool _bUseOurTabStops,
223 bool _bNoExtLeading,
224 bool _bUseLineSpacing,
225 bool _bAddTableSpacing,
226 bool _bUseObjPos,
227 bool _bUseOurTextWrapping,
228 bool _bConsiderWrappingStyle,
229 bool _bExpandWordSpace
230 )
231 {
232 sal_uLong nRet = 0;
233 sal_uLong nSetBit = 1;
234
235 if ( _bUsePrtMetrics )
236 nRet |= nSetBit;
237 nSetBit = nSetBit << 1;
238 if ( _bAddSpacing )
239 nRet |= nSetBit;
240 nSetBit = nSetBit << 1;
241 if ( _bAddSpacingAtPages )
242 nRet |= nSetBit;
243 nSetBit = nSetBit << 1;
244 if ( _bUseOurTabStops )
245 nRet |= nSetBit;
246 nSetBit = nSetBit << 1;
247 if ( _bNoExtLeading )
248 nRet |= nSetBit;
249 nSetBit = nSetBit << 1;
250 if ( _bUseLineSpacing )
251 nRet |= nSetBit;
252 nSetBit = nSetBit << 1;
253 if ( _bAddTableSpacing )
254 nRet |= nSetBit;
255 nSetBit = nSetBit << 1;
256 if ( _bUseObjPos )
257 nRet |= nSetBit;
258 nSetBit = nSetBit << 1;
259 if ( _bUseOurTextWrapping )
260 nRet |= nSetBit;
261 nSetBit = nSetBit << 1;
262 if ( _bConsiderWrappingStyle )
263 nRet |= nSetBit;
264 nSetBit = nSetBit << 1;
265 if ( _bExpandWordSpace )
266 nRet |= nSetBit;
267
268 return nRet;
269 }
270
271 // -----------------------------------------------------------------------
272
InitControls(const SfxItemSet & rSet)273 void SwCompatibilityOptPage::InitControls( const SfxItemSet& rSet )
274 {
275 // init objectshell and detect document name
276 String sDocTitle;
277 const SfxPoolItem* pItem = NULL;
278 SfxObjectShell* pObjShell = NULL;
279 if ( SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_WRTSHELL, sal_False, &pItem ) )
280 m_pWrtShell = (SwWrtShell*)( (const SwPtrItem*)pItem )->GetValue();
281 if ( m_pWrtShell )
282 {
283 pObjShell = m_pWrtShell->GetView().GetDocShell();
284 if ( pObjShell )
285 sDocTitle = pObjShell->GetTitle( SFX_TITLE_TITLE );
286 }
287 else
288 {
289 m_aMainFL.Disable();
290 m_aFormattingFT.Disable();
291 m_aFormattingLB.Disable();
292 m_aOptionsFT.Disable();
293 m_aOptionsLB.Disable();
294 m_aResetPB.Disable();
295 m_aDefaultPB.Disable();
296 }
297 String sText = m_aMainFL.GetText();
298 sText.SearchAndReplace( String::CreateFromAscii("%DOCNAME"), sDocTitle );
299 m_aMainFL.SetText( sText );
300
301 // loading file formats
302 Sequence< Sequence< PropertyValue > > aList = m_aConfigItem.GetList();
303 OUString sName;
304 OUString sModule;
305 bool bUsePrtMetrics = false;
306 bool bAddSpacing = false;
307 bool bAddSpacingAtPages = false;
308 bool bUseOurTabStops = false;
309 bool bNoExtLeading = false;
310 bool bUseLineSpacing = false;
311 bool bAddTableSpacing = false;
312 bool bUseObjPos = false;
313 bool bUseOurTextWrapping = false;
314 bool bConsiderWrappingStyle = false;
315 bool bExpandWordSpace = false;
316 int i, j, nCount = aList.getLength();
317 for ( i = 0; i < nCount; ++i )
318 {
319 String sNewEntry;
320 const Sequence< PropertyValue >& rEntry = aList[i];
321 for ( j = 0; j < rEntry.getLength(); j++ )
322 {
323 PropertyValue aValue = rEntry[j];
324 if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_NAME )
325 aValue.Value >>= sName;
326 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_MODULE )
327 aValue.Value >>= sModule;
328 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_USEPRTMETRICS )
329 aValue.Value >>= bUsePrtMetrics;
330 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_ADDSPACING )
331 aValue.Value >>= bAddSpacing;
332 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_ADDSPACINGATPAGES )
333 aValue.Value >>= bAddSpacingAtPages;
334 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_USEOURTABSTOPS )
335 aValue.Value >>= bUseOurTabStops;
336 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_NOEXTLEADING )
337 aValue.Value >>= bNoExtLeading;
338 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_USELINESPACING )
339 aValue.Value >>= bUseLineSpacing;
340 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_ADDTABLESPACING )
341 aValue.Value >>= bAddTableSpacing;
342 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_USEOBJECTPOSITIONING )
343 aValue.Value >>= bUseObjPos;
344 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_USEOURTEXTWRAPPING )
345 aValue.Value >>= bUseOurTextWrapping;
346 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_CONSIDERWRAPPINGSTYLE )
347 aValue.Value >>= bConsiderWrappingStyle;
348 else if ( aValue.Name == COMPATIBILITY_PROPERTYNAME_EXPANDWORDSPACE )
349 aValue.Value >>= bExpandWordSpace;
350 }
351
352 CompatibilityItem aItem(
353 sName, sModule, bUsePrtMetrics, bAddSpacing,
354 bAddSpacingAtPages, bUseOurTabStops, bNoExtLeading,
355 bUseLineSpacing, bAddTableSpacing, bUseObjPos,
356 bUseOurTextWrapping, bConsiderWrappingStyle, bExpandWordSpace,
357 ( sName.equals( DEFAULT_ENTRY ) != sal_False ),
358 ( sName.equals( USER_ENTRY ) != sal_False ) );
359 m_pImpl->m_aList.push_back( aItem );
360
361 if ( aItem.m_bIsDefault )
362 continue;
363
364 if ( sName.equals( USER_ENTRY ) )
365 sNewEntry = m_sUserEntry;
366 else if ( pObjShell && sName.getLength() > 0 )
367 {
368 SfxFilterContainer* pFacCont = pObjShell->GetFactory().GetFilterContainer();
369 const SfxFilter* pFilter = pFacCont->GetFilter4FilterName( sName );
370 if ( pFilter )
371 sNewEntry = pFilter->GetUIName();
372 }
373
374 if ( sNewEntry.Len() == 0 )
375 sNewEntry = sName;
376
377 sal_uInt16 nPos = m_aFormattingLB.InsertEntry( sNewEntry );
378 sal_uLong nOptions = convertBools2Ulong_Impl(
379 bUsePrtMetrics, bAddSpacing, bAddSpacingAtPages,
380 bUseOurTabStops, bNoExtLeading, bUseLineSpacing,
381 bAddTableSpacing, bUseObjPos, bUseOurTextWrapping,
382 bConsiderWrappingStyle, bExpandWordSpace );
383 m_aFormattingLB.SetEntryData( nPos, (void*)(long)nOptions );
384 }
385
386 m_aFormattingLB.SetDropDownLineCount( m_aFormattingLB.GetEntryCount() );
387
388 // check if the default button text is not too wide otherwise we have to stretch the button
389 // and move its position and the position of the reset button
390 long nTxtWidth = m_aDefaultPB.GetTextWidth( m_aDefaultPB.GetText() );
391 Size aBtnSz = m_aDefaultPB.GetSizePixel();
392 if ( nTxtWidth > aBtnSz.Width() )
393 {
394 long nDelta = nTxtWidth - aBtnSz.Width() + 2 * BUTTON_BORDER;
395 aBtnSz.Width() += nDelta;
396 Point aBtnPnt = m_aDefaultPB.GetPosPixel();
397 aBtnPnt.X() -= nDelta;
398 m_aDefaultPB.SetPosSizePixel( aBtnPnt, aBtnSz );
399 aBtnPnt = m_aResetPB.GetPosPixel();
400 aBtnPnt.X() -= 2 * nDelta;
401 m_aResetPB.SetPosSizePixel( aBtnPnt, aBtnSz );
402 }
403 }
404
405 // -----------------------------------------------------------------------
406
IMPL_LINK(SwCompatibilityOptPage,SelectHdl,ListBox *,EMPTYARG)407 IMPL_LINK( SwCompatibilityOptPage, SelectHdl, ListBox*, EMPTYARG )
408 {
409 sal_uInt16 nPos = m_aFormattingLB.GetSelectEntryPos();
410 sal_uLong nOptions = (sal_uLong)(void*)m_aFormattingLB.GetEntryData( nPos );
411 SetCurrentOptions( nOptions );
412
413 return 0;
414 }
415
416 // -----------------------------------------------------------------------
417
IMPL_LINK(SwCompatibilityOptPage,UseAsDefaultHdl,PushButton *,EMPTYARG)418 IMPL_LINK( SwCompatibilityOptPage, UseAsDefaultHdl, PushButton*, EMPTYARG )
419 {
420 QueryBox aBox( this, WinBits( WB_YES_NO | WB_DEF_YES ), m_sUseAsDefaultQuery );
421 if ( aBox.Execute() == RET_YES )
422 {
423 for ( vector< CompatibilityItem >::iterator pItem = m_pImpl->m_aList.begin();
424 pItem != m_pImpl->m_aList.end(); ++pItem )
425 {
426 if ( pItem->m_bIsDefault )
427 {
428 sal_uInt16 nCount = static_cast< sal_uInt16 >( m_aOptionsLB.GetEntryCount() );
429 for ( sal_uInt16 i = 0; i < nCount; ++i )
430 {
431 bool bChecked = ( m_aOptionsLB.IsChecked(i) != sal_False );
432 CompatibilityOptions eOption = static_cast< CompatibilityOptions >(i);
433 switch ( eOption )
434 {
435 case COPT_USE_PRINTERDEVICE : pItem->m_bUsePrtMetrics = bChecked; break;
436 case COPT_ADD_SPACING : pItem->m_bAddSpacing = bChecked; break;
437 case COPT_ADD_SPACING_AT_PAGES : pItem->m_bAddSpacingAtPages = bChecked; break;
438 case COPT_USE_OUR_TABSTOPS : pItem->m_bUseOurTabStops = bChecked; break;
439 case COPT_NO_EXTLEADING : pItem->m_bNoExtLeading = bChecked; break;
440 case COPT_USE_LINESPACING : pItem->m_bUseLineSpacing = bChecked; break;
441 case COPT_ADD_TABLESPACING : pItem->m_bAddTableSpacing = bChecked; break;
442 case COPT_USE_OBJECTPOSITIONING: pItem->m_bUseObjPos = bChecked; break;
443 case COPT_USE_OUR_TEXTWRAPPING: pItem->m_bUseOurTextWrapping = bChecked; break;
444 case COPT_CONSIDER_WRAPPINGSTYLE: pItem->m_bConsiderWrappingStyle = bChecked; break;
445 case COPT_EXPAND_WORDSPACE: pItem->m_bExpandWordSpace = bChecked; break;
446 default:
447 {
448 DBG_ERRORFILE( "SwCompatibilityOptPage::UseAsDefaultHdl(): wrong option" );
449 }
450 }
451 }
452 break;
453 }
454 }
455
456 WriteOptions();
457 }
458
459 return 0;
460 }
461
462 // -----------------------------------------------------------------------
463
SetCurrentOptions(sal_uLong nOptions)464 void SwCompatibilityOptPage::SetCurrentOptions( sal_uLong nOptions )
465 {
466 sal_uLong nCount = m_aOptionsLB.GetEntryCount();
467 DBG_ASSERT( nCount <= 32, "SwCompatibilityOptPage::Reset(): entry overflow" );
468 for ( sal_uInt16 i = 0; i < nCount; ++i )
469 {
470 sal_Bool bChecked = ( ( nOptions & 0x00000001 ) == 0x00000001 );
471 m_aOptionsLB.CheckEntryPos( i, bChecked );
472 nOptions = nOptions >> 1;
473 }
474 }
475
476 // -----------------------------------------------------------------------
477
GetDocumentOptions() const478 sal_uLong SwCompatibilityOptPage::GetDocumentOptions() const
479 {
480 sal_uLong nRet = 0;
481 if ( m_pWrtShell )
482 {
483 const IDocumentSettingAccess& rIDocumentSettingAccess = *m_pWrtShell->getIDocumentSettingAccess();
484 nRet = convertBools2Ulong_Impl(
485 rIDocumentSettingAccess.get(IDocumentSettingAccess::USE_VIRTUAL_DEVICE) == sal_False,
486 rIDocumentSettingAccess.get(IDocumentSettingAccess::PARA_SPACE_MAX) != sal_False,
487 rIDocumentSettingAccess.get(IDocumentSettingAccess::PARA_SPACE_MAX_AT_PAGES) != sal_False,
488 rIDocumentSettingAccess.get(IDocumentSettingAccess::TAB_COMPAT) == sal_False,
489 rIDocumentSettingAccess.get(IDocumentSettingAccess::ADD_EXT_LEADING) == sal_False,
490 rIDocumentSettingAccess.get(IDocumentSettingAccess::OLD_LINE_SPACING) != sal_False,
491 rIDocumentSettingAccess.get(IDocumentSettingAccess::ADD_PARA_SPACING_TO_TABLE_CELLS) != sal_False,
492 rIDocumentSettingAccess.get(IDocumentSettingAccess::USE_FORMER_OBJECT_POS) != sal_False,
493 rIDocumentSettingAccess.get(IDocumentSettingAccess::USE_FORMER_TEXT_WRAPPING) != sal_False,
494 rIDocumentSettingAccess.get(IDocumentSettingAccess::CONSIDER_WRAP_ON_OBJECT_POSITION) != sal_False,
495 rIDocumentSettingAccess.get(IDocumentSettingAccess::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK) != sal_True );
496 }
497 return nRet;
498 }
499
500 // -----------------------------------------------------------------------
501
WriteOptions()502 void SwCompatibilityOptPage::WriteOptions()
503 {
504 m_aConfigItem.Clear();
505 for ( vector< CompatibilityItem >::const_iterator pItem = m_pImpl->m_aList.begin();
506 pItem != m_pImpl->m_aList.end(); ++pItem )
507 m_aConfigItem.AppendItem(
508 pItem->m_sName, pItem->m_sModule, pItem->m_bUsePrtMetrics, pItem->m_bAddSpacing,
509 pItem->m_bAddSpacingAtPages, pItem->m_bUseOurTabStops,
510 pItem->m_bNoExtLeading, pItem->m_bUseLineSpacing,
511 pItem->m_bAddTableSpacing, pItem->m_bUseObjPos,
512 pItem->m_bUseOurTextWrapping, pItem->m_bConsiderWrappingStyle,
513 pItem->m_bExpandWordSpace );
514 }
515
516 // -----------------------------------------------------------------------
517
Create(Window * pParent,const SfxItemSet & rAttrSet)518 SfxTabPage* SwCompatibilityOptPage::Create( Window* pParent, const SfxItemSet& rAttrSet )
519 {
520 return new SwCompatibilityOptPage( pParent, rAttrSet );
521 }
522
523 // -----------------------------------------------------------------------
524
FillItemSet(SfxItemSet &)525 sal_Bool SwCompatibilityOptPage::FillItemSet( SfxItemSet& )
526 {
527 sal_Bool bModified = sal_False;
528 if ( m_pWrtShell )
529 {
530 sal_uLong nSavedOptions = m_nSavedOptions;
531 sal_uLong nCount = m_aOptionsLB.GetEntryCount();
532 DBG_ASSERT( nCount <= 32, "SwCompatibilityOptPage::Reset(): entry overflow" );
533
534 bool bSetParaSpaceMax = false;
535
536 for ( sal_uInt16 i = 0; i < nCount; ++i )
537 {
538 CompatibilityOptions nOption = static_cast< CompatibilityOptions >(i);
539 sal_Bool bChecked = m_aOptionsLB.IsChecked(i);
540 sal_Bool bSavedChecked = ( ( nSavedOptions & 0x00000001 ) == 0x00000001 );
541 if ( bChecked != bSavedChecked )
542 {
543 if ( COPT_USE_PRINTERDEVICE == nOption )
544 {
545 m_pWrtShell->SetUseVirDev( !bChecked );
546 bModified = sal_True;
547 }
548 else if ( ( COPT_ADD_SPACING == nOption || COPT_ADD_SPACING_AT_PAGES == nOption ) && !bSetParaSpaceMax )
549 bSetParaSpaceMax = true;
550 else if ( COPT_USE_OUR_TABSTOPS == nOption )
551 {
552 m_pWrtShell->SetTabCompat( !bChecked );
553 bModified = sal_True;
554 }
555 else if ( COPT_NO_EXTLEADING == nOption )
556 {
557 m_pWrtShell->SetAddExtLeading( !bChecked );
558 bModified = sal_True;
559 }
560 else if ( COPT_USE_LINESPACING == nOption )
561 {
562 m_pWrtShell->SetUseFormerLineSpacing( bChecked );
563 bModified = sal_True;
564 }
565 else if ( COPT_ADD_TABLESPACING == nOption )
566 {
567 m_pWrtShell->SetAddParaSpacingToTableCells( bChecked );
568 bModified = sal_True;
569 }
570 else if ( COPT_ADD_TABLESPACING == nOption )
571 {
572 m_pWrtShell->SetAddParaSpacingToTableCells( bChecked );
573 bModified = sal_True;
574 }
575 else if ( COPT_USE_OBJECTPOSITIONING == nOption )
576 {
577 m_pWrtShell->SetUseFormerObjectPositioning( bChecked );
578 bModified = sal_True;
579 }
580 else if ( COPT_USE_OUR_TEXTWRAPPING == nOption )
581 {
582 m_pWrtShell->SetUseFormerTextWrapping( bChecked );
583 bModified = sal_True;
584 }
585 else if ( COPT_CONSIDER_WRAPPINGSTYLE == nOption )
586 {
587 m_pWrtShell->SetConsiderWrapOnObjPos( bChecked );
588 bModified = sal_True;
589 }
590 else if ( COPT_EXPAND_WORDSPACE == nOption )
591 {
592 m_pWrtShell->SetDoNotJustifyLinesWithManualBreak( !bChecked );
593 bModified = sal_True;
594 }
595 }
596
597 nSavedOptions = nSavedOptions >> 1;
598 }
599
600 if ( bSetParaSpaceMax )
601 {
602 m_pWrtShell->SetParaSpaceMax( m_aOptionsLB.IsChecked( (sal_uInt16)COPT_ADD_SPACING ) );
603 m_pWrtShell->SetParaSpaceMaxAtPages( m_aOptionsLB.IsChecked( (sal_uInt16)COPT_ADD_SPACING_AT_PAGES ) );
604 bModified = sal_True;
605 }
606 }
607
608 if ( bModified )
609 WriteOptions();
610
611 return bModified;
612 }
613
614 // -----------------------------------------------------------------------
615
Reset(const SfxItemSet &)616 void SwCompatibilityOptPage::Reset( const SfxItemSet& )
617 {
618 m_aOptionsLB.SelectEntryPos( 0 );
619
620 sal_uLong nOptions = GetDocumentOptions();
621 SetCurrentOptions( nOptions );
622 m_nSavedOptions = nOptions;
623 }
624
625