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 "AccessibleCellBase.hxx"
21 : #include "attrib.hxx"
22 : #include "scitems.hxx"
23 : #include "miscuno.hxx"
24 : #include "document.hxx"
25 : #include "docfunc.hxx"
26 : #include "docsh.hxx"
27 : #include "formulacell.hxx"
28 : #include "scresid.hxx"
29 : #include "sc.hrc"
30 : #include "unonames.hxx"
31 : #include "detfunc.hxx"
32 : #include "chgtrack.hxx"
33 :
34 : #include <com/sun/star/accessibility/AccessibleRole.hpp>
35 : #include <com/sun/star/accessibility/AccessibleStateType.hpp>
36 : #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
37 : #include <com/sun/star/sheet/XSpreadsheet.hpp>
38 : #include <com/sun/star/sheet/XSheetAnnotation.hpp>
39 : #include <com/sun/star/sheet/XSheetAnnotationAnchor.hpp>
40 : #include <com/sun/star/text/XSimpleText.hpp>
41 : #include <editeng/brushitem.hxx>
42 : #include <comphelper/sequence.hxx>
43 : #include <comphelper/servicehelper.hxx>
44 : #include <sfx2/objsh.hxx>
45 : #include <vcl/svapp.hxx>
46 :
47 : #include <float.h>
48 :
49 : using namespace ::com::sun::star;
50 : using namespace ::com::sun::star::accessibility;
51 :
52 : //===== internal ============================================================
53 :
54 32 : ScAccessibleCellBase::ScAccessibleCellBase(
55 : const uno::Reference<XAccessible>& rxParent,
56 : ScDocument* pDoc,
57 : const ScAddress& rCellAddress,
58 : sal_Int32 nIndex)
59 : :
60 : ScAccessibleContextBase(rxParent, AccessibleRole::TABLE_CELL),
61 : maCellAddress(rCellAddress),
62 : mpDoc(pDoc),
63 32 : mnIndex(nIndex)
64 : {
65 32 : }
66 :
67 32 : ScAccessibleCellBase::~ScAccessibleCellBase()
68 : {
69 32 : }
70 :
71 : //===== XAccessibleComponent ============================================
72 :
73 42 : bool SAL_CALL ScAccessibleCellBase::isVisible()
74 : throw (uno::RuntimeException, std::exception)
75 : {
76 42 : SolarMutexGuard aGuard;
77 42 : IsObjectValid();
78 : // test whether the cell is hidden (column/row - hidden/filtered)
79 42 : bool bVisible(true);
80 42 : if (mpDoc)
81 : {
82 42 : bool bColHidden = mpDoc->ColHidden(maCellAddress.Col(), maCellAddress.Tab());
83 42 : bool bRowHidden = mpDoc->RowHidden(maCellAddress.Row(), maCellAddress.Tab());
84 42 : bool bColFiltered = mpDoc->ColFiltered(maCellAddress.Col(), maCellAddress.Tab());
85 42 : bool bRowFiltered = mpDoc->RowFiltered(maCellAddress.Row(), maCellAddress.Tab());
86 :
87 42 : if (bColHidden || bColFiltered || bRowHidden || bRowFiltered)
88 0 : bVisible = false;
89 : }
90 42 : return bVisible;
91 : }
92 :
93 2 : sal_Int32 SAL_CALL ScAccessibleCellBase::getForeground()
94 : throw (uno::RuntimeException, std::exception)
95 : {
96 2 : SolarMutexGuard aGuard;
97 2 : IsObjectValid();
98 2 : sal_Int32 nColor(0);
99 2 : if (mpDoc)
100 : {
101 2 : SfxObjectShell* pObjSh = mpDoc->GetDocumentShell();
102 2 : if ( pObjSh )
103 : {
104 2 : uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
105 2 : if ( xSpreadDoc.is() )
106 : {
107 2 : uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
108 4 : uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
109 2 : if ( xIndex.is() )
110 : {
111 2 : uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
112 4 : uno::Reference<sheet::XSpreadsheet> xTable;
113 2 : if (aTable>>=xTable)
114 : {
115 2 : uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
116 2 : if (xCell.is())
117 : {
118 2 : uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
119 2 : if (xCellProps.is())
120 : {
121 2 : uno::Any aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_CCOLOR));
122 2 : aAny >>= nColor;
123 2 : }
124 2 : }
125 2 : }
126 2 : }
127 2 : }
128 : }
129 : }
130 2 : return nColor;
131 : }
132 :
133 2 : sal_Int32 SAL_CALL ScAccessibleCellBase::getBackground()
134 : throw (uno::RuntimeException, std::exception)
135 : {
136 2 : SolarMutexGuard aGuard;
137 2 : IsObjectValid();
138 2 : sal_Int32 nColor(0);
139 :
140 2 : if (mpDoc)
141 : {
142 2 : SfxObjectShell* pObjSh = mpDoc->GetDocumentShell();
143 2 : if ( pObjSh )
144 : {
145 2 : uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
146 2 : if ( xSpreadDoc.is() )
147 : {
148 2 : uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
149 4 : uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
150 2 : if ( xIndex.is() )
151 : {
152 2 : uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
153 4 : uno::Reference<sheet::XSpreadsheet> xTable;
154 2 : if (aTable>>=xTable)
155 : {
156 2 : uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
157 2 : if (xCell.is())
158 : {
159 2 : uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
160 2 : if (xCellProps.is())
161 : {
162 2 : uno::Any aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_CELLBACK));
163 2 : aAny >>= nColor;
164 2 : }
165 2 : }
166 2 : }
167 2 : }
168 2 : }
169 : }
170 : }
171 :
172 2 : return nColor;
173 : }
174 :
175 : //===== XInterface =====================================================
176 :
177 146 : uno::Any SAL_CALL ScAccessibleCellBase::queryInterface( uno::Type const & rType )
178 : throw (uno::RuntimeException, std::exception)
179 : {
180 146 : uno::Any aAny (ScAccessibleCellBaseImpl::queryInterface(rType));
181 146 : return aAny.hasValue() ? aAny : ScAccessibleContextBase::queryInterface(rType);
182 : }
183 :
184 948 : void SAL_CALL ScAccessibleCellBase::acquire()
185 : throw ()
186 : {
187 948 : ScAccessibleContextBase::acquire();
188 948 : }
189 :
190 948 : void SAL_CALL ScAccessibleCellBase::release()
191 : throw ()
192 : {
193 948 : ScAccessibleContextBase::release();
194 948 : }
195 :
196 : //===== XAccessibleContext ==============================================
197 :
198 : sal_Int32
199 8 : ScAccessibleCellBase::getAccessibleIndexInParent(void)
200 : throw (uno::RuntimeException, std::exception)
201 : {
202 8 : SolarMutexGuard aGuard;
203 8 : IsObjectValid();
204 8 : return mnIndex;
205 : }
206 :
207 : OUString SAL_CALL
208 56 : ScAccessibleCellBase::createAccessibleDescription(void)
209 : throw (uno::RuntimeException)
210 : {
211 56 : OUString sDescription = OUString(ScResId(STR_ACC_CELL_DESCR));
212 :
213 56 : return sDescription;
214 : }
215 :
216 : OUString SAL_CALL
217 32 : ScAccessibleCellBase::createAccessibleName(void)
218 : throw (uno::RuntimeException, std::exception)
219 : {
220 : // Document not needed, because only the cell address, but not the tablename is needed
221 : // always us OOO notation
222 32 : return maCellAddress.Format(SCA_VALID, NULL);
223 : }
224 :
225 : //===== XAccessibleValue ================================================
226 :
227 : uno::Any SAL_CALL
228 14 : ScAccessibleCellBase::getCurrentValue()
229 : throw (uno::RuntimeException, std::exception)
230 : {
231 14 : SolarMutexGuard aGuard;
232 14 : IsObjectValid();
233 14 : uno::Any aAny;
234 14 : if (mpDoc)
235 : {
236 14 : aAny <<= mpDoc->GetValue(maCellAddress);
237 : }
238 14 : return aAny;
239 : }
240 :
241 : sal_Bool SAL_CALL
242 12 : ScAccessibleCellBase::setCurrentValue( const uno::Any& aNumber )
243 : throw (uno::RuntimeException, std::exception)
244 : {
245 12 : SolarMutexGuard aGuard;
246 12 : IsObjectValid();
247 12 : double fValue = 0;
248 12 : bool bResult = false;
249 12 : if((aNumber >>= fValue) && mpDoc && mpDoc->GetDocumentShell())
250 : {
251 12 : uno::Reference<XAccessibleStateSet> xParentStates;
252 12 : if (getAccessibleParent().is())
253 : {
254 12 : uno::Reference<XAccessibleContext> xParentContext = getAccessibleParent()->getAccessibleContext();
255 12 : xParentStates = xParentContext->getAccessibleStateSet();
256 : }
257 12 : if (IsEditable(xParentStates))
258 : {
259 10 : ScDocShell* pDocShell = static_cast<ScDocShell*>(mpDoc->GetDocumentShell());
260 10 : bResult = pDocShell->GetDocFunc().SetValueCell(maCellAddress, fValue, false);
261 12 : }
262 : }
263 12 : return bResult;
264 : }
265 :
266 : uno::Any SAL_CALL
267 4 : ScAccessibleCellBase::getMaximumValue( )
268 : throw (uno::RuntimeException, std::exception)
269 : {
270 4 : uno::Any aAny;
271 4 : aAny <<= DBL_MAX;
272 :
273 4 : return aAny;
274 : }
275 :
276 : uno::Any SAL_CALL
277 4 : ScAccessibleCellBase::getMinimumValue( )
278 : throw (uno::RuntimeException, std::exception)
279 : {
280 4 : uno::Any aAny;
281 4 : aAny <<= -DBL_MAX;
282 :
283 4 : return aAny;
284 : }
285 :
286 : //===== XServiceInfo ====================================================
287 :
288 0 : OUString SAL_CALL ScAccessibleCellBase::getImplementationName(void)
289 : throw (uno::RuntimeException, std::exception)
290 : {
291 0 : return OUString("ScAccessibleCellBase");
292 : }
293 :
294 : //===== XTypeProvider ===================================================
295 :
296 0 : uno::Sequence< uno::Type > SAL_CALL ScAccessibleCellBase::getTypes()
297 : throw (uno::RuntimeException, std::exception)
298 : {
299 0 : return comphelper::concatSequences(ScAccessibleCellBaseImpl::getTypes(), ScAccessibleContextBase::getTypes());
300 : }
301 :
302 : uno::Sequence<sal_Int8> SAL_CALL
303 0 : ScAccessibleCellBase::getImplementationId(void)
304 : throw (uno::RuntimeException, std::exception)
305 : {
306 0 : return css::uno::Sequence<sal_Int8>();
307 : }
308 :
309 0 : bool ScAccessibleCellBase::IsEditable(
310 : const uno::Reference<XAccessibleStateSet>& rxParentStates)
311 : {
312 0 : bool bEditable(false);
313 0 : if (rxParentStates.is() && rxParentStates->contains(AccessibleStateType::EDITABLE))
314 0 : bEditable = true;
315 0 : return bEditable;
316 : }
317 :
318 0 : OUString SAL_CALL ScAccessibleCellBase::GetNote(void)
319 : throw (::com::sun::star::uno::RuntimeException)
320 : {
321 0 : SolarMutexGuard aGuard;
322 0 : IsObjectValid();
323 0 : OUString msNote;
324 0 : if (mpDoc)
325 : {
326 0 : SfxObjectShell* pObjSh = mpDoc->GetDocumentShell();
327 0 : if ( pObjSh )
328 : {
329 0 : uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
330 0 : if ( xSpreadDoc.is() )
331 : {
332 0 : uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
333 0 : uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
334 0 : if ( xIndex.is() )
335 : {
336 0 : uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
337 0 : uno::Reference<sheet::XSpreadsheet> xTable;
338 0 : if (aTable>>=xTable)
339 : {
340 0 : uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
341 0 : if (xCell.is())
342 : {
343 0 : uno::Reference <sheet::XSheetAnnotationAnchor> xAnnotationAnchor ( xCell, uno::UNO_QUERY);
344 0 : if(xAnnotationAnchor.is())
345 : {
346 0 : uno::Reference <sheet::XSheetAnnotation> xSheetAnnotation = xAnnotationAnchor->getAnnotation();
347 0 : if (xSheetAnnotation.is())
348 : {
349 0 : uno::Reference <text::XSimpleText> xText (xSheetAnnotation, uno::UNO_QUERY);
350 0 : if (xText.is())
351 : {
352 0 : msNote = xText->getString();
353 0 : }
354 0 : }
355 0 : }
356 0 : }
357 0 : }
358 0 : }
359 0 : }
360 : }
361 : }
362 0 : return msNote;
363 : }
364 :
365 : #include <com/sun/star/table/ShadowFormat.hpp>
366 :
367 0 : OUString SAL_CALL ScAccessibleCellBase::getShadowAttrs(void)
368 : throw (::com::sun::star::uno::RuntimeException)
369 : {
370 0 : SolarMutexGuard aGuard;
371 0 : IsObjectValid();
372 0 : table::ShadowFormat aShadowFmt;
373 0 : if (mpDoc)
374 : {
375 0 : SfxObjectShell* pObjSh = mpDoc->GetDocumentShell();
376 0 : if ( pObjSh )
377 : {
378 0 : uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
379 0 : if ( xSpreadDoc.is() )
380 : {
381 0 : uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
382 0 : uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
383 0 : if ( xIndex.is() )
384 : {
385 0 : uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
386 0 : uno::Reference<sheet::XSpreadsheet> xTable;
387 0 : if (aTable>>=xTable)
388 : {
389 0 : uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
390 0 : if (xCell.is())
391 : {
392 0 : uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
393 0 : if (xCellProps.is())
394 : {
395 0 : uno::Any aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_SHADOW));
396 0 : aAny >>= aShadowFmt;
397 0 : }
398 0 : }
399 0 : }
400 0 : }
401 0 : }
402 : }
403 : }
404 : //construct shadow attributes string
405 0 : OUString sShadowAttrs("Shadow:");
406 0 : OUString sInnerSplit(",");
407 0 : OUString sOuterSplit(";");
408 0 : sal_Int32 nLocationVal = 0;
409 0 : switch( aShadowFmt.Location )
410 : {
411 : case table::ShadowLocation_TOP_LEFT:
412 0 : nLocationVal = 1;
413 0 : break;
414 : case table::ShadowLocation_TOP_RIGHT:
415 0 : nLocationVal = 2;
416 0 : break;
417 : case table::ShadowLocation_BOTTOM_LEFT:
418 0 : nLocationVal = 3;
419 0 : break;
420 : case table::ShadowLocation_BOTTOM_RIGHT:
421 0 : nLocationVal = 4;
422 0 : break;
423 : default:
424 0 : break;
425 : }
426 : //if there is no shadow property for the cell
427 0 : if ( nLocationVal == 0 )
428 : {
429 0 : sShadowAttrs += sOuterSplit;
430 0 : return sShadowAttrs;
431 : }
432 : //else return all the shadow properties
433 0 : sShadowAttrs += "Location=";
434 0 : sShadowAttrs += OUString::number( (sal_Int32)nLocationVal );
435 0 : sShadowAttrs += sInnerSplit;
436 0 : sShadowAttrs += "ShadowWidth=";
437 0 : sShadowAttrs += OUString::number( (sal_Int32)aShadowFmt.ShadowWidth ) ;
438 0 : sShadowAttrs += sInnerSplit;
439 0 : sShadowAttrs += "IsTransparent=";
440 0 : sShadowAttrs += OUString::number( (int)aShadowFmt.IsTransparent ) ;
441 0 : sShadowAttrs += sInnerSplit;
442 0 : sShadowAttrs += "Color=";
443 0 : sShadowAttrs += OUString::number( (sal_Int32)aShadowFmt.Color );
444 0 : sShadowAttrs += sOuterSplit;
445 0 : return sShadowAttrs;
446 : }
447 :
448 : #include <com/sun/star/table/BorderLine.hpp>
449 :
450 0 : OUString SAL_CALL ScAccessibleCellBase::getBorderAttrs(void)
451 : throw (::com::sun::star::uno::RuntimeException)
452 : {
453 0 : SolarMutexGuard aGuard;
454 0 : IsObjectValid();
455 0 : table::BorderLine aTopBorder;
456 0 : table::BorderLine aBottomBorder;
457 0 : table::BorderLine aLeftBorder;
458 0 : table::BorderLine aRightBorder;
459 0 : if (mpDoc)
460 : {
461 0 : SfxObjectShell* pObjSh = mpDoc->GetDocumentShell();
462 0 : if ( pObjSh )
463 : {
464 0 : uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
465 0 : if ( xSpreadDoc.is() )
466 : {
467 0 : uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
468 0 : uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
469 0 : if ( xIndex.is() )
470 : {
471 0 : uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
472 0 : uno::Reference<sheet::XSpreadsheet> xTable;
473 0 : if (aTable>>=xTable)
474 : {
475 0 : uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
476 0 : if (xCell.is())
477 : {
478 0 : uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
479 0 : if (xCellProps.is())
480 : {
481 0 : uno::Any aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_TOPBORDER));
482 0 : aAny >>= aTopBorder;
483 0 : aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_BOTTBORDER));
484 0 : aAny >>= aBottomBorder;
485 0 : aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_LEFTBORDER));
486 0 : aAny >>= aLeftBorder;
487 0 : aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_RIGHTBORDER));
488 0 : aAny >>= aRightBorder;
489 0 : }
490 0 : }
491 0 : }
492 0 : }
493 0 : }
494 : }
495 : }
496 :
497 0 : Color aColor;
498 0 : bool bIn = mpDoc && mpDoc->IsCellInChangeTrack(maCellAddress,&aColor);
499 0 : if (bIn)
500 : {
501 0 : aTopBorder.Color = aColor.GetColor();
502 0 : aBottomBorder.Color = aColor.GetColor();
503 0 : aLeftBorder.Color = aColor.GetColor();
504 0 : aRightBorder.Color = aColor.GetColor();
505 0 : aTopBorder.OuterLineWidth =2;
506 0 : aBottomBorder.OuterLineWidth =2;
507 0 : aLeftBorder.OuterLineWidth =2;
508 0 : aRightBorder.OuterLineWidth =2;
509 : }
510 :
511 : //construct border attributes string
512 0 : OUString sBorderAttrs;
513 0 : OUString sInnerSplit(",");
514 0 : OUString sOuterSplit(";");
515 : //top border
516 : //if top of the cell has no border
517 0 : if ( aTopBorder.InnerLineWidth == 0 && aTopBorder.OuterLineWidth == 0 )
518 : {
519 0 : sBorderAttrs += "TopBorder:;";
520 : }
521 : else//add all the border properties to the return string.
522 : {
523 0 : sBorderAttrs += "TopBorder:Color=";
524 0 : sBorderAttrs += OUString::number( (sal_Int32)aTopBorder.Color );
525 0 : sBorderAttrs += sInnerSplit;
526 0 : sBorderAttrs += "InnerLineWidth=";
527 0 : sBorderAttrs += OUString::number( (sal_Int32)aTopBorder.InnerLineWidth );
528 0 : sBorderAttrs += sInnerSplit;
529 0 : sBorderAttrs += "OuterLineWidth=";
530 0 : sBorderAttrs += OUString::number( (sal_Int32)aTopBorder.OuterLineWidth );
531 0 : sBorderAttrs += sInnerSplit;
532 0 : sBorderAttrs += "LineDistance=";
533 0 : sBorderAttrs += OUString::number( (sal_Int32)aTopBorder.LineDistance );
534 0 : sBorderAttrs += sOuterSplit;
535 : }
536 : //bottom border
537 0 : if ( aBottomBorder.InnerLineWidth == 0 && aBottomBorder.OuterLineWidth == 0 )
538 : {
539 0 : sBorderAttrs += "BottomBorde:;";
540 : }
541 : else
542 : {
543 0 : sBorderAttrs += "BottomBorder:Color=";
544 0 : sBorderAttrs += OUString::number( (sal_Int32)aBottomBorder.Color );
545 0 : sBorderAttrs += sInnerSplit;
546 0 : sBorderAttrs += "InnerLineWidth=";
547 0 : sBorderAttrs += OUString::number( (sal_Int32)aBottomBorder.InnerLineWidth );
548 0 : sBorderAttrs += sInnerSplit;
549 0 : sBorderAttrs += "OuterLineWidth=";
550 0 : sBorderAttrs += OUString::number( (sal_Int32)aBottomBorder.OuterLineWidth );
551 0 : sBorderAttrs += sInnerSplit;
552 0 : sBorderAttrs += "LineDistance=";
553 0 : sBorderAttrs += OUString::number( (sal_Int32)aBottomBorder.LineDistance );
554 0 : sBorderAttrs += sOuterSplit;
555 : }
556 : //left border
557 0 : if ( aLeftBorder.InnerLineWidth == 0 && aLeftBorder.OuterLineWidth == 0 )
558 : {
559 0 : sBorderAttrs += "LeftBorder:;";
560 : }
561 : else
562 : {
563 0 : sBorderAttrs += "LeftBorder:Color=";
564 0 : sBorderAttrs += OUString::number( (sal_Int32)aLeftBorder.Color );
565 0 : sBorderAttrs += sInnerSplit;
566 0 : sBorderAttrs += "InnerLineWidth=";
567 0 : sBorderAttrs += OUString::number( (sal_Int32)aLeftBorder.InnerLineWidth );
568 0 : sBorderAttrs += sInnerSplit;
569 0 : sBorderAttrs += "OuterLineWidth=";
570 0 : sBorderAttrs += OUString::number( (sal_Int32)aLeftBorder.OuterLineWidth );
571 0 : sBorderAttrs += sInnerSplit;
572 0 : sBorderAttrs += "LineDistance=";
573 0 : sBorderAttrs += OUString::number( (sal_Int32)aLeftBorder.LineDistance );
574 0 : sBorderAttrs += sOuterSplit;
575 : }
576 : //right border
577 0 : if ( aRightBorder.InnerLineWidth == 0 && aRightBorder.OuterLineWidth == 0 )
578 : {
579 0 : sBorderAttrs += "RightBorder:;";
580 : }
581 : else
582 : {
583 0 : sBorderAttrs += "RightBorder:Color=";
584 0 : sBorderAttrs += OUString::number( (sal_Int32)aRightBorder.Color );
585 0 : sBorderAttrs += sInnerSplit;
586 0 : sBorderAttrs += "InnerLineWidth=";
587 0 : sBorderAttrs += OUString::number( (sal_Int32)aRightBorder.InnerLineWidth );
588 0 : sBorderAttrs += sInnerSplit;
589 0 : sBorderAttrs += "OuterLineWidth=";
590 0 : sBorderAttrs += OUString::number( (sal_Int32)aRightBorder.OuterLineWidth );
591 0 : sBorderAttrs += sInnerSplit;
592 0 : sBorderAttrs += "LineDistance=";
593 0 : sBorderAttrs += OUString::number( (sal_Int32)aRightBorder.LineDistance );
594 0 : sBorderAttrs += sOuterSplit;
595 : }
596 0 : return sBorderAttrs;
597 : }
598 : //end of cell attributes
599 :
600 0 : OUString SAL_CALL ScAccessibleCellBase::GetAllDisplayNote(void)
601 : throw (::com::sun::star::uno::RuntimeException)
602 : {
603 0 : OUString strNote;
604 0 : OUString strTrackText;
605 0 : if (mpDoc)
606 : {
607 0 : bool bLeftedge = false;
608 0 : mpDoc->GetCellChangeTrackNote(maCellAddress,strTrackText,bLeftedge);
609 : }
610 0 : if (!strTrackText.isEmpty())
611 : {
612 0 : ScDetectiveFunc::AppendChangTrackNoteSeparator(strTrackText);
613 0 : strNote = strTrackText;
614 : }
615 0 : strNote += GetNote();
616 0 : return strNote;
617 228 : }
618 :
619 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|