Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include "AccessibleTableBase.hxx"
30 : : #include "miscuno.hxx"
31 : : #include "document.hxx"
32 : : #include "scresid.hxx"
33 : : #include "sc.hrc"
34 : :
35 : : #include <com/sun/star/accessibility/AccessibleRole.hpp>
36 : : #include <com/sun/star/accessibility/AccessibleTableModelChange.hpp>
37 : : #include <com/sun/star/accessibility/AccessibleEventId.hpp>
38 : : #include <comphelper/sequence.hxx>
39 : : #include <comphelper/servicehelper.hxx>
40 : : #include <vcl/svapp.hxx>
41 : :
42 : :
43 : : using namespace ::com::sun::star;
44 : : using namespace ::com::sun::star::accessibility;
45 : :
46 : : //===== internal ============================================================
47 : :
48 : 5 : ScAccessibleTableBase::ScAccessibleTableBase(
49 : : const uno::Reference<XAccessible>& rxParent,
50 : : ScDocument* pDoc,
51 : : const ScRange& rRange)
52 : : :
53 : : ScAccessibleContextBase (rxParent, AccessibleRole::TABLE),
54 : : maRange(rRange),
55 : 5 : mpDoc(pDoc)
56 : : {
57 : 5 : }
58 : :
59 : 5 : ScAccessibleTableBase::~ScAccessibleTableBase()
60 : : {
61 [ - + ]: 5 : }
62 : :
63 : 5 : void SAL_CALL ScAccessibleTableBase::disposing()
64 : : {
65 [ + - ]: 5 : SolarMutexGuard aGuard;
66 : 5 : mpDoc = NULL;
67 : :
68 [ + - ][ + - ]: 5 : ScAccessibleContextBase::disposing();
69 : 5 : }
70 : :
71 : : //===== XInterface =====================================================
72 : :
73 : 99 : uno::Any SAL_CALL ScAccessibleTableBase::queryInterface( uno::Type const & rType )
74 : : throw (uno::RuntimeException)
75 : : {
76 [ + - ]: 99 : uno::Any aAny (ScAccessibleTableBaseImpl::queryInterface(rType));
77 [ + + ][ + - ]: 99 : return aAny.hasValue() ? aAny : ScAccessibleContextBase::queryInterface(rType);
78 : : }
79 : :
80 : 543 : void SAL_CALL ScAccessibleTableBase::acquire()
81 : : throw ()
82 : : {
83 : 543 : ScAccessibleContextBase::acquire();
84 : 543 : }
85 : :
86 : 543 : void SAL_CALL ScAccessibleTableBase::release()
87 : : throw ()
88 : : {
89 : 543 : ScAccessibleContextBase::release();
90 : 543 : }
91 : :
92 : : //===== XAccessibleTable ================================================
93 : :
94 : 0 : sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleRowCount( )
95 : : throw (uno::RuntimeException)
96 : : {
97 [ # # ]: 0 : SolarMutexGuard aGuard;
98 [ # # ]: 0 : IsObjectValid();
99 [ # # ]: 0 : return maRange.aEnd.Row() - maRange.aStart.Row() + 1;
100 : : }
101 : :
102 : 0 : sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleColumnCount( )
103 : : throw (uno::RuntimeException)
104 : : {
105 [ # # ]: 0 : SolarMutexGuard aGuard;
106 [ # # ]: 0 : IsObjectValid();
107 [ # # ]: 0 : return maRange.aEnd.Col() - maRange.aStart.Col() + 1;
108 : : }
109 : :
110 : 0 : ::rtl::OUString SAL_CALL ScAccessibleTableBase::getAccessibleRowDescription( sal_Int32 nRow )
111 : : throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
112 : : {
113 : : OSL_FAIL("Here should be a implementation to fill the description");
114 : :
115 [ # # ][ # # ]: 0 : if ((nRow > (maRange.aEnd.Row() - maRange.aStart.Row())) || (nRow < 0))
[ # # ]
116 [ # # ]: 0 : throw lang::IndexOutOfBoundsException();
117 : :
118 : : //setAccessibleRowDescription(nRow, xAccessible); // to remember the created Description
119 : 0 : return rtl::OUString();
120 : : }
121 : :
122 : 0 : ::rtl::OUString SAL_CALL ScAccessibleTableBase::getAccessibleColumnDescription( sal_Int32 nColumn )
123 : : throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
124 : : {
125 : : OSL_FAIL("Here should be a implementation to fill the description");
126 : :
127 [ # # ][ # # ]: 0 : if ((nColumn > (maRange.aEnd.Col() - maRange.aStart.Col())) || (nColumn < 0))
[ # # ]
128 [ # # ]: 0 : throw lang::IndexOutOfBoundsException();
129 : :
130 : : //setAccessibleColumnDescription(nColumn, xAccessible); // to remember the created Description
131 : 0 : return rtl::OUString();
132 : : }
133 : :
134 : 0 : sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleRowExtentAt( sal_Int32 nRow, sal_Int32 nColumn )
135 : : throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
136 : : {
137 [ # # ]: 0 : SolarMutexGuard aGuard;
138 [ # # ]: 0 : IsObjectValid();
139 : :
140 [ # # ]: 0 : if ((nColumn > (maRange.aEnd.Col() - maRange.aStart.Col())) || (nColumn < 0) ||
[ # # # # ]
[ # # ][ # # ]
141 : 0 : (nRow > (maRange.aEnd.Row() - maRange.aStart.Row())) || (nRow < 0))
142 [ # # ]: 0 : throw lang::IndexOutOfBoundsException();
143 : :
144 : 0 : sal_Int32 nCount(1); // the same cell
145 : 0 : nRow += maRange.aStart.Row();
146 : 0 : nColumn += maRange.aStart.Col();
147 : :
148 [ # # ]: 0 : if (mpDoc)
149 : : {
150 : 0 : SCROW nEndRow(0);
151 : 0 : SCCOL nEndCol(0);
152 [ # # ][ # # ]: 0 : if (mpDoc->ExtendMerge(static_cast<SCCOL>(nColumn), static_cast<SCROW>(nRow),
153 : 0 : nEndCol, nEndRow, maRange.aStart.Tab()))
154 : : {
155 [ # # ]: 0 : if (nEndRow > nRow)
156 : 0 : nCount = nEndRow - nRow + 1;
157 : : }
158 : : }
159 : :
160 [ # # ]: 0 : return nCount;
161 : : }
162 : :
163 : 0 : sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleColumnExtentAt( sal_Int32 nRow, sal_Int32 nColumn )
164 : : throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
165 : : {
166 [ # # ]: 0 : SolarMutexGuard aGuard;
167 [ # # ]: 0 : IsObjectValid();
168 : :
169 [ # # ]: 0 : if ((nColumn > (maRange.aEnd.Col() - maRange.aStart.Col())) || (nColumn < 0) ||
[ # # # # ]
[ # # ][ # # ]
170 : 0 : (nRow > (maRange.aEnd.Row() - maRange.aStart.Row())) || (nRow < 0))
171 [ # # ]: 0 : throw lang::IndexOutOfBoundsException();
172 : :
173 : 0 : sal_Int32 nCount(1); // the same cell
174 : 0 : nRow += maRange.aStart.Row();
175 : 0 : nColumn += maRange.aStart.Col();
176 : :
177 [ # # ]: 0 : if (mpDoc)
178 : : {
179 : 0 : SCROW nEndRow(0);
180 : 0 : SCCOL nEndCol(0);
181 [ # # ][ # # ]: 0 : if (mpDoc->ExtendMerge(static_cast<SCCOL>(nColumn), static_cast<SCROW>(nRow),
182 : 0 : nEndCol, nEndRow, maRange.aStart.Tab()))
183 : : {
184 [ # # ]: 0 : if (nEndCol > nColumn)
185 : 0 : nCount = nEndCol - nColumn + 1;
186 : : }
187 : : }
188 : :
189 [ # # ]: 0 : return nCount;
190 : : }
191 : :
192 : 0 : uno::Reference< XAccessibleTable > SAL_CALL ScAccessibleTableBase::getAccessibleRowHeaders( )
193 : : throw (uno::RuntimeException)
194 : : {
195 : 0 : uno::Reference< XAccessibleTable > xAccessibleTable;
196 : : OSL_FAIL("Here should be a implementation to fill the row headers");
197 : :
198 : : //CommitChange
199 : 0 : return xAccessibleTable;
200 : : }
201 : :
202 : 0 : uno::Reference< XAccessibleTable > SAL_CALL ScAccessibleTableBase::getAccessibleColumnHeaders( )
203 : : throw (uno::RuntimeException)
204 : : {
205 : 0 : uno::Reference< XAccessibleTable > xAccessibleTable;
206 : : OSL_FAIL("Here should be a implementation to fill the column headers");
207 : :
208 : : //CommitChange
209 : 0 : return xAccessibleTable;
210 : : }
211 : :
212 : 0 : uno::Sequence< sal_Int32 > SAL_CALL ScAccessibleTableBase::getSelectedAccessibleRows( )
213 : : throw (uno::RuntimeException)
214 : : {
215 : : OSL_FAIL("not implemented yet");
216 : 0 : uno::Sequence< sal_Int32 > aSequence;
217 : 0 : return aSequence;
218 : : }
219 : :
220 : 0 : uno::Sequence< sal_Int32 > SAL_CALL ScAccessibleTableBase::getSelectedAccessibleColumns( )
221 : : throw (uno::RuntimeException)
222 : : {
223 : : OSL_FAIL("not implemented yet");
224 : 0 : uno::Sequence< sal_Int32 > aSequence;
225 : 0 : return aSequence;
226 : : }
227 : :
228 : 0 : sal_Bool SAL_CALL ScAccessibleTableBase::isAccessibleRowSelected( sal_Int32 /* nRow */ )
229 : : throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
230 : : {
231 : : OSL_FAIL("not implemented yet");
232 : 0 : return false;
233 : : }
234 : :
235 : 0 : sal_Bool SAL_CALL ScAccessibleTableBase::isAccessibleColumnSelected( sal_Int32 /* nColumn */ )
236 : : throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
237 : : {
238 : : OSL_FAIL("not implemented yet");
239 : 0 : return false;
240 : : }
241 : :
242 : 0 : uno::Reference< XAccessible > SAL_CALL ScAccessibleTableBase::getAccessibleCellAt( sal_Int32 /* nRow */, sal_Int32 /* nColumn */ )
243 : : throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
244 : : {
245 : : OSL_FAIL("not implemented yet");
246 : 0 : uno::Reference< XAccessible > xAccessible;
247 : 0 : return xAccessible;
248 : : }
249 : :
250 : 0 : uno::Reference< XAccessible > SAL_CALL ScAccessibleTableBase::getAccessibleCaption( )
251 : : throw (uno::RuntimeException)
252 : : {
253 : : OSL_FAIL("not implemented yet");
254 : 0 : uno::Reference< XAccessible > xAccessible;
255 : 0 : return xAccessible;
256 : : }
257 : :
258 : 0 : uno::Reference< XAccessible > SAL_CALL ScAccessibleTableBase::getAccessibleSummary( )
259 : : throw (uno::RuntimeException)
260 : : {
261 : : OSL_FAIL("not implemented yet");
262 : 0 : uno::Reference< XAccessible > xAccessible;
263 : 0 : return xAccessible;
264 : : }
265 : :
266 : 0 : sal_Bool SAL_CALL ScAccessibleTableBase::isAccessibleSelected( sal_Int32 /* nRow */, sal_Int32 /* nColumn */ )
267 : : throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
268 : : {
269 : : OSL_FAIL("not implemented yet");
270 : 0 : return false;
271 : : }
272 : :
273 : : //===== XAccessibleExtendedTable ========================================
274 : :
275 : 11 : sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleIndex( sal_Int32 nRow, sal_Int32 nColumn )
276 : : throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
277 : : {
278 [ + - ]: 11 : SolarMutexGuard aGuard;
279 [ + - ]: 11 : IsObjectValid();
280 : :
281 [ + - ]: 22 : if (nRow > (maRange.aEnd.Row() - maRange.aStart.Row()) ||
[ + - + - ]
[ - + ][ - + ]
282 : : nRow < 0 ||
283 : 11 : nColumn > (maRange.aEnd.Col() - maRange.aStart.Col()) ||
284 : : nColumn < 0)
285 [ # # ]: 0 : throw lang::IndexOutOfBoundsException();
286 : :
287 : 11 : nRow -= maRange.aStart.Row();
288 : 11 : nColumn -= maRange.aStart.Col();
289 [ + - ]: 11 : return (nRow * (maRange.aEnd.Col() + 1)) + nColumn;
290 : : }
291 : :
292 : 0 : sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleRow( sal_Int32 nChildIndex )
293 : : throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
294 : : {
295 [ # # ]: 0 : SolarMutexGuard aGuard;
296 [ # # ]: 0 : IsObjectValid();
297 : :
298 [ # # ][ # # ]: 0 : if (nChildIndex >= getAccessibleChildCount() || nChildIndex < 0)
[ # # ][ # # ]
299 [ # # ]: 0 : throw lang::IndexOutOfBoundsException();
300 : :
301 [ # # ]: 0 : return nChildIndex / (maRange.aEnd.Col() - maRange.aStart.Col() + 1);
302 : : }
303 : :
304 : 0 : sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleColumn( sal_Int32 nChildIndex )
305 : : throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
306 : : {
307 [ # # ]: 0 : SolarMutexGuard aGuard;
308 [ # # ]: 0 : IsObjectValid();
309 : :
310 [ # # ][ # # ]: 0 : if (nChildIndex >= getAccessibleChildCount() || nChildIndex < 0)
[ # # ][ # # ]
311 [ # # ]: 0 : throw lang::IndexOutOfBoundsException();
312 : :
313 [ # # ]: 0 : return nChildIndex % static_cast<sal_Int32>(maRange.aEnd.Col() - maRange.aStart.Col() + 1);
314 : : }
315 : :
316 : : //===== XAccessibleContext ==============================================
317 : :
318 : : sal_Int32 SAL_CALL
319 : 27 : ScAccessibleTableBase::getAccessibleChildCount(void)
320 : : throw (uno::RuntimeException)
321 : : {
322 [ + - ]: 27 : SolarMutexGuard aGuard;
323 [ + - ]: 27 : IsObjectValid();
324 : 27 : return static_cast<sal_Int32>(maRange.aEnd.Row() - maRange.aStart.Row() + 1) *
325 [ + - ]: 27 : (maRange.aEnd.Col() - maRange.aStart.Col() + 1);
326 : : // return 1;
327 : : }
328 : :
329 : : uno::Reference< XAccessible > SAL_CALL
330 : 14 : ScAccessibleTableBase::getAccessibleChild(sal_Int32 nIndex)
331 : : throw (uno::RuntimeException,
332 : : lang::IndexOutOfBoundsException)
333 : : {
334 [ + - ]: 14 : SolarMutexGuard aGuard;
335 [ + + ]: 14 : IsObjectValid();
336 : :
337 [ + - ][ + - ]: 13 : if (nIndex >= getAccessibleChildCount() || nIndex < 0)
[ - + ][ - + ]
338 [ # # ]: 0 : throw lang::IndexOutOfBoundsException();
339 : :
340 : 13 : sal_Int32 nRow(0);
341 : 13 : sal_Int32 nColumn(0);
342 : 13 : sal_Int32 nTemp(maRange.aEnd.Col() - maRange.aStart.Col() + 1);
343 : 13 : nRow = nIndex / nTemp;
344 : 13 : nColumn = nIndex % nTemp;
345 [ + - ][ + - ]: 14 : return getAccessibleCellAt(nRow, nColumn);
346 : : }
347 : :
348 : : ::rtl::OUString SAL_CALL
349 : 9 : ScAccessibleTableBase::createAccessibleDescription(void)
350 : : throw (uno::RuntimeException)
351 : : {
352 [ + - ][ + - ]: 9 : String sDesc(ScResId(STR_ACC_TABLE_DESCR));
353 [ + - ][ + - ]: 9 : return rtl::OUString(sDesc);
354 : : }
355 : :
356 : : ::rtl::OUString SAL_CALL
357 : 5 : ScAccessibleTableBase::createAccessibleName(void)
358 : : throw (uno::RuntimeException)
359 : : {
360 [ + - ][ + - ]: 5 : String sName(ScResId(STR_ACC_TABLE_NAME));
361 : 5 : rtl::OUString sCoreName;
362 [ + - ][ + - ]: 5 : if (mpDoc && mpDoc->GetName( maRange.aStart.Tab(), sCoreName ))
[ + - ][ + - ]
363 [ + - ][ + - ]: 5 : sName.SearchAndReplaceAscii("%1", sCoreName);
[ + - ]
364 [ + - ][ + - ]: 5 : return rtl::OUString(sName);
365 : : }
366 : :
367 : : uno::Reference<XAccessibleRelationSet> SAL_CALL
368 : 0 : ScAccessibleTableBase::getAccessibleRelationSet(void)
369 : : throw (uno::RuntimeException)
370 : : {
371 : : OSL_FAIL("should be implemented in the abrevated class");
372 : 0 : return uno::Reference<XAccessibleRelationSet>();
373 : : }
374 : :
375 : : uno::Reference<XAccessibleStateSet> SAL_CALL
376 : 0 : ScAccessibleTableBase::getAccessibleStateSet(void)
377 : : throw (uno::RuntimeException)
378 : : {
379 : : OSL_FAIL("should be implemented in the abrevated class");
380 : 0 : uno::Reference< XAccessibleStateSet > xAccessibleStateSet;
381 : 0 : return xAccessibleStateSet;
382 : : }
383 : :
384 : : ///===== XAccessibleSelection ===========================================
385 : :
386 : : void SAL_CALL
387 : 0 : ScAccessibleTableBase::selectAccessibleChild( sal_Int32 /* nChildIndex */ )
388 : : throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
389 : : {
390 : 0 : }
391 : :
392 : : sal_Bool SAL_CALL
393 : 0 : ScAccessibleTableBase::isAccessibleChildSelected( sal_Int32 nChildIndex )
394 : : throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
395 : : {
396 : : // I don't need to guard, because the called functions have a guard
397 [ # # ][ # # ]: 0 : if (nChildIndex < 0 || nChildIndex >= getAccessibleChildCount())
[ # # ]
398 [ # # ]: 0 : throw lang::IndexOutOfBoundsException();
399 : 0 : return isAccessibleSelected(getAccessibleRow(nChildIndex), getAccessibleColumn(nChildIndex));
400 : : }
401 : :
402 : : void SAL_CALL
403 : 0 : ScAccessibleTableBase::clearAccessibleSelection( )
404 : : throw (uno::RuntimeException)
405 : : {
406 : 0 : }
407 : :
408 : : void SAL_CALL
409 : 0 : ScAccessibleTableBase::selectAllAccessibleChildren( )
410 : : throw (uno::RuntimeException)
411 : : {
412 : 0 : }
413 : :
414 : : sal_Int32 SAL_CALL
415 : 0 : ScAccessibleTableBase::getSelectedAccessibleChildCount( )
416 : : throw (uno::RuntimeException)
417 : : {
418 : 0 : sal_Int32 nResult(0);
419 : 0 : return nResult;
420 : : }
421 : :
422 : : uno::Reference<XAccessible > SAL_CALL
423 : 0 : ScAccessibleTableBase::getSelectedAccessibleChild( sal_Int32 /* nSelectedChildIndex */ )
424 : : throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
425 : : {
426 : 0 : uno::Reference < XAccessible > xAccessible;
427 : 0 : return xAccessible;
428 : : }
429 : :
430 : : void SAL_CALL
431 : 0 : ScAccessibleTableBase::deselectAccessibleChild( sal_Int32 /* nSelectedChildIndex */ )
432 : : throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
433 : : {
434 : 0 : }
435 : :
436 : : //===== XServiceInfo ====================================================
437 : :
438 : 0 : ::rtl::OUString SAL_CALL ScAccessibleTableBase::getImplementationName(void)
439 : : throw (uno::RuntimeException)
440 : : {
441 : 0 : return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM ("ScAccessibleTableBase"));
442 : : }
443 : :
444 : : //===== XTypeProvider ===================================================
445 : :
446 : 0 : uno::Sequence< uno::Type > SAL_CALL ScAccessibleTableBase::getTypes()
447 : : throw (uno::RuntimeException)
448 : : {
449 [ # # ][ # # ]: 0 : return comphelper::concatSequences(ScAccessibleTableBaseImpl::getTypes(), ScAccessibleContextBase::getTypes());
[ # # ]
450 : : }
451 : :
452 : : namespace
453 : : {
454 : : class theScAccessibleTableBaseImplementationId : public rtl::Static< UnoTunnelIdInit, theScAccessibleTableBaseImplementationId > {};
455 : : }
456 : :
457 : : uno::Sequence<sal_Int8> SAL_CALL
458 : 0 : ScAccessibleTableBase::getImplementationId(void)
459 : : throw (uno::RuntimeException)
460 : : {
461 : 0 : return theScAccessibleTableBaseImplementationId::get().getSeq();
462 : : }
463 : :
464 : 18 : void ScAccessibleTableBase::CommitTableModelChange(sal_Int32 nStartRow, sal_Int32 nStartCol, sal_Int32 nEndRow, sal_Int32 nEndCol, sal_uInt16 nId)
465 : : {
466 : 18 : AccessibleTableModelChange aModelChange;
467 : 18 : aModelChange.FirstRow = nStartRow;
468 : 18 : aModelChange.FirstColumn = nStartCol;
469 : 18 : aModelChange.LastRow = nEndRow;
470 : 18 : aModelChange.LastColumn = nEndCol;
471 : 18 : aModelChange.Type = nId;
472 : :
473 [ + - ]: 18 : AccessibleEventObject aEvent;
474 : 18 : aEvent.EventId = AccessibleEventId::TABLE_MODEL_CHANGED;
475 [ + - ][ + - ]: 18 : aEvent.Source = uno::Reference< XAccessibleContext >(this);
476 [ + - ]: 18 : aEvent.NewValue <<= aModelChange;
477 : :
478 [ + - ][ + - ]: 18 : CommitChange(aEvent);
479 : 18 : }
480 : :
481 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|