Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
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/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
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 .
18 : */
19 :
20 : #include <svx/svxitems.hrc>
21 :
22 : #include <tools/stream.hxx>
23 : #include <tools/mapunit.hxx>
24 : #include <com/sun/star/table/BorderLine.hpp>
25 : #include <com/sun/star/table/ShadowLocation.hpp>
26 : #include <com/sun/star/table/TableBorder.hpp>
27 : #include <com/sun/star/table/ShadowFormat.hpp>
28 : #include <com/sun/star/table/CellRangeAddress.hpp>
29 : #include <com/sun/star/table/CellContentType.hpp>
30 : #include <com/sun/star/table/TableOrientation.hpp>
31 : #include <com/sun/star/util/SortField.hpp>
32 : #include <com/sun/star/util/SortFieldType.hpp>
33 : #include <com/sun/star/table/CellOrientation.hpp>
34 : #include <com/sun/star/table/CellAddress.hpp>
35 :
36 : #include <svx/algitem.hxx>
37 : #include <svx/dialmgr.hxx>
38 : #include <editeng/itemtype.hxx>
39 : #include <svx/unomid.hxx>
40 :
41 : using namespace ::rtl;
42 : using namespace ::com::sun::star;
43 :
44 0 : TYPEINIT1_FACTORY( SvxOrientationItem, SfxEnumItem, new SvxOrientationItem(SVX_ORIENTATION_STANDARD, 0) );
45 0 : TYPEINIT1_FACTORY( SvxMarginItem, SfxPoolItem, new SvxMarginItem(0) );
46 :
47 : // class SvxOrientationItem ----------------------------------------------
48 :
49 0 : SvxOrientationItem::SvxOrientationItem( const SvxCellOrientation eOrientation,
50 : const sal_uInt16 nId):
51 0 : SfxEnumItem( nId, (sal_uInt16)eOrientation )
52 : {
53 0 : }
54 :
55 0 : SvxOrientationItem::SvxOrientationItem( sal_Int32 nRotation, bool bStacked, const sal_uInt16 nId ) :
56 0 : SfxEnumItem( nId )
57 : {
58 0 : SetFromRotation( nRotation, bStacked );
59 0 : }
60 :
61 :
62 :
63 0 : SfxItemPresentation SvxOrientationItem::GetPresentation
64 : (
65 : SfxItemPresentation ePres,
66 : SfxMapUnit /*eCoreUnit*/,
67 : SfxMapUnit /*ePresUnit*/,
68 : OUString& rText, const IntlWrapper * ) const
69 : {
70 0 : switch ( ePres )
71 : {
72 : case SFX_ITEM_PRESENTATION_NONE:
73 0 : rText = OUString();
74 0 : return SFX_ITEM_PRESENTATION_NONE;
75 : case SFX_ITEM_PRESENTATION_NAMELESS:
76 : case SFX_ITEM_PRESENTATION_COMPLETE:
77 0 : rText = GetValueText( GetValue() );
78 0 : return SFX_ITEM_PRESENTATION_COMPLETE;
79 : default: ; //prevent warning
80 : }
81 0 : return SFX_ITEM_PRESENTATION_NONE;
82 : }
83 :
84 :
85 :
86 0 : bool SvxOrientationItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const
87 : {
88 0 : table::CellOrientation eUno = table::CellOrientation_STANDARD;
89 0 : switch ( (SvxCellOrientation)GetValue() )
90 : {
91 0 : case SVX_ORIENTATION_STANDARD: eUno = table::CellOrientation_STANDARD; break;
92 0 : case SVX_ORIENTATION_TOPBOTTOM: eUno = table::CellOrientation_TOPBOTTOM; break;
93 0 : case SVX_ORIENTATION_BOTTOMTOP: eUno = table::CellOrientation_BOTTOMTOP; break;
94 0 : case SVX_ORIENTATION_STACKED: eUno = table::CellOrientation_STACKED; break;
95 : }
96 0 : rVal <<= eUno;
97 0 : return true;
98 : }
99 :
100 0 : bool SvxOrientationItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ )
101 : {
102 : table::CellOrientation eOrient;
103 0 : if(!(rVal >>= eOrient))
104 : {
105 0 : sal_Int32 nValue = 0;
106 0 : if(!(rVal >>= nValue))
107 0 : return false;
108 0 : eOrient = (table::CellOrientation)nValue;
109 : }
110 0 : SvxCellOrientation eSvx = SVX_ORIENTATION_STANDARD;
111 0 : switch (eOrient)
112 : {
113 0 : case table::CellOrientation_STANDARD: eSvx = SVX_ORIENTATION_STANDARD; break;
114 0 : case table::CellOrientation_TOPBOTTOM: eSvx = SVX_ORIENTATION_TOPBOTTOM; break;
115 0 : case table::CellOrientation_BOTTOMTOP: eSvx = SVX_ORIENTATION_BOTTOMTOP; break;
116 0 : case table::CellOrientation_STACKED: eSvx = SVX_ORIENTATION_STACKED; break;
117 : default: ; //prevent warning
118 : }
119 0 : SetValue( (sal_uInt16)eSvx );
120 0 : return true;
121 : }
122 :
123 :
124 :
125 0 : OUString SvxOrientationItem::GetValueText( sal_uInt16 nVal ) const
126 : {
127 : DBG_ASSERT( nVal <= SVX_ORIENTATION_STACKED, "enum overflow!" );
128 0 : return SVX_RESSTR(RID_SVXITEMS_ORI_STANDARD + nVal);
129 : }
130 :
131 :
132 :
133 0 : SfxPoolItem* SvxOrientationItem::Clone( SfxItemPool* ) const
134 : {
135 0 : return new SvxOrientationItem( *this );
136 : }
137 :
138 :
139 :
140 0 : SfxPoolItem* SvxOrientationItem::Create( SvStream& rStream, sal_uInt16 ) const
141 : {
142 : sal_uInt16 nVal;
143 0 : rStream.ReadUInt16( nVal );
144 0 : return new SvxOrientationItem( (SvxCellOrientation)nVal, Which() );
145 : }
146 :
147 :
148 :
149 0 : sal_uInt16 SvxOrientationItem::GetValueCount() const
150 : {
151 0 : return SVX_ORIENTATION_STACKED + 1; // letzter Enum-Wert + 1
152 : }
153 :
154 :
155 :
156 0 : bool SvxOrientationItem::IsStacked() const
157 : {
158 0 : return static_cast< SvxCellOrientation >( GetValue() ) == SVX_ORIENTATION_STACKED;
159 : }
160 :
161 0 : sal_Int32 SvxOrientationItem::GetRotation( sal_Int32 nStdAngle ) const
162 : {
163 0 : sal_Int32 nAngle = nStdAngle;
164 0 : switch( static_cast< SvxCellOrientation >( GetValue() ) )
165 : {
166 0 : case SVX_ORIENTATION_BOTTOMTOP: nAngle = 9000;break;
167 0 : case SVX_ORIENTATION_TOPBOTTOM: nAngle = 27000;break;
168 : default: ; //prevent warning
169 : }
170 0 : return nAngle;
171 : }
172 :
173 0 : void SvxOrientationItem::SetFromRotation( sal_Int32 nRotation, bool bStacked )
174 : {
175 0 : if( bStacked )
176 : {
177 0 : SetValue( SVX_ORIENTATION_STACKED );
178 : }
179 0 : else switch( nRotation )
180 : {
181 0 : case 9000: SetValue( SVX_ORIENTATION_BOTTOMTOP ); break;
182 0 : case 27000: SetValue( SVX_ORIENTATION_TOPBOTTOM ); break;
183 0 : default: SetValue( SVX_ORIENTATION_STANDARD );
184 : }
185 0 : }
186 :
187 : // class SvxMarginItem ---------------------------------------------------
188 :
189 0 : SvxMarginItem::SvxMarginItem( const sal_uInt16 nId ) :
190 :
191 : SfxPoolItem( nId ),
192 :
193 : nLeftMargin ( 20 ),
194 : nTopMargin ( 20 ),
195 : nRightMargin ( 20 ),
196 0 : nBottomMargin( 20 )
197 : {
198 0 : }
199 :
200 :
201 :
202 0 : SvxMarginItem::SvxMarginItem( sal_Int16 nLeft,
203 : sal_Int16 nTop,
204 : sal_Int16 nRight,
205 : sal_Int16 nBottom,
206 : const sal_uInt16 nId ) :
207 : SfxPoolItem( nId ),
208 :
209 : nLeftMargin ( nLeft ),
210 : nTopMargin ( nTop ),
211 : nRightMargin ( nRight ),
212 0 : nBottomMargin( nBottom )
213 : {
214 0 : }
215 :
216 :
217 :
218 :
219 0 : SvxMarginItem::SvxMarginItem( const SvxMarginItem& rItem ) :
220 :
221 0 : SfxPoolItem( rItem.Which() )
222 : {
223 0 : nLeftMargin = rItem.nLeftMargin;
224 0 : nTopMargin = rItem.nTopMargin;
225 0 : nRightMargin = rItem.nRightMargin;
226 0 : nBottomMargin = rItem.nBottomMargin;
227 0 : }
228 :
229 :
230 :
231 0 : SfxItemPresentation SvxMarginItem::GetPresentation
232 : (
233 : SfxItemPresentation ePres,
234 : SfxMapUnit eCoreUnit,
235 : SfxMapUnit ePresUnit,
236 : OUString& rText, const IntlWrapper *pIntl
237 : ) const
238 : {
239 0 : OUString cpDelimTmp = OUString(cpDelim);
240 :
241 0 : switch ( ePres )
242 : {
243 : case SFX_ITEM_PRESENTATION_NONE:
244 0 : rText = OUString();
245 0 : return SFX_ITEM_PRESENTATION_NONE;
246 : case SFX_ITEM_PRESENTATION_NAMELESS:
247 : {
248 0 : rText = GetMetricText( (long)nLeftMargin, eCoreUnit, ePresUnit, pIntl ) +
249 0 : cpDelimTmp +
250 0 : GetMetricText( (long)nTopMargin, eCoreUnit, ePresUnit, pIntl ) +
251 0 : cpDelimTmp +
252 0 : GetMetricText( (long)nRightMargin, eCoreUnit, ePresUnit, pIntl ) +
253 0 : cpDelimTmp +
254 0 : GetMetricText( (long)nBottomMargin, eCoreUnit, ePresUnit, pIntl );
255 0 : return SFX_ITEM_PRESENTATION_NAMELESS;
256 : }
257 : case SFX_ITEM_PRESENTATION_COMPLETE:
258 : {
259 0 : rText = SVX_RESSTR(RID_SVXITEMS_MARGIN_LEFT) +
260 0 : GetMetricText( (long)nLeftMargin, eCoreUnit, ePresUnit, pIntl ) +
261 0 : " " + EE_RESSTR(GetMetricId(ePresUnit)) +
262 0 : cpDelimTmp +
263 0 : SVX_RESSTR(RID_SVXITEMS_MARGIN_TOP) +
264 0 : GetMetricText( (long)nTopMargin, eCoreUnit, ePresUnit, pIntl ) +
265 0 : " " + EE_RESSTR(GetMetricId(ePresUnit)) +
266 0 : cpDelimTmp +
267 0 : SVX_RESSTR(RID_SVXITEMS_MARGIN_RIGHT) +
268 0 : GetMetricText( (long)nRightMargin, eCoreUnit, ePresUnit, pIntl ) +
269 0 : " " + EE_RESSTR(GetMetricId(ePresUnit)) +
270 0 : cpDelimTmp +
271 0 : SVX_RESSTR(RID_SVXITEMS_MARGIN_BOTTOM) +
272 0 : GetMetricText( (long)nBottomMargin, eCoreUnit, ePresUnit, pIntl ) +
273 0 : " " + EE_RESSTR(GetMetricId(ePresUnit));
274 0 : return SFX_ITEM_PRESENTATION_COMPLETE;
275 : }
276 : default: ; //prevent warning
277 : }
278 0 : return SFX_ITEM_PRESENTATION_NONE;
279 : }
280 :
281 :
282 :
283 0 : bool SvxMarginItem::operator==( const SfxPoolItem& rItem ) const
284 : {
285 : DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
286 :
287 0 : return ( ( nLeftMargin == ( (SvxMarginItem&)rItem ).nLeftMargin ) &&
288 0 : ( nTopMargin == ( (SvxMarginItem&)rItem ).nTopMargin ) &&
289 0 : ( nRightMargin == ( (SvxMarginItem&)rItem ).nRightMargin ) &&
290 0 : ( nBottomMargin == ( (SvxMarginItem&)rItem ).nBottomMargin ) );
291 : }
292 :
293 :
294 :
295 0 : SfxPoolItem* SvxMarginItem::Clone( SfxItemPool* ) const
296 : {
297 0 : return new SvxMarginItem(*this);
298 : }
299 :
300 :
301 :
302 0 : SfxPoolItem* SvxMarginItem::Create( SvStream& rStream, sal_uInt16 ) const
303 : {
304 : sal_Int16 nLeft;
305 : sal_Int16 nTop;
306 : sal_Int16 nRight;
307 : sal_Int16 nBottom;
308 0 : rStream.ReadInt16( nLeft );
309 0 : rStream.ReadInt16( nTop );
310 0 : rStream.ReadInt16( nRight );
311 0 : rStream.ReadInt16( nBottom );
312 0 : return new SvxMarginItem( nLeft, nTop, nRight, nBottom, Which() );
313 : }
314 :
315 :
316 :
317 0 : SvStream& SvxMarginItem::Store( SvStream &rStream, sal_uInt16 /*nItemVersion*/) const
318 : {
319 0 : rStream.WriteInt16( nLeftMargin );
320 0 : rStream.WriteInt16( nTopMargin );
321 0 : rStream.WriteInt16( nRightMargin );
322 0 : rStream.WriteInt16( nBottomMargin );
323 0 : return rStream;
324 : }
325 :
326 :
327 :
328 :
329 0 : bool SvxMarginItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
330 : {
331 0 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
332 0 : nMemberId &= ~CONVERT_TWIPS;
333 0 : switch ( nMemberId )
334 : {
335 : // jetzt alles signed
336 : case MID_MARGIN_L_MARGIN:
337 0 : rVal <<= (sal_Int32)( bConvert ? convertTwipToMm100(nLeftMargin) : nLeftMargin );
338 0 : break;
339 : case MID_MARGIN_R_MARGIN:
340 0 : rVal <<= (sal_Int32)( bConvert ? convertTwipToMm100(nRightMargin) : nRightMargin );
341 0 : break;
342 : case MID_MARGIN_UP_MARGIN:
343 0 : rVal <<= (sal_Int32)( bConvert ? convertTwipToMm100(nTopMargin) : nTopMargin );
344 0 : break;
345 : case MID_MARGIN_LO_MARGIN:
346 0 : rVal <<= (sal_Int32)( bConvert ? convertTwipToMm100(nBottomMargin) : nBottomMargin );
347 0 : break;
348 : default:
349 : OSL_FAIL("unknown MemberId");
350 0 : return false;
351 : }
352 0 : return true;
353 : }
354 :
355 :
356 :
357 0 : bool SvxMarginItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
358 : {
359 0 : bool bConvert = ( ( nMemberId & CONVERT_TWIPS ) != 0 );
360 0 : long nMaxVal = bConvert ? convertTwipToMm100(SHRT_MAX) : SHRT_MAX; // Members sind sal_Int16
361 0 : sal_Int32 nVal = 0;
362 0 : if(!(rVal >>= nVal) || (nVal > nMaxVal))
363 0 : return false;
364 :
365 0 : switch ( nMemberId & ~CONVERT_TWIPS )
366 : {
367 : case MID_MARGIN_L_MARGIN:
368 0 : nLeftMargin = (sal_Int16)( bConvert ? convertMm100ToTwip(nVal) : nVal );
369 0 : break;
370 : case MID_MARGIN_R_MARGIN:
371 0 : nRightMargin = (sal_Int16)( bConvert ? convertMm100ToTwip(nVal) : nVal );
372 0 : break;
373 : case MID_MARGIN_UP_MARGIN:
374 0 : nTopMargin = (sal_Int16)( bConvert ? convertMm100ToTwip(nVal) : nVal );
375 0 : break;
376 : case MID_MARGIN_LO_MARGIN:
377 0 : nBottomMargin = (sal_Int16)( bConvert ? convertMm100ToTwip(nVal) : nVal );
378 0 : break;
379 : default:
380 : OSL_FAIL("unknown MemberId");
381 0 : return false;
382 : }
383 0 : return true;
384 : }
385 :
386 :
387 :
388 0 : void SvxMarginItem::SetLeftMargin( sal_Int16 nLeft )
389 : {
390 0 : nLeftMargin = nLeft;
391 0 : }
392 :
393 :
394 :
395 0 : void SvxMarginItem::SetTopMargin( sal_Int16 nTop )
396 : {
397 0 : nTopMargin = nTop;
398 0 : }
399 :
400 :
401 :
402 0 : void SvxMarginItem::SetRightMargin( sal_Int16 nRight )
403 : {
404 0 : nRightMargin = nRight;
405 0 : }
406 :
407 :
408 :
409 0 : void SvxMarginItem::SetBottomMargin( sal_Int16 nBottom )
410 : {
411 0 : nBottomMargin = nBottom;
412 0 : }
413 :
414 :
415 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|