1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #include <sfx2/app.hxx>
21 #include <sfx2/module.hxx>
22 #include <tools/shl.hxx>
24 #include <svx/svddef.hxx>
25 #include <svx/sdtditm.hxx>
26 #include <svx/sdtagitm.hxx>
27 #include <svx/sdtaitm.hxx>
28 #include <svx/sdtfsitm.hxx>
29 #include <svx/sdtcfitm.hxx>
30 #include <svx/svdobj.hxx>
31 #include <svx/svdmark.hxx>
32 #include <svx/svdview.hxx>
33 #include <svx/svdotext.hxx>
34 #include <svx/dialogs.hrc>
36 #include "textattr.hxx"
37 #include "textattr.hrc"
38 #include <dialmgr.hxx>
39 #include "svx/dlgutil.hxx"
40 #include <sfx2/request.hxx>
41 #include <svx/ofaitem.hxx>
42 #include <editeng/writingmodeitem.hxx>
44 static sal_uInt16 pRanges
[] =
46 SDRATTR_MISC_FIRST
, SDRATTR_TEXT_HORZADJUST
,
47 SDRATTR_TEXT_WORDWRAP
, SDRATTR_TEXT_AUTOGROWSIZE
,
51 /*************************************************************************
53 |* dialog (page) for copying objects
55 \************************************************************************/
57 SvxTextAttrPage::SvxTextAttrPage( Window
* pWindow
, const SfxItemSet
& rInAttrs
) :
58 SvxTabPage ( pWindow
, CUI_RES( RID_SVXPAGE_TEXTATTR
),
61 aFlText ( this, CUI_RES( FL_TEXT
) ),
62 aTsbAutoGrowWidth ( this, CUI_RES( TSB_AUTOGROW_WIDTH
) ),
63 aTsbAutoGrowHeight ( this, CUI_RES( TSB_AUTOGROW_HEIGHT
) ),
64 aTsbFitToSize ( this, CUI_RES( TSB_FIT_TO_SIZE
) ),
65 aTsbContour ( this, CUI_RES( TSB_CONTOUR
) ),
66 aTsbWordWrapText( this, CUI_RES( TSB_WORDWRAP_TEXT
) ),
67 aTsbAutoGrowSize( this, CUI_RES( TSB_AUTOGROW_SIZE
) ),
68 aFlDistance ( this, CUI_RES( FL_DISTANCE
) ),
69 aFtLeft ( this, CUI_RES( FT_LEFT
) ),
70 aMtrFldLeft ( this, CUI_RES( MTR_FLD_LEFT
) ),
71 aFtRight ( this, CUI_RES( FT_RIGHT
) ),
72 aMtrFldRight ( this, CUI_RES( MTR_FLD_RIGHT
) ),
73 aFtTop ( this, CUI_RES( FT_TOP
) ),
74 aMtrFldTop ( this, CUI_RES( MTR_FLD_TOP
) ),
75 aFtBottom ( this, CUI_RES( FT_BOTTOM
) ),
76 aMtrFldBottom ( this, CUI_RES( MTR_FLD_BOTTOM
) ),
78 aFlSeparator ( this, CUI_RES( FL_SEPARATOR
) ),
80 aFlPosition ( this, CUI_RES( FL_POSITION
) ),
81 aCtlPosition ( this, CUI_RES( CTL_POSITION
),
83 aTsbFullWidth ( this, CUI_RES( TSB_FULL_WIDTH
) ),
85 rOutAttrs ( rInAttrs
)
89 FieldUnit eFUnit
= GetModuleFieldUnit( rInAttrs
);
90 SetFieldUnit( aMtrFldLeft
, eFUnit
);
91 SetFieldUnit( aMtrFldRight
, eFUnit
);
92 SetFieldUnit( aMtrFldTop
, eFUnit
);
93 SetFieldUnit( aMtrFldBottom
, eFUnit
);
95 Link
aLink( LINK( this, SvxTextAttrPage
, ClickHdl_Impl
) );
96 aTsbAutoGrowWidth
.SetClickHdl( aLink
);
97 aTsbAutoGrowHeight
.SetClickHdl( aLink
);
98 aTsbFitToSize
.SetClickHdl( aLink
);
99 aTsbContour
.SetClickHdl( aLink
);
101 aTsbFullWidth
.SetClickHdl(
102 LINK( this, SvxTextAttrPage
, ClickFullWidthHdl_Impl
) );
104 aCtlPosition
.SetAccessibleRelationMemberOf( &aFlPosition
);
107 /*************************************************************************
111 \************************************************************************/
113 SvxTextAttrPage::~SvxTextAttrPage()
117 /*************************************************************************
119 |* reads the passed item set
121 \************************************************************************/
123 void SvxTextAttrPage::Reset( const SfxItemSet
& rAttrs
)
125 SfxItemPool
* pPool
= rAttrs
.GetPool();
126 DBG_ASSERT( pPool
, "Wo ist der Pool" );
127 SfxMapUnit eUnit
= pPool
->GetMetric( SDRATTR_TEXT_LEFTDIST
);
129 const SfxPoolItem
* pItem
= GetItem( rAttrs
, SDRATTR_TEXT_LEFTDIST
);
132 pItem
= &pPool
->GetDefaultItem( SDRATTR_TEXT_LEFTDIST
);
135 long nValue
= ( ( const SdrTextLeftDistItem
* )pItem
)->GetValue();
136 SetMetricValue( aMtrFldLeft
, nValue
, eUnit
);
139 aMtrFldLeft
.SetText( String() );
140 aMtrFldLeft
.SaveValue();
142 pItem
= GetItem( rAttrs
, SDRATTR_TEXT_RIGHTDIST
);
144 pItem
= &pPool
->GetDefaultItem( SDRATTR_TEXT_RIGHTDIST
);
147 long nValue
= ( ( const SdrTextRightDistItem
* )pItem
)->GetValue();
148 SetMetricValue( aMtrFldRight
, nValue
, eUnit
);
151 aMtrFldRight
.SetText( String() );
152 aMtrFldRight
.SaveValue();
154 pItem
= GetItem( rAttrs
, SDRATTR_TEXT_UPPERDIST
);
156 pItem
= &pPool
->GetDefaultItem( SDRATTR_TEXT_UPPERDIST
);
159 long nValue
= ( ( const SdrTextUpperDistItem
* )pItem
)->GetValue();
160 SetMetricValue( aMtrFldTop
, nValue
, eUnit
);
163 aMtrFldTop
.SetText( String() );
164 aMtrFldTop
.SaveValue();
166 pItem
= GetItem( rAttrs
, SDRATTR_TEXT_LOWERDIST
);
168 pItem
= &pPool
->GetDefaultItem( SDRATTR_TEXT_LOWERDIST
);
171 long nValue
= ( ( const SdrTextLowerDistItem
* )pItem
)->GetValue();
172 SetMetricValue( aMtrFldBottom
, nValue
, eUnit
);
175 aMtrFldBottom
.SetText( String() );
176 aMtrFldBottom
.SaveValue();
179 if ( rAttrs
.GetItemState( SDRATTR_TEXT_AUTOGROWHEIGHT
) != SFX_ITEM_DONTCARE
)
181 aTsbAutoGrowHeight
.SetState( ( ( const SdrTextAutoGrowHeightItem
& )rAttrs
.Get( SDRATTR_TEXT_AUTOGROWHEIGHT
) ).
182 GetValue() ? STATE_CHECK
: STATE_NOCHECK
);
183 aTsbAutoGrowHeight
.EnableTriState( sal_False
);
186 aTsbAutoGrowHeight
.SetState( STATE_DONTKNOW
);
187 aTsbAutoGrowHeight
.SaveValue();
190 if ( rAttrs
.GetItemState( SDRATTR_TEXT_AUTOGROWWIDTH
) != SFX_ITEM_DONTCARE
)
192 aTsbAutoGrowWidth
.SetState( ( ( const SdrTextAutoGrowWidthItem
& )rAttrs
.Get( SDRATTR_TEXT_AUTOGROWWIDTH
) ).
193 GetValue() ? STATE_CHECK
: STATE_NOCHECK
);
194 aTsbAutoGrowWidth
.EnableTriState( sal_False
);
197 aTsbAutoGrowWidth
.SetState( STATE_DONTKNOW
);
198 aTsbAutoGrowWidth
.SaveValue();
201 if ( rAttrs
.GetItemState( SDRATTR_TEXT_AUTOGROWSIZE
) != SFX_ITEM_DONTCARE
)
203 aTsbAutoGrowSize
.SetState( ( ( const SdrTextAutoGrowHeightItem
& )rAttrs
.Get( SDRATTR_TEXT_AUTOGROWHEIGHT
) ).
204 GetValue() ? STATE_CHECK
: STATE_NOCHECK
);
205 aTsbAutoGrowSize
.EnableTriState( sal_False
);
208 aTsbAutoGrowSize
.SetState( STATE_DONTKNOW
);
209 aTsbAutoGrowSize
.SaveValue();
212 if ( rAttrs
.GetItemState( SDRATTR_TEXT_WORDWRAP
) != SFX_ITEM_DONTCARE
)
214 aTsbWordWrapText
.SetState( ( ( const SdrTextWordWrapItem
& )rAttrs
.Get( SDRATTR_TEXT_WORDWRAP
) ).
215 GetValue() ? STATE_CHECK
: STATE_NOCHECK
);
216 aTsbWordWrapText
.EnableTriState( sal_False
);
219 aTsbWordWrapText
.SetState( STATE_DONTKNOW
);
220 aTsbWordWrapText
.SaveValue();
223 // #103516# Do the setup based on states of hor/ver adjust
224 // Setup center field and FullWidth
225 SfxItemState eVState
= rAttrs
.GetItemState( SDRATTR_TEXT_VERTADJUST
);
226 SfxItemState eHState
= rAttrs
.GetItemState( SDRATTR_TEXT_HORZADJUST
);
228 if(SFX_ITEM_DONTCARE
!= eVState
&& SFX_ITEM_DONTCARE
!= eHState
)
230 // VertAdjust and HorAdjust are unequivocal, thus
231 SdrTextVertAdjust eTVA
= (SdrTextVertAdjust
)((const SdrTextVertAdjustItem
&)rAttrs
.Get(SDRATTR_TEXT_VERTADJUST
)).GetValue();
232 SdrTextHorzAdjust eTHA
= (SdrTextHorzAdjust
)((const SdrTextHorzAdjustItem
&)rAttrs
.Get(SDRATTR_TEXT_HORZADJUST
)).GetValue();
233 RECT_POINT eRP
= RP_LB
;
235 aTsbFullWidth
.EnableTriState( sal_False
);
237 // Translate item values into local anchor position.
240 case SDRTEXTVERTADJUST_TOP
:
244 case SDRTEXTHORZADJUST_LEFT
: eRP
= RP_LT
; break;
245 case SDRTEXTHORZADJUST_BLOCK
:
246 case SDRTEXTHORZADJUST_CENTER
: eRP
= RP_MT
; break;
247 case SDRTEXTHORZADJUST_RIGHT
: eRP
= RP_RT
; break;
251 case SDRTEXTVERTADJUST_BLOCK
:
252 case SDRTEXTVERTADJUST_CENTER
:
256 case SDRTEXTHORZADJUST_LEFT
: eRP
= RP_LM
; break;
257 case SDRTEXTHORZADJUST_BLOCK
:
258 case SDRTEXTHORZADJUST_CENTER
: eRP
= RP_MM
; break;
259 case SDRTEXTHORZADJUST_RIGHT
: eRP
= RP_RM
; break;
263 case SDRTEXTVERTADJUST_BOTTOM
:
267 case SDRTEXTHORZADJUST_LEFT
: eRP
= RP_LB
; break;
268 case SDRTEXTHORZADJUST_BLOCK
:
269 case SDRTEXTHORZADJUST_CENTER
: eRP
= RP_MB
; break;
270 case SDRTEXTHORZADJUST_RIGHT
: eRP
= RP_RB
; break;
278 // See if we have to check the "full width" check button.
279 sal_Bool
bLeftToRight(IsTextDirectionLeftToRight());
281 if((bLeftToRight
&& (SDRTEXTHORZADJUST_BLOCK
== eTHA
)) || (!bLeftToRight
&& (SDRTEXTVERTADJUST_BLOCK
== eTVA
)))
283 // Move anchor to valid position.
284 ClickFullWidthHdl_Impl(NULL
);
285 aTsbFullWidth
.SetState(STATE_CHECK
);
288 aCtlPosition
.SetActualRP( eRP
);
292 // VertAdjust or HorAdjust is not unequivocal
293 aCtlPosition
.Reset();
295 aCtlPosition
.SetState(STATE_DONTKNOW
);
296 aCtlPosition
.DoCompletelyDisable(sal_True
);
298 aTsbFullWidth
.SetState(STATE_DONTKNOW
);
299 aTsbFullWidth
.Enable( sal_False
);
300 aFlPosition
.Enable( sal_False
);
304 if ( rAttrs
.GetItemState( SDRATTR_TEXT_FITTOSIZE
) != SFX_ITEM_DONTCARE
)
306 SdrFitToSizeType eFTS
= (SdrFitToSizeType
)
307 ( ( const SdrTextFitToSizeTypeItem
& )rAttrs
.Get( SDRATTR_TEXT_FITTOSIZE
) ).GetValue();
308 aTsbFitToSize
.SetState( eFTS
== SDRTEXTFIT_NONE
? STATE_NOCHECK
: STATE_CHECK
);
309 aTsbFitToSize
.EnableTriState( sal_False
);
312 aTsbFitToSize
.SetState( STATE_DONTKNOW
);
313 aTsbFitToSize
.SaveValue();
315 if( rAttrs
.GetItemState( SDRATTR_TEXT_CONTOURFRAME
) != SFX_ITEM_DONTCARE
)
317 sal_Bool bContour
= ( ( const SdrTextContourFrameItem
& )rAttrs
.Get( SDRATTR_TEXT_CONTOURFRAME
) ).GetValue();
318 aTsbContour
.SetState( bContour
? STATE_CHECK
: STATE_NOCHECK
);
319 aTsbContour
.EnableTriState( sal_False
);
322 aTsbContour
.SetState( STATE_DONTKNOW
);
323 aTsbContour
.SaveValue();
325 ClickHdl_Impl( NULL
);
328 /*************************************************************************
330 |* fills the passed item set with dialog box attributes
332 \************************************************************************/
334 sal_Bool
SvxTextAttrPage::FillItemSet( SfxItemSet
& rAttrs
)
336 SfxItemPool
* pPool
= rAttrs
.GetPool();
337 DBG_ASSERT( pPool
, "Wo ist der Pool" );
338 SfxMapUnit eUnit
= pPool
->GetMetric( SDRATTR_TEXT_LEFTDIST
);
343 if( aMtrFldLeft
.GetText() != aMtrFldLeft
.GetSavedValue() )
345 nValue
= GetCoreValue( aMtrFldLeft
, eUnit
);
346 rAttrs
.Put( SdrTextLeftDistItem( nValue
) );
349 if( aMtrFldRight
.GetText() != aMtrFldRight
.GetSavedValue() )
351 nValue
= GetCoreValue( aMtrFldRight
, eUnit
);
352 rAttrs
.Put( SdrTextRightDistItem( nValue
) );
355 if( aMtrFldTop
.GetText() != aMtrFldTop
.GetSavedValue() )
357 nValue
= GetCoreValue( aMtrFldTop
, eUnit
);
358 rAttrs
.Put( SdrTextUpperDistItem( nValue
) );
361 if( aMtrFldBottom
.GetText() != aMtrFldBottom
.GetSavedValue() )
363 nValue
= GetCoreValue( aMtrFldBottom
, eUnit
);
364 rAttrs
.Put( SdrTextLowerDistItem( nValue
) );
367 eState
= aTsbAutoGrowHeight
.GetState();
368 if( eState
!= aTsbAutoGrowHeight
.GetSavedValue() )
370 rAttrs
.Put( SdrTextAutoGrowHeightItem( (sal_Bool
) STATE_CHECK
== eState
) );
373 eState
= aTsbAutoGrowWidth
.GetState();
374 if( eState
!= aTsbAutoGrowWidth
.GetSavedValue() )
376 rAttrs
.Put( SdrTextAutoGrowWidthItem( (sal_Bool
) STATE_CHECK
== eState
) );
379 eState
= aTsbAutoGrowSize
.GetState();
380 if( eState
!= aTsbAutoGrowSize
.GetSavedValue() )
382 rAttrs
.Put( SdrTextAutoGrowHeightItem( (sal_Bool
) STATE_CHECK
== eState
) );
385 eState
= aTsbWordWrapText
.GetState();
386 if( eState
!= aTsbWordWrapText
.GetSavedValue() )
388 rAttrs
.Put( SdrTextWordWrapItem( (sal_Bool
) STATE_CHECK
== eState
) );
391 eState
= aTsbContour
.GetState();
392 if( eState
!= aTsbContour
.GetSavedValue() )
394 rAttrs
.Put( SdrTextContourFrameItem( (sal_Bool
) STATE_CHECK
== eState
) );
397 eState
= aTsbFitToSize
.GetState();
398 if( eState
!= aTsbFitToSize
.GetSavedValue() )
400 SdrFitToSizeType eFTS
;
403 default: ; //prevent warning
404 OSL_FAIL( "svx::SvxTextAttrPage::FillItemSet(), unhandled state!" );
405 case STATE_NOCHECK
: eFTS
= SDRTEXTFIT_NONE
; break;
406 case STATE_CHECK
: eFTS
= SDRTEXTFIT_AUTOFIT
; break;
408 rAttrs
.Put( SdrTextFitToSizeTypeItem( eFTS
) );
412 RECT_POINT eRP
= aCtlPosition
.GetActualRP();
413 SdrTextVertAdjust eTVA
, eOldTVA
;
414 SdrTextHorzAdjust eTHA
, eOldTHA
;
419 case RP_LT
: eTVA
= SDRTEXTVERTADJUST_TOP
;
420 eTHA
= SDRTEXTHORZADJUST_LEFT
; break;
421 case RP_LM
: eTVA
= SDRTEXTVERTADJUST_CENTER
;
422 eTHA
= SDRTEXTHORZADJUST_LEFT
; break;
423 case RP_LB
: eTVA
= SDRTEXTVERTADJUST_BOTTOM
;
424 eTHA
= SDRTEXTHORZADJUST_LEFT
; break;
425 case RP_MT
: eTVA
= SDRTEXTVERTADJUST_TOP
;
426 eTHA
= SDRTEXTHORZADJUST_CENTER
; break;
427 case RP_MM
: eTVA
= SDRTEXTVERTADJUST_CENTER
;
428 eTHA
= SDRTEXTHORZADJUST_CENTER
; break;
429 case RP_MB
: eTVA
= SDRTEXTVERTADJUST_BOTTOM
;
430 eTHA
= SDRTEXTHORZADJUST_CENTER
; break;
431 case RP_RT
: eTVA
= SDRTEXTVERTADJUST_TOP
;
432 eTHA
= SDRTEXTHORZADJUST_RIGHT
; break;
433 case RP_RM
: eTVA
= SDRTEXTVERTADJUST_CENTER
;
434 eTHA
= SDRTEXTHORZADJUST_RIGHT
; break;
435 case RP_RB
: eTVA
= SDRTEXTVERTADJUST_BOTTOM
;
436 eTHA
= SDRTEXTHORZADJUST_RIGHT
; break;
439 // #103516# Do not change values if adjust controls were disabled.
440 sal_Bool
bIsDisabled(aCtlPosition
.IsCompletelyDisabled());
444 if( aTsbFullWidth
.GetState() == STATE_CHECK
)
446 if (IsTextDirectionLeftToRight())
447 eTHA
= SDRTEXTHORZADJUST_BLOCK
;
449 eTVA
= SDRTEXTVERTADJUST_BLOCK
;
452 if ( rOutAttrs
.GetItemState( SDRATTR_TEXT_VERTADJUST
) != SFX_ITEM_DONTCARE
)
454 eOldTVA
= (SdrTextVertAdjust
)
455 ( ( const SdrTextVertAdjustItem
& )rOutAttrs
.Get( SDRATTR_TEXT_VERTADJUST
) ).GetValue();
456 if( eOldTVA
!= eTVA
)
457 rAttrs
.Put( SdrTextVertAdjustItem( eTVA
) );
460 rAttrs
.Put( SdrTextVertAdjustItem( eTVA
) );
462 if ( rOutAttrs
.GetItemState( SDRATTR_TEXT_HORZADJUST
) != SFX_ITEM_DONTCARE
)
464 eOldTHA
= (SdrTextHorzAdjust
)
465 ( ( const SdrTextHorzAdjustItem
& )rOutAttrs
.Get( SDRATTR_TEXT_HORZADJUST
) ).GetValue();
466 if( eOldTHA
!= eTHA
)
467 rAttrs
.Put( SdrTextHorzAdjustItem( eTHA
) );
470 rAttrs
.Put( SdrTextHorzAdjustItem( eTHA
) );
476 void SvxTextAttrPage::Construct()
478 DBG_ASSERT( pView
, "Keine gueltige View Uebergeben!" );
480 bFitToSizeEnabled
= bContourEnabled
= sal_True
;
481 bWordWrapTextEnabled
= bAutoGrowSizeEnabled
= bAutoGrowWidthEnabled
= bAutoGrowHeightEnabled
= sal_False
;
483 const SdrMarkList
& rMarkList
= pView
->GetMarkedObjectList();
484 if( rMarkList
.GetMarkCount() == 1 )
486 const SdrObject
* pObj
= rMarkList
.GetMark( 0 )->GetMarkedSdrObj();
487 SdrObjKind eKind
= (SdrObjKind
) pObj
->GetObjIdentifier();
488 if( pObj
->GetObjInventor() == SdrInventor
)
494 case OBJ_OUTLINETEXT
:
497 if ( ((SdrTextObj
*)pObj
)->HasText() )
499 // contour NOT possible for pure text objects
500 bContourEnabled
= sal_False
;
502 // adjusting width and height is ONLY possible for pure text objects
503 bAutoGrowWidthEnabled
= bAutoGrowHeightEnabled
= sal_True
;
507 case OBJ_CUSTOMSHAPE
:
509 bFitToSizeEnabled
= bContourEnabled
= sal_False
;
510 bAutoGrowSizeEnabled
= sal_True
;
511 bWordWrapTextEnabled
= sal_True
;
514 default: ;//prevent warning
518 aTsbAutoGrowHeight
.Enable( bAutoGrowHeightEnabled
);
519 aTsbAutoGrowWidth
.Enable( bAutoGrowWidthEnabled
);
520 aTsbFitToSize
.Enable( bFitToSizeEnabled
);
521 aTsbContour
.Enable( bContourEnabled
);
522 aTsbAutoGrowSize
.Enable( bAutoGrowSizeEnabled
);
523 aTsbWordWrapText
.Enable( bWordWrapTextEnabled
);
526 /*************************************************************************
530 \************************************************************************/
532 SfxTabPage
* SvxTextAttrPage::Create( Window
* pWindow
,
533 const SfxItemSet
& rAttrs
)
535 return( new SvxTextAttrPage( pWindow
, rAttrs
) );
538 sal_uInt16
* SvxTextAttrPage::GetRanges()
543 /** Check whether we have to uncheck the "Full width" check box.
545 void SvxTextAttrPage::PointChanged( Window
*, RECT_POINT eRP
)
547 if (aTsbFullWidth
.GetState() == STATE_CHECK
)
549 // Depending on write direction and currently checked anchor we have
550 // to uncheck the "full width" button.
551 if (IsTextDirectionLeftToRight())
560 aTsbFullWidth
.SetState( STATE_NOCHECK
);
562 default: ;//prevent warning
573 aTsbFullWidth
.SetState( STATE_NOCHECK
);
575 default: ;//prevent warning
580 /*************************************************************************
582 |* possibly changes the position of the position-control
584 \************************************************************************/
586 /** When switching the "full width" check button on the text anchor may have
587 to be moved to a valid and adjacent position. This position depends on
588 the current anchor position and the text writing direction.
590 IMPL_LINK_NOARG(SvxTextAttrPage
, ClickFullWidthHdl_Impl
)
592 if( aTsbFullWidth
.GetState() == STATE_CHECK
)
594 if (IsTextDirectionLeftToRight())
596 // Move text anchor to horizontal middle axis.
597 switch( aCtlPosition
.GetActualRP() )
601 aCtlPosition
.SetActualRP( RP_MT
);
606 aCtlPosition
.SetActualRP( RP_MM
);
611 aCtlPosition
.SetActualRP( RP_MB
);
613 default: ;//prevent warning
618 // Move text anchor to vertical middle axis.
619 switch( aCtlPosition
.GetActualRP() )
623 aCtlPosition
.SetActualRP( RP_LM
);
628 aCtlPosition
.SetActualRP( RP_MM
);
633 aCtlPosition
.SetActualRP( RP_RM
);
635 default: ;//prevent warning
642 /*************************************************************************
644 |* enables/disables "size at text" or "adjust to frame"
646 \************************************************************************/
648 IMPL_LINK_NOARG(SvxTextAttrPage
, ClickHdl_Impl
)
650 sal_Bool bAutoGrowWidth
= aTsbAutoGrowWidth
.GetState() == STATE_CHECK
;
651 sal_Bool bAutoGrowHeight
= aTsbAutoGrowHeight
.GetState() == STATE_CHECK
;
652 sal_Bool bFitToSize
= aTsbFitToSize
.GetState() == STATE_CHECK
;
653 sal_Bool bContour
= aTsbContour
.GetState() == STATE_CHECK
;
655 aTsbContour
.Enable( !bFitToSize
&&
656 !( ( bAutoGrowWidth
&& bAutoGrowWidthEnabled
) || ( bAutoGrowHeight
&& bAutoGrowHeightEnabled
) ) &&
659 aTsbAutoGrowWidth
.Enable( !bFitToSize
&&
660 !( bContour
&& bContourEnabled
) &&
661 bAutoGrowWidthEnabled
);
663 aTsbAutoGrowHeight
.Enable( !bFitToSize
&&
664 !( bContour
&& bContourEnabled
) &&
665 bAutoGrowHeightEnabled
);
667 aTsbFitToSize
.Enable( !( ( bAutoGrowWidth
&& bAutoGrowWidthEnabled
) || ( bAutoGrowHeight
&& bAutoGrowHeightEnabled
) ) &&
668 !( bContour
&& bContourEnabled
) &&
671 // #101901# enable/disable metric fields and decorations dependent of contour
672 aMtrFldLeft
.Enable(!bContour
);
673 aMtrFldRight
.Enable(!bContour
);
674 aMtrFldTop
.Enable(!bContour
);
675 aMtrFldBottom
.Enable(!bContour
);
676 aFlDistance
.Enable(!bContour
);
677 aFtLeft
.Enable(!bContour
);
678 aFtRight
.Enable(!bContour
);
679 aFtTop
.Enable(!bContour
);
680 aFtBottom
.Enable(!bContour
);
682 if( bContour
&& bContourEnabled
)
684 aMtrFldLeft
.SetValue( 0 );
685 aMtrFldRight
.SetValue( 0 );
686 aMtrFldTop
.SetValue( 0 );
687 aMtrFldBottom
.SetValue( 0 );
690 // #103516# Do the setup based on states of hor/ver adjust
691 SfxItemState eVState
= rOutAttrs
.GetItemState( SDRATTR_TEXT_VERTADJUST
);
692 SfxItemState eHState
= rOutAttrs
.GetItemState( SDRATTR_TEXT_HORZADJUST
);
693 sal_Bool
bHorAndVer(SFX_ITEM_DONTCARE
== eVState
|| SFX_ITEM_DONTCARE
== eHState
);
695 // #83698# enable/disable text anchoring dependent of contour
696 aCtlPosition
.Enable(!bContour
&& !bHorAndVer
);
697 aTsbFullWidth
.Enable(!bContour
&& !bHorAndVer
);
698 aFlPosition
.Enable(!bContour
&& !bHorAndVer
);
704 bool SvxTextAttrPage::IsTextDirectionLeftToRight (void) const
706 // Determine the text writing direction with left to right as default.
707 bool bLeftToRightDirection
= true;
708 SfxItemState eState
= rOutAttrs
.GetItemState(SDRATTR_TEXTDIRECTION
);
710 if(SFX_ITEM_DONTCARE
!= eState
)
712 const SvxWritingModeItem
& rItem
= static_cast<const SvxWritingModeItem
&> (
713 rOutAttrs
.Get (SDRATTR_TEXTDIRECTION
));
714 if (rItem
.GetValue() == com::sun::star::text::WritingMode_TB_RL
)
715 bLeftToRightDirection
= false;
717 return bLeftToRightDirection
;
720 void SvxTextAttrPage::PageCreated(SfxAllItemSet aSet
)
722 SFX_ITEMSET_ARG (&aSet
,pViewItem
,OfaPtrItem
,SID_SVXTEXTATTRPAGE_VIEW
,sal_False
);
725 SetView( static_cast<SdrView
*>(pViewItem
->GetValue()));
730 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */