1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26
27 #include "viscrs.hxx"
28 #include <sfx2/frame.hxx>
29 #include <sfx2/printer.hxx>
30 #include <cmdid.h>
31 #include <hintids.hxx>
32 #include <docsh.hxx>
33 #include <rubylist.hxx>
34 #include <doc.hxx>
35 #include <unotxvw.hxx>
36 #include <unodispatch.hxx>
37 #include <unomap.hxx>
38 #include <unostyle.hxx>
39 #include <unoprnms.hxx>
40 #include <view.hxx>
41 #include <viewopt.hxx>
42 #include <unomod.hxx>
43 #include <unoframe.hxx>
44 #include <unocrsr.hxx>
45 #include <wrtsh.hxx>
46 #include <unotbl.hxx>
47 #include <svx/fmshell.hxx>
48 #include <svx/svdview.hxx>
49 #include <svx/svdpage.hxx>
50 #include <svx/svdouno.hxx>
51 #include <svx/svdogrp.hxx>
52 #include <editeng/pbinitem.hxx>
53 #include <pagedesc.hxx>
54 #include <editeng/lrspitem.hxx>
55 #include <editeng/ulspitem.hxx>
56 #include <sfx2/bindings.hxx>
57 #include <sfx2/request.hxx>
58 #include <frmatr.hxx>
59 #include <vos/mutex.hxx>
60 #include <IMark.hxx>
61 #include <unotxdoc.hxx>
62 #include <unodraw.hxx>
63 #include <svx/unoshcol.hxx>
64 #include <svx/unoshape.hxx>
65 #include <svx/svdpagv.hxx>
66 #include <swerror.h>
67 #include <tools/cachestr.hxx>
68 #include <shellio.hxx>
69 #include <ndtxt.hxx>
70 #include <SwStyleNameMapper.hxx>
71 #include <crsskip.hxx>
72 #include <com/sun/star/beans/PropertyAttribute.hpp>
73 #include <editeng/outliner.hxx>
74 #include <editeng/editview.hxx>
75 #include <unobookmark.hxx>
76 #include <unoparagraph.hxx>
77 #include <unocrsrhelper.hxx>
78 #include <unotextrange.hxx>
79 #include <sfx2/docfile.hxx>
80 #include <switerator.hxx>
81 #include "swdtflvr.hxx"
82 #include <vcl/svapp.hxx>
83
84
85 using namespace ::com::sun::star;
86 using namespace ::com::sun::star::uno;
87 using namespace ::com::sun::star::lang;
88 using namespace ::com::sun::star::beans;
89 using namespace ::com::sun::star::text;
90 using namespace ::com::sun::star::view;
91 using namespace ::com::sun::star::frame;
92 using namespace rtl;
93
94 using ::com::sun::star::util::URL;
95 using comphelper::HelperBaseNoState;
96
97 SV_IMPL_PTRARR( SelectionChangeListenerArr, XSelectionChangeListenerPtr );
98
99 /* -----------------22.05.98 12:20-------------------
100 *
101 * --------------------------------------------------*/
lcl_createPamCopy(const SwPaM & rPam)102 SwPaM* lcl_createPamCopy(const SwPaM& rPam)
103 {
104 SwPaM *const pRet = new SwPaM(*rPam.GetPoint());
105 ::sw::DeepCopyPaM(rPam, *pRet);
106 return pRet;
107 }
108 /******************************************************************
109 * SwXTextView
110 ******************************************************************/
111 /*-- 17.12.98 09:34:25---------------------------------------------------
112
113 -----------------------------------------------------------------------*/
SwXTextView(SwView * pSwView)114 SwXTextView::SwXTextView(SwView* pSwView) :
115 SfxBaseController(pSwView),
116 m_pView(pSwView),
117 m_pPropSet( aSwMapProvider.GetPropertySet( PROPERTY_MAP_TEXT_VIEW ) ),
118 pxViewSettings(0),
119 pxTextViewCursor(0)
120 {
121
122 }
123 /*-- 17.12.98 09:34:25---------------------------------------------------
124
125 -----------------------------------------------------------------------*/
~SwXTextView()126 SwXTextView::~SwXTextView()
127 {
128 Invalidate();
129 }
130 /* -----------------------------09.03.01 15:47--------------------------------
131
132 ---------------------------------------------------------------------------*/
Invalidate()133 void SwXTextView::Invalidate()
134 {
135 if(pxViewSettings)
136 {
137 HelperBaseNoState *pSettings = static_cast < HelperBaseNoState * > ( pxViewSettings->get() );
138 static_cast < SwXViewSettings* > ( pSettings )->Invalidate();
139 DELETEZ(pxViewSettings);
140 }
141 if(pxTextViewCursor)
142 {
143 text::XTextViewCursor* pCrsr = pxTextViewCursor->get();
144 ((SwXTextViewCursor*)pCrsr)->Invalidate();
145 DELETEZ(pxTextViewCursor);
146 }
147
148 m_refCount++; //prevent second d'tor call
149
150 sal_uInt16 nCount = aSelChangedListeners.Count();
151 if(nCount)
152 {
153 uno::Reference< uno::XInterface > xInt = (cppu::OWeakObject*)(SfxBaseController*)this;
154 lang::EventObject aEvent(xInt);
155 for ( sal_uInt16 i = nCount; i--; )
156 {
157 uno::Reference< view::XSelectionChangeListener > *pObj = aSelChangedListeners[i];
158 (*pObj)->disposing(aEvent);
159 }
160 }
161
162 // #i85580: now clean up any possibly remaining entries in the array...
163 // (i.e. listeners that did not call removeSelectionChangeListener in their disposing.)
164 while ((nCount = aSelChangedListeners.Count()) != 0)
165 {
166 removeSelectionChangeListener( *aSelChangedListeners[0] );
167 }
168
169 m_refCount--;
170 m_pView = 0;
171 }
172
173 /* -----------------------------18.05.00 10:18--------------------------------
174
175 ---------------------------------------------------------------------------*/
getTypes()176 Sequence< uno::Type > SAL_CALL SwXTextView::getTypes( ) throw(uno::RuntimeException)
177 {
178 // uno::Sequence< uno::Type > aViewTypes = SwXTextViewBaseClass::getTypes();
179 uno::Sequence< uno::Type > aBaseTypes = SfxBaseController::getTypes();
180
181 long nIndex = aBaseTypes.getLength();
182 aBaseTypes.realloc(
183 aBaseTypes.getLength() + 8 );
184
185 uno::Type* pBaseTypes = aBaseTypes.getArray();
186 pBaseTypes[nIndex++] = ::getCppuType((uno::Reference<XSelectionSupplier >*)0);
187 pBaseTypes[nIndex++] = ::getCppuType((uno::Reference<XServiceInfo >*)0);
188 pBaseTypes[nIndex++] = ::getCppuType((uno::Reference<XFormLayerAccess >*)0);
189 pBaseTypes[nIndex++] = ::getCppuType((uno::Reference<XTextViewCursorSupplier>*)0);
190 pBaseTypes[nIndex++] = ::getCppuType((uno::Reference<XViewSettingsSupplier >*)0);
191 pBaseTypes[nIndex++] = ::getCppuType((uno::Reference<XRubySelection >*)0);
192 pBaseTypes[nIndex++] = ::getCppuType((uno::Reference<XPropertySet >*)0);
193 pBaseTypes[nIndex++] = ::getCppuType((uno::Reference<datatransfer::XTransferableSupplier >*)0);
194 return aBaseTypes;
195 }
196 /* -----------------------------18.05.00 10:18--------------------------------
197
198 ---------------------------------------------------------------------------*/
getImplementationId()199 Sequence< sal_Int8 > SAL_CALL SwXTextView::getImplementationId( ) throw(uno::RuntimeException)
200 {
201 vos::OGuard aGuard(Application::GetSolarMutex());
202 static Sequence< sal_Int8 > aId( 16 );
203 static sal_Bool bInit = sal_False;
204 if(!bInit)
205 {
206 rtl_createUuid( (sal_uInt8 *)(aId.getArray() ), 0, sal_True );
207 bInit = sal_True;
208 }
209 return aId;
210 }
211 /* -----------------------------18.05.00 10:18--------------------------------
212
213 ---------------------------------------------------------------------------*/
acquire()214 void SAL_CALL SwXTextView::acquire( )throw()
215 {
216 SfxBaseController::acquire();
217 }
218 /* -----------------------------18.05.00 10:18--------------------------------
219
220 ---------------------------------------------------------------------------*/
release()221 void SAL_CALL SwXTextView::release( )throw()
222 {
223 SfxBaseController::release();
224 }
225 /* -----------------------------18.05.00 10:23--------------------------------
226
227 ---------------------------------------------------------------------------*/
queryInterface(const uno::Type & aType)228 uno::Any SAL_CALL SwXTextView::queryInterface( const uno::Type& aType )
229 throw (RuntimeException)
230 {
231 uno::Any aRet;
232 if(aType == ::getCppuType((uno::Reference<view::XSelectionSupplier >*)0))
233 {
234 uno::Reference<view::XSelectionSupplier> xRet = this;
235 aRet.setValue(&xRet, aType);
236 }
237 else if(aType == ::getCppuType((uno::Reference<lang::XServiceInfo >*)0))
238 {
239 uno::Reference<lang::XServiceInfo> xRet = this;
240 aRet.setValue(&xRet, aType);
241 }
242 else if(aType == ::getCppuType((uno::Reference<view::XControlAccess >*)0))
243 {
244 uno::Reference<view::XControlAccess> xRet = this;
245 aRet.setValue(&xRet, aType);
246 }
247 else if(aType == ::getCppuType((uno::Reference<view::XFormLayerAccess >*)0))
248 {
249 uno::Reference<view::XFormLayerAccess> xRet = this;
250 aRet.setValue(&xRet, aType);
251 }
252 else if(aType == ::getCppuType((uno::Reference<text::XTextViewCursorSupplier>*)0))
253 {
254 uno::Reference<text::XTextViewCursorSupplier> xRet = this;
255 aRet.setValue(&xRet, aType);
256 }
257 else if(aType == ::getCppuType((uno::Reference<view::XViewSettingsSupplier >*)0))
258 {
259 uno::Reference<view::XViewSettingsSupplier> xRet = this;
260 aRet.setValue(&xRet, aType);
261 }
262 else if(aType == ::getCppuType((uno::Reference<XRubySelection>*)0))
263 {
264 uno::Reference<XRubySelection> xRet = this;
265 aRet.setValue(&xRet, aType);
266 }
267 else if(aType == ::getCppuType((uno::Reference<XPropertySet>*)0))
268 {
269 uno::Reference<XPropertySet> xRet = this;
270 aRet.setValue(&xRet, aType);
271 }
272 else if(aType == ::getCppuType((uno::Reference<datatransfer::XTransferableSupplier >*)0))
273 {
274 uno::Reference<datatransfer::XTransferableSupplier> xRet = this;
275 aRet.setValue(&xRet, aType);
276 }
277 else
278 aRet = SfxBaseController::queryInterface(aType);
279 return aRet;
280 }
281 /*-- 17.12.98 09:34:26---------------------------------------------------
282
283 -----------------------------------------------------------------------*/
select(const uno::Any & aInterface)284 sal_Bool SwXTextView::select(const uno::Any& aInterface) throw( lang::IllegalArgumentException, uno::RuntimeException )
285 {
286 ::vos::OGuard aGuard(Application::GetSolarMutex());
287 uno::Reference< uno::XInterface > xInterface;
288 if(GetView() && (aInterface >>= xInterface))
289 {
290 SwWrtShell& rSh = GetView()->GetWrtShell();
291 SwDoc* pDoc = GetView()->GetDocShell()->GetDoc();
292 uno::Reference< lang::XUnoTunnel > xIfcTunnel(xInterface, uno::UNO_QUERY);
293 uno::Reference< text::XTextCursor > xCrsr(xInterface, uno::UNO_QUERY);
294 uno::Reference< container::XIndexAccess > xPosN(xInterface, uno::UNO_QUERY);
295 uno::Reference< text::XTextRange > xPos(xInterface, uno::UNO_QUERY);
296 SwXFrame* pFrame = xIfcTunnel.is() ? reinterpret_cast<SwXFrame*>(
297 xIfcTunnel->getSomething(SwXFrame::getUnoTunnelId())) : 0;
298
299 SwXCell* pCell = xIfcTunnel.is() ? reinterpret_cast<SwXCell*>(
300 xIfcTunnel->getSomething(SwXCell::getUnoTunnelId())) : 0;
301
302 SwPaM * pPam = 0;
303 SwXTextRanges* pPosN = 0;
304 if(xCrsr.is())
305 {
306 //
307 OTextCursorHelper* pCursor =
308 xIfcTunnel.is() ?
309 reinterpret_cast<OTextCursorHelper*>(xIfcTunnel->getSomething(OTextCursorHelper::getUnoTunnelId()))
310 : 0;
311
312 if(pCursor && pCursor->GetDoc() == GetView()->GetDocShell()->GetDoc())
313 {
314 pPam = lcl_createPamCopy(*pCursor->GetPaM());
315 }
316 }
317 else if(xPosN.is() &&
318 xIfcTunnel.is() &&
319 0 != (pPosN = reinterpret_cast<SwXTextRanges*>(xIfcTunnel->getSomething(SwXTextRanges::getUnoTunnelId()))))
320 {
321 const SwUnoCrsr* pUnoCrsr = pPosN->GetCursor();
322 if(pUnoCrsr)
323 {
324 pPam = lcl_createPamCopy(*pUnoCrsr);
325 }
326 }
327 // prevent misinterpretation of text frames that provide a XTextRange interface, too
328 else if(!pFrame && !pCell && xPos.is())
329 {
330 SwUnoInternalPaM aPam(*pDoc);
331 if (::sw::XTextRangeToSwPaM(aPam, xPos))
332 {
333 pPam = lcl_createPamCopy(aPam);
334 }
335 }
336 if(pPam)
337 {
338 rSh.EnterStdMode();
339 rSh.SetSelection(*pPam);
340 while( pPam->GetNext() != pPam )
341 delete pPam->GetNext();
342 delete pPam;
343 return sal_True;
344 }
345 if(pFrame)
346 {
347
348 SwFrmFmt* pFrmFmt = pFrame->GetFrmFmt();
349 if(pFrmFmt && pFrmFmt->GetDoc() == pDoc)
350 {
351 sal_Bool bSuccess = rSh.GotoFly( pFrmFmt->GetName(), pFrame->GetFlyCntType());
352 if (bSuccess)
353 {
354 rSh.HideCrsr();
355 rSh.EnterSelFrmMode();
356 }
357 return sal_True;
358 }
359 }
360
361 uno::Reference< text::XTextTable > xTbl(xInterface, uno::UNO_QUERY);;
362
363 if(xTbl.is() && xIfcTunnel.is())
364 {
365 SwXTextTable* pTable = reinterpret_cast<SwXTextTable*>(
366 xIfcTunnel->getSomething(SwXTextTable::getUnoTunnelId()));
367
368 SwFrmFmt* pTblFrmFmt = pTable ? ((SwXTextTable*)pTable)->GetFrmFmt() : 0;
369 if(pTblFrmFmt &&pTblFrmFmt->GetDoc() == pDoc)
370 {
371 rSh.EnterStdMode();
372 rSh.GotoTable(pTblFrmFmt->GetName());
373 }
374 return sal_True;
375 }
376
377 if(pCell)
378 {
379 SwFrmFmt* pTblFrmFmt = pCell->GetFrmFmt();
380 if(pTblFrmFmt && pTblFrmFmt->GetDoc() == pDoc)
381 {
382 SwTableBox* pBox = pCell->GetTblBox();
383 SwTable* pTable = SwTable::FindTable( pTblFrmFmt );
384 pBox = pCell->FindBox(pTable, pBox);
385 if(pBox)
386 {
387 const SwStartNode* pSttNd = pBox->GetSttNd();
388 SwPosition aPos(*pSttNd);
389 SwPaM aPam(aPos);
390 aPam.Move(fnMoveForward, fnGoNode);
391 rSh.EnterStdMode();
392 rSh.SetSelection(aPam);
393 return sal_True;
394 }
395 }
396 }
397 SwXCellRange* pRange = xIfcTunnel.is() ? reinterpret_cast<SwXCellRange*>(
398 xIfcTunnel->getSomething(SwXCellRange::getUnoTunnelId())) : 0;
399 if(pRange)
400 {
401 const SwUnoCrsr* pUnoCrsr = pRange->GetTblCrsr();
402 if(pUnoCrsr)
403 {
404 UnoActionRemoveContext aContext(pDoc);
405 rSh.EnterStdMode();
406 rSh.SetSelection(*pUnoCrsr);
407 return sal_True;
408 }
409 }
410 uno::Reference< text::XTextContent > xBkm(xInterface, uno::UNO_QUERY);;
411
412 if(xBkm.is() && xIfcTunnel.is())
413 {
414 ::sw::mark::IMark const*const pMark(
415 SwXBookmark::GetBookmarkInDoc(pDoc, xIfcTunnel) );
416 if (pMark)
417 {
418 rSh.EnterStdMode();
419 rSh.GotoMark(pMark);
420 return sal_True;
421 }
422 }
423 // IndexMark, Index, TextField, Draw, Section, Footnote, Paragraph
424 //
425
426 // detect controls
427
428 uno::Reference< awt::XControlModel > xCtrlModel(xInterface, UNO_QUERY);
429 if(xCtrlModel.is())
430 {
431 uno::Reference<awt::XControl> XControl;
432 SdrObject* pObj = GetControl(xCtrlModel, XControl);
433 if(pObj)
434 {
435 SdrView* pDrawView = rSh.GetDrawView();
436 SdrPageView* pPV = pDrawView->GetSdrPageView();
437 if ( pPV && pObj->GetPage() == pPV->GetPage() )
438 {
439 pDrawView->SdrEndTextEdit();
440 pDrawView->UnmarkAll();
441 pDrawView->MarkObj( pObj, pPV );
442 }
443 return sal_True;
444 }
445 }
446
447 uno::Reference< drawing::XShapes > xShapeColl( xInterface, uno::UNO_QUERY );
448 uno::Reference< beans::XPropertySet > xTmpProp(xInterface, uno::UNO_QUERY);
449 SwXShape* pSwXShape = 0;
450 if(xIfcTunnel.is())
451 pSwXShape = reinterpret_cast<SwXShape*>(xIfcTunnel->getSomething(SwXShape::getUnoTunnelId()));
452 SvxShape* pSvxShape = 0;
453 if(pSwXShape)
454 {
455 uno::Reference< uno::XAggregation > xAgg = pSwXShape->GetAggregationInterface();
456 if(xAgg.is())
457 {
458 pSvxShape = reinterpret_cast<SvxShape*>(xIfcTunnel->getSomething(SvxShape::getUnoTunnelId()));
459 }
460 }
461
462 if ( pSvxShape || xShapeColl.is() ) // Drawing drawing::Layer
463 {
464 SdrView* pDrawView = rSh.GetDrawView();
465 if (pDrawView)
466 {
467 pDrawView->SdrEndTextEdit();
468 pDrawView->UnmarkAll();
469
470 if (pSvxShape) // einzelnes Shape
471 {
472 SdrObject *pObj = pSvxShape->GetSdrObject();
473 if (pObj)
474 {
475 // lcl_ShowObject( *m_pViewSh, *pDrawView, pObj );
476 SdrPageView* pPV = pDrawView->GetSdrPageView();
477 if ( pPV && pObj->GetPage() == pPV->GetPage() )
478 {
479 pDrawView->MarkObj( pObj, pPV );
480 return sal_True;
481 }
482 }
483 }
484 else // Shape Collection
485 {
486 sal_Bool bSelected = sal_False;
487 SdrPageView* pPV = NULL;
488 long nCount = xShapeColl->getCount();
489 for ( long i = 0; i < nCount; i++ )
490 {
491 uno::Reference< drawing::XShape > xShapeInt;
492 uno::Any aAny = xShapeColl->getByIndex(i);
493 aAny >>= xShapeInt;
494 if (xShapeInt.is())
495 {
496 uno::Reference< lang::XUnoTunnel> xShapeTunnel(xShapeInt, uno::UNO_QUERY);
497
498 SvxShape* pShape = xShapeTunnel.is() ?
499 reinterpret_cast<SvxShape*>(xShapeTunnel->getSomething(SvxShape::getUnoTunnelId())) : 0;
500
501 if (pShape)
502 {
503 SdrObject *pObj = pShape->GetSdrObject();
504 if (pObj)
505 {
506 if (!pPV) // erstes Objekt
507 {
508 // lcl_ShowObject( *m_pViewSh, *pDrawView, pObj );
509 pPV = pDrawView->GetSdrPageView();
510 }
511 if ( pPV && pObj->GetPage() == pPV->GetPage() )
512 {
513 pDrawView->MarkObj( pObj, pPV );
514 bSelected = sal_True;
515 }
516 }
517 }
518 }
519 }
520 return bSelected;
521 }
522 }
523 }
524 }
525 return sal_False;
526
527 }
528 /*-- 17.12.98 09:34:26---------------------------------------------------
529
530 -----------------------------------------------------------------------*/
getSelection(void)531 uno::Any SwXTextView::getSelection(void) throw( uno::RuntimeException )
532 {
533 ::vos::OGuard aGuard(Application::GetSolarMutex());
534 uno::Reference< uno::XInterface > aRef;
535 if(GetView())
536 {
537 //force immediat shell update
538 m_pView->StopShellTimer();
539 // ein interface aus der aktuellen Selektion erzeugen
540 SwWrtShell& rSh = m_pView->GetWrtShell();
541 ShellModes eSelMode = m_pView->GetShellMode();
542 switch(eSelMode)
543 {
544 case SHELL_MODE_TABLE_TEXT :
545 {
546 if(rSh.GetTableCrsr())
547 {
548 DBG_ASSERT(rSh.GetTableFmt(), "kein Tabellenformat?");
549 uno::Reference< text::XTextTableCursor > xCrsr = new SwXTextTableCursor(*rSh.GetTableFmt(),
550 rSh.GetTableCrsr());
551 aRef = uno::Reference< uno::XInterface > (xCrsr, uno::UNO_QUERY);;
552 break;
553 }
554
555 }
556 // ohne Tabellenselektion wird der Text geliefert
557 //break;
558 case SHELL_MODE_LIST_TEXT :
559 case SHELL_MODE_TABLE_LIST_TEXT:
560 case SHELL_MODE_TEXT :
561 {
562 uno::Reference< container::XIndexAccess > xPos = new SwXTextRanges(rSh.GetCrsr());
563 aRef = uno::Reference< uno::XInterface >(xPos, uno::UNO_QUERY);
564 }
565 break;
566 case SHELL_MODE_FRAME :
567 case SHELL_MODE_GRAPHIC :
568 case SHELL_MODE_OBJECT :
569 {
570 //Get FlyFrameFormat; fuer UI Macro Anbindung an Flys
571 const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt();
572 if (pFmt)
573 {
574 SwXFrame* pxFrame = SwIterator<SwXFrame,SwFmt>::FirstElement(*pFmt);
575 if(pxFrame) //das einzige gemeinsame interface fuer alle Frames
576 {
577 aRef = uno::Reference< uno::XInterface >((cppu::OWeakObject*)pxFrame, uno::UNO_QUERY);
578 }
579 else
580 {
581 if(SHELL_MODE_FRAME == eSelMode)
582 {
583 uno::Reference< text::XTextFrame > xFrm = new SwXTextFrame((SwFrmFmt&)*pFmt);
584 aRef = uno::Reference< uno::XInterface >(xFrm, uno::UNO_QUERY);
585 }
586 else if(SHELL_MODE_GRAPHIC == eSelMode)
587 {
588 uno::Reference< text::XTextContent > xFrm = new SwXTextGraphicObject((SwFrmFmt&)*pFmt);
589 aRef = xFrm;
590 }
591 else
592 {
593 uno::Reference< text::XTextContent > xFrm = new SwXTextEmbeddedObject((SwFrmFmt&)*pFmt);
594 aRef = xFrm;
595 }
596 }
597 }
598 }
599 break;
600 case SHELL_MODE_DRAW :
601 case SHELL_MODE_DRAW_CTRL :
602 case SHELL_MODE_DRAW_FORM :
603 case SHELL_MODE_DRAWTEXT :
604 case SHELL_MODE_BEZIER :
605 {
606 uno::Reference< drawing::XDrawPageSupplier > xPageSupp;
607 uno::Reference< frame::XModel > xModel = m_pView->GetDocShell()->GetBaseModel();
608 uno::Reference< lang::XUnoTunnel > xModelTunnel(xModel, uno::UNO_QUERY);
609 SwXTextDocument* pTextDoc = reinterpret_cast<SwXTextDocument*>(xModelTunnel->
610 getSomething(SwXTextDocument::getUnoTunnelId()));
611
612 SwFmDrawPage* pSvxDrawPage = pTextDoc->GetDrawPage()->GetSvxPage();
613 uno::Reference< drawing::XShapes > xShCol = new SvxShapeCollection();
614
615 const SdrMarkList& rMarkList = rSh.GetDrawView()->GetMarkedObjectList();
616 for(sal_uInt16 i = 0; i < rMarkList.GetMarkCount(); i++)
617 {
618 SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
619 uno::Reference< uno::XInterface > xInt = pSvxDrawPage->GetInterface( pObj );
620 uno::Reference< drawing::XShape > xShape(xInt, uno::UNO_QUERY);;
621 xShCol->add(xShape);
622 }
623 aRef = uno::Reference< uno::XInterface >(xShCol, uno::UNO_QUERY);
624 }
625 break;
626 default:;//prevent warning
627 }
628 }
629 uno::Any aRet(&aRef, ::getCppuType((uno::Reference<uno::XInterface>*)0));
630 return aRet;
631 }
632 /*-- 17.12.98 09:34:27---------------------------------------------------
633
634 -----------------------------------------------------------------------*/
addSelectionChangeListener(const uno::Reference<view::XSelectionChangeListener> & rxListener)635 void SwXTextView::addSelectionChangeListener(
636 const uno::Reference< view::XSelectionChangeListener > & rxListener)
637 throw( uno::RuntimeException )
638 {
639 ::vos::OGuard aGuard(Application::GetSolarMutex());
640 uno::Reference< view::XSelectionChangeListener > * pInsert = new uno::Reference< view::XSelectionChangeListener > ;
641 *pInsert = rxListener;
642 aSelChangedListeners.Insert(pInsert, aSelChangedListeners.Count());
643 }
644 /*-- 17.12.98 09:34:27---------------------------------------------------
645
646 -----------------------------------------------------------------------*/
removeSelectionChangeListener(const uno::Reference<view::XSelectionChangeListener> & rxListener)647 void SwXTextView::removeSelectionChangeListener(
648 const uno::Reference< view::XSelectionChangeListener > & rxListener)
649 throw( uno::RuntimeException )
650 {
651 ::vos::OGuard aGuard(Application::GetSolarMutex());
652 view::XSelectionChangeListener* pLeft = rxListener.get();
653 for(sal_uInt16 i = 0; i < aSelChangedListeners.Count(); i++)
654 {
655 uno::Reference< view::XSelectionChangeListener > * pElem = aSelChangedListeners.GetObject(i);
656 view::XSelectionChangeListener* pRight = pElem->get();
657 if(pLeft == pRight)
658 {
659 aSelChangedListeners.Remove(i);
660 delete pElem;
661 break;
662 }
663 }
664 }
665 /* -----------------------------01.06.01 14:41--------------------------------
666
667 ---------------------------------------------------------------------------*/
GetControl(const uno::Reference<awt::XControlModel> & xModel,uno::Reference<awt::XControl> & xToFill)668 SdrObject* SwXTextView::GetControl(
669 const uno::Reference< awt::XControlModel > & xModel,
670 uno::Reference< awt::XControl >& xToFill )
671 {
672 SwView* pView2 = GetView();
673 FmFormShell* pFormShell = pView2 ? pView2->GetFormShell() : NULL;
674 SdrView* pDrawView = pView2 ? pView2->GetDrawView() : NULL;
675 Window* pWindow = pView2 ? pView2->GetWrtShell().GetWin() : NULL;
676
677 DBG_ASSERT( pFormShell && pDrawView && pWindow, "SwXTextView::GetControl: how could I?" );
678
679 SdrObject* pControl = NULL;
680 if ( pFormShell && pDrawView && pWindow )
681 pControl = pFormShell->GetFormControl( xModel, *pDrawView, *pWindow, xToFill );
682 return pControl;
683 }
684 /*-- 17.12.98 09:34:27---------------------------------------------------
685
686 -----------------------------------------------------------------------*/
getControl(const uno::Reference<awt::XControlModel> & xModel)687 uno::Reference< awt::XControl > SwXTextView::getControl(const uno::Reference< awt::XControlModel > & xModel)
688 throw( container::NoSuchElementException, uno::RuntimeException )
689 {
690 ::vos::OGuard aGuard(Application::GetSolarMutex());
691 uno::Reference< awt::XControl > xRet;
692 GetControl(xModel, xRet);
693 return xRet;
694 }
695
696 /*-- 08.03.07 13:55------------------------------------------------------
697
698 -----------------------------------------------------------------------*/
getFormController(const uno::Reference<form::XForm> & _Form)699 uno::Reference< form::runtime::XFormController > SAL_CALL SwXTextView::getFormController( const uno::Reference< form::XForm >& _Form ) throw (RuntimeException)
700 {
701 ::vos::OGuard aGuard( Application::GetSolarMutex() );
702
703 SwView* pView2 = GetView();
704 FmFormShell* pFormShell = pView2 ? pView2->GetFormShell() : NULL;
705 SdrView* pDrawView = pView2 ? pView2->GetDrawView() : NULL;
706 Window* pWindow = pView2 ? pView2->GetWrtShell().GetWin() : NULL;
707 DBG_ASSERT( pFormShell && pDrawView && pWindow, "SwXTextView::getFormController: how could I?" );
708
709 uno::Reference< form::runtime::XFormController > xController;
710 if ( pFormShell && pDrawView && pWindow )
711 xController = pFormShell->GetFormController( _Form, *pDrawView, *pWindow );
712 return xController;
713 }
714
715 /*-- 08.03.07 13:55------------------------------------------------------
716
717 -----------------------------------------------------------------------*/
isFormDesignMode()718 ::sal_Bool SAL_CALL SwXTextView::isFormDesignMode( ) throw (uno::RuntimeException)
719 {
720 ::vos::OGuard aGuard( Application::GetSolarMutex() );
721 SwView* pView2 = GetView();
722 FmFormShell* pFormShell = pView2 ? pView2->GetFormShell() : NULL;
723 return pFormShell ? pFormShell->IsDesignMode() : sal_True;
724 }
725
726 /*-- 08.03.07 13:55------------------------------------------------------
727
728 -----------------------------------------------------------------------*/
setFormDesignMode(::sal_Bool _DesignMode)729 void SAL_CALL SwXTextView::setFormDesignMode( ::sal_Bool _DesignMode ) throw (RuntimeException)
730 {
731 ::vos::OGuard aGuard( Application::GetSolarMutex() );
732 SwView* pView2 = GetView();
733 FmFormShell* pFormShell = pView2 ? pView2->GetFormShell() : NULL;
734 if ( pFormShell )
735 pFormShell->SetDesignMode( _DesignMode );
736 }
737
738 /*-- 17.12.98 09:34:28---------------------------------------------------
739
740 -----------------------------------------------------------------------*/
getViewCursor(void)741 uno::Reference< text::XTextViewCursor > SwXTextView::getViewCursor(void) throw( uno::RuntimeException )
742 {
743 ::vos::OGuard aGuard(Application::GetSolarMutex());
744 if(GetView())
745 {
746 if(!pxTextViewCursor)
747 {
748 ((SwXTextView*)this)->pxTextViewCursor = new uno::Reference< text::XTextViewCursor > ;
749 *pxTextViewCursor = new SwXTextViewCursor(GetView());
750 }
751 return *pxTextViewCursor;
752 }
753 else
754 throw uno::RuntimeException();
755 }
756 /*-- 17.12.98 09:34:28---------------------------------------------------
757
758 -----------------------------------------------------------------------*/
getViewSettings(void)759 uno::Reference< beans::XPropertySet > SwXTextView::getViewSettings(void) throw( uno::RuntimeException )
760 {
761 ::vos::OGuard aGuard(Application::GetSolarMutex());
762 if(m_pView)
763 {
764 if(!pxViewSettings)
765 {
766 ((SwXTextView*)this)->pxViewSettings = new uno::Reference< beans::XPropertySet > ;
767 *pxViewSettings = static_cast < HelperBaseNoState * > ( new SwXViewSettings( sal_False, m_pView ) );
768 }
769 }
770 else
771 throw uno::RuntimeException();
772 return *pxViewSettings;
773 }
774 /* -----------------------------30.01.01 15:01--------------------------------
775
776 ---------------------------------------------------------------------------*/
getRubyList(sal_Bool)777 Sequence< Sequence< PropertyValue > > SwXTextView::getRubyList( sal_Bool /*bAutomatic*/ ) throw(RuntimeException)
778 {
779 ::vos::OGuard aGuard(Application::GetSolarMutex());
780
781 if(!GetView())
782 throw RuntimeException();
783 SwWrtShell& rSh = m_pView->GetWrtShell();
784 ShellModes eSelMode = m_pView->GetShellMode();
785 if (eSelMode != SHELL_MODE_LIST_TEXT &&
786 eSelMode != SHELL_MODE_TABLE_LIST_TEXT &&
787 eSelMode != SHELL_MODE_TABLE_TEXT &&
788 eSelMode != SHELL_MODE_TEXT )
789 return Sequence< Sequence< PropertyValue > > ();
790
791 SwDoc* pDoc = m_pView->GetDocShell()->GetDoc();
792 SwRubyList aList;
793
794 sal_uInt16 nCount = pDoc->FillRubyList( *rSh.GetCrsr(), aList, 0 );
795 Sequence< Sequence< PropertyValue > > aRet(nCount);
796 Sequence< PropertyValue >* pRet = aRet.getArray();
797 String aString;
798 for(sal_uInt16 n = 0; n < nCount; n++)
799 {
800 const SwRubyListEntryPtr pEntry = aList[n];
801
802 const String& rEntryText = pEntry->GetText();
803 const SwFmtRuby& rAttr = pEntry->GetRubyAttr();
804
805 pRet[n].realloc(5);
806 PropertyValue* pValues = pRet[n].getArray();
807 pValues[0].Name = C2U(SW_PROP_NAME_STR(UNO_NAME_RUBY_BASE_TEXT));
808 pValues[0].Value <<= OUString(rEntryText);
809 pValues[1].Name = C2U(SW_PROP_NAME_STR(UNO_NAME_RUBY_TEXT));
810 pValues[1].Value <<= OUString(rAttr.GetText());
811 pValues[2].Name = C2U(SW_PROP_NAME_STR(UNO_NAME_RUBY_CHAR_STYLE_NAME));
812 SwStyleNameMapper::FillProgName(rAttr.GetCharFmtName(), aString, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, sal_True );
813 pValues[2].Value <<= OUString( aString );
814 pValues[3].Name = C2U(SW_PROP_NAME_STR(UNO_NAME_RUBY_ADJUST));
815 pValues[3].Value <<= (sal_Int16)rAttr.GetAdjustment();
816 pValues[4].Name = C2U(SW_PROP_NAME_STR(UNO_NAME_RUBY_IS_ABOVE));
817 sal_Bool bVal = !rAttr.GetPosition();
818 pValues[4].Value.setValue(&bVal, ::getBooleanCppuType());
819 }
820 return aRet;
821 }
822 /* -----------------------------30.01.01 15:02--------------------------------
823
824 ---------------------------------------------------------------------------*/
setRubyList(const Sequence<Sequence<PropertyValue>> & rRubyList,sal_Bool)825 void SAL_CALL SwXTextView::setRubyList(
826 const Sequence< Sequence< PropertyValue > >& rRubyList, sal_Bool /*bAutomatic*/ )
827 throw(RuntimeException)
828 {
829 ::vos::OGuard aGuard(Application::GetSolarMutex());
830
831 if(!GetView() || !rRubyList.getLength())
832 throw RuntimeException();
833 SwWrtShell& rSh = m_pView->GetWrtShell();
834 ShellModes eSelMode = m_pView->GetShellMode();
835 if (eSelMode != SHELL_MODE_LIST_TEXT &&
836 eSelMode != SHELL_MODE_TABLE_LIST_TEXT &&
837 eSelMode != SHELL_MODE_TABLE_TEXT &&
838 eSelMode != SHELL_MODE_TEXT )
839 throw RuntimeException();
840
841 SwRubyList aList;
842
843 const Sequence<PropertyValue>* pRubyList = rRubyList.getConstArray();
844 for(sal_Int32 nPos = 0; nPos < rRubyList.getLength(); nPos++)
845 {
846 SwRubyListEntryPtr pEntry = new SwRubyListEntry;
847 const PropertyValue* pProperties = pRubyList[nPos].getConstArray();
848 OUString sTmp;
849 for(sal_Int32 nProp = 0; nProp < pRubyList[nPos].getLength(); nProp++)
850 {
851 if(pProperties[nProp].Name.equalsAsciiL(
852 SW_PROP_NAME(UNO_NAME_RUBY_BASE_TEXT)))
853 {
854 pProperties[nProp].Value >>= sTmp;
855 pEntry->SetText(sTmp);
856 }
857 else if(pProperties[nProp].Name.equalsAsciiL(
858 SW_PROP_NAME(UNO_NAME_RUBY_TEXT)))
859 {
860 pProperties[nProp].Value >>= sTmp;
861 pEntry->GetRubyAttr().SetText(sTmp);
862 }
863 else if(pProperties[nProp].Name.equalsAsciiL(
864 SW_PROP_NAME(UNO_NAME_RUBY_CHAR_STYLE_NAME)))
865 {
866 if((pProperties[nProp].Value >>= sTmp))
867 {
868 String sName;
869 SwStyleNameMapper::FillUIName(sTmp, sName, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, sal_True );
870 sal_uInt16 nPoolId = sName.Len() ?
871 SwStyleNameMapper::GetPoolIdFromUIName( sName, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT ) : 0;
872
873 pEntry->GetRubyAttr().SetCharFmtName( sName );
874 pEntry->GetRubyAttr().SetCharFmtId( nPoolId );
875 }
876 }
877 else if(pProperties[nProp].Name.equalsAsciiL(
878 SW_PROP_NAME(UNO_NAME_RUBY_ADJUST)))
879 {
880 sal_Int16 nTmp = 0;
881 if((pProperties[nProp].Value >>= nTmp))
882 pEntry->GetRubyAttr().SetAdjustment(nTmp);
883 }
884 else if(pProperties[nProp].Name.equalsAsciiL(
885 SW_PROP_NAME(UNO_NAME_RUBY_IS_ABOVE)))
886 {
887 sal_Bool bValue = pProperties[nProp].Value.hasValue() ?
888 *(sal_Bool*)pProperties[nProp].Value.getValue() : sal_True;
889 pEntry->GetRubyAttr().SetPosition(bValue ? 0 : 1);
890 }
891 }
892 aList.Insert(pEntry, (sal_uInt16)nPos);
893 }
894 SwDoc* pDoc = m_pView->GetDocShell()->GetDoc();
895 pDoc->SetRubyList( *rSh.GetCrsr(), aList, 0 );
896 }
897 /*-- 29.12.02 15:45:29---------------------------------------------------
898
899 -----------------------------------------------------------------------*/
BuildTmpSelectionDoc()900 SfxObjectShellLock SwXTextView::BuildTmpSelectionDoc()
901 {
902 SwWrtShell& rOldSh = m_pView->GetWrtShell();
903 SfxPrinter *pPrt = rOldSh.getIDocumentDeviceAccess()->getPrinter( false );
904 SwDocShell* pDocSh;
905 SfxObjectShellLock xDocSh( pDocSh = new SwDocShell( /*pPrtDoc, */SFX_CREATE_MODE_STANDARD ) );
906 xDocSh->DoInitNew( 0 );
907 SwDoc *const pTempDoc( pDocSh->GetDoc() );
908 // #i103634#, #i112425#: do not expand numbering and fields on PDF export
909 pTempDoc->SetClipBoard(true);
910 rOldSh.FillPrtDoc(pTempDoc, pPrt);
911 SfxViewFrame* pDocFrame = SfxViewFrame::LoadHiddenDocument( *xDocSh, 0 );
912 SwView* pDocView = (SwView*) pDocFrame->GetViewShell();
913 pDocView->AttrChangedNotify( &pDocView->GetWrtShell() );//Damit SelectShell gerufen wird.
914 SwWrtShell* pSh = pDocView->GetWrtShellPtr();
915
916 IDocumentDeviceAccess* pIDDA = pSh->getIDocumentDeviceAccess();
917 SfxPrinter* pTempPrinter = pIDDA->getPrinter( true );
918
919 const SwPageDesc& rCurPageDesc = rOldSh.GetPageDesc(rOldSh.GetCurPageDesc());
920
921 IDocumentDeviceAccess* pIDDA_old = rOldSh.getIDocumentDeviceAccess();
922
923 if( pIDDA_old->getPrinter( false ) )
924 {
925 pIDDA->setJobsetup( *pIDDA_old->getJobsetup() );
926 //#69563# if it isn't the same printer then the pointer has been invalidated!
927 pTempPrinter = pIDDA->getPrinter( true );
928 }
929
930 pTempPrinter->SetPaperBin(rCurPageDesc.GetMaster().GetPaperBin().GetValue());
931
932 return xDocSh;
933 }
934
935 /*-- 17.12.98 09:34:29---------------------------------------------------
936
937 -----------------------------------------------------------------------*/
NotifySelChanged()938 void SwXTextView::NotifySelChanged()
939 {
940 DBG_ASSERT( m_pView, "view is missing" );
941
942 // destroy temporary document with selected text that is used
943 // in PDF export of (multi-)selections and on print of (multi-)selections
944 if (m_pView && m_pView->GetTmpSelectionDoc().Is())
945 {
946 // do not destroy the temporary document, if an action is pending
947 bool bActionPending = false;
948 {
949 SfxObjectShellLock& xDocSh = m_pView->GetTmpSelectionDoc();
950 SwDoc* pDoc = static_cast< SwDocShell* >(&xDocSh)->GetDoc();
951 SwView* pView = pDoc ? pDoc->GetDocShell()->GetView() : 0;
952 bActionPending = pView ? pView->GetWrtShell().ActionPend() : false;
953 }
954 if ( !bActionPending )
955 {
956 m_pView->GetTmpSelectionDoc()->DoClose();
957 m_pView->GetTmpSelectionDoc() = 0;
958 }
959 }
960
961 uno::Reference< uno::XInterface > xInt = (cppu::OWeakObject*)(SfxBaseController*)this;
962
963 lang::EventObject aEvent(xInt);
964
965 sal_uInt16 nCount = aSelChangedListeners.Count();
966 for ( sal_uInt16 i = nCount; i--; )
967 {
968 uno::Reference< view::XSelectionChangeListener > *pObj = aSelChangedListeners[i];
969 (*pObj)->selectionChanged(aEvent);
970 }
971 }
972 /* -----------------------------12.07.01 13:26--------------------------------
973
974 ---------------------------------------------------------------------------*/
NotifyDBChanged()975 void SwXTextView::NotifyDBChanged()
976 {
977 URL aURL;
978 aURL.Complete = C2U(SwXDispatch::GetDBChangeURL());
979
980 sal_uInt16 nCount = aSelChangedListeners.Count();
981 for ( sal_uInt16 i = nCount; i--; )
982 {
983 uno::Reference< view::XSelectionChangeListener > *pObj = aSelChangedListeners[i];
984 uno::Reference<XDispatch> xDispatch((*pObj), UNO_QUERY);
985 if(xDispatch.is())
986 xDispatch->dispatch(aURL, Sequence<PropertyValue>(0));
987 }
988 }
989
990 /* -----------------------------10.12.04 11:07--------------------------------
991
992 ---------------------------------------------------------------------------*/
993
getPropertySetInfo()994 uno::Reference< beans::XPropertySetInfo > SAL_CALL SwXTextView::getPropertySetInfo( )
995 throw (uno::RuntimeException)
996 {
997 vos::OGuard aGuard( Application::GetSolarMutex() );
998 static uno::Reference< XPropertySetInfo > aRef = m_pPropSet->getPropertySetInfo();
999 return aRef;
1000 }
1001
1002
setPropertyValue(const OUString & rPropertyName,const uno::Any & rValue)1003 void SAL_CALL SwXTextView::setPropertyValue(
1004 const OUString& rPropertyName, const uno::Any& rValue )
1005 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
1006 {
1007 vos::OGuard aGuard( Application::GetSolarMutex() );
1008 const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap()->getByName( rPropertyName );
1009 if (!pEntry)
1010 throw UnknownPropertyException();
1011 else if (pEntry->nFlags & PropertyAttribute::READONLY)
1012 throw PropertyVetoException();
1013 else
1014 {
1015 switch (pEntry->nWID)
1016 {
1017 case WID_IS_HIDE_SPELL_MARKS :
1018 // deprecated #i91949
1019 break;
1020 case WID_IS_CONSTANT_SPELLCHECK :
1021 {
1022 sal_Bool bVal = sal_False;
1023 const SwViewOption *pOpt = m_pView->GetWrtShell().GetViewOptions();
1024 if (!pOpt || !(rValue >>= bVal))
1025 throw RuntimeException();
1026 SwViewOption aNewOpt( *pOpt );
1027 if (pEntry->nWID == WID_IS_CONSTANT_SPELLCHECK)
1028 aNewOpt.SetOnlineSpell(bVal);
1029 m_pView->GetWrtShell().ApplyViewOptions( aNewOpt );
1030 }
1031 break;
1032 default :
1033 DBG_ERROR("unknown WID");
1034 }
1035 }
1036 }
1037
1038
getPropertyValue(const OUString & rPropertyName)1039 uno::Any SAL_CALL SwXTextView::getPropertyValue(
1040 const OUString& rPropertyName )
1041 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
1042 {
1043 vos::OGuard aGuard( Application::GetSolarMutex() );
1044
1045 Any aRet;
1046
1047 const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap()->getByName( rPropertyName );
1048 if (!pEntry)
1049 throw UnknownPropertyException();
1050 else
1051 {
1052 sal_Int16 nWID = pEntry->nWID;
1053 switch (nWID)
1054 {
1055 case WID_PAGE_COUNT :
1056 case WID_LINE_COUNT :
1057 {
1058 // format document completely in order to get meaningful
1059 // values for page count and line count
1060 m_pView->GetWrtShell().CalcLayout();
1061
1062 sal_Int32 nCount = -1;
1063 if (nWID == WID_PAGE_COUNT)
1064 nCount = m_pView->GetWrtShell().GetPageCount();
1065 else // WID_LINE_COUNT
1066 nCount = m_pView->GetWrtShell().GetLineCount( sal_False /*of whole document*/ );
1067 aRet <<= nCount;
1068 }
1069 break;
1070 case WID_IS_HIDE_SPELL_MARKS :
1071 // deprecated #i91949
1072 break;
1073 case WID_IS_CONSTANT_SPELLCHECK :
1074 {
1075 const SwViewOption *pOpt = m_pView->GetWrtShell().GetViewOptions();
1076 if (!pOpt)
1077 throw RuntimeException();
1078 sal_uInt32 nFlag = VIEWOPT_1_ONLINESPELL;
1079 sal_Bool bVal = 0 != (pOpt->GetCoreOptions() & nFlag);
1080 aRet <<= bVal;
1081 }
1082 break;
1083 default :
1084 DBG_ERROR("unknown WID");
1085 }
1086 }
1087
1088 return aRet;
1089 }
1090
1091
addPropertyChangeListener(const OUString &,const uno::Reference<beans::XPropertyChangeListener> &)1092 void SAL_CALL SwXTextView::addPropertyChangeListener(
1093 const OUString& /*rPropertyName*/,
1094 const uno::Reference< beans::XPropertyChangeListener >& /*rxListener*/ )
1095 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
1096 {
1097 DBG_WARNING("not implemented");
1098 }
1099
1100
removePropertyChangeListener(const OUString &,const uno::Reference<beans::XPropertyChangeListener> &)1101 void SAL_CALL SwXTextView::removePropertyChangeListener(
1102 const OUString& /*rPropertyName*/,
1103 const uno::Reference< beans::XPropertyChangeListener >& /*rxListener*/ )
1104 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
1105 {
1106 DBG_WARNING("not implemented");
1107 }
1108
1109
addVetoableChangeListener(const OUString &,const uno::Reference<beans::XVetoableChangeListener> &)1110 void SAL_CALL SwXTextView::addVetoableChangeListener(
1111 const OUString& /*rPropertyName*/,
1112 const uno::Reference< beans::XVetoableChangeListener >& /*rxListener*/ )
1113 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
1114 {
1115 DBG_WARNING("not implemented");
1116 }
1117
1118
removeVetoableChangeListener(const OUString &,const uno::Reference<beans::XVetoableChangeListener> &)1119 void SAL_CALL SwXTextView::removeVetoableChangeListener(
1120 const OUString& /*rPropertyName*/,
1121 const uno::Reference< beans::XVetoableChangeListener >& /*rxListener*/ )
1122 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
1123 {
1124 DBG_WARNING("not implemented");
1125 }
1126
1127 /* -----------------------------06.04.00 11:07--------------------------------
1128
1129 ---------------------------------------------------------------------------*/
getImplementationName(void)1130 OUString SwXTextView::getImplementationName(void) throw( RuntimeException )
1131 {
1132 return C2U("SwXTextView");
1133 }
1134 /* -----------------------------06.04.00 11:07--------------------------------
1135
1136 ---------------------------------------------------------------------------*/
supportsService(const OUString & rServiceName)1137 sal_Bool SwXTextView::supportsService(const OUString& rServiceName) throw( RuntimeException )
1138 {
1139 return rServiceName.equalsAscii("com.sun.star.text.TextDocumentView") ||
1140 rServiceName.equalsAscii("com.sun.star.view.OfficeDocumentView");
1141 }
1142 /* -----------------------------06.04.00 11:07--------------------------------
1143
1144 ---------------------------------------------------------------------------*/
getSupportedServiceNames(void)1145 Sequence< OUString > SwXTextView::getSupportedServiceNames(void) throw( RuntimeException )
1146 {
1147 Sequence< OUString > aRet(2);
1148 OUString* pArray = aRet.getArray();
1149 pArray[0] = C2U("com.sun.star.text.TextDocumentView");
1150 pArray[1] = C2U("com.sun.star.view.OfficeDocumentView");
1151 return aRet;
1152 }
1153
1154 /******************************************************************
1155 * SwXTextViewCursor
1156 ******************************************************************/
1157 /*-- 17.12.98 09:36:23---------------------------------------------------
1158
1159 -----------------------------------------------------------------------*/
SwXTextViewCursor(SwView * pVw)1160 SwXTextViewCursor::SwXTextViewCursor(SwView* pVw) :
1161 m_pView(pVw),
1162 m_pPropSet(aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_CURSOR))
1163 {
1164 }
1165 /*-- 17.12.98 09:36:24---------------------------------------------------
1166
1167 -----------------------------------------------------------------------*/
~SwXTextViewCursor()1168 SwXTextViewCursor::~SwXTextViewCursor()
1169 {
1170 }
1171 /*-- 06.10.04 09:36:25---------------------------------------------------
1172
1173 -----------------------------------------------------------------------*/
1174
1175 // used to determine if there is a text selction or not.
1176 // If there is no text selection the functions that need a working
1177 // cursor will be disabled (throw RuntimeException). This will be the case
1178 // for the following interfaces:
1179 // - XViewCursor
1180 // - XTextCursor
1181 // - XTextRange
1182 // - XLineCursor
1183
IsTextSelection(sal_Bool bAllowTables) const1184 sal_Bool SwXTextViewCursor::IsTextSelection( sal_Bool bAllowTables ) const
1185 {
1186
1187 sal_Bool bRes = sal_False;
1188 DBG_ASSERT(m_pView, "m_pView is NULL ???");
1189 if(m_pView)
1190 {
1191 //! m_pView->GetShellMode() will only work after the shell
1192 //! has already changed and thus can not be used here!
1193 SelectionType eSelType = m_pView->GetWrtShell().GetSelectionType();
1194 bRes = ( (nsSelectionType::SEL_TXT & eSelType) ||
1195 (nsSelectionType::SEL_NUM & eSelType) ) &&
1196 (!(nsSelectionType::SEL_TBL_CELLS & eSelType) || bAllowTables);
1197 }
1198 return bRes;
1199 }
1200
1201 /*-- 17.12.98 09:36:25---------------------------------------------------
1202
1203 -----------------------------------------------------------------------*/
isVisible(void)1204 sal_Bool SwXTextViewCursor::isVisible(void) throw( uno::RuntimeException )
1205 {
1206 ::vos::OGuard aGuard(Application::GetSolarMutex());
1207 DBG_WARNING("not implemented");
1208 return sal_True;
1209 }
1210 /*-- 17.12.98 09:36:25---------------------------------------------------
1211
1212 -----------------------------------------------------------------------*/
setVisible(sal_Bool)1213 void SwXTextViewCursor::setVisible(sal_Bool /*bVisible*/) throw( uno::RuntimeException )
1214 {
1215 ::vos::OGuard aGuard(Application::GetSolarMutex());
1216 DBG_WARNING("not implemented");
1217 }
1218 /*-- 17.12.98 09:36:26---------------------------------------------------
1219
1220 -----------------------------------------------------------------------*/
getPosition(void)1221 awt::Point SwXTextViewCursor::getPosition(void) throw( uno::RuntimeException )
1222 {
1223 ::vos::OGuard aGuard(Application::GetSolarMutex());
1224 awt::Point aRet;
1225 if(m_pView)
1226 {
1227 const SwWrtShell& rSh = m_pView->GetWrtShell();
1228 const SwRect aCharRect(rSh.GetCharRect());
1229
1230 const SwFrmFmt& rMaster = rSh.GetPageDesc( rSh.GetCurPageDesc() ).GetMaster();
1231
1232 const SvxULSpaceItem& rUL = rMaster.GetULSpace();
1233 const long nY = aCharRect.Top() - (rUL.GetUpper() + DOCUMENTBORDER);
1234 aRet.Y = TWIP_TO_MM100(nY);
1235
1236 const SvxLRSpaceItem& rLR = rMaster.GetLRSpace();
1237 const long nX = aCharRect.Left() - (rLR.GetLeft() + DOCUMENTBORDER);
1238 aRet.X = TWIP_TO_MM100(nX);
1239 }
1240 else
1241 throw uno::RuntimeException();
1242 return aRet;
1243 }
1244 /*-- 17.12.98 09:36:26---------------------------------------------------
1245
1246 -----------------------------------------------------------------------*/
collapseToStart(void)1247 void SwXTextViewCursor::collapseToStart(void) throw( uno::RuntimeException )
1248 {
1249 ::vos::OGuard aGuard(Application::GetSolarMutex());
1250 if(m_pView)
1251 {
1252 if (!IsTextSelection())
1253 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1254
1255 SwWrtShell& rSh = m_pView->GetWrtShell();
1256 if(rSh.HasSelection())
1257 {
1258 SwPaM* pShellCrsr = rSh.GetCrsr();
1259 if(*pShellCrsr->GetPoint() > *pShellCrsr->GetMark())
1260 pShellCrsr->Exchange();
1261 pShellCrsr->DeleteMark();
1262 rSh.EnterStdMode();
1263 rSh.SetSelection(*pShellCrsr);
1264 }
1265 }
1266 else
1267 throw uno::RuntimeException();
1268 }
1269 /*-- 17.12.98 09:36:26---------------------------------------------------
1270
1271 -----------------------------------------------------------------------*/
collapseToEnd(void)1272 void SwXTextViewCursor::collapseToEnd(void) throw( uno::RuntimeException )
1273 {
1274 ::vos::OGuard aGuard(Application::GetSolarMutex());
1275 if(m_pView)
1276 {
1277 if (!IsTextSelection())
1278 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1279
1280 SwWrtShell& rSh = m_pView->GetWrtShell();
1281 if(rSh.HasSelection())
1282 {
1283 SwPaM* pShellCrsr = rSh.GetCrsr();
1284 if(*pShellCrsr->GetPoint() < *pShellCrsr->GetMark())
1285 pShellCrsr->Exchange();
1286 pShellCrsr->DeleteMark();
1287 rSh.EnterStdMode();
1288 rSh.SetSelection(*pShellCrsr);
1289 }
1290 }
1291 else
1292 throw uno::RuntimeException();
1293 }
1294 /*-- 17.12.98 09:36:27---------------------------------------------------
1295
1296 -----------------------------------------------------------------------*/
isCollapsed(void)1297 sal_Bool SwXTextViewCursor::isCollapsed(void) throw( uno::RuntimeException )
1298 {
1299 ::vos::OGuard aGuard(Application::GetSolarMutex());
1300 sal_Bool bRet = sal_False;
1301 if(m_pView)
1302 {
1303 if (!IsTextSelection())
1304 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1305
1306 const SwWrtShell& rSh = m_pView->GetWrtShell();
1307 bRet = !rSh.HasSelection();
1308 }
1309 else
1310 throw uno::RuntimeException();
1311 return bRet;
1312
1313 }
1314 /*-- 17.12.98 09:36:27---------------------------------------------------
1315
1316 -----------------------------------------------------------------------*/
goLeft(sal_Int16 nCount,sal_Bool bExpand)1317 sal_Bool SwXTextViewCursor::goLeft(sal_Int16 nCount, sal_Bool bExpand) throw( uno::RuntimeException )
1318 {
1319 ::vos::OGuard aGuard(Application::GetSolarMutex());
1320 sal_Bool bRet = sal_False;
1321 if(m_pView)
1322 {
1323 if (!IsTextSelection())
1324 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1325
1326 for( sal_uInt16 i = 0; i < nCount; i++ )
1327 bRet = m_pView->GetWrtShell().Left( CRSR_SKIP_CHARS, bExpand, 1, sal_True );
1328 }
1329 else
1330 throw uno::RuntimeException();
1331 return bRet;
1332 }
1333 /*-- 17.12.98 09:36:27---------------------------------------------------
1334
1335 -----------------------------------------------------------------------*/
goRight(sal_Int16 nCount,sal_Bool bExpand)1336 sal_Bool SwXTextViewCursor::goRight(sal_Int16 nCount, sal_Bool bExpand) throw( uno::RuntimeException )
1337 {
1338 ::vos::OGuard aGuard(Application::GetSolarMutex());
1339 sal_Bool bRet = sal_False;
1340 if(m_pView)
1341 {
1342 if (!IsTextSelection())
1343 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1344
1345 for( sal_uInt16 i = 0; i < nCount; i++ )
1346 bRet = m_pView->GetWrtShell().Right( CRSR_SKIP_CHARS, bExpand, 1, sal_True );
1347 }
1348 else
1349 throw uno::RuntimeException();
1350 return bRet;
1351
1352 }
1353 /* -----------------08.03.99 11:18-------------------
1354 *
1355 * --------------------------------------------------*/
gotoRange(const uno::Reference<text::XTextRange> & xRange,sal_Bool bExpand)1356 void SwXTextViewCursor::gotoRange(
1357 const uno::Reference< text::XTextRange > & xRange,
1358 sal_Bool bExpand)
1359 throw(RuntimeException)
1360 {
1361 ::vos::OGuard aGuard(Application::GetSolarMutex());
1362 if(m_pView && xRange.is())
1363 {
1364 if (!IsTextSelection())
1365 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1366
1367 SwUnoInternalPaM rDestPam(*m_pView->GetDocShell()->GetDoc());
1368 if (!::sw::XTextRangeToSwPaM(rDestPam, xRange))
1369 {
1370 throw uno::RuntimeException();
1371 }
1372
1373 ShellModes eSelMode = m_pView->GetShellMode();
1374 SwWrtShell& rSh = m_pView->GetWrtShell();
1375 // call EnterStdMode in non-text selections only
1376 if(!bExpand ||
1377 (eSelMode != SHELL_MODE_TABLE_TEXT &&
1378 eSelMode != SHELL_MODE_LIST_TEXT &&
1379 eSelMode != SHELL_MODE_TABLE_LIST_TEXT &&
1380 eSelMode != SHELL_MODE_TEXT ))
1381 rSh.EnterStdMode();
1382 SwPaM* pShellCrsr = rSh.GetCrsr();
1383 SwPaM aOwnPaM(*pShellCrsr->GetPoint());
1384 if(pShellCrsr->HasMark())
1385 {
1386 aOwnPaM.SetMark();
1387 *aOwnPaM.GetMark() = *pShellCrsr->GetMark();
1388 }
1389
1390 uno::Reference<lang::XUnoTunnel> xRangeTunnel( xRange, uno::UNO_QUERY);
1391 SwXTextRange* pRange = 0;
1392 SwXParagraph* pPara = 0;
1393 OTextCursorHelper* pCursor = 0;
1394 if(xRangeTunnel.is())
1395 {
1396 pRange = reinterpret_cast<SwXTextRange*>(xRangeTunnel->getSomething(
1397 SwXTextRange::getUnoTunnelId()));
1398 pCursor = reinterpret_cast<OTextCursorHelper*>(xRangeTunnel->getSomething(
1399 OTextCursorHelper::getUnoTunnelId()));
1400 pPara = reinterpret_cast<SwXParagraph*>(xRangeTunnel->getSomething(
1401 SwXParagraph::getUnoTunnelId()));
1402 }
1403
1404 const sal_uInt16 nFrmType = rSh.GetFrmType(0,sal_True);
1405
1406 SwStartNodeType eSearchNodeType = SwNormalStartNode;
1407 if(nFrmType & FRMTYPE_FLY_ANY)
1408 eSearchNodeType = SwFlyStartNode;
1409 else if(nFrmType &FRMTYPE_HEADER)
1410 eSearchNodeType = SwHeaderStartNode;
1411 else if(nFrmType & FRMTYPE_FOOTER)
1412 eSearchNodeType = SwFooterStartNode;
1413 else if(nFrmType & FRMTYPE_TABLE)
1414 eSearchNodeType = SwTableBoxStartNode;
1415 else if(nFrmType & FRMTYPE_FOOTNOTE)
1416 eSearchNodeType = SwFootnoteStartNode;
1417
1418 const SwStartNode* pOwnStartNode = aOwnPaM.GetNode()->
1419 FindSttNodeByType(eSearchNodeType);
1420
1421 const SwNode* pSrcNode = 0;
1422 if(pCursor && pCursor->GetPaM())
1423 {
1424 pSrcNode = pCursor->GetPaM()->GetNode();
1425 }
1426 else if (pRange)
1427 {
1428 SwPaM aPam(pRange->GetDoc()->GetNodes());
1429 if (pRange->GetPositions(aPam))
1430 {
1431 pSrcNode = aPam.GetNode();
1432 }
1433 }
1434 else if (pPara && pPara->GetTxtNode())
1435 {
1436 pSrcNode = pPara->GetTxtNode();
1437 }
1438 const SwStartNode* pTmp = pSrcNode ? pSrcNode->FindSttNodeByType(eSearchNodeType) : 0;
1439
1440 //SectionNodes ueberspringen
1441 while(pTmp && pTmp->IsSectionNode())
1442 {
1443 pTmp = pTmp->StartOfSectionNode();
1444 }
1445 while(pOwnStartNode && pOwnStartNode->IsSectionNode())
1446 {
1447 pOwnStartNode = pOwnStartNode->StartOfSectionNode();
1448 }
1449 //ohne Expand darf mit dem ViewCursor ueberall hingesprungen werden
1450 //mit Expand nur in der gleichen Umgebung
1451 if(bExpand &&
1452 (pOwnStartNode != pTmp ||
1453 (eSelMode != SHELL_MODE_TABLE_TEXT &&
1454 eSelMode != SHELL_MODE_LIST_TEXT &&
1455 eSelMode != SHELL_MODE_TABLE_LIST_TEXT &&
1456 eSelMode != SHELL_MODE_TEXT)))
1457 throw uno::RuntimeException();
1458
1459 //jetzt muss die Selektion erweitert werden
1460 if(bExpand)
1461 {
1462 // der Cursor soll alles einschliessen, was bisher von ihm und dem uebergebenen
1463 // Range eingeschlossen wurde
1464 SwPosition aOwnLeft(*aOwnPaM.Start());
1465 SwPosition aOwnRight(*aOwnPaM.End());
1466 SwPosition* pParamLeft = rDestPam.Start();
1467 SwPosition* pParamRight = rDestPam.End();
1468 // jetzt sind vier SwPositions da, zwei davon werden gebraucht, also welche?
1469 if(aOwnRight > *pParamRight)
1470 *aOwnPaM.GetPoint() = aOwnRight;
1471 else
1472 *aOwnPaM.GetPoint() = *pParamRight;
1473 aOwnPaM.SetMark();
1474 if(aOwnLeft < *pParamLeft)
1475 *aOwnPaM.GetMark() = aOwnLeft;
1476 else
1477 *aOwnPaM.GetMark() = *pParamLeft;
1478 }
1479 else
1480 {
1481 //der Cursor soll dem uebergebenen Range entsprechen
1482 *aOwnPaM.GetPoint() = *rDestPam.GetPoint();
1483 if(rDestPam.HasMark())
1484 {
1485 aOwnPaM.SetMark();
1486 *aOwnPaM.GetMark() = *rDestPam.GetMark();
1487 }
1488 else
1489 aOwnPaM.DeleteMark();
1490 }
1491 rSh.SetSelection(aOwnPaM);
1492 }
1493 else
1494 throw uno::RuntimeException();
1495
1496 }
1497 /*-- 17.12.98 09:36:28---------------------------------------------------
1498
1499 -----------------------------------------------------------------------*/
gotoStart(sal_Bool bExpand)1500 void SwXTextViewCursor::gotoStart(sal_Bool bExpand) throw( uno::RuntimeException )
1501 {
1502 ::vos::OGuard aGuard(Application::GetSolarMutex());
1503 if(m_pView)
1504 {
1505 if (!IsTextSelection())
1506 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1507
1508 m_pView->GetWrtShell().SttDoc( bExpand );
1509 }
1510 else
1511 throw uno::RuntimeException();
1512 }
1513 /*-- 17.12.98 09:36:28---------------------------------------------------
1514
1515 -----------------------------------------------------------------------*/
gotoEnd(sal_Bool bExpand)1516 void SwXTextViewCursor::gotoEnd(sal_Bool bExpand) throw( uno::RuntimeException )
1517 {
1518 ::vos::OGuard aGuard(Application::GetSolarMutex());
1519 if(m_pView)
1520 {
1521 if (!IsTextSelection())
1522 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1523
1524 m_pView->GetWrtShell().EndDoc( bExpand );
1525 }
1526 else
1527 throw uno::RuntimeException();
1528 }
1529 /*-- 17.12.98 09:36:28---------------------------------------------------
1530
1531 -----------------------------------------------------------------------*/
jumpToFirstPage(void)1532 sal_Bool SwXTextViewCursor::jumpToFirstPage(void) throw( uno::RuntimeException )
1533 {
1534 ::vos::OGuard aGuard(Application::GetSolarMutex());
1535 sal_Bool bRet = sal_False;
1536 if(m_pView)
1537 {
1538 SwWrtShell& rSh = m_pView->GetWrtShell();
1539 if (rSh.IsSelFrmMode())
1540 {
1541 rSh.UnSelectFrm();
1542 rSh.LeaveSelFrmMode();
1543 }
1544 rSh.EnterStdMode();
1545 bRet = rSh.SttEndDoc(sal_True);
1546 }
1547 else
1548 throw uno::RuntimeException();
1549 return bRet;
1550 }
1551 /*-- 17.12.98 09:36:29---------------------------------------------------
1552
1553 -----------------------------------------------------------------------*/
jumpToLastPage(void)1554 sal_Bool SwXTextViewCursor::jumpToLastPage(void) throw( uno::RuntimeException )
1555 {
1556 ::vos::OGuard aGuard(Application::GetSolarMutex());
1557 sal_Bool bRet = sal_False;
1558 if(m_pView)
1559 {
1560 SwWrtShell& rSh = m_pView->GetWrtShell();
1561 if (rSh.IsSelFrmMode())
1562 {
1563 rSh.UnSelectFrm();
1564 rSh.LeaveSelFrmMode();
1565 }
1566 rSh.EnterStdMode();
1567 bRet = rSh.SttEndDoc(sal_False);
1568 rSh.SttPg();
1569 }
1570 else
1571 throw uno::RuntimeException();
1572 return bRet;
1573 }
1574 /*-- 17.12.98 09:36:30---------------------------------------------------
1575
1576 -----------------------------------------------------------------------*/
jumpToPage(sal_Int16 nPage)1577 sal_Bool SwXTextViewCursor::jumpToPage(sal_Int16 nPage) throw( uno::RuntimeException )
1578 {
1579 ::vos::OGuard aGuard(Application::GetSolarMutex());
1580 sal_Bool bRet = sal_False;
1581 if(m_pView)
1582 bRet = m_pView->GetWrtShell().GotoPage(nPage, sal_True);
1583 else
1584 throw uno::RuntimeException();
1585 return bRet;
1586 }
1587 /*-- 17.12.98 09:36:30---------------------------------------------------
1588
1589 -----------------------------------------------------------------------*/
jumpToNextPage(void)1590 sal_Bool SwXTextViewCursor::jumpToNextPage(void) throw( uno::RuntimeException )
1591 {
1592 ::vos::OGuard aGuard(Application::GetSolarMutex());
1593 sal_Bool bRet = sal_False;
1594 if(m_pView)
1595 bRet = m_pView->GetWrtShell().SttNxtPg();
1596 else
1597 throw uno::RuntimeException();
1598 return bRet;
1599 }
1600 /*-- 17.12.98 09:36:31---------------------------------------------------
1601
1602 -----------------------------------------------------------------------*/
jumpToPreviousPage(void)1603 sal_Bool SwXTextViewCursor::jumpToPreviousPage(void) throw( uno::RuntimeException )
1604 {
1605 ::vos::OGuard aGuard(Application::GetSolarMutex());
1606 sal_Bool bRet = sal_False;
1607 if(m_pView)
1608 bRet = m_pView->GetWrtShell().EndPrvPg();
1609 else
1610 throw uno::RuntimeException();
1611 return bRet;
1612 }
1613 /*-- 17.12.98 09:36:32---------------------------------------------------
1614
1615 -----------------------------------------------------------------------*/
jumpToEndOfPage(void)1616 sal_Bool SwXTextViewCursor::jumpToEndOfPage(void) throw( uno::RuntimeException )
1617 {
1618 ::vos::OGuard aGuard(Application::GetSolarMutex());
1619 sal_Bool bRet = sal_False;
1620 if(m_pView)
1621 bRet = m_pView->GetWrtShell().EndPg();
1622 else
1623 throw uno::RuntimeException();
1624 return bRet;
1625 }
1626 /*-- 17.12.98 09:36:32---------------------------------------------------
1627
1628 -----------------------------------------------------------------------*/
jumpToStartOfPage(void)1629 sal_Bool SwXTextViewCursor::jumpToStartOfPage(void) throw( uno::RuntimeException )
1630 {
1631 ::vos::OGuard aGuard(Application::GetSolarMutex());
1632 sal_Bool bRet = sal_False;
1633 if(m_pView)
1634 bRet = m_pView->GetWrtShell().SttPg();
1635 else
1636 throw uno::RuntimeException();
1637 return bRet;
1638 }
1639 /* -----------------04.10.99 14:21-------------------
1640
1641 --------------------------------------------------*/
getPage(void)1642 sal_Int16 SwXTextViewCursor::getPage(void) throw( uno::RuntimeException )
1643 {
1644 ::vos::OGuard aGuard(Application::GetSolarMutex());
1645 short nRet = 0;
1646 if(m_pView)
1647 {
1648 SwWrtShell& rSh = m_pView->GetWrtShell();
1649 SwPaM* pShellCrsr = rSh.GetCrsr();
1650 nRet = (short)pShellCrsr->GetPageNum( sal_True, 0 );
1651 }
1652 else
1653 throw uno::RuntimeException();
1654 return nRet;
1655 }
1656 /*-- 17.12.98 09:36:33---------------------------------------------------
1657
1658 -----------------------------------------------------------------------*/
screenDown(void)1659 sal_Bool SwXTextViewCursor::screenDown(void) throw( uno::RuntimeException )
1660 {
1661 ::vos::OGuard aGuard(Application::GetSolarMutex());
1662 sal_Bool bRet = sal_False;
1663 if(m_pView)
1664 {
1665 SfxRequest aReq(FN_PAGEDOWN, SFX_CALLMODE_SLOT, m_pView->GetPool());
1666 m_pView->Execute(aReq);
1667 const SfxPoolItem* pRet = aReq.GetReturnValue();
1668 bRet = pRet && ((const SfxBoolItem*)pRet)->GetValue();
1669 }
1670 else
1671 throw uno::RuntimeException();
1672 return bRet;
1673 }
1674 /*-- 17.12.98 09:36:33---------------------------------------------------
1675
1676 -----------------------------------------------------------------------*/
screenUp(void)1677 sal_Bool SwXTextViewCursor::screenUp(void) throw( uno::RuntimeException )
1678 {
1679 ::vos::OGuard aGuard(Application::GetSolarMutex());
1680 sal_Bool bRet = sal_False;
1681 if(m_pView)
1682 {
1683 SfxRequest aReq(FN_PAGEUP, SFX_CALLMODE_SLOT, m_pView->GetPool());
1684 m_pView->Execute(aReq);
1685 const SfxPoolItem* pRet = aReq.GetReturnValue();
1686 bRet = pRet && ((const SfxBoolItem*)pRet)->GetValue();
1687 }
1688 else
1689 throw uno::RuntimeException();
1690 return bRet;
1691 }
1692 /*-- 17.12.98 11:59:05---------------------------------------------------
1693
1694 -----------------------------------------------------------------------*/
getText(void)1695 uno::Reference< text::XText > SwXTextViewCursor::getText(void) throw( uno::RuntimeException )
1696 {
1697 ::vos::OGuard aGuard(Application::GetSolarMutex());
1698 uno::Reference< text::XText > xRet;
1699 if(m_pView)
1700 {
1701 if (!IsTextSelection( sal_False ))
1702 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1703
1704 SwWrtShell& rSh = m_pView->GetWrtShell();
1705 SwPaM* pShellCrsr = rSh.GetCrsr();
1706 SwDoc* pDoc = m_pView->GetDocShell()->GetDoc();
1707 xRet = ::sw::CreateParentXText(*pDoc, *pShellCrsr->Start());
1708 }
1709 else
1710 throw uno::RuntimeException();
1711 return xRet;
1712 }
1713 /*-- 17.12.98 11:59:05---------------------------------------------------
1714
1715 -----------------------------------------------------------------------*/
getStart(void)1716 uno::Reference< text::XTextRange > SwXTextViewCursor::getStart(void) throw( uno::RuntimeException )
1717 {
1718 ::vos::OGuard aGuard(Application::GetSolarMutex());
1719 uno::Reference< text::XTextRange > xRet;
1720 if(m_pView)
1721 {
1722 if (!IsTextSelection())
1723 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1724
1725 SwWrtShell& rSh = m_pView->GetWrtShell();
1726 SwPaM* pShellCrsr = rSh.GetCrsr();
1727 SwDoc* pDoc = m_pView->GetDocShell()->GetDoc();
1728 xRet = SwXTextRange::CreateXTextRange(*pDoc, *pShellCrsr->Start(), 0);
1729 }
1730 else
1731 throw uno::RuntimeException();
1732 return xRet;
1733 }
1734 /*-- 17.12.98 11:59:06---------------------------------------------------
1735
1736 -----------------------------------------------------------------------*/
getEnd(void)1737 uno::Reference< text::XTextRange > SwXTextViewCursor::getEnd(void) throw( uno::RuntimeException )
1738 {
1739 ::vos::OGuard aGuard(Application::GetSolarMutex());
1740 uno::Reference< text::XTextRange > xRet;
1741 if(m_pView)
1742 {
1743 if (!IsTextSelection())
1744 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1745
1746 SwWrtShell& rSh = m_pView->GetWrtShell();
1747 SwPaM* pShellCrsr = rSh.GetCrsr();
1748 SwDoc* pDoc = m_pView->GetDocShell()->GetDoc();
1749 xRet = SwXTextRange::CreateXTextRange(*pDoc, *pShellCrsr->End(), 0);
1750 }
1751 else
1752 throw uno::RuntimeException();
1753 return xRet;
1754 }
1755 /* -----------------12.10.99 09:03-------------------
1756
1757 --------------------------------------------------*/
getString(void)1758 OUString SwXTextViewCursor::getString(void) throw( uno::RuntimeException )
1759 {
1760 ::vos::OGuard aGuard(Application::GetSolarMutex());
1761 OUString uRet;
1762 if(m_pView)
1763 {
1764 if (!IsTextSelection( sal_False ))
1765 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1766
1767 ShellModes eSelMode = m_pView->GetShellMode();
1768 switch(eSelMode)
1769 {
1770 //! since setString for SEL_TABLE_TEXT (with possible
1771 //! multi selection of cells) would not work properly we
1772 //! will ignore this case for both
1773 //! functions (setString AND getString) because of symmetrie.
1774
1775 case SHELL_MODE_LIST_TEXT :
1776 case SHELL_MODE_TABLE_LIST_TEXT:
1777 case SHELL_MODE_TEXT :
1778 {
1779 SwWrtShell& rSh = m_pView->GetWrtShell();
1780 SwPaM* pShellCrsr = rSh.GetCrsr();
1781 SwUnoCursorHelper::GetTextFromPam(*pShellCrsr, uRet);
1782 }
1783 default:;//prevent warning
1784 }
1785 }
1786 return uRet;
1787 }
1788 /*-- 17.12.98 11:59:06---------------------------------------------------
1789
1790 -----------------------------------------------------------------------*/
setString(const OUString & aString)1791 void SwXTextViewCursor::setString(const OUString& aString) throw( uno::RuntimeException )
1792 {
1793 ::vos::OGuard aGuard(Application::GetSolarMutex());
1794 if(m_pView)
1795 {
1796 if (!IsTextSelection( sal_False ))
1797 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1798
1799 ShellModes eSelMode = m_pView->GetShellMode();
1800 switch(eSelMode)
1801 {
1802 //! since setString for SEL_TABLE_TEXT (with possible
1803 //! multi selection of cells) would not work properly we
1804 //! will ignore this case for both
1805 //! functions (setString AND getString) because of symmetrie.
1806
1807 case SHELL_MODE_LIST_TEXT :
1808 case SHELL_MODE_TABLE_LIST_TEXT :
1809 case SHELL_MODE_TEXT :
1810 {
1811 SwWrtShell& rSh = m_pView->GetWrtShell();
1812 SwCursor* pShellCrsr = rSh.GetSwCrsr();
1813 SwUnoCursorHelper::SetString(*pShellCrsr, aString);
1814 }
1815 default:;//prevent warning
1816 }
1817 }
1818 }
1819
1820 /*-- 29.06.00 17:33:38---------------------------------------------------
1821
1822 -----------------------------------------------------------------------*/
getPropertySetInfo()1823 uno::Reference< XPropertySetInfo > SwXTextViewCursor::getPropertySetInfo( ) throw(RuntimeException)
1824 {
1825 static uno::Reference< XPropertySetInfo > xRef = m_pPropSet->getPropertySetInfo();
1826 return xRef;
1827 }
1828 /*-- 29.06.00 17:33:39---------------------------------------------------
1829
1830 -----------------------------------------------------------------------*/
setPropertyValue(const OUString & rPropertyName,const Any & aValue)1831 void SwXTextViewCursor::setPropertyValue( const OUString& rPropertyName, const Any& aValue )
1832 throw(UnknownPropertyException, PropertyVetoException,
1833 IllegalArgumentException, WrappedTargetException, RuntimeException)
1834 {
1835 ::vos::OGuard aGuard(Application::GetSolarMutex());
1836 if(m_pView)
1837 {
1838 SwWrtShell& rSh = m_pView->GetWrtShell();
1839 SwPaM* pShellCrsr = rSh.GetCrsr();
1840 SwNode *pNode = pShellCrsr->GetNode();
1841 if (pNode && pNode->IsTxtNode())
1842 {
1843 SwUnoCursorHelper::SetPropertyValue(
1844 *pShellCrsr, *m_pPropSet, rPropertyName, aValue );
1845 }
1846 else
1847 throw RuntimeException();
1848 }
1849 else
1850 throw RuntimeException();
1851 }
1852 /*-- 29.06.00 17:33:39---------------------------------------------------
1853
1854 -----------------------------------------------------------------------*/
getPropertyValue(const OUString & rPropertyName)1855 Any SwXTextViewCursor::getPropertyValue( const OUString& rPropertyName )
1856 throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
1857 {
1858 ::vos::OGuard aGuard(Application::GetSolarMutex());
1859 Any aRet;
1860 if(m_pView)
1861 {
1862 SwWrtShell& rSh = m_pView->GetWrtShell();
1863 SwPaM* pShellCrsr = rSh.GetCrsr();
1864 aRet = SwUnoCursorHelper::GetPropertyValue(
1865 *pShellCrsr, *m_pPropSet, rPropertyName);
1866 }
1867 else
1868 throw RuntimeException();
1869 return aRet;
1870 }
1871 /*-- 29.06.00 17:33:40---------------------------------------------------
1872
1873 -----------------------------------------------------------------------*/
addPropertyChangeListener(const OUString &,const uno::Reference<XPropertyChangeListener> &)1874 void SwXTextViewCursor::addPropertyChangeListener(
1875 const OUString& /*aPropertyName*/, const uno::Reference< XPropertyChangeListener >& /*xListener*/ )
1876 throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
1877 {
1878 }
1879 /*-- 29.06.00 17:33:40---------------------------------------------------
1880
1881 -----------------------------------------------------------------------*/
removePropertyChangeListener(const OUString &,const uno::Reference<XPropertyChangeListener> &)1882 void SwXTextViewCursor::removePropertyChangeListener(
1883 const OUString& /*aPropertyName*/, const uno::Reference< XPropertyChangeListener >& /*aListener*/ )
1884 throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
1885 {
1886 }
1887 /*-- 29.06.00 17:33:41---------------------------------------------------
1888
1889 -----------------------------------------------------------------------*/
addVetoableChangeListener(const OUString &,const uno::Reference<XVetoableChangeListener> &)1890 void SwXTextViewCursor::addVetoableChangeListener(
1891 const OUString& /*PropertyName*/, const uno::Reference< XVetoableChangeListener >& /*aListener*/ )
1892 throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
1893 {
1894 }
1895 /*-- 29.06.00 17:33:41---------------------------------------------------
1896
1897 -----------------------------------------------------------------------*/
removeVetoableChangeListener(const OUString &,const uno::Reference<XVetoableChangeListener> &)1898 void SwXTextViewCursor::removeVetoableChangeListener(
1899 const OUString& /*PropertyName*/, const uno::Reference< XVetoableChangeListener >& /*aListener*/ ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
1900 {
1901 }
1902 /*-- 29.06.00 17:33:41---------------------------------------------------
1903
1904 -----------------------------------------------------------------------*/
getPropertyState(const OUString & rPropertyName)1905 PropertyState SwXTextViewCursor::getPropertyState( const OUString& rPropertyName )
1906 throw(UnknownPropertyException, RuntimeException)
1907 {
1908 ::vos::OGuard aGuard(Application::GetSolarMutex());
1909 PropertyState eState;
1910 if(m_pView)
1911 {
1912 SwWrtShell& rSh = m_pView->GetWrtShell();
1913 SwPaM* pShellCrsr = rSh.GetCrsr();
1914 eState = SwUnoCursorHelper::GetPropertyState(
1915 *pShellCrsr, *m_pPropSet, rPropertyName);
1916 }
1917 else
1918 throw RuntimeException();
1919 return eState;
1920 }
1921 /*-- 29.06.00 17:33:42---------------------------------------------------
1922
1923 -----------------------------------------------------------------------*/
getPropertyStates(const Sequence<OUString> & rPropertyNames)1924 Sequence< PropertyState > SwXTextViewCursor::getPropertyStates(
1925 const Sequence< OUString >& rPropertyNames ) throw(UnknownPropertyException, RuntimeException)
1926 {
1927 ::vos::OGuard aGuard(Application::GetSolarMutex());
1928 Sequence< PropertyState > aRet;
1929 if(m_pView)
1930 {
1931 SwWrtShell& rSh = m_pView->GetWrtShell();
1932 SwPaM* pShellCrsr = rSh.GetCrsr();
1933 aRet = SwUnoCursorHelper::GetPropertyStates(
1934 *pShellCrsr, *m_pPropSet, rPropertyNames);
1935 }
1936 return aRet;
1937 }
1938 /*-- 29.06.00 17:33:42---------------------------------------------------
1939
1940 -----------------------------------------------------------------------*/
setPropertyToDefault(const OUString & rPropertyName)1941 void SwXTextViewCursor::setPropertyToDefault( const OUString& rPropertyName )
1942 throw(UnknownPropertyException, RuntimeException)
1943 {
1944 ::vos::OGuard aGuard(Application::GetSolarMutex());
1945 if(m_pView)
1946 {
1947 SwWrtShell& rSh = m_pView->GetWrtShell();
1948 SwPaM* pShellCrsr = rSh.GetCrsr();
1949 SwUnoCursorHelper::SetPropertyToDefault(
1950 *pShellCrsr, *m_pPropSet, rPropertyName);
1951 }
1952 }
1953 /*-- 29.06.00 17:33:43---------------------------------------------------
1954
1955 -----------------------------------------------------------------------*/
getPropertyDefault(const OUString & rPropertyName)1956 Any SwXTextViewCursor::getPropertyDefault( const OUString& rPropertyName )
1957 throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
1958 {
1959 Any aRet;
1960 ::vos::OGuard aGuard(Application::GetSolarMutex());
1961 if(m_pView)
1962 {
1963 SwWrtShell& rSh = m_pView->GetWrtShell();
1964 SwPaM* pShellCrsr = rSh.GetCrsr();
1965 aRet = SwUnoCursorHelper::GetPropertyDefault(
1966 *pShellCrsr, *m_pPropSet, rPropertyName);
1967 }
1968 return aRet;
1969 }
1970 /*-- 28.09.99 08:31:19---------------------------------------------------
1971
1972 -----------------------------------------------------------------------*/
goDown(sal_Int16 nCount,sal_Bool bExpand)1973 sal_Bool SwXTextViewCursor::goDown(sal_Int16 nCount, sal_Bool bExpand) throw( uno::RuntimeException )
1974 {
1975 ::vos::OGuard aGuard(Application::GetSolarMutex());
1976 sal_Bool bRet = sal_False;
1977 if(m_pView)
1978 {
1979 if (!IsTextSelection())
1980 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
1981
1982 for( sal_uInt16 i = 0; i < nCount; i++ )
1983 bRet = m_pView->GetWrtShell().Down( bExpand, 1, sal_True );
1984 }
1985 else
1986 throw uno::RuntimeException();
1987 return bRet;
1988 }
1989 /*-- 28.09.99 08:31:20---------------------------------------------------
1990
1991 -----------------------------------------------------------------------*/
goUp(sal_Int16 nCount,sal_Bool bExpand)1992 sal_Bool SwXTextViewCursor::goUp(sal_Int16 nCount, sal_Bool bExpand) throw( uno::RuntimeException )
1993 {
1994 ::vos::OGuard aGuard(Application::GetSolarMutex());
1995 sal_Bool bRet = sal_False;
1996 if(m_pView)
1997 {
1998 if (!IsTextSelection())
1999 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
2000
2001 for( sal_uInt16 i = 0; i < nCount; i++ )
2002 bRet = m_pView->GetWrtShell().Up( bExpand, 1, sal_True );
2003 }
2004 else
2005 throw uno::RuntimeException();
2006 return bRet;
2007 }
2008 /*-- 28.09.99 08:31:20---------------------------------------------------
2009
2010 -----------------------------------------------------------------------*/
isAtStartOfLine(void)2011 sal_Bool SwXTextViewCursor::isAtStartOfLine(void) throw( uno::RuntimeException )
2012 {
2013 ::vos::OGuard aGuard(Application::GetSolarMutex());
2014 sal_Bool bRet = sal_False;
2015 if(m_pView)
2016 {
2017 if (!IsTextSelection( sal_False ))
2018 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
2019
2020 bRet = m_pView->GetWrtShell().IsAtLeftMargin();
2021 }
2022 else
2023 throw uno::RuntimeException();
2024 return bRet;
2025 }
2026 /*-- 28.09.99 08:31:21---------------------------------------------------
2027
2028 -----------------------------------------------------------------------*/
isAtEndOfLine(void)2029 sal_Bool SwXTextViewCursor::isAtEndOfLine(void) throw( uno::RuntimeException )
2030 {
2031 ::vos::OGuard aGuard(Application::GetSolarMutex());
2032 sal_Bool bRet = sal_False;
2033 if(m_pView)
2034 {
2035 if (!IsTextSelection( sal_False ))
2036 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
2037
2038 bRet = m_pView->GetWrtShell().IsAtRightMargin(sal_True);
2039 }
2040 else
2041 throw uno::RuntimeException();
2042 return bRet;
2043 }
2044 /*-- 28.09.99 08:31:21---------------------------------------------------
2045
2046 -----------------------------------------------------------------------*/
gotoEndOfLine(sal_Bool bExpand)2047 void SwXTextViewCursor::gotoEndOfLine(sal_Bool bExpand) throw( uno::RuntimeException )
2048 {
2049 ::vos::OGuard aGuard(Application::GetSolarMutex());
2050 if(m_pView)
2051 {
2052 if (!IsTextSelection( sal_False ))
2053 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
2054
2055 m_pView->GetWrtShell().RightMargin(bExpand, sal_True);
2056 }
2057 else
2058 throw uno::RuntimeException();
2059 }
2060 /*-- 28.09.99 08:31:22---------------------------------------------------
2061
2062 -----------------------------------------------------------------------*/
gotoStartOfLine(sal_Bool bExpand)2063 void SwXTextViewCursor::gotoStartOfLine(sal_Bool bExpand) throw( uno::RuntimeException )
2064 {
2065 ::vos::OGuard aGuard(Application::GetSolarMutex());
2066 if(m_pView)
2067 {
2068 if (!IsTextSelection( sal_False ))
2069 throw uno::RuntimeException( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "no text selection" ) ), static_cast < cppu::OWeakObject * > ( this ) );
2070
2071 m_pView->GetWrtShell().LeftMargin(bExpand, sal_True);
2072 }
2073 else
2074 throw uno::RuntimeException();
2075 }
2076 /* -----------------------------06.04.00 11:07--------------------------------
2077
2078 ---------------------------------------------------------------------------*/
getImplementationName(void)2079 OUString SwXTextViewCursor::getImplementationName(void) throw( RuntimeException )
2080 {
2081 return C2U("SwXTextViewCursor");
2082 }
2083 /* -----------------------------06.04.00 11:07--------------------------------
2084
2085 ---------------------------------------------------------------------------*/
supportsService(const OUString & rServiceName)2086 sal_Bool SwXTextViewCursor::supportsService(const OUString& rServiceName) throw( RuntimeException )
2087 {
2088 return !rServiceName.compareToAscii("com.sun.star.text.TextViewCursor") ||
2089 !rServiceName.compareToAscii("com.sun.star.style.CharacterProperties") ||
2090 !rServiceName.compareToAscii("com.sun.star.style.CharacterPropertiesAsian") ||
2091 !rServiceName.compareToAscii("com.sun.star.style.CharacterPropertiesComplex") ||
2092 !rServiceName.compareToAscii("com.sun.star.style.ParagraphProperties") ||
2093 !rServiceName.compareToAscii("com.sun.star.style.ParagraphPropertiesAsian") ||
2094 !rServiceName.compareToAscii("com.sun.star.style.ParagraphPropertiesComplex");
2095 }
2096 /* -----------------------------06.04.00 11:07--------------------------------
2097
2098 ---------------------------------------------------------------------------*/
getSupportedServiceNames(void)2099 Sequence< OUString > SwXTextViewCursor::getSupportedServiceNames(void) throw( RuntimeException )
2100 {
2101 Sequence< OUString > aRet(7);
2102 OUString* pArray = aRet.getArray();
2103 pArray[0] = C2U("com.sun.star.text.TextViewCursor");
2104 pArray[1] = C2U("com.sun.star.style.CharacterProperties");
2105 pArray[2] = C2U("com.sun.star.style.CharacterPropertiesAsian");
2106 pArray[3] = C2U("com.sun.star.style.CharacterPropertiesComplex");
2107 pArray[4] = C2U("com.sun.star.style.ParagraphProperties");
2108 pArray[5] = C2U("com.sun.star.style.ParagraphPropertiesAsian");
2109 pArray[6] = C2U("com.sun.star.style.ParagraphPropertiesComplex");
2110 return aRet;
2111 }
2112 /* -----------------------------03.03.03 11:07--------------------------------
2113
2114 ---------------------------------------------------------------------------*/
getUnoTunnelId()2115 const uno::Sequence< sal_Int8 > & SwXTextViewCursor::getUnoTunnelId()
2116 {
2117 static uno::Sequence< sal_Int8 > aSeq = ::CreateUnoTunnelId();
2118 return aSeq;
2119 }
2120 /* -----------------------------03.03.03 11:07--------------------------------
2121
2122 ---------------------------------------------------------------------------*/
2123 //XUnoTunnel
getSomething(const uno::Sequence<sal_Int8> & rId)2124 sal_Int64 SAL_CALL SwXTextViewCursor::getSomething(
2125 const uno::Sequence< sal_Int8 >& rId )
2126 throw(uno::RuntimeException)
2127 {
2128 if( rId.getLength() == 16
2129 && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
2130 rId.getConstArray(), 16 ) )
2131 {
2132 return sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >( this ));
2133 }
2134 return OTextCursorHelper::getSomething(rId);;
2135 }
2136 // -----------------------------------------------------------------------------
2137
IMPLEMENT_FORWARD_XINTERFACE2(SwXTextViewCursor,SwXTextViewCursor_Base,OTextCursorHelper) const2138 IMPLEMENT_FORWARD_XINTERFACE2(SwXTextViewCursor,SwXTextViewCursor_Base,OTextCursorHelper)
2139 const SwDoc* SwXTextViewCursor::GetDoc() const
2140 {
2141 SwWrtShell& rSh = m_pView->GetWrtShell();
2142 return rSh.GetCrsr() ? rSh.GetCrsr()->GetDoc() : 0;
2143 }
2144 // -----------------------------------------------------------------------------
GetDoc()2145 SwDoc* SwXTextViewCursor::GetDoc()
2146 {
2147 SwWrtShell& rSh = m_pView->GetWrtShell();
2148 return rSh.GetCrsr() ? rSh.GetCrsr()->GetDoc() : 0;
2149 }
2150 // -----------------------------------------------------------------------------
GetPaM() const2151 const SwPaM* SwXTextViewCursor::GetPaM() const
2152 {
2153 SwWrtShell& rSh = m_pView->GetWrtShell();
2154 return rSh.GetCrsr();
2155 }
2156 // -----------------------------------------------------------------------------
GetPaM()2157 SwPaM* SwXTextViewCursor::GetPaM()
2158 {
2159 SwWrtShell& rSh = m_pView->GetWrtShell();
2160 return rSh.GetCrsr();
2161 }
2162
getTransferable()2163 uno::Reference< datatransfer::XTransferable > SAL_CALL SwXTextView::getTransferable( ) throw (uno::RuntimeException)
2164 {
2165 ::vos::OGuard aGuard(Application::GetSolarMutex());
2166
2167 //force immediat shell update
2168 GetView()->StopShellTimer();
2169 SwWrtShell& rSh = GetView()->GetWrtShell();
2170 if ( GetView()->GetShellMode() == SHELL_MODE_DRAWTEXT )
2171 {
2172 SdrView *pSdrView = rSh.GetDrawView();
2173 OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
2174 return pOLV->GetEditView().GetTransferable();
2175 }
2176 else
2177 {
2178 SwTransferable* pTransfer = new SwTransferable( rSh );
2179 const sal_Bool bLockedView = rSh.IsViewLocked();
2180 rSh.LockView( sal_True ); //lock visible section
2181 pTransfer->PrepareForCopy();
2182 rSh.LockView( bLockedView );
2183 return uno::Reference< datatransfer::XTransferable >( pTransfer );
2184 }
2185 }
2186
insertTransferable(const uno::Reference<datatransfer::XTransferable> & xTrans)2187 void SAL_CALL SwXTextView::insertTransferable( const uno::Reference< datatransfer::XTransferable >& xTrans ) throw (datatransfer::UnsupportedFlavorException, uno::RuntimeException)
2188 {
2189 ::vos::OGuard aGuard(Application::GetSolarMutex());
2190
2191 //force immediat shell update
2192 GetView()->StopShellTimer();
2193 SwWrtShell& rSh = GetView()->GetWrtShell();
2194 if ( GetView()->GetShellMode() == SHELL_MODE_DRAWTEXT )
2195 {
2196 SdrView *pSdrView = rSh.GetDrawView();
2197 OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
2198 pOLV->GetEditView().InsertText( xTrans, GetView()->GetDocShell()->GetMedium()->GetBaseURL(), sal_False );
2199 }
2200 else
2201 {
2202 TransferableDataHelper aDataHelper( xTrans );
2203 if ( SwTransferable::IsPaste( rSh, aDataHelper ) )
2204 {
2205 SwTransferable::Paste( rSh, aDataHelper );
2206 if( rSh.IsFrmSelected() || rSh.IsObjSelected() )
2207 rSh.EnterSelFrmMode();
2208 GetView()->AttrChangedNotify( &rSh );
2209 }
2210 }
2211 }
2212
2213 // -----------------------------------------------------------------------------
2214
2215