Version 4.0.2.1, tag libreoffice-4.0.2.1
[LibreOffice.git] / editeng / source / items / itemtype.cxx
blob2e2b55c5d828f13d4b307a7e272449fc789e1e0e
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <vcl/outdev.hxx>
21 #include <editeng/editrids.hrc>
22 #include <unotools/intlwrapper.hxx>
23 #include <unotools/localedatawrapper.hxx>
24 #include <editeng/itemtype.hxx>
25 #include <editeng/eerdll.hxx>
27 // -----------------------------------------------------------------------
29 XubString GetMetricText( long nVal, SfxMapUnit eSrcUnit, SfxMapUnit eDestUnit, const IntlWrapper* pIntl )
31 sal_Bool bNeg = sal_False;
32 long nRet = 0;
33 XubString sRet;
35 if ( nVal < 0 )
37 bNeg = sal_True;
38 nVal *= -1;
41 switch ( eDestUnit )
43 case SFX_MAPUNIT_100TH_MM:
44 case SFX_MAPUNIT_10TH_MM:
45 case SFX_MAPUNIT_MM:
46 case SFX_MAPUNIT_CM:
48 nRet = (long)OutputDevice::LogicToLogic(
49 nVal, (MapUnit)eSrcUnit, (MapUnit)SFX_MAPUNIT_100TH_MM );
51 switch ( eDestUnit )
53 case SFX_MAPUNIT_100TH_MM: nRet *= 1000; break;
54 case SFX_MAPUNIT_10TH_MM: nRet *= 100; break;
55 case SFX_MAPUNIT_MM: nRet *= 10; break;
56 default: ;//prevent warning
58 break;
61 case SFX_MAPUNIT_1000TH_INCH:
62 case SFX_MAPUNIT_100TH_INCH:
63 case SFX_MAPUNIT_10TH_INCH:
64 case SFX_MAPUNIT_INCH:
66 nRet = (long)OutputDevice::LogicToLogic(
67 nVal, (MapUnit)eSrcUnit, (MapUnit)SFX_MAPUNIT_1000TH_INCH );
69 switch ( eDestUnit )
71 case SFX_MAPUNIT_1000TH_INCH: nRet *= 1000; break;
72 case SFX_MAPUNIT_100TH_INCH: nRet *= 100; break;
73 case SFX_MAPUNIT_10TH_INCH: nRet *= 10; break;
74 default: ;//prevent warning
76 break;
79 case SFX_MAPUNIT_POINT:
80 case SFX_MAPUNIT_TWIP:
81 case SFX_MAPUNIT_PIXEL:
82 return String::CreateFromInt32( (long)OutputDevice::LogicToLogic(
83 nVal, (MapUnit)eSrcUnit, (MapUnit)eDestUnit ));
85 default:
86 OSL_FAIL( "not supported mapunit" );
87 return sRet;
90 if ( SFX_MAPUNIT_CM == eDestUnit || SFX_MAPUNIT_INCH == eDestUnit )
92 long nMod = nRet % 10;
94 if ( nMod > 4 )
95 nRet += 10 - nMod;
96 else if ( nMod > 0 )
97 nRet -= nMod;
100 if ( bNeg )
101 sRet += sal_Unicode('-');
103 long nDiff = 1000;
104 for( int nDigits = 4; nDigits; --nDigits, nDiff /= 10 )
106 if ( nRet < nDiff )
107 sRet += sal_Unicode('0');
108 else
109 sRet += String::CreateFromInt32( nRet / nDiff );
110 nRet %= nDiff;
111 if( 4 == nDigits )
113 if(pIntl)
114 sRet += pIntl->getLocaleData()->getNumDecimalSep();
115 else
116 sRet += ',';
117 if( !nRet )
119 sRet += sal_Unicode('0');
120 break;
123 else if( !nRet )
124 break;
126 return sRet;
129 // -----------------------------------------------------------------------
131 XubString GetSvxString( sal_uInt16 nId )
133 return EE_RESSTR( nId );
136 // -----------------------------------------------------------------------
138 XubString GetColorString( const Color& rCol )
140 XubString sStr;
142 ColorData nColData =
143 RGB_COLORDATA( rCol.GetRed(), rCol.GetGreen(), rCol.GetBlue() );
144 sal_uInt16 nColor = 0;
146 static ColorData aColAry[] = {
147 COL_BLACK, COL_BLUE, COL_GREEN, COL_CYAN,
148 COL_RED, COL_MAGENTA, COL_BROWN, COL_GRAY,
149 COL_LIGHTGRAY, COL_LIGHTBLUE, COL_LIGHTGREEN, COL_LIGHTCYAN,
150 COL_LIGHTRED, COL_LIGHTMAGENTA, COL_YELLOW, COL_WHITE };
152 while ( nColor < sizeof(aColAry)/sizeof(ColorData) &&
153 aColAry[nColor] != nColData )
155 nColor += 1;
158 if ( nColor < sizeof(aColAry)/sizeof(ColorData) )
159 sStr = EE_RESSTR( RID_SVXITEMS_COLOR_BEGIN + nColor + 1 );
161 if ( !sStr.Len() )
163 sStr.AppendAscii(RTL_CONSTASCII_STRINGPARAM( "RGB" ));
164 sStr += sal_Unicode('(');
165 sStr += String::CreateFromInt32( rCol.GetRed() );
166 sStr += cpDelim;
167 sStr += String::CreateFromInt32( rCol.GetGreen() );
168 sStr += cpDelim;
169 sStr += String::CreateFromInt32( rCol.GetBlue() );
170 sStr += sal_Unicode(')');
172 return sStr;
175 // -----------------------------------------------------------------------
177 sal_uInt16 GetMetricId( SfxMapUnit eUnit )
179 sal_uInt16 nId = RID_SVXITEMS_METRIC_MM;
181 switch ( eUnit )
183 case SFX_MAPUNIT_100TH_MM:
184 case SFX_MAPUNIT_10TH_MM:
185 case SFX_MAPUNIT_MM:
186 nId = RID_SVXITEMS_METRIC_MM;
187 break;
189 case SFX_MAPUNIT_CM:
190 nId = RID_SVXITEMS_METRIC_CM;
191 break;
193 case SFX_MAPUNIT_1000TH_INCH:
194 case SFX_MAPUNIT_100TH_INCH:
195 case SFX_MAPUNIT_10TH_INCH:
196 case SFX_MAPUNIT_INCH:
197 nId = RID_SVXITEMS_METRIC_INCH;
198 break;
200 case SFX_MAPUNIT_POINT:
201 nId = RID_SVXITEMS_METRIC_POINT;
202 break;
204 case SFX_MAPUNIT_TWIP:
205 nId = RID_SVXITEMS_METRIC_TWIP;
206 break;
208 case SFX_MAPUNIT_PIXEL:
209 nId = RID_SVXITEMS_METRIC_PIXEL;
210 break;
212 default:
213 OSL_FAIL( "not supported mapunit" );
215 return nId;
219 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */