| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_cui.hxx" |
| |
| // include --------------------------------------------------------------- |
| #include <sfx2/app.hxx> |
| #include <sfx2/module.hxx> |
| #include <tools/shl.hxx> |
| #include <cuires.hrc> |
| #include <svx/svddef.hxx> |
| #include <svx/sdtditm.hxx> |
| #include <svx/sdtagitm.hxx> |
| #include <svx/sdtaitm.hxx> |
| #include <svx/sdtfsitm.hxx> |
| #include <svx/sdtcfitm.hxx> |
| #include <svx/svdobj.hxx> |
| #include <svx/svdmark.hxx> |
| #include <svx/svdview.hxx> |
| #include <svx/svdotext.hxx> |
| #include <svx/dialogs.hrc> |
| |
| #ifndef _SVX_TEXTATTR_CXX |
| #define _SVX_TEXTATTR_CXX |
| #endif |
| #include "textattr.hxx" |
| #include "textattr.hrc" |
| #include <dialmgr.hxx> |
| #include "svx/dlgutil.hxx" |
| #include <sfx2/request.hxx> //add CHINA001 |
| #include <svx/ofaitem.hxx> //add CHINA001 |
| #include <editeng/writingmodeitem.hxx> |
| |
| static sal_uInt16 pRanges[] = |
| { |
| SDRATTR_MISC_FIRST, SDRATTR_TEXT_HORZADJUST, |
| SDRATTR_TEXT_WORDWRAP, SDRATTR_TEXT_AUTOGROWSIZE, |
| 0 |
| }; |
| |
| /************************************************************************* |
| |* |
| |* Dialog zum Kopieren von Objekten |
| |* |
| \************************************************************************/ |
| |
| //CHINA001 SvxTextAttrDialog::SvxTextAttrDialog( Window* pParent, const SfxItemSet& rInAttrs, |
| //CHINA001 const SdrView* pSdrView ) : |
| //CHINA001 SfxSingleTabDialog( pParent, rInAttrs, RID_SVXPAGE_TEXTATTR ) |
| //CHINA001 { |
| //CHINA001 SvxTextAttrPage* pPage = new SvxTextAttrPage( this, rInAttrs ); |
| //CHINA001 |
| //CHINA001 pPage->SetView( pSdrView ); |
| //CHINA001 pPage->Construct(); |
| //CHINA001 |
| //CHINA001 SetTabPage( pPage ); |
| //CHINA001 SetText( pPage->GetText() ); |
| //CHINA001 } |
| //CHINA001 |
| /************************************************************************* |
| |* |
| |* Dtor |
| |* |
| \************************************************************************/ |
| |
| //CHINA001 SvxTextAttrDialog::~SvxTextAttrDialog() |
| //CHINA001 { |
| //CHINA001 } |
| |
| /************************************************************************* |
| |* |
| |* Dialog (Seite) zum Kopieren von Objekten |
| |* |
| \************************************************************************/ |
| |
| SvxTextAttrPage::SvxTextAttrPage( Window* pWindow, const SfxItemSet& rInAttrs ) : |
| SvxTabPage ( pWindow, CUI_RES( RID_SVXPAGE_TEXTATTR ), |
| rInAttrs ), |
| |
| aFlText ( this, CUI_RES( FL_TEXT ) ), |
| aTsbAutoGrowWidth ( this, CUI_RES( TSB_AUTOGROW_WIDTH ) ), |
| aTsbAutoGrowHeight ( this, CUI_RES( TSB_AUTOGROW_HEIGHT ) ), |
| aTsbFitToSize ( this, CUI_RES( TSB_FIT_TO_SIZE ) ), |
| aTsbContour ( this, CUI_RES( TSB_CONTOUR ) ), |
| aTsbWordWrapText( this, CUI_RES( TSB_WORDWRAP_TEXT ) ), |
| aTsbAutoGrowSize( this, CUI_RES( TSB_AUTOGROW_SIZE ) ), |
| aFlDistance ( this, CUI_RES( FL_DISTANCE ) ), |
| aFtLeft ( this, CUI_RES( FT_LEFT ) ), |
| aMtrFldLeft ( this, CUI_RES( MTR_FLD_LEFT ) ), |
| aFtRight ( this, CUI_RES( FT_RIGHT ) ), |
| aMtrFldRight ( this, CUI_RES( MTR_FLD_RIGHT ) ), |
| aFtTop ( this, CUI_RES( FT_TOP ) ), |
| aMtrFldTop ( this, CUI_RES( MTR_FLD_TOP ) ), |
| aFtBottom ( this, CUI_RES( FT_BOTTOM ) ), |
| aMtrFldBottom ( this, CUI_RES( MTR_FLD_BOTTOM ) ), |
| |
| aFlSeparator ( this, CUI_RES( FL_SEPARATOR ) ), |
| |
| aFlPosition ( this, CUI_RES( FL_POSITION ) ), |
| aCtlPosition ( this, CUI_RES( CTL_POSITION ), |
| RP_MM, 240, 100 ), |
| aTsbFullWidth ( this, CUI_RES( TSB_FULL_WIDTH ) ), |
| |
| rOutAttrs ( rInAttrs ) |
| { |
| FreeResource(); |
| |
| FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs ); |
| SetFieldUnit( aMtrFldLeft, eFUnit ); |
| SetFieldUnit( aMtrFldRight, eFUnit ); |
| SetFieldUnit( aMtrFldTop, eFUnit ); |
| SetFieldUnit( aMtrFldBottom, eFUnit ); |
| |
| Link aLink( LINK( this, SvxTextAttrPage, ClickHdl_Impl ) ); |
| aTsbAutoGrowWidth.SetClickHdl( aLink ); |
| aTsbAutoGrowHeight.SetClickHdl( aLink ); |
| aTsbFitToSize.SetClickHdl( aLink ); |
| aTsbContour.SetClickHdl( aLink ); |
| |
| aTsbFullWidth.SetClickHdl( |
| LINK( this, SvxTextAttrPage, ClickFullWidthHdl_Impl ) ); |
| |
| aCtlPosition.SetAccessibleRelationMemberOf( &aFlPosition ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Dtor |
| |* |
| \************************************************************************/ |
| |
| SvxTextAttrPage::~SvxTextAttrPage() |
| { |
| } |
| |
| /************************************************************************* |
| |* |
| |* Liest uebergebenen Item-Set |
| |* |
| \************************************************************************/ |
| |
| void __EXPORT SvxTextAttrPage::Reset( const SfxItemSet& rAttrs ) |
| { |
| SfxItemPool* pPool = rAttrs.GetPool(); |
| DBG_ASSERT( pPool, "Wo ist der Pool" ); |
| SfxMapUnit eUnit = pPool->GetMetric( SDRATTR_TEXT_LEFTDIST ); |
| |
| // Linker Abstand vom Rahmen |
| const SfxPoolItem* pItem = GetItem( rAttrs, SDRATTR_TEXT_LEFTDIST ); |
| |
| if( !pItem ) |
| pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_LEFTDIST ); |
| if( pItem ) |
| { |
| long nValue = ( ( const SdrTextLeftDistItem* )pItem )->GetValue(); |
| SetMetricValue( aMtrFldLeft, nValue, eUnit ); |
| } |
| else |
| aMtrFldLeft.SetText( String() ); |
| aMtrFldLeft.SaveValue(); |
| |
| // Rechter Abstand vom Rahmen |
| pItem = GetItem( rAttrs, SDRATTR_TEXT_RIGHTDIST ); |
| if( !pItem ) |
| pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_RIGHTDIST ); |
| if( pItem ) |
| { |
| long nValue = ( ( const SdrTextRightDistItem* )pItem )->GetValue(); |
| SetMetricValue( aMtrFldRight, nValue, eUnit ); |
| } |
| else |
| aMtrFldRight.SetText( String() ); |
| aMtrFldRight.SaveValue(); |
| |
| // Oberer Abstand vom Rahmen |
| pItem = GetItem( rAttrs, SDRATTR_TEXT_UPPERDIST ); |
| if( !pItem ) |
| pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_UPPERDIST ); |
| if( pItem ) |
| { |
| long nValue = ( ( const SdrTextUpperDistItem* )pItem )->GetValue(); |
| SetMetricValue( aMtrFldTop, nValue, eUnit ); |
| } |
| else |
| aMtrFldTop.SetText( String() ); |
| aMtrFldTop.SaveValue(); |
| |
| // Unterer Abstand vom Rahmen |
| pItem = GetItem( rAttrs, SDRATTR_TEXT_LOWERDIST ); |
| if( !pItem ) |
| pItem = &pPool->GetDefaultItem( SDRATTR_TEXT_LOWERDIST ); |
| if( pItem ) |
| { |
| long nValue = ( ( const SdrTextLowerDistItem* )pItem )->GetValue(); |
| SetMetricValue( aMtrFldBottom, nValue, eUnit ); |
| } |
| else |
| aMtrFldBottom.SetText( String() ); |
| aMtrFldBottom.SaveValue(); |
| |
| // An Hoehe anpassen |
| if ( rAttrs.GetItemState( SDRATTR_TEXT_AUTOGROWHEIGHT ) != SFX_ITEM_DONTCARE ) |
| { |
| aTsbAutoGrowHeight.SetState( ( ( const SdrTextAutoGrowHeightItem& )rAttrs.Get( SDRATTR_TEXT_AUTOGROWHEIGHT ) ). |
| GetValue() ? STATE_CHECK : STATE_NOCHECK ); |
| aTsbAutoGrowHeight.EnableTriState( sal_False ); |
| } |
| else |
| aTsbAutoGrowHeight.SetState( STATE_DONTKNOW ); |
| aTsbAutoGrowHeight.SaveValue(); |
| |
| // An Breite anpassen |
| if ( rAttrs.GetItemState( SDRATTR_TEXT_AUTOGROWWIDTH ) != SFX_ITEM_DONTCARE ) |
| { |
| aTsbAutoGrowWidth.SetState( ( ( const SdrTextAutoGrowWidthItem& )rAttrs.Get( SDRATTR_TEXT_AUTOGROWWIDTH ) ). |
| GetValue() ? STATE_CHECK : STATE_NOCHECK ); |
| aTsbAutoGrowWidth.EnableTriState( sal_False ); |
| } |
| else |
| aTsbAutoGrowWidth.SetState( STATE_DONTKNOW ); |
| aTsbAutoGrowWidth.SaveValue(); |
| |
| // autogrowsize |
| if ( rAttrs.GetItemState( SDRATTR_TEXT_AUTOGROWSIZE ) != SFX_ITEM_DONTCARE ) |
| { |
| aTsbAutoGrowSize.SetState( ( ( const SdrTextAutoGrowHeightItem& )rAttrs.Get( SDRATTR_TEXT_AUTOGROWHEIGHT ) ). |
| GetValue() ? STATE_CHECK : STATE_NOCHECK ); |
| aTsbAutoGrowSize.EnableTriState( sal_False ); |
| } |
| else |
| aTsbAutoGrowSize.SetState( STATE_DONTKNOW ); |
| aTsbAutoGrowSize.SaveValue(); |
| |
| // wordwrap text |
| if ( rAttrs.GetItemState( SDRATTR_TEXT_WORDWRAP ) != SFX_ITEM_DONTCARE ) |
| { |
| aTsbWordWrapText.SetState( ( ( const SdrTextWordWrapItem& )rAttrs.Get( SDRATTR_TEXT_WORDWRAP ) ). |
| GetValue() ? STATE_CHECK : STATE_NOCHECK ); |
| aTsbWordWrapText.EnableTriState( sal_False ); |
| } |
| else |
| aTsbWordWrapText.SetState( STATE_DONTKNOW ); |
| aTsbWordWrapText.SaveValue(); |
| |
| |
| // #103516# Do the setup based on states of hor/ver adjust |
| // Setup center field and FullWidth |
| SfxItemState eVState = rAttrs.GetItemState( SDRATTR_TEXT_VERTADJUST ); |
| SfxItemState eHState = rAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST ); |
| |
| if(SFX_ITEM_DONTCARE != eVState && SFX_ITEM_DONTCARE != eHState) |
| { |
| // VertAdjust and HorAdjust are unequivocal, thus |
| SdrTextVertAdjust eTVA = (SdrTextVertAdjust)((const SdrTextVertAdjustItem&)rAttrs.Get(SDRATTR_TEXT_VERTADJUST)).GetValue(); |
| SdrTextHorzAdjust eTHA = (SdrTextHorzAdjust)((const SdrTextHorzAdjustItem&)rAttrs.Get(SDRATTR_TEXT_HORZADJUST)).GetValue(); |
| RECT_POINT eRP = RP_LB; |
| |
| aTsbFullWidth.EnableTriState( sal_False ); |
| |
| // Translate item values into local anchor position. |
| switch (eTVA) |
| { |
| case SDRTEXTVERTADJUST_TOP: |
| { |
| switch (eTHA) |
| { |
| case SDRTEXTHORZADJUST_LEFT: eRP = RP_LT; break; |
| case SDRTEXTHORZADJUST_BLOCK: |
| case SDRTEXTHORZADJUST_CENTER: eRP = RP_MT; break; |
| case SDRTEXTHORZADJUST_RIGHT: eRP = RP_RT; break; |
| } |
| break; |
| } |
| case SDRTEXTVERTADJUST_BLOCK: |
| case SDRTEXTVERTADJUST_CENTER: |
| { |
| switch (eTHA) |
| { |
| case SDRTEXTHORZADJUST_LEFT: eRP = RP_LM; break; |
| case SDRTEXTHORZADJUST_BLOCK: |
| case SDRTEXTHORZADJUST_CENTER: eRP = RP_MM; break; |
| case SDRTEXTHORZADJUST_RIGHT: eRP = RP_RM; break; |
| } |
| break; |
| } |
| case SDRTEXTVERTADJUST_BOTTOM: |
| { |
| switch (eTHA) |
| { |
| case SDRTEXTHORZADJUST_LEFT: eRP = RP_LB; break; |
| case SDRTEXTHORZADJUST_BLOCK: |
| case SDRTEXTHORZADJUST_CENTER: eRP = RP_MB; break; |
| case SDRTEXTHORZADJUST_RIGHT: eRP = RP_RB; break; |
| } |
| break; |
| } |
| default: |
| break; |
| } |
| |
| // See if we have to check the "full width" check button. |
| sal_Bool bLeftToRight(IsTextDirectionLeftToRight()); |
| |
| if((bLeftToRight && (SDRTEXTHORZADJUST_BLOCK == eTHA)) || (!bLeftToRight && (SDRTEXTVERTADJUST_BLOCK == eTVA))) |
| { |
| // Move anchor to valid position. |
| ClickFullWidthHdl_Impl(NULL); |
| aTsbFullWidth.SetState(STATE_CHECK); |
| } |
| |
| aCtlPosition.SetActualRP( eRP ); |
| } |
| else |
| { |
| // VertAdjust or HorAdjust is not unequivocal |
| aCtlPosition.Reset(); |
| |
| aCtlPosition.SetState(STATE_DONTKNOW); |
| aCtlPosition.DoCompletelyDisable(sal_True); |
| |
| aTsbFullWidth.SetState(STATE_DONTKNOW); |
| aTsbFullWidth.Enable( sal_False ); |
| aFlPosition.Enable( sal_False ); |
| } |
| |
| // Am Rahmen anpassen |
| if ( rAttrs.GetItemState( SDRATTR_TEXT_FITTOSIZE ) != SFX_ITEM_DONTCARE ) |
| { |
| SdrFitToSizeType eFTS = (SdrFitToSizeType) |
| ( ( const SdrTextFitToSizeTypeItem& )rAttrs.Get( SDRATTR_TEXT_FITTOSIZE ) ).GetValue(); |
| aTsbFitToSize.SetState( eFTS == SDRTEXTFIT_NONE ? STATE_NOCHECK : STATE_CHECK ); |
| aTsbFitToSize.EnableTriState( sal_False ); |
| } |
| else |
| aTsbFitToSize.SetState( STATE_DONTKNOW ); |
| aTsbFitToSize.SaveValue(); |
| |
| // Konturfluss |
| if( rAttrs.GetItemState( SDRATTR_TEXT_CONTOURFRAME ) != SFX_ITEM_DONTCARE ) |
| { |
| sal_Bool bContour = ( ( const SdrTextContourFrameItem& )rAttrs.Get( SDRATTR_TEXT_CONTOURFRAME ) ).GetValue(); |
| aTsbContour.SetState( bContour ? STATE_CHECK : STATE_NOCHECK ); |
| aTsbContour.EnableTriState( sal_False ); |
| } |
| else |
| aTsbContour.SetState( STATE_DONTKNOW ); |
| aTsbContour.SaveValue(); |
| |
| ClickHdl_Impl( NULL ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Fuellt uebergebenen Item-Set mit Dialogbox-Attributen |
| |* |
| \************************************************************************/ |
| |
| sal_Bool SvxTextAttrPage::FillItemSet( SfxItemSet& rAttrs) |
| { |
| SfxItemPool* pPool = rAttrs.GetPool(); |
| DBG_ASSERT( pPool, "Wo ist der Pool" ); |
| SfxMapUnit eUnit = pPool->GetMetric( SDRATTR_TEXT_LEFTDIST ); |
| |
| sal_Int32 nValue; |
| TriState eState; |
| |
| if( aMtrFldLeft.GetText() != aMtrFldLeft.GetSavedValue() ) |
| { |
| nValue = GetCoreValue( aMtrFldLeft, eUnit ); |
| rAttrs.Put( SdrTextLeftDistItem( nValue ) ); |
| } |
| |
| if( aMtrFldRight.GetText() != aMtrFldRight.GetSavedValue() ) |
| { |
| nValue = GetCoreValue( aMtrFldRight, eUnit ); |
| rAttrs.Put( SdrTextRightDistItem( nValue ) ); |
| } |
| |
| if( aMtrFldTop.GetText() != aMtrFldTop.GetSavedValue() ) |
| { |
| nValue = GetCoreValue( aMtrFldTop, eUnit ); |
| rAttrs.Put( SdrTextUpperDistItem( nValue ) ); |
| } |
| |
| if( aMtrFldBottom.GetText() != aMtrFldBottom.GetSavedValue() ) |
| { |
| nValue = GetCoreValue( aMtrFldBottom, eUnit ); |
| rAttrs.Put( SdrTextLowerDistItem( nValue ) ); |
| } |
| |
| eState = aTsbAutoGrowHeight.GetState(); |
| if( eState != aTsbAutoGrowHeight.GetSavedValue() ) |
| { |
| rAttrs.Put( SdrTextAutoGrowHeightItem( (sal_Bool) STATE_CHECK == eState ) ); |
| } |
| |
| eState = aTsbAutoGrowWidth.GetState(); |
| if( eState != aTsbAutoGrowWidth.GetSavedValue() ) |
| { |
| rAttrs.Put( SdrTextAutoGrowWidthItem( (sal_Bool) STATE_CHECK == eState ) ); |
| } |
| |
| eState = aTsbAutoGrowSize.GetState(); |
| if( eState != aTsbAutoGrowSize.GetSavedValue() ) |
| { |
| rAttrs.Put( SdrTextAutoGrowHeightItem( (sal_Bool) STATE_CHECK == eState ) ); |
| } |
| |
| eState = aTsbWordWrapText.GetState(); |
| if( eState != aTsbWordWrapText.GetSavedValue() ) |
| { |
| rAttrs.Put( SdrTextWordWrapItem( (sal_Bool) STATE_CHECK == eState ) ); |
| } |
| |
| // Konturfluss |
| eState = aTsbContour.GetState(); |
| if( eState != aTsbContour.GetSavedValue() ) |
| { |
| rAttrs.Put( SdrTextContourFrameItem( (sal_Bool) STATE_CHECK == eState ) ); |
| } |
| |
| eState = aTsbFitToSize.GetState(); |
| if( eState != aTsbFitToSize.GetSavedValue() ) |
| { |
| SdrFitToSizeType eFTS; |
| switch( eState ) |
| { |
| default: ; //prevent warning |
| DBG_ERROR( "svx::SvxTextAttrPage::FillItemSet(), unhandled state!" ); |
| case STATE_NOCHECK: eFTS = SDRTEXTFIT_NONE; break; |
| //case STATE_CHECK: eFTS = SDRTEXTFIT_RESIZEATTR; break; |
| case STATE_CHECK: eFTS = SDRTEXTFIT_PROPORTIONAL; break; |
| } |
| rAttrs.Put( SdrTextFitToSizeTypeItem( eFTS ) ); |
| } |
| |
| // zentriert |
| RECT_POINT eRP = aCtlPosition.GetActualRP(); |
| SdrTextVertAdjust eTVA, eOldTVA; |
| SdrTextHorzAdjust eTHA, eOldTHA; |
| |
| switch( eRP ) |
| { |
| default: |
| case RP_LT: eTVA = SDRTEXTVERTADJUST_TOP; |
| eTHA = SDRTEXTHORZADJUST_LEFT; break; |
| case RP_LM: eTVA = SDRTEXTVERTADJUST_CENTER; |
| eTHA = SDRTEXTHORZADJUST_LEFT; break; |
| case RP_LB: eTVA = SDRTEXTVERTADJUST_BOTTOM; |
| eTHA = SDRTEXTHORZADJUST_LEFT; break; |
| case RP_MT: eTVA = SDRTEXTVERTADJUST_TOP; |
| eTHA = SDRTEXTHORZADJUST_CENTER; break; |
| case RP_MM: eTVA = SDRTEXTVERTADJUST_CENTER; |
| eTHA = SDRTEXTHORZADJUST_CENTER; break; |
| case RP_MB: eTVA = SDRTEXTVERTADJUST_BOTTOM; |
| eTHA = SDRTEXTHORZADJUST_CENTER; break; |
| case RP_RT: eTVA = SDRTEXTVERTADJUST_TOP; |
| eTHA = SDRTEXTHORZADJUST_RIGHT; break; |
| case RP_RM: eTVA = SDRTEXTVERTADJUST_CENTER; |
| eTHA = SDRTEXTHORZADJUST_RIGHT; break; |
| case RP_RB: eTVA = SDRTEXTVERTADJUST_BOTTOM; |
| eTHA = SDRTEXTHORZADJUST_RIGHT; break; |
| } |
| |
| // #103516# Do not change values if adjust controls were disabled. |
| sal_Bool bIsDisabled(aCtlPosition.IsCompletelyDisabled()); |
| |
| if(!bIsDisabled) |
| { |
| if( aTsbFullWidth.GetState() == STATE_CHECK ) |
| { |
| if (IsTextDirectionLeftToRight()) |
| eTHA = SDRTEXTHORZADJUST_BLOCK; |
| else |
| eTVA = SDRTEXTVERTADJUST_BLOCK; |
| } |
| |
| if ( rOutAttrs.GetItemState( SDRATTR_TEXT_VERTADJUST ) != SFX_ITEM_DONTCARE ) |
| { |
| eOldTVA = (SdrTextVertAdjust) |
| ( ( const SdrTextVertAdjustItem& )rOutAttrs.Get( SDRATTR_TEXT_VERTADJUST ) ).GetValue(); |
| if( eOldTVA != eTVA ) |
| rAttrs.Put( SdrTextVertAdjustItem( eTVA ) ); |
| } |
| else |
| rAttrs.Put( SdrTextVertAdjustItem( eTVA ) ); |
| |
| if ( rOutAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST ) != SFX_ITEM_DONTCARE ) |
| { |
| eOldTHA = (SdrTextHorzAdjust) |
| ( ( const SdrTextHorzAdjustItem& )rOutAttrs.Get( SDRATTR_TEXT_HORZADJUST ) ).GetValue(); |
| if( eOldTHA != eTHA ) |
| rAttrs.Put( SdrTextHorzAdjustItem( eTHA ) ); |
| } |
| else |
| rAttrs.Put( SdrTextHorzAdjustItem( eTHA ) ); |
| } |
| |
| return( sal_True ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* |
| |* |
| \************************************************************************/ |
| |
| void SvxTextAttrPage::Construct() |
| { |
| DBG_ASSERT( pView, "Keine gueltige View Uebergeben!" ); |
| |
| bFitToSizeEnabled = bContourEnabled = sal_True; |
| bWordWrapTextEnabled = bAutoGrowSizeEnabled = bAutoGrowWidthEnabled = bAutoGrowHeightEnabled = sal_False; |
| |
| const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); |
| if( rMarkList.GetMarkCount() == 1 ) |
| { |
| const SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj(); |
| SdrObjKind eKind = (SdrObjKind) pObj->GetObjIdentifier(); |
| if( pObj->GetObjInventor() == SdrInventor ) |
| { |
| switch( eKind ) |
| { |
| case OBJ_TEXT : |
| case OBJ_TITLETEXT : |
| case OBJ_OUTLINETEXT : |
| case OBJ_CAPTION : |
| { |
| if(pObj->HasText()) |
| { |
| // Konturfluss ist NICHT bei reinen Textobjekten m�glich |
| bContourEnabled = sal_False; |
| |
| // Breite und Hoehe anpassen ist NUR bei reinen Textobjekten m�glich |
| bAutoGrowWidthEnabled = bAutoGrowHeightEnabled = sal_True; |
| } |
| } |
| break; |
| case OBJ_CUSTOMSHAPE : |
| { |
| bFitToSizeEnabled = bContourEnabled = sal_False; |
| bAutoGrowSizeEnabled = sal_True; |
| bWordWrapTextEnabled = sal_True; |
| } |
| break; |
| default: ;//prevent warning |
| } |
| } |
| } |
| aTsbAutoGrowHeight.Enable( bAutoGrowHeightEnabled ); |
| aTsbAutoGrowWidth.Enable( bAutoGrowWidthEnabled ); |
| aTsbFitToSize.Enable( bFitToSizeEnabled ); |
| aTsbContour.Enable( bContourEnabled ); |
| aTsbAutoGrowSize.Enable( bAutoGrowSizeEnabled ); |
| aTsbWordWrapText.Enable( bWordWrapTextEnabled ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Erzeugt die Seite |
| |* |
| \************************************************************************/ |
| |
| SfxTabPage* SvxTextAttrPage::Create( Window* pWindow, |
| const SfxItemSet& rAttrs ) |
| { |
| return( new SvxTextAttrPage( pWindow, rAttrs ) ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* |
| |* |
| \************************************************************************/ |
| |
| sal_uInt16* SvxTextAttrPage::GetRanges() |
| { |
| return( pRanges ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* |
| |* |
| \************************************************************************/ |
| |
| /** Check whether we have to uncheck the "Full width" check box. |
| */ |
| void SvxTextAttrPage::PointChanged( Window*, RECT_POINT eRP ) |
| { |
| if (aTsbFullWidth.GetState() == STATE_CHECK) |
| { |
| // Depending on write direction and currently checked anchor we have |
| // to uncheck the "full width" button. |
| if (IsTextDirectionLeftToRight()) |
| switch( eRP ) |
| { |
| case RP_LT: |
| case RP_LM: |
| case RP_LB: |
| case RP_RT: |
| case RP_RM: |
| case RP_RB: |
| aTsbFullWidth.SetState( STATE_NOCHECK ); |
| break; |
| default: ;//prevent warning |
| } |
| else |
| switch (eRP) |
| { |
| case RP_LT: |
| case RP_MT: |
| case RP_RT: |
| case RP_LB: |
| case RP_MB: |
| case RP_RB: |
| aTsbFullWidth.SetState( STATE_NOCHECK ); |
| break; |
| default: ;//prevent warning |
| } |
| } |
| } |
| |
| /************************************************************************* |
| |* |
| |* Aendert evtl. die Position des Positions-Controls |
| |* |
| \************************************************************************/ |
| |
| /** When switching the "full width" check button on the text anchor may have |
| to be moved to a valid and adjacent position. This position depends on |
| the current anchor position and the text writing direction. |
| */ |
| IMPL_LINK( SvxTextAttrPage, ClickFullWidthHdl_Impl, void *, EMPTYARG ) |
| { |
| if( aTsbFullWidth.GetState() == STATE_CHECK ) |
| { |
| if (IsTextDirectionLeftToRight()) |
| { |
| // Move text anchor to horizontal middle axis. |
| switch( aCtlPosition.GetActualRP() ) |
| { |
| case RP_LT: |
| case RP_RT: |
| aCtlPosition.SetActualRP( RP_MT ); |
| break; |
| |
| case RP_LM: |
| case RP_RM: |
| aCtlPosition.SetActualRP( RP_MM ); |
| break; |
| |
| case RP_LB: |
| case RP_RB: |
| aCtlPosition.SetActualRP( RP_MB ); |
| break; |
| default: ;//prevent warning |
| } |
| } |
| else |
| { |
| // Move text anchor to vertical middle axis. |
| switch( aCtlPosition.GetActualRP() ) |
| { |
| case RP_LT: |
| case RP_LB: |
| aCtlPosition.SetActualRP( RP_LM ); |
| break; |
| |
| case RP_MT: |
| case RP_MB: |
| aCtlPosition.SetActualRP( RP_MM ); |
| break; |
| |
| case RP_RT: |
| case RP_RB: |
| aCtlPosition.SetActualRP( RP_RM ); |
| break; |
| default: ;//prevent warning |
| } |
| } |
| } |
| return( 0L ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Enabled/Disabled "Groesse an Text" oder "Am Rahmen Anpassen" |
| |* |
| \************************************************************************/ |
| |
| IMPL_LINK( SvxTextAttrPage, ClickHdl_Impl, void *, EMPTYARG ) |
| { |
| sal_Bool bAutoGrowWidth = aTsbAutoGrowWidth.GetState() == STATE_CHECK; |
| sal_Bool bAutoGrowHeight = aTsbAutoGrowHeight.GetState() == STATE_CHECK; |
| sal_Bool bFitToSize = aTsbFitToSize.GetState() == STATE_CHECK; |
| sal_Bool bContour = aTsbContour.GetState() == STATE_CHECK; |
| |
| aTsbContour.Enable( !bFitToSize && |
| !( ( bAutoGrowWidth && bAutoGrowWidthEnabled ) || ( bAutoGrowHeight && bAutoGrowHeightEnabled ) ) && |
| bContourEnabled ); |
| |
| aTsbAutoGrowWidth.Enable( !bFitToSize && |
| !( bContour && bContourEnabled ) && |
| bAutoGrowWidthEnabled ); |
| |
| aTsbAutoGrowHeight.Enable( !bFitToSize && |
| !( bContour && bContourEnabled ) && |
| bAutoGrowHeightEnabled ); |
| |
| aTsbFitToSize.Enable( !( ( bAutoGrowWidth && bAutoGrowWidthEnabled ) || ( bAutoGrowHeight && bAutoGrowHeightEnabled ) ) && |
| !( bContour && bContourEnabled ) && |
| bFitToSizeEnabled ); |
| |
| // #101901# enable/disable metric fields and decorations dependent of contour |
| aMtrFldLeft.Enable(!bContour); |
| aMtrFldRight.Enable(!bContour); |
| aMtrFldTop.Enable(!bContour); |
| aMtrFldBottom.Enable(!bContour); |
| aFlDistance.Enable(!bContour); |
| aFtLeft.Enable(!bContour); |
| aFtRight.Enable(!bContour); |
| aFtTop.Enable(!bContour); |
| aFtBottom.Enable(!bContour); |
| |
| if( bContour && bContourEnabled ) |
| { |
| aMtrFldLeft.SetValue( 0 ); |
| aMtrFldRight.SetValue( 0 ); |
| aMtrFldTop.SetValue( 0 ); |
| aMtrFldBottom.SetValue( 0 ); |
| } |
| |
| // #103516# Do the setup based on states of hor/ver adjust |
| SfxItemState eVState = rOutAttrs.GetItemState( SDRATTR_TEXT_VERTADJUST ); |
| SfxItemState eHState = rOutAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST ); |
| sal_Bool bHorAndVer(SFX_ITEM_DONTCARE == eVState || SFX_ITEM_DONTCARE == eHState); |
| |
| // #83698# enable/disable text anchoring dependent of contour |
| aCtlPosition.Enable(!bContour && !bHorAndVer); |
| aTsbFullWidth.Enable(!bContour && !bHorAndVer); |
| aFlPosition.Enable(!bContour && !bHorAndVer); |
| |
| return( 0L ); |
| } |
| |
| |
| bool SvxTextAttrPage::IsTextDirectionLeftToRight (void) const |
| { |
| // Determine the text writing direction with left to right as default. |
| bool bLeftToRightDirection = true; |
| SfxItemState eState = rOutAttrs.GetItemState(SDRATTR_TEXTDIRECTION); |
| |
| if(SFX_ITEM_DONTCARE != eState) |
| { |
| const SvxWritingModeItem& rItem = static_cast<const SvxWritingModeItem&> ( |
| rOutAttrs.Get (SDRATTR_TEXTDIRECTION)); |
| if (rItem.GetValue() == com::sun::star::text::WritingMode_TB_RL) |
| bLeftToRightDirection = false; |
| } |
| return bLeftToRightDirection; |
| } |
| |
| //add CHINA001 begin |
| void SvxTextAttrPage::PageCreated(SfxAllItemSet aSet) |
| { |
| SFX_ITEMSET_ARG (&aSet,pViewItem,OfaPtrItem,SID_SVXTEXTATTRPAGE_VIEW,sal_False); |
| |
| if (pViewItem) |
| SetView( static_cast<SdrView *>(pViewItem->GetValue())); |
| |
| Construct(); |
| } |
| |
| //end of CHINA001 |