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 :
21 : #ifdef SD_DLLIMPLEMENTATION
22 : #undef SD_DLLIMPLEMENTATION
23 : #endif
24 :
25 : #include <com/sun/star/document/PrinterIndependentLayout.hpp>
26 : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
27 : #include <com/sun/star/frame/Desktop.hpp>
28 : #include <com/sun/star/lang/XComponent.hpp>
29 : #include <com/sun/star/container/XEnumerationAccess.hpp>
30 : #include <comphelper/processfactory.hxx>
31 : #include <comphelper/string.hxx>
32 : #include <com/sun/star/uno/Exception.hpp>
33 : #include <sfx2/module.hxx>
34 : #include <sfx2/app.hxx>
35 : #include <svx/svxids.hrc>
36 : #include <svx/dialogs.hrc>
37 : #include <svx/strarray.hxx>
38 : #include <svx/dlgutil.hxx>
39 : #include <vcl/msgbox.hxx>
40 :
41 : #include "sdattr.hxx"
42 : #include "sdresid.hxx"
43 : #include "optsitem.hxx"
44 : #include "tpoption.hrc"
45 : #include "tpoption.hxx"
46 : #include "strings.hrc"
47 : #include "app.hrc"
48 : #include <svl/intitem.hxx>
49 : #include <sfx2/request.hxx>
50 :
51 : using namespace ::com::sun::star;
52 : using namespace ::com::sun::star::uno;
53 :
54 0 : SdTpOptionsSnap::SdTpOptionsSnap( Window* pParent, const SfxItemSet& rInAttrs ) :
55 0 : SvxGridTabPage(pParent, rInAttrs)
56 : {
57 0 : aGrpSnap.Show();
58 0 : aCbxSnapHelplines.Show();
59 0 : aCbxSnapBorder.Show();
60 0 : aCbxSnapFrame.Show();
61 0 : aCbxSnapPoints.Show();
62 0 : aFtSnapArea.Show();
63 0 : aMtrFldSnapArea.Show();
64 0 : aGrpOrtho.Show();
65 0 : aCbxOrtho.Show();
66 0 : aCbxBigOrtho.Show();
67 0 : aCbxRotate.Show();
68 0 : aMtrFldAngle.Show();
69 0 : aFtBezAngle.Show();
70 0 : aMtrFldBezAngle.Show();
71 0 : aSeparatorFL.Show();
72 0 : }
73 :
74 : // -----------------------------------------------------------------------
75 :
76 0 : SdTpOptionsSnap::~SdTpOptionsSnap()
77 : {
78 0 : }
79 :
80 : // -----------------------------------------------------------------------
81 :
82 0 : sal_Bool SdTpOptionsSnap::FillItemSet( SfxItemSet& rAttrs )
83 : {
84 0 : SvxGridTabPage::FillItemSet(rAttrs);
85 0 : SdOptionsSnapItem* pOptsItem = NULL;
86 0 : SdOptionsSnapItem aOptsItem( ATTR_OPTIONS_SNAP );
87 :
88 0 : aOptsItem.GetOptionsSnap().SetSnapHelplines( aCbxSnapHelplines.IsChecked() );
89 0 : aOptsItem.GetOptionsSnap().SetSnapBorder( aCbxSnapBorder.IsChecked() );
90 0 : aOptsItem.GetOptionsSnap().SetSnapFrame( aCbxSnapFrame.IsChecked() );
91 0 : aOptsItem.GetOptionsSnap().SetSnapPoints( aCbxSnapPoints.IsChecked() );
92 0 : aOptsItem.GetOptionsSnap().SetOrtho( aCbxOrtho.IsChecked() );
93 0 : aOptsItem.GetOptionsSnap().SetBigOrtho( aCbxBigOrtho.IsChecked() );
94 0 : aOptsItem.GetOptionsSnap().SetRotate( aCbxRotate.IsChecked() );
95 0 : aOptsItem.GetOptionsSnap().SetSnapArea( (sal_Int16) aMtrFldSnapArea.GetValue() );
96 0 : aOptsItem.GetOptionsSnap().SetAngle( (sal_Int16) aMtrFldAngle.GetValue() );
97 0 : aOptsItem.GetOptionsSnap().SetEliminatePolyPointLimitAngle( (sal_Int16) aMtrFldBezAngle.GetValue() );
98 :
99 0 : if( pOptsItem == NULL || !(aOptsItem == *pOptsItem) )
100 0 : rAttrs.Put( aOptsItem );
101 :
102 : // Evtl. vorhandenes GridItem wird geholt, um nicht versehentlich
103 : // irgendwelche Standardwerte einzustellen
104 0 : return( sal_True );
105 : }
106 :
107 : // -----------------------------------------------------------------------
108 :
109 0 : void SdTpOptionsSnap::Reset( const SfxItemSet& rAttrs )
110 : {
111 0 : SvxGridTabPage::Reset(rAttrs);
112 :
113 : SdOptionsSnapItem aOptsItem( (const SdOptionsSnapItem&) rAttrs.
114 0 : Get( ATTR_OPTIONS_SNAP ) );
115 :
116 0 : aCbxSnapHelplines.Check( aOptsItem.GetOptionsSnap().IsSnapHelplines() );
117 0 : aCbxSnapBorder.Check( aOptsItem.GetOptionsSnap().IsSnapBorder() );
118 0 : aCbxSnapFrame.Check( aOptsItem.GetOptionsSnap().IsSnapFrame() );
119 0 : aCbxSnapPoints.Check( aOptsItem.GetOptionsSnap().IsSnapPoints() );
120 0 : aCbxOrtho.Check( aOptsItem.GetOptionsSnap().IsOrtho() );
121 0 : aCbxBigOrtho.Check( aOptsItem.GetOptionsSnap().IsBigOrtho() );
122 0 : aCbxRotate.Check( aOptsItem.GetOptionsSnap().IsRotate() );
123 0 : aMtrFldSnapArea.SetValue( aOptsItem.GetOptionsSnap().GetSnapArea() );
124 0 : aMtrFldAngle.SetValue( aOptsItem.GetOptionsSnap().GetAngle() );
125 0 : aMtrFldBezAngle.SetValue( aOptsItem.GetOptionsSnap().GetEliminatePolyPointLimitAngle() );
126 :
127 0 : aCbxRotate.GetClickHdl().Call(0);
128 0 : }
129 :
130 : // -----------------------------------------------------------------------
131 :
132 0 : SfxTabPage* SdTpOptionsSnap::Create( Window* pWindow,
133 : const SfxItemSet& rAttrs )
134 : {
135 0 : return( new SdTpOptionsSnap( pWindow, rAttrs ) );
136 : }
137 :
138 : /*************************************************************************
139 : |*
140 : |* TabPage zum Einstellen der Inhalte-Optionen
141 : |*
142 : \************************************************************************/
143 :
144 0 : SdTpOptionsContents::SdTpOptionsContents( Window* pParent, const SfxItemSet& rInAttrs ) :
145 : SfxTabPage ( pParent, SdResId( TP_OPTIONS_CONTENTS ), rInAttrs ),
146 : aGrpDisplay ( this, SdResId( GRP_DISPLAY ) ),
147 : aCbxRuler ( this, SdResId( CBX_RULER ) ),
148 : aCbxDragStripes ( this, SdResId( CBX_HELPLINES ) ),
149 : aCbxHandlesBezier ( this, SdResId( CBX_HANDLES_BEZIER ) ),
150 0 : aCbxMoveOutline ( this, SdResId( CBX_MOVE_OUTLINE ) )
151 : {
152 0 : FreeResource();
153 0 : }
154 :
155 : // -----------------------------------------------------------------------
156 :
157 0 : SdTpOptionsContents::~SdTpOptionsContents()
158 : {
159 0 : }
160 :
161 : // -----------------------------------------------------------------------
162 :
163 0 : sal_Bool SdTpOptionsContents::FillItemSet( SfxItemSet& rAttrs )
164 : {
165 0 : sal_Bool bModified = sal_False;
166 :
167 0 : if( aCbxRuler.GetSavedValue() != aCbxRuler.IsChecked() ||
168 0 : aCbxMoveOutline.GetSavedValue() != aCbxMoveOutline.IsChecked() ||
169 0 : aCbxDragStripes.GetSavedValue() != aCbxDragStripes.IsChecked() ||
170 0 : aCbxHandlesBezier.GetSavedValue() != aCbxHandlesBezier.IsChecked() )
171 : {
172 0 : SdOptionsLayoutItem aOptsItem( ATTR_OPTIONS_LAYOUT );
173 :
174 0 : aOptsItem.GetOptionsLayout().SetRulerVisible( aCbxRuler.IsChecked() );
175 0 : aOptsItem.GetOptionsLayout().SetMoveOutline( aCbxMoveOutline.IsChecked() );
176 0 : aOptsItem.GetOptionsLayout().SetDragStripes( aCbxDragStripes.IsChecked() );
177 0 : aOptsItem.GetOptionsLayout().SetHandlesBezier( aCbxHandlesBezier.IsChecked() );
178 :
179 0 : rAttrs.Put( aOptsItem );
180 0 : bModified = sal_True;
181 : }
182 0 : return( bModified );
183 : }
184 :
185 : // -----------------------------------------------------------------------
186 :
187 0 : void SdTpOptionsContents::Reset( const SfxItemSet& rAttrs )
188 : {
189 : SdOptionsContentsItem aOptsItem( (const SdOptionsContentsItem&) rAttrs.
190 0 : Get( ATTR_OPTIONS_CONTENTS ) );
191 :
192 : SdOptionsLayoutItem aLayoutItem( (const SdOptionsLayoutItem&) rAttrs.
193 0 : Get( ATTR_OPTIONS_LAYOUT ) );
194 :
195 0 : aCbxRuler.Check( aLayoutItem.GetOptionsLayout().IsRulerVisible() );
196 0 : aCbxMoveOutline.Check( aLayoutItem.GetOptionsLayout().IsMoveOutline() );
197 0 : aCbxDragStripes.Check( aLayoutItem.GetOptionsLayout().IsDragStripes() );
198 0 : aCbxHandlesBezier.Check( aLayoutItem.GetOptionsLayout().IsHandlesBezier() );
199 :
200 0 : aCbxRuler.SaveValue();
201 0 : aCbxMoveOutline.SaveValue();
202 0 : aCbxDragStripes.SaveValue();
203 0 : aCbxHandlesBezier.SaveValue();
204 0 : }
205 :
206 : // -----------------------------------------------------------------------
207 :
208 0 : SfxTabPage* SdTpOptionsContents::Create( Window* pWindow,
209 : const SfxItemSet& rAttrs )
210 : {
211 0 : return( new SdTpOptionsContents( pWindow, rAttrs ) );
212 : }
213 :
214 : /*************************************************************************
215 : |*
216 : |* TabPage zum Einstellen der Sonstige-Optionen
217 : |*
218 : \************************************************************************/
219 : #define TABLE_COUNT 12
220 : #define TOKEN (sal_Unicode(':'))
221 :
222 0 : SdTpOptionsMisc::SdTpOptionsMisc( Window* pParent, const SfxItemSet& rInAttrs ) :
223 : SfxTabPage ( pParent, SdResId( TP_OPTIONS_MISC ), rInAttrs ),
224 : aGrpText ( this, SdResId( GRP_TEXT ) ),
225 : aCbxQuickEdit ( this, SdResId( CBX_QUICKEDIT ) ),
226 : aCbxPickThrough ( this, SdResId( CBX_PICKTHROUGH ) ),
227 :
228 : // Template & Layout laufen z.Z. synchron!
229 : aGrpProgramStart ( this, SdResId( GRP_PROGRAMSTART ) ),
230 : aCbxStartWithTemplate ( this, SdResId( CBX_START_WITH_TEMPLATE ) ),
231 :
232 : aGrpSettings ( this, SdResId( GRP_SETTINGS ) ),
233 : aCbxMasterPageCache ( this, SdResId( CBX_MASTERPAGE_CACHE ) ),
234 : aCbxCopy ( this, SdResId( CBX_COPY ) ),
235 : aCbxMarkedHitMovesAlways ( this, SdResId( CBX_MARKED_HIT_MOVES_ALWAYS ) ),
236 : aCbxCrookNoContortion ( this, SdResId( CBX_CROOK_NO_CONTORTION ) ),
237 :
238 : aTxtMetric ( this, SdResId( FT_METRIC ) ),
239 : aLbMetric ( this, SdResId( LB_METRIC ) ),
240 : aTxtTabstop ( this, SdResId( FT_TABSTOP ) ),
241 : aMtrFldTabstop ( this, SdResId( MTR_FLD_TABSTOP ) ),
242 :
243 : aCbxStartWithActualPage ( this, SdResId( CBX_START_WITH_ACTUAL_PAGE ) ),
244 : aGrpStartWithActualPage ( this, SdResId( GRP_START_WITH_ACTUAL_PAGE ) ),
245 : aCbxEnableSdremote ( this, SdResId( CBX_ENABLE_SDREMOTE ) ),
246 : aTxtCompatibility ( this, SdResId( FT_COMPATIBILITY ) ),
247 : aCbxUsePrinterMetrics ( this, SdResId( CB_USE_PRINTER_METRICS ) ),
248 : aCbxCompatibility ( this, SdResId( CB_MERGE_PARA_DIST ) ),
249 : aGrpScale ( this, SdResId( GRP_SCALE ) ),
250 : aFtScale ( this, SdResId( FT_SCALE ) ),
251 : aCbScale ( this, SdResId( CB_SCALE ) ),
252 : aFtOriginal ( this, SdResId( FT_ORIGINAL ) ),
253 : aFtEquivalent ( this, SdResId( FT_EQUIVALENT ) ),
254 : aFtPageWidth ( this, SdResId( FT_PAGEWIDTH ) ),
255 : aFiInfo1 ( this, SdResId( FI_INFO_1 ) ),
256 : aMtrFldOriginalWidth ( this, SdResId( MTR_FLD_ORIGINAL_WIDTH ) ),
257 : aFtPageHeight ( this, SdResId( FT_PAGEHEIGHT ) ),
258 : aFiInfo2 ( this, SdResId( FI_INFO_2 ) ),
259 : aMtrFldOriginalHeight ( this, SdResId( MTR_FLD_ORIGINAL_HEIGHT ) ),
260 : aMtrFldInfo1 ( this, WinBits( WB_HIDE ) ),
261 0 : aMtrFldInfo2 ( this, WinBits( WB_HIDE ) )
262 : {
263 0 : FreeResource();
264 0 : SetExchangeSupport();
265 :
266 : // Metrik einstellen
267 : FieldUnit eFUnit;
268 :
269 0 : sal_uInt16 nWhich = GetWhich( SID_ATTR_METRIC );
270 0 : if ( rInAttrs.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE )
271 : {
272 0 : const SfxUInt16Item& rItem = (SfxUInt16Item&)rInAttrs.Get( nWhich );
273 0 : eFUnit = (FieldUnit)rItem.GetValue();
274 : }
275 : else
276 0 : eFUnit = SfxModule::GetCurrentFieldUnit();
277 :
278 0 : SetFieldUnit( aMtrFldTabstop, eFUnit );
279 :
280 : // ListBox mit Metriken f"ullen
281 0 : SvxStringArray aMetricArr( RID_SVXSTR_FIELDUNIT_TABLE );
282 : sal_uInt16 i;
283 :
284 0 : for ( i = 0; i < aMetricArr.Count(); ++i )
285 : {
286 0 : String sMetric = aMetricArr.GetStringByPos( i );
287 0 : long nFieldUnit = aMetricArr.GetValue( i );
288 0 : sal_uInt16 nPos = aLbMetric.InsertEntry( sMetric );
289 0 : aLbMetric.SetEntryData( nPos, (void*)nFieldUnit );
290 0 : }
291 0 : aLbMetric.SetSelectHdl( LINK( this, SdTpOptionsMisc, SelectMetricHdl_Impl ) );
292 :
293 0 : SetFieldUnit( aMtrFldOriginalWidth, eFUnit );
294 0 : SetFieldUnit( aMtrFldOriginalHeight, eFUnit );
295 0 : aMtrFldOriginalWidth.SetLast( 999999999 );
296 0 : aMtrFldOriginalWidth.SetMax( 999999999 );
297 0 : aMtrFldOriginalHeight.SetLast( 999999999 );
298 0 : aMtrFldOriginalHeight.SetMax( 999999999 );
299 :
300 : // Temporaere Fields fuer Info-Texte (fuer Formatierung/Berechnung)
301 0 : aMtrFldInfo1.SetUnit( eFUnit );
302 0 : aMtrFldInfo1.SetMax( 999999999 );
303 0 : aMtrFldInfo1.SetDecimalDigits( 2 );
304 0 : aMtrFldInfo2.SetUnit( eFUnit );
305 0 : aMtrFldInfo2.SetMax( 999999999 );
306 0 : aMtrFldInfo2.SetDecimalDigits( 2 );
307 :
308 : // PoolUnit ermitteln
309 0 : SfxItemPool* pPool = rInAttrs.GetPool();
310 : DBG_ASSERT( pPool, "Wo ist der Pool?" );
311 0 : ePoolUnit = pPool->GetMetric( SID_ATTR_FILL_HATCH );
312 :
313 : // Fuellen der CB
314 : sal_uInt16 aTable[ TABLE_COUNT ] =
315 0 : { 1, 2, 4, 5, 8, 10, 16, 20, 30, 40, 50, 100 };
316 :
317 0 : for( i = 0; i < TABLE_COUNT; i++ )
318 0 : aCbScale.InsertEntry( GetScale( 1, aTable[i] ) );
319 0 : for( i = 1; i < TABLE_COUNT; i++ )
320 0 : aCbScale.InsertEntry( GetScale( aTable[i], 1 ) );
321 0 : }
322 :
323 : // -----------------------------------------------------------------------
324 :
325 0 : SdTpOptionsMisc::~SdTpOptionsMisc()
326 : {
327 0 : }
328 : // -----------------------------------------------------------------------
329 0 : void SdTpOptionsMisc::ActivatePage( const SfxItemSet& rSet )
330 : {
331 : // Hier muss noch einmal SaveValue gerufen werden, da sonst u.U.
332 : // der Wert in anderen TabPages keine Wirkung hat
333 0 : aLbMetric.SaveValue();
334 : // Metrik ggfs. aendern (da TabPage im Dialog liegt,
335 : // wo die Metrik eingestellt werden kann
336 0 : const SfxPoolItem* pAttr = NULL;
337 0 : if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_METRIC , sal_False,
338 0 : (const SfxPoolItem**)&pAttr ))
339 : {
340 0 : const SfxUInt16Item* pItem = (SfxUInt16Item*) pAttr;
341 :
342 0 : FieldUnit eFUnit = (FieldUnit)(long)pItem->GetValue();
343 :
344 0 : if( eFUnit != aMtrFldOriginalWidth.GetUnit() )
345 : {
346 : // Metriken einstellen
347 0 : sal_Int64 nVal = aMtrFldOriginalWidth.Denormalize( aMtrFldOriginalWidth.GetValue( FUNIT_TWIP ) );
348 0 : SetFieldUnit( aMtrFldOriginalWidth, eFUnit, sal_True );
349 0 : aMtrFldOriginalWidth.SetValue( aMtrFldOriginalWidth.Normalize( nVal ), FUNIT_TWIP );
350 :
351 0 : nVal = aMtrFldOriginalHeight.Denormalize( aMtrFldOriginalHeight.GetValue( FUNIT_TWIP ) );
352 0 : SetFieldUnit( aMtrFldOriginalHeight, eFUnit, sal_True );
353 0 : aMtrFldOriginalHeight.SetValue( aMtrFldOriginalHeight.Normalize( nVal ), FUNIT_TWIP );
354 :
355 :
356 0 : if( nWidth != 0 && nHeight != 0 )
357 : {
358 0 : aMtrFldInfo1.SetUnit( eFUnit );
359 0 : aMtrFldInfo2.SetUnit( eFUnit );
360 :
361 0 : SetMetricValue( aMtrFldInfo1, nWidth, ePoolUnit );
362 0 : aInfo1 = aMtrFldInfo1.GetText();
363 0 : aFiInfo1.SetText( aInfo1 );
364 :
365 0 : SetMetricValue( aMtrFldInfo2, nHeight, ePoolUnit );
366 0 : aInfo2 = aMtrFldInfo2.GetText();
367 0 : aFiInfo2.SetText( aInfo2 );
368 : }
369 : }
370 : }
371 0 : }
372 :
373 : // -----------------------------------------------------------------------
374 :
375 0 : int SdTpOptionsMisc::DeactivatePage( SfxItemSet* pActiveSet )
376 : {
377 : // Parsercheck
378 : sal_Int32 nX, nY;
379 0 : if( SetScale( aCbScale.GetText(), nX, nY ) )
380 : {
381 0 : if( pActiveSet )
382 0 : FillItemSet( *pActiveSet );
383 0 : return( LEAVE_PAGE );
384 : }
385 0 : WarningBox aWarnBox( GetParent(), WB_YES_NO, String( SdResId( STR_WARN_SCALE_FAIL ) ) );
386 0 : short nReturn = aWarnBox.Execute();
387 :
388 0 : if( nReturn == RET_YES )
389 0 : return( KEEP_PAGE );
390 :
391 0 : if( pActiveSet )
392 0 : FillItemSet( *pActiveSet );
393 :
394 0 : return( LEAVE_PAGE );
395 : }
396 :
397 : // -----------------------------------------------------------------------
398 :
399 0 : sal_Bool SdTpOptionsMisc::FillItemSet( SfxItemSet& rAttrs )
400 : {
401 0 : sal_Bool bModified = sal_False;
402 :
403 0 : if( aCbxStartWithTemplate.GetSavedValue() != aCbxStartWithTemplate.IsChecked() ||
404 0 : aCbxMarkedHitMovesAlways.GetSavedValue()!= aCbxMarkedHitMovesAlways.IsChecked() ||
405 0 : aCbxCrookNoContortion.GetSavedValue() != aCbxCrookNoContortion.IsChecked() ||
406 0 : aCbxQuickEdit.GetSavedValue() != aCbxQuickEdit.IsChecked() ||
407 0 : aCbxPickThrough.GetSavedValue() != aCbxPickThrough.IsChecked() ||
408 0 : aCbxMasterPageCache.GetSavedValue() != aCbxMasterPageCache.IsChecked() ||
409 0 : aCbxCopy.GetSavedValue() != aCbxCopy.IsChecked() ||
410 0 : aCbxStartWithActualPage.GetSavedValue() != aCbxStartWithActualPage.IsChecked() ||
411 0 : aCbxEnableSdremote.GetSavedValue() != aCbxEnableSdremote.IsChecked() ||
412 0 : aCbxCompatibility.GetSavedValue() != aCbxCompatibility.IsChecked() ||
413 0 : aCbxUsePrinterMetrics.GetSavedValue() != aCbxUsePrinterMetrics.IsChecked() )
414 : {
415 0 : SdOptionsMiscItem aOptsItem( ATTR_OPTIONS_MISC );
416 :
417 0 : aOptsItem.GetOptionsMisc().SetStartWithTemplate( aCbxStartWithTemplate.IsChecked() );
418 0 : aOptsItem.GetOptionsMisc().SetMarkedHitMovesAlways( aCbxMarkedHitMovesAlways.IsChecked() );
419 0 : aOptsItem.GetOptionsMisc().SetCrookNoContortion( aCbxCrookNoContortion.IsChecked() );
420 0 : aOptsItem.GetOptionsMisc().SetQuickEdit( aCbxQuickEdit.IsChecked() );
421 0 : aOptsItem.GetOptionsMisc().SetPickThrough( aCbxPickThrough.IsChecked() );
422 0 : aOptsItem.GetOptionsMisc().SetMasterPagePaintCaching( aCbxMasterPageCache.IsChecked() );
423 0 : aOptsItem.GetOptionsMisc().SetDragWithCopy( aCbxCopy.IsChecked() );
424 0 : aOptsItem.GetOptionsMisc().SetStartWithActualPage( aCbxStartWithActualPage.IsChecked() );
425 0 : aOptsItem.GetOptionsMisc().SetEnableSdremote( aCbxEnableSdremote.IsChecked() );
426 0 : aOptsItem.GetOptionsMisc().SetSummationOfParagraphs( aCbxCompatibility.IsChecked() );
427 0 : aOptsItem.GetOptionsMisc().SetPrinterIndependentLayout (
428 0 : aCbxUsePrinterMetrics.IsChecked()
429 : ? ::com::sun::star::document::PrinterIndependentLayout::DISABLED
430 0 : : ::com::sun::star::document::PrinterIndependentLayout::ENABLED);
431 0 : rAttrs.Put( aOptsItem );
432 :
433 0 : bModified = sal_True;
434 : }
435 :
436 : // Metrik
437 0 : const sal_uInt16 nMPos = aLbMetric.GetSelectEntryPos();
438 0 : if ( nMPos != aLbMetric.GetSavedValue() )
439 : {
440 0 : sal_uInt16 nFieldUnit = (sal_uInt16)(long)aLbMetric.GetEntryData( nMPos );
441 0 : rAttrs.Put( SfxUInt16Item( GetWhich( SID_ATTR_METRIC ),
442 0 : (sal_uInt16)nFieldUnit ) );
443 0 : bModified |= sal_True;
444 : }
445 :
446 : // Tabulatorabstand
447 0 : if( aMtrFldTabstop.GetText() != aMtrFldTabstop.GetSavedValue() )
448 : {
449 0 : sal_uInt16 nWh = GetWhich( SID_ATTR_DEFTABSTOP );
450 0 : SfxMapUnit eUnit = rAttrs.GetPool()->GetMetric( nWh );
451 0 : SfxUInt16Item aDef( nWh,(sal_uInt16)GetCoreValue( aMtrFldTabstop, eUnit ) );
452 0 : rAttrs.Put( aDef );
453 0 : bModified |= sal_True;
454 : }
455 :
456 : sal_Int32 nX, nY;
457 0 : if( SetScale( aCbScale.GetText(), nX, nY ) )
458 : {
459 0 : rAttrs.Put( SfxInt32Item( ATTR_OPTIONS_SCALE_X, nX ) );
460 0 : rAttrs.Put( SfxInt32Item( ATTR_OPTIONS_SCALE_Y, nY ) );
461 :
462 0 : bModified = sal_True;
463 : }
464 :
465 0 : return( bModified );
466 : }
467 :
468 : // -----------------------------------------------------------------------
469 :
470 0 : void SdTpOptionsMisc::Reset( const SfxItemSet& rAttrs )
471 : {
472 : SdOptionsMiscItem aOptsItem( (const SdOptionsMiscItem&) rAttrs.
473 0 : Get( ATTR_OPTIONS_MISC ) );
474 :
475 0 : aCbxStartWithTemplate.Check( aOptsItem.GetOptionsMisc().IsStartWithTemplate() );
476 0 : aCbxMarkedHitMovesAlways.Check( aOptsItem.GetOptionsMisc().IsMarkedHitMovesAlways() );
477 0 : aCbxCrookNoContortion.Check( aOptsItem.GetOptionsMisc().IsCrookNoContortion() );
478 0 : aCbxQuickEdit.Check( aOptsItem.GetOptionsMisc().IsQuickEdit() );
479 0 : aCbxPickThrough.Check( aOptsItem.GetOptionsMisc().IsPickThrough() );
480 0 : aCbxMasterPageCache.Check( aOptsItem.GetOptionsMisc().IsMasterPagePaintCaching() );
481 0 : aCbxCopy.Check( aOptsItem.GetOptionsMisc().IsDragWithCopy() );
482 0 : aCbxStartWithActualPage.Check( aOptsItem.GetOptionsMisc().IsStartWithActualPage() );
483 0 : aCbxEnableSdremote.Check( aOptsItem.GetOptionsMisc().IsEnableSdremote() );
484 0 : aCbxCompatibility.Check( aOptsItem.GetOptionsMisc().IsSummationOfParagraphs() );
485 0 : aCbxUsePrinterMetrics.Check( aOptsItem.GetOptionsMisc().GetPrinterIndependentLayout()==1 );
486 0 : aCbxStartWithTemplate.SaveValue();
487 0 : aCbxMarkedHitMovesAlways.SaveValue();
488 0 : aCbxCrookNoContortion.SaveValue();
489 0 : aCbxQuickEdit.SaveValue();
490 0 : aCbxPickThrough.SaveValue();
491 :
492 0 : aCbxMasterPageCache.SaveValue();
493 0 : aCbxCopy.SaveValue();
494 0 : aCbxEnableSdremote.SaveValue();
495 0 : aCbxCompatibility.SaveValue();
496 0 : aCbxUsePrinterMetrics.SaveValue();
497 :
498 : // Metrik
499 0 : sal_uInt16 nWhich = GetWhich( SID_ATTR_METRIC );
500 0 : aLbMetric.SetNoSelection();
501 :
502 0 : if ( rAttrs.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE )
503 : {
504 0 : const SfxUInt16Item& rItem = (SfxUInt16Item&)rAttrs.Get( nWhich );
505 0 : long nFieldUnit = (long)rItem.GetValue();
506 :
507 0 : for ( sal_uInt16 i = 0; i < aLbMetric.GetEntryCount(); ++i )
508 : {
509 0 : if ( (long)aLbMetric.GetEntryData( i ) == nFieldUnit )
510 : {
511 0 : aLbMetric.SelectEntryPos( i );
512 0 : break;
513 : }
514 : }
515 : }
516 :
517 : // Tabulatorabstand
518 0 : nWhich = GetWhich( SID_ATTR_DEFTABSTOP );
519 0 : if( rAttrs.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE )
520 : {
521 0 : SfxMapUnit eUnit = rAttrs.GetPool()->GetMetric( nWhich );
522 0 : const SfxUInt16Item& rItem = (SfxUInt16Item&)rAttrs.Get( nWhich );
523 0 : SetMetricValue( aMtrFldTabstop, rItem.GetValue(), eUnit );
524 : }
525 0 : aLbMetric.SaveValue();
526 0 : aMtrFldTabstop.SaveValue();
527 : //Scale
528 : sal_Int32 nX = ( (const SfxInt32Item&) rAttrs.
529 0 : Get( ATTR_OPTIONS_SCALE_X ) ).GetValue();
530 : sal_Int32 nY = ( (const SfxInt32Item&) rAttrs.
531 0 : Get( ATTR_OPTIONS_SCALE_Y ) ).GetValue();
532 : nWidth = ( (const SfxUInt32Item&) rAttrs.
533 0 : Get( ATTR_OPTIONS_SCALE_WIDTH ) ).GetValue();
534 : nHeight = ( (const SfxUInt32Item&) rAttrs.
535 0 : Get( ATTR_OPTIONS_SCALE_HEIGHT ) ).GetValue();
536 :
537 0 : aCbScale.SetText( GetScale( nX, nY ) );
538 :
539 0 : aFtOriginal.Hide();
540 0 : aFtEquivalent.Hide();
541 0 : aMtrFldOriginalWidth.Hide();
542 0 : aMtrFldOriginalWidth.SetText( aInfo1 ); // leer
543 0 : aMtrFldOriginalHeight.Hide();
544 0 : aMtrFldOriginalHeight.SetText( aInfo2 ); //leer
545 0 : aFtPageWidth.Hide();
546 0 : aFtPageHeight.Hide();
547 0 : aFiInfo1.Hide();
548 0 : aFiInfo2.Hide();
549 :
550 0 : UpdateCompatibilityControls ();
551 0 : }
552 :
553 : // -----------------------------------------------------------------------
554 :
555 0 : SfxTabPage* SdTpOptionsMisc::Create( Window* pWindow,
556 : const SfxItemSet& rAttrs )
557 : {
558 0 : return( new SdTpOptionsMisc( pWindow, rAttrs ) );
559 : }
560 : //------------------------------------------------------------------------
561 :
562 0 : IMPL_LINK_NOARG(SdTpOptionsMisc, SelectMetricHdl_Impl)
563 : {
564 0 : sal_uInt16 nPos = aLbMetric.GetSelectEntryPos();
565 :
566 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
567 : {
568 0 : FieldUnit eUnit = (FieldUnit)(long)aLbMetric.GetEntryData( nPos );
569 : sal_Int64 nVal =
570 0 : aMtrFldTabstop.Denormalize( aMtrFldTabstop.GetValue( FUNIT_TWIP ) );
571 0 : SetFieldUnit( aMtrFldTabstop, eUnit );
572 0 : aMtrFldTabstop.SetValue( aMtrFldTabstop.Normalize( nVal ), FUNIT_TWIP );
573 : }
574 0 : return 0;
575 : }
576 :
577 :
578 : namespace {
579 0 : void lcl_MoveWin( Window& rWin, long nYDiff)
580 : {
581 0 : Point aPos(rWin.GetPosPixel());
582 0 : aPos.Y() += nYDiff;
583 0 : rWin.SetPosPixel (aPos);
584 0 : }
585 :
586 0 : void lcl_MoveWin( Window& rWin, long nXdiff, long nYdiff)
587 : {
588 0 : Point aPos(rWin.GetPosPixel());
589 0 : aPos.X() += nXdiff;
590 0 : aPos.Y() += nYdiff;
591 0 : rWin.SetPosPixel(aPos);
592 0 : }
593 : }
594 :
595 0 : void SdTpOptionsMisc::SetImpressMode (void)
596 : {
597 0 : long nDialogWidth = GetSizePixel().Width();
598 0 : long nLineHeight = aCbxPickThrough.GetPosPixel().Y()
599 0 : - aCbxQuickEdit.GetPosPixel().Y();
600 :
601 : // Put both "Text objects" check boxes side by side.
602 : lcl_MoveWin (aCbxPickThrough,
603 0 : nDialogWidth/2 - aCbxPickThrough.GetPosPixel().X(),
604 0 : -nLineHeight);
605 :
606 : // Move the other controls up one line.
607 0 : lcl_MoveWin (aGrpProgramStart, -nLineHeight);
608 0 : lcl_MoveWin (aCbxStartWithTemplate, -nLineHeight);
609 0 : lcl_MoveWin (aGrpSettings, -nLineHeight);
610 0 : lcl_MoveWin (aCbxMasterPageCache, -nLineHeight);
611 0 : lcl_MoveWin (aCbxCopy, -nLineHeight);
612 0 : lcl_MoveWin (aCbxMarkedHitMovesAlways, -nLineHeight);
613 0 : lcl_MoveWin (aCbxCrookNoContortion, -nLineHeight);
614 0 : lcl_MoveWin (aTxtMetric, -nLineHeight);
615 0 : lcl_MoveWin (aLbMetric, -nLineHeight);
616 0 : lcl_MoveWin (aTxtTabstop, -nLineHeight);
617 0 : lcl_MoveWin (aMtrFldTabstop, -nLineHeight);
618 0 : lcl_MoveWin (aGrpStartWithActualPage, -nLineHeight);
619 0 : lcl_MoveWin (aCbxStartWithActualPage, -nLineHeight);
620 0 : lcl_MoveWin (aCbxEnableSdremote, -nLineHeight);
621 0 : lcl_MoveWin (aTxtCompatibility, -nLineHeight);
622 :
623 : // Move the printer-independent-metrics check box up two lines to change
624 : // places with spacing-between-paragraphs check box.
625 0 : lcl_MoveWin (aCbxUsePrinterMetrics, -2*nLineHeight);
626 : #ifndef ENABLE_SDREMOTE_BLUETOOTH
627 : aCbxEnableSdremote.Hide();
628 : #endif
629 0 : }
630 :
631 0 : void SdTpOptionsMisc::SetDrawMode()
632 : {
633 0 : aCbxStartWithTemplate.Hide();
634 0 : aGrpProgramStart.Hide();
635 0 : aCbxStartWithActualPage.Hide();
636 0 : aCbxEnableSdremote.Hide();
637 0 : aCbxCompatibility.Hide();
638 0 : aGrpStartWithActualPage.Hide();
639 0 : aCbxCrookNoContortion.Show();
640 :
641 0 : aGrpScale.Show();
642 0 : aFtScale.Show();
643 0 : aCbScale.Show();
644 :
645 0 : aFtOriginal.Show();
646 0 : aFtEquivalent.Show();
647 :
648 0 : aFtPageWidth.Show();
649 0 : aFiInfo1.Show();
650 0 : aMtrFldOriginalWidth.Show();
651 :
652 0 : aFtPageHeight.Show();
653 0 : aFiInfo2.Show();
654 0 : aMtrFldOriginalHeight.Show();
655 :
656 0 : long nDiff = aGrpSettings.GetPosPixel().Y() - aGrpProgramStart.GetPosPixel().Y();
657 0 : lcl_MoveWin( aGrpSettings, -nDiff );
658 0 : lcl_MoveWin( aCbxMasterPageCache, -nDiff );
659 0 : lcl_MoveWin( aCbxCopy, -nDiff );
660 0 : lcl_MoveWin( aCbxMarkedHitMovesAlways, -nDiff );
661 0 : lcl_MoveWin( aCbxCrookNoContortion, -nDiff );
662 0 : nDiff -= aCbxCrookNoContortion.GetPosPixel().Y() - aCbxMarkedHitMovesAlways.GetPosPixel().Y();
663 0 : lcl_MoveWin( aTxtMetric, -nDiff );
664 0 : lcl_MoveWin( aLbMetric, -nDiff );
665 0 : lcl_MoveWin( aTxtTabstop, -nDiff );
666 0 : lcl_MoveWin( aMtrFldTabstop, -nDiff );
667 :
668 : // Move the scale controls so that they are visually centered betwen the
669 : // group controls above and below.
670 0 : lcl_MoveWin (aFtScale, -17);
671 0 : lcl_MoveWin (aCbScale, -17);
672 :
673 : // Move the printer-independent-metrics check box in the place that the
674 : // spacing-between-paragraphs check box normally is in.
675 0 : aCbxUsePrinterMetrics.SetPosPixel (aCbxCompatibility.GetPosPixel());
676 0 : }
677 :
678 : // -----------------------------------------------------------------------
679 :
680 0 : String SdTpOptionsMisc::GetScale( sal_Int32 nX, sal_Int32 nY )
681 : {
682 0 : String aScale( UniString::CreateFromInt32( nX ) );
683 0 : aScale.Append( TOKEN );
684 0 : aScale.Append( UniString::CreateFromInt32( nY ) );
685 :
686 0 : return( aScale );
687 : }
688 :
689 : // -----------------------------------------------------------------------
690 :
691 0 : sal_Bool SdTpOptionsMisc::SetScale( const String& aScale, sal_Int32& rX, sal_Int32& rY )
692 : {
693 0 : if( comphelper::string::getTokenCount(aScale, TOKEN) != 2 )
694 0 : return( sal_False );
695 :
696 0 : rtl::OUString aTmp(aScale.GetToken( 0, TOKEN ));
697 0 : if (!comphelper::string::isdigitAsciiString(aTmp))
698 0 : return sal_False;
699 :
700 0 : rX = (long) aTmp.toInt32();
701 0 : if( rX == 0 )
702 0 : return( sal_False );
703 :
704 0 : aTmp = aScale.GetToken( 1, TOKEN );
705 0 : if (!comphelper::string::isdigitAsciiString(aTmp))
706 0 : return sal_False;
707 :
708 0 : rY = (long) aTmp.toInt32();
709 0 : if( rY == 0 )
710 0 : return sal_False;
711 :
712 0 : return sal_True;
713 : }
714 :
715 0 : void SdTpOptionsMisc::UpdateCompatibilityControls (void)
716 : {
717 : // Disable the compatibility controls by default. Enable them only when
718 : // there is at least one open document.
719 0 : sal_Bool bIsEnabled = sal_False;
720 :
721 : try
722 : {
723 : // Get a component enumeration from the desktop and search it for documents.
724 0 : Reference<uno::XComponentContext> xContext( ::comphelper::getProcessComponentContext());
725 : do
726 : {
727 0 : Reference<frame::XDesktop2> xDesktop = frame::Desktop::create(xContext);
728 :
729 : Reference<container::XEnumerationAccess> xComponents (
730 0 : xDesktop->getComponents(), UNO_QUERY);
731 0 : if ( ! xComponents.is())
732 : break;
733 :
734 : Reference<container::XEnumeration> xEnumeration (
735 0 : xComponents->createEnumeration());
736 0 : if ( ! xEnumeration.is())
737 : break;
738 :
739 0 : while (xEnumeration->hasMoreElements())
740 : {
741 0 : Reference<frame::XModel> xModel (xEnumeration->nextElement(), UNO_QUERY);
742 0 : if (xModel.is())
743 : {
744 : // There is at leas one model/document: Enable the compatibility controls.
745 0 : bIsEnabled = sal_True;
746 : break;
747 : }
748 0 : }
749 :
750 : }
751 0 : while (false); // One 'loop'.
752 : }
753 0 : catch (const uno::Exception&)
754 : {
755 : // When there is an exception then simply use the default value of
756 : // bIsEnabled and disable the controls.
757 : }
758 :
759 0 : aTxtCompatibility.Enable (bIsEnabled);
760 0 : aCbxCompatibility.Enable(bIsEnabled);
761 0 : aCbxUsePrinterMetrics.Enable (bIsEnabled);
762 0 : }
763 :
764 0 : void SdTpOptionsMisc::PageCreated (SfxAllItemSet aSet)
765 : {
766 0 : SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_SDMODE_FLAG,sal_False);
767 0 : if (pFlagItem)
768 : {
769 0 : sal_uInt32 nFlags=pFlagItem->GetValue();
770 0 : if ( ( nFlags & SD_DRAW_MODE ) == SD_DRAW_MODE )
771 0 : SetDrawMode();
772 0 : if ( ( nFlags & SD_IMPRESS_MODE ) == SD_IMPRESS_MODE )
773 0 : SetImpressMode();
774 : }
775 0 : }
776 :
777 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|