diff options
Diffstat (limited to 'cui/source/tabpages/measure.cxx')
-rw-r--r-- | cui/source/tabpages/measure.cxx | 877 |
1 files changed, 877 insertions, 0 deletions
diff --git a/cui/source/tabpages/measure.cxx b/cui/source/tabpages/measure.cxx new file mode 100644 index 000000000000..4b00f3289338 --- /dev/null +++ b/cui/source/tabpages/measure.cxx @@ -0,0 +1,877 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: measure.cxx,v $ + * $Revision: 1.18 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 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> + +#define _SVX_MEASURE_CXX + +#include <svx/svdomeas.hxx> +#include <svx/svdattr.hxx> +#include <svx/svdattrx.hxx> +#include <svx/svdview.hxx> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include "svx/measctrl.hxx" +#include "measure.hxx" +#include "measure.hrc" +#include <dialmgr.hxx> +#include "svx/dlgutil.hxx" +#include <svx/strarray.hxx> +#include <sfx2/request.hxx> //add CHINA001 +#include "svx/ofaitem.hxx" //add CHINA001 + +static USHORT pRanges[] = +{ + SDRATTR_MEASURE_FIRST, + SDRATTR_MEASURE_LAST, + 0 +}; + +/************************************************************************* +|* +|* Dialog to change measure-attributes +|* +\************************************************************************/ + +SvxMeasureDialog::SvxMeasureDialog( Window* pParent, const SfxItemSet& rInAttrs, + const SdrView* pSdrView ) : + SfxSingleTabDialog( pParent, rInAttrs, RID_SVXPAGE_MEASURE ) +{ + SvxMeasurePage* _pPage = new SvxMeasurePage( this, rInAttrs ); + + _pPage->SetView( pSdrView ); + _pPage->Construct(); + + SetTabPage( _pPage ); + SetText( _pPage->GetText() ); +} + +/************************************************************************* +|* +|* Dtor +|* +\************************************************************************/ + +SvxMeasureDialog::~SvxMeasureDialog() +{ +} + +/************************************************************************* +|* +|* Tabpage for changing measure-attributes +|* +\************************************************************************/ + +SvxMeasurePage::SvxMeasurePage( Window* pWindow, const SfxItemSet& rInAttrs ) : + SvxTabPage ( pWindow, CUI_RES( RID_SVXPAGE_MEASURE ), + rInAttrs ), + + aFlLine ( this, CUI_RES( FL_LINE ) ), + aFtLineDist ( this, CUI_RES( FT_LINE_DIST ) ), + aMtrFldLineDist ( this, CUI_RES( MTR_LINE_DIST ) ), + aFtHelplineOverhang ( this, CUI_RES( FT_HELPLINE_OVERHANG ) ), + aMtrFldHelplineOverhang ( this, CUI_RES( MTR_FLD_HELPLINE_OVERHANG ) ), + aFtHelplineDist ( this, CUI_RES( FT_HELPLINE_DIST ) ), + aMtrFldHelplineDist ( this, CUI_RES( MTR_FLD_HELPLINE_DIST ) ), + aFtHelpline1Len ( this, CUI_RES( FT_HELPLINE1_LEN ) ), + aMtrFldHelpline1Len ( this, CUI_RES( MTR_FLD_HELPLINE1_LEN ) ), + aFtHelpline2Len ( this, CUI_RES( FT_HELPLINE2_LEN ) ), + aMtrFldHelpline2Len ( this, CUI_RES( MTR_FLD_HELPLINE2_LEN ) ), + aTsbBelowRefEdge ( this, CUI_RES( TSB_BELOW_REF_EDGE ) ), + aFtDecimalPlaces ( this, CUI_RES( FT_DECIMALPLACES ) ), + aMtrFldDecimalPlaces ( this, CUI_RES( MTR_FLD_DECIMALPLACES ) ), + + aFlLabel ( this, CUI_RES( FL_LABEL ) ), + aFtPosition ( this, CUI_RES( FT_POSITION ) ), + aCtlPosition ( this, CUI_RES( CTL_POSITION ) ), + aTsbAutoPosV ( this, CUI_RES( TSB_AUTOPOSV ) ), + aTsbAutoPosH ( this, CUI_RES( TSB_AUTOPOSH ) ), + aTsbShowUnit ( this, CUI_RES( TSB_SHOW_UNIT ) ), + aLbUnit ( this, CUI_RES( LB_UNIT ) ), + aTsbParallel ( this, CUI_RES( TSB_PARALLEL ) ), + aCtlPreview ( this, CUI_RES( CTL_PREVIEW ), rInAttrs ), + + aFlVert ( this, CUI_RES( FL_VERT ) ), + rOutAttrs ( rInAttrs ), + aAttrSet ( *rInAttrs.GetPool() ), + pView( 0 ), + + bPositionModified ( FALSE ) +{ + FillUnitLB(); + + FreeResource(); + + const FieldUnit eFUnit = GetModuleFieldUnit( &rInAttrs ); + SetFieldUnit( aMtrFldLineDist, eFUnit ); + SetFieldUnit( aMtrFldHelplineOverhang, eFUnit ); + SetFieldUnit( aMtrFldHelplineDist, eFUnit ); + SetFieldUnit( aMtrFldHelpline1Len, eFUnit ); + SetFieldUnit( aMtrFldHelpline2Len, eFUnit ); + if( eFUnit == FUNIT_MM ) + { + aMtrFldLineDist.SetSpinSize( 50 ); + aMtrFldHelplineOverhang.SetSpinSize( 50 ); + aMtrFldHelplineDist.SetSpinSize( 50 ); + aMtrFldHelpline1Len.SetSpinSize( 50 ); + aMtrFldHelpline2Len.SetSpinSize( 50 ); + } + + aTsbAutoPosV.SetClickHdl( LINK( this, SvxMeasurePage, ClickAutoPosHdl_Impl ) ); + aTsbAutoPosH.SetClickHdl( LINK( this, SvxMeasurePage, ClickAutoPosHdl_Impl ) ); + + // set background and border of iconchoicectrl + const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings(); + aCtlPreview.SetBackground ( rStyles.GetWindowColor() ); + aCtlPreview.SetBorderStyle(WINDOW_BORDER_MONO); + + Link aLink( LINK( this, SvxMeasurePage, ChangeAttrHdl_Impl ) ); + aMtrFldLineDist.SetModifyHdl( aLink ); + aMtrFldHelplineOverhang.SetModifyHdl( aLink ); + aMtrFldHelplineDist.SetModifyHdl( aLink ); + aMtrFldHelpline1Len.SetModifyHdl( aLink ); + aMtrFldHelpline2Len.SetModifyHdl( aLink ); + aMtrFldDecimalPlaces.SetModifyHdl( aLink ); + aTsbBelowRefEdge.SetClickHdl( aLink ); + aTsbParallel.SetClickHdl( aLink ); + aTsbShowUnit.SetClickHdl( aLink ); + aLbUnit.SetSelectHdl( aLink ); +} + +/************************************************************************* +|* +|* Dtor +|* +\************************************************************************/ + +SvxMeasurePage::~SvxMeasurePage() +{ +} + +/************************************************************************* +|* +|* read the delivered Item-Set +|* +\************************************************************************/ + +void __EXPORT SvxMeasurePage::Reset( const SfxItemSet& rAttrs ) +{ + SfxItemPool* pPool = rAttrs.GetPool(); + DBG_ASSERT( pPool, "Wo ist der Pool" ); + eUnit = pPool->GetMetric( SDRATTR_MEASURELINEDIST ); + + const SfxPoolItem* pItem = GetItem( rAttrs, SDRATTR_MEASURELINEDIST ); + + // SdrMeasureLineDistItem + if( pItem == NULL ) + pItem = &pPool->GetDefaultItem( SDRATTR_MEASURELINEDIST ); + if( pItem ) + { + long nValue = ( ( const SdrMeasureLineDistItem* )pItem )->GetValue(); + SetMetricValue( aMtrFldLineDist, nValue, eUnit ); + } + else + { + aMtrFldLineDist.SetText( String() ); + } + aMtrFldLineDist.SaveValue(); + + // SdrMeasureHelplineOverhangItem + pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINEOVERHANG ); + if( pItem == NULL ) + pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINEOVERHANG ); + if( pItem ) + { + long nValue = ( ( const SdrMeasureHelplineOverhangItem* )pItem )->GetValue(); + SetMetricValue( aMtrFldHelplineOverhang, nValue, eUnit ); + } + else + { + aMtrFldHelplineOverhang.SetText( String() ); + } + aMtrFldHelplineOverhang.SaveValue(); + + // SdrMeasureHelplineDistItem + pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINEDIST ); + if( pItem == NULL ) + pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINEDIST ); + if( pItem ) + { + long nValue = ( ( const SdrMeasureHelplineDistItem* )pItem )->GetValue(); + SetMetricValue( aMtrFldHelplineDist, nValue, eUnit ); + } + else + { + aMtrFldHelplineDist.SetText( String() ); + } + aMtrFldHelplineDist.SaveValue(); + + // SdrMeasureHelpline1LenItem + pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINE1LEN ); + if( pItem == NULL ) + pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINE1LEN ); + if( pItem ) + { + long nValue = ( ( const SdrMeasureHelpline1LenItem* )pItem )->GetValue(); + SetMetricValue( aMtrFldHelpline1Len, nValue, eUnit ); + } + else + { + aMtrFldHelpline1Len.SetText( String() ); + } + aMtrFldHelpline1Len.SaveValue(); + + // SdrMeasureHelpline2LenItem + pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINE2LEN ); + if( pItem == NULL ) + pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINE2LEN ); + if( pItem ) + { + long nValue = ( ( const SdrMeasureHelpline2LenItem* )pItem )->GetValue(); + SetMetricValue( aMtrFldHelpline2Len, nValue, eUnit ); + } + else + { + aMtrFldHelpline2Len.SetText( String() ); + } + aMtrFldHelpline2Len.SaveValue(); + + // SdrMeasureBelowRefEdgeItem + if( rAttrs.GetItemState( SDRATTR_MEASUREBELOWREFEDGE ) != SFX_ITEM_DONTCARE ) + { + aTsbBelowRefEdge.SetState( ( ( const SdrMeasureBelowRefEdgeItem& )rAttrs.Get( SDRATTR_MEASUREBELOWREFEDGE ) ). + GetValue() ? STATE_CHECK : STATE_NOCHECK ); + aTsbBelowRefEdge.EnableTriState( FALSE ); + } + else + { + aTsbBelowRefEdge.SetState( STATE_DONTKNOW ); + } + aTsbBelowRefEdge.SaveValue(); + + // SdrMeasureDecimalPlacesItem + pItem = GetItem( rAttrs, SDRATTR_MEASUREDECIMALPLACES ); + if( pItem == NULL ) + pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREDECIMALPLACES ); + if( pItem ) + { + INT16 nValue = ( ( const SdrMeasureDecimalPlacesItem* )pItem )->GetValue(); + aMtrFldDecimalPlaces.SetValue( nValue ); + } + else + { + aMtrFldDecimalPlaces.SetText( String() ); + } + aMtrFldDecimalPlaces.SaveValue(); + + // SdrMeasureTextRota90Item + // Attention: negate ! + if( rAttrs.GetItemState( SDRATTR_MEASURETEXTROTA90 ) != SFX_ITEM_DONTCARE ) + { + aTsbParallel.SetState( ( ( const SdrMeasureTextRota90Item& )rAttrs.Get( SDRATTR_MEASURETEXTROTA90 ) ). + GetValue() ? STATE_NOCHECK : STATE_CHECK ); + aTsbParallel.EnableTriState( FALSE ); + } + else + { + aTsbParallel.SetState( STATE_DONTKNOW ); + } + aTsbParallel.SaveValue(); + + // SdrMeasureShowUnitItem + if( rAttrs.GetItemState( SDRATTR_MEASURESHOWUNIT ) != SFX_ITEM_DONTCARE ) + { + aTsbShowUnit.SetState( ( ( const SdrMeasureShowUnitItem& )rAttrs.Get( SDRATTR_MEASURESHOWUNIT ) ). + GetValue() ? STATE_CHECK : STATE_NOCHECK ); + aTsbShowUnit.EnableTriState( FALSE ); + } + else + { + aTsbShowUnit.SetState( STATE_DONTKNOW ); + } + aTsbShowUnit.SaveValue(); + + // SdrMeasureUnitItem + if( rAttrs.GetItemState( SDRATTR_MEASUREUNIT ) != SFX_ITEM_DONTCARE ) + { + long nFieldUnit = (long) ( ( const SdrMeasureUnitItem& )rAttrs. + Get( SDRATTR_MEASUREUNIT ) ).GetValue(); + + for( USHORT i = 0; i < aLbUnit.GetEntryCount(); ++i ) + { + if ( (long)aLbUnit.GetEntryData( i ) == nFieldUnit ) + { + aLbUnit.SelectEntryPos( i ); + break; + } + } + } + else + { + aLbUnit.SetNoSelection(); + } + aLbUnit.SaveValue(); + + // Position + if ( rAttrs.GetItemState( SDRATTR_MEASURETEXTVPOS ) != SFX_ITEM_DONTCARE ) + { + SdrMeasureTextVPos eVPos = (SdrMeasureTextVPos) + ( ( const SdrMeasureTextVPosItem& )rAttrs.Get( SDRATTR_MEASURETEXTVPOS ) ).GetValue(); + { + if ( rAttrs.GetItemState( SDRATTR_MEASURETEXTHPOS ) != SFX_ITEM_DONTCARE ) + { + aTsbAutoPosV.EnableTriState( FALSE ); + aTsbAutoPosH.EnableTriState( FALSE ); + + SdrMeasureTextHPos eHPos = (SdrMeasureTextHPos) + ( ( const SdrMeasureTextHPosItem& )rAttrs.Get( SDRATTR_MEASURETEXTHPOS ) ).GetValue(); + RECT_POINT eRP = RP_MM; + switch( eVPos ) + { + case SDRMEASURE_ABOVE: + switch( eHPos ) + { + case SDRMEASURE_TEXTLEFTOUTSIDE: eRP = RP_LT; break; + case SDRMEASURE_TEXTINSIDE: eRP = RP_MT; break; + case SDRMEASURE_TEXTRIGHTOUTSIDE: eRP = RP_RT; break; + case SDRMEASURE_TEXTHAUTO: eRP = RP_MT; break; + } + break; + case SDRMEASURETEXT_VERTICALCENTERED: + switch( eHPos ) + { + case SDRMEASURE_TEXTLEFTOUTSIDE: eRP = RP_LM; break; + case SDRMEASURE_TEXTINSIDE: eRP = RP_MM; break; + case SDRMEASURE_TEXTRIGHTOUTSIDE: eRP = RP_RM; break; + case SDRMEASURE_TEXTHAUTO: eRP = RP_MM; break; + } + break; + case SDRMEASURE_BELOW: + switch( eHPos ) + { + case SDRMEASURE_TEXTLEFTOUTSIDE: eRP = RP_LB; break; + case SDRMEASURE_TEXTINSIDE: eRP = RP_MB; break; + case SDRMEASURE_TEXTRIGHTOUTSIDE: eRP = RP_RB; break; + case SDRMEASURE_TEXTHAUTO: eRP = RP_MB; break; + } + break; + case SDRMEASURE_TEXTVAUTO: + switch( eHPos ) + { + case SDRMEASURE_TEXTLEFTOUTSIDE: eRP = RP_LM; break; + case SDRMEASURE_TEXTINSIDE: eRP = RP_MM; break; + case SDRMEASURE_TEXTRIGHTOUTSIDE: eRP = RP_RM; break; + case SDRMEASURE_TEXTHAUTO: eRP = RP_MM; break; + } + break; + default: ;//prevent warning + } + + CTL_STATE nState = 0; + + if( eHPos == SDRMEASURE_TEXTHAUTO ) + { + aTsbAutoPosH.SetState( STATE_CHECK ); + nState = CS_NOHORZ; + } + + if( eVPos == SDRMEASURE_TEXTVAUTO ) + { + aTsbAutoPosV.SetState( STATE_CHECK ); + nState |= CS_NOVERT; + } + + aCtlPosition.SetState( nState ); + aCtlPosition.SetActualRP( eRP ); + } + } + } + else + { + aCtlPosition.Reset(); + aTsbAutoPosV.SetState( STATE_DONTKNOW ); + aTsbAutoPosH.SetState( STATE_DONTKNOW ); + } + + // put the attributes to the preview-control, + // otherwise the control don't know about + // the settings of the dialog (#67930) + ChangeAttrHdl_Impl( &aTsbShowUnit ); + aCtlPreview.SetAttributes( rAttrs ); + + bPositionModified = FALSE; +} + +/************************************************************************* +|* +|* Fill the delivered Item-Set with dialogbox-attributes +|* +\************************************************************************/ + +BOOL SvxMeasurePage::FillItemSet( SfxItemSet& rAttrs) +{ + BOOL bModified = FALSE; + INT32 nValue; + TriState eState; + + if( aMtrFldLineDist.GetText() != aMtrFldLineDist.GetSavedValue() ) + { + nValue = GetCoreValue( aMtrFldLineDist, eUnit ); + rAttrs.Put( SdrMeasureLineDistItem( nValue ) ); + bModified = TRUE; + } + + if( aMtrFldHelplineOverhang.GetText() != aMtrFldHelplineOverhang.GetSavedValue() ) + { + nValue = GetCoreValue( aMtrFldHelplineOverhang, eUnit ); + rAttrs.Put( SdrMeasureHelplineOverhangItem( nValue ) ); + bModified = TRUE; + } + + if( aMtrFldHelplineDist.GetText() != aMtrFldHelplineDist.GetSavedValue() ) + { + nValue = GetCoreValue( aMtrFldHelplineDist, eUnit ); + rAttrs.Put( SdrMeasureHelplineDistItem( nValue ) ); + bModified = TRUE; + } + + if( aMtrFldHelpline1Len.GetText() != aMtrFldHelpline1Len.GetSavedValue() ) + { + nValue = GetCoreValue( aMtrFldHelpline1Len, eUnit ); + rAttrs.Put( SdrMeasureHelpline1LenItem( nValue ) ); + bModified = TRUE; + } + + if( aMtrFldHelpline2Len.GetText() != aMtrFldHelpline2Len.GetSavedValue() ) + { + nValue = GetCoreValue( aMtrFldHelpline2Len, eUnit ); + rAttrs.Put( SdrMeasureHelpline2LenItem( nValue ) ); + bModified = TRUE; + } + + eState = aTsbBelowRefEdge.GetState(); + if( eState != aTsbBelowRefEdge.GetSavedValue() ) + { + rAttrs.Put( SdrMeasureBelowRefEdgeItem( (BOOL) STATE_CHECK == eState ) ); + bModified = TRUE; + } + + if( aMtrFldDecimalPlaces.GetText() != aMtrFldDecimalPlaces.GetSavedValue() ) + { + nValue = static_cast<INT32>(aMtrFldDecimalPlaces.GetValue()); + rAttrs.Put( + SdrMeasureDecimalPlacesItem( + sal::static_int_cast< INT16 >( nValue ) ) ); + bModified = TRUE; + } + + eState = aTsbParallel.GetState(); + if( eState != aTsbParallel.GetSavedValue() ) + { + rAttrs.Put( SdrMeasureTextRota90Item( (BOOL) STATE_NOCHECK == eState ) ); + bModified = TRUE; + } + + eState = aTsbShowUnit.GetState(); + if( eState != aTsbShowUnit.GetSavedValue() ) + { + rAttrs.Put( SdrMeasureShowUnitItem( (BOOL) STATE_CHECK == eState ) ); + bModified = TRUE; + } + + USHORT nPos = aLbUnit.GetSelectEntryPos(); + if( nPos != aLbUnit.GetSavedValue() ) + { + if( nPos != LISTBOX_ENTRY_NOTFOUND ) + { + USHORT nFieldUnit = (USHORT)(long)aLbUnit.GetEntryData( nPos ); + FieldUnit _eUnit = (FieldUnit) nFieldUnit; + rAttrs.Put( SdrMeasureUnitItem( _eUnit ) ); + bModified = TRUE; + } + } + +//enum SdrMeasureTextHPos {SDRMEASURE_TEXTHAUTO,SDRMEASURE_TEXTLEFTOUTSIDE,SDRMEASURE_TEXTINSIDE,SDRMEASURE_TEXTRIGHTOUTSIDE}; +//enum SdrMeasureTextVPos {SDRMEASURE_TEXTVAUTO,SDRMEASURE_ABOVE,SDRMEASURETEXT_VERTICALCENTERED,SDRMEASURE_BELOW}; + + if( bPositionModified ) + { + // Position + SdrMeasureTextVPos eVPos, eOldVPos; + SdrMeasureTextHPos eHPos, eOldHPos; + + RECT_POINT eRP = aCtlPosition.GetActualRP(); + switch( eRP ) + { + default: + case RP_LT: eVPos = SDRMEASURE_ABOVE; + eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break; + case RP_LM: eVPos = SDRMEASURETEXT_VERTICALCENTERED; + eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break; + case RP_LB: eVPos = SDRMEASURE_BELOW; + eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break; + case RP_MT: eVPos = SDRMEASURE_ABOVE; + eHPos = SDRMEASURE_TEXTINSIDE; break; + case RP_MM: eVPos = SDRMEASURETEXT_VERTICALCENTERED; + eHPos = SDRMEASURE_TEXTINSIDE; break; + case RP_MB: eVPos = SDRMEASURE_BELOW; + eHPos = SDRMEASURE_TEXTINSIDE; break; + case RP_RT: eVPos = SDRMEASURE_ABOVE; + eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break; + case RP_RM: eVPos = SDRMEASURETEXT_VERTICALCENTERED; + eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break; + case RP_RB: eVPos = SDRMEASURE_BELOW; + eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break; + } + if( aTsbAutoPosH.GetState() == STATE_CHECK ) + eHPos = SDRMEASURE_TEXTHAUTO; + + if( aTsbAutoPosV.GetState() == STATE_CHECK ) + eVPos = SDRMEASURE_TEXTVAUTO; + + if ( rAttrs.GetItemState( SDRATTR_MEASURETEXTVPOS ) != SFX_ITEM_DONTCARE ) + { + eOldVPos = (SdrMeasureTextVPos) + ( ( const SdrMeasureTextVPosItem& )rOutAttrs.Get( SDRATTR_MEASURETEXTVPOS ) ).GetValue(); + if( eOldVPos != eVPos ) + { + rAttrs.Put( SdrMeasureTextVPosItem( eVPos ) ); + bModified = TRUE; + } + } + else + { + rAttrs.Put( SdrMeasureTextVPosItem( eVPos ) ); + bModified = TRUE; + } + + if ( rAttrs.GetItemState( SDRATTR_MEASURETEXTHPOS ) != SFX_ITEM_DONTCARE ) + { + eOldHPos = (SdrMeasureTextHPos) + ( ( const SdrMeasureTextHPosItem& )rOutAttrs.Get( SDRATTR_MEASURETEXTHPOS ) ).GetValue(); + if( eOldHPos != eHPos ) + { + rAttrs.Put( SdrMeasureTextHPosItem( eHPos ) ); + bModified = TRUE; + } + } + else + { + rAttrs.Put( SdrMeasureTextHPosItem( eHPos ) ); + bModified = TRUE; + } + } + + return( bModified ); +} + +/************************************************************************* +|* +|* The View have to set at the measure-object to be able to notify +|* unit and floatingpoint-values +|* +\************************************************************************/ + +void SvxMeasurePage::Construct() +{ + DBG_ASSERT( pView, "Keine gueltige View Uebergeben!" ); + + aCtlPreview.pMeasureObj->SetModel( pView->GetModel() ); + aCtlPreview.Invalidate(); +} + +/************************************************************************* +|* +|* create the tabpage +|* +\************************************************************************/ + +SfxTabPage* SvxMeasurePage::Create( Window* pWindow, + const SfxItemSet& rAttrs ) +{ + return( new SvxMeasurePage( pWindow, rAttrs ) ); +} + +/************************************************************************* +|* +|* +|* +\************************************************************************/ + +USHORT* SvxMeasurePage::GetRanges() +{ + return( pRanges ); +} + +/************************************************************************* +|* +|* +|* +\************************************************************************/ + +void SvxMeasurePage::PointChanged( Window* pWindow, RECT_POINT /*eRP*/ ) +{ + ChangeAttrHdl_Impl( pWindow ); +} + +/************************************************************************* +|* +|* +|* +\************************************************************************/ + +IMPL_LINK( SvxMeasurePage, ClickAutoPosHdl_Impl, void *, p ) +{ + if( aTsbAutoPosH.GetState() == STATE_CHECK ) + { + 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 + } + } + if( aTsbAutoPosV.GetState() == STATE_CHECK ) + { + 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 + } + } + ChangeAttrHdl_Impl( p ); + + return( 0L ); +} + +/************************************************************************* +|* +|* +|* +\************************************************************************/ + +IMPL_LINK( SvxMeasurePage, ChangeAttrHdl_Impl, void *, p ) +{ + + if( p == &aMtrFldLineDist ) + { + INT32 nValue = GetCoreValue( aMtrFldLineDist, eUnit ); + aAttrSet.Put( SdrMeasureLineDistItem( nValue ) ); + } + + if( p == &aMtrFldHelplineOverhang ) + { + INT32 nValue = GetCoreValue( aMtrFldHelplineOverhang, eUnit ); + aAttrSet.Put( SdrMeasureHelplineOverhangItem( nValue) ); + } + + if( p == &aMtrFldHelplineDist ) + { + INT32 nValue = GetCoreValue( aMtrFldHelplineDist, eUnit ); + aAttrSet.Put( SdrMeasureHelplineDistItem( nValue) ); + } + + if( p == &aMtrFldHelpline1Len ) + { + INT32 nValue = GetCoreValue( aMtrFldHelpline1Len, eUnit ); + aAttrSet.Put( SdrMeasureHelpline1LenItem( nValue ) ); + } + + if( p == &aMtrFldHelpline2Len ) + { + INT32 nValue = GetCoreValue( aMtrFldHelpline2Len, eUnit ); + aAttrSet.Put( SdrMeasureHelpline2LenItem( nValue ) ); + } + + if( p == &aTsbBelowRefEdge ) + { + TriState eState = aTsbBelowRefEdge.GetState(); + if( eState != STATE_DONTKNOW ) + aAttrSet.Put( SdrMeasureBelowRefEdgeItem( (BOOL) STATE_CHECK == eState ) ); + } + + if( p == &aMtrFldDecimalPlaces ) + { + INT16 nValue = sal::static_int_cast< INT16 >( + aMtrFldDecimalPlaces.GetValue() ); + aAttrSet.Put( SdrMeasureDecimalPlacesItem( nValue ) ); + } + + if( p == &aTsbParallel ) + { + TriState eState = aTsbParallel.GetState(); + if( eState != STATE_DONTKNOW ) + aAttrSet.Put( SdrMeasureTextRota90Item( (BOOL) !STATE_CHECK == eState ) ); + } + + if( p == &aTsbShowUnit ) + { + TriState eState = aTsbShowUnit.GetState(); + if( eState != STATE_DONTKNOW ) + aAttrSet.Put( SdrMeasureShowUnitItem( (BOOL) STATE_CHECK == eState ) ); + } + + if( p == &aLbUnit ) + { + USHORT nPos = aLbUnit.GetSelectEntryPos(); + if( nPos != LISTBOX_ENTRY_NOTFOUND ) + { + USHORT nFieldUnit = (USHORT)(long)aLbUnit.GetEntryData( nPos ); + FieldUnit _eUnit = (FieldUnit) nFieldUnit; + aAttrSet.Put( SdrMeasureUnitItem( _eUnit ) ); + } + } + + if( p == &aTsbAutoPosV || p == &aTsbAutoPosH || p == &aCtlPosition ) + { + bPositionModified = TRUE; + + // Position + RECT_POINT eRP = aCtlPosition.GetActualRP(); + SdrMeasureTextVPos eVPos; + SdrMeasureTextHPos eHPos; + + switch( eRP ) + { + default: + case RP_LT: eVPos = SDRMEASURE_ABOVE; + eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break; + case RP_LM: eVPos = SDRMEASURETEXT_VERTICALCENTERED; + eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break; + case RP_LB: eVPos = SDRMEASURE_BELOW; + eHPos = SDRMEASURE_TEXTLEFTOUTSIDE; break; + case RP_MT: eVPos = SDRMEASURE_ABOVE; + eHPos = SDRMEASURE_TEXTINSIDE; break; + case RP_MM: eVPos = SDRMEASURETEXT_VERTICALCENTERED; + eHPos = SDRMEASURE_TEXTINSIDE; break; + case RP_MB: eVPos = SDRMEASURE_BELOW; + eHPos = SDRMEASURE_TEXTINSIDE; break; + case RP_RT: eVPos = SDRMEASURE_ABOVE; + eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break; + case RP_RM: eVPos = SDRMEASURETEXT_VERTICALCENTERED; + eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break; + case RP_RB: eVPos = SDRMEASURE_BELOW; + eHPos = SDRMEASURE_TEXTRIGHTOUTSIDE; break; + } + + CTL_STATE nState = 0; + + if( aTsbAutoPosH.GetState() == STATE_CHECK ) + { + eHPos = SDRMEASURE_TEXTHAUTO; + nState = CS_NOHORZ; + } + + if( aTsbAutoPosV.GetState() == STATE_CHECK ) + { + eVPos = SDRMEASURE_TEXTVAUTO; + nState |= CS_NOVERT; + } + + if( p == &aTsbAutoPosV || p == &aTsbAutoPosH ) + aCtlPosition.SetState( nState ); + + aAttrSet.Put( SdrMeasureTextVPosItem( eVPos ) ); + aAttrSet.Put( SdrMeasureTextHPosItem( eHPos ) ); + } + + aCtlPreview.SetAttributes( aAttrSet ); + aCtlPreview.Invalidate(); + + return( 0L ); +} + +/************************************************************************* +|* +|* +|* +\************************************************************************/ + +void SvxMeasurePage::FillUnitLB() +{ + // fill ListBox with metrics + SvxStringArray aMetricArr( SVX_RES( RID_SVXSTR_FIELDUNIT_TABLE ) ); + + long nUnit = FUNIT_NONE; + String aStrMetric( CUI_RES( STR_MEASURE_AUTOMATIC ) ); + USHORT nPos = aLbUnit.InsertEntry( aStrMetric ); + aLbUnit.SetEntryData( nPos, (void*)nUnit ); + + for( USHORT i = 0; i < aMetricArr.Count(); ++i ) + { + aStrMetric = aMetricArr.GetStringByPos( i ); + nUnit = aMetricArr.GetValue( i ); + nPos = aLbUnit.InsertEntry( aStrMetric ); + aLbUnit.SetEntryData( nPos, (void*)nUnit ); + } +} +void SvxMeasurePage::PageCreated (SfxAllItemSet aSet) //add CHINA001 +{ + SFX_ITEMSET_ARG (&aSet,pOfaPtrItem,OfaPtrItem,SID_OBJECT_LIST,sal_False); + + if (pOfaPtrItem) + SetView( static_cast<SdrView *>(pOfaPtrItem->GetValue())); + + Construct(); +} + |