1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: relfld.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_svx.hxx"
34 // include ---------------------------------------------------------------
36 #include <tools/ref.hxx>
39 // -----------------------------------------------------------------------
41 SvxRelativeField::SvxRelativeField( Window
* pParent
, WinBits nWinSize
) :
42 MetricField( pParent
, nWinSize
)
44 bNegativeEnabled
= FALSE
;
45 bRelativeMode
= FALSE
;
48 SetDecimalDigits( 2 );
53 // -----------------------------------------------------------------------
55 SvxRelativeField::SvxRelativeField( Window
* pParent
, const ResId
& rResId
) :
56 MetricField( pParent
, rResId
)
58 bNegativeEnabled
= FALSE
;
59 bRelativeMode
= FALSE
;
62 SetDecimalDigits( 2 );
67 // -----------------------------------------------------------------------
69 void SvxRelativeField::Modify()
71 MetricField::Modify();
75 String aStr
= GetText();
76 BOOL bNewMode
= bRelative
;
80 const sal_Unicode
* pStr
= aStr
.GetBuffer();
84 if( ( ( *pStr
< sal_Unicode( '0' ) ) || ( *pStr
> sal_Unicode( '9' ) ) ) &&
85 ( *pStr
!= sal_Unicode( '%' ) ) )
95 xub_StrLen nPos
= aStr
.Search( sal_Unicode( '%' ) );
97 if ( nPos
!= STRING_NOTFOUND
)
101 if ( bNewMode
!= bRelative
)
102 SetRelative( bNewMode
);
104 MetricField::Modify();
108 // -----------------------------------------------------------------------
110 void SvxRelativeField::EnableRelativeMode( USHORT nMin
,
111 USHORT nMax
, USHORT nStep
)
113 bRelativeMode
= TRUE
;
120 // -----------------------------------------------------------------------
122 void SvxRelativeField::SetRelative( BOOL bNewRelative
)
124 Selection aSelection
= GetSelection();
125 String aStr
= GetText();
130 SetDecimalDigits( 0 );
133 SetCustomUnitText( String( sal_Unicode( '%' ) ) );
134 SetUnit( FUNIT_CUSTOM
);
139 SetDecimalDigits( 2 );
140 SetMin( bNegativeEnabled
? -9999 : 0 );
146 SetSelection( aSelection
);