blob: f723423103e742081c4d1e04401a8ca6500d037d [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_sc.hxx"
#undef SC_DLLIMPLEMENTATION
//------------------------------------------------------------------
#include "mtrindlg.hxx"
#include "scresid.hxx"
#include "miscdlgs.hrc"
//==================================================================
ScMetricInputDlg::ScMetricInputDlg( Window* pParent,
sal_uInt16 nResId,
long nCurrent,
long nDefault,
FieldUnit eFUnit,
sal_uInt16 nDecimals,
long nMaximum,
long nMinimum,
long nFirst,
long nLast )
: ModalDialog ( pParent, ScResId( nResId ) ),
//
aFtEditTitle ( this, ScResId( FT_LABEL ) ),
aEdValue ( this, ScResId( ED_VALUE ) ),
aBtnDefVal ( this, ScResId( BTN_DEFVAL ) ),
aBtnOk ( this, ScResId( BTN_OK ) ),
aBtnCancel ( this, ScResId( BTN_CANCEL ) ),
aBtnHelp ( this, ScResId( BTN_HELP ) )
{
//SetText( rTitle );
//
//aFtEditTitle.SetText( rEditTitle );
CalcPositions();
aBtnDefVal.SetClickHdl ( LINK( this, ScMetricInputDlg, SetDefValHdl ) );
aEdValue. SetModifyHdl( LINK( this, ScMetricInputDlg, ModifyHdl ) );
aEdValue.SetUnit ( eFUnit );
aEdValue.SetDecimalDigits ( nDecimals );
aEdValue.SetMax ( aEdValue.Normalize( nMaximum ), FUNIT_TWIP );
aEdValue.SetMin ( aEdValue.Normalize( nMinimum ), FUNIT_TWIP );
aEdValue.SetLast ( aEdValue.Normalize( nLast ), FUNIT_TWIP );
aEdValue.SetFirst ( aEdValue.Normalize( nFirst ), FUNIT_TWIP );
aEdValue.SetSpinSize ( aEdValue.Normalize( 1 ) / 10 );
aEdValue.SetValue ( aEdValue.Normalize( nDefault ), FUNIT_TWIP );
nDefaultValue = sal::static_int_cast<long>( aEdValue.GetValue() );
aEdValue.SetValue ( aEdValue.Normalize( nCurrent ), FUNIT_TWIP );
nCurrentValue = sal::static_int_cast<long>( aEdValue.GetValue() );
aBtnDefVal.Check( nCurrentValue == nDefaultValue );
FreeResource();
}
//------------------------------------------------------------------------
__EXPORT ScMetricInputDlg::~ScMetricInputDlg()
{
}
//------------------------------------------------------------------------
long ScMetricInputDlg::GetInputValue( FieldUnit eUnit ) const
{
/*
mit Nachkommastellen:
double nVal = aEdValue.GetValue( eUnit );
sal_uInt16 nDecs = aEdValue.GetDecimalDigits();
double nFactor = 0.0;
// static long ImpPower10( sal_uInt16 nDecs )
{
nFactor = 1.0;
for ( sal_uInt16 i=0; i < nDecs; i++ )
nFactor *= 10.0;
}
return nVal / nFactor;
*/
// erstmal Nachkommastellen abschneiden - nich so doll...
return sal::static_int_cast<long>( aEdValue.Denormalize( aEdValue.GetValue( eUnit ) ) );
}
//------------------------------------------------------------------------
void ScMetricInputDlg::CalcPositions()
{
MapMode oldMode = GetMapMode();
SetMapMode( MAP_APPFONT );
Size aDlgSize = GetOutputSizePixel();
Size aFtSize = aFtEditTitle.GetSizePixel();
Point aNewPos;
aFtSize.Width() = aFtEditTitle.GetTextWidth(aFtEditTitle.GetText());
// #95990# add mnemonic char width to fixed text width
aFtSize.Width() += aFtEditTitle.GetTextWidth(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("(W)")));
aFtEditTitle.SetSizePixel( aFtSize );
aNewPos.Y() = aEdValue.GetPosPixel().Y();
aNewPos.X() = aFtEditTitle.GetPosPixel().X();
aNewPos.X() += aFtEditTitle.GetSizePixel().Width();
aNewPos.X() += LogicToPixel( Point(3,0) ).X();
aEdValue.SetPosPixel( aNewPos );
aNewPos.Y() = aBtnDefVal.GetPosPixel().Y();
aBtnDefVal.SetPosPixel( aNewPos );
aNewPos.Y() = aBtnOk.GetPosPixel().Y();
aNewPos.X() += aEdValue.GetSizePixel().Width();
aNewPos.X() += LogicToPixel( Point(6,0) ).X();
aBtnOk.SetPosPixel( aNewPos );
aNewPos.Y() = aBtnCancel.GetPosPixel().Y();
aBtnCancel.SetPosPixel( aNewPos );
aNewPos.Y() = aBtnHelp.GetPosPixel().Y();
aBtnHelp.SetPosPixel( aNewPos );
aNewPos.X() += aBtnOk.GetSizePixel().Width();
aNewPos.X() += LogicToPixel( Point(6,0) ).X();
aDlgSize.Width() = aNewPos.X();
SetOutputSizePixel( aDlgSize );
SetMapMode( oldMode );
}
//------------------------------------------------------------------------
// Handler:
IMPL_LINK( ScMetricInputDlg, SetDefValHdl, CheckBox *, EMPTYARG )
{
if ( aBtnDefVal.IsChecked() )
{
nCurrentValue = sal::static_int_cast<long>( aEdValue.GetValue() );
aEdValue.SetValue( nDefaultValue );
}
else
aEdValue.SetValue( nCurrentValue );
return 0;
}
//------------------------------------------------------------------------
IMPL_LINK_INLINE_START( ScMetricInputDlg, ModifyHdl, MetricField *, EMPTYARG )
{
aBtnDefVal.Check( nDefaultValue == aEdValue.GetValue() );
return 0;
}
IMPL_LINK_INLINE_END( ScMetricInputDlg, ModifyHdl, MetricField *, EMPTYARG )