blob: f75f2c5976af2fbd27f550116f631d27a755d7d9 [file] [log] [blame]
/**************************************************************
*
* 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>
#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 sal_uInt16 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 ( sal_False )
{
aCtlPreview.SetAccessibleName(aCtlPreview.GetHelpText());
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 );
aLbUnit.SetAccessibleName(GetNonMnemonicString(aTsbShowUnit.GetText()));
aCtlPosition.SetAccessibleRelationMemberOf( &aFlLabel );
aLbUnit.SetAccessibleRelationLabeledBy( &aTsbShowUnit );
}
/*************************************************************************
|*
|* 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( sal_False );
}
else
{
aTsbBelowRefEdge.SetState( STATE_DONTKNOW );
}
aTsbBelowRefEdge.SaveValue();
// SdrMeasureDecimalPlacesItem
pItem = GetItem( rAttrs, SDRATTR_MEASUREDECIMALPLACES );
if( pItem == NULL )
pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREDECIMALPLACES );
if( pItem )
{
sal_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( sal_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( sal_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( sal_uInt16 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( sal_False );
aTsbAutoPosH.EnableTriState( sal_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 = sal_False;
}
/*************************************************************************
|*
|* Fill the delivered Item-Set with dialogbox-attributes
|*
\************************************************************************/
sal_Bool SvxMeasurePage::FillItemSet( SfxItemSet& rAttrs)
{
sal_Bool bModified = sal_False;
sal_Int32 nValue;
TriState eState;
if( aMtrFldLineDist.GetText() != aMtrFldLineDist.GetSavedValue() )
{
nValue = GetCoreValue( aMtrFldLineDist, eUnit );
rAttrs.Put( SdrMeasureLineDistItem( nValue ) );
bModified = sal_True;
}
if( aMtrFldHelplineOverhang.GetText() != aMtrFldHelplineOverhang.GetSavedValue() )
{
nValue = GetCoreValue( aMtrFldHelplineOverhang, eUnit );
rAttrs.Put( SdrMeasureHelplineOverhangItem( nValue ) );
bModified = sal_True;
}
if( aMtrFldHelplineDist.GetText() != aMtrFldHelplineDist.GetSavedValue() )
{
nValue = GetCoreValue( aMtrFldHelplineDist, eUnit );
rAttrs.Put( SdrMeasureHelplineDistItem( nValue ) );
bModified = sal_True;
}
if( aMtrFldHelpline1Len.GetText() != aMtrFldHelpline1Len.GetSavedValue() )
{
nValue = GetCoreValue( aMtrFldHelpline1Len, eUnit );
rAttrs.Put( SdrMeasureHelpline1LenItem( nValue ) );
bModified = sal_True;
}
if( aMtrFldHelpline2Len.GetText() != aMtrFldHelpline2Len.GetSavedValue() )
{
nValue = GetCoreValue( aMtrFldHelpline2Len, eUnit );
rAttrs.Put( SdrMeasureHelpline2LenItem( nValue ) );
bModified = sal_True;
}
eState = aTsbBelowRefEdge.GetState();
if( eState != aTsbBelowRefEdge.GetSavedValue() )
{
rAttrs.Put( SdrMeasureBelowRefEdgeItem( (sal_Bool) STATE_CHECK == eState ) );
bModified = sal_True;
}
if( aMtrFldDecimalPlaces.GetText() != aMtrFldDecimalPlaces.GetSavedValue() )
{
nValue = static_cast<sal_Int32>(aMtrFldDecimalPlaces.GetValue());
rAttrs.Put(
SdrMeasureDecimalPlacesItem(
sal::static_int_cast< sal_Int16 >( nValue ) ) );
bModified = sal_True;
}
eState = aTsbParallel.GetState();
if( eState != aTsbParallel.GetSavedValue() )
{
rAttrs.Put( SdrMeasureTextRota90Item( (sal_Bool) STATE_NOCHECK == eState ) );
bModified = sal_True;
}
eState = aTsbShowUnit.GetState();
if( eState != aTsbShowUnit.GetSavedValue() )
{
rAttrs.Put( SdrMeasureShowUnitItem( (sal_Bool) STATE_CHECK == eState ) );
bModified = sal_True;
}
sal_uInt16 nPos = aLbUnit.GetSelectEntryPos();
if( nPos != aLbUnit.GetSavedValue() )
{
if( nPos != LISTBOX_ENTRY_NOTFOUND )
{
sal_uInt16 nFieldUnit = (sal_uInt16)(long)aLbUnit.GetEntryData( nPos );
FieldUnit _eUnit = (FieldUnit) nFieldUnit;
rAttrs.Put( SdrMeasureUnitItem( _eUnit ) );
bModified = sal_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 = sal_True;
}
}
else
{
rAttrs.Put( SdrMeasureTextVPosItem( eVPos ) );
bModified = sal_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 = sal_True;
}
}
else
{
rAttrs.Put( SdrMeasureTextHPosItem( eHPos ) );
bModified = sal_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 ) );
}
/*************************************************************************
|*
|*
|*
\************************************************************************/
sal_uInt16* 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 )
{
sal_Int32 nValue = GetCoreValue( aMtrFldLineDist, eUnit );
aAttrSet.Put( SdrMeasureLineDistItem( nValue ) );
}
if( p == &aMtrFldHelplineOverhang )
{
sal_Int32 nValue = GetCoreValue( aMtrFldHelplineOverhang, eUnit );
aAttrSet.Put( SdrMeasureHelplineOverhangItem( nValue) );
}
if( p == &aMtrFldHelplineDist )
{
sal_Int32 nValue = GetCoreValue( aMtrFldHelplineDist, eUnit );
aAttrSet.Put( SdrMeasureHelplineDistItem( nValue) );
}
if( p == &aMtrFldHelpline1Len )
{
sal_Int32 nValue = GetCoreValue( aMtrFldHelpline1Len, eUnit );
aAttrSet.Put( SdrMeasureHelpline1LenItem( nValue ) );
}
if( p == &aMtrFldHelpline2Len )
{
sal_Int32 nValue = GetCoreValue( aMtrFldHelpline2Len, eUnit );
aAttrSet.Put( SdrMeasureHelpline2LenItem( nValue ) );
}
if( p == &aTsbBelowRefEdge )
{
TriState eState = aTsbBelowRefEdge.GetState();
if( eState != STATE_DONTKNOW )
aAttrSet.Put( SdrMeasureBelowRefEdgeItem( (sal_Bool) STATE_CHECK == eState ) );
}
if( p == &aMtrFldDecimalPlaces )
{
sal_Int16 nValue = sal::static_int_cast< sal_Int16 >(
aMtrFldDecimalPlaces.GetValue() );
aAttrSet.Put( SdrMeasureDecimalPlacesItem( nValue ) );
}
if( p == &aTsbParallel )
{
TriState eState = aTsbParallel.GetState();
if( eState != STATE_DONTKNOW )
aAttrSet.Put( SdrMeasureTextRota90Item( (sal_Bool) !STATE_CHECK == eState ) );
}
if( p == &aTsbShowUnit )
{
TriState eState = aTsbShowUnit.GetState();
if( eState != STATE_DONTKNOW )
aAttrSet.Put( SdrMeasureShowUnitItem( (sal_Bool) STATE_CHECK == eState ) );
}
if( p == &aLbUnit )
{
sal_uInt16 nPos = aLbUnit.GetSelectEntryPos();
if( nPos != LISTBOX_ENTRY_NOTFOUND )
{
sal_uInt16 nFieldUnit = (sal_uInt16)(long)aLbUnit.GetEntryData( nPos );
FieldUnit _eUnit = (FieldUnit) nFieldUnit;
aAttrSet.Put( SdrMeasureUnitItem( _eUnit ) );
}
}
if( p == &aTsbAutoPosV || p == &aTsbAutoPosH || p == &aCtlPosition )
{
bPositionModified = sal_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 ) );
sal_uInt16 nPos = aLbUnit.InsertEntry( aStrMetric );
aLbUnit.SetEntryData( nPos, (void*)nUnit );
for( sal_uInt16 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();
}