1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_extensions.hxx"
26*b1cdbd2cSJim Jagielski #include "usercontrol.hxx"
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/
29*b1cdbd2cSJim Jagielski #include <com/sun/star/inspection/PropertyControlType.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/inspection/PropertyControlType.hpp>
31*b1cdbd2cSJim Jagielski /** === end UNO includes === **/
32*b1cdbd2cSJim Jagielski #include <svl/numuno.hxx>
33*b1cdbd2cSJim Jagielski #include <rtl/math.hxx>
34*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
35*b1cdbd2cSJim Jagielski #include <svl/zformat.hxx>
36*b1cdbd2cSJim Jagielski #include <connectivity/dbconversion.hxx>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/util/Time.hpp>
38*b1cdbd2cSJim Jagielski #include "modulepcr.hxx"
39*b1cdbd2cSJim Jagielski #include "propresid.hrc"
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski //............................................................................
42*b1cdbd2cSJim Jagielski namespace pcr
43*b1cdbd2cSJim Jagielski {
44*b1cdbd2cSJim Jagielski //............................................................................
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski     /** === begin UNO using === **/
47*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::Any;
48*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::Type;
49*b1cdbd2cSJim Jagielski     using ::com::sun::star::beans::IllegalTypeException;
50*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::RuntimeException;
51*b1cdbd2cSJim Jagielski     /** === end UNO using === **/
52*b1cdbd2cSJim Jagielski     namespace PropertyControlType = ::com::sun::star::inspection::PropertyControlType;
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski 	//==================================================================
55*b1cdbd2cSJim Jagielski 	// NumberFormatSampleField
56*b1cdbd2cSJim Jagielski 	//==================================================================
57*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
PreNotify(NotifyEvent & rNEvt)58*b1cdbd2cSJim Jagielski 	long NumberFormatSampleField::PreNotify( NotifyEvent& rNEvt )
59*b1cdbd2cSJim Jagielski 	{
60*b1cdbd2cSJim Jagielski 		// want to handle two keys myself : Del/Backspace should empty the window (setting my prop to "standard" this way)
61*b1cdbd2cSJim Jagielski 		if (EVENT_KEYINPUT == rNEvt.GetType())
62*b1cdbd2cSJim Jagielski 		{
63*b1cdbd2cSJim Jagielski 			sal_uInt16 nKey = rNEvt.GetKeyEvent()->GetKeyCode().GetCode();
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski 			if ((KEY_DELETE == nKey) || (KEY_BACKSPACE == nKey))
66*b1cdbd2cSJim Jagielski 			{
67*b1cdbd2cSJim Jagielski 				SetText( String() );
68*b1cdbd2cSJim Jagielski                 if ( m_pHelper )
69*b1cdbd2cSJim Jagielski 				    m_pHelper->ModifiedHdl( this );
70*b1cdbd2cSJim Jagielski 				return 1;
71*b1cdbd2cSJim Jagielski 			}
72*b1cdbd2cSJim Jagielski 		}
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski         return BaseClass::PreNotify( rNEvt );
75*b1cdbd2cSJim Jagielski 	}
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
SetFormatSupplier(const SvNumberFormatsSupplierObj * pSupplier)78*b1cdbd2cSJim Jagielski 	void NumberFormatSampleField::SetFormatSupplier( const SvNumberFormatsSupplierObj* pSupplier )
79*b1cdbd2cSJim Jagielski 	{
80*b1cdbd2cSJim Jagielski 		if ( pSupplier )
81*b1cdbd2cSJim Jagielski 		{
82*b1cdbd2cSJim Jagielski 			TreatAsNumber( sal_True );
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 			SvNumberFormatter* pFormatter = pSupplier->GetNumberFormatter();
85*b1cdbd2cSJim Jagielski 			SetFormatter( pFormatter, sal_True );
86*b1cdbd2cSJim Jagielski 			SetValue( 1234.56789 );
87*b1cdbd2cSJim Jagielski 		}
88*b1cdbd2cSJim Jagielski 		else
89*b1cdbd2cSJim Jagielski 		{
90*b1cdbd2cSJim Jagielski 			TreatAsNumber( sal_False );
91*b1cdbd2cSJim Jagielski 			SetFormatter( NULL, sal_True );
92*b1cdbd2cSJim Jagielski 			SetText( String() );
93*b1cdbd2cSJim Jagielski 		}
94*b1cdbd2cSJim Jagielski 	}
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski 	//==================================================================
97*b1cdbd2cSJim Jagielski 	// OFormatSampleControl
98*b1cdbd2cSJim Jagielski 	//==================================================================
99*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
OFormatSampleControl(Window * pParent,WinBits nWinStyle)100*b1cdbd2cSJim Jagielski 	OFormatSampleControl::OFormatSampleControl( Window* pParent, WinBits nWinStyle )
101*b1cdbd2cSJim Jagielski         :OFormatSampleControl_Base( PropertyControlType::Unknown, pParent, nWinStyle )
102*b1cdbd2cSJim Jagielski 	{
103*b1cdbd2cSJim Jagielski 	}
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
setValue(const Any & _rValue)106*b1cdbd2cSJim Jagielski 	void SAL_CALL OFormatSampleControl::setValue( const Any& _rValue ) throw (IllegalTypeException, RuntimeException)
107*b1cdbd2cSJim Jagielski 	{
108*b1cdbd2cSJim Jagielski         sal_Int32 nFormatKey = 0;
109*b1cdbd2cSJim Jagielski         if ( _rValue >>= nFormatKey )
110*b1cdbd2cSJim Jagielski 		{
111*b1cdbd2cSJim Jagielski 			// else set the new format key, the text will be reformatted
112*b1cdbd2cSJim Jagielski             getTypedControlWindow()->SetFormatKey( nFormatKey );
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski             SvNumberFormatter* pNF = getTypedControlWindow()->GetFormatter();
115*b1cdbd2cSJim Jagielski             const SvNumberformat* pEntry = pNF->GetEntry( nFormatKey );
116*b1cdbd2cSJim Jagielski             OSL_ENSURE( pEntry, "OFormatSampleControl::setValue: invalid format entry!" );
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski             const bool bIsTextFormat = ( pEntry && pEntry->IsTextFormat() );
119*b1cdbd2cSJim Jagielski             if ( bIsTextFormat )
120*b1cdbd2cSJim Jagielski                 getTypedControlWindow()->SetText( String( PcrRes( RID_STR_TEXT_FORMAT ) ) );
121*b1cdbd2cSJim Jagielski             else
122*b1cdbd2cSJim Jagielski                 getTypedControlWindow()->SetValue( pEntry ? getPreviewValue( *pEntry ) : 1234.56789 );
123*b1cdbd2cSJim Jagielski 		}
124*b1cdbd2cSJim Jagielski         else
125*b1cdbd2cSJim Jagielski 			getTypedControlWindow()->SetText( String() );
126*b1cdbd2cSJim Jagielski 	}
127*b1cdbd2cSJim Jagielski     //------------------------------------------------------------------
getPreviewValue(const SvNumberformat & i_rEntry)128*b1cdbd2cSJim Jagielski     double OFormatSampleControl::getPreviewValue( const SvNumberformat& i_rEntry )
129*b1cdbd2cSJim Jagielski     {
130*b1cdbd2cSJim Jagielski         double nValue = 1234.56789;
131*b1cdbd2cSJim Jagielski 		switch ( i_rEntry.GetType() & ~NUMBERFORMAT_DEFINED )
132*b1cdbd2cSJim Jagielski 		{
133*b1cdbd2cSJim Jagielski 			case NUMBERFORMAT_DATE:
134*b1cdbd2cSJim Jagielski                 {
135*b1cdbd2cSJim Jagielski                     Date aCurrentDate;
136*b1cdbd2cSJim Jagielski 	                static ::com::sun::star::util::Date STANDARD_DB_DATE(30,12,1899);
137*b1cdbd2cSJim Jagielski 	                nValue = ::dbtools::DBTypeConversion::toDouble(::dbtools::DBTypeConversion::toDate(static_cast<sal_Int32>(aCurrentDate.GetDate())),STANDARD_DB_DATE);
138*b1cdbd2cSJim Jagielski                 }
139*b1cdbd2cSJim Jagielski                 break;
140*b1cdbd2cSJim Jagielski 			case NUMBERFORMAT_TIME:
141*b1cdbd2cSJim Jagielski             case NUMBERFORMAT_DATETIME:
142*b1cdbd2cSJim Jagielski                 {
143*b1cdbd2cSJim Jagielski                     Time aCurrentTime;
144*b1cdbd2cSJim Jagielski                     nValue = ::dbtools::DBTypeConversion::toDouble(::dbtools::DBTypeConversion::toTime(aCurrentTime.GetTime()));
145*b1cdbd2cSJim Jagielski                 }
146*b1cdbd2cSJim Jagielski 				break;
147*b1cdbd2cSJim Jagielski 			default:
148*b1cdbd2cSJim Jagielski 				break;
149*b1cdbd2cSJim Jagielski 		}
150*b1cdbd2cSJim Jagielski         return nValue;
151*b1cdbd2cSJim Jagielski     }
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski     //------------------------------------------------------------------
getPreviewValue(SvNumberFormatter * _pNF,sal_Int32 _nFormatKey)154*b1cdbd2cSJim Jagielski     double OFormatSampleControl::getPreviewValue(SvNumberFormatter* _pNF,sal_Int32 _nFormatKey)
155*b1cdbd2cSJim Jagielski     {
156*b1cdbd2cSJim Jagielski         const SvNumberformat* pEntry = _pNF->GetEntry(_nFormatKey);
157*b1cdbd2cSJim Jagielski         DBG_ASSERT( pEntry, "OFormattedNumericControl::SetFormatDescription: invalid format key!" );
158*b1cdbd2cSJim Jagielski         double nValue = 1234.56789;
159*b1cdbd2cSJim Jagielski 		if ( pEntry )
160*b1cdbd2cSJim Jagielski             nValue = getPreviewValue( *pEntry );
161*b1cdbd2cSJim Jagielski         return nValue;
162*b1cdbd2cSJim Jagielski     }
163*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
getValue()164*b1cdbd2cSJim Jagielski 	Any SAL_CALL OFormatSampleControl::getValue() throw (RuntimeException)
165*b1cdbd2cSJim Jagielski 	{
166*b1cdbd2cSJim Jagielski         Any aPropValue;
167*b1cdbd2cSJim Jagielski 		if ( getTypedControlWindow()->GetText().Len() )
168*b1cdbd2cSJim Jagielski             aPropValue <<= (sal_Int32)getTypedControlWindow()->GetFormatKey();
169*b1cdbd2cSJim Jagielski         return aPropValue;
170*b1cdbd2cSJim Jagielski 	}
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
getValueType()173*b1cdbd2cSJim Jagielski     Type SAL_CALL OFormatSampleControl::getValueType() throw (RuntimeException)
174*b1cdbd2cSJim Jagielski     {
175*b1cdbd2cSJim Jagielski         return ::getCppuType( static_cast< sal_Int32* >( NULL ) );
176*b1cdbd2cSJim Jagielski     }
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 	//==================================================================
179*b1cdbd2cSJim Jagielski 	// class OFormattedNumericControl
180*b1cdbd2cSJim Jagielski 	//==================================================================
181*b1cdbd2cSJim Jagielski 	DBG_NAME(OFormattedNumericControl);
182*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
OFormattedNumericControl(Window * pParent,WinBits nWinStyle)183*b1cdbd2cSJim Jagielski 	OFormattedNumericControl::OFormattedNumericControl( Window* pParent, WinBits nWinStyle )
184*b1cdbd2cSJim Jagielski         :OFormattedNumericControl_Base( PropertyControlType::Unknown, pParent, nWinStyle )
185*b1cdbd2cSJim Jagielski 	{
186*b1cdbd2cSJim Jagielski 		DBG_CTOR(OFormattedNumericControl,NULL);
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 		getTypedControlWindow()->TreatAsNumber(sal_True);
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski 		m_nLastDecimalDigits = getTypedControlWindow()->GetDecimalDigits();
191*b1cdbd2cSJim Jagielski 	}
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
~OFormattedNumericControl()194*b1cdbd2cSJim Jagielski 	OFormattedNumericControl::~OFormattedNumericControl()
195*b1cdbd2cSJim Jagielski 	{
196*b1cdbd2cSJim Jagielski 		DBG_DTOR(OFormattedNumericControl,NULL);
197*b1cdbd2cSJim Jagielski 	}
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
setValue(const Any & _rValue)200*b1cdbd2cSJim Jagielski 	void SAL_CALL OFormattedNumericControl::setValue( const Any& _rValue ) throw (IllegalTypeException, RuntimeException)
201*b1cdbd2cSJim Jagielski 	{
202*b1cdbd2cSJim Jagielski         double nValue( 0 );
203*b1cdbd2cSJim Jagielski         if ( _rValue >>= nValue )
204*b1cdbd2cSJim Jagielski 			getTypedControlWindow()->SetValue( nValue );
205*b1cdbd2cSJim Jagielski 		else
206*b1cdbd2cSJim Jagielski 			getTypedControlWindow()->SetText(String());
207*b1cdbd2cSJim Jagielski 	}
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
getValue()210*b1cdbd2cSJim Jagielski 	Any SAL_CALL OFormattedNumericControl::getValue() throw (RuntimeException)
211*b1cdbd2cSJim Jagielski 	{
212*b1cdbd2cSJim Jagielski         Any aPropValue;
213*b1cdbd2cSJim Jagielski 		if ( getTypedControlWindow()->GetText().Len() )
214*b1cdbd2cSJim Jagielski             aPropValue <<= (double)getTypedControlWindow()->GetValue();
215*b1cdbd2cSJim Jagielski         return aPropValue;
216*b1cdbd2cSJim Jagielski 	}
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
getValueType()219*b1cdbd2cSJim Jagielski     Type SAL_CALL OFormattedNumericControl::getValueType() throw (RuntimeException)
220*b1cdbd2cSJim Jagielski     {
221*b1cdbd2cSJim Jagielski         return ::getCppuType( static_cast< double* >( NULL ) );
222*b1cdbd2cSJim Jagielski     }
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
SetFormatDescription(const FormatDescription & rDesc)225*b1cdbd2cSJim Jagielski 	void OFormattedNumericControl::SetFormatDescription(const FormatDescription& rDesc)
226*b1cdbd2cSJim Jagielski 	{
227*b1cdbd2cSJim Jagielski 		sal_Bool bFallback = sal_True;
228*b1cdbd2cSJim Jagielski 
229*b1cdbd2cSJim Jagielski 		if (rDesc.pSupplier)
230*b1cdbd2cSJim Jagielski 		{
231*b1cdbd2cSJim Jagielski 			getTypedControlWindow()->TreatAsNumber(sal_True);
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski 			SvNumberFormatter* pFormatter = rDesc.pSupplier->GetNumberFormatter();
234*b1cdbd2cSJim Jagielski 			if (pFormatter != getTypedControlWindow()->GetFormatter())
235*b1cdbd2cSJim Jagielski 				getTypedControlWindow()->SetFormatter(pFormatter, sal_True);
236*b1cdbd2cSJim Jagielski 			getTypedControlWindow()->SetFormatKey(rDesc.nKey);
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski 			const SvNumberformat* pEntry = getTypedControlWindow()->GetFormatter()->GetEntry(getTypedControlWindow()->GetFormatKey());
239*b1cdbd2cSJim Jagielski 			DBG_ASSERT( pEntry, "OFormattedNumericControl::SetFormatDescription: invalid format key!" );
240*b1cdbd2cSJim Jagielski 			if ( pEntry )
241*b1cdbd2cSJim Jagielski 			{
242*b1cdbd2cSJim Jagielski 				switch (pEntry->GetType() & ~NUMBERFORMAT_DEFINED)
243*b1cdbd2cSJim Jagielski 				{
244*b1cdbd2cSJim Jagielski 					case NUMBERFORMAT_NUMBER:
245*b1cdbd2cSJim Jagielski 					case NUMBERFORMAT_CURRENCY:
246*b1cdbd2cSJim Jagielski 					case NUMBERFORMAT_SCIENTIFIC:
247*b1cdbd2cSJim Jagielski 					case NUMBERFORMAT_FRACTION:
248*b1cdbd2cSJim Jagielski 					case NUMBERFORMAT_PERCENT:
249*b1cdbd2cSJim Jagielski 						m_nLastDecimalDigits = getTypedControlWindow()->GetDecimalDigits();
250*b1cdbd2cSJim Jagielski 						break;
251*b1cdbd2cSJim Jagielski 					case NUMBERFORMAT_DATETIME:
252*b1cdbd2cSJim Jagielski 					case NUMBERFORMAT_DATE:
253*b1cdbd2cSJim Jagielski 					case NUMBERFORMAT_TIME:
254*b1cdbd2cSJim Jagielski 						m_nLastDecimalDigits = 7;
255*b1cdbd2cSJim Jagielski 						break;
256*b1cdbd2cSJim Jagielski 					default:
257*b1cdbd2cSJim Jagielski 						m_nLastDecimalDigits = 0;
258*b1cdbd2cSJim Jagielski 						break;
259*b1cdbd2cSJim Jagielski 				}
260*b1cdbd2cSJim Jagielski 				bFallback = sal_False;
261*b1cdbd2cSJim Jagielski 			}
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski 		}
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski 		if ( bFallback )
266*b1cdbd2cSJim Jagielski 		{
267*b1cdbd2cSJim Jagielski 			getTypedControlWindow()->TreatAsNumber(sal_False);
268*b1cdbd2cSJim Jagielski 			getTypedControlWindow()->SetFormatter(NULL, sal_True);
269*b1cdbd2cSJim Jagielski 			getTypedControlWindow()->SetText(String());
270*b1cdbd2cSJim Jagielski 			m_nLastDecimalDigits = 0;
271*b1cdbd2cSJim Jagielski 		}
272*b1cdbd2cSJim Jagielski 	}
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski 	//========================================================================
275*b1cdbd2cSJim Jagielski 	//= OFileUrlControl
276*b1cdbd2cSJim Jagielski 	//========================================================================
277*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
OFileUrlControl(Window * pParent,WinBits nWinStyle)278*b1cdbd2cSJim Jagielski     OFileUrlControl::OFileUrlControl( Window* pParent, WinBits nWinStyle )
279*b1cdbd2cSJim Jagielski         :OFileUrlControl_Base( PropertyControlType::Unknown, pParent, nWinStyle | WB_DROPDOWN )
280*b1cdbd2cSJim Jagielski     {
281*b1cdbd2cSJim Jagielski         getTypedControlWindow()->SetDropDownLineCount( 10 );
282*b1cdbd2cSJim Jagielski         getTypedControlWindow()->SetPlaceHolder( String( PcrRes( RID_EMBED_IMAGE_PLACEHOLDER ) ) ) ;
283*b1cdbd2cSJim Jagielski     }
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
~OFileUrlControl()286*b1cdbd2cSJim Jagielski     OFileUrlControl::~OFileUrlControl()
287*b1cdbd2cSJim Jagielski     {
288*b1cdbd2cSJim Jagielski     }
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
setValue(const Any & _rValue)291*b1cdbd2cSJim Jagielski 	void SAL_CALL OFileUrlControl::setValue( const Any& _rValue ) throw (IllegalTypeException, RuntimeException)
292*b1cdbd2cSJim Jagielski     {
293*b1cdbd2cSJim Jagielski         ::rtl::OUString sURL;
294*b1cdbd2cSJim Jagielski         if ( ( _rValue >>= sURL ) )
295*b1cdbd2cSJim Jagielski         {
296*b1cdbd2cSJim Jagielski             if ( sURL.indexOf( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.GraphicObject:"  ) ) ) == 0  )
297*b1cdbd2cSJim Jagielski                 getTypedControlWindow()->DisplayURL( getTypedControlWindow()->GetPlaceHolder() );
298*b1cdbd2cSJim Jagielski             else
299*b1cdbd2cSJim Jagielski                 getTypedControlWindow()->DisplayURL( sURL );
300*b1cdbd2cSJim Jagielski         }
301*b1cdbd2cSJim Jagielski         else
302*b1cdbd2cSJim Jagielski             getTypedControlWindow()->SetText( String() );
303*b1cdbd2cSJim Jagielski     }
304*b1cdbd2cSJim Jagielski 
305*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
getValue()306*b1cdbd2cSJim Jagielski 	Any SAL_CALL OFileUrlControl::getValue() throw (RuntimeException)
307*b1cdbd2cSJim Jagielski     {
308*b1cdbd2cSJim Jagielski         Any aPropValue;
309*b1cdbd2cSJim Jagielski         if ( getTypedControlWindow()->GetText().Len() )
310*b1cdbd2cSJim Jagielski             	aPropValue <<= (::rtl::OUString)getTypedControlWindow()->GetURL();
311*b1cdbd2cSJim Jagielski         return aPropValue;
312*b1cdbd2cSJim Jagielski     }
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
getValueType()315*b1cdbd2cSJim Jagielski     Type SAL_CALL OFileUrlControl::getValueType() throw (RuntimeException)
316*b1cdbd2cSJim Jagielski     {
317*b1cdbd2cSJim Jagielski         return ::getCppuType( static_cast< ::rtl::OUString* >( NULL ) );
318*b1cdbd2cSJim Jagielski     }
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski 	//========================================================================
321*b1cdbd2cSJim Jagielski 	//= OTimeDurationControl
322*b1cdbd2cSJim Jagielski 	//========================================================================
323*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
OTimeDurationControl(::Window * pParent,WinBits nWinStyle)324*b1cdbd2cSJim Jagielski     OTimeDurationControl::OTimeDurationControl( ::Window* pParent, WinBits nWinStyle )
325*b1cdbd2cSJim Jagielski         :ONumericControl( pParent, nWinStyle )
326*b1cdbd2cSJim Jagielski     {
327*b1cdbd2cSJim Jagielski         getTypedControlWindow()->SetUnit( FUNIT_CUSTOM );
328*b1cdbd2cSJim Jagielski         getTypedControlWindow()->SetCustomUnitText( String::CreateFromAscii( " ms" ) );
329*b1cdbd2cSJim Jagielski         getTypedControlWindow()->SetCustomConvertHdl( LINK( this, OTimeDurationControl, OnCustomConvert ) );
330*b1cdbd2cSJim Jagielski     }
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
~OTimeDurationControl()333*b1cdbd2cSJim Jagielski     OTimeDurationControl::~OTimeDurationControl()
334*b1cdbd2cSJim Jagielski     {
335*b1cdbd2cSJim Jagielski     }
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
getControlType()338*b1cdbd2cSJim Jagielski     ::sal_Int16 SAL_CALL OTimeDurationControl::getControlType() throw (::com::sun::star::uno::RuntimeException)
339*b1cdbd2cSJim Jagielski     {
340*b1cdbd2cSJim Jagielski         // don't use the base class'es method, it would claim we're a standard control, which
341*b1cdbd2cSJim Jagielski         // we in fact aren't
342*b1cdbd2cSJim Jagielski         return PropertyControlType::Unknown;
343*b1cdbd2cSJim Jagielski     }
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------
346*b1cdbd2cSJim Jagielski     IMPL_LINK( OTimeDurationControl, OnCustomConvert, MetricField*, /*pField*/ )
347*b1cdbd2cSJim Jagielski     {
348*b1cdbd2cSJim Jagielski         long nMultiplier = 1;
349*b1cdbd2cSJim Jagielski         if ( getTypedControlWindow()->GetCurUnitText().EqualsIgnoreCaseAscii( "ms" ) )
350*b1cdbd2cSJim Jagielski             nMultiplier = 1;
351*b1cdbd2cSJim Jagielski         if ( getTypedControlWindow()->GetCurUnitText().EqualsIgnoreCaseAscii( "s" ) )
352*b1cdbd2cSJim Jagielski             nMultiplier = 1000;
353*b1cdbd2cSJim Jagielski         else if ( getTypedControlWindow()->GetCurUnitText().EqualsIgnoreCaseAscii( "m" ) )
354*b1cdbd2cSJim Jagielski             nMultiplier = 1000 * 60;
355*b1cdbd2cSJim Jagielski         else if ( getTypedControlWindow()->GetCurUnitText().EqualsIgnoreCaseAscii( "h" ) )
356*b1cdbd2cSJim Jagielski             nMultiplier = 1000 * 60 * 60;
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski         getTypedControlWindow()->SetValue( getTypedControlWindow()->GetLastValue() * nMultiplier );
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski         return 0L;
361*b1cdbd2cSJim Jagielski     }
362*b1cdbd2cSJim Jagielski 
363*b1cdbd2cSJim Jagielski //............................................................................
364*b1cdbd2cSJim Jagielski } // namespace pcr
365*b1cdbd2cSJim Jagielski //............................................................................
366*b1cdbd2cSJim Jagielski 
367