872 lines
28 KiB
C++
872 lines
28 KiB
C++
/*************************************************************************
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: measure.cxx,v $
|
|
*
|
|
* $Revision: 1.11 $
|
|
*
|
|
* last change: $Author: rt $ $Date: 2005-09-08 21:33:27 $
|
|
*
|
|
* The Contents of this file are made available subject to
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
|
*
|
|
*
|
|
* GNU Lesser General Public License Version 2.1
|
|
* =============================================
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License version 2.1, as published by the Free Software Foundation.
|
|
*
|
|
* This library 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 for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*
|
|
************************************************************************/
|
|
|
|
#ifdef SVX_DLLIMPLEMENTATION
|
|
#undef SVX_DLLIMPLEMENTATION
|
|
#endif
|
|
|
|
|
|
// include ---------------------------------------------------------------
|
|
|
|
#ifndef _SFXAPP_HXX
|
|
#include <sfx2/app.hxx>
|
|
#endif
|
|
#ifndef _SFXMODULE_HXX
|
|
#include <sfx2/module.hxx>
|
|
#endif
|
|
|
|
#ifndef _SHL_HXX //autogen
|
|
#include <tools/shl.hxx>
|
|
#endif
|
|
#pragma hdrstop
|
|
|
|
#include "dialogs.hrc"
|
|
|
|
#define _SVX_MEASURE_CXX
|
|
|
|
#include "svdomeas.hxx"
|
|
#include "svdattr.hxx"
|
|
#include "svdattrx.hxx"
|
|
#include "svdview.hxx"
|
|
|
|
#include "measctrl.hxx"
|
|
#include "measure.hxx"
|
|
#include "measure.hrc"
|
|
#include "dialmgr.hxx"
|
|
#include "dlgutil.hxx"
|
|
#include "strarray.hxx"
|
|
#include <sfx2/request.hxx> //add CHINA001
|
|
#include "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, ResId( RID_SVXPAGE_MEASURE, DIALOG_MGR() ),
|
|
rInAttrs ),
|
|
|
|
rOutAttrs ( rInAttrs ),
|
|
aAttrSet ( *rInAttrs.GetPool() ),
|
|
|
|
aFlLine ( this, ResId( FL_LINE ) ),
|
|
aFtLineDist ( this, ResId( FT_LINE_DIST ) ),
|
|
aMtrFldLineDist ( this, ResId( MTR_LINE_DIST ) ),
|
|
aFtHelplineOverhang ( this, ResId( FT_HELPLINE_OVERHANG ) ),
|
|
aMtrFldHelplineOverhang ( this, ResId( MTR_FLD_HELPLINE_OVERHANG ) ),
|
|
aFtHelplineDist ( this, ResId( FT_HELPLINE_DIST ) ),
|
|
aMtrFldHelplineDist ( this, ResId( MTR_FLD_HELPLINE_DIST ) ),
|
|
aFtHelpline1Len ( this, ResId( FT_HELPLINE1_LEN ) ),
|
|
aMtrFldHelpline1Len ( this, ResId( MTR_FLD_HELPLINE1_LEN ) ),
|
|
aFtHelpline2Len ( this, ResId( FT_HELPLINE2_LEN ) ),
|
|
aMtrFldHelpline2Len ( this, ResId( MTR_FLD_HELPLINE2_LEN ) ),
|
|
aTsbBelowRefEdge ( this, ResId( TSB_BELOW_REF_EDGE ) ),
|
|
aFtDecimalPlaces ( this, ResId( FT_DECIMALPLACES ) ),
|
|
aMtrFldDecimalPlaces ( this, ResId( MTR_FLD_DECIMALPLACES ) ),
|
|
aTsbParallel ( this, ResId( TSB_PARALLEL ) ),
|
|
aTsbShowUnit ( this, ResId( TSB_SHOW_UNIT ) ),
|
|
aLbUnit ( this, ResId( LB_UNIT ) ),
|
|
|
|
aFlLabel ( this, ResId( FL_LABEL ) ),
|
|
aFlVert ( this, ResId( FL_VERT ) ),
|
|
aCtlPosition ( this, ResId( CTL_POSITION ),
|
|
RP_RM, 200, 100, CS_LINE ),
|
|
aTsbAutoPosV ( this, ResId( TSB_AUTOPOSV ) ),
|
|
aTsbAutoPosH ( this, ResId( TSB_AUTOPOSH ) ),
|
|
aFtPosition ( this, ResId( FT_POSITION ) ),
|
|
aCtlPreview ( this, ResId( CTL_PREVIEW ), rInAttrs ),
|
|
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 || (pItem = &pPool->GetDefaultItem( SDRATTR_MEASURELINEDIST )) )
|
|
{
|
|
long nValue = ( ( const SdrMeasureLineDistItem* )pItem )->GetValue();
|
|
SetMetricValue( aMtrFldLineDist, nValue, eUnit );
|
|
}
|
|
else
|
|
{
|
|
aMtrFldLineDist.SetText( String() );
|
|
}
|
|
aMtrFldLineDist.SaveValue();
|
|
|
|
// SdrMeasureHelplineOverhangItem
|
|
pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINEOVERHANG );
|
|
if( pItem || (pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINEOVERHANG )))
|
|
{
|
|
long nValue = ( ( const SdrMeasureHelplineOverhangItem* )pItem )->GetValue();
|
|
SetMetricValue( aMtrFldHelplineOverhang, nValue, eUnit );
|
|
}
|
|
else
|
|
{
|
|
aMtrFldHelplineOverhang.SetText( String() );
|
|
}
|
|
aMtrFldHelplineOverhang.SaveValue();
|
|
|
|
// SdrMeasureHelplineDistItem
|
|
pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINEDIST );
|
|
if( pItem || (pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINEDIST )))
|
|
{
|
|
long nValue = ( ( const SdrMeasureHelplineDistItem* )pItem )->GetValue();
|
|
SetMetricValue( aMtrFldHelplineDist, nValue, eUnit );
|
|
}
|
|
else
|
|
{
|
|
aMtrFldHelplineDist.SetText( String() );
|
|
}
|
|
aMtrFldHelplineDist.SaveValue();
|
|
|
|
// SdrMeasureHelpline1LenItem
|
|
pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINE1LEN );
|
|
if( pItem || (pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINE1LEN )))
|
|
{
|
|
long nValue = ( ( const SdrMeasureHelpline1LenItem* )pItem )->GetValue();
|
|
SetMetricValue( aMtrFldHelpline1Len, nValue, eUnit );
|
|
}
|
|
else
|
|
{
|
|
aMtrFldHelpline1Len.SetText( String() );
|
|
}
|
|
aMtrFldHelpline1Len.SaveValue();
|
|
|
|
// SdrMeasureHelpline2LenItem
|
|
pItem = GetItem( rAttrs, SDRATTR_MEASUREHELPLINE2LEN );
|
|
if( pItem || (pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREHELPLINE2LEN )))
|
|
{
|
|
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 || (pItem = &pPool->GetDefaultItem( SDRATTR_MEASUREDECIMALPLACES )))
|
|
{
|
|
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;
|
|
}
|
|
|
|
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 = aMtrFldDecimalPlaces.GetValue();
|
|
rAttrs.Put( SdrMeasureDecimalPlacesItem( 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 )
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
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;
|
|
}
|
|
}
|
|
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 = 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 )
|
|
{
|
|
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( RID_SVXSTR_FIELDUNIT_TABLE );
|
|
|
|
long nUnit = FUNIT_NONE;
|
|
String aStrMetric( ResId( 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();
|
|
}
|
|
|