1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_scui.hxx" 26 27 #undef SC_DLLIMPLEMENTATION 28 29 30 31 //------------------------------------------------------------------ 32 33 #include "mtrindlg.hxx" 34 #include "scresid.hxx" 35 #include "miscdlgs.hrc" 36 37 38 //================================================================== 39 40 ScMetricInputDlg::ScMetricInputDlg( Window* pParent, 41 sal_uInt16 nResId, 42 long nCurrent, 43 long nDefault, 44 FieldUnit eFUnit, 45 sal_uInt16 nDecimals, 46 long nMaximum, 47 long nMinimum, 48 long nFirst, 49 long nLast ) 50 51 : ModalDialog ( pParent, ScResId( nResId ) ), 52 // 53 aFtEditTitle ( this, ScResId( FT_LABEL ) ), 54 aEdValue ( this, ScResId( ED_VALUE ) ), 55 aBtnDefVal ( this, ScResId( BTN_DEFVAL ) ), 56 aBtnOk ( this, ScResId( BTN_OK ) ), 57 aBtnCancel ( this, ScResId( BTN_CANCEL ) ), 58 aBtnHelp ( this, ScResId( BTN_HELP ) ) 59 { 60 //SetText( rTitle ); 61 // 62 //aFtEditTitle.SetText( rEditTitle ); 63 CalcPositions(); 64 aBtnDefVal.SetClickHdl ( LINK( this, ScMetricInputDlg, SetDefValHdl ) ); 65 aEdValue. SetModifyHdl( LINK( this, ScMetricInputDlg, ModifyHdl ) ); 66 67 aEdValue.SetUnit ( eFUnit ); 68 aEdValue.SetDecimalDigits ( nDecimals ); 69 aEdValue.SetMax ( aEdValue.Normalize( nMaximum ), FUNIT_TWIP ); 70 aEdValue.SetMin ( aEdValue.Normalize( nMinimum ), FUNIT_TWIP ); 71 aEdValue.SetLast ( aEdValue.Normalize( nLast ), FUNIT_TWIP ); 72 aEdValue.SetFirst ( aEdValue.Normalize( nFirst ), FUNIT_TWIP ); 73 aEdValue.SetSpinSize ( aEdValue.Normalize( 1 ) / 10 ); 74 aEdValue.SetValue ( aEdValue.Normalize( nDefault ), FUNIT_TWIP ); 75 nDefaultValue = sal::static_int_cast<long>( aEdValue.GetValue() ); 76 aEdValue.SetValue ( aEdValue.Normalize( nCurrent ), FUNIT_TWIP ); 77 nCurrentValue = sal::static_int_cast<long>( aEdValue.GetValue() ); 78 aBtnDefVal.Check( nCurrentValue == nDefaultValue ); 79 80 FreeResource(); 81 } 82 83 //------------------------------------------------------------------------ 84 85 __EXPORT ScMetricInputDlg::~ScMetricInputDlg() 86 { 87 } 88 89 //------------------------------------------------------------------------ 90 91 long ScMetricInputDlg::GetInputValue( FieldUnit eUnit ) const 92 { 93 /* 94 mit Nachkommastellen: 95 96 double nVal = aEdValue.GetValue( eUnit ); 97 sal_uInt16 nDecs = aEdValue.GetDecimalDigits(); 98 double nFactor = 0.0; 99 100 // static long ImpPower10( sal_uInt16 nDecs ) 101 { 102 nFactor = 1.0; 103 104 for ( sal_uInt16 i=0; i < nDecs; i++ ) 105 nFactor *= 10.0; 106 } 107 108 return nVal / nFactor; 109 */ 110 // erstmal Nachkommastellen abschneiden - nich so doll... 111 112 return sal::static_int_cast<long>( aEdValue.Denormalize( aEdValue.GetValue( eUnit ) ) ); 113 } 114 115 //------------------------------------------------------------------------ 116 117 void ScMetricInputDlg::CalcPositions() 118 { 119 MapMode oldMode = GetMapMode(); 120 SetMapMode( MAP_APPFONT ); 121 122 Size aDlgSize = GetOutputSizePixel(); 123 Size aFtSize = aFtEditTitle.GetSizePixel(); 124 Point aNewPos; 125 126 aFtSize.Width() = aFtEditTitle.GetTextWidth(aFtEditTitle.GetText()); 127 // #95990# add mnemonic char width to fixed text width 128 aFtSize.Width() += aFtEditTitle.GetTextWidth(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("(W)"))); 129 aFtEditTitle.SetSizePixel( aFtSize ); 130 131 aNewPos.Y() = aEdValue.GetPosPixel().Y(); 132 aNewPos.X() = aFtEditTitle.GetPosPixel().X(); 133 aNewPos.X() += aFtEditTitle.GetSizePixel().Width(); 134 aNewPos.X() += LogicToPixel( Point(3,0) ).X(); 135 aEdValue.SetPosPixel( aNewPos ); 136 137 aNewPos.Y() = aBtnDefVal.GetPosPixel().Y(); 138 aBtnDefVal.SetPosPixel( aNewPos ); 139 140 aNewPos.Y() = aBtnOk.GetPosPixel().Y(); 141 aNewPos.X() += aEdValue.GetSizePixel().Width(); 142 aNewPos.X() += LogicToPixel( Point(6,0) ).X(); 143 aBtnOk.SetPosPixel( aNewPos ); 144 aNewPos.Y() = aBtnCancel.GetPosPixel().Y(); 145 aBtnCancel.SetPosPixel( aNewPos ); 146 aNewPos.Y() = aBtnHelp.GetPosPixel().Y(); 147 aBtnHelp.SetPosPixel( aNewPos ); 148 149 aNewPos.X() += aBtnOk.GetSizePixel().Width(); 150 aNewPos.X() += LogicToPixel( Point(6,0) ).X(); 151 aDlgSize.Width() = aNewPos.X(); 152 SetOutputSizePixel( aDlgSize ); 153 154 SetMapMode( oldMode ); 155 } 156 157 //------------------------------------------------------------------------ 158 // Handler: 159 160 IMPL_LINK( ScMetricInputDlg, SetDefValHdl, CheckBox *, EMPTYARG ) 161 { 162 if ( aBtnDefVal.IsChecked() ) 163 { 164 nCurrentValue = sal::static_int_cast<long>( aEdValue.GetValue() ); 165 aEdValue.SetValue( nDefaultValue ); 166 } 167 else 168 aEdValue.SetValue( nCurrentValue ); 169 return 0; 170 } 171 172 //------------------------------------------------------------------------ 173 174 IMPL_LINK_INLINE_START( ScMetricInputDlg, ModifyHdl, MetricField *, EMPTYARG ) 175 { 176 aBtnDefVal.Check( nDefaultValue == aEdValue.GetValue() ); 177 return 0; 178 } 179 IMPL_LINK_INLINE_END( ScMetricInputDlg, ModifyHdl, MetricField *, EMPTYARG ) 180 181 182 183