1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5efeef26fSAndrew Rist * distributed with this work for additional information
6efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist * software distributed under the License is distributed on an
15efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17efeef26fSAndrew Rist * specific language governing permissions and limitations
18efeef26fSAndrew Rist * under the License.
19cdf0e10cSrcweir *
20efeef26fSAndrew Rist *************************************************************/
21efeef26fSAndrew Rist
22cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
23cdf0e10cSrcweir #include "precompiled_sw.hxx"
24cdf0e10cSrcweir
25cdf0e10cSrcweir #include <tools/list.hxx>
26cdf0e10cSrcweir #include <swtypes.hxx>
27cdf0e10cSrcweir #include <hintids.hxx>
28cdf0e10cSrcweir #include <com/sun/star/accessibility/XAccessible.hpp>
29cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
30cdf0e10cSrcweir #include <com/sun/star/i18n/XBreakIterator.hpp>
31cdf0e10cSrcweir #include <com/sun/star/i18n/ScriptType.hpp>
32cdf0e10cSrcweir #include <com/sun/star/i18n/InputSequenceCheckMode.hpp>
33cdf0e10cSrcweir
34cdf0e10cSrcweir #include <com/sun/star/i18n/UnicodeScript.hpp>
35cdf0e10cSrcweir
36cdf0e10cSrcweir #include <vcl/help.hxx>
37cdf0e10cSrcweir #include <vcl/graph.hxx>
38cdf0e10cSrcweir #include <vcl/msgbox.hxx>
39cdf0e10cSrcweir #include <vcl/cmdevt.h>
40cdf0e10cSrcweir #include <sot/storage.hxx>
41cdf0e10cSrcweir #include <svl/macitem.hxx>
42cdf0e10cSrcweir #include <unotools/securityoptions.hxx>
43cdf0e10cSrcweir #include <basic/sbxvar.hxx>
44cdf0e10cSrcweir #include <svl/ctloptions.hxx>
45cdf0e10cSrcweir #include <basic/sbx.hxx>
46cdf0e10cSrcweir #include <svl/eitem.hxx>
47cdf0e10cSrcweir #include <svl/stritem.hxx>
48cdf0e10cSrcweir #include <sfx2/ipclient.hxx>
49cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
50cdf0e10cSrcweir #include <sfx2/request.hxx>
51cdf0e10cSrcweir #include <sfx2/bindings.hxx>
52cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
53cdf0e10cSrcweir #include <svl/ptitem.hxx>
54cdf0e10cSrcweir #include <editeng/sizeitem.hxx>
55cdf0e10cSrcweir #include <editeng/langitem.hxx>
56cdf0e10cSrcweir #include <svx/htmlmode.hxx>
57cdf0e10cSrcweir #include <svx/svdview.hxx>
58cdf0e10cSrcweir #include <svx/svdhdl.hxx>
59cdf0e10cSrcweir #include <svx/svdoutl.hxx>
60cdf0e10cSrcweir #include <editeng/editeng.hxx>
61cdf0e10cSrcweir #include <editeng/svxacorr.hxx>
62cdf0e10cSrcweir #include <editeng/scripttypeitem.hxx>
63cdf0e10cSrcweir #include <editeng/flditem.hxx>
64cdf0e10cSrcweir #include <editeng/colritem.hxx>
65cdf0e10cSrcweir #include <editeng/brshitem.hxx>
66cdf0e10cSrcweir #include <editeng/wghtitem.hxx>
67cdf0e10cSrcweir #include <editeng/udlnitem.hxx>
68cdf0e10cSrcweir #include <editeng/postitem.hxx>
69cdf0e10cSrcweir #include <editeng/protitem.hxx>
70cdf0e10cSrcweir #include <unotools/charclass.hxx>
71cdf0e10cSrcweir
72cdf0e10cSrcweir #include <editeng/acorrcfg.hxx>
73cdf0e10cSrcweir #include <SwSmartTagMgr.hxx>
74cdf0e10cSrcweir #include <edtwin.hxx>
75cdf0e10cSrcweir #include <view.hxx>
76cdf0e10cSrcweir #include <wrtsh.hxx>
77cdf0e10cSrcweir #include <IDocumentSettingAccess.hxx>
78cdf0e10cSrcweir #include <fldbas.hxx>
79cdf0e10cSrcweir #include <swmodule.hxx>
80cdf0e10cSrcweir #include <docsh.hxx>
81cdf0e10cSrcweir #include <viewopt.hxx>
82cdf0e10cSrcweir #include <drawbase.hxx>
83cdf0e10cSrcweir #include <dselect.hxx>
84cdf0e10cSrcweir #include <textsh.hxx>
85cdf0e10cSrcweir #include <shdwcrsr.hxx>
8669a74367SOliver-Rainer Wittmann #include <txatbase.hxx>
87cdf0e10cSrcweir #include <fmtanchr.hxx>
88cdf0e10cSrcweir #include <fmtornt.hxx>
89cdf0e10cSrcweir #include <fmtfsize.hxx>
90cdf0e10cSrcweir #include <fmtclds.hxx>
91cdf0e10cSrcweir #include <frmfmt.hxx>
92cdf0e10cSrcweir #include <modcfg.hxx>
93cdf0e10cSrcweir #include <fmtcol.hxx>
94cdf0e10cSrcweir #include <wview.hxx>
95cdf0e10cSrcweir #include <listsh.hxx>
96cdf0e10cSrcweir #include <gloslst.hxx>
97cdf0e10cSrcweir #include <inputwin.hxx>
98cdf0e10cSrcweir #include <gloshdl.hxx>
99cdf0e10cSrcweir #include <swundo.hxx>
100cdf0e10cSrcweir #include <drwtxtsh.hxx>
101cdf0e10cSrcweir #include <fchrfmt.hxx>
102cdf0e10cSrcweir #include <fmturl.hxx>
103cdf0e10cSrcweir #include <romenu.hxx>
104cdf0e10cSrcweir #include <initui.hxx>
105cdf0e10cSrcweir #include <frmatr.hxx>
106cdf0e10cSrcweir #include <extinput.hxx>
107cdf0e10cSrcweir #include <acmplwrd.hxx>
108cdf0e10cSrcweir #include <swcalwrp.hxx>
109cdf0e10cSrcweir #include <swdtflvr.hxx>
110cdf0e10cSrcweir #include <wdocsh.hxx>
111cdf0e10cSrcweir #include <crsskip.hxx>
112cdf0e10cSrcweir #include <breakit.hxx>
113cdf0e10cSrcweir #include <checkit.hxx>
114cdf0e10cSrcweir
115cdf0e10cSrcweir #include <helpid.h>
116cdf0e10cSrcweir #include <cmdid.h>
117cdf0e10cSrcweir #include <docvw.hrc>
118cdf0e10cSrcweir #include <uitool.hxx>
119cdf0e10cSrcweir #include <fmtfollowtextflow.hxx>
120cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx>
121cdf0e10cSrcweir #include <charfmt.hxx>
122cdf0e10cSrcweir #include <numrule.hxx>
123cdf0e10cSrcweir #include <pagedesc.hxx>
1245b40a975SOliver-Rainer Wittmann #include <svtools/ruler.hxx>
125cdf0e10cSrcweir #include "formatclipboard.hxx"
126cdf0e10cSrcweir #include <vos/mutex.hxx>
127cdf0e10cSrcweir #include <vcl/svapp.hxx>
128cdf0e10cSrcweir
129cdf0e10cSrcweir #include <IMark.hxx>
130cdf0e10cSrcweir #include <doc.hxx>
131cdf0e10cSrcweir #include <xmloff/odffields.hxx>
132cdf0e10cSrcweir
133cdf0e10cSrcweir #include <PostItMgr.hxx>
134cdf0e10cSrcweir
135cdf0e10cSrcweir using namespace sw::mark;
136cdf0e10cSrcweir using namespace ::com::sun::star;
137cdf0e10cSrcweir
138cdf0e10cSrcweir /*--------------------------------------------------------------------
139cdf0e10cSrcweir Beschreibung: Globals
140cdf0e10cSrcweir --------------------------------------------------------------------*/
141cdf0e10cSrcweir
142cdf0e10cSrcweir static bool bInputLanguageSwitched = false;
143cdf0e10cSrcweir extern sal_Bool bNoInterrupt; // in mainwn.cxx
144cdf0e10cSrcweir
145cdf0e10cSrcweir //Normalerweise wird im MouseButtonUp eine Selektion aufgehoben wenn die
146cdf0e10cSrcweir //Selektion nicht gerade aufgezogen wird. Leider wird im MouseButtonDown
147cdf0e10cSrcweir //bei doppel-/dreifach-Klick Selektiert, diese Selektion wird in dem Handler
148cdf0e10cSrcweir //komplett abgeschlossen und kann deshalb im Up nicht mehr unterschieden
149*2b518738Smseidel //werden. Um dies aufzulösen wird bHoldSelection im Down gesetzt und im
150cdf0e10cSrcweir //Up ausgewertet.
151cdf0e10cSrcweir static sal_Bool bHoldSelection = sal_False;
152cdf0e10cSrcweir
153cdf0e10cSrcweir sal_Bool bFrmDrag = sal_False;
154cdf0e10cSrcweir sal_Bool bValidCrsrPos = sal_False;
155cdf0e10cSrcweir sal_Bool bModePushed = sal_False;
156cdf0e10cSrcweir sal_Bool bDDTimerStarted = sal_False;
157cdf0e10cSrcweir sal_Bool bFlushCharBuffer = sal_False;
158cdf0e10cSrcweir sal_Bool SwEditWin::bReplaceQuote = sal_False;
159cdf0e10cSrcweir sal_Bool bDDINetAttr = sal_False;
160cdf0e10cSrcweir SdrHdlKind eSdrMoveHdl = HDL_USER;
161cdf0e10cSrcweir
162cdf0e10cSrcweir QuickHelpData* SwEditWin::pQuickHlpData = 0;
163cdf0e10cSrcweir
164cdf0e10cSrcweir long SwEditWin::nDDStartPosY = 0;
165cdf0e10cSrcweir long SwEditWin::nDDStartPosX = 0;
166cdf0e10cSrcweir Color SwEditWin::aTextBackColor(COL_YELLOW);
167cdf0e10cSrcweir Color SwEditWin::aTextColor(COL_RED);
168cdf0e10cSrcweir sal_Bool SwEditWin::bTransparentBackColor = sal_False; // Hintergrund nicht transparent
169cdf0e10cSrcweir
170cdf0e10cSrcweir
171cdf0e10cSrcweir extern sal_Bool bExecuteDrag;
172cdf0e10cSrcweir
173cdf0e10cSrcweir SfxShell* lcl_GetShellFromDispatcher( SwView& rView, TypeId nType );
174cdf0e10cSrcweir
175cdf0e10cSrcweir DBG_NAME(edithdl)
176cdf0e10cSrcweir
177cdf0e10cSrcweir class SwAnchorMarker
178cdf0e10cSrcweir {
179cdf0e10cSrcweir SdrHdl* pHdl;
180cdf0e10cSrcweir Point aHdlPos;
181cdf0e10cSrcweir Point aLastPos;
182cdf0e10cSrcweir bool bTopRightHandle;
183cdf0e10cSrcweir public:
SwAnchorMarker(SdrHdl * pH)184cdf0e10cSrcweir SwAnchorMarker( SdrHdl* pH )
185cdf0e10cSrcweir : pHdl( pH )
186cdf0e10cSrcweir , aHdlPos( pH->GetPos() )
187cdf0e10cSrcweir , aLastPos( pH->GetPos() )
188cdf0e10cSrcweir , bTopRightHandle( pH->GetKind() == HDL_ANCHOR_TR )
189cdf0e10cSrcweir {}
GetLastPos() const190cdf0e10cSrcweir const Point& GetLastPos() const { return aLastPos; }
SetLastPos(const Point & rNew)191cdf0e10cSrcweir void SetLastPos( const Point& rNew ) { aLastPos = rNew; }
SetPos(const Point & rNew)192cdf0e10cSrcweir void SetPos( const Point& rNew ) { pHdl->SetPos( rNew ); }
GetPos()193cdf0e10cSrcweir const Point& GetPos() { return pHdl->GetPos(); }
GetHdlPos()194cdf0e10cSrcweir const Point& GetHdlPos() { return aHdlPos; }
GetHdl() const1954772d9afSArmin Le Grand SdrHdl* GetHdl() const { return pHdl; }
ChgHdl(SdrHdl * pNew)196cdf0e10cSrcweir void ChgHdl( SdrHdl* pNew )
197cdf0e10cSrcweir {
198cdf0e10cSrcweir pHdl = pNew;
199cdf0e10cSrcweir if ( pHdl )
200cdf0e10cSrcweir {
201cdf0e10cSrcweir bTopRightHandle = (pHdl->GetKind() == HDL_ANCHOR_TR);
202cdf0e10cSrcweir }
203cdf0e10cSrcweir }
GetPosForHitTest(const OutputDevice & rOut)204cdf0e10cSrcweir const Point GetPosForHitTest( const OutputDevice& rOut )
205cdf0e10cSrcweir {
206cdf0e10cSrcweir Point aHitTestPos( GetPos() );
207cdf0e10cSrcweir aHitTestPos = rOut.LogicToPixel( aHitTestPos );
208cdf0e10cSrcweir if ( bTopRightHandle )
209cdf0e10cSrcweir {
210cdf0e10cSrcweir aHitTestPos += Point( -1, 1 );
211cdf0e10cSrcweir }
212cdf0e10cSrcweir else
213cdf0e10cSrcweir {
214cdf0e10cSrcweir aHitTestPos += Point( 1, 1 );
215cdf0e10cSrcweir }
216cdf0e10cSrcweir aHitTestPos = rOut.PixelToLogic( aHitTestPos );
217cdf0e10cSrcweir
218cdf0e10cSrcweir return aHitTestPos;
219cdf0e10cSrcweir }
220cdf0e10cSrcweir };
221cdf0e10cSrcweir
222cdf0e10cSrcweir struct QuickHelpData
223cdf0e10cSrcweir {
224cdf0e10cSrcweir SvStringsISortDtor aArr;
225cdf0e10cSrcweir sal_uInt16* pAttrs;
226cdf0e10cSrcweir CommandExtTextInputData* pCETID;
227cdf0e10cSrcweir sal_uLong nTipId;
228cdf0e10cSrcweir sal_uInt16 nLen, nCurArrPos;
229cdf0e10cSrcweir sal_Bool bClear : 1, bChkInsBlank : 1, bIsTip : 1, bIsAutoText : 1;
230cdf0e10cSrcweir
QuickHelpDataQuickHelpData231cdf0e10cSrcweir QuickHelpData() : pAttrs( 0 ), pCETID( 0 ) { ClearCntnt(); }
232cdf0e10cSrcweir
233cdf0e10cSrcweir void Move( QuickHelpData& rCpy );
234cdf0e10cSrcweir void ClearCntnt();
235cdf0e10cSrcweir void Start( SwWrtShell& rSh, sal_uInt16 nWrdLen );
236cdf0e10cSrcweir void Stop( SwWrtShell& rSh );
237cdf0e10cSrcweir
HasCntntQuickHelpData238cdf0e10cSrcweir sal_Bool HasCntnt() const { return aArr.Count() && 0 != nLen; }
239cdf0e10cSrcweir
IncQuickHelpData240cdf0e10cSrcweir void Inc( sal_Bool bEndLess )
241cdf0e10cSrcweir {
242cdf0e10cSrcweir if( ++nCurArrPos >= aArr.Count() )
243cdf0e10cSrcweir nCurArrPos = (bEndLess && !bIsAutoText )? 0 : nCurArrPos-1;
244cdf0e10cSrcweir }
DecQuickHelpData245cdf0e10cSrcweir void Dec( sal_Bool bEndLess )
246cdf0e10cSrcweir {
247cdf0e10cSrcweir if( 0 == nCurArrPos-- )
248cdf0e10cSrcweir nCurArrPos = (bEndLess && !bIsAutoText ) ? aArr.Count()-1 : 0;
249cdf0e10cSrcweir }
250cdf0e10cSrcweir void FillStrArr( SwWrtShell& rSh, const String& rWord );
251cdf0e10cSrcweir };
252cdf0e10cSrcweir
253cdf0e10cSrcweir
254cdf0e10cSrcweir /*--------------------------------------------------------------------
255cdf0e10cSrcweir Beschreibung: Minimale Bewegung Zittern vermeiden
256cdf0e10cSrcweir --------------------------------------------------------------------*/
257cdf0e10cSrcweir
258cdf0e10cSrcweir #define HIT_PIX 2 /* Hit-Toleranz in Pixel */
259cdf0e10cSrcweir #define MIN_MOVE 4
260cdf0e10cSrcweir
IsMinMove(const Point & rStartPos,const Point & rLPt)261cdf0e10cSrcweir inline sal_Bool IsMinMove(const Point &rStartPos, const Point &rLPt)
262cdf0e10cSrcweir {
263cdf0e10cSrcweir return Abs(rStartPos.X() - rLPt.X()) > MIN_MOVE ||
264cdf0e10cSrcweir Abs(rStartPos.Y() - rLPt.Y()) > MIN_MOVE;
265cdf0e10cSrcweir }
266cdf0e10cSrcweir
267cdf0e10cSrcweir /*--------------------------------------------------------------------
268*2b518738Smseidel JP 30.07.98: für MouseButtonDown - feststellen, ob ein DrawObject
269cdf0e10cSrcweir und KEIN SwgFrame getroffen wurde! Shift/Ctrl sollen
270*2b518738Smseidel nur bei DrawObjecte zum Selektieren führen, bei SwgFlys
271*2b518738Smseidel ggfs. zum auslösen von Hyperlinks (DownLoad/NewWindow!)
272cdf0e10cSrcweir --------------------------------------------------------------------*/
IsDrawObjSelectable(const SwWrtShell & rSh,const Point & rPt)273cdf0e10cSrcweir inline sal_Bool IsDrawObjSelectable( const SwWrtShell& rSh, const Point& rPt )
274cdf0e10cSrcweir {
275cdf0e10cSrcweir sal_Bool bRet = sal_True;
276cdf0e10cSrcweir SdrObject* pObj;
277cdf0e10cSrcweir switch( rSh.GetObjCntType( rPt, pObj ))
278cdf0e10cSrcweir {
279cdf0e10cSrcweir case OBJCNT_NONE:
280cdf0e10cSrcweir case OBJCNT_FLY:
281cdf0e10cSrcweir case OBJCNT_GRF:
282cdf0e10cSrcweir case OBJCNT_OLE:
283cdf0e10cSrcweir bRet = sal_False;
284cdf0e10cSrcweir break;
285cdf0e10cSrcweir default:; //prevent warning
286cdf0e10cSrcweir }
287cdf0e10cSrcweir return bRet;
288cdf0e10cSrcweir }
289cdf0e10cSrcweir
290cdf0e10cSrcweir /*--------------------------------------------------------------------
291cdf0e10cSrcweir Beschreibung: Pointer umschalten
292cdf0e10cSrcweir --------------------------------------------------------------------*/
293cdf0e10cSrcweir
294cdf0e10cSrcweir
UpdatePointer(const Point & rLPt,sal_uInt16 nModifier)295cdf0e10cSrcweir void SwEditWin::UpdatePointer(const Point &rLPt, sal_uInt16 nModifier )
296cdf0e10cSrcweir {
297cdf0e10cSrcweir SwWrtShell &rSh = rView.GetWrtShell();
298cdf0e10cSrcweir if( pApplyTempl )
299cdf0e10cSrcweir {
300cdf0e10cSrcweir PointerStyle eStyle = POINTER_FILL;
301cdf0e10cSrcweir if ( rSh.IsOverReadOnlyPos( rLPt ) )
302cdf0e10cSrcweir {
303cdf0e10cSrcweir if( pUserMarker )
304cdf0e10cSrcweir {
305cdf0e10cSrcweir delete pUserMarker;
306cdf0e10cSrcweir pUserMarker = 0L;
307cdf0e10cSrcweir }
308cdf0e10cSrcweir eStyle = POINTER_NOTALLOWED;
309cdf0e10cSrcweir }
310cdf0e10cSrcweir else
311cdf0e10cSrcweir {
312cdf0e10cSrcweir SwRect aRect;
313cdf0e10cSrcweir SwRect* pRect = &aRect;
314cdf0e10cSrcweir const SwFrmFmt* pFmt = 0;
315cdf0e10cSrcweir
316cdf0e10cSrcweir bool bFrameIsValidTarget = false;
317cdf0e10cSrcweir if( pApplyTempl->pFormatClipboard )
318cdf0e10cSrcweir bFrameIsValidTarget = pApplyTempl->pFormatClipboard->HasContentForThisType( nsSelectionType::SEL_FRM );
319cdf0e10cSrcweir else if( !pApplyTempl->nColor )
320cdf0e10cSrcweir bFrameIsValidTarget = ( pApplyTempl->eType == SFX_STYLE_FAMILY_FRAME );
321cdf0e10cSrcweir
322cdf0e10cSrcweir if( bFrameIsValidTarget &&
323cdf0e10cSrcweir 0 !=(pFmt = rSh.GetFmtFromObj( rLPt, &pRect )) &&
324cdf0e10cSrcweir PTR_CAST(SwFlyFrmFmt, pFmt))
325cdf0e10cSrcweir {
326cdf0e10cSrcweir //Highlight fuer Rahmen anwerfen
327cdf0e10cSrcweir Rectangle aTmp( pRect->SVRect() );
328cdf0e10cSrcweir
329cdf0e10cSrcweir if ( !pUserMarker )
330cdf0e10cSrcweir {
331cdf0e10cSrcweir pUserMarker = new SdrDropMarkerOverlay( *rSh.GetDrawView(), aTmp );
332cdf0e10cSrcweir }
333cdf0e10cSrcweir }
334cdf0e10cSrcweir else if(pUserMarker)
335cdf0e10cSrcweir {
336cdf0e10cSrcweir delete pUserMarker;
337cdf0e10cSrcweir pUserMarker = 0L;
338cdf0e10cSrcweir }
339cdf0e10cSrcweir
340cdf0e10cSrcweir rSh.SwCrsrShell::SetVisCrsr( rLPt );
341cdf0e10cSrcweir }
342cdf0e10cSrcweir SetPointer( eStyle );
343cdf0e10cSrcweir return;
344cdf0e10cSrcweir }
345cdf0e10cSrcweir
346cdf0e10cSrcweir if( !rSh.VisArea().Width() )
347cdf0e10cSrcweir return;
348cdf0e10cSrcweir
349cdf0e10cSrcweir SET_CURR_SHELL(&rSh);
350cdf0e10cSrcweir
351cdf0e10cSrcweir if ( IsChainMode() )
352cdf0e10cSrcweir {
353cdf0e10cSrcweir SwRect aRect;
354cdf0e10cSrcweir int nChainable = rSh.Chainable( aRect, *rSh.GetFlyFrmFmt(), rLPt );
355cdf0e10cSrcweir PointerStyle eStyle = nChainable
356cdf0e10cSrcweir ? POINTER_CHAIN_NOTALLOWED : POINTER_CHAIN;
357cdf0e10cSrcweir if ( !nChainable )
358cdf0e10cSrcweir {
359cdf0e10cSrcweir Rectangle aTmp( aRect.SVRect() );
360cdf0e10cSrcweir
361cdf0e10cSrcweir if ( !pUserMarker )
362cdf0e10cSrcweir {
363cdf0e10cSrcweir pUserMarker = new SdrDropMarkerOverlay( *rSh.GetDrawView(), aTmp );
364cdf0e10cSrcweir }
365cdf0e10cSrcweir }
366cdf0e10cSrcweir else
367cdf0e10cSrcweir {
368cdf0e10cSrcweir delete pUserMarker;
369cdf0e10cSrcweir pUserMarker = 0L;
370cdf0e10cSrcweir }
371cdf0e10cSrcweir
372cdf0e10cSrcweir rView.GetViewFrame()->ShowStatusText(
373cdf0e10cSrcweir SW_RESSTR(STR_CHAIN_OK+nChainable));
374cdf0e10cSrcweir SetPointer( eStyle );
375cdf0e10cSrcweir return;
376cdf0e10cSrcweir }
377cdf0e10cSrcweir
378cdf0e10cSrcweir // Removed ExecHyperlink option.
379cdf0e10cSrcweir //sal_Bool bExecHyperlinks = rSh.GetViewOptions()->IsExecHyperlinks() ^
380cdf0e10cSrcweir // (nModifier == KEY_MOD2 ? sal_True : sal_False);
381cdf0e10cSrcweir sal_Bool bExecHyperlinks = rView.GetDocShell()->IsReadOnly();
382cdf0e10cSrcweir if ( !bExecHyperlinks )
383cdf0e10cSrcweir {
384cdf0e10cSrcweir SvtSecurityOptions aSecOpts;
385cdf0e10cSrcweir const sal_Bool bSecureOption = aSecOpts.IsOptionSet( SvtSecurityOptions::E_CTRLCLICK_HYPERLINK );
386cdf0e10cSrcweir if ( ( bSecureOption && nModifier == KEY_MOD1 ) ||
387cdf0e10cSrcweir ( !bSecureOption && nModifier != KEY_MOD1 ) )
388cdf0e10cSrcweir bExecHyperlinks = sal_True;
389cdf0e10cSrcweir }
390cdf0e10cSrcweir
391cdf0e10cSrcweir const sal_Bool bExecSmarttags = nModifier == KEY_MOD1;
392cdf0e10cSrcweir
393cdf0e10cSrcweir SdrView *pSdrView = rSh.GetDrawView();
394cdf0e10cSrcweir sal_Bool bPrefSdrPointer = sal_False;
395cdf0e10cSrcweir sal_Bool bHitHandle = sal_False;
396cdf0e10cSrcweir sal_Bool bCntAtPos = sal_False;
397cdf0e10cSrcweir sal_Bool bIsDocReadOnly = rView.GetDocShell()->IsReadOnly() &&
398cdf0e10cSrcweir rSh.IsCrsrReadonly();
399cdf0e10cSrcweir aActHitType = SDRHIT_NONE;
400cdf0e10cSrcweir PointerStyle eStyle = POINTER_TEXT;
401cdf0e10cSrcweir if ( !pSdrView )
402cdf0e10cSrcweir bCntAtPos = sal_True;
403cdf0e10cSrcweir else if ( sal_True == (bHitHandle = pSdrView->PickHandle( rLPt ) != 0) )
404cdf0e10cSrcweir {
405cdf0e10cSrcweir aActHitType = SDRHIT_OBJECT;
406cdf0e10cSrcweir bPrefSdrPointer = sal_True;
407cdf0e10cSrcweir }
408cdf0e10cSrcweir else
409cdf0e10cSrcweir {
410cdf0e10cSrcweir const sal_Bool bNotInSelObj = !rSh.IsInsideSelectedObj( rLPt );
411cdf0e10cSrcweir if ( rView.GetDrawFuncPtr() && !bInsDraw && bNotInSelObj )
412cdf0e10cSrcweir {
413cdf0e10cSrcweir aActHitType = SDRHIT_OBJECT;
414cdf0e10cSrcweir if (IsObjectSelect())
415cdf0e10cSrcweir eStyle = POINTER_ARROW;
416cdf0e10cSrcweir else
417cdf0e10cSrcweir bPrefSdrPointer = sal_True;
418cdf0e10cSrcweir }
419cdf0e10cSrcweir else
420cdf0e10cSrcweir {
421cdf0e10cSrcweir SdrObject* pObj; SdrPageView* pPV;
422cdf0e10cSrcweir pSdrView->SetHitTolerancePixel( HIT_PIX );
423cdf0e10cSrcweir if ( bNotInSelObj && bExecHyperlinks &&
424cdf0e10cSrcweir pSdrView->PickObj( rLPt, pSdrView->getHitTolLog(), pObj, pPV, SDRSEARCH_PICKMACRO ))
425cdf0e10cSrcweir {
426cdf0e10cSrcweir SdrObjMacroHitRec aTmp;
427cdf0e10cSrcweir aTmp.aPos = rLPt;
428cdf0e10cSrcweir aTmp.pPageView = pPV;
429cdf0e10cSrcweir SetPointer( pObj->GetMacroPointer( aTmp ) );
430cdf0e10cSrcweir return;
431cdf0e10cSrcweir }
432cdf0e10cSrcweir else
433cdf0e10cSrcweir {
434cdf0e10cSrcweir // dvo: IsObjSelectable() eventually calls SdrView::PickObj, so
435cdf0e10cSrcweir // apparently this is used to determine whether this is a
436cdf0e10cSrcweir // drawling layer object or not.
437cdf0e10cSrcweir if ( rSh.IsObjSelectable( rLPt ) )
438cdf0e10cSrcweir {
439cdf0e10cSrcweir if (pSdrView->IsTextEdit())
440cdf0e10cSrcweir {
441cdf0e10cSrcweir aActHitType = SDRHIT_NONE;
442cdf0e10cSrcweir bPrefSdrPointer = sal_True;
443cdf0e10cSrcweir }
444cdf0e10cSrcweir else
445cdf0e10cSrcweir {
446cdf0e10cSrcweir SdrViewEvent aVEvt;
447cdf0e10cSrcweir SdrHitKind eHit = pSdrView->PickAnything(rLPt, aVEvt);
448cdf0e10cSrcweir
449cdf0e10cSrcweir if (eHit == SDRHIT_URLFIELD && bExecHyperlinks)
450cdf0e10cSrcweir {
451cdf0e10cSrcweir aActHitType = SDRHIT_OBJECT;
452cdf0e10cSrcweir bPrefSdrPointer = sal_True;
453cdf0e10cSrcweir }
454cdf0e10cSrcweir else
455cdf0e10cSrcweir {
456cdf0e10cSrcweir // if we're over a selected object, we show an
457cdf0e10cSrcweir // ARROW by default. We only show a MOVE if 1) the
458cdf0e10cSrcweir // object is selected, and 2) it may be moved
459cdf0e10cSrcweir // (i.e., position is not protected).
460cdf0e10cSrcweir bool bMovable =
461cdf0e10cSrcweir (!bNotInSelObj) &&
462cdf0e10cSrcweir (rSh.IsObjSelected() || rSh.IsFrmSelected()) &&
463cdf0e10cSrcweir (!rSh.IsSelObjProtected(FLYPROTECT_POS));
464cdf0e10cSrcweir
465cdf0e10cSrcweir eStyle = bMovable ? POINTER_MOVE : POINTER_ARROW;
466cdf0e10cSrcweir aActHitType = SDRHIT_OBJECT;
467cdf0e10cSrcweir }
468cdf0e10cSrcweir }
469cdf0e10cSrcweir }
470cdf0e10cSrcweir else
471cdf0e10cSrcweir {
472cdf0e10cSrcweir if ( rSh.IsFrmSelected() && !bNotInSelObj )
473cdf0e10cSrcweir {
474cdf0e10cSrcweir // dvo: this branch appears to be dead and should be
475cdf0e10cSrcweir // removed in a future version. Reason: The condition
476cdf0e10cSrcweir // !bNotInSelObj means that this branch will only be
477cdf0e10cSrcweir // executed in the cursor points inside a selected
478cdf0e10cSrcweir // object. However, if this is the case, the previous
479cdf0e10cSrcweir // if( rSh.IsObjSelectable(rLPt) ) must always be true:
480cdf0e10cSrcweir // rLPt is inside a selected object, then obviously
481cdf0e10cSrcweir // rLPt is over a selectable object.
482cdf0e10cSrcweir if (rSh.IsSelObjProtected(FLYPROTECT_SIZE))
483cdf0e10cSrcweir eStyle = POINTER_NOTALLOWED;
484cdf0e10cSrcweir else
485cdf0e10cSrcweir eStyle = POINTER_MOVE;
486cdf0e10cSrcweir aActHitType = SDRHIT_OBJECT;
487cdf0e10cSrcweir }
488cdf0e10cSrcweir else
489cdf0e10cSrcweir {
490cdf0e10cSrcweir if ( rView.GetDrawFuncPtr() )
491cdf0e10cSrcweir bPrefSdrPointer = sal_True;
492cdf0e10cSrcweir else
493cdf0e10cSrcweir bCntAtPos = sal_True;
494cdf0e10cSrcweir }
495cdf0e10cSrcweir }
496cdf0e10cSrcweir }
497cdf0e10cSrcweir }
498cdf0e10cSrcweir }
499cdf0e10cSrcweir if ( bPrefSdrPointer )
500cdf0e10cSrcweir {
501cdf0e10cSrcweir if (bIsDocReadOnly || (rSh.IsObjSelected() && rSh.IsSelObjProtected(FLYPROTECT_CONTENT)))
502cdf0e10cSrcweir SetPointer( POINTER_NOTALLOWED );
503cdf0e10cSrcweir else
504cdf0e10cSrcweir {
505cdf0e10cSrcweir if (rView.GetDrawFuncPtr() && rView.GetDrawFuncPtr()->IsInsertForm() && !bHitHandle)
506cdf0e10cSrcweir SetPointer( POINTER_DRAW_RECT );
507cdf0e10cSrcweir else
508cdf0e10cSrcweir SetPointer( pSdrView->GetPreferedPointer( rLPt, rSh.GetOut() ) );
509cdf0e10cSrcweir }
510cdf0e10cSrcweir }
511cdf0e10cSrcweir else
512cdf0e10cSrcweir {
513cdf0e10cSrcweir if( !rSh.IsPageAtPos( rLPt ) || pAnchorMarker )
514cdf0e10cSrcweir eStyle = POINTER_ARROW;
515cdf0e10cSrcweir else
516cdf0e10cSrcweir {
517cdf0e10cSrcweir if( bCntAtPos )
518cdf0e10cSrcweir {
519cdf0e10cSrcweir SwContentAtPos aSwContentAtPos(
520cdf0e10cSrcweir SwContentAtPos::SW_CLICKFIELD|
521cdf0e10cSrcweir SwContentAtPos::SW_INETATTR|
522cdf0e10cSrcweir SwContentAtPos::SW_FTN |
523cdf0e10cSrcweir SwContentAtPos::SW_SMARTTAG );
524cdf0e10cSrcweir if( rSh.GetContentAtPos( rLPt, aSwContentAtPos) )
525cdf0e10cSrcweir {
526cdf0e10cSrcweir const bool bClickToFollow = SwContentAtPos::SW_INETATTR == aSwContentAtPos.eCntntAtPos ||
527cdf0e10cSrcweir SwContentAtPos::SW_SMARTTAG == aSwContentAtPos.eCntntAtPos;
528cdf0e10cSrcweir
529cdf0e10cSrcweir if( !bClickToFollow ||
530cdf0e10cSrcweir (SwContentAtPos::SW_INETATTR == aSwContentAtPos.eCntntAtPos && bExecHyperlinks) ||
531cdf0e10cSrcweir (SwContentAtPos::SW_SMARTTAG == aSwContentAtPos.eCntntAtPos && bExecSmarttags) )
532cdf0e10cSrcweir eStyle = POINTER_REFHAND;
533cdf0e10cSrcweir }
534cdf0e10cSrcweir }
535cdf0e10cSrcweir }
536cdf0e10cSrcweir
537cdf0e10cSrcweir // which kind of text pointer have we to show - horz / vert - ?
538cdf0e10cSrcweir if( POINTER_TEXT == eStyle && rSh.IsInVerticalText( &rLPt ))
539cdf0e10cSrcweir eStyle = POINTER_TEXT_VERTICAL;
540cdf0e10cSrcweir
541cdf0e10cSrcweir SetPointer( eStyle );
542cdf0e10cSrcweir }
543cdf0e10cSrcweir }
544cdf0e10cSrcweir
545cdf0e10cSrcweir /*--------------------------------------------------------------------
546cdf0e10cSrcweir Beschreibung: Timer fuer Selektion vergroessern
547cdf0e10cSrcweir --------------------------------------------------------------------*/
548cdf0e10cSrcweir
549cdf0e10cSrcweir
IMPL_LINK(SwEditWin,TimerHandler,Timer *,EMPTYARG)550cdf0e10cSrcweir IMPL_LINK( SwEditWin, TimerHandler, Timer *, EMPTYARG )
551cdf0e10cSrcweir {
552cdf0e10cSrcweir DBG_PROFSTART(edithdl);
553cdf0e10cSrcweir
554cdf0e10cSrcweir SwWrtShell &rSh = rView.GetWrtShell();
555cdf0e10cSrcweir Point aModPt( aMovePos );
556cdf0e10cSrcweir const SwRect aOldVis( rSh.VisArea() );
557cdf0e10cSrcweir sal_Bool bDone = sal_False;
558cdf0e10cSrcweir
559cdf0e10cSrcweir if ( !rSh.VisArea().IsInside( aModPt ) )
560cdf0e10cSrcweir {
561cdf0e10cSrcweir if ( bInsDraw )
562cdf0e10cSrcweir {
563cdf0e10cSrcweir const int nMaxScroll = 40;
564cdf0e10cSrcweir rView.Scroll( Rectangle(aModPt,Size(1,1)), nMaxScroll, nMaxScroll);
565cdf0e10cSrcweir bDone = sal_True;
566cdf0e10cSrcweir }
567cdf0e10cSrcweir else if ( bFrmDrag )
568cdf0e10cSrcweir {
569cdf0e10cSrcweir (rSh.*rSh.fnDrag)(&aModPt,sal_False);
570cdf0e10cSrcweir bDone = sal_True;
571cdf0e10cSrcweir }
572cdf0e10cSrcweir if ( !bDone )
573cdf0e10cSrcweir aModPt = rSh.GetCntntPos( aModPt,aModPt.Y() > rSh.VisArea().Bottom() );
574cdf0e10cSrcweir }
575cdf0e10cSrcweir if ( !bDone && !(bFrmDrag || bInsDraw) )
576cdf0e10cSrcweir {
577cdf0e10cSrcweir if ( pRowColumnSelectionStart )
578cdf0e10cSrcweir {
579cdf0e10cSrcweir Point aPos( aModPt );
580cdf0e10cSrcweir rSh.SelectTableRowCol( *pRowColumnSelectionStart, &aPos, bIsRowDrag );
581cdf0e10cSrcweir }
582cdf0e10cSrcweir else
583cdf0e10cSrcweir (rSh.*rSh.fnSetCrsr)( &aModPt, sal_False );
584cdf0e10cSrcweir
585cdf0e10cSrcweir //fix(24138): Es kann sein, dass der "Sprung" ueber eine Tabelle so
586cdf0e10cSrcweir //nicht geschafft wird. Deshalb wir hier eben per Up/Down ueber die
587cdf0e10cSrcweir //Tabelle gesprungen.
588cdf0e10cSrcweir const SwRect& rVisArea = rSh.VisArea();
589cdf0e10cSrcweir if( aOldVis == rVisArea && !rSh.IsStartOfDoc() && !rSh.IsEndOfDoc() )
590cdf0e10cSrcweir {
591cdf0e10cSrcweir //JP 11.10.2001 Bug 72294 - take the center point of VisArea to
592cdf0e10cSrcweir // decide in which direction the user want.
593cdf0e10cSrcweir if( aModPt.Y() < ( rVisArea.Top() + rVisArea.Height() / 2 ) )
594cdf0e10cSrcweir rSh.Up( sal_True, 1 );
595cdf0e10cSrcweir else
596cdf0e10cSrcweir rSh.Down( sal_True, 1 );
597cdf0e10cSrcweir }
598cdf0e10cSrcweir }
599cdf0e10cSrcweir
600cdf0e10cSrcweir aMovePos += rSh.VisArea().Pos() - aOldVis.Pos();
601cdf0e10cSrcweir JustifyAreaTimer();
602cdf0e10cSrcweir DBG_PROFSTOP(edithdl);
603cdf0e10cSrcweir return 0;
604cdf0e10cSrcweir }
605cdf0e10cSrcweir
606cdf0e10cSrcweir /*--------------------------------------------------------------------
607cdf0e10cSrcweir Beschreibung:
608cdf0e10cSrcweir --------------------------------------------------------------------*/
609cdf0e10cSrcweir
610cdf0e10cSrcweir
JustifyAreaTimer()611cdf0e10cSrcweir void SwEditWin::JustifyAreaTimer()
612cdf0e10cSrcweir {
613cdf0e10cSrcweir const Rectangle &rVisArea = GetView().GetVisArea();
614cdf0e10cSrcweir #ifdef UNX
615cdf0e10cSrcweir const long coMinLen = 100;
616cdf0e10cSrcweir #else
617cdf0e10cSrcweir const long coMinLen = 50;
618cdf0e10cSrcweir #endif
619cdf0e10cSrcweir long nTimeout = 800,
620cdf0e10cSrcweir nDiff = Max(
621cdf0e10cSrcweir Max( aMovePos.Y() - rVisArea.Bottom(), rVisArea.Top() - aMovePos.Y() ),
622cdf0e10cSrcweir Max( aMovePos.X() - rVisArea.Right(), rVisArea.Left() - aMovePos.X()));
623cdf0e10cSrcweir aTimer.SetTimeout( Max( coMinLen, nTimeout - nDiff) );
624cdf0e10cSrcweir }
625cdf0e10cSrcweir
LeaveArea(const Point & rPos)626cdf0e10cSrcweir void SwEditWin::LeaveArea(const Point &rPos)
627cdf0e10cSrcweir {
628cdf0e10cSrcweir aMovePos = rPos;
629cdf0e10cSrcweir JustifyAreaTimer();
630cdf0e10cSrcweir if( !aTimer.IsActive() )
631cdf0e10cSrcweir aTimer.Start();
632cdf0e10cSrcweir if( pShadCrsr )
633cdf0e10cSrcweir delete pShadCrsr, pShadCrsr = 0;
634cdf0e10cSrcweir }
635cdf0e10cSrcweir
EnterArea()636cdf0e10cSrcweir inline void SwEditWin::EnterArea()
637cdf0e10cSrcweir {
638cdf0e10cSrcweir aTimer.Stop();
639cdf0e10cSrcweir }
640cdf0e10cSrcweir
641cdf0e10cSrcweir /*------------------------------------------------------------------------
642cdf0e10cSrcweir Beschreibung: Modus fuer Rahmen einfuegen
643cdf0e10cSrcweir ------------------------------------------------------------------------*/
644cdf0e10cSrcweir
645cdf0e10cSrcweir
InsFrm(sal_uInt16 nCols)646cdf0e10cSrcweir void SwEditWin::InsFrm(sal_uInt16 nCols)
647cdf0e10cSrcweir {
648cdf0e10cSrcweir StdDrawMode( OBJ_NONE, sal_False );
649cdf0e10cSrcweir bInsFrm = sal_True;
650cdf0e10cSrcweir nInsFrmColCount = nCols;
651cdf0e10cSrcweir }
652cdf0e10cSrcweir
653cdf0e10cSrcweir
654cdf0e10cSrcweir
StdDrawMode(SdrObjKind eSdrObjectKind,sal_Bool bObjSelect)655cdf0e10cSrcweir void SwEditWin::StdDrawMode( SdrObjKind eSdrObjectKind, sal_Bool bObjSelect )
656cdf0e10cSrcweir {
657cdf0e10cSrcweir SetSdrDrawMode( eSdrObjectKind );
658cdf0e10cSrcweir
659cdf0e10cSrcweir if (bObjSelect)
660cdf0e10cSrcweir rView.SetDrawFuncPtr(new DrawSelection( &rView.GetWrtShell(), this, &rView ));
661cdf0e10cSrcweir else
662cdf0e10cSrcweir rView.SetDrawFuncPtr(new SwDrawBase( &rView.GetWrtShell(), this, &rView ));
663cdf0e10cSrcweir
664cdf0e10cSrcweir rView.SetSelDrawSlot();
665cdf0e10cSrcweir SetSdrDrawMode( eSdrObjectKind );
666cdf0e10cSrcweir if (bObjSelect)
667cdf0e10cSrcweir rView.GetDrawFuncPtr()->Activate( SID_OBJECT_SELECT );
668cdf0e10cSrcweir else
669cdf0e10cSrcweir rView.GetDrawFuncPtr()->Activate( sal::static_int_cast< sal_uInt16 >(eSdrObjectKind) ); // don't know if this is useful at all; but it keeps functionality as it was...
670cdf0e10cSrcweir bInsFrm = sal_False;
671cdf0e10cSrcweir nInsFrmColCount = 1;
672cdf0e10cSrcweir }
673cdf0e10cSrcweir
674cdf0e10cSrcweir
675cdf0e10cSrcweir
StopInsFrm()676cdf0e10cSrcweir void SwEditWin::StopInsFrm()
677cdf0e10cSrcweir {
678cdf0e10cSrcweir if (rView.GetDrawFuncPtr())
679cdf0e10cSrcweir {
680cdf0e10cSrcweir rView.GetDrawFuncPtr()->Deactivate();
681cdf0e10cSrcweir rView.SetDrawFuncPtr(NULL);
682cdf0e10cSrcweir }
683cdf0e10cSrcweir rView.LeaveDrawCreate(); // Konstruktionsmode verlassen
684cdf0e10cSrcweir bInsFrm = sal_False;
685cdf0e10cSrcweir nInsFrmColCount = 1;
686cdf0e10cSrcweir }
687cdf0e10cSrcweir
688cdf0e10cSrcweir /*--------------------------------------------------------------------
689cdf0e10cSrcweir --------------------------------------------------------------------*/
690cdf0e10cSrcweir
691cdf0e10cSrcweir
IsInputSequenceCheckingRequired(const String & rText,const SwPaM & rCrsr) const692cdf0e10cSrcweir sal_Bool SwEditWin::IsInputSequenceCheckingRequired( const String &rText, const SwPaM& rCrsr ) const
693cdf0e10cSrcweir {
694cdf0e10cSrcweir const SvtCTLOptions& rCTLOptions = SW_MOD()->GetCTLOptions();
695cdf0e10cSrcweir if ( !rCTLOptions.IsCTLFontEnabled() ||
696cdf0e10cSrcweir !rCTLOptions.IsCTLSequenceChecking() )
697cdf0e10cSrcweir return sal_False;
698cdf0e10cSrcweir
699cdf0e10cSrcweir const xub_StrLen nFirstPos = rCrsr.Start()->nContent.GetIndex();
700cdf0e10cSrcweir if ( 0 == nFirstPos ) /* first char needs not to be checked */
701cdf0e10cSrcweir return sal_False;
702cdf0e10cSrcweir
703cdf0e10cSrcweir SwBreakIt *pBreakIter = SwBreakIt::Get();
704cdf0e10cSrcweir uno::Reference < i18n::XBreakIterator > xBI = pBreakIter->GetBreakIter();
705cdf0e10cSrcweir long nCTLScriptPos = -1;
706cdf0e10cSrcweir
707cdf0e10cSrcweir if (xBI.is())
708cdf0e10cSrcweir {
709cdf0e10cSrcweir if (xBI->getScriptType( rText, 0 ) == i18n::ScriptType::COMPLEX)
710cdf0e10cSrcweir nCTLScriptPos = 0;
711cdf0e10cSrcweir else
712cdf0e10cSrcweir nCTLScriptPos = xBI->nextScript( rText, 0, i18n::ScriptType::COMPLEX );
713cdf0e10cSrcweir }
714cdf0e10cSrcweir
715cdf0e10cSrcweir return (0 <= nCTLScriptPos && nCTLScriptPos <= rText.Len());
716cdf0e10cSrcweir }
717cdf0e10cSrcweir
718cdf0e10cSrcweir
719cdf0e10cSrcweir /*--------------------------------------------------------------------
720cdf0e10cSrcweir Beschreibung: Der Character Buffer wird in das Dokument eingefuegt
721cdf0e10cSrcweir --------------------------------------------------------------------*/
722cdf0e10cSrcweir
723cdf0e10cSrcweir
FlushInBuffer()724cdf0e10cSrcweir void SwEditWin::FlushInBuffer()
725cdf0e10cSrcweir {
726cdf0e10cSrcweir if ( aInBuffer.Len() )
727cdf0e10cSrcweir {
728cdf0e10cSrcweir SwWrtShell& rSh = rView.GetWrtShell();
729cdf0e10cSrcweir
730cdf0e10cSrcweir // generate new sequence input checker if not already done
731cdf0e10cSrcweir if ( !pCheckIt )
732cdf0e10cSrcweir pCheckIt = new SwCheckIt;
733cdf0e10cSrcweir
734cdf0e10cSrcweir uno::Reference < i18n::XExtendedInputSequenceChecker > xISC = pCheckIt->xCheck;
735cdf0e10cSrcweir if ( xISC.is() && IsInputSequenceCheckingRequired( aInBuffer, *rSh.GetCrsr() ) )
736cdf0e10cSrcweir {
737cdf0e10cSrcweir //
738cdf0e10cSrcweir // apply (Thai) input sequence checking/correction
739cdf0e10cSrcweir //
740cdf0e10cSrcweir
741cdf0e10cSrcweir rSh.Push(); // push current cursor to stack
742cdf0e10cSrcweir
743cdf0e10cSrcweir // get text from the beginning (i.e left side) of current selection
744cdf0e10cSrcweir // to the start of the paragraph
745cdf0e10cSrcweir rSh.NormalizePam(); // make point be the first (left) one
746cdf0e10cSrcweir if (!rSh.GetCrsr()->HasMark())
747cdf0e10cSrcweir rSh.GetCrsr()->SetMark();
748cdf0e10cSrcweir rSh.GetCrsr()->GetMark()->nContent = 0;
749cdf0e10cSrcweir String aLeftText( rSh.GetCrsr()->GetTxt() );
750cdf0e10cSrcweir
751cdf0e10cSrcweir SvtCTLOptions& rCTLOptions = SW_MOD()->GetCTLOptions();
752cdf0e10cSrcweir
753cdf0e10cSrcweir xub_StrLen nExpandSelection = 0;
754cdf0e10cSrcweir if (aLeftText.Len() > 0)
755cdf0e10cSrcweir {
756cdf0e10cSrcweir sal_Unicode cChar = '\0';
757cdf0e10cSrcweir
758cdf0e10cSrcweir xub_StrLen nTmpPos = aLeftText.Len();
759cdf0e10cSrcweir sal_Int16 nCheckMode = rCTLOptions.IsCTLSequenceCheckingRestricted() ?
760cdf0e10cSrcweir i18n::InputSequenceCheckMode::STRICT : i18n::InputSequenceCheckMode::BASIC;
761cdf0e10cSrcweir
762cdf0e10cSrcweir rtl::OUString aOldText( aLeftText );
763cdf0e10cSrcweir rtl::OUString aNewText( aOldText );
764cdf0e10cSrcweir if (rCTLOptions.IsCTLSequenceCheckingTypeAndReplace())
765cdf0e10cSrcweir {
766cdf0e10cSrcweir for (xub_StrLen k = 0; k < aInBuffer.Len(); ++k)
767cdf0e10cSrcweir {
768cdf0e10cSrcweir cChar = aInBuffer.GetChar(k);
769cdf0e10cSrcweir const xub_StrLen nPrevPos = static_cast<xub_StrLen>(xISC->correctInputSequence( aNewText, nTmpPos - 1, cChar, nCheckMode ));
770cdf0e10cSrcweir
771cdf0e10cSrcweir // valid sequence or sequence could be corrected:
772cdf0e10cSrcweir if (nPrevPos != aNewText.getLength())
773cdf0e10cSrcweir nTmpPos = nPrevPos + 1;
774cdf0e10cSrcweir }
775cdf0e10cSrcweir
776cdf0e10cSrcweir // find position of first character that has changed
777cdf0e10cSrcweir sal_Int32 nOldLen = aOldText.getLength();
778cdf0e10cSrcweir sal_Int32 nNewLen = aNewText.getLength();
779cdf0e10cSrcweir const sal_Unicode *pOldTxt = aOldText.getStr();
780cdf0e10cSrcweir const sal_Unicode *pNewTxt = aNewText.getStr();
781cdf0e10cSrcweir sal_Int32 nChgPos = 0;
782cdf0e10cSrcweir while ( nChgPos < nOldLen && nChgPos < nNewLen &&
783cdf0e10cSrcweir pOldTxt[nChgPos] == pNewTxt[nChgPos] )
784cdf0e10cSrcweir ++nChgPos;
785cdf0e10cSrcweir
786cdf0e10cSrcweir xub_StrLen nChgLen = static_cast< xub_StrLen >(nNewLen - nChgPos);
787cdf0e10cSrcweir String aChgText( aNewText.copy( static_cast< xub_StrLen >(nChgPos), nChgLen ) );
788cdf0e10cSrcweir
789cdf0e10cSrcweir if (aChgText.Len())
790cdf0e10cSrcweir {
791cdf0e10cSrcweir aInBuffer = aChgText;
792cdf0e10cSrcweir nExpandSelection = aLeftText.Len() - static_cast< xub_StrLen >(nChgPos);
793cdf0e10cSrcweir }
794cdf0e10cSrcweir else
795cdf0e10cSrcweir aInBuffer.Erase();
796cdf0e10cSrcweir }
797cdf0e10cSrcweir else
798cdf0e10cSrcweir {
799cdf0e10cSrcweir for (xub_StrLen k = 0; k < aInBuffer.Len(); ++k)
800cdf0e10cSrcweir {
801cdf0e10cSrcweir cChar = aInBuffer.GetChar(k);
802cdf0e10cSrcweir if (xISC->checkInputSequence( aNewText, nTmpPos - 1, cChar, nCheckMode ))
803cdf0e10cSrcweir {
804cdf0e10cSrcweir // character can be inserted:
805cdf0e10cSrcweir aNewText += rtl::OUString( (sal_Unicode) cChar );
806cdf0e10cSrcweir ++nTmpPos;
807cdf0e10cSrcweir }
808cdf0e10cSrcweir }
809cdf0e10cSrcweir aInBuffer = aNewText.copy( aOldText.getLength() ); // copy new text to be inserted to buffer
810cdf0e10cSrcweir }
811cdf0e10cSrcweir }
812cdf0e10cSrcweir
813cdf0e10cSrcweir // at this point now we will insert the buffer text 'normally' some lines below...
814cdf0e10cSrcweir
815cdf0e10cSrcweir rSh.Pop( sal_False ); // pop old cursor from stack
816cdf0e10cSrcweir
817cdf0e10cSrcweir if (!aInBuffer.Len())
818cdf0e10cSrcweir return;
819cdf0e10cSrcweir
820cdf0e10cSrcweir // if text prior to the original selection needs to be changed
821cdf0e10cSrcweir // as well, we now expand the selection accordingly.
822cdf0e10cSrcweir SwPaM &rCrsr = *rSh.GetCrsr();
823cdf0e10cSrcweir xub_StrLen nCrsrStartPos = rCrsr.Start()->nContent.GetIndex();
824cdf0e10cSrcweir DBG_ASSERT( nCrsrStartPos >= nExpandSelection, "cannot expand selection as specified!!" );
825cdf0e10cSrcweir if (nExpandSelection && nCrsrStartPos >= nExpandSelection)
826cdf0e10cSrcweir {
827cdf0e10cSrcweir if (!rCrsr.HasMark())
828cdf0e10cSrcweir rCrsr.SetMark();
829cdf0e10cSrcweir rCrsr.Start()->nContent -= nExpandSelection;
830cdf0e10cSrcweir }
831cdf0e10cSrcweir }
832cdf0e10cSrcweir
833cdf0e10cSrcweir uno::Reference< frame::XDispatchRecorder > xRecorder =
834cdf0e10cSrcweir rView.GetViewFrame()->GetBindings().GetRecorder();
835cdf0e10cSrcweir if ( xRecorder.is() )
836cdf0e10cSrcweir {
837cdf0e10cSrcweir //Shell ermitteln
838cdf0e10cSrcweir SfxShell *pSfxShell = lcl_GetShellFromDispatcher( rView, TYPE(SwTextShell) );
839cdf0e10cSrcweir // Request generieren und recorden
840cdf0e10cSrcweir if (pSfxShell)
841cdf0e10cSrcweir {
842cdf0e10cSrcweir SfxRequest aReq( rView.GetViewFrame(), FN_INSERT_STRING );
843cdf0e10cSrcweir aReq.AppendItem( SfxStringItem( FN_INSERT_STRING, aInBuffer ) );
844cdf0e10cSrcweir aReq.Done();
845cdf0e10cSrcweir }
846cdf0e10cSrcweir }
847cdf0e10cSrcweir //#21019# apply CTL and CJK language to the text input
848cdf0e10cSrcweir sal_Bool bLang = true;
849cdf0e10cSrcweir if(eBufferLanguage != LANGUAGE_DONTKNOW)
850cdf0e10cSrcweir {
851cdf0e10cSrcweir sal_uInt16 nWhich = 0;
852cdf0e10cSrcweir switch( GetI18NScriptTypeOfLanguage( eBufferLanguage ))
853cdf0e10cSrcweir {
854cdf0e10cSrcweir case i18n::ScriptType::ASIAN: nWhich = RES_CHRATR_CJK_LANGUAGE; break;
855cdf0e10cSrcweir case i18n::ScriptType::COMPLEX: nWhich = RES_CHRATR_CTL_LANGUAGE; break;
856cdf0e10cSrcweir case i18n::ScriptType::LATIN: nWhich = RES_CHRATR_LANGUAGE; break;
857cdf0e10cSrcweir default: bLang = sal_False;
858cdf0e10cSrcweir }
859cdf0e10cSrcweir if(bLang)
860cdf0e10cSrcweir {
861cdf0e10cSrcweir SfxItemSet aLangSet(rView.GetPool(), nWhich, nWhich);
862cdf0e10cSrcweir rSh.GetCurAttr(aLangSet);
863cdf0e10cSrcweir if(SFX_ITEM_DEFAULT <= aLangSet.GetItemState(nWhich, sal_True))
864cdf0e10cSrcweir {
865cdf0e10cSrcweir LanguageType eLang = static_cast<const SvxLanguageItem&>(aLangSet.Get(nWhich)).GetLanguage();
866cdf0e10cSrcweir if ( eLang == eBufferLanguage )
867cdf0e10cSrcweir // current language attribute equal to language reported from system
868cdf0e10cSrcweir bLang = sal_False;
869cdf0e10cSrcweir else if ( !bInputLanguageSwitched && RES_CHRATR_LANGUAGE == nWhich /* && (eLang&LANGUAGE_MASK_PRIMARY) == LANGUAGE_ENGLISH */ )
870cdf0e10cSrcweir {
871cdf0e10cSrcweir // special case: switching between two "LATIN" languages
872cdf0e10cSrcweir // In case the current keyboard setting might be suitable for both languages we can't safely assume that the user
873cdf0e10cSrcweir // wants to use the language reported from the system, except if we knew that it was explicitly switched (thus the check for "bInputLangeSwitched").
874cdf0e10cSrcweir // The language reported by the system could be just the system default language that the user is not even aware of,
875cdf0e10cSrcweir // because no language selection tool is installed at all. In this case the OOo language should get preference as
876cdf0e10cSrcweir // it might have been selected by the user explicitly.
877cdf0e10cSrcweir // Usually this case happens if the OOo language is different to the system language but the system keyboard is still suitable
878cdf0e10cSrcweir // for the OOo language (e.g. writing English texts with a German keyboard).
879cdf0e10cSrcweir // For non-latin keyboards overwriting the attribute is still valid. We do this for kyrillic and greek ATM.
880cdf0e10cSrcweir // In future versions of OOo this should be replaced by a configuration switch that allows to give the preference to
881cdf0e10cSrcweir // the OOo setting or the system setting explicitly and/or a better handling of the script type.
882cdf0e10cSrcweir sal_Int16 nScript = GetAppCharClass().getScript( aInBuffer, 0 );
883cdf0e10cSrcweir i18n::UnicodeScript eType = (i18n::UnicodeScript) nScript;
884cdf0e10cSrcweir
885cdf0e10cSrcweir bool bSystemIsNonLatin = false, bOOoLangIsNonLatin = false;
886cdf0e10cSrcweir switch ( eType )
887cdf0e10cSrcweir {
888cdf0e10cSrcweir case i18n::UnicodeScript_kGreek:
889cdf0e10cSrcweir case i18n::UnicodeScript_kCyrillic:
890cdf0e10cSrcweir // in case other UnicodeScripts require special keyboards they can be added here
891cdf0e10cSrcweir bSystemIsNonLatin = true;
892cdf0e10cSrcweir break;
893cdf0e10cSrcweir default:
894cdf0e10cSrcweir break;
895cdf0e10cSrcweir }
896cdf0e10cSrcweir
897cdf0e10cSrcweir switch ( eLang )
898cdf0e10cSrcweir {
899cdf0e10cSrcweir case LANGUAGE_AZERI_CYRILLIC:
900cdf0e10cSrcweir case LANGUAGE_BOSNIAN_CYRILLIC_BOSNIA_HERZEGOVINA:
901cdf0e10cSrcweir case LANGUAGE_BULGARIAN:
902cdf0e10cSrcweir case LANGUAGE_GREEK:
903cdf0e10cSrcweir case LANGUAGE_RUSSIAN:
904cdf0e10cSrcweir case LANGUAGE_RUSSIAN_MOLDOVA:
905cdf0e10cSrcweir case LANGUAGE_SERBIAN_CYRILLIC:
906cdf0e10cSrcweir case LANGUAGE_SERBIAN_CYRILLIC_BOSNIA_HERZEGOVINA:
907cdf0e10cSrcweir case LANGUAGE_UZBEK_CYRILLIC:
908cdf0e10cSrcweir case LANGUAGE_UKRAINIAN:
909cdf0e10cSrcweir case LANGUAGE_BELARUSIAN:
910cdf0e10cSrcweir bOOoLangIsNonLatin = true;
911cdf0e10cSrcweir break;
912cdf0e10cSrcweir default:
913cdf0e10cSrcweir break;
914cdf0e10cSrcweir }
915cdf0e10cSrcweir
916cdf0e10cSrcweir bLang = (bSystemIsNonLatin != bOOoLangIsNonLatin);
917cdf0e10cSrcweir }
918cdf0e10cSrcweir }
919cdf0e10cSrcweir if(bLang)
920cdf0e10cSrcweir {
921cdf0e10cSrcweir SvxLanguageItem aLangItem( eBufferLanguage, nWhich );
92269a74367SOliver-Rainer Wittmann rSh.SetAttrItem( aLangItem );
923cdf0e10cSrcweir }
924cdf0e10cSrcweir }
925cdf0e10cSrcweir }
926cdf0e10cSrcweir
927cdf0e10cSrcweir rSh.Insert( aInBuffer );
928cdf0e10cSrcweir eBufferLanguage = LANGUAGE_DONTKNOW;
929cdf0e10cSrcweir aInBuffer.Erase();
930cdf0e10cSrcweir bFlushCharBuffer = sal_False;
931cdf0e10cSrcweir }
932cdf0e10cSrcweir }
933cdf0e10cSrcweir
934cdf0e10cSrcweir #define MOVE_LEFT_SMALL 0
935cdf0e10cSrcweir #define MOVE_UP_SMALL 1
936cdf0e10cSrcweir #define MOVE_RIGHT_BIG 2
937cdf0e10cSrcweir #define MOVE_DOWN_BIG 3
938cdf0e10cSrcweir #define MOVE_LEFT_BIG 4
939cdf0e10cSrcweir #define MOVE_UP_BIG 5
940cdf0e10cSrcweir #define MOVE_RIGHT_SMALL 6
941cdf0e10cSrcweir #define MOVE_DOWN_SMALL 7
942cdf0e10cSrcweir
94393641701SArmin Le Grand // #121236# Support for shift key in writer
94493641701SArmin Le Grand #define MOVE_LEFT_HUGE 8
94593641701SArmin Le Grand #define MOVE_UP_HUGE 9
94693641701SArmin Le Grand #define MOVE_RIGHT_HUGE 10
94793641701SArmin Le Grand #define MOVE_DOWN_HUGE 11
94893641701SArmin Le Grand
ChangeFly(sal_uInt8 nDir,sal_Bool bWeb)949cdf0e10cSrcweir void SwEditWin::ChangeFly( sal_uInt8 nDir, sal_Bool bWeb )
950cdf0e10cSrcweir {
951cdf0e10cSrcweir SwWrtShell &rSh = rView.GetWrtShell();
952cdf0e10cSrcweir SwRect aTmp = rSh.GetFlyRect();
953cdf0e10cSrcweir if( aTmp.HasArea() &&
954aa2af2f2SOliver-Rainer Wittmann !rSh.IsSelObjProtected( FLYPROTECT_POS ) )
955cdf0e10cSrcweir {
956cdf0e10cSrcweir SfxItemSet aSet(rSh.GetAttrPool(),
957cdf0e10cSrcweir RES_FRM_SIZE, RES_FRM_SIZE,
958cdf0e10cSrcweir RES_VERT_ORIENT, RES_ANCHOR,
959cdf0e10cSrcweir RES_COL, RES_COL,
960cdf0e10cSrcweir RES_PROTECT, RES_PROTECT,
961cdf0e10cSrcweir RES_FOLLOW_TEXT_FLOW, RES_FOLLOW_TEXT_FLOW, 0);
962cdf0e10cSrcweir rSh.GetFlyFrmAttr( aSet );
963cdf0e10cSrcweir RndStdIds eAnchorId = ((SwFmtAnchor&)aSet.Get(RES_ANCHOR)).GetAnchorId();
964cdf0e10cSrcweir Size aSnap;
96593641701SArmin Le Grand bool bHuge(MOVE_LEFT_HUGE == nDir ||
96693641701SArmin Le Grand MOVE_UP_HUGE == nDir ||
96793641701SArmin Le Grand MOVE_RIGHT_HUGE == nDir ||
96893641701SArmin Le Grand MOVE_DOWN_HUGE == nDir);
96993641701SArmin Le Grand
970cdf0e10cSrcweir if(MOVE_LEFT_SMALL == nDir ||
971cdf0e10cSrcweir MOVE_UP_SMALL == nDir ||
972cdf0e10cSrcweir MOVE_RIGHT_SMALL == nDir ||
973cdf0e10cSrcweir MOVE_DOWN_SMALL == nDir )
97493641701SArmin Le Grand {
975cdf0e10cSrcweir aSnap = PixelToLogic(Size(1,1));
97693641701SArmin Le Grand }
977cdf0e10cSrcweir else
978cdf0e10cSrcweir {
979cdf0e10cSrcweir aSnap = rSh.GetViewOptions()->GetSnapSize();
980cdf0e10cSrcweir short nDiv = rSh.GetViewOptions()->GetDivisionX();
981cdf0e10cSrcweir if ( nDiv > 0 )
982cdf0e10cSrcweir aSnap.Width() = Max( (sal_uLong)1, (sal_uLong)aSnap.Width() / nDiv );
983cdf0e10cSrcweir nDiv = rSh.GetViewOptions()->GetDivisionY();
984cdf0e10cSrcweir if ( nDiv > 0 )
985cdf0e10cSrcweir aSnap.Height() = Max( (sal_uLong)1, (sal_uLong)aSnap.Height() / nDiv );
986cdf0e10cSrcweir }
987cdf0e10cSrcweir
98893641701SArmin Le Grand if(bHuge)
98993641701SArmin Le Grand {
99093641701SArmin Le Grand // #121236# 567twips == 1cm, but just take three times the normal snap
99193641701SArmin Le Grand aSnap = Size(aSnap.Width() * 3, aSnap.Height() * 3);
99293641701SArmin Le Grand }
99393641701SArmin Le Grand
994cdf0e10cSrcweir SwRect aBoundRect;
995cdf0e10cSrcweir Point aRefPoint;
996cdf0e10cSrcweir {
997cdf0e10cSrcweir SwFmtVertOrient aVert( (SwFmtVertOrient&)aSet.Get(RES_VERT_ORIENT) );
998cdf0e10cSrcweir const bool bFollowTextFlow =
999cdf0e10cSrcweir static_cast<const SwFmtFollowTextFlow&>(aSet.Get(RES_FOLLOW_TEXT_FLOW)).GetValue();
1000cdf0e10cSrcweir const SwPosition* pToCharCntntPos = ((SwFmtAnchor&)aSet.Get(RES_ANCHOR)).GetCntntAnchor();
1001cdf0e10cSrcweir rSh.CalcBoundRect( aBoundRect, eAnchorId,
1002cdf0e10cSrcweir text::RelOrientation::FRAME, aVert.GetRelationOrient(),
1003cdf0e10cSrcweir pToCharCntntPos, bFollowTextFlow,
1004cdf0e10cSrcweir false, &aRefPoint );
1005cdf0e10cSrcweir }
1006cdf0e10cSrcweir long nLeft = Min( aTmp.Left() - aBoundRect.Left(), aSnap.Width() );
1007cdf0e10cSrcweir long nRight = Min( aBoundRect.Right() - aTmp.Right(), aSnap.Width() );
1008cdf0e10cSrcweir long nUp = Min( aTmp.Top() - aBoundRect.Top(), aSnap.Height() );
1009cdf0e10cSrcweir long nDown = Min( aBoundRect.Bottom() - aTmp.Bottom(), aSnap.Height() );
1010cdf0e10cSrcweir
1011cdf0e10cSrcweir switch ( nDir )
1012cdf0e10cSrcweir {
1013cdf0e10cSrcweir case MOVE_LEFT_BIG:
101493641701SArmin Le Grand case MOVE_LEFT_HUGE:
101593641701SArmin Le Grand case MOVE_LEFT_SMALL: aTmp.Left( aTmp.Left() - nLeft );
101693641701SArmin Le Grand break;
101793641701SArmin Le Grand
1018cdf0e10cSrcweir case MOVE_UP_BIG:
101993641701SArmin Le Grand case MOVE_UP_HUGE:
102093641701SArmin Le Grand case MOVE_UP_SMALL: aTmp.Top( aTmp.Top() - nUp );
102193641701SArmin Le Grand break;
102293641701SArmin Le Grand
102393641701SArmin Le Grand case MOVE_RIGHT_SMALL:
102493641701SArmin Le Grand if( aTmp.Width() < aSnap.Width() + MINFLY )
102593641701SArmin Le Grand break;
1026cdf0e10cSrcweir nRight = aSnap.Width(); // kein break
102793641701SArmin Le Grand case MOVE_RIGHT_HUGE:
102893641701SArmin Le Grand case MOVE_RIGHT_BIG: aTmp.Left( aTmp.Left() + nRight );
102993641701SArmin Le Grand break;
103093641701SArmin Le Grand
103193641701SArmin Le Grand case MOVE_DOWN_SMALL:
103293641701SArmin Le Grand if( aTmp.Height() < aSnap.Height() + MINFLY )
103393641701SArmin Le Grand break;
1034721f84f2Smseidel nDown = aSnap.Height(); // no break
103593641701SArmin Le Grand case MOVE_DOWN_HUGE:
103693641701SArmin Le Grand case MOVE_DOWN_BIG: aTmp.Top( aTmp.Top() + nDown );
103793641701SArmin Le Grand break;
103893641701SArmin Le Grand
1039cdf0e10cSrcweir default: ASSERT( sal_True, "ChangeFly: Unknown direction." );
1040cdf0e10cSrcweir }
1041cdf0e10cSrcweir sal_Bool bSet = sal_False;
1042cdf0e10cSrcweir if ((FLY_AS_CHAR == eAnchorId) && ( nDir % 2 ))
1043cdf0e10cSrcweir {
1044cdf0e10cSrcweir long aDiff = aTmp.Top() - aRefPoint.Y();
1045cdf0e10cSrcweir if( aDiff > 0 )
1046cdf0e10cSrcweir aDiff = 0;
1047cdf0e10cSrcweir else if ( aDiff < -aTmp.Height() )
1048cdf0e10cSrcweir aDiff = -aTmp.Height();
1049cdf0e10cSrcweir SwFmtVertOrient aVert( (SwFmtVertOrient&)aSet.Get(RES_VERT_ORIENT) );
1050cdf0e10cSrcweir sal_Int16 eNew;
1051cdf0e10cSrcweir if( bWeb )
1052cdf0e10cSrcweir {
1053cdf0e10cSrcweir eNew = aVert.GetVertOrient();
1054cdf0e10cSrcweir sal_Bool bDown = 0 != ( nDir & 0x02 );
1055cdf0e10cSrcweir switch( eNew )
1056cdf0e10cSrcweir {
1057cdf0e10cSrcweir case text::VertOrientation::CHAR_TOP:
1058cdf0e10cSrcweir if( bDown ) eNew = text::VertOrientation::CENTER;
1059cdf0e10cSrcweir break;
1060cdf0e10cSrcweir case text::VertOrientation::CENTER:
1061cdf0e10cSrcweir eNew = bDown ? text::VertOrientation::TOP : text::VertOrientation::CHAR_TOP;
1062cdf0e10cSrcweir break;
1063cdf0e10cSrcweir case text::VertOrientation::TOP:
1064cdf0e10cSrcweir if( !bDown ) eNew = text::VertOrientation::CENTER;
1065cdf0e10cSrcweir break;
1066cdf0e10cSrcweir case text::VertOrientation::LINE_TOP:
1067cdf0e10cSrcweir if( bDown ) eNew = text::VertOrientation::LINE_CENTER;
1068cdf0e10cSrcweir break;
1069cdf0e10cSrcweir case text::VertOrientation::LINE_CENTER:
1070cdf0e10cSrcweir eNew = bDown ? text::VertOrientation::LINE_BOTTOM : text::VertOrientation::LINE_TOP;
1071cdf0e10cSrcweir break;
1072cdf0e10cSrcweir case text::VertOrientation::LINE_BOTTOM:
1073cdf0e10cSrcweir if( !bDown ) eNew = text::VertOrientation::LINE_CENTER;
1074cdf0e10cSrcweir break;
1075cdf0e10cSrcweir default:; //prevent warning
1076cdf0e10cSrcweir }
1077cdf0e10cSrcweir }
1078cdf0e10cSrcweir else
1079cdf0e10cSrcweir {
1080cdf0e10cSrcweir aVert.SetPos( aDiff );
1081cdf0e10cSrcweir eNew = text::VertOrientation::NONE;
1082cdf0e10cSrcweir }
1083cdf0e10cSrcweir aVert.SetVertOrient( eNew );
1084cdf0e10cSrcweir aSet.Put( aVert );
1085cdf0e10cSrcweir bSet = sal_True;
1086cdf0e10cSrcweir }
1087cdf0e10cSrcweir if (bWeb && (FLY_AT_PARA == eAnchorId)
1088cdf0e10cSrcweir && ( nDir==MOVE_LEFT_SMALL || nDir==MOVE_RIGHT_BIG ))
1089cdf0e10cSrcweir {
1090cdf0e10cSrcweir SwFmtHoriOrient aHori( (SwFmtHoriOrient&)aSet.Get(RES_HORI_ORIENT) );
1091cdf0e10cSrcweir sal_Int16 eNew;
1092cdf0e10cSrcweir eNew = aHori.GetHoriOrient();
1093cdf0e10cSrcweir switch( eNew )
1094cdf0e10cSrcweir {
1095cdf0e10cSrcweir case text::HoriOrientation::RIGHT:
1096cdf0e10cSrcweir if( nDir==MOVE_LEFT_SMALL )
1097cdf0e10cSrcweir eNew = text::HoriOrientation::LEFT;
1098cdf0e10cSrcweir break;
1099cdf0e10cSrcweir case text::HoriOrientation::LEFT:
1100cdf0e10cSrcweir if( nDir==MOVE_RIGHT_BIG )
1101cdf0e10cSrcweir eNew = text::HoriOrientation::RIGHT;
1102cdf0e10cSrcweir break;
1103cdf0e10cSrcweir default:; //prevent warning
1104cdf0e10cSrcweir }
1105cdf0e10cSrcweir if( eNew != aHori.GetHoriOrient() )
1106cdf0e10cSrcweir {
1107cdf0e10cSrcweir aHori.SetHoriOrient( eNew );
1108cdf0e10cSrcweir aSet.Put( aHori );
1109cdf0e10cSrcweir bSet = sal_True;
1110cdf0e10cSrcweir }
1111cdf0e10cSrcweir }
1112cdf0e10cSrcweir rSh.StartAllAction();
1113cdf0e10cSrcweir if( bSet )
1114cdf0e10cSrcweir rSh.SetFlyFrmAttr( aSet );
1115cdf0e10cSrcweir sal_Bool bSetPos = (FLY_AS_CHAR != eAnchorId);
1116cdf0e10cSrcweir if(bSetPos && bWeb)
1117cdf0e10cSrcweir {
1118cdf0e10cSrcweir if (FLY_AT_PAGE != eAnchorId)
1119cdf0e10cSrcweir {
1120cdf0e10cSrcweir bSetPos = sal_False;
1121cdf0e10cSrcweir }
1122cdf0e10cSrcweir else
1123cdf0e10cSrcweir {
1124cdf0e10cSrcweir bSetPos = (::GetHtmlMode(rView.GetDocShell()) & HTMLMODE_SOME_ABS_POS) ?
1125cdf0e10cSrcweir sal_True : sal_False;
1126cdf0e10cSrcweir }
1127cdf0e10cSrcweir }
1128cdf0e10cSrcweir if( bSetPos )
1129cdf0e10cSrcweir rSh.SetFlyPos( aTmp.Pos() );
1130cdf0e10cSrcweir rSh.EndAllAction();
1131cdf0e10cSrcweir }
1132cdf0e10cSrcweir }
1133cdf0e10cSrcweir /* -----------------------------23.05.2002 11:35------------------------------
1134cdf0e10cSrcweir
1135cdf0e10cSrcweir ---------------------------------------------------------------------------*/
ChangeDrawing(sal_uInt8 nDir)1136cdf0e10cSrcweir void SwEditWin::ChangeDrawing( sal_uInt8 nDir )
1137cdf0e10cSrcweir {
1138cdf0e10cSrcweir SwWrtShell &rSh = rView.GetWrtShell();
1139cdf0e10cSrcweir rSh.StartUndo();
1140cdf0e10cSrcweir
1141cdf0e10cSrcweir long nX = 0;
1142cdf0e10cSrcweir long nY = 0;
114393641701SArmin Le Grand const sal_Bool bOnePixel(
114493641701SArmin Le Grand MOVE_LEFT_SMALL == nDir ||
114593641701SArmin Le Grand MOVE_UP_SMALL == nDir ||
114693641701SArmin Le Grand MOVE_RIGHT_SMALL == nDir ||
114793641701SArmin Le Grand MOVE_DOWN_SMALL == nDir);
114893641701SArmin Le Grand const sal_Bool bHuge(
114993641701SArmin Le Grand MOVE_LEFT_HUGE == nDir ||
115093641701SArmin Le Grand MOVE_UP_HUGE == nDir ||
115193641701SArmin Le Grand MOVE_RIGHT_HUGE == nDir ||
115293641701SArmin Le Grand MOVE_DOWN_HUGE == nDir);
1153cdf0e10cSrcweir sal_uInt16 nAnchorDir = SW_MOVE_UP;
1154cdf0e10cSrcweir switch(nDir)
1155cdf0e10cSrcweir {
1156cdf0e10cSrcweir case MOVE_LEFT_SMALL:
115793641701SArmin Le Grand case MOVE_LEFT_HUGE:
1158cdf0e10cSrcweir case MOVE_LEFT_BIG:
1159cdf0e10cSrcweir nX = -1;
1160cdf0e10cSrcweir nAnchorDir = SW_MOVE_LEFT;
1161cdf0e10cSrcweir break;
1162cdf0e10cSrcweir case MOVE_UP_SMALL:
116393641701SArmin Le Grand case MOVE_UP_HUGE:
1164cdf0e10cSrcweir case MOVE_UP_BIG:
1165cdf0e10cSrcweir nY = -1;
1166cdf0e10cSrcweir break;
1167cdf0e10cSrcweir case MOVE_RIGHT_SMALL:
116893641701SArmin Le Grand case MOVE_RIGHT_HUGE:
1169cdf0e10cSrcweir case MOVE_RIGHT_BIG:
1170cdf0e10cSrcweir nX = +1;
1171cdf0e10cSrcweir nAnchorDir = SW_MOVE_RIGHT;
1172cdf0e10cSrcweir break;
1173cdf0e10cSrcweir case MOVE_DOWN_SMALL:
117493641701SArmin Le Grand case MOVE_DOWN_HUGE:
1175cdf0e10cSrcweir case MOVE_DOWN_BIG:
1176cdf0e10cSrcweir nY = +1;
1177cdf0e10cSrcweir nAnchorDir = SW_MOVE_DOWN;
1178cdf0e10cSrcweir break;
1179cdf0e10cSrcweir }
1180cdf0e10cSrcweir
1181cdf0e10cSrcweir if(0 != nX || 0 != nY)
1182cdf0e10cSrcweir {
1183cdf0e10cSrcweir sal_uInt8 nProtect = rSh.IsSelObjProtected( FLYPROTECT_POS|FLYPROTECT_SIZE );
1184cdf0e10cSrcweir Size aSnap( rSh.GetViewOptions()->GetSnapSize() );
1185cdf0e10cSrcweir short nDiv = rSh.GetViewOptions()->GetDivisionX();
1186cdf0e10cSrcweir if ( nDiv > 0 )
1187cdf0e10cSrcweir aSnap.Width() = Max( (sal_uLong)1, (sal_uLong)aSnap.Width() / nDiv );
1188cdf0e10cSrcweir nDiv = rSh.GetViewOptions()->GetDivisionY();
1189cdf0e10cSrcweir if ( nDiv > 0 )
1190cdf0e10cSrcweir aSnap.Height() = Max( (sal_uLong)1, (sal_uLong)aSnap.Height() / nDiv );
1191cdf0e10cSrcweir
1192cdf0e10cSrcweir if(bOnePixel)
119393641701SArmin Le Grand {
1194cdf0e10cSrcweir aSnap = PixelToLogic(Size(1,1));
119593641701SArmin Le Grand }
119693641701SArmin Le Grand else if(bHuge)
119793641701SArmin Le Grand {
119893641701SArmin Le Grand // #121236# 567twips == 1cm, but just take three times the normal snap
119993641701SArmin Le Grand aSnap = Size(aSnap.Width() * 3, aSnap.Height() * 3);
120093641701SArmin Le Grand }
1201cdf0e10cSrcweir
1202cdf0e10cSrcweir nX *= aSnap.Width();
1203cdf0e10cSrcweir nY *= aSnap.Height();
1204cdf0e10cSrcweir
1205cdf0e10cSrcweir SdrView *pSdrView = rSh.GetDrawView();
1206cdf0e10cSrcweir const SdrHdlList& rHdlList = pSdrView->GetHdlList();
1207cdf0e10cSrcweir SdrHdl* pHdl = rHdlList.GetFocusHdl();
1208cdf0e10cSrcweir rSh.StartAllAction();
1209cdf0e10cSrcweir if(0L == pHdl)
1210cdf0e10cSrcweir {
1211cdf0e10cSrcweir // now move the selected draw objects
1212cdf0e10cSrcweir // if the object's position is not protected
1213cdf0e10cSrcweir if(0 == (nProtect&FLYPROTECT_POS))
1214cdf0e10cSrcweir {
1215cdf0e10cSrcweir sal_Bool bDummy1, bDummy2;
1216cdf0e10cSrcweir const bool bVertAnchor = rSh.IsFrmVertical( sal_True, bDummy1, bDummy2 );
1217cdf0e10cSrcweir const bool bHoriMove = !bVertAnchor == !( nDir % 2 );
1218cdf0e10cSrcweir const bool bMoveAllowed =
1219cdf0e10cSrcweir !bHoriMove || (rSh.GetAnchorId() != FLY_AS_CHAR);
1220cdf0e10cSrcweir if ( bMoveAllowed )
1221cdf0e10cSrcweir {
1222cdf0e10cSrcweir pSdrView->MoveAllMarked(Size(nX, nY));
1223cdf0e10cSrcweir rSh.SetModified();
1224cdf0e10cSrcweir }
1225cdf0e10cSrcweir }
1226cdf0e10cSrcweir }
1227cdf0e10cSrcweir else
1228cdf0e10cSrcweir {
1229cdf0e10cSrcweir // move handle with index nHandleIndex
1230cdf0e10cSrcweir if(pHdl && (nX || nY))
1231cdf0e10cSrcweir {
1232cdf0e10cSrcweir if( HDL_ANCHOR == pHdl->GetKind() ||
1233cdf0e10cSrcweir HDL_ANCHOR_TR == pHdl->GetKind() )
1234cdf0e10cSrcweir {
1235cdf0e10cSrcweir // anchor move cannot be allowed when position is protected
1236cdf0e10cSrcweir if(0 == (nProtect&FLYPROTECT_POS))
1237cdf0e10cSrcweir rSh.MoveAnchor( nAnchorDir );
1238cdf0e10cSrcweir }
1239cdf0e10cSrcweir //now resize if size is protected
1240cdf0e10cSrcweir else if(0 == (nProtect&FLYPROTECT_SIZE))
1241cdf0e10cSrcweir {
1242cdf0e10cSrcweir // now move the Handle (nX, nY)
1243cdf0e10cSrcweir Point aStartPoint(pHdl->GetPos());
1244cdf0e10cSrcweir Point aEndPoint(pHdl->GetPos() + Point(nX, nY));
1245cdf0e10cSrcweir const SdrDragStat& rDragStat = pSdrView->GetDragStat();
1246cdf0e10cSrcweir
1247cdf0e10cSrcweir // start dragging
1248cdf0e10cSrcweir pSdrView->BegDragObj(aStartPoint, 0, pHdl, 0);
1249cdf0e10cSrcweir
1250cdf0e10cSrcweir if(pSdrView->IsDragObj())
1251cdf0e10cSrcweir {
1252cdf0e10cSrcweir sal_Bool bWasNoSnap = static_cast< sal_Bool >(rDragStat.IsNoSnap());
1253cdf0e10cSrcweir sal_Bool bWasSnapEnabled = pSdrView->IsSnapEnabled();
1254cdf0e10cSrcweir
1255cdf0e10cSrcweir // switch snapping off
1256cdf0e10cSrcweir if(!bWasNoSnap)
1257cdf0e10cSrcweir ((SdrDragStat&)rDragStat).SetNoSnap(sal_True);
1258cdf0e10cSrcweir if(bWasSnapEnabled)
1259cdf0e10cSrcweir pSdrView->SetSnapEnabled(sal_False);
1260cdf0e10cSrcweir
1261cdf0e10cSrcweir pSdrView->MovAction(aEndPoint);
1262cdf0e10cSrcweir pSdrView->EndDragObj();
1263cdf0e10cSrcweir rSh.SetModified();
1264cdf0e10cSrcweir
1265cdf0e10cSrcweir // restore snap
1266cdf0e10cSrcweir if(!bWasNoSnap)
1267cdf0e10cSrcweir ((SdrDragStat&)rDragStat).SetNoSnap(bWasNoSnap);
1268cdf0e10cSrcweir if(bWasSnapEnabled)
1269cdf0e10cSrcweir pSdrView->SetSnapEnabled(bWasSnapEnabled);
1270cdf0e10cSrcweir }
1271cdf0e10cSrcweir }
1272cdf0e10cSrcweir }
1273cdf0e10cSrcweir }
1274cdf0e10cSrcweir rSh.EndAllAction();
1275cdf0e10cSrcweir }
1276cdf0e10cSrcweir
1277cdf0e10cSrcweir rSh.EndUndo();
1278cdf0e10cSrcweir }
1279cdf0e10cSrcweir
1280cdf0e10cSrcweir /*--------------------------------------------------------------------
1281cdf0e10cSrcweir Beschreibung: KeyEvents
1282cdf0e10cSrcweir --------------------------------------------------------------------*/
1283cdf0e10cSrcweir
1284cdf0e10cSrcweir
1285cdf0e10cSrcweir
KeyInput(const KeyEvent & rKEvt)1286cdf0e10cSrcweir void SwEditWin::KeyInput(const KeyEvent &rKEvt)
1287cdf0e10cSrcweir {
1288cdf0e10cSrcweir if( rKEvt.GetKeyCode().GetCode() == KEY_ESCAPE &&
1289cdf0e10cSrcweir pApplyTempl && pApplyTempl->pFormatClipboard )
1290cdf0e10cSrcweir {
1291cdf0e10cSrcweir pApplyTempl->pFormatClipboard->Erase();
1292cdf0e10cSrcweir SetApplyTemplate(SwApplyTemplate());
1293cdf0e10cSrcweir rView.GetViewFrame()->GetBindings().Invalidate(SID_FORMATPAINTBRUSH);
1294cdf0e10cSrcweir }
1295cdf0e10cSrcweir
1296cdf0e10cSrcweir SfxObjectShell *pObjSh = (SfxObjectShell*)rView.GetViewFrame()->GetObjectShell();
1297cdf0e10cSrcweir if ( bLockInput || (pObjSh && pObjSh->GetProgress()) )
1298cdf0e10cSrcweir // Wenn die Rechenleiste aktiv ist oder
1299cdf0e10cSrcweir // auf dem Document ein Progress laeuft wird keine
1300cdf0e10cSrcweir // Bestellungen angenommen.
1301cdf0e10cSrcweir return;
1302cdf0e10cSrcweir
1303cdf0e10cSrcweir if( pShadCrsr )
1304cdf0e10cSrcweir delete pShadCrsr, pShadCrsr = 0;
1305cdf0e10cSrcweir aKeyInputFlushTimer.Stop();
1306cdf0e10cSrcweir
1307cdf0e10cSrcweir SwWrtShell &rSh = rView.GetWrtShell();
1308cdf0e10cSrcweir sal_Bool bIsDocReadOnly = rView.GetDocShell()->IsReadOnly() &&
1309cdf0e10cSrcweir rSh.IsCrsrReadonly();
1310cdf0e10cSrcweir
1311cdf0e10cSrcweir //if the language changes the buffer must be flushed
1312cdf0e10cSrcweir LanguageType eNewLanguage = GetInputLanguage();
1313cdf0e10cSrcweir if(!bIsDocReadOnly && eBufferLanguage != eNewLanguage && aInBuffer.Len())
1314cdf0e10cSrcweir {
1315cdf0e10cSrcweir FlushInBuffer();
1316cdf0e10cSrcweir }
1317cdf0e10cSrcweir eBufferLanguage = eNewLanguage;
1318cdf0e10cSrcweir
1319cdf0e10cSrcweir QuickHelpData aTmpQHD;
1320cdf0e10cSrcweir if( pQuickHlpData->bClear )
1321cdf0e10cSrcweir {
1322cdf0e10cSrcweir aTmpQHD.Move( *pQuickHlpData );
1323cdf0e10cSrcweir pQuickHlpData->Stop( rSh );
1324cdf0e10cSrcweir }
1325cdf0e10cSrcweir
1326cdf0e10cSrcweir // OS:auch die DrawView braucht noch ein readonly-Flag
1327cdf0e10cSrcweir if ( !bIsDocReadOnly && rSh.GetDrawView() && rSh.GetDrawView()->KeyInput( rKEvt, this ) )
1328cdf0e10cSrcweir {
1329cdf0e10cSrcweir rSh.GetView().GetViewFrame()->GetBindings().InvalidateAll( sal_False );
1330cdf0e10cSrcweir rSh.SetModified();
1331cdf0e10cSrcweir return; // Event von der SdrView ausgewertet
1332cdf0e10cSrcweir }
1333cdf0e10cSrcweir
1334cdf0e10cSrcweir if ( rView.GetDrawFuncPtr() && bInsFrm )
1335cdf0e10cSrcweir {
1336cdf0e10cSrcweir StopInsFrm();
1337cdf0e10cSrcweir rSh.Edit();
1338cdf0e10cSrcweir }
1339cdf0e10cSrcweir
1340cdf0e10cSrcweir sal_Bool bFlushBuffer = sal_False;
1341cdf0e10cSrcweir sal_Bool bNormalChar = sal_False;
1342cdf0e10cSrcweir sal_Bool bChkInsBlank = pQuickHlpData->bChkInsBlank;
1343cdf0e10cSrcweir pQuickHlpData->bChkInsBlank = sal_False;
1344cdf0e10cSrcweir
1345cdf0e10cSrcweir KeyEvent aKeyEvent( rKEvt );
1346cdf0e10cSrcweir // look for vertical mappings
1347cdf0e10cSrcweir if( !bIsDocReadOnly && !rSh.IsSelFrmMode() && !rSh.IsObjSelected() )
1348cdf0e10cSrcweir {
1349cdf0e10cSrcweir //JP 21.2.2002: must changed from switch to if, because the Linux
1350cdf0e10cSrcweir // compiler has problem with the code. Has to remove if the new general
1351cdf0e10cSrcweir // handler exist.
1352cdf0e10cSrcweir sal_uInt16 nKey = rKEvt.GetKeyCode().GetCode();
1353cdf0e10cSrcweir
1354cdf0e10cSrcweir if( KEY_UP == nKey || KEY_DOWN == nKey ||
1355cdf0e10cSrcweir KEY_LEFT == nKey || KEY_RIGHT == nKey )
1356cdf0e10cSrcweir {
1357cdf0e10cSrcweir // In general, we want to map the direction keys if we are inside
1358cdf0e10cSrcweir // some vertical formatted text.
1359cdf0e10cSrcweir // 1. Exception: For a table cursor in a horizontal table, the
1360cdf0e10cSrcweir // directions should never be mapped.
1361cdf0e10cSrcweir // 2. Exception: For a table cursor in a vertical table, the
1362cdf0e10cSrcweir // directions should always be mapped.
1363cdf0e10cSrcweir const bool bVertText = rSh.IsInVerticalText();
1364cdf0e10cSrcweir const bool bTblCrsr = rSh.GetTableCrsr();
1365cdf0e10cSrcweir const bool bVertTable = rSh.IsTableVertical();
1366cdf0e10cSrcweir if( ( bVertText && ( !bTblCrsr || bVertTable ) ) ||
1367cdf0e10cSrcweir ( bTblCrsr && bVertTable ) )
1368cdf0e10cSrcweir {
1369cdf0e10cSrcweir // Attempt to integrate cursor travelling for mongolian layout does not work.
1370cdf0e10cSrcweir // Thus, back to previous mapping of cursor keys to direction keys.
1371cdf0e10cSrcweir if( KEY_UP == nKey ) nKey = KEY_LEFT;
1372cdf0e10cSrcweir else if( KEY_DOWN == nKey ) nKey = KEY_RIGHT;
1373cdf0e10cSrcweir else if( KEY_LEFT == nKey ) nKey = KEY_DOWN;
1374cdf0e10cSrcweir else if( KEY_RIGHT == nKey ) nKey = KEY_UP;
1375cdf0e10cSrcweir }
1376cdf0e10cSrcweir
1377cdf0e10cSrcweir if ( rSh.IsInRightToLeftText() )
1378cdf0e10cSrcweir {
1379cdf0e10cSrcweir if( KEY_LEFT == nKey ) nKey = KEY_RIGHT;
1380cdf0e10cSrcweir else if( KEY_RIGHT == nKey ) nKey = KEY_LEFT;
1381cdf0e10cSrcweir }
1382cdf0e10cSrcweir
1383cdf0e10cSrcweir aKeyEvent = KeyEvent( rKEvt.GetCharCode(),
1384cdf0e10cSrcweir KeyCode( nKey, rKEvt.GetKeyCode().GetModifier() ),
1385cdf0e10cSrcweir rKEvt.GetRepeat() );
1386cdf0e10cSrcweir }
1387cdf0e10cSrcweir }
1388cdf0e10cSrcweir
1389cdf0e10cSrcweir const KeyCode& rKeyCode = aKeyEvent.GetKeyCode();
1390cdf0e10cSrcweir sal_Unicode aCh = aKeyEvent.GetCharCode();
1391cdf0e10cSrcweir
1392cdf0e10cSrcweir // enable switching to notes ankor with Ctrl - Alt - Page Up/Down
1393cdf0e10cSrcweir // pressing this inside a note will switch to next/previous note
1394cdf0e10cSrcweir if ((rKeyCode.IsMod1() && rKeyCode.IsMod2()) && ((rKeyCode.GetCode() == KEY_PAGEUP) || (rKeyCode.GetCode() == KEY_PAGEDOWN)))
1395cdf0e10cSrcweir {
139669a74367SOliver-Rainer Wittmann const bool bNext = rKeyCode.GetCode()==KEY_PAGEDOWN ? true : false;
139769a74367SOliver-Rainer Wittmann const SwFieldType* pFldType = rSh.GetFldType( 0, RES_POSTITFLD );
1398cdf0e10cSrcweir rSh.MoveFldType( pFldType, bNext );
1399cdf0e10cSrcweir return;
1400cdf0e10cSrcweir }
1401cdf0e10cSrcweir
1402cdf0e10cSrcweir const SwFrmFmt* pFlyFmt = rSh.GetFlyFrmFmt();
1403cdf0e10cSrcweir if( pFlyFmt )
1404cdf0e10cSrcweir {
1405cdf0e10cSrcweir sal_uInt16 nEvent;
1406cdf0e10cSrcweir
1407cdf0e10cSrcweir if( 32 <= aCh &&
1408cdf0e10cSrcweir 0 == (( KEY_MOD1 | KEY_MOD2 ) & rKeyCode.GetModifier() ))
1409cdf0e10cSrcweir nEvent = SW_EVENT_FRM_KEYINPUT_ALPHA;
1410cdf0e10cSrcweir else
1411cdf0e10cSrcweir nEvent = SW_EVENT_FRM_KEYINPUT_NOALPHA;
1412cdf0e10cSrcweir
1413cdf0e10cSrcweir const SvxMacro* pMacro = pFlyFmt->GetMacro().GetMacroTable().Get( nEvent );
1414cdf0e10cSrcweir if( pMacro )
1415cdf0e10cSrcweir {
1416cdf0e10cSrcweir String sRet;
1417cdf0e10cSrcweir SbxArrayRef xArgs = new SbxArray;
1418cdf0e10cSrcweir SbxVariableRef xVar = new SbxVariable;
1419cdf0e10cSrcweir xVar->PutString( pFlyFmt->GetName() );
1420cdf0e10cSrcweir xArgs->Put( &xVar, 1 );
1421cdf0e10cSrcweir
1422cdf0e10cSrcweir xVar = new SbxVariable;
1423cdf0e10cSrcweir if( SW_EVENT_FRM_KEYINPUT_ALPHA == nEvent )
1424cdf0e10cSrcweir xVar->PutChar( aCh );
1425cdf0e10cSrcweir else
1426cdf0e10cSrcweir xVar->PutUShort( rKeyCode.GetModifier() | rKeyCode.GetCode() );
1427cdf0e10cSrcweir xArgs->Put( &xVar, 2 );
1428cdf0e10cSrcweir
1429cdf0e10cSrcweir rSh.ExecMacro( *pMacro, &sRet, &xArgs );
1430cdf0e10cSrcweir if( sRet.Len() && 0 != sRet.ToInt32() )
1431cdf0e10cSrcweir return ;
1432cdf0e10cSrcweir }
1433cdf0e10cSrcweir }
1434cdf0e10cSrcweir int nLclSelectionType;
1435cdf0e10cSrcweir //A is converted to 1
1436cdf0e10cSrcweir if( rKeyCode.GetFullCode() == (KEY_A | KEY_MOD1 |KEY_SHIFT)
1437cdf0e10cSrcweir && rSh.HasDrawView() &&
1438cdf0e10cSrcweir (0 != (nLclSelectionType = rSh.GetSelectionType()) &&
1439cdf0e10cSrcweir ((nLclSelectionType & (nsSelectionType::SEL_FRM|nsSelectionType::SEL_GRF)) ||
1440cdf0e10cSrcweir ((nLclSelectionType & (nsSelectionType::SEL_DRW|nsSelectionType::SEL_DRW_FORM)) &&
1441cdf0e10cSrcweir rSh.GetDrawView()->GetMarkedObjectList().GetMarkCount() == 1))))
1442cdf0e10cSrcweir {
1443cdf0e10cSrcweir SdrHdlList& rHdlList = (SdrHdlList&)rSh.GetDrawView()->GetHdlList();
1444cdf0e10cSrcweir SdrHdl* pAnchor = rHdlList.GetHdl(HDL_ANCHOR);
1445cdf0e10cSrcweir if ( ! pAnchor )
1446cdf0e10cSrcweir pAnchor = rHdlList.GetHdl(HDL_ANCHOR_TR);
1447cdf0e10cSrcweir if(pAnchor)
1448cdf0e10cSrcweir rHdlList.SetFocusHdl(pAnchor);
1449cdf0e10cSrcweir return;
1450cdf0e10cSrcweir }
1451cdf0e10cSrcweir
1452cdf0e10cSrcweir SvxAutoCorrCfg* pACfg = 0;
1453cdf0e10cSrcweir SvxAutoCorrect* pACorr = 0;
1454cdf0e10cSrcweir
1455cdf0e10cSrcweir uno::Reference< frame::XDispatchRecorder > xRecorder =
1456cdf0e10cSrcweir rView.GetViewFrame()->GetBindings().GetRecorder();
1457cdf0e10cSrcweir if ( !xRecorder.is() )
1458cdf0e10cSrcweir {
1459cdf0e10cSrcweir pACfg = SvxAutoCorrCfg::Get();
1460cdf0e10cSrcweir pACorr = pACfg->GetAutoCorrect();
1461cdf0e10cSrcweir }
1462cdf0e10cSrcweir
1463cdf0e10cSrcweir SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig();
1464cdf0e10cSrcweir
1465cdf0e10cSrcweir TblChgWidthHeightType eTblChgMode = nsTblChgWidthHeightType::WH_COL_LEFT; // initialization just for warning-free code
1466cdf0e10cSrcweir sal_uInt16 nTblChgSize = 0;
1467cdf0e10cSrcweir sal_Bool bStopKeyInputTimer = sal_True;
1468cdf0e10cSrcweir String sFmlEntry;
1469cdf0e10cSrcweir
1470cdf0e10cSrcweir enum SW_KeyState { KS_Start,
1471cdf0e10cSrcweir KS_CheckKey, KS_InsChar, KS_InsTab,
1472cdf0e10cSrcweir KS_NoNum, KS_NumOff, KS_NumOrNoNum, KS_NumDown, KS_NumUp,
1473cdf0e10cSrcweir // -> #i23725#
1474cdf0e10cSrcweir KS_NumIndentInc, KS_NumIndentDec,
1475cdf0e10cSrcweir // <- #i23725#
1476cdf0e10cSrcweir
1477cdf0e10cSrcweir KS_OutlineLvOff,
1478cdf0e10cSrcweir KS_NextCell, KS_PrevCell, KS_OutlineUp, KS_OutlineDown,
1479cdf0e10cSrcweir KS_GlossaryExpand, KS_NextPrevGlossary,
1480cdf0e10cSrcweir KS_AutoFmtByInput,
1481cdf0e10cSrcweir KS_NextObject, KS_PrevObject,
1482cdf0e10cSrcweir KS_KeyToView,
1483cdf0e10cSrcweir KS_LaunchOLEObject, KS_GoIntoFly, KS_GoIntoDrawing,
1484cdf0e10cSrcweir KS_EnterDrawHandleMode,
1485cdf0e10cSrcweir KS_CheckDocReadOnlyKeys,
1486cdf0e10cSrcweir KS_CheckAutoCorrect, KS_EditFormula,
1487cdf0e10cSrcweir KS_ColLeftBig, KS_ColRightBig,
1488cdf0e10cSrcweir KS_ColLeftSmall, KS_ColRightSmall,
1489cdf0e10cSrcweir KS_ColTopBig, KS_ColBottomBig,
1490cdf0e10cSrcweir KS_ColTopSmall, KS_ColBottomSmall,
1491cdf0e10cSrcweir KS_CellLeftBig, KS_CellRightBig,
1492cdf0e10cSrcweir KS_CellLeftSmall, KS_CellRightSmall,
1493cdf0e10cSrcweir KS_CellTopBig, KS_CellBottomBig,
1494cdf0e10cSrcweir KS_CellTopSmall, KS_CellBottomSmall,
1495cdf0e10cSrcweir
1496cdf0e10cSrcweir KS_InsDel_ColLeftBig, KS_InsDel_ColRightBig,
1497cdf0e10cSrcweir KS_InsDel_ColLeftSmall, KS_InsDel_ColRightSmall,
1498cdf0e10cSrcweir KS_InsDel_ColTopBig, KS_InsDel_ColBottomBig,
1499cdf0e10cSrcweir KS_InsDel_ColTopSmall, KS_InsDel_ColBottomSmall,
1500cdf0e10cSrcweir KS_InsDel_CellLeftBig, KS_InsDel_CellRightBig,
1501cdf0e10cSrcweir KS_InsDel_CellLeftSmall, KS_InsDel_CellRightSmall,
1502cdf0e10cSrcweir KS_InsDel_CellTopBig, KS_InsDel_CellBottomBig,
1503cdf0e10cSrcweir KS_InsDel_CellTopSmall, KS_InsDel_CellBottomSmall,
1504cdf0e10cSrcweir KS_TblColCellInsDel,
1505cdf0e10cSrcweir
1506cdf0e10cSrcweir KS_Fly_Change, KS_Draw_Change,
1507cdf0e10cSrcweir KS_SpecialInsert,
1508cdf0e10cSrcweir KS_EnterCharCell,
1509cdf0e10cSrcweir KS_GotoNextFieldMark,
1510cdf0e10cSrcweir KS_GotoPrevFieldMark,
1511cdf0e10cSrcweir KS_Ende };
1512cdf0e10cSrcweir
1513cdf0e10cSrcweir
1514cdf0e10cSrcweir
151569a74367SOliver-Rainer Wittmann SW_KeyState eKeyState = bIsDocReadOnly ? KS_CheckDocReadOnlyKeys : KS_CheckKey;
151669a74367SOliver-Rainer Wittmann SW_KeyState eNextKeyState = KS_Ende;
1517cdf0e10cSrcweir sal_uInt8 nDir = 0;
1518cdf0e10cSrcweir
1519cdf0e10cSrcweir if (nKS_NUMDOWN_Count > 0)
1520cdf0e10cSrcweir nKS_NUMDOWN_Count--;
1521cdf0e10cSrcweir
1522cdf0e10cSrcweir if (nKS_NUMINDENTINC_Count > 0)
1523cdf0e10cSrcweir nKS_NUMINDENTINC_Count--;
1524cdf0e10cSrcweir
1525cdf0e10cSrcweir while( KS_Ende != eKeyState )
1526cdf0e10cSrcweir {
1527cdf0e10cSrcweir SW_KeyState eFlyState = KS_KeyToView;
1528cdf0e10cSrcweir
1529cdf0e10cSrcweir switch( eKeyState )
1530cdf0e10cSrcweir {
1531cdf0e10cSrcweir case KS_CheckKey:
1532cdf0e10cSrcweir eKeyState = KS_KeyToView; // default weiter zur View
1533cdf0e10cSrcweir
1534cdf0e10cSrcweir #ifdef DBG_UTIL
1535cdf0e10cSrcweir //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1536cdf0e10cSrcweir // JP 19.01.99: zum Umschalten des Cursor Verhaltens in ReadOnly
1537cdf0e10cSrcweir // Bereichen
1538cdf0e10cSrcweir if( 0x7210 == rKeyCode.GetFullCode() )
1539cdf0e10cSrcweir rSh.SetReadOnlyAvailable( !rSh.IsReadOnlyAvailable() );
1540cdf0e10cSrcweir else
1541cdf0e10cSrcweir //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1542cdf0e10cSrcweir #endif
1543cdf0e10cSrcweir
1544cdf0e10cSrcweir if( !rKeyCode.IsMod2() && '=' == aCh &&
1545cdf0e10cSrcweir !rSh.IsTableMode() && rSh.GetTableFmt() &&
1546cdf0e10cSrcweir rSh.IsSttPara() /*&& rSh.IsEndPara()*/ &&
1547cdf0e10cSrcweir !rSh.HasReadonlySel() )
1548cdf0e10cSrcweir {
1549cdf0e10cSrcweir // in der Tabelle am Anfang der Zelle ein '=' ->
1550cdf0e10cSrcweir // EditZeile aufrufen (F2-Funktionalitaet)
1551cdf0e10cSrcweir rSh.Push();
1552cdf0e10cSrcweir if( !rSh.MoveSection( fnSectionCurr, fnSectionStart) &&
1553cdf0e10cSrcweir !rSh.IsTableBoxTextFormat() )
1554cdf0e10cSrcweir {
1555cdf0e10cSrcweir // steht also am Anfang der Box
1556cdf0e10cSrcweir eKeyState = KS_EditFormula;
1557cdf0e10cSrcweir if( rSh.HasMark() )
1558cdf0e10cSrcweir rSh.SwapPam();
1559cdf0e10cSrcweir else
1560cdf0e10cSrcweir rSh.SttSelect();
1561cdf0e10cSrcweir rSh.MoveSection( fnSectionCurr, fnSectionEnd );
1562cdf0e10cSrcweir rSh.Pop( sal_True );
1563cdf0e10cSrcweir rSh.EndSelect();
1564cdf0e10cSrcweir sFmlEntry = '=';
1565cdf0e10cSrcweir }
1566cdf0e10cSrcweir else
1567cdf0e10cSrcweir rSh.Pop( sal_False );
1568cdf0e10cSrcweir }
1569cdf0e10cSrcweir else
1570cdf0e10cSrcweir {
1571cdf0e10cSrcweir if( pACorr && aTmpQHD.HasCntnt() && !rSh.HasSelection() &&
1572cdf0e10cSrcweir !rSh.HasReadonlySel() && !aTmpQHD.bIsAutoText &&
1573cdf0e10cSrcweir pACorr->GetSwFlags().nAutoCmpltExpandKey ==
1574cdf0e10cSrcweir (rKeyCode.GetModifier() | rKeyCode.GetCode()) )
1575cdf0e10cSrcweir {
1576cdf0e10cSrcweir eKeyState = KS_GlossaryExpand;
1577cdf0e10cSrcweir break;
1578cdf0e10cSrcweir }
1579cdf0e10cSrcweir
1580cdf0e10cSrcweir switch( rKeyCode.GetModifier() | rKeyCode.GetCode() )
1581cdf0e10cSrcweir {
1582cdf0e10cSrcweir case KEY_RIGHT | KEY_MOD2:
1583cdf0e10cSrcweir eKeyState = KS_ColRightBig;
1584cdf0e10cSrcweir eFlyState = KS_Fly_Change;
15854846d9baSOliver-Rainer Wittmann nDir = MOVE_RIGHT_SMALL;
1586cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
1587cdf0e10cSrcweir
1588cdf0e10cSrcweir case KEY_LEFT | KEY_MOD2:
1589cdf0e10cSrcweir eKeyState = KS_ColRightSmall;
1590cdf0e10cSrcweir eFlyState = KS_Fly_Change;
15914846d9baSOliver-Rainer Wittmann nDir = MOVE_LEFT_SMALL;
1592cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
159393641701SArmin Le Grand
1594cdf0e10cSrcweir case KEY_RIGHT | KEY_MOD2 | KEY_SHIFT:
1595cdf0e10cSrcweir eKeyState = KS_ColLeftSmall;
1596cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
159793641701SArmin Le Grand
1598cdf0e10cSrcweir case KEY_LEFT | KEY_MOD2 | KEY_SHIFT:
1599cdf0e10cSrcweir eKeyState = KS_ColLeftBig;
1600cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
1601cdf0e10cSrcweir
1602cdf0e10cSrcweir case KEY_RIGHT | KEY_MOD2 | KEY_MOD1:
1603cdf0e10cSrcweir eKeyState = KS_CellRightBig;
1604cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
160593641701SArmin Le Grand
1606cdf0e10cSrcweir case KEY_LEFT | KEY_MOD2 | KEY_MOD1:
1607cdf0e10cSrcweir eKeyState = KS_CellRightSmall;
1608cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
160993641701SArmin Le Grand
1610cdf0e10cSrcweir case KEY_RIGHT | KEY_MOD2 | KEY_SHIFT | KEY_MOD1:
1611cdf0e10cSrcweir eKeyState = KS_CellLeftSmall;
1612cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
161393641701SArmin Le Grand
1614cdf0e10cSrcweir case KEY_LEFT | KEY_MOD2 | KEY_SHIFT | KEY_MOD1:
1615cdf0e10cSrcweir eKeyState = KS_CellLeftBig;
1616cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
1617cdf0e10cSrcweir
1618cdf0e10cSrcweir case KEY_UP | KEY_MOD2:
1619cdf0e10cSrcweir eKeyState = KS_ColBottomSmall;
1620cdf0e10cSrcweir eFlyState = KS_Fly_Change;
16214846d9baSOliver-Rainer Wittmann nDir = MOVE_UP_SMALL;
1622cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
162393641701SArmin Le Grand
1624cdf0e10cSrcweir case KEY_DOWN | KEY_MOD2:
1625cdf0e10cSrcweir eKeyState = KS_ColBottomBig;
1626cdf0e10cSrcweir eFlyState = KS_Fly_Change;
16274846d9baSOliver-Rainer Wittmann nDir = MOVE_DOWN_SMALL;
1628cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
162993641701SArmin Le Grand
1630cdf0e10cSrcweir case KEY_UP | KEY_MOD2 | KEY_MOD1:
1631cdf0e10cSrcweir eKeyState = KS_CellBottomSmall;
1632cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
163393641701SArmin Le Grand
1634cdf0e10cSrcweir case KEY_DOWN | KEY_MOD2 | KEY_MOD1:
1635cdf0e10cSrcweir eKeyState = KS_CellBottomBig;
1636cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
163793641701SArmin Le Grand
1638cdf0e10cSrcweir case KEY_UP | KEY_MOD2 | KEY_SHIFT | KEY_MOD1:
1639cdf0e10cSrcweir eKeyState = KS_CellTopBig;
1640cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
164193641701SArmin Le Grand
1642cdf0e10cSrcweir case KEY_DOWN | KEY_MOD2 | KEY_SHIFT | KEY_MOD1:
1643cdf0e10cSrcweir eKeyState = KS_CellTopSmall;
1644cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE;
1645cdf0e10cSrcweir
1646cdf0e10cSrcweir KEYINPUT_CHECKTABLE:
1647cdf0e10cSrcweir if( rSh.IsTableMode() || !rSh.GetTableFmt() )
1648cdf0e10cSrcweir {
1649cdf0e10cSrcweir if(KS_KeyToView != eFlyState)
1650cdf0e10cSrcweir {
1651cdf0e10cSrcweir if(!pFlyFmt && KS_KeyToView != eFlyState &&
1652cdf0e10cSrcweir (rSh.GetSelectionType() & (nsSelectionType::SEL_DRW|nsSelectionType::SEL_DRW_FORM)) &&
1653cdf0e10cSrcweir rSh.GetDrawView()->AreObjectsMarked())
1654cdf0e10cSrcweir eKeyState = KS_Draw_Change;
1655cdf0e10cSrcweir }
1656cdf0e10cSrcweir
1657cdf0e10cSrcweir if( pFlyFmt )
1658cdf0e10cSrcweir eKeyState = eFlyState;
1659cdf0e10cSrcweir else if( KS_Draw_Change != eKeyState)
1660cdf0e10cSrcweir eKeyState = KS_EnterCharCell;
1661cdf0e10cSrcweir }
1662cdf0e10cSrcweir break;
1663cdf0e10cSrcweir
16644846d9baSOliver-Rainer Wittmann // huge object move
16654846d9baSOliver-Rainer Wittmann case KEY_RIGHT | KEY_SHIFT:
16664846d9baSOliver-Rainer Wittmann case KEY_LEFT | KEY_SHIFT:
16674846d9baSOliver-Rainer Wittmann case KEY_UP | KEY_SHIFT:
16684846d9baSOliver-Rainer Wittmann case KEY_DOWN | KEY_SHIFT:
16694846d9baSOliver-Rainer Wittmann {
1670a1a40a94SOliver-Rainer Wittmann const int nSelectionType = rSh.GetSelectionType();
1671a1a40a94SOliver-Rainer Wittmann if ( ( pFlyFmt
1672a1a40a94SOliver-Rainer Wittmann && ( nSelectionType & (nsSelectionType::SEL_FRM|nsSelectionType::SEL_OLE|nsSelectionType::SEL_GRF) ) )
1673a1a40a94SOliver-Rainer Wittmann || ( ( nSelectionType & (nsSelectionType::SEL_DRW|nsSelectionType::SEL_DRW_FORM) )
16744846d9baSOliver-Rainer Wittmann && rSh.GetDrawView()->AreObjectsMarked() ) )
16754846d9baSOliver-Rainer Wittmann {
16764846d9baSOliver-Rainer Wittmann eKeyState = pFlyFmt ? KS_Fly_Change : KS_Draw_Change;
16774846d9baSOliver-Rainer Wittmann switch ( rKeyCode.GetCode() )
16784846d9baSOliver-Rainer Wittmann {
16794846d9baSOliver-Rainer Wittmann case KEY_RIGHT: nDir = MOVE_RIGHT_HUGE; break;
16804846d9baSOliver-Rainer Wittmann case KEY_LEFT: nDir = MOVE_LEFT_HUGE; break;
16814846d9baSOliver-Rainer Wittmann case KEY_UP: nDir = MOVE_UP_HUGE; break;
16824846d9baSOliver-Rainer Wittmann case KEY_DOWN: nDir = MOVE_DOWN_HUGE; break;
16834846d9baSOliver-Rainer Wittmann }
16844846d9baSOliver-Rainer Wittmann }
16854846d9baSOliver-Rainer Wittmann break;
16864846d9baSOliver-Rainer Wittmann }
16874846d9baSOliver-Rainer Wittmann
1688cdf0e10cSrcweir //-------
1689cdf0e10cSrcweir // Insert/Delete
1690cdf0e10cSrcweir case KEY_LEFT:
1691cdf0e10cSrcweir case KEY_LEFT | KEY_MOD1:
1692cdf0e10cSrcweir {
1693cdf0e10cSrcweir sal_Bool bMod1 = 0 != (rKeyCode.GetModifier() & KEY_MOD1);
1694cdf0e10cSrcweir if(!bMod1)
1695cdf0e10cSrcweir {
1696cdf0e10cSrcweir eFlyState = KS_Fly_Change;
1697cdf0e10cSrcweir nDir = MOVE_LEFT_BIG;
1698cdf0e10cSrcweir }
1699cdf0e10cSrcweir eTblChgMode = nsTblChgWidthHeightType::WH_FLAG_INSDEL |
1700cdf0e10cSrcweir ( bMod1
1701cdf0e10cSrcweir ? nsTblChgWidthHeightType::WH_CELL_LEFT
1702cdf0e10cSrcweir : nsTblChgWidthHeightType::WH_COL_LEFT );
1703cdf0e10cSrcweir nTblChgSize = pModOpt->GetTblVInsert();
1704cdf0e10cSrcweir }
1705cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE_INSDEL;
1706cdf0e10cSrcweir case KEY_RIGHT | KEY_MOD1:
1707cdf0e10cSrcweir {
1708cdf0e10cSrcweir eTblChgMode = nsTblChgWidthHeightType::WH_FLAG_INSDEL | nsTblChgWidthHeightType::WH_CELL_RIGHT;
1709cdf0e10cSrcweir nTblChgSize = pModOpt->GetTblVInsert();
1710cdf0e10cSrcweir }
1711cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE_INSDEL;
1712cdf0e10cSrcweir case KEY_UP:
1713cdf0e10cSrcweir case KEY_UP | KEY_MOD1:
1714cdf0e10cSrcweir {
1715cdf0e10cSrcweir sal_Bool bMod1 = 0 != (rKeyCode.GetModifier() & KEY_MOD1);
1716cdf0e10cSrcweir if(!bMod1)
1717cdf0e10cSrcweir {
1718cdf0e10cSrcweir eFlyState = KS_Fly_Change;
1719cdf0e10cSrcweir nDir = MOVE_UP_BIG;
1720cdf0e10cSrcweir }
1721cdf0e10cSrcweir eTblChgMode = nsTblChgWidthHeightType::WH_FLAG_INSDEL |
1722cdf0e10cSrcweir ( bMod1
1723cdf0e10cSrcweir ? nsTblChgWidthHeightType::WH_CELL_TOP
1724cdf0e10cSrcweir : nsTblChgWidthHeightType::WH_ROW_TOP );
1725cdf0e10cSrcweir nTblChgSize = pModOpt->GetTblHInsert();
1726cdf0e10cSrcweir }
1727cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE_INSDEL;
1728cdf0e10cSrcweir case KEY_DOWN:
1729cdf0e10cSrcweir case KEY_DOWN | KEY_MOD1:
1730cdf0e10cSrcweir {
1731cdf0e10cSrcweir sal_Bool bMod1 = 0 != (rKeyCode.GetModifier() & KEY_MOD1);
1732cdf0e10cSrcweir if(!bMod1)
1733cdf0e10cSrcweir {
1734cdf0e10cSrcweir eFlyState = KS_Fly_Change;
1735cdf0e10cSrcweir nDir = MOVE_DOWN_BIG;
1736cdf0e10cSrcweir }
1737cdf0e10cSrcweir eTblChgMode = nsTblChgWidthHeightType::WH_FLAG_INSDEL |
1738cdf0e10cSrcweir ( bMod1
1739cdf0e10cSrcweir ? nsTblChgWidthHeightType::WH_CELL_BOTTOM
1740cdf0e10cSrcweir : nsTblChgWidthHeightType::WH_ROW_BOTTOM );
1741cdf0e10cSrcweir nTblChgSize = pModOpt->GetTblHInsert();
1742cdf0e10cSrcweir }
1743cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE_INSDEL;
1744cdf0e10cSrcweir
1745cdf0e10cSrcweir KEYINPUT_CHECKTABLE_INSDEL:
1746cdf0e10cSrcweir if( rSh.IsTableMode() || !rSh.GetTableFmt() ||
1747cdf0e10cSrcweir !bTblInsDelMode ||
1748cdf0e10cSrcweir sal_False /* Tabelle geschuetzt */
1749cdf0e10cSrcweir )
1750cdf0e10cSrcweir {
1751cdf0e10cSrcweir const int nSelectionType = rSh.GetSelectionType();
1752cdf0e10cSrcweir
1753cdf0e10cSrcweir eKeyState = KS_KeyToView;
1754cdf0e10cSrcweir if(KS_KeyToView != eFlyState)
1755cdf0e10cSrcweir {
1756cdf0e10cSrcweir if((nSelectionType & (nsSelectionType::SEL_DRW|nsSelectionType::SEL_DRW_FORM)) &&
1757cdf0e10cSrcweir rSh.GetDrawView()->AreObjectsMarked())
1758cdf0e10cSrcweir eKeyState = KS_Draw_Change;
1759cdf0e10cSrcweir else if(nSelectionType & (nsSelectionType::SEL_FRM|nsSelectionType::SEL_OLE|nsSelectionType::SEL_GRF))
1760cdf0e10cSrcweir eKeyState = KS_Fly_Change;
1761cdf0e10cSrcweir }
1762cdf0e10cSrcweir }
1763cdf0e10cSrcweir else
1764cdf0e10cSrcweir {
1765cdf0e10cSrcweir if( !bTblIsInsMode )
1766cdf0e10cSrcweir eTblChgMode = eTblChgMode | nsTblChgWidthHeightType::WH_FLAG_BIGGER;
1767cdf0e10cSrcweir eKeyState = KS_TblColCellInsDel;
1768cdf0e10cSrcweir }
1769cdf0e10cSrcweir break;
1770cdf0e10cSrcweir
1771cdf0e10cSrcweir case KEY_DELETE:
1772cdf0e10cSrcweir if (rSh.IsInFrontOfLabel() &&
1773cdf0e10cSrcweir rSh.NumOrNoNum(sal_False))
1774cdf0e10cSrcweir eKeyState = KS_NumOrNoNum;
1775cdf0e10cSrcweir break;
1776cdf0e10cSrcweir
1777cdf0e10cSrcweir case KEY_DELETE | KEY_MOD2:
1778cdf0e10cSrcweir if( !rSh.IsTableMode() && rSh.GetTableFmt() )
1779cdf0e10cSrcweir {
1780cdf0e10cSrcweir eKeyState = KS_Ende;
1781cdf0e10cSrcweir bTblInsDelMode = sal_True;
1782cdf0e10cSrcweir bTblIsInsMode = sal_False;
1783cdf0e10cSrcweir bTblIsColMode = sal_True;
1784cdf0e10cSrcweir aKeyInputTimer.Start();
1785cdf0e10cSrcweir bStopKeyInputTimer = sal_False;
1786cdf0e10cSrcweir }
1787cdf0e10cSrcweir break;
1788cdf0e10cSrcweir case KEY_INSERT | KEY_MOD2:
1789cdf0e10cSrcweir if( !rSh.IsTableMode() && rSh.GetTableFmt() )
1790cdf0e10cSrcweir {
1791cdf0e10cSrcweir eKeyState = KS_Ende;
1792cdf0e10cSrcweir bTblInsDelMode = sal_True;
1793cdf0e10cSrcweir bTblIsInsMode = sal_True;
1794cdf0e10cSrcweir bTblIsColMode = sal_True;
1795cdf0e10cSrcweir aKeyInputTimer.Start();
1796cdf0e10cSrcweir bStopKeyInputTimer = sal_False;
1797cdf0e10cSrcweir }
1798cdf0e10cSrcweir break;
1799cdf0e10cSrcweir
1800cdf0e10cSrcweir case KEY_RETURN: // Return
180169a74367SOliver-Rainer Wittmann if ( !rSh.HasReadonlySel()
180269a74367SOliver-Rainer Wittmann && !rSh.CrsrInsideInputFld() )
1803cdf0e10cSrcweir {
1804cdf0e10cSrcweir const int nSelectionType = rSh.GetSelectionType();
1805cdf0e10cSrcweir if(nSelectionType & nsSelectionType::SEL_OLE)
1806cdf0e10cSrcweir eKeyState = KS_LaunchOLEObject;
1807cdf0e10cSrcweir else if(nSelectionType & nsSelectionType::SEL_FRM)
1808cdf0e10cSrcweir eKeyState = KS_GoIntoFly;
1809cdf0e10cSrcweir else if((nSelectionType & nsSelectionType::SEL_DRW) &&
1810cdf0e10cSrcweir 0 == (nSelectionType & nsSelectionType::SEL_DRW_TXT) &&
1811cdf0e10cSrcweir rSh.GetDrawView()->GetMarkedObjectList().GetMarkCount() == 1)
1812cdf0e10cSrcweir eKeyState = KS_GoIntoDrawing;
1813cdf0e10cSrcweir else if( aTmpQHD.HasCntnt() && !rSh.HasSelection() &&
1814cdf0e10cSrcweir aTmpQHD.bIsAutoText )
1815cdf0e10cSrcweir eKeyState = KS_GlossaryExpand;
1816cdf0e10cSrcweir
1817cdf0e10cSrcweir //RETURN und leerer Absatz in Numerierung -> Num. beenden
1818cdf0e10cSrcweir else if( !aInBuffer.Len() &&
181934760e49SOliver-Rainer Wittmann rSh.GetNumRuleAtCurrCrsrPos() &&
182034760e49SOliver-Rainer Wittmann !rSh.GetNumRuleAtCurrCrsrPos()->IsOutlineRule() &&
1821cdf0e10cSrcweir !rSh.HasSelection() &&
1822cdf0e10cSrcweir rSh.IsSttPara() && rSh.IsEndPara() )
1823cdf0e10cSrcweir eKeyState = KS_NumOff, eNextKeyState = KS_OutlineLvOff;
1824cdf0e10cSrcweir
1825cdf0e10cSrcweir //RETURN fuer neuen Absatz mit AutoFormatierung
1826cdf0e10cSrcweir else if( pACfg && pACfg->IsAutoFmtByInput() &&
1827cdf0e10cSrcweir !(nSelectionType & (nsSelectionType::SEL_GRF |
1828cdf0e10cSrcweir nsSelectionType::SEL_OLE | nsSelectionType::SEL_FRM |
1829cdf0e10cSrcweir nsSelectionType::SEL_TBL_CELLS | nsSelectionType::SEL_DRW |
1830cdf0e10cSrcweir nsSelectionType::SEL_DRW_TXT)) )
1831cdf0e10cSrcweir eKeyState = KS_CheckAutoCorrect, eNextKeyState = KS_AutoFmtByInput;
1832cdf0e10cSrcweir else
1833cdf0e10cSrcweir eNextKeyState = eKeyState, eKeyState = KS_CheckAutoCorrect;
1834cdf0e10cSrcweir }
1835cdf0e10cSrcweir break;
1836cdf0e10cSrcweir
1837cdf0e10cSrcweir case KEY_RETURN | KEY_MOD2: // ALT-Return
183869a74367SOliver-Rainer Wittmann if ( !rSh.HasReadonlySel()
183969a74367SOliver-Rainer Wittmann && !rSh.IsSttPara()
184034760e49SOliver-Rainer Wittmann && rSh.GetNumRuleAtCurrCrsrPos()
184169a74367SOliver-Rainer Wittmann && !rSh.CrsrInsideInputFld() )
184269a74367SOliver-Rainer Wittmann {
1843cdf0e10cSrcweir eKeyState = KS_NoNum;
184469a74367SOliver-Rainer Wittmann }
1845cdf0e10cSrcweir else if( rSh.CanSpecialInsert() )
1846cdf0e10cSrcweir eKeyState = KS_SpecialInsert;
1847cdf0e10cSrcweir break;
1848cdf0e10cSrcweir
1849cdf0e10cSrcweir case KEY_BACKSPACE:
1850cdf0e10cSrcweir case KEY_BACKSPACE | KEY_SHIFT:
185123d8f725SOliver-Rainer Wittmann if ( !rSh.HasReadonlySel()
185223d8f725SOliver-Rainer Wittmann && !rSh.CrsrInsideInputFld() )
1853cdf0e10cSrcweir {
1854cdf0e10cSrcweir sal_Bool bDone = sal_False;
1855cdf0e10cSrcweir // Remove the paragraph indent, if the cursor is at the
1856cdf0e10cSrcweir // beginning of a paragraph, there is no selection
1857cdf0e10cSrcweir // and no numbering rule found at the current paragraph
1858cdf0e10cSrcweir // Also try to remove indent, if current paragraph
1859cdf0e10cSrcweir // has numbering rule, but isn't counted and only
1860cdf0e10cSrcweir // key <backspace> is hit.
186123d8f725SOliver-Rainer Wittmann const bool bOnlyBackspaceKey( KEY_BACKSPACE == rKeyCode.GetFullCode() );
186223d8f725SOliver-Rainer Wittmann if ( rSh.IsSttPara()
186323d8f725SOliver-Rainer Wittmann && !rSh.HasSelection()
186434760e49SOliver-Rainer Wittmann && ( rSh.GetNumRuleAtCurrCrsrPos() == NULL
186523d8f725SOliver-Rainer Wittmann || ( rSh.IsNoNum() && bOnlyBackspaceKey ) ) )
1866cdf0e10cSrcweir {
1867cdf0e10cSrcweir bDone = rSh.TryRemoveIndent();
1868cdf0e10cSrcweir }
1869cdf0e10cSrcweir
1870cdf0e10cSrcweir if (bDone)
1871cdf0e10cSrcweir eKeyState = KS_Ende;
1872cdf0e10cSrcweir else
1873cdf0e10cSrcweir {
187423d8f725SOliver-Rainer Wittmann if ( rSh.IsSttPara() && !rSh.IsNoNum() )
1875cdf0e10cSrcweir {
187623d8f725SOliver-Rainer Wittmann if (nKS_NUMDOWN_Count > 0
187723d8f725SOliver-Rainer Wittmann && rSh.GetNumLevel() > 0)
1878cdf0e10cSrcweir {
1879cdf0e10cSrcweir eKeyState = KS_NumUp;
1880cdf0e10cSrcweir nKS_NUMDOWN_Count = 2;
1881cdf0e10cSrcweir bDone = sal_True;
1882cdf0e10cSrcweir }
1883cdf0e10cSrcweir else if (nKS_NUMINDENTINC_Count > 0)
1884cdf0e10cSrcweir {
1885cdf0e10cSrcweir eKeyState = KS_NumIndentDec;
1886cdf0e10cSrcweir nKS_NUMINDENTINC_Count = 2;
1887cdf0e10cSrcweir bDone = sal_True;
1888cdf0e10cSrcweir }
1889cdf0e10cSrcweir }
1890cdf0e10cSrcweir // If the cursor is in an empty paragraph, which has
189123d8f725SOliver-Rainer Wittmann // a numbering, but not the outline numbering, and
1892cdf0e10cSrcweir // there is no selection, the numbering has to be
1893cdf0e10cSrcweir // deleted on key <Backspace>.
1894cdf0e10cSrcweir // Otherwise method <SwEditShell::NumOrNoNum(..)>
1895cdf0e10cSrcweir // should only change the <IsCounted()> state of
1896cdf0e10cSrcweir // the current paragraph depending of the key.
1897cdf0e10cSrcweir // On <backspace> it is set to <false>,
1898cdf0e10cSrcweir // on <shift-backspace> it is set to <true>.
1899cdf0e10cSrcweir // Thus, assure that method <SwEditShell::NumOrNum(..)>
1900cdf0e10cSrcweir // is only called for the intended purpose.
190123d8f725SOliver-Rainer Wittmann if ( !bDone && rSh.IsSttPara() )
190223d8f725SOliver-Rainer Wittmann {
1903cdf0e10cSrcweir bool bCallNumOrNoNum( false );
1904cdf0e10cSrcweir if ( bOnlyBackspaceKey && !rSh.IsNoNum() )
1905cdf0e10cSrcweir {
1906cdf0e10cSrcweir bCallNumOrNoNum = true;
1907cdf0e10cSrcweir }
1908cdf0e10cSrcweir else if ( !bOnlyBackspaceKey && rSh.IsNoNum() )
1909cdf0e10cSrcweir {
1910cdf0e10cSrcweir bCallNumOrNoNum = true;
1911cdf0e10cSrcweir }
191223d8f725SOliver-Rainer Wittmann else if ( bOnlyBackspaceKey
191323d8f725SOliver-Rainer Wittmann && rSh.IsSttPara()
191423d8f725SOliver-Rainer Wittmann && rSh.IsEndPara()
191523d8f725SOliver-Rainer Wittmann && !rSh.HasSelection() )
1916cdf0e10cSrcweir {
191734760e49SOliver-Rainer Wittmann const SwNumRule* pCurrNumRule( rSh.GetNumRuleAtCurrCrsrPos() );
191823d8f725SOliver-Rainer Wittmann if ( pCurrNumRule != NULL
191923d8f725SOliver-Rainer Wittmann && pCurrNumRule != rSh.GetOutlineNumRule() )
1920cdf0e10cSrcweir {
1921cdf0e10cSrcweir bCallNumOrNoNum = true;
1922cdf0e10cSrcweir }
1923cdf0e10cSrcweir }
192423d8f725SOliver-Rainer Wittmann if ( bCallNumOrNoNum
192523d8f725SOliver-Rainer Wittmann && rSh.NumOrNoNum( !bOnlyBackspaceKey, sal_True ) )
1926cdf0e10cSrcweir {
1927cdf0e10cSrcweir eKeyState = KS_NumOrNoNum;
1928cdf0e10cSrcweir }
192923d8f725SOliver-Rainer Wittmann }
1930cdf0e10cSrcweir }
1931cdf0e10cSrcweir }
1932cdf0e10cSrcweir break;
1933cdf0e10cSrcweir
1934cdf0e10cSrcweir case KEY_RIGHT:
1935cdf0e10cSrcweir {
1936cdf0e10cSrcweir eFlyState = KS_Fly_Change;
1937cdf0e10cSrcweir nDir = MOVE_RIGHT_BIG;
1938cdf0e10cSrcweir eTblChgMode = nsTblChgWidthHeightType::WH_FLAG_INSDEL | nsTblChgWidthHeightType::WH_COL_RIGHT;
1939cdf0e10cSrcweir nTblChgSize = pModOpt->GetTblVInsert();
1940cdf0e10cSrcweir goto KEYINPUT_CHECKTABLE_INSDEL;
1941cdf0e10cSrcweir }
1942cdf0e10cSrcweir case KEY_TAB:
1943cdf0e10cSrcweir {
1944cdf0e10cSrcweir
1945cdf0e10cSrcweir #ifdef SW_CRSR_TIMER
1946cdf0e10cSrcweir sal_Bool bOld = rSh.ChgCrsrTimerFlag( sal_False );
1947cdf0e10cSrcweir #endif
1948cdf0e10cSrcweir if (rSh.IsFormProtected() || rSh.GetCurrentFieldmark() || rSh.GetChar(sal_False)==CH_TXT_ATR_FORMELEMENT)
1949cdf0e10cSrcweir {
1950cdf0e10cSrcweir eKeyState=KS_GotoNextFieldMark;
1951cdf0e10cSrcweir }
195269a74367SOliver-Rainer Wittmann else if ( !rSh.IsMultiSelection() && rSh.CrsrInsideInputFld() )
195369a74367SOliver-Rainer Wittmann {
195469a74367SOliver-Rainer Wittmann GetView().GetViewFrame()->GetDispatcher()->Execute( FN_GOTO_NEXT_INPUTFLD );
195569a74367SOliver-Rainer Wittmann eKeyState = KS_Ende;
195669a74367SOliver-Rainer Wittmann }
195734760e49SOliver-Rainer Wittmann else if( rSh.GetNumRuleAtCurrCrsrPos()
195823d8f725SOliver-Rainer Wittmann && rSh.IsSttOfPara()
195923d8f725SOliver-Rainer Wittmann && !rSh.HasReadonlySel() )
1960cdf0e10cSrcweir {
196134760e49SOliver-Rainer Wittmann if ( !rSh.IsMultiSelection()
196234760e49SOliver-Rainer Wittmann && rSh.IsFirstOfNumRuleAtCrsrPos()
196334760e49SOliver-Rainer Wittmann && numfunc::ChangeIndentOnTabAtFirstPosOfFirstListItem() )
1964cdf0e10cSrcweir eKeyState = KS_NumIndentInc;
1965cdf0e10cSrcweir else
1966cdf0e10cSrcweir eKeyState = KS_NumDown;
1967cdf0e10cSrcweir }
1968cdf0e10cSrcweir else if ( rSh.GetTableFmt() )
1969cdf0e10cSrcweir {
1970cdf0e10cSrcweir if( rSh.HasSelection() || rSh.HasReadonlySel() )
1971cdf0e10cSrcweir eKeyState = KS_NextCell;
1972cdf0e10cSrcweir else
1973cdf0e10cSrcweir eKeyState = KS_CheckAutoCorrect, eNextKeyState = KS_NextCell;
1974cdf0e10cSrcweir }
1975cdf0e10cSrcweir else if ( rSh.GetSelectionType() &
1976cdf0e10cSrcweir (nsSelectionType::SEL_GRF |
1977cdf0e10cSrcweir nsSelectionType::SEL_FRM |
1978cdf0e10cSrcweir nsSelectionType::SEL_OLE |
1979cdf0e10cSrcweir nsSelectionType::SEL_DRW |
1980cdf0e10cSrcweir nsSelectionType::SEL_DRW_FORM))
1981cdf0e10cSrcweir
1982cdf0e10cSrcweir eKeyState = KS_NextObject;
1983cdf0e10cSrcweir else
1984cdf0e10cSrcweir {
1985cdf0e10cSrcweir eKeyState = KS_InsTab;
1986cdf0e10cSrcweir if( rSh.IsSttOfPara() && !rSh.HasReadonlySel() )
1987cdf0e10cSrcweir {
1988cdf0e10cSrcweir SwTxtFmtColl* pColl = rSh.GetCurTxtFmtColl();
1989cdf0e10cSrcweir if( pColl &&
1990cdf0e10cSrcweir //0 <= pColl->GetOutlineLevel() && #i24560#
1991cdf0e10cSrcweir //MAXLEVEL - 1 > pColl->GetOutlineLevel() )//#outline level,zhaojianwei
1992cdf0e10cSrcweir pColl->IsAssignedToListLevelOfOutlineStyle()
1993cdf0e10cSrcweir && MAXLEVEL-1 > pColl->GetAssignedOutlineStyleLevel() )//<-end,zhaojianwei
1994cdf0e10cSrcweir eKeyState = KS_OutlineDown;
1995cdf0e10cSrcweir }
1996cdf0e10cSrcweir }
1997cdf0e10cSrcweir #ifdef SW_CRSR_TIMER
1998cdf0e10cSrcweir rSh.ChgCrsrTimerFlag( bOld );
1999cdf0e10cSrcweir #endif
2000cdf0e10cSrcweir }
2001cdf0e10cSrcweir break;
2002cdf0e10cSrcweir case KEY_TAB | KEY_SHIFT:
2003cdf0e10cSrcweir {
2004cdf0e10cSrcweir #ifdef SW_CRSR_TIMER
2005cdf0e10cSrcweir sal_Bool bOld = rSh.ChgCrsrTimerFlag( sal_False );
2006cdf0e10cSrcweir sal_Bool bOld = rSh.ChgCrsrTimerFlag( sal_False );
2007cdf0e10cSrcweir #endif
200869a74367SOliver-Rainer Wittmann if (rSh.IsFormProtected() || rSh.GetCurrentFieldmark()|| rSh.GetChar(sal_False)==CH_TXT_ATR_FORMELEMENT)
200969a74367SOliver-Rainer Wittmann {
2010cdf0e10cSrcweir eKeyState=KS_GotoPrevFieldMark;
2011cdf0e10cSrcweir }
201269a74367SOliver-Rainer Wittmann else if ( !rSh.IsMultiSelection() && rSh.CrsrInsideInputFld() )
201369a74367SOliver-Rainer Wittmann {
201469a74367SOliver-Rainer Wittmann GetView().GetViewFrame()->GetDispatcher()->Execute( FN_GOTO_PREV_INPUTFLD );
201569a74367SOliver-Rainer Wittmann eKeyState = KS_Ende;
201669a74367SOliver-Rainer Wittmann }
201734760e49SOliver-Rainer Wittmann else if( rSh.GetNumRuleAtCurrCrsrPos()
201823d8f725SOliver-Rainer Wittmann && rSh.IsSttOfPara()
201923d8f725SOliver-Rainer Wittmann && !rSh.HasReadonlySel() )
2020cdf0e10cSrcweir {
202134760e49SOliver-Rainer Wittmann if ( !rSh.IsMultiSelection()
202234760e49SOliver-Rainer Wittmann && rSh.IsFirstOfNumRuleAtCrsrPos()
202334760e49SOliver-Rainer Wittmann && numfunc::ChangeIndentOnTabAtFirstPosOfFirstListItem() )
2024cdf0e10cSrcweir eKeyState = KS_NumIndentDec;
2025cdf0e10cSrcweir else
2026cdf0e10cSrcweir eKeyState = KS_NumUp;
2027cdf0e10cSrcweir }
2028cdf0e10cSrcweir else if ( rSh.GetTableFmt() )
2029cdf0e10cSrcweir {
2030cdf0e10cSrcweir if( rSh.HasSelection() || rSh.HasReadonlySel() )
2031cdf0e10cSrcweir eKeyState = KS_PrevCell;
2032cdf0e10cSrcweir else
2033cdf0e10cSrcweir eKeyState = KS_CheckAutoCorrect, eNextKeyState = KS_PrevCell;
2034cdf0e10cSrcweir }
2035cdf0e10cSrcweir else if ( rSh.GetSelectionType() &
2036cdf0e10cSrcweir (nsSelectionType::SEL_GRF |
2037cdf0e10cSrcweir nsSelectionType::SEL_FRM |
2038cdf0e10cSrcweir nsSelectionType::SEL_OLE |
2039cdf0e10cSrcweir nsSelectionType::SEL_DRW |
2040cdf0e10cSrcweir nsSelectionType::SEL_DRW_FORM))
2041cdf0e10cSrcweir
2042cdf0e10cSrcweir eKeyState = KS_PrevObject;
2043cdf0e10cSrcweir else
2044cdf0e10cSrcweir {
2045cdf0e10cSrcweir eKeyState = KS_Ende;
2046cdf0e10cSrcweir if( rSh.IsSttOfPara() && !rSh.HasReadonlySel() )
2047cdf0e10cSrcweir {
2048cdf0e10cSrcweir SwTxtFmtColl* pColl = rSh.GetCurTxtFmtColl();
2049cdf0e10cSrcweir //if( pColl && 0 < pColl->GetOutlineLevel() && //#outline level,zhaojianwei
2050cdf0e10cSrcweir // MAXLEVEL - 1 >= pColl->GetOutlineLevel() )
2051cdf0e10cSrcweir if( pColl &&
2052cdf0e10cSrcweir pColl->IsAssignedToListLevelOfOutlineStyle() &&
2053cdf0e10cSrcweir 0 < pColl->GetAssignedOutlineStyleLevel())
2054cdf0e10cSrcweir eKeyState = KS_OutlineUp;
2055cdf0e10cSrcweir }
2056cdf0e10cSrcweir }
2057cdf0e10cSrcweir #ifdef SW_CRSR_TIMER
2058cdf0e10cSrcweir rSh.ChgCrsrTimerFlag( bOld );
2059cdf0e10cSrcweir #endif
2060cdf0e10cSrcweir }
2061cdf0e10cSrcweir break;
2062cdf0e10cSrcweir case KEY_TAB | KEY_MOD1:
2063cdf0e10cSrcweir case KEY_TAB | KEY_MOD2:
2064cdf0e10cSrcweir if( !rSh.HasReadonlySel() )
2065cdf0e10cSrcweir {
2066cdf0e10cSrcweir if( aTmpQHD.HasCntnt() && !rSh.HasSelection() )
2067cdf0e10cSrcweir {
2068cdf0e10cSrcweir // zum naechsten Tip
2069cdf0e10cSrcweir aTmpQHD.Inc( pACorr && pACorr->GetSwFlags().
2070cdf0e10cSrcweir bAutoCmpltEndless );
2071cdf0e10cSrcweir eKeyState = KS_NextPrevGlossary;
2072cdf0e10cSrcweir }
2073cdf0e10cSrcweir else if( rSh.GetTableFmt() )
2074cdf0e10cSrcweir eKeyState = KS_InsTab;
2075cdf0e10cSrcweir else if((rSh.GetSelectionType() &
2076cdf0e10cSrcweir (nsSelectionType::SEL_DRW|nsSelectionType::SEL_DRW_FORM|
2077cdf0e10cSrcweir nsSelectionType::SEL_FRM|nsSelectionType::SEL_OLE|nsSelectionType::SEL_GRF)) &&
2078cdf0e10cSrcweir rSh.GetDrawView()->AreObjectsMarked())
2079cdf0e10cSrcweir eKeyState = KS_EnterDrawHandleMode;
2080cdf0e10cSrcweir else
2081cdf0e10cSrcweir {
2082cdf0e10cSrcweir eKeyState = KS_InsTab;
2083cdf0e10cSrcweir }
2084cdf0e10cSrcweir }
2085cdf0e10cSrcweir break;
2086cdf0e10cSrcweir
2087cdf0e10cSrcweir case KEY_TAB | KEY_MOD1 | KEY_SHIFT:
2088cdf0e10cSrcweir if( aTmpQHD.HasCntnt() && !rSh.HasSelection() &&
2089cdf0e10cSrcweir !rSh.HasReadonlySel() )
2090cdf0e10cSrcweir {
2091cdf0e10cSrcweir // zum vorherigen Tip
2092cdf0e10cSrcweir aTmpQHD.Dec( pACorr && pACorr->GetSwFlags().
2093cdf0e10cSrcweir bAutoCmpltEndless );
2094cdf0e10cSrcweir eKeyState = KS_NextPrevGlossary;
2095cdf0e10cSrcweir }
2096cdf0e10cSrcweir else if((rSh.GetSelectionType() & (nsSelectionType::SEL_DRW|nsSelectionType::SEL_DRW_FORM|
2097cdf0e10cSrcweir nsSelectionType::SEL_FRM|nsSelectionType::SEL_OLE|nsSelectionType::SEL_GRF)) &&
2098cdf0e10cSrcweir rSh.GetDrawView()->AreObjectsMarked())
2099cdf0e10cSrcweir eKeyState = KS_EnterDrawHandleMode;
2100cdf0e10cSrcweir break;
2101cdf0e10cSrcweir case KEY_F2 :
2102cdf0e10cSrcweir if( !rSh.HasReadonlySel() )
2103cdf0e10cSrcweir {
2104cdf0e10cSrcweir const int nSelectionType = rSh.GetSelectionType();
2105cdf0e10cSrcweir if(nSelectionType & nsSelectionType::SEL_FRM)
2106cdf0e10cSrcweir eKeyState = KS_GoIntoFly;
2107cdf0e10cSrcweir else if((nSelectionType & nsSelectionType::SEL_DRW))
2108cdf0e10cSrcweir eKeyState = KS_GoIntoDrawing;
2109cdf0e10cSrcweir }
2110cdf0e10cSrcweir break;
2111cdf0e10cSrcweir }
2112cdf0e10cSrcweir }
2113cdf0e10cSrcweir break;
2114cdf0e10cSrcweir case KS_CheckDocReadOnlyKeys:
2115cdf0e10cSrcweir {
2116cdf0e10cSrcweir eKeyState = KS_KeyToView;
2117cdf0e10cSrcweir switch( rKeyCode.GetModifier() | rKeyCode.GetCode() )
2118cdf0e10cSrcweir {
2119cdf0e10cSrcweir case KEY_TAB:
2120cdf0e10cSrcweir case KEY_TAB | KEY_SHIFT:
2121cdf0e10cSrcweir bNormalChar = sal_False;
2122cdf0e10cSrcweir eKeyState = KS_Ende;
2123cdf0e10cSrcweir if ( rSh.GetSelectionType() &
2124cdf0e10cSrcweir (nsSelectionType::SEL_GRF |
2125cdf0e10cSrcweir nsSelectionType::SEL_FRM |
2126cdf0e10cSrcweir nsSelectionType::SEL_OLE |
2127cdf0e10cSrcweir nsSelectionType::SEL_DRW |
2128cdf0e10cSrcweir nsSelectionType::SEL_DRW_FORM))
2129cdf0e10cSrcweir
2130cdf0e10cSrcweir {
2131cdf0e10cSrcweir eKeyState = rKeyCode.GetModifier() & KEY_SHIFT ?
2132cdf0e10cSrcweir KS_PrevObject : KS_NextObject;
2133cdf0e10cSrcweir }
213469a74367SOliver-Rainer Wittmann else if ( !rSh.IsMultiSelection() && rSh.CrsrInsideInputFld() )
213569a74367SOliver-Rainer Wittmann {
213669a74367SOliver-Rainer Wittmann GetView().GetViewFrame()->GetDispatcher()->Execute(
213769a74367SOliver-Rainer Wittmann KEY_SHIFT != rKeyCode.GetModifier() ? FN_GOTO_NEXT_INPUTFLD : FN_GOTO_PREV_INPUTFLD );
213869a74367SOliver-Rainer Wittmann }
2139cdf0e10cSrcweir else
214069a74367SOliver-Rainer Wittmann {
214169a74367SOliver-Rainer Wittmann rSh.SelectNextPrevHyperlink( KEY_SHIFT != rKeyCode.GetModifier() );
214269a74367SOliver-Rainer Wittmann }
2143cdf0e10cSrcweir break;
2144cdf0e10cSrcweir case KEY_RETURN:
2145cdf0e10cSrcweir {
2146cdf0e10cSrcweir const int nSelectionType = rSh.GetSelectionType();
2147cdf0e10cSrcweir if(nSelectionType & nsSelectionType::SEL_FRM)
2148cdf0e10cSrcweir eKeyState = KS_GoIntoFly;
2149cdf0e10cSrcweir else
2150cdf0e10cSrcweir {
2151cdf0e10cSrcweir SfxItemSet aSet(rSh.GetAttrPool(), RES_TXTATR_INETFMT, RES_TXTATR_INETFMT);
2152cdf0e10cSrcweir rSh.GetCurAttr(aSet);
2153cdf0e10cSrcweir if(SFX_ITEM_SET == aSet.GetItemState(RES_TXTATR_INETFMT, sal_False))
2154cdf0e10cSrcweir {
2155cdf0e10cSrcweir const SfxPoolItem& rItem = aSet.Get(RES_TXTATR_INETFMT, sal_True);
2156cdf0e10cSrcweir bNormalChar = sal_False;
2157cdf0e10cSrcweir eKeyState = KS_Ende;
2158cdf0e10cSrcweir rSh.ClickToINetAttr((const SwFmtINetFmt&)rItem, URLLOAD_NOFILTER);
2159cdf0e10cSrcweir }
2160cdf0e10cSrcweir }
2161cdf0e10cSrcweir }
2162cdf0e10cSrcweir break;
2163cdf0e10cSrcweir }
2164cdf0e10cSrcweir }
2165cdf0e10cSrcweir break;
2166cdf0e10cSrcweir
2167cdf0e10cSrcweir case KS_EnterCharCell:
2168cdf0e10cSrcweir {
2169cdf0e10cSrcweir eKeyState = KS_KeyToView;
2170cdf0e10cSrcweir switch ( rKeyCode.GetModifier() | rKeyCode.GetCode() )
2171cdf0e10cSrcweir {
2172cdf0e10cSrcweir case KEY_RIGHT | KEY_MOD2:
2173cdf0e10cSrcweir rSh.Right( CRSR_SKIP_CHARS, sal_False, 1, sal_False );
2174cdf0e10cSrcweir eKeyState = KS_Ende;
2175cdf0e10cSrcweir FlushInBuffer();
2176cdf0e10cSrcweir break;
2177cdf0e10cSrcweir case KEY_LEFT | KEY_MOD2:
2178cdf0e10cSrcweir rSh.Left( CRSR_SKIP_CHARS, sal_False, 1, sal_False );
2179cdf0e10cSrcweir eKeyState = KS_Ende;
2180cdf0e10cSrcweir FlushInBuffer();
2181cdf0e10cSrcweir break;
2182cdf0e10cSrcweir }
2183cdf0e10cSrcweir }
2184cdf0e10cSrcweir break;
2185cdf0e10cSrcweir
2186cdf0e10cSrcweir case KS_KeyToView:
2187cdf0e10cSrcweir {
2188cdf0e10cSrcweir eKeyState = KS_Ende;
2189cdf0e10cSrcweir bNormalChar =
2190cdf0e10cSrcweir !rKeyCode.IsMod2() &&
2191cdf0e10cSrcweir rKeyCode.GetModifier() != (KEY_MOD1) &&
2192cdf0e10cSrcweir rKeyCode.GetModifier() != (KEY_MOD1|KEY_SHIFT) &&
2193cdf0e10cSrcweir SW_ISPRINTABLE( aCh );
2194cdf0e10cSrcweir
2195cdf0e10cSrcweir if (bNormalChar && rSh.IsInFrontOfLabel())
2196cdf0e10cSrcweir {
2197cdf0e10cSrcweir rSh.NumOrNoNum(sal_False);
2198cdf0e10cSrcweir }
2199cdf0e10cSrcweir
2200cdf0e10cSrcweir if( aInBuffer.Len() && ( !bNormalChar || bIsDocReadOnly ))
2201cdf0e10cSrcweir FlushInBuffer();
2202cdf0e10cSrcweir
2203cdf0e10cSrcweir if( rView.KeyInput( aKeyEvent ) )
2204cdf0e10cSrcweir bFlushBuffer = sal_True, bNormalChar = sal_False;
2205cdf0e10cSrcweir else
2206cdf0e10cSrcweir {
2207cdf0e10cSrcweir // OS 22.09.95: Da der Sfx Acceleratoren nur aufruft, wenn sie beim letzten
2208cdf0e10cSrcweir // Statusupdate enabled wurden, muss copy ggf. von uns
2209cdf0e10cSrcweir // 'gewaltsam' gerufen werden.
2210cdf0e10cSrcweir if( rKeyCode.GetFunction() == KEYFUNC_COPY )
2211cdf0e10cSrcweir GetView().GetViewFrame()->GetBindings().Execute(SID_COPY);
2212cdf0e10cSrcweir
2213cdf0e10cSrcweir
2214cdf0e10cSrcweir if( !bIsDocReadOnly && bNormalChar )
2215cdf0e10cSrcweir {
2216cdf0e10cSrcweir const int nSelectionType = rSh.GetSelectionType();
2217cdf0e10cSrcweir if((nSelectionType & nsSelectionType::SEL_DRW) &&
2218cdf0e10cSrcweir 0 == (nSelectionType & nsSelectionType::SEL_DRW_TXT) &&
2219cdf0e10cSrcweir rSh.GetDrawView()->GetMarkedObjectList().GetMarkCount() == 1)
2220cdf0e10cSrcweir {
2221cdf0e10cSrcweir SdrObject* pObj = rSh.GetDrawView()->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj();
2222cdf0e10cSrcweir if(pObj)
2223cdf0e10cSrcweir {
2224cdf0e10cSrcweir EnterDrawTextMode(pObj->GetLogicRect().Center());
2225cdf0e10cSrcweir if ( rView.GetCurShell()->ISA(SwDrawTextShell) )
2226cdf0e10cSrcweir ((SwDrawTextShell*)rView.GetCurShell())->Init();
2227cdf0e10cSrcweir rSh.GetDrawView()->KeyInput( rKEvt, this );
2228cdf0e10cSrcweir }
2229cdf0e10cSrcweir }
2230cdf0e10cSrcweir else if(nSelectionType & nsSelectionType::SEL_FRM)
2231cdf0e10cSrcweir {
2232cdf0e10cSrcweir rSh.UnSelectFrm();
2233cdf0e10cSrcweir rSh.LeaveSelFrmMode();
2234cdf0e10cSrcweir rView.AttrChangedNotify(&rSh);
2235cdf0e10cSrcweir rSh.MoveSection( fnSectionCurr, fnSectionEnd );
2236cdf0e10cSrcweir }
2237cdf0e10cSrcweir eKeyState = KS_InsChar;
2238cdf0e10cSrcweir }
2239cdf0e10cSrcweir else
2240cdf0e10cSrcweir {
2241cdf0e10cSrcweir bNormalChar = sal_False;
2242cdf0e10cSrcweir Window::KeyInput( aKeyEvent );
2243cdf0e10cSrcweir }
2244cdf0e10cSrcweir }
2245cdf0e10cSrcweir }
2246cdf0e10cSrcweir break;
2247cdf0e10cSrcweir case KS_LaunchOLEObject:
2248cdf0e10cSrcweir rSh.LaunchOLEObj();
2249cdf0e10cSrcweir eKeyState = KS_Ende;
2250cdf0e10cSrcweir break;
2251cdf0e10cSrcweir case KS_GoIntoFly :
2252cdf0e10cSrcweir rSh.UnSelectFrm();
2253cdf0e10cSrcweir rSh.LeaveSelFrmMode();
2254cdf0e10cSrcweir rView.AttrChangedNotify(&rSh);
2255cdf0e10cSrcweir rSh.MoveSection( fnSectionCurr, fnSectionEnd );
2256cdf0e10cSrcweir eKeyState = KS_Ende;
2257cdf0e10cSrcweir break;
2258cdf0e10cSrcweir case KS_GoIntoDrawing :
2259cdf0e10cSrcweir {
2260cdf0e10cSrcweir SdrObject* pObj = rSh.GetDrawView()->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj();
2261cdf0e10cSrcweir if(pObj)
2262cdf0e10cSrcweir {
2263cdf0e10cSrcweir EnterDrawTextMode(pObj->GetLogicRect().Center());
2264cdf0e10cSrcweir if ( rView.GetCurShell()->ISA(SwDrawTextShell) )
2265cdf0e10cSrcweir ((SwDrawTextShell*)rView.GetCurShell())->Init();
2266cdf0e10cSrcweir }
2267cdf0e10cSrcweir eKeyState = KS_Ende;
2268cdf0e10cSrcweir }
2269cdf0e10cSrcweir break;
2270cdf0e10cSrcweir case KS_EnterDrawHandleMode:
2271cdf0e10cSrcweir {
2272cdf0e10cSrcweir const SdrHdlList& rHdlList = rSh.GetDrawView()->GetHdlList();
2273cdf0e10cSrcweir sal_Bool bForward(!aKeyEvent.GetKeyCode().IsShift());
2274cdf0e10cSrcweir
2275cdf0e10cSrcweir ((SdrHdlList&)rHdlList).TravelFocusHdl(bForward);
2276cdf0e10cSrcweir eKeyState = KS_Ende;
2277cdf0e10cSrcweir }
2278cdf0e10cSrcweir break;
2279cdf0e10cSrcweir case KS_InsTab:
2280cdf0e10cSrcweir if( rView.ISA( SwWebView )) //Kein Tabulator fuer Web!
2281cdf0e10cSrcweir {
2282cdf0e10cSrcweir Window::KeyInput( aKeyEvent );
2283cdf0e10cSrcweir eKeyState = KS_Ende;
2284cdf0e10cSrcweir break;
2285cdf0e10cSrcweir }
2286cdf0e10cSrcweir aCh = '\t';
2287cdf0e10cSrcweir // kein break!
2288cdf0e10cSrcweir case KS_InsChar:
2289cdf0e10cSrcweir if (rSh.GetChar(sal_False)==CH_TXT_ATR_FORMELEMENT)
2290cdf0e10cSrcweir {
2291cdf0e10cSrcweir ::sw::mark::ICheckboxFieldmark* pFieldmark =
2292cdf0e10cSrcweir dynamic_cast< ::sw::mark::ICheckboxFieldmark* >
2293cdf0e10cSrcweir (rSh.GetCurrentFieldmark());
2294cdf0e10cSrcweir OSL_ENSURE(pFieldmark,
2295cdf0e10cSrcweir "Where is my FieldMark??");
2296cdf0e10cSrcweir if(pFieldmark)
2297cdf0e10cSrcweir {
2298cdf0e10cSrcweir pFieldmark->SetChecked(!pFieldmark->IsChecked());
2299cdf0e10cSrcweir OSL_ENSURE(pFieldmark->IsExpanded(),
2300cdf0e10cSrcweir "where is the otherpos?");
2301cdf0e10cSrcweir if (pFieldmark->IsExpanded())
2302cdf0e10cSrcweir {
23035b40a975SOliver-Rainer Wittmann rSh.CalcLayout();
2304cdf0e10cSrcweir }
2305cdf0e10cSrcweir }
2306cdf0e10cSrcweir eKeyState = KS_Ende;
2307cdf0e10cSrcweir }
230823d8f725SOliver-Rainer Wittmann else if ( !rSh.HasReadonlySel()
230923d8f725SOliver-Rainer Wittmann || rSh.CrsrInsideInputFld() )
2310cdf0e10cSrcweir {
231123d8f725SOliver-Rainer Wittmann const sal_Bool bIsNormalChar =
231223d8f725SOliver-Rainer Wittmann GetAppCharClass().isLetterNumeric( String( aCh ), 0 );
2313cdf0e10cSrcweir if( bChkInsBlank && bIsNormalChar &&
2314cdf0e10cSrcweir (aInBuffer.Len() || !rSh.IsSttPara() || !rSh.IsEndPara() ))
2315cdf0e10cSrcweir {
2316cdf0e10cSrcweir // vor dem Zeichen noch ein Blank einfuegen. Dieses
2317cdf0e10cSrcweir // kommt zwischen den Expandierten Text und dem neuen
2318cdf0e10cSrcweir // "nicht Worttrenner".
2319cdf0e10cSrcweir aInBuffer.Expand( aInBuffer.Len() + 1, ' ' );
2320cdf0e10cSrcweir }
2321cdf0e10cSrcweir
232223d8f725SOliver-Rainer Wittmann const sal_Bool bIsAutoCorrectChar = SvxAutoCorrect::IsAutoCorrectChar( aCh );
232323d8f725SOliver-Rainer Wittmann const sal_Bool bRunNext = pACorr != NULL && pACorr->HasRunNext();
2324cdf0e10cSrcweir if( !aKeyEvent.GetRepeat() && pACorr && ( bIsAutoCorrectChar || bRunNext ) &&
2325cdf0e10cSrcweir pACfg->IsAutoFmtByInput() &&
2326cdf0e10cSrcweir (( pACorr->IsAutoCorrFlag( ChgWeightUnderl ) &&
2327cdf0e10cSrcweir ( '*' == aCh || '_' == aCh ) ) ||
2328cdf0e10cSrcweir ( pACorr->IsAutoCorrFlag( ChgQuotes ) && ('\"' == aCh ))||
2329cdf0e10cSrcweir ( pACorr->IsAutoCorrFlag( ChgSglQuotes ) && ( '\'' == aCh))))
2330cdf0e10cSrcweir {
2331cdf0e10cSrcweir FlushInBuffer();
2332cdf0e10cSrcweir rSh.AutoCorrect( *pACorr, aCh );
2333cdf0e10cSrcweir if( '\"' != aCh && '\'' != aCh ) // nur bei "*_" rufen!
2334cdf0e10cSrcweir rSh.UpdateAttr();
2335cdf0e10cSrcweir }
2336cdf0e10cSrcweir else if( !aKeyEvent.GetRepeat() && pACorr && ( bIsAutoCorrectChar || bRunNext ) &&
2337cdf0e10cSrcweir pACfg->IsAutoFmtByInput() &&
2338cdf0e10cSrcweir pACorr->IsAutoCorrFlag( CptlSttSntnc | CptlSttWrd |
2339cdf0e10cSrcweir ChgOrdinalNumber | AddNonBrkSpace |
2340cdf0e10cSrcweir ChgToEnEmDash | SetINetAttr |
2341cdf0e10cSrcweir Autocorrect ) &&
2342cdf0e10cSrcweir '\"' != aCh && '\'' != aCh && '*' != aCh && '_' != aCh
2343cdf0e10cSrcweir )
2344cdf0e10cSrcweir {
2345cdf0e10cSrcweir FlushInBuffer();
2346cdf0e10cSrcweir rSh.AutoCorrect( *pACorr, aCh );
2347cdf0e10cSrcweir }
2348cdf0e10cSrcweir else
2349cdf0e10cSrcweir {
2350cdf0e10cSrcweir aInBuffer.Expand( aInBuffer.Len() + aKeyEvent.GetRepeat() + 1,aCh );
2351cdf0e10cSrcweir bFlushCharBuffer = Application::AnyInput( INPUT_KEYBOARD );
2352cdf0e10cSrcweir bFlushBuffer = !bFlushCharBuffer;
2353cdf0e10cSrcweir if( bFlushCharBuffer )
2354cdf0e10cSrcweir aKeyInputFlushTimer.Start();
2355cdf0e10cSrcweir }
2356cdf0e10cSrcweir eKeyState = KS_Ende;
2357cdf0e10cSrcweir }
2358cdf0e10cSrcweir else
2359cdf0e10cSrcweir {
2360cdf0e10cSrcweir InfoBox( this, SW_RES( MSG_READONLY_CONTENT )).Execute();
2361cdf0e10cSrcweir eKeyState = KS_Ende;
2362cdf0e10cSrcweir }
2363cdf0e10cSrcweir break;
2364cdf0e10cSrcweir
2365cdf0e10cSrcweir case KS_CheckAutoCorrect:
2366cdf0e10cSrcweir {
2367cdf0e10cSrcweir if( pACorr && pACfg->IsAutoFmtByInput() &&
2368cdf0e10cSrcweir pACorr->IsAutoCorrFlag( CptlSttSntnc | CptlSttWrd |
2369cdf0e10cSrcweir ChgOrdinalNumber |
2370cdf0e10cSrcweir ChgToEnEmDash | SetINetAttr |
2371cdf0e10cSrcweir Autocorrect ) &&
2372cdf0e10cSrcweir !rSh.HasReadonlySel() )
2373cdf0e10cSrcweir {
2374cdf0e10cSrcweir FlushInBuffer();
2375cdf0e10cSrcweir rSh.AutoCorrect( *pACorr, static_cast< sal_Unicode >('\0') );
2376cdf0e10cSrcweir }
2377cdf0e10cSrcweir eKeyState = eNextKeyState;
2378cdf0e10cSrcweir }
2379cdf0e10cSrcweir break;
2380cdf0e10cSrcweir
2381cdf0e10cSrcweir default:
2382cdf0e10cSrcweir {
2383cdf0e10cSrcweir sal_uInt16 nSlotId = 0;
2384cdf0e10cSrcweir FlushInBuffer();
2385cdf0e10cSrcweir switch( eKeyState )
2386cdf0e10cSrcweir {
2387cdf0e10cSrcweir case KS_SpecialInsert:
2388cdf0e10cSrcweir rSh.DoSpecialInsert();
2389cdf0e10cSrcweir break;
2390cdf0e10cSrcweir
2391cdf0e10cSrcweir case KS_NoNum:
2392cdf0e10cSrcweir rSh.NoNum();
2393cdf0e10cSrcweir break;
2394cdf0e10cSrcweir
2395cdf0e10cSrcweir case KS_NumOff:
2396cdf0e10cSrcweir // Shellwechsel - also vorher aufzeichnen
2397cdf0e10cSrcweir rSh.DelNumRules();
2398cdf0e10cSrcweir eKeyState = eNextKeyState;
2399cdf0e10cSrcweir break;
2400cdf0e10cSrcweir case KS_OutlineLvOff: // delete autofmt outlinelevel later
2401cdf0e10cSrcweir break;
2402cdf0e10cSrcweir
2403cdf0e10cSrcweir case KS_NumDown:
2404cdf0e10cSrcweir rSh.NumUpDown( sal_True );
2405cdf0e10cSrcweir nKS_NUMDOWN_Count = 2; // #i23725#
2406cdf0e10cSrcweir break;
2407cdf0e10cSrcweir case KS_NumUp:
2408cdf0e10cSrcweir rSh.NumUpDown( sal_False );
2409cdf0e10cSrcweir break;
2410cdf0e10cSrcweir
2411cdf0e10cSrcweir case KS_NumIndentInc:
2412cdf0e10cSrcweir rSh.ChangeIndentOfAllListLevels(360);
2413cdf0e10cSrcweir nKS_NUMINDENTINC_Count = 2;
2414cdf0e10cSrcweir break;
2415cdf0e10cSrcweir
2416cdf0e10cSrcweir case KS_GotoNextFieldMark:
2417cdf0e10cSrcweir {
2418cdf0e10cSrcweir ::sw::mark::IFieldmark const * const pFieldmark = rSh.GetFieldmarkAfter();
2419cdf0e10cSrcweir if(pFieldmark) rSh.GotoFieldmark(pFieldmark);
2420cdf0e10cSrcweir }
2421cdf0e10cSrcweir break;
2422cdf0e10cSrcweir
2423cdf0e10cSrcweir case KS_GotoPrevFieldMark:
2424cdf0e10cSrcweir {
2425cdf0e10cSrcweir ::sw::mark::IFieldmark const * const pFieldmark = rSh.GetFieldmarkBefore();
2426cdf0e10cSrcweir if(pFieldmark) rSh.GotoFieldmark(pFieldmark);
2427cdf0e10cSrcweir }
2428cdf0e10cSrcweir break;
2429cdf0e10cSrcweir
2430cdf0e10cSrcweir case KS_NumIndentDec:
2431cdf0e10cSrcweir rSh.ChangeIndentOfAllListLevels(-360);
2432cdf0e10cSrcweir // <--
2433cdf0e10cSrcweir break;
2434cdf0e10cSrcweir
2435cdf0e10cSrcweir case KS_OutlineDown:
2436cdf0e10cSrcweir rSh.OutlineUpDown( 1 );
2437cdf0e10cSrcweir break;
2438cdf0e10cSrcweir case KS_OutlineUp:
2439cdf0e10cSrcweir rSh.OutlineUpDown( -1 );
2440cdf0e10cSrcweir break;
2441cdf0e10cSrcweir
2442cdf0e10cSrcweir case KS_NextCell:
2443cdf0e10cSrcweir //In Tabelle immer 'flushen'
2444cdf0e10cSrcweir rSh.GoNextCell();
2445cdf0e10cSrcweir nSlotId = FN_GOTO_NEXT_CELL;
2446cdf0e10cSrcweir break;
2447cdf0e10cSrcweir case KS_PrevCell:
2448cdf0e10cSrcweir rSh.GoPrevCell();
2449cdf0e10cSrcweir nSlotId = FN_GOTO_PREV_CELL;
2450cdf0e10cSrcweir break;
2451cdf0e10cSrcweir case KS_AutoFmtByInput:
2452cdf0e10cSrcweir rSh.SplitNode( sal_True );
2453cdf0e10cSrcweir break;
2454cdf0e10cSrcweir
2455cdf0e10cSrcweir case KS_NextObject:
2456cdf0e10cSrcweir case KS_PrevObject:
2457cdf0e10cSrcweir if(rSh.GotoObj( KS_NextObject == eKeyState, GOTOOBJ_GOTO_ANY))
2458cdf0e10cSrcweir {
2459cdf0e10cSrcweir if( rSh.IsFrmSelected() &&
2460cdf0e10cSrcweir rView.GetDrawFuncPtr() )
2461cdf0e10cSrcweir {
2462cdf0e10cSrcweir rView.GetDrawFuncPtr()->Deactivate();
2463cdf0e10cSrcweir rView.SetDrawFuncPtr(NULL);
2464cdf0e10cSrcweir rView.LeaveDrawCreate();
2465cdf0e10cSrcweir rView.AttrChangedNotify( &rSh );
2466cdf0e10cSrcweir }
2467cdf0e10cSrcweir rSh.HideCrsr();
2468cdf0e10cSrcweir rSh.EnterSelFrmMode();
2469cdf0e10cSrcweir }
2470cdf0e10cSrcweir break;
2471cdf0e10cSrcweir case KS_GlossaryExpand:
2472cdf0e10cSrcweir {
2473cdf0e10cSrcweir // ersetze das Wort oder Kuerzel durch den den Textbaustein
2474cdf0e10cSrcweir rSh.StartUndo( UNDO_START );
2475cdf0e10cSrcweir
2476cdf0e10cSrcweir String sFnd( *aTmpQHD.aArr[ aTmpQHD.nCurArrPos ] );
2477cdf0e10cSrcweir if( aTmpQHD.bIsAutoText )
2478cdf0e10cSrcweir {
2479cdf0e10cSrcweir SwGlossaryList* pList = ::GetGlossaryList();
2480cdf0e10cSrcweir String sShrtNm;
2481cdf0e10cSrcweir String sGroup;
2482cdf0e10cSrcweir if(pList->GetShortName( sFnd, sShrtNm, sGroup))
2483cdf0e10cSrcweir {
2484cdf0e10cSrcweir rSh.SttSelect();
2485cdf0e10cSrcweir rSh.ExtendSelection( sal_False, aTmpQHD.nLen );
2486cdf0e10cSrcweir SwGlossaryHdl* pGlosHdl = GetView().GetGlosHdl();
2487cdf0e10cSrcweir pGlosHdl->SetCurGroup(sGroup, sal_True);
2488cdf0e10cSrcweir pGlosHdl->InsertGlossary( sShrtNm);
2489cdf0e10cSrcweir pQuickHlpData->bChkInsBlank = sal_True;
2490cdf0e10cSrcweir }
2491cdf0e10cSrcweir }
2492cdf0e10cSrcweir else
2493cdf0e10cSrcweir {
2494cdf0e10cSrcweir rSh.Insert( sFnd.Erase( 0, aTmpQHD.nLen ));
2495cdf0e10cSrcweir pQuickHlpData->bChkInsBlank = !pACorr ||
2496cdf0e10cSrcweir pACorr->GetSwFlags().bAutoCmpltAppendBlanc;
2497cdf0e10cSrcweir }
2498cdf0e10cSrcweir rSh.EndUndo( UNDO_END );
2499cdf0e10cSrcweir }
2500cdf0e10cSrcweir break;
2501cdf0e10cSrcweir
2502cdf0e10cSrcweir case KS_NextPrevGlossary:
2503cdf0e10cSrcweir pQuickHlpData->Move( aTmpQHD );
2504cdf0e10cSrcweir pQuickHlpData->Start( rSh, USHRT_MAX );
2505cdf0e10cSrcweir break;
2506cdf0e10cSrcweir
2507cdf0e10cSrcweir case KS_EditFormula:
2508cdf0e10cSrcweir {
2509cdf0e10cSrcweir const sal_uInt16 nId = SwInputChild::GetChildWindowId();
2510cdf0e10cSrcweir
2511cdf0e10cSrcweir SfxViewFrame* pVFrame = GetView().GetViewFrame();
2512cdf0e10cSrcweir pVFrame->ToggleChildWindow( nId );
2513cdf0e10cSrcweir SwInputChild* pChildWin = (SwInputChild*)pVFrame->
2514cdf0e10cSrcweir GetChildWindow( nId );
2515cdf0e10cSrcweir if( pChildWin )
2516cdf0e10cSrcweir pChildWin->SetFormula( sFmlEntry );
2517cdf0e10cSrcweir }
2518cdf0e10cSrcweir break;
2519cdf0e10cSrcweir
2520cdf0e10cSrcweir case KS_ColLeftBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_COL_LEFT|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblHMove() ); break;
2521cdf0e10cSrcweir case KS_ColRightBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_COL_RIGHT|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblHMove() ); break;
2522cdf0e10cSrcweir case KS_ColLeftSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_COL_LEFT, pModOpt->GetTblHMove() ); break;
2523cdf0e10cSrcweir case KS_ColRightSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_COL_RIGHT, pModOpt->GetTblHMove() ); break;
2524cdf0e10cSrcweir case KS_ColBottomBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_ROW_BOTTOM|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblVMove() ); break;
2525cdf0e10cSrcweir case KS_ColBottomSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_ROW_BOTTOM, pModOpt->GetTblVMove() ); break;
2526cdf0e10cSrcweir case KS_CellLeftBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_CELL_LEFT|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblHMove() ); break;
2527cdf0e10cSrcweir case KS_CellRightBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_CELL_RIGHT|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblHMove() ); break;
2528cdf0e10cSrcweir case KS_CellLeftSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_CELL_LEFT, pModOpt->GetTblHMove() ); break;
2529cdf0e10cSrcweir case KS_CellRightSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_CELL_RIGHT, pModOpt->GetTblHMove() ); break;
2530cdf0e10cSrcweir case KS_CellTopBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_CELL_TOP|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblVMove() ); break;
2531cdf0e10cSrcweir case KS_CellBottomBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_CELL_BOTTOM|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblVMove() ); break;
2532cdf0e10cSrcweir case KS_CellTopSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_CELL_TOP, pModOpt->GetTblVMove() ); break;
2533cdf0e10cSrcweir case KS_CellBottomSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_CELL_BOTTOM, pModOpt->GetTblVMove() ); break;
2534cdf0e10cSrcweir
2535cdf0e10cSrcweir //---------------
2536cdf0e10cSrcweir case KS_InsDel_ColLeftBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_COL_LEFT|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblHInsert() ); break;
2537cdf0e10cSrcweir case KS_InsDel_ColRightBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_COL_RIGHT|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblHInsert() ); break;
2538cdf0e10cSrcweir case KS_InsDel_ColLeftSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_COL_LEFT, pModOpt->GetTblHInsert() ); break;
2539cdf0e10cSrcweir case KS_InsDel_ColRightSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_COL_RIGHT, pModOpt->GetTblHInsert() ); break;
2540cdf0e10cSrcweir case KS_InsDel_ColTopBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_ROW_TOP|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblVInsert() ); break;
2541cdf0e10cSrcweir case KS_InsDel_ColBottomBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_ROW_BOTTOM|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblVInsert() ); break;
2542cdf0e10cSrcweir case KS_InsDel_ColTopSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_ROW_TOP, pModOpt->GetTblVInsert() ); break;
2543cdf0e10cSrcweir case KS_InsDel_ColBottomSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_ROW_BOTTOM, pModOpt->GetTblVInsert() ); break;
2544cdf0e10cSrcweir case KS_InsDel_CellLeftBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_CELL_LEFT|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblHInsert() ); break;
2545cdf0e10cSrcweir case KS_InsDel_CellRightBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_CELL_RIGHT|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblHInsert() ); break;
2546cdf0e10cSrcweir case KS_InsDel_CellLeftSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_CELL_LEFT, pModOpt->GetTblHInsert() ); break;
2547cdf0e10cSrcweir case KS_InsDel_CellRightSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_CELL_RIGHT, pModOpt->GetTblHInsert() ); break;
2548cdf0e10cSrcweir case KS_InsDel_CellTopBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_CELL_TOP|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblVInsert() ); break;
2549cdf0e10cSrcweir case KS_InsDel_CellBottomBig: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_CELL_BOTTOM|nsTblChgWidthHeightType::WH_FLAG_BIGGER, pModOpt->GetTblVInsert() ); break;
2550cdf0e10cSrcweir case KS_InsDel_CellTopSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_CELL_TOP, pModOpt->GetTblVInsert() ); break;
2551cdf0e10cSrcweir case KS_InsDel_CellBottomSmall: rSh.SetColRowWidthHeight( nsTblChgWidthHeightType::WH_FLAG_INSDEL|nsTblChgWidthHeightType::WH_CELL_BOTTOM, pModOpt->GetTblVInsert() ); break;
2552cdf0e10cSrcweir //---------------
2553cdf0e10cSrcweir case KS_TblColCellInsDel:
2554cdf0e10cSrcweir rSh.SetColRowWidthHeight( eTblChgMode, nTblChgSize );
2555cdf0e10cSrcweir break;
2556cdf0e10cSrcweir case KS_Fly_Change:
2557cdf0e10cSrcweir {
2558cdf0e10cSrcweir SdrView *pSdrView = rSh.GetDrawView();
2559cdf0e10cSrcweir const SdrHdlList& rHdlList = pSdrView->GetHdlList();
2560cdf0e10cSrcweir if(rHdlList.GetFocusHdl())
2561cdf0e10cSrcweir ChangeDrawing( nDir );
2562cdf0e10cSrcweir else
2563cdf0e10cSrcweir ChangeFly( nDir, rView.ISA( SwWebView ) );
2564cdf0e10cSrcweir }
2565cdf0e10cSrcweir break;
2566cdf0e10cSrcweir case KS_Draw_Change :
2567cdf0e10cSrcweir ChangeDrawing( nDir );
2568cdf0e10cSrcweir break;
2569cdf0e10cSrcweir default:; //prevent warning
2570cdf0e10cSrcweir }
2571cdf0e10cSrcweir if( nSlotId && rView.GetViewFrame()->GetBindings().GetRecorder().is() )
2572cdf0e10cSrcweir {
2573cdf0e10cSrcweir SfxRequest aReq(rView.GetViewFrame(), nSlotId );
2574cdf0e10cSrcweir aReq.Done();
2575cdf0e10cSrcweir }
2576cdf0e10cSrcweir eKeyState = KS_Ende;
2577cdf0e10cSrcweir }
2578cdf0e10cSrcweir }
2579cdf0e10cSrcweir }
2580cdf0e10cSrcweir
2581cdf0e10cSrcweir if( bStopKeyInputTimer )
2582cdf0e10cSrcweir {
2583cdf0e10cSrcweir aKeyInputTimer.Stop();
2584cdf0e10cSrcweir bTblInsDelMode = sal_False;
2585cdf0e10cSrcweir }
2586cdf0e10cSrcweir
2587cdf0e10cSrcweir // falls die gepufferten Zeichen eingefuegt werden sollen
2588cdf0e10cSrcweir if( bFlushBuffer && aInBuffer.Len() )
2589cdf0e10cSrcweir {
2590cdf0e10cSrcweir //OS 16.02.96 11.04: bFlushCharBuffer wurde hier nicht zurueckgesetzt
2591cdf0e10cSrcweir // warum nicht?
2592cdf0e10cSrcweir sal_Bool bSave = bFlushCharBuffer;
2593cdf0e10cSrcweir FlushInBuffer();
2594cdf0e10cSrcweir bFlushCharBuffer = bSave;
2595cdf0e10cSrcweir
2596cdf0e10cSrcweir // evt. Tip-Hilfe anzeigen
2597cdf0e10cSrcweir String sWord;
2598cdf0e10cSrcweir if( bNormalChar && pACfg && pACorr &&
2599cdf0e10cSrcweir ( pACfg->IsAutoTextTip() ||
2600cdf0e10cSrcweir pACorr->GetSwFlags().bAutoCompleteWords ) &&
2601cdf0e10cSrcweir rSh.GetPrevAutoCorrWord( *pACorr, sWord ) )
2602cdf0e10cSrcweir {
2603cdf0e10cSrcweir ShowAutoTextCorrectQuickHelp(sWord, pACfg, pACorr);
2604cdf0e10cSrcweir }
2605cdf0e10cSrcweir }
2606cdf0e10cSrcweir }
2607cdf0e10cSrcweir
2608cdf0e10cSrcweir /*--------------------------------------------------------------------
2609cdf0e10cSrcweir Beschreibung: MouseEvents
2610cdf0e10cSrcweir --------------------------------------------------------------------*/
2611cdf0e10cSrcweir
2612cdf0e10cSrcweir
RstMBDownFlags()2613cdf0e10cSrcweir void SwEditWin::RstMBDownFlags()
2614cdf0e10cSrcweir {
2615cdf0e10cSrcweir //Nicht auf allen Systemen kommt vor dem modalen
2616cdf0e10cSrcweir //Dialog noch ein MouseButton Up (wie unter WINDOWS).
2617cdf0e10cSrcweir //Daher hier die Stati zuruecksetzen und die Maus
2618cdf0e10cSrcweir //fuer den Dialog freigeben.
2619cdf0e10cSrcweir bMBPressed = bNoInterrupt = sal_False;
2620cdf0e10cSrcweir EnterArea();
2621cdf0e10cSrcweir ReleaseMouse();
2622cdf0e10cSrcweir }
2623cdf0e10cSrcweir
2624cdf0e10cSrcweir
2625cdf0e10cSrcweir
MouseButtonDown(const MouseEvent & _rMEvt)2626cdf0e10cSrcweir void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
2627cdf0e10cSrcweir {
2628cdf0e10cSrcweir SwWrtShell &rSh = rView.GetWrtShell();
2629cdf0e10cSrcweir
2630cdf0e10cSrcweir // We have to check if a context menu is shown and we have an UI
2631cdf0e10cSrcweir // active inplace client. In that case we have to ignore the mouse
2632cdf0e10cSrcweir // button down event. Otherwise we would crash (context menu has been
2633cdf0e10cSrcweir // opened by inplace client and we would deactivate the inplace client,
26346f247e9cSmseidel // the context menu is closed by VCL asynchronously which in the end
2635cdf0e10cSrcweir // would work on deleted objects or the context menu has no parent anymore)
2636cdf0e10cSrcweir // See #126086# and #128122#
2637cdf0e10cSrcweir SfxInPlaceClient* pIPClient = rSh.GetSfxViewShell()->GetIPClient();
2638cdf0e10cSrcweir sal_Bool bIsOleActive = ( pIPClient && pIPClient->IsObjectInPlaceActive() );
2639cdf0e10cSrcweir
2640cdf0e10cSrcweir if ( bIsOleActive && PopupMenu::IsInExecute() )
2641cdf0e10cSrcweir return;
2642cdf0e10cSrcweir
2643cdf0e10cSrcweir MouseEvent rMEvt(_rMEvt);
2644cdf0e10cSrcweir
2645cdf0e10cSrcweir if (rView.GetPostItMgr()->IsHit(rMEvt.GetPosPixel()))
2646cdf0e10cSrcweir return;
2647cdf0e10cSrcweir
2648cdf0e10cSrcweir rView.GetPostItMgr()->SetActiveSidebarWin(0);
2649cdf0e10cSrcweir
2650cdf0e10cSrcweir GrabFocus();
2651cdf0e10cSrcweir
2652cdf0e10cSrcweir //ignore key modifiers for format paintbrush
2653cdf0e10cSrcweir {
2654cdf0e10cSrcweir sal_Bool bExecFormatPaintbrush = pApplyTempl && pApplyTempl->pFormatClipboard
2655cdf0e10cSrcweir && pApplyTempl->pFormatClipboard->HasContent();
2656cdf0e10cSrcweir if( bExecFormatPaintbrush )
2657cdf0e10cSrcweir rMEvt = MouseEvent( _rMEvt.GetPosPixel(), _rMEvt.GetClicks(),
2658cdf0e10cSrcweir _rMEvt.GetMode(), _rMEvt.GetButtons() );
2659cdf0e10cSrcweir }
2660cdf0e10cSrcweir
2661cdf0e10cSrcweir bWasShdwCrsr = 0 != pShadCrsr;
2662cdf0e10cSrcweir if( bWasShdwCrsr )
2663cdf0e10cSrcweir delete pShadCrsr, pShadCrsr = 0;
2664cdf0e10cSrcweir
2665cdf0e10cSrcweir const Point aDocPos( PixelToLogic( rMEvt.GetPosPixel() ) );
2666cdf0e10cSrcweir
2667cdf0e10cSrcweir if ( IsChainMode() )
2668cdf0e10cSrcweir {
2669cdf0e10cSrcweir SetChainMode( sal_False );
2670cdf0e10cSrcweir SwRect aDummy;
2671cdf0e10cSrcweir SwFlyFrmFmt *pFmt = (SwFlyFrmFmt*)rSh.GetFlyFrmFmt();
2672cdf0e10cSrcweir if ( !rSh.Chainable( aDummy, *pFmt, aDocPos ) )
2673cdf0e10cSrcweir rSh.Chain( *pFmt, aDocPos );
2674cdf0e10cSrcweir UpdatePointer( aDocPos, rMEvt.GetModifier() );
2675cdf0e10cSrcweir return;
2676cdf0e10cSrcweir }
2677cdf0e10cSrcweir
2678cdf0e10cSrcweir //Nach GrabFocus sollte eine Shell gepusht sein. Das muss eigentlich
2679cdf0e10cSrcweir //klappen aber in der Praxis ...
2680cdf0e10cSrcweir lcl_SelectShellForDrop( rView );
2681cdf0e10cSrcweir
2682cdf0e10cSrcweir sal_Bool bIsDocReadOnly = rView.GetDocShell()->IsReadOnly();
2683cdf0e10cSrcweir sal_Bool bCallBase = sal_True;
2684cdf0e10cSrcweir
2685cdf0e10cSrcweir if( pQuickHlpData->bClear )
2686cdf0e10cSrcweir pQuickHlpData->Stop( rSh );
2687cdf0e10cSrcweir pQuickHlpData->bChkInsBlank = sal_False;
2688cdf0e10cSrcweir
2689cdf0e10cSrcweir if( rSh.FinishOLEObj() )
2690cdf0e10cSrcweir return; //InPlace beenden und der Klick zaehlt nicht mehr
2691cdf0e10cSrcweir
2692cdf0e10cSrcweir SET_CURR_SHELL( &rSh );
2693cdf0e10cSrcweir
2694cdf0e10cSrcweir SdrView *pSdrView = rSh.GetDrawView();
2695cdf0e10cSrcweir if ( pSdrView )
2696cdf0e10cSrcweir {
2697cdf0e10cSrcweir if (pSdrView->MouseButtonDown( rMEvt, this ) )
2698cdf0e10cSrcweir {
2699cdf0e10cSrcweir rSh.GetView().GetViewFrame()->GetBindings().InvalidateAll(sal_False);
2700cdf0e10cSrcweir return; // Event von der SdrView ausgewertet
2701cdf0e10cSrcweir }
2702cdf0e10cSrcweir }
2703cdf0e10cSrcweir
2704cdf0e10cSrcweir
2705cdf0e10cSrcweir bIsInMove = sal_False;
2706cdf0e10cSrcweir aStartPos = rMEvt.GetPosPixel();
2707cdf0e10cSrcweir aRszMvHdlPt.X() = 0, aRszMvHdlPt.Y() = 0;
2708cdf0e10cSrcweir
2709cdf0e10cSrcweir sal_uInt8 nMouseTabCol = 0;
2710cdf0e10cSrcweir const sal_Bool bTmp = !rSh.IsDrawCreate() && !pApplyTempl && !rSh.IsInSelect() &&
2711cdf0e10cSrcweir rMEvt.GetClicks() == 1 && MOUSE_LEFT == rMEvt.GetButtons();
2712cdf0e10cSrcweir if ( bTmp &&
2713cdf0e10cSrcweir 0 != (nMouseTabCol = rSh.WhichMouseTabCol( aDocPos ) ) &&
2714cdf0e10cSrcweir !rSh.IsObjSelectable( aDocPos ) )
2715cdf0e10cSrcweir {
27165b40a975SOliver-Rainer Wittmann // Enhanced table selection
2717cdf0e10cSrcweir if ( SW_TABSEL_HORI <= nMouseTabCol && SW_TABCOLSEL_VERT >= nMouseTabCol )
2718cdf0e10cSrcweir {
2719cdf0e10cSrcweir rSh.EnterStdMode();
2720cdf0e10cSrcweir rSh.SelectTableRowCol( aDocPos );
2721cdf0e10cSrcweir if( SW_TABSEL_HORI != nMouseTabCol && SW_TABSEL_HORI_RTL != nMouseTabCol)
2722cdf0e10cSrcweir {
2723cdf0e10cSrcweir pRowColumnSelectionStart = new Point( aDocPos );
2724cdf0e10cSrcweir bIsRowDrag = SW_TABROWSEL_HORI == nMouseTabCol||
2725cdf0e10cSrcweir SW_TABROWSEL_HORI_RTL == nMouseTabCol ||
2726cdf0e10cSrcweir SW_TABCOLSEL_VERT == nMouseTabCol;
2727cdf0e10cSrcweir bMBPressed = sal_True;
2728cdf0e10cSrcweir CaptureMouse();
2729cdf0e10cSrcweir }
2730cdf0e10cSrcweir return;
2731cdf0e10cSrcweir }
2732cdf0e10cSrcweir
2733cdf0e10cSrcweir if ( !rSh.IsTableMode() )
2734cdf0e10cSrcweir {
2735cdf0e10cSrcweir //Zuppeln von Tabellenspalten aus dem Dokument heraus.
2736cdf0e10cSrcweir if(SW_TABCOL_VERT == nMouseTabCol || SW_TABCOL_HORI == nMouseTabCol)
2737cdf0e10cSrcweir rView.SetTabColFromDoc( sal_True );
2738cdf0e10cSrcweir else
2739cdf0e10cSrcweir rView.SetTabRowFromDoc( sal_True );
2740cdf0e10cSrcweir
2741cdf0e10cSrcweir rView.SetTabColFromDocPos( aDocPos );
2742cdf0e10cSrcweir rView.InvalidateRulerPos();
2743cdf0e10cSrcweir SfxBindings& rBind = rView.GetViewFrame()->GetBindings();
2744cdf0e10cSrcweir rBind.Update();
2745cdf0e10cSrcweir if ( RulerColumnDrag( rMEvt,
2746cdf0e10cSrcweir (SW_TABCOL_VERT == nMouseTabCol || SW_TABROW_HORI == nMouseTabCol)) )
2747cdf0e10cSrcweir {
2748cdf0e10cSrcweir rView.SetTabColFromDoc( sal_False );
2749cdf0e10cSrcweir rView.SetTabRowFromDoc( sal_False );
2750cdf0e10cSrcweir rView.InvalidateRulerPos();
2751cdf0e10cSrcweir rBind.Update();
2752cdf0e10cSrcweir bCallBase = sal_False;
2753cdf0e10cSrcweir }
2754cdf0e10cSrcweir else
2755cdf0e10cSrcweir {
2756cdf0e10cSrcweir return;
2757cdf0e10cSrcweir }
2758cdf0e10cSrcweir }
2759cdf0e10cSrcweir }
2760cdf0e10cSrcweir else if (bTmp &&
2761cdf0e10cSrcweir rSh.IsNumLabel(aDocPos))
2762cdf0e10cSrcweir {
2763cdf0e10cSrcweir SwTxtNode* pNodeAtPos = rSh.GetNumRuleNodeAtPos( aDocPos );
2764cdf0e10cSrcweir rView.SetNumRuleNodeFromDoc( pNodeAtPos );
2765cdf0e10cSrcweir rView.InvalidateRulerPos();
2766cdf0e10cSrcweir SfxBindings& rBind = rView.GetViewFrame()->GetBindings();
2767cdf0e10cSrcweir rBind.Update();
2768cdf0e10cSrcweir
2769cdf0e10cSrcweir if ( RulerMarginDrag( rMEvt,
2770cdf0e10cSrcweir rSh.IsVerticalModeAtNdAndPos( *pNodeAtPos, aDocPos ) ) )
2771cdf0e10cSrcweir {
2772cdf0e10cSrcweir rView.SetNumRuleNodeFromDoc( NULL );
2773cdf0e10cSrcweir rView.InvalidateRulerPos();
2774cdf0e10cSrcweir rBind.Update();
2775cdf0e10cSrcweir bCallBase = sal_False;
2776cdf0e10cSrcweir }
2777cdf0e10cSrcweir else
2778cdf0e10cSrcweir {
27795b40a975SOliver-Rainer Wittmann // Make sure the pointer is set to 0, otherwise it may point to
27805b40a975SOliver-Rainer Wittmann // nowhere after deleting the corresponding text node.
2781cdf0e10cSrcweir rView.SetNumRuleNodeFromDoc( NULL );
2782cdf0e10cSrcweir return;
2783cdf0e10cSrcweir }
2784cdf0e10cSrcweir }
2785cdf0e10cSrcweir
2786cdf0e10cSrcweir if ( rSh.IsInSelect() )
2787cdf0e10cSrcweir rSh.EndSelect();
2788cdf0e10cSrcweir
2789cdf0e10cSrcweir //Abfrage auf LEFT, da sonst auch bei einem Click mit der rechten Taste
2790cdf0e10cSrcweir //beispielsweise die Selektion aufgehoben wird.
2791cdf0e10cSrcweir if ( MOUSE_LEFT == rMEvt.GetButtons() )
2792cdf0e10cSrcweir {
2793cdf0e10cSrcweir sal_Bool bOnlyText = sal_False;
2794cdf0e10cSrcweir bMBPressed = bNoInterrupt = sal_True;
2795cdf0e10cSrcweir nKS_NUMDOWN_Count = 0; // #i23725#
2796cdf0e10cSrcweir
2797cdf0e10cSrcweir CaptureMouse();
2798cdf0e10cSrcweir
2799cdf0e10cSrcweir //ggf. Cursorpositionen zuruecksetzen
2800cdf0e10cSrcweir rSh.ResetCursorStack();
2801cdf0e10cSrcweir
2802cdf0e10cSrcweir switch ( rMEvt.GetModifier() + rMEvt.GetButtons() )
2803cdf0e10cSrcweir {
2804cdf0e10cSrcweir case MOUSE_LEFT:
2805cdf0e10cSrcweir case MOUSE_LEFT + KEY_SHIFT:
2806cdf0e10cSrcweir case MOUSE_LEFT + KEY_MOD2:
2807cdf0e10cSrcweir if( rSh.IsObjSelected() )
2808cdf0e10cSrcweir {
2809cdf0e10cSrcweir SdrHdl* pHdl;
2810cdf0e10cSrcweir if( !bIsDocReadOnly &&
2811cdf0e10cSrcweir !pAnchorMarker &&
2812cdf0e10cSrcweir 0 != ( pHdl = pSdrView->PickHandle(aDocPos) ) &&
2813cdf0e10cSrcweir ( pHdl->GetKind() == HDL_ANCHOR ||
2814cdf0e10cSrcweir pHdl->GetKind() == HDL_ANCHOR_TR ) )
2815cdf0e10cSrcweir {
28165b40a975SOliver-Rainer Wittmann // Set selected during drag
28174772d9afSArmin Le Grand pHdl->SetSelected(true);
2818cdf0e10cSrcweir pAnchorMarker = new SwAnchorMarker( pHdl );
2819cdf0e10cSrcweir UpdatePointer( aDocPos, rMEvt.GetModifier() );
2820cdf0e10cSrcweir return;
2821cdf0e10cSrcweir }
2822cdf0e10cSrcweir }
2823cdf0e10cSrcweir if ( EnterDrawMode( rMEvt, aDocPos ) )
2824cdf0e10cSrcweir {
2825cdf0e10cSrcweir bNoInterrupt = sal_False;
2826cdf0e10cSrcweir return;
2827cdf0e10cSrcweir }
2828cdf0e10cSrcweir else if ( rView.GetDrawFuncPtr() && bInsFrm )
2829cdf0e10cSrcweir {
2830cdf0e10cSrcweir StopInsFrm();
2831cdf0e10cSrcweir rSh.Edit();
2832cdf0e10cSrcweir }
2833cdf0e10cSrcweir
2834cdf0e10cSrcweir // Ohne SHIFT, da sonst Toggle bei Selektion nicht funktioniert
2835cdf0e10cSrcweir if (rMEvt.GetClicks() == 1)
2836cdf0e10cSrcweir {
2837cdf0e10cSrcweir if ( rSh.IsSelFrmMode())
2838cdf0e10cSrcweir {
2839cdf0e10cSrcweir SdrHdl* pHdl = rSh.GetDrawView()->PickHandle(aDocPos);
2840cdf0e10cSrcweir sal_Bool bHitHandle = pHdl && pHdl->GetKind() != HDL_ANCHOR &&
2841cdf0e10cSrcweir pHdl->GetKind() != HDL_ANCHOR_TR;
2842cdf0e10cSrcweir
2843cdf0e10cSrcweir if ((rSh.IsInsideSelectedObj(aDocPos) || bHitHandle) &&
2844cdf0e10cSrcweir !(rMEvt.GetModifier() == KEY_SHIFT && !bHitHandle))
2845cdf0e10cSrcweir {
2846cdf0e10cSrcweir rSh.EnterSelFrmMode( &aDocPos );
2847cdf0e10cSrcweir if ( !pApplyTempl )
2848cdf0e10cSrcweir {
2849cdf0e10cSrcweir //nur, wenn keine Position zum Sizen getroffen ist.
2850cdf0e10cSrcweir if (!bHitHandle)
2851cdf0e10cSrcweir {
2852cdf0e10cSrcweir StartDDTimer();
2853cdf0e10cSrcweir SwEditWin::nDDStartPosY = aDocPos.Y();
2854cdf0e10cSrcweir SwEditWin::nDDStartPosX = aDocPos.X();
2855cdf0e10cSrcweir }
2856cdf0e10cSrcweir bFrmDrag = sal_True;
2857cdf0e10cSrcweir }
2858cdf0e10cSrcweir bNoInterrupt = sal_False;
2859cdf0e10cSrcweir return;
2860cdf0e10cSrcweir }
2861cdf0e10cSrcweir }
2862cdf0e10cSrcweir }
2863cdf0e10cSrcweir }
2864cdf0e10cSrcweir
2865cdf0e10cSrcweir sal_Bool bExecHyperlinks = rView.GetDocShell()->IsReadOnly();
2866cdf0e10cSrcweir if ( !bExecHyperlinks )
2867cdf0e10cSrcweir {
2868cdf0e10cSrcweir SvtSecurityOptions aSecOpts;
2869cdf0e10cSrcweir const sal_Bool bSecureOption = aSecOpts.IsOptionSet( SvtSecurityOptions::E_CTRLCLICK_HYPERLINK );
2870cdf0e10cSrcweir if ( ( bSecureOption && rMEvt.GetModifier() == KEY_MOD1 ) ||
2871cdf0e10cSrcweir ( !bSecureOption && rMEvt.GetModifier() != KEY_MOD1 ) )
2872cdf0e10cSrcweir bExecHyperlinks = sal_True;
2873cdf0e10cSrcweir }
2874cdf0e10cSrcweir
28755b40a975SOliver-Rainer Wittmann // Enhanced selection
2876cdf0e10cSrcweir sal_uInt8 nNumberOfClicks = static_cast< sal_uInt8 >(rMEvt.GetClicks() % 4);
2877cdf0e10cSrcweir if ( 0 == nNumberOfClicks && 0 < rMEvt.GetClicks() )
2878cdf0e10cSrcweir nNumberOfClicks = 4;
2879cdf0e10cSrcweir
2880cdf0e10cSrcweir sal_Bool bExecDrawTextLink = sal_False;
2881cdf0e10cSrcweir
2882cdf0e10cSrcweir switch ( rMEvt.GetModifier() + rMEvt.GetButtons() )
2883cdf0e10cSrcweir {
2884cdf0e10cSrcweir case MOUSE_LEFT:
2885cdf0e10cSrcweir case MOUSE_LEFT + KEY_MOD1:
2886cdf0e10cSrcweir case MOUSE_LEFT + KEY_MOD2:
2887cdf0e10cSrcweir switch ( nNumberOfClicks )
2888cdf0e10cSrcweir {
2889cdf0e10cSrcweir case 1:
2890cdf0e10cSrcweir {
2891cdf0e10cSrcweir UpdatePointer( aDocPos, rMEvt.GetModifier() );
2892cdf0e10cSrcweir SwEditWin::nDDStartPosY = aDocPos.Y();
2893cdf0e10cSrcweir SwEditWin::nDDStartPosX = aDocPos.X();
2894cdf0e10cSrcweir
2895cdf0e10cSrcweir // URL in DrawText-Objekt getroffen?
2896cdf0e10cSrcweir if (bExecHyperlinks && pSdrView)
2897cdf0e10cSrcweir {
2898cdf0e10cSrcweir SdrViewEvent aVEvt;
2899cdf0e10cSrcweir pSdrView->PickAnything(rMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
2900cdf0e10cSrcweir
2901cdf0e10cSrcweir if (aVEvt.eEvent == SDREVENT_EXECUTEURL)
2902cdf0e10cSrcweir bExecDrawTextLink = sal_True;
2903cdf0e10cSrcweir }
2904cdf0e10cSrcweir
2905cdf0e10cSrcweir //Rahmen nur zu selektieren versuchen, wenn
2906cdf0e10cSrcweir //der Pointer bereits entsprechend geschaltet wurde
2907cdf0e10cSrcweir if ( aActHitType != SDRHIT_NONE && !rSh.IsSelFrmMode() &&
2908cdf0e10cSrcweir !GetView().GetViewFrame()->GetDispatcher()->IsLocked() &&
2909cdf0e10cSrcweir !bExecDrawTextLink)
2910cdf0e10cSrcweir {
2911cdf0e10cSrcweir // Test if there is a draw object at that position and if it should be selected.
2912cdf0e10cSrcweir sal_Bool bShould = rSh.ShouldObjectBeSelected(aDocPos);
2913cdf0e10cSrcweir
2914cdf0e10cSrcweir if(bShould)
2915cdf0e10cSrcweir {
2916cdf0e10cSrcweir rView.NoRotate();
2917cdf0e10cSrcweir rSh.HideCrsr();
2918cdf0e10cSrcweir
2919cdf0e10cSrcweir sal_Bool bUnLockView = !rSh.IsViewLocked();
2920cdf0e10cSrcweir rSh.LockView( sal_True );
2921cdf0e10cSrcweir sal_Bool bSelObj = rSh.SelectObj( aDocPos,
2922cdf0e10cSrcweir rMEvt.IsMod1() ? SW_ENTER_GROUP : 0);
2923cdf0e10cSrcweir if( bUnLockView )
2924cdf0e10cSrcweir rSh.LockView( sal_False );
2925cdf0e10cSrcweir
2926cdf0e10cSrcweir if( bSelObj )
2927cdf0e10cSrcweir {
2928cdf0e10cSrcweir // falls im Macro der Rahmen deselektiert
2929cdf0e10cSrcweir // wurde, muss nur noch der Cursor
2930cdf0e10cSrcweir // wieder angezeigt werden.
2931cdf0e10cSrcweir if( FRMTYPE_NONE == rSh.GetSelFrmType() )
2932cdf0e10cSrcweir rSh.ShowCrsr();
2933cdf0e10cSrcweir else
2934cdf0e10cSrcweir {
2935cdf0e10cSrcweir if (rSh.IsFrmSelected() && rView.GetDrawFuncPtr())
2936cdf0e10cSrcweir {
2937cdf0e10cSrcweir rView.GetDrawFuncPtr()->Deactivate();
2938cdf0e10cSrcweir rView.SetDrawFuncPtr(NULL);
2939cdf0e10cSrcweir rView.LeaveDrawCreate();
2940cdf0e10cSrcweir rView.AttrChangedNotify( &rSh );
2941cdf0e10cSrcweir }
2942cdf0e10cSrcweir
2943cdf0e10cSrcweir rSh.EnterSelFrmMode( &aDocPos );
2944cdf0e10cSrcweir bFrmDrag = sal_True;
2945cdf0e10cSrcweir UpdatePointer( aDocPos, rMEvt.GetModifier() );
2946cdf0e10cSrcweir }
2947cdf0e10cSrcweir return;
2948cdf0e10cSrcweir }
2949cdf0e10cSrcweir else
2950cdf0e10cSrcweir bOnlyText = static_cast< sal_Bool >(rSh.IsObjSelectable( aDocPos ));
2951cdf0e10cSrcweir
2952cdf0e10cSrcweir if (!rView.GetDrawFuncPtr())
2953cdf0e10cSrcweir rSh.ShowCrsr();
2954cdf0e10cSrcweir }
2955cdf0e10cSrcweir else
2956cdf0e10cSrcweir bOnlyText = KEY_MOD1 != rMEvt.GetModifier();
2957cdf0e10cSrcweir }
2958cdf0e10cSrcweir else if ( rSh.IsSelFrmMode() &&
2959cdf0e10cSrcweir (aActHitType == SDRHIT_NONE ||
2960cdf0e10cSrcweir !rSh.IsInsideSelectedObj( aDocPos )))
2961cdf0e10cSrcweir {
2962cdf0e10cSrcweir rView.NoRotate();
2963cdf0e10cSrcweir SdrHdl *pHdl;
2964cdf0e10cSrcweir if( !bIsDocReadOnly && !pAnchorMarker && 0 !=
2965cdf0e10cSrcweir ( pHdl = pSdrView->PickHandle(aDocPos) ) &&
2966cdf0e10cSrcweir ( pHdl->GetKind() == HDL_ANCHOR ||
2967cdf0e10cSrcweir pHdl->GetKind() == HDL_ANCHOR_TR ) )
2968cdf0e10cSrcweir {
2969cdf0e10cSrcweir pAnchorMarker = new SwAnchorMarker( pHdl );
2970cdf0e10cSrcweir UpdatePointer( aDocPos, rMEvt.GetModifier() );
2971cdf0e10cSrcweir return;
2972cdf0e10cSrcweir }
2973cdf0e10cSrcweir else
2974cdf0e10cSrcweir {
2975cdf0e10cSrcweir sal_Bool bUnLockView = !rSh.IsViewLocked();
2976cdf0e10cSrcweir rSh.LockView( sal_True );
2977cdf0e10cSrcweir sal_uInt8 nFlag = rMEvt.IsShift() ? SW_ADD_SELECT :0;
2978cdf0e10cSrcweir if( rMEvt.IsMod1() )
2979cdf0e10cSrcweir nFlag = nFlag | SW_ENTER_GROUP;
2980cdf0e10cSrcweir
2981cdf0e10cSrcweir if ( rSh.IsSelFrmMode() )
2982cdf0e10cSrcweir {
2983cdf0e10cSrcweir rSh.UnSelectFrm();
2984cdf0e10cSrcweir rSh.LeaveSelFrmMode();
2985cdf0e10cSrcweir rView.AttrChangedNotify(&rSh);
2986cdf0e10cSrcweir }
2987cdf0e10cSrcweir
2988cdf0e10cSrcweir sal_Bool bSelObj = rSh.SelectObj( aDocPos, nFlag );
2989cdf0e10cSrcweir if( bUnLockView )
2990cdf0e10cSrcweir rSh.LockView( sal_False );
2991cdf0e10cSrcweir
2992cdf0e10cSrcweir if( !bSelObj )
2993cdf0e10cSrcweir {
2994cdf0e10cSrcweir // Cursor hier umsetzen, damit er nicht zuerst
2995cdf0e10cSrcweir // im Rahmen gezeichnet wird; ShowCrsr() geschieht
2996cdf0e10cSrcweir // in LeaveSelFrmMode()
2997cdf0e10cSrcweir bValidCrsrPos = !(CRSR_POSCHG & (rSh.*rSh.fnSetCrsr)(&aDocPos,sal_False));
2998cdf0e10cSrcweir rSh.LeaveSelFrmMode();
2999cdf0e10cSrcweir rView.AttrChangedNotify( &rSh );
3000cdf0e10cSrcweir bCallBase = sal_False;
3001cdf0e10cSrcweir }
3002cdf0e10cSrcweir else
3003cdf0e10cSrcweir {
3004cdf0e10cSrcweir rSh.HideCrsr();
3005cdf0e10cSrcweir rSh.EnterSelFrmMode( &aDocPos );
3006cdf0e10cSrcweir rSh.SelFlyGrabCrsr();
3007cdf0e10cSrcweir rSh.MakeSelVisible();
3008cdf0e10cSrcweir bFrmDrag = sal_True;
3009cdf0e10cSrcweir if( rSh.IsFrmSelected() &&
3010cdf0e10cSrcweir rView.GetDrawFuncPtr() )
3011cdf0e10cSrcweir {
3012cdf0e10cSrcweir rView.GetDrawFuncPtr()->Deactivate();
3013cdf0e10cSrcweir rView.SetDrawFuncPtr(NULL);
3014cdf0e10cSrcweir rView.LeaveDrawCreate();
3015cdf0e10cSrcweir rView.AttrChangedNotify( &rSh );
3016cdf0e10cSrcweir }
3017cdf0e10cSrcweir UpdatePointer( aDocPos, rMEvt.GetModifier() );
3018cdf0e10cSrcweir return;
3019cdf0e10cSrcweir }
3020cdf0e10cSrcweir }
3021cdf0e10cSrcweir }
3022cdf0e10cSrcweir
3023cdf0e10cSrcweir break;
3024cdf0e10cSrcweir }
3025cdf0e10cSrcweir case 2:
3026cdf0e10cSrcweir {
3027cdf0e10cSrcweir bFrmDrag = sal_False;
3028cdf0e10cSrcweir if ( !bIsDocReadOnly && rSh.IsInsideSelectedObj(aDocPos) &&
3029cdf0e10cSrcweir 0 == rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) )
3030cdf0e10cSrcweir
3031cdf0e10cSrcweir /* SJ: 01.03.2005: this is no good, on the one hand GetSelectionType is used as flag field (take a look into the GetSelectionType method)
3032cdf0e10cSrcweir on the other hand the return value is used in a switch without proper masking (very nice), this must lead to trouble
3033cdf0e10cSrcweir */
3034cdf0e10cSrcweir switch ( rSh.GetSelectionType() &~ ( nsSelectionType::SEL_FONTWORK | nsSelectionType::SEL_EXTRUDED_CUSTOMSHAPE ) )
3035cdf0e10cSrcweir {
3036cdf0e10cSrcweir case nsSelectionType::SEL_GRF:
3037cdf0e10cSrcweir RstMBDownFlags();
3038cdf0e10cSrcweir GetView().GetViewFrame()->GetBindings().Execute(
3039cdf0e10cSrcweir FN_FORMAT_GRAFIC_DLG, 0, 0,
3040cdf0e10cSrcweir SFX_CALLMODE_RECORD|SFX_CALLMODE_SLOT);
3041cdf0e10cSrcweir return;
3042cdf0e10cSrcweir
3043cdf0e10cSrcweir // Doppelklick auf OLE-Objekt --> OLE-InPlace
3044cdf0e10cSrcweir case nsSelectionType::SEL_OLE:
3045cdf0e10cSrcweir if (!rSh.IsSelObjProtected(FLYPROTECT_CONTENT))
3046cdf0e10cSrcweir {
3047cdf0e10cSrcweir RstMBDownFlags();
3048cdf0e10cSrcweir rSh.LaunchOLEObj();
3049cdf0e10cSrcweir }
3050cdf0e10cSrcweir return;
3051cdf0e10cSrcweir
3052cdf0e10cSrcweir case nsSelectionType::SEL_FRM:
3053cdf0e10cSrcweir RstMBDownFlags();
3054cdf0e10cSrcweir GetView().GetViewFrame()->GetBindings().Execute(
3055cdf0e10cSrcweir FN_FORMAT_FRAME_DLG, 0, 0, SFX_CALLMODE_RECORD|SFX_CALLMODE_SLOT);
3056cdf0e10cSrcweir return;
3057cdf0e10cSrcweir
3058cdf0e10cSrcweir case nsSelectionType::SEL_DRW:
3059cdf0e10cSrcweir RstMBDownFlags();
3060cdf0e10cSrcweir EnterDrawTextMode(aDocPos);
3061cdf0e10cSrcweir if ( rView.GetCurShell()->ISA(SwDrawTextShell) )
3062cdf0e10cSrcweir ((SwDrawTextShell*)rView.GetCurShell())->Init();
3063cdf0e10cSrcweir return;
3064cdf0e10cSrcweir }
3065cdf0e10cSrcweir
3066cdf0e10cSrcweir //falls die Cursorposition korrigiert wurde oder
3067cdf0e10cSrcweir // ein Fly im ReadOnlyModus selektiert ist,
3068cdf0e10cSrcweir //keine Wortselektion.
3069cdf0e10cSrcweir if ( !bValidCrsrPos ||
3070cdf0e10cSrcweir (rSh.IsFrmSelected() && rSh.IsFrmSelected() ))
3071cdf0e10cSrcweir return;
3072cdf0e10cSrcweir
3073cdf0e10cSrcweir SwField *pFld;
3074cdf0e10cSrcweir sal_Bool bFtn = sal_False;
3075cdf0e10cSrcweir
3076cdf0e10cSrcweir if( !bIsDocReadOnly &&
3077cdf0e10cSrcweir ( 0 != ( pFld = rSh.GetCurFld() ) ||
3078cdf0e10cSrcweir 0 != ( bFtn = rSh.GetCurFtn() )) )
3079cdf0e10cSrcweir {
3080cdf0e10cSrcweir RstMBDownFlags();
3081cdf0e10cSrcweir if( bFtn )
3082cdf0e10cSrcweir GetView().GetViewFrame()->GetBindings().Execute( FN_EDIT_FOOTNOTE );
3083cdf0e10cSrcweir else
3084cdf0e10cSrcweir {
3085cdf0e10cSrcweir sal_uInt16 nTypeId = pFld->GetTypeId();
3086cdf0e10cSrcweir SfxViewFrame* pVFrame = GetView().GetViewFrame();
3087cdf0e10cSrcweir switch( nTypeId )
3088cdf0e10cSrcweir {
3089cdf0e10cSrcweir case TYP_POSTITFLD:
3090cdf0e10cSrcweir case TYP_SCRIPTFLD:
3091cdf0e10cSrcweir {
3092cdf0e10cSrcweir //falls es ein Readonly-Bereich ist, dann muss der Status
3093cdf0e10cSrcweir //enabled werden
3094cdf0e10cSrcweir sal_uInt16 nSlot = TYP_POSTITFLD == nTypeId ? FN_POSTIT : FN_JAVAEDIT;
3095cdf0e10cSrcweir SfxBoolItem aItem(nSlot, sal_True);
3096cdf0e10cSrcweir pVFrame->GetBindings().SetState(aItem);
3097cdf0e10cSrcweir pVFrame->GetBindings().Execute(nSlot);
3098cdf0e10cSrcweir break;
3099cdf0e10cSrcweir }
3100cdf0e10cSrcweir case TYP_AUTHORITY :
3101cdf0e10cSrcweir pVFrame->GetBindings().Execute(FN_EDIT_AUTH_ENTRY_DLG);
3102cdf0e10cSrcweir break;
3103cdf0e10cSrcweir default:
3104cdf0e10cSrcweir pVFrame->GetBindings().Execute(FN_EDIT_FIELD);
3105cdf0e10cSrcweir }
3106cdf0e10cSrcweir }
3107cdf0e10cSrcweir return;
3108cdf0e10cSrcweir }
3109cdf0e10cSrcweir //im Extended Mode hat Doppel- und
3110cdf0e10cSrcweir //Dreifachklick keine Auswirkungen.
3111cdf0e10cSrcweir if ( rSh.IsExtMode() || rSh.IsBlockMode() )
3112cdf0e10cSrcweir return;
3113cdf0e10cSrcweir
3114cdf0e10cSrcweir //Wort selektieren, gfs. Additional Mode
3115cdf0e10cSrcweir if ( KEY_MOD1 == rMEvt.GetModifier() && !rSh.IsAddMode() )
3116cdf0e10cSrcweir {
3117cdf0e10cSrcweir rSh.EnterAddMode();
3118cdf0e10cSrcweir rSh.SelWrd( &aDocPos );
3119cdf0e10cSrcweir rSh.LeaveAddMode();
3120cdf0e10cSrcweir }
3121cdf0e10cSrcweir else
3122cdf0e10cSrcweir rSh.SelWrd( &aDocPos );
3123cdf0e10cSrcweir bHoldSelection = sal_True;
3124cdf0e10cSrcweir return;
3125cdf0e10cSrcweir }
3126cdf0e10cSrcweir case 3:
3127cdf0e10cSrcweir case 4:
3128cdf0e10cSrcweir {
3129cdf0e10cSrcweir bFrmDrag = sal_False;
3130cdf0e10cSrcweir //im Extended Mode hat Doppel- und
3131cdf0e10cSrcweir //Dreifachklick keine Auswirkungen.
3132cdf0e10cSrcweir if ( rSh.IsExtMode() )
3133cdf0e10cSrcweir return;
3134cdf0e10cSrcweir
3135cdf0e10cSrcweir //falls die Cursorposition korrigiert wurde oder
3136cdf0e10cSrcweir // ein Fly im ReadOnlyModus selektiert ist,
3137cdf0e10cSrcweir //keine Wortselektion.
3138cdf0e10cSrcweir if ( !bValidCrsrPos || rSh.IsFrmSelected() )
3139cdf0e10cSrcweir return;
3140cdf0e10cSrcweir
3141cdf0e10cSrcweir //Zeile selektieren, gfs. Additional Mode
3142cdf0e10cSrcweir const bool bMod = KEY_MOD1 == rMEvt.GetModifier() &&
3143cdf0e10cSrcweir !rSh.IsAddMode();
3144cdf0e10cSrcweir
3145cdf0e10cSrcweir if ( bMod )
3146cdf0e10cSrcweir rSh.EnterAddMode();
3147cdf0e10cSrcweir
31485b40a975SOliver-Rainer Wittmann // Enhanced selection
3149cdf0e10cSrcweir if ( 3 == nNumberOfClicks )
3150cdf0e10cSrcweir rSh.SelSentence( &aDocPos );
3151cdf0e10cSrcweir else
3152cdf0e10cSrcweir rSh.SelPara( &aDocPos );
3153cdf0e10cSrcweir
3154cdf0e10cSrcweir if ( bMod )
3155cdf0e10cSrcweir rSh.LeaveAddMode();
3156cdf0e10cSrcweir
3157cdf0e10cSrcweir bHoldSelection = sal_True;
3158cdf0e10cSrcweir return;
3159cdf0e10cSrcweir }
3160cdf0e10cSrcweir
3161cdf0e10cSrcweir default:
3162cdf0e10cSrcweir return;
3163cdf0e10cSrcweir }
3164cdf0e10cSrcweir /* no break */
3165cdf0e10cSrcweir case MOUSE_LEFT + KEY_SHIFT:
3166cdf0e10cSrcweir case MOUSE_LEFT + KEY_SHIFT + KEY_MOD1:
3167cdf0e10cSrcweir {
3168cdf0e10cSrcweir sal_Bool bLockView = bWasShdwCrsr;
3169cdf0e10cSrcweir
3170cdf0e10cSrcweir switch ( rMEvt.GetModifier() )
3171cdf0e10cSrcweir {
3172cdf0e10cSrcweir case KEY_MOD1 + KEY_SHIFT:
3173cdf0e10cSrcweir {
3174cdf0e10cSrcweir if ( !bInsDraw && IsDrawObjSelectable( rSh, aDocPos ) )
3175cdf0e10cSrcweir {
3176cdf0e10cSrcweir rView.NoRotate();
3177cdf0e10cSrcweir rSh.HideCrsr();
3178cdf0e10cSrcweir if ( rSh.IsSelFrmMode() )
3179cdf0e10cSrcweir rSh.SelectObj(aDocPos, SW_ADD_SELECT | SW_ENTER_GROUP);
3180cdf0e10cSrcweir else
3181cdf0e10cSrcweir { if ( rSh.SelectObj( aDocPos, SW_ADD_SELECT | SW_ENTER_GROUP ) )
3182cdf0e10cSrcweir {
3183cdf0e10cSrcweir rSh.EnterSelFrmMode( &aDocPos );
3184cdf0e10cSrcweir SwEditWin::nDDStartPosY = aDocPos.Y();
3185cdf0e10cSrcweir SwEditWin::nDDStartPosX = aDocPos.X();
3186cdf0e10cSrcweir bFrmDrag = sal_True;
3187cdf0e10cSrcweir return;
3188cdf0e10cSrcweir }
3189cdf0e10cSrcweir }
3190cdf0e10cSrcweir }
3191cdf0e10cSrcweir else if( rSh.IsSelFrmMode() &&
3192cdf0e10cSrcweir rSh.GetDrawView()->PickHandle( aDocPos ))
3193cdf0e10cSrcweir {
3194cdf0e10cSrcweir bFrmDrag = sal_True;
3195cdf0e10cSrcweir bNoInterrupt = sal_False;
3196cdf0e10cSrcweir return;
3197cdf0e10cSrcweir }
3198cdf0e10cSrcweir }
3199cdf0e10cSrcweir break;
3200cdf0e10cSrcweir case KEY_MOD1:
3201cdf0e10cSrcweir if ( !bExecDrawTextLink )
3202cdf0e10cSrcweir {
3203cdf0e10cSrcweir if ( !bInsDraw && IsDrawObjSelectable( rSh, aDocPos ) )
3204cdf0e10cSrcweir {
3205cdf0e10cSrcweir rView.NoRotate();
3206cdf0e10cSrcweir rSh.HideCrsr();
3207cdf0e10cSrcweir if ( rSh.IsSelFrmMode() )
3208cdf0e10cSrcweir rSh.SelectObj(aDocPos, SW_ENTER_GROUP);
3209cdf0e10cSrcweir else
3210cdf0e10cSrcweir { if ( rSh.SelectObj( aDocPos, SW_ENTER_GROUP ) )
3211cdf0e10cSrcweir {
3212cdf0e10cSrcweir rSh.EnterSelFrmMode( &aDocPos );
3213cdf0e10cSrcweir SwEditWin::nDDStartPosY = aDocPos.Y();
3214cdf0e10cSrcweir SwEditWin::nDDStartPosX = aDocPos.X();
3215cdf0e10cSrcweir bFrmDrag = sal_True;
3216cdf0e10cSrcweir return;
3217cdf0e10cSrcweir }
3218cdf0e10cSrcweir }
3219cdf0e10cSrcweir }
3220cdf0e10cSrcweir else if( rSh.IsSelFrmMode() &&
3221cdf0e10cSrcweir rSh.GetDrawView()->PickHandle( aDocPos ))
3222cdf0e10cSrcweir {
3223cdf0e10cSrcweir bFrmDrag = sal_True;
3224cdf0e10cSrcweir bNoInterrupt = sal_False;
3225cdf0e10cSrcweir return;
3226cdf0e10cSrcweir }
3227cdf0e10cSrcweir else
3228cdf0e10cSrcweir {
3229cdf0e10cSrcweir if ( !rSh.IsAddMode() && !rSh.IsExtMode() && !rSh.IsBlockMode() )
3230cdf0e10cSrcweir {
3231cdf0e10cSrcweir rSh.PushMode();
3232cdf0e10cSrcweir bModePushed = sal_True;
3233cdf0e10cSrcweir
3234cdf0e10cSrcweir sal_Bool bUnLockView = !rSh.IsViewLocked();
3235cdf0e10cSrcweir rSh.LockView( sal_True );
3236cdf0e10cSrcweir rSh.EnterAddMode();
3237cdf0e10cSrcweir if( bUnLockView )
3238cdf0e10cSrcweir rSh.LockView( sal_False );
3239cdf0e10cSrcweir }
3240cdf0e10cSrcweir bCallBase = sal_False;
3241cdf0e10cSrcweir }
3242cdf0e10cSrcweir }
3243cdf0e10cSrcweir break;
3244cdf0e10cSrcweir case KEY_MOD2:
3245cdf0e10cSrcweir {
3246cdf0e10cSrcweir if ( !rSh.IsAddMode() && !rSh.IsExtMode() && !rSh.IsBlockMode() )
3247cdf0e10cSrcweir {
3248cdf0e10cSrcweir rSh.PushMode();
3249cdf0e10cSrcweir bModePushed = sal_True;
3250cdf0e10cSrcweir sal_Bool bUnLockView = !rSh.IsViewLocked();
3251cdf0e10cSrcweir rSh.LockView( sal_True );
3252cdf0e10cSrcweir rSh.EnterBlockMode();
3253cdf0e10cSrcweir if( bUnLockView )
3254cdf0e10cSrcweir rSh.LockView( sal_False );
3255cdf0e10cSrcweir }
3256cdf0e10cSrcweir bCallBase = sal_False;
3257cdf0e10cSrcweir }
3258cdf0e10cSrcweir break;
3259cdf0e10cSrcweir case KEY_SHIFT:
3260cdf0e10cSrcweir {
3261cdf0e10cSrcweir if ( !bInsDraw && IsDrawObjSelectable( rSh, aDocPos ) )
3262cdf0e10cSrcweir {
3263cdf0e10cSrcweir rView.NoRotate();
3264cdf0e10cSrcweir rSh.HideCrsr();
3265cdf0e10cSrcweir if ( rSh.IsSelFrmMode() )
3266cdf0e10cSrcweir {
3267cdf0e10cSrcweir rSh.SelectObj(aDocPos, SW_ADD_SELECT);
3268cdf0e10cSrcweir
3269cdf0e10cSrcweir const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
3270cdf0e10cSrcweir if (rMarkList.GetMark(0) == NULL)
3271cdf0e10cSrcweir {
3272cdf0e10cSrcweir rSh.LeaveSelFrmMode();
3273cdf0e10cSrcweir rView.AttrChangedNotify(&rSh);
3274cdf0e10cSrcweir bFrmDrag = sal_False;
3275cdf0e10cSrcweir }
3276cdf0e10cSrcweir }
3277cdf0e10cSrcweir else
3278cdf0e10cSrcweir { if ( rSh.SelectObj( aDocPos ) )
3279cdf0e10cSrcweir {
3280cdf0e10cSrcweir rSh.EnterSelFrmMode( &aDocPos );
3281cdf0e10cSrcweir SwEditWin::nDDStartPosY = aDocPos.Y();
3282cdf0e10cSrcweir SwEditWin::nDDStartPosX = aDocPos.X();
3283cdf0e10cSrcweir bFrmDrag = sal_True;
3284cdf0e10cSrcweir return;
3285cdf0e10cSrcweir }
3286cdf0e10cSrcweir }
3287cdf0e10cSrcweir }
3288cdf0e10cSrcweir else
3289cdf0e10cSrcweir {
3290cdf0e10cSrcweir if ( rSh.IsSelFrmMode() &&
3291cdf0e10cSrcweir rSh.IsInsideSelectedObj( aDocPos ) )
3292cdf0e10cSrcweir {
3293cdf0e10cSrcweir rSh.EnterSelFrmMode( &aDocPos );
3294cdf0e10cSrcweir SwEditWin::nDDStartPosY = aDocPos.Y();
3295cdf0e10cSrcweir SwEditWin::nDDStartPosX = aDocPos.X();
3296cdf0e10cSrcweir bFrmDrag = sal_True;
3297cdf0e10cSrcweir return;
3298cdf0e10cSrcweir }
3299cdf0e10cSrcweir if ( rSh.IsSelFrmMode() )
3300cdf0e10cSrcweir {
3301cdf0e10cSrcweir rSh.UnSelectFrm();
3302cdf0e10cSrcweir rSh.LeaveSelFrmMode();
3303cdf0e10cSrcweir rView.AttrChangedNotify(&rSh);
3304cdf0e10cSrcweir bFrmDrag = sal_False;
3305cdf0e10cSrcweir }
3306cdf0e10cSrcweir if ( !rSh.IsExtMode() )
3307cdf0e10cSrcweir {
3308cdf0e10cSrcweir // keine Selection anfangen, wenn in ein URL-
3309cdf0e10cSrcweir // Feld oder eine -Grafik geklickt wird
3310cdf0e10cSrcweir sal_Bool bSttSelect = rSh.HasSelection() ||
3311cdf0e10cSrcweir Pointer(POINTER_REFHAND) != GetPointer();
3312cdf0e10cSrcweir
3313cdf0e10cSrcweir if( !bSttSelect )
3314cdf0e10cSrcweir {
3315cdf0e10cSrcweir bSttSelect = sal_True;
3316cdf0e10cSrcweir if( bExecHyperlinks )
3317cdf0e10cSrcweir {
3318cdf0e10cSrcweir SwContentAtPos aCntntAtPos(
3319cdf0e10cSrcweir SwContentAtPos::SW_FTN |
3320cdf0e10cSrcweir SwContentAtPos::SW_INETATTR );
3321cdf0e10cSrcweir
3322cdf0e10cSrcweir if( rSh.GetContentAtPos( aDocPos, aCntntAtPos ) )
3323cdf0e10cSrcweir {
3324cdf0e10cSrcweir if( !rSh.IsViewLocked() &&
3325cdf0e10cSrcweir !rSh.IsReadOnlyAvailable() &&
3326cdf0e10cSrcweir aCntntAtPos.IsInProtectSect() )
3327cdf0e10cSrcweir bLockView = sal_True;
3328cdf0e10cSrcweir
3329cdf0e10cSrcweir bSttSelect = sal_False;
3330cdf0e10cSrcweir }
3331cdf0e10cSrcweir else if( rSh.IsURLGrfAtPos( aDocPos ))
3332cdf0e10cSrcweir bSttSelect = sal_False;
3333cdf0e10cSrcweir }
3334cdf0e10cSrcweir }
3335cdf0e10cSrcweir
3336cdf0e10cSrcweir if( bSttSelect )
3337cdf0e10cSrcweir rSh.SttSelect();
3338cdf0e10cSrcweir }
3339cdf0e10cSrcweir }
3340cdf0e10cSrcweir bCallBase = sal_False;
3341cdf0e10cSrcweir break;
3342cdf0e10cSrcweir }
3343cdf0e10cSrcweir default:
3344cdf0e10cSrcweir if( !rSh.IsViewLocked() )
3345cdf0e10cSrcweir {
3346cdf0e10cSrcweir SwContentAtPos aCntntAtPos( SwContentAtPos::SW_CLICKFIELD |
3347cdf0e10cSrcweir SwContentAtPos::SW_INETATTR );
3348cdf0e10cSrcweir if( rSh.GetContentAtPos( aDocPos, aCntntAtPos, sal_False ) &&
3349cdf0e10cSrcweir !rSh.IsReadOnlyAvailable() &&
3350cdf0e10cSrcweir aCntntAtPos.IsInProtectSect() )
3351cdf0e10cSrcweir bLockView = sal_True;
3352cdf0e10cSrcweir }
3353cdf0e10cSrcweir }
3354cdf0e10cSrcweir
3355cdf0e10cSrcweir if ( rSh.IsGCAttr() )
3356cdf0e10cSrcweir {
3357cdf0e10cSrcweir rSh.GCAttr();
3358cdf0e10cSrcweir rSh.ClearGCAttr();
3359cdf0e10cSrcweir }
3360cdf0e10cSrcweir
3361cdf0e10cSrcweir sal_Bool bOverSelect = rSh.ChgCurrPam( aDocPos ), bOverURLGrf = sal_False;
3362cdf0e10cSrcweir if( !bOverSelect )
3363cdf0e10cSrcweir bOverURLGrf = bOverSelect = 0 != rSh.IsURLGrfAtPos( aDocPos );
3364cdf0e10cSrcweir
3365cdf0e10cSrcweir if ( !bOverSelect )
3366cdf0e10cSrcweir {
3367cdf0e10cSrcweir const sal_Bool bTmpNoInterrupt = bNoInterrupt;
3368cdf0e10cSrcweir bNoInterrupt = sal_False;
3369cdf0e10cSrcweir
3370cdf0e10cSrcweir if( !rSh.IsViewLocked() && bLockView )
3371cdf0e10cSrcweir rSh.LockView( sal_True );
3372cdf0e10cSrcweir else
3373cdf0e10cSrcweir bLockView = sal_False;
3374cdf0e10cSrcweir
3375cdf0e10cSrcweir int nTmpSetCrsr = 0;
3376cdf0e10cSrcweir
3377*2b518738Smseidel { // nur temp. Move-Context aufspannen, da sonst die
3378cdf0e10cSrcweir // Abfrage auf die Inhaltsform nicht funktioniert!!!
3379*2b518738Smseidel MV_CONTEXT( &rSh );
3380cdf0e10cSrcweir nTmpSetCrsr = (rSh.*rSh.fnSetCrsr)(&aDocPos,bOnlyText);
3381cdf0e10cSrcweir bValidCrsrPos = !(CRSR_POSCHG & nTmpSetCrsr);
3382cdf0e10cSrcweir bCallBase = sal_False;
3383cdf0e10cSrcweir }
3384cdf0e10cSrcweir
3385cdf0e10cSrcweir //#i42732# - notify the edit window that from now on we do not use the input language
3386cdf0e10cSrcweir if ( !(CRSR_POSOLD & nTmpSetCrsr) )
3387cdf0e10cSrcweir SetUseInputLanguage( sal_False );
3388cdf0e10cSrcweir
3389cdf0e10cSrcweir if( bLockView )
3390cdf0e10cSrcweir rSh.LockView( sal_False );
3391cdf0e10cSrcweir
3392cdf0e10cSrcweir bNoInterrupt = bTmpNoInterrupt;
3393cdf0e10cSrcweir }
3394cdf0e10cSrcweir if ( !bOverURLGrf && !bOnlyText )
3395cdf0e10cSrcweir {
3396cdf0e10cSrcweir const int nSelType = rSh.GetSelectionType();
3397cdf0e10cSrcweir // Check in general, if an object is selectable at given position.
3398cdf0e10cSrcweir // Thus, also text fly frames in background become selectable via Ctrl-Click.
339923d8f725SOliver-Rainer Wittmann if ( ( nSelType & nsSelectionType::SEL_OLE )
340023d8f725SOliver-Rainer Wittmann || ( nSelType & nsSelectionType::SEL_GRF )
340123d8f725SOliver-Rainer Wittmann || rSh.IsObjSelectable( aDocPos ) )
3402cdf0e10cSrcweir {
3403*2b518738Smseidel MV_CONTEXT( &rSh );
3404cdf0e10cSrcweir if( !rSh.IsFrmSelected() )
3405cdf0e10cSrcweir rSh.GotoNextFly();
3406cdf0e10cSrcweir rSh.EnterSelFrmMode();
3407cdf0e10cSrcweir bCallBase = sal_False;
3408cdf0e10cSrcweir }
3409cdf0e10cSrcweir }
3410cdf0e10cSrcweir break;
3411cdf0e10cSrcweir }
3412cdf0e10cSrcweir }
3413cdf0e10cSrcweir }
3414cdf0e10cSrcweir if (bCallBase)
3415cdf0e10cSrcweir Window::MouseButtonDown(rMEvt);
3416cdf0e10cSrcweir }
3417cdf0e10cSrcweir
3418cdf0e10cSrcweir /*--------------------------------------------------------------------
3419cdf0e10cSrcweir Beschreibung: MouseMove
3420cdf0e10cSrcweir --------------------------------------------------------------------*/
3421cdf0e10cSrcweir
3422cdf0e10cSrcweir
MouseMove(const MouseEvent & _rMEvt)3423cdf0e10cSrcweir void SwEditWin::MouseMove(const MouseEvent& _rMEvt)
3424cdf0e10cSrcweir {
3425cdf0e10cSrcweir MouseEvent rMEvt(_rMEvt);
3426cdf0e10cSrcweir
3427cdf0e10cSrcweir //ignore key modifiers for format paintbrush
3428cdf0e10cSrcweir {
3429cdf0e10cSrcweir sal_Bool bExecFormatPaintbrush = pApplyTempl && pApplyTempl->pFormatClipboard
3430cdf0e10cSrcweir && pApplyTempl->pFormatClipboard->HasContent();
3431cdf0e10cSrcweir if( bExecFormatPaintbrush )
3432cdf0e10cSrcweir rMEvt = MouseEvent( _rMEvt.GetPosPixel(), _rMEvt.GetClicks(),
3433cdf0e10cSrcweir _rMEvt.GetMode(), _rMEvt.GetButtons() );
3434cdf0e10cSrcweir }
3435cdf0e10cSrcweir
3436cdf0e10cSrcweir // solange eine Action laeuft sollte das MouseMove abgeklemmt sein
3437cdf0e10cSrcweir // Ansonsten gibt es den Bug 40102
3438cdf0e10cSrcweir SwWrtShell &rSh = rView.GetWrtShell();
3439cdf0e10cSrcweir if( rSh.ActionPend() )
3440cdf0e10cSrcweir return ;
3441cdf0e10cSrcweir
3442cdf0e10cSrcweir if( pShadCrsr && 0 != (rMEvt.GetModifier() + rMEvt.GetButtons() ) )
3443cdf0e10cSrcweir delete pShadCrsr, pShadCrsr = 0;
3444cdf0e10cSrcweir
3445cdf0e10cSrcweir sal_Bool bIsDocReadOnly = rView.GetDocShell()->IsReadOnly();
3446cdf0e10cSrcweir
3447cdf0e10cSrcweir SET_CURR_SHELL( &rSh );
3448cdf0e10cSrcweir
3449cdf0e10cSrcweir //aPixPt == Point in Pixel, rel. zu ChildWin
3450cdf0e10cSrcweir //aDocPt == Point in Twips, Dokumentkoordinaten
3451cdf0e10cSrcweir const Point aPixPt( rMEvt.GetPosPixel() );
3452cdf0e10cSrcweir const Point aDocPt( PixelToLogic( aPixPt ) );
3453cdf0e10cSrcweir
3454cdf0e10cSrcweir if ( IsChainMode() )
3455cdf0e10cSrcweir {
3456cdf0e10cSrcweir UpdatePointer( aDocPt, rMEvt.GetModifier() );
3457cdf0e10cSrcweir if ( rMEvt.IsLeaveWindow() )
3458cdf0e10cSrcweir rView.GetViewFrame()->HideStatusText();
3459cdf0e10cSrcweir return;
3460cdf0e10cSrcweir }
3461cdf0e10cSrcweir
3462cdf0e10cSrcweir SdrView *pSdrView = rSh.GetDrawView();
3463cdf0e10cSrcweir
3464cdf0e10cSrcweir const SwCallMouseEvent aLastCallEvent( aSaveCallEvent );
3465cdf0e10cSrcweir aSaveCallEvent.Clear();
3466cdf0e10cSrcweir
3467cdf0e10cSrcweir if ( !bIsDocReadOnly && pSdrView && pSdrView->MouseMove(rMEvt,this) )
3468cdf0e10cSrcweir {
3469cdf0e10cSrcweir SetPointer( POINTER_TEXT );
3470cdf0e10cSrcweir return; // Event von der SdrView ausgewertet
3471cdf0e10cSrcweir }
3472cdf0e10cSrcweir
3473cdf0e10cSrcweir const Point aOldPt( rSh.VisArea().Pos() );
3474cdf0e10cSrcweir const sal_Bool bInsWin = rSh.VisArea().IsInside( aDocPt );
3475cdf0e10cSrcweir
3476cdf0e10cSrcweir if( pShadCrsr && !bInsWin )
3477cdf0e10cSrcweir delete pShadCrsr, pShadCrsr = 0;
3478cdf0e10cSrcweir
3479cdf0e10cSrcweir if( bInsWin && pRowColumnSelectionStart )
3480cdf0e10cSrcweir {
3481cdf0e10cSrcweir EnterArea();
3482cdf0e10cSrcweir Point aPos( aDocPt );
3483cdf0e10cSrcweir if( rSh.SelectTableRowCol( *pRowColumnSelectionStart, &aPos, bIsRowDrag ))
3484cdf0e10cSrcweir return;
3485cdf0e10cSrcweir }
3486cdf0e10cSrcweir
3487cdf0e10cSrcweir // Position ist noetig fuer OS/2, da dort nach einem MB-Down
3488cdf0e10cSrcweir // offensichtlich sofort ein MB-Move gerufen wird.
3489cdf0e10cSrcweir if( bDDTimerStarted )
3490cdf0e10cSrcweir {
3491cdf0e10cSrcweir Point aDD( SwEditWin::nDDStartPosX, SwEditWin::nDDStartPosY );
3492cdf0e10cSrcweir aDD = LogicToPixel( aDD );
3493cdf0e10cSrcweir Rectangle aRect( aDD.X()-3, aDD.Y()-3, aDD.X()+3, aDD.Y()+3 );
3494cdf0e10cSrcweir if ( !aRect.IsInside( aPixPt ) ) // MA 23. May. 95: Tatterschutz.
3495cdf0e10cSrcweir StopDDTimer( &rSh, aDocPt );
3496cdf0e10cSrcweir }
3497cdf0e10cSrcweir
3498cdf0e10cSrcweir if(rView.GetDrawFuncPtr())
3499cdf0e10cSrcweir {
3500cdf0e10cSrcweir if( bInsDraw )
3501cdf0e10cSrcweir {
3502cdf0e10cSrcweir rView.GetDrawFuncPtr()->MouseMove( rMEvt );
3503cdf0e10cSrcweir if ( !bInsWin )
3504cdf0e10cSrcweir {
3505cdf0e10cSrcweir Point aTmp( aDocPt );
3506cdf0e10cSrcweir aTmp += rSh.VisArea().Pos() - aOldPt;
3507cdf0e10cSrcweir LeaveArea( aTmp );
3508cdf0e10cSrcweir }
3509cdf0e10cSrcweir else
3510cdf0e10cSrcweir EnterArea();
3511cdf0e10cSrcweir return;
3512cdf0e10cSrcweir }
3513cdf0e10cSrcweir else if(!rSh.IsFrmSelected() && !rSh.IsObjSelected())
3514cdf0e10cSrcweir {
3515cdf0e10cSrcweir SfxBindings &rBnd = rSh.GetView().GetViewFrame()->GetBindings();
3516cdf0e10cSrcweir Point aRelPos = rSh.GetRelativePagePosition(aDocPt);
3517cdf0e10cSrcweir if(aRelPos.X() >= 0)
3518cdf0e10cSrcweir {
3519cdf0e10cSrcweir FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, &GetView()));
3520cdf0e10cSrcweir SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)));
3521cdf0e10cSrcweir const SfxPointItem aTmp1( SID_ATTR_POSITION, aRelPos );
3522cdf0e10cSrcweir rBnd.SetState( aTmp1 );
3523cdf0e10cSrcweir }
3524cdf0e10cSrcweir else
3525cdf0e10cSrcweir {
3526cdf0e10cSrcweir rBnd.Invalidate(SID_ATTR_POSITION);
3527cdf0e10cSrcweir }
3528cdf0e10cSrcweir rBnd.Invalidate(SID_ATTR_SIZE);
3529cdf0e10cSrcweir const SfxStringItem aCell( SID_TABLE_CELL, aEmptyStr );
3530cdf0e10cSrcweir rBnd.SetState( aCell );
3531cdf0e10cSrcweir }
3532cdf0e10cSrcweir }
3533cdf0e10cSrcweir
3534cdf0e10cSrcweir sal_uInt8 nMouseTabCol;
3535cdf0e10cSrcweir if( !bIsDocReadOnly && bInsWin && !pApplyTempl && !rSh.IsInSelect() )
3536cdf0e10cSrcweir {
3537cdf0e10cSrcweir if ( SW_TABCOL_NONE != (nMouseTabCol = rSh.WhichMouseTabCol( aDocPt ) ) &&
3538cdf0e10cSrcweir !rSh.IsObjSelectable( aDocPt ) )
3539cdf0e10cSrcweir {
3540cdf0e10cSrcweir sal_uInt16 nPointer = USHRT_MAX;
3541cdf0e10cSrcweir bool bChkTblSel = false;
3542cdf0e10cSrcweir
3543cdf0e10cSrcweir switch ( nMouseTabCol )
3544cdf0e10cSrcweir {
3545cdf0e10cSrcweir case SW_TABCOL_VERT :
3546cdf0e10cSrcweir case SW_TABROW_HORI :
3547cdf0e10cSrcweir nPointer = POINTER_VSIZEBAR;
3548cdf0e10cSrcweir bChkTblSel = true;
3549cdf0e10cSrcweir break;
3550cdf0e10cSrcweir case SW_TABROW_VERT :
3551cdf0e10cSrcweir case SW_TABCOL_HORI :
3552cdf0e10cSrcweir nPointer = POINTER_HSIZEBAR;
3553cdf0e10cSrcweir bChkTblSel = true;
3554cdf0e10cSrcweir break;
35555b40a975SOliver-Rainer Wittmann // Enhanced table selection
3556cdf0e10cSrcweir case SW_TABSEL_HORI :
3557cdf0e10cSrcweir nPointer = POINTER_TAB_SELECT_SE;
3558cdf0e10cSrcweir break;
3559cdf0e10cSrcweir case SW_TABSEL_HORI_RTL :
3560cdf0e10cSrcweir case SW_TABSEL_VERT :
3561cdf0e10cSrcweir nPointer = POINTER_TAB_SELECT_SW;
3562cdf0e10cSrcweir break;
3563cdf0e10cSrcweir case SW_TABCOLSEL_HORI :
3564cdf0e10cSrcweir case SW_TABROWSEL_VERT :
3565cdf0e10cSrcweir nPointer = POINTER_TAB_SELECT_S;
3566cdf0e10cSrcweir break;
3567cdf0e10cSrcweir case SW_TABROWSEL_HORI :
3568cdf0e10cSrcweir nPointer = POINTER_TAB_SELECT_E;
3569cdf0e10cSrcweir break;
3570cdf0e10cSrcweir case SW_TABROWSEL_HORI_RTL :
3571cdf0e10cSrcweir case SW_TABCOLSEL_VERT :
3572cdf0e10cSrcweir nPointer = POINTER_TAB_SELECT_W;
3573cdf0e10cSrcweir break;
3574cdf0e10cSrcweir }
3575cdf0e10cSrcweir
3576cdf0e10cSrcweir if ( USHRT_MAX != nPointer &&
357756b8eddcSmseidel // Enhanced table selection is explicitly allowed in table mode
3578cdf0e10cSrcweir ( !bChkTblSel || !rSh.IsTableMode() ) )
3579cdf0e10cSrcweir {
3580cdf0e10cSrcweir SetPointer( nPointer );
3581cdf0e10cSrcweir }
3582cdf0e10cSrcweir
3583cdf0e10cSrcweir return;
3584cdf0e10cSrcweir }
3585cdf0e10cSrcweir else if (rSh.IsNumLabel(aDocPt, RULER_MOUSE_MARGINWIDTH))
3586cdf0e10cSrcweir {
3587cdf0e10cSrcweir SwTxtNode* pNodeAtPos = rSh.GetNumRuleNodeAtPos( aDocPt );
3588cdf0e10cSrcweir const sal_uInt16 nPointer =
3589cdf0e10cSrcweir rSh.IsVerticalModeAtNdAndPos( *pNodeAtPos, aDocPt )
3590cdf0e10cSrcweir ? POINTER_VSIZEBAR
3591cdf0e10cSrcweir : POINTER_HSIZEBAR;
3592cdf0e10cSrcweir SetPointer( nPointer );
3593cdf0e10cSrcweir
3594cdf0e10cSrcweir return;
3595cdf0e10cSrcweir }
3596cdf0e10cSrcweir }
3597cdf0e10cSrcweir
3598cdf0e10cSrcweir sal_Bool bDelShadCrsr = sal_True;
3599cdf0e10cSrcweir
3600cdf0e10cSrcweir switch ( rMEvt.GetModifier() + rMEvt.GetButtons() )
3601cdf0e10cSrcweir {
3602cdf0e10cSrcweir case MOUSE_LEFT:
3603cdf0e10cSrcweir if( pAnchorMarker )
3604cdf0e10cSrcweir {
3605cdf0e10cSrcweir // Now we need to refresh the SdrHdl pointer of pAnchorMarker.
3606cdf0e10cSrcweir // This looks a little bit tricky, but it solves the following
3607cdf0e10cSrcweir // problem: the pAnchorMarker contains a pointer to an SdrHdl,
3608cdf0e10cSrcweir // if the FindAnchorPos-call cause a scrolling of the visible
3609cdf0e10cSrcweir // area, it's possible that the SdrHdl will be destroyed and a
3610cdf0e10cSrcweir // new one will initialized at the original position(GetHdlPos).
3611cdf0e10cSrcweir // So the pAnchorMarker has to find the right SdrHdl, if it's
3612cdf0e10cSrcweir // the old one, it will find it with position aOld, if this one
3613cdf0e10cSrcweir // is destroyed, it will find a new one at position GetHdlPos().
3614cdf0e10cSrcweir const Point aOld = pAnchorMarker->GetPosForHitTest( *(rSh.GetOut()) );
3615cdf0e10cSrcweir Point aNew = rSh.FindAnchorPos( aDocPt );
3616cdf0e10cSrcweir SdrHdl* pHdl;
3617cdf0e10cSrcweir if( (0!=( pHdl = pSdrView->PickHandle( aOld ) )||
3618cdf0e10cSrcweir 0 !=(pHdl = pSdrView->PickHandle( pAnchorMarker->GetHdlPos()) ) ) &&
3619cdf0e10cSrcweir ( pHdl->GetKind() == HDL_ANCHOR ||
3620cdf0e10cSrcweir pHdl->GetKind() == HDL_ANCHOR_TR ) )
3621cdf0e10cSrcweir {
3622cdf0e10cSrcweir pAnchorMarker->ChgHdl( pHdl );
3623cdf0e10cSrcweir if( aNew.X() || aNew.Y() )
3624cdf0e10cSrcweir {
3625cdf0e10cSrcweir pAnchorMarker->SetPos( aNew );
3626cdf0e10cSrcweir pAnchorMarker->SetLastPos( aDocPt );
3627cdf0e10cSrcweir }
3628cdf0e10cSrcweir }
3629cdf0e10cSrcweir else
3630cdf0e10cSrcweir {
3631cdf0e10cSrcweir delete pAnchorMarker;
3632cdf0e10cSrcweir pAnchorMarker = NULL;
3633cdf0e10cSrcweir }
3634cdf0e10cSrcweir }
3635cdf0e10cSrcweir if ( bInsDraw )
3636cdf0e10cSrcweir {
3637cdf0e10cSrcweir if ( !bMBPressed )
3638cdf0e10cSrcweir break;
3639cdf0e10cSrcweir if ( bIsInMove || IsMinMove( aStartPos, aPixPt ) )
3640cdf0e10cSrcweir {
3641cdf0e10cSrcweir if ( !bInsWin )
3642cdf0e10cSrcweir LeaveArea( aDocPt );
3643cdf0e10cSrcweir else
3644cdf0e10cSrcweir EnterArea();
3645cdf0e10cSrcweir if ( rView.GetDrawFuncPtr() )
3646cdf0e10cSrcweir {
3647cdf0e10cSrcweir pSdrView->SetOrtho(sal_False);
3648cdf0e10cSrcweir rView.GetDrawFuncPtr()->MouseMove( rMEvt );
3649cdf0e10cSrcweir }
3650cdf0e10cSrcweir bIsInMove = sal_True;
3651cdf0e10cSrcweir }
3652cdf0e10cSrcweir return;
3653cdf0e10cSrcweir }
3654cdf0e10cSrcweir case MOUSE_LEFT + KEY_SHIFT:
3655cdf0e10cSrcweir case MOUSE_LEFT + KEY_SHIFT + KEY_MOD1:
3656cdf0e10cSrcweir if ( !bMBPressed )
3657cdf0e10cSrcweir break;
3658cdf0e10cSrcweir case MOUSE_LEFT + KEY_MOD1:
3659cdf0e10cSrcweir if ( bFrmDrag && rSh.IsSelFrmMode() )
3660cdf0e10cSrcweir {
3661cdf0e10cSrcweir if( !bMBPressed )
3662cdf0e10cSrcweir break;
3663cdf0e10cSrcweir
3664cdf0e10cSrcweir if ( bIsInMove || IsMinMove( aStartPos, aPixPt ) )
3665cdf0e10cSrcweir {
3666cdf0e10cSrcweir // Event-Verarbeitung fuers Resizen
3667cdf0e10cSrcweir if( pSdrView->AreObjectsMarked() )
3668cdf0e10cSrcweir {
3669cdf0e10cSrcweir const SwFrmFmt* pFlyFmt;
3670cdf0e10cSrcweir const SvxMacro* pMacro;
3671cdf0e10cSrcweir
3672cdf0e10cSrcweir const Point aSttPt( PixelToLogic( aStartPos ) );
3673cdf0e10cSrcweir
3674cdf0e10cSrcweir // geht es los?
3675cdf0e10cSrcweir if( HDL_USER == eSdrMoveHdl )
3676cdf0e10cSrcweir {
3677cdf0e10cSrcweir SdrHdl* pHdl = pSdrView->PickHandle( aSttPt );
3678cdf0e10cSrcweir eSdrMoveHdl = pHdl ? pHdl->GetKind() : HDL_MOVE;
3679cdf0e10cSrcweir }
3680cdf0e10cSrcweir
3681cdf0e10cSrcweir sal_uInt16 nEvent = HDL_MOVE == eSdrMoveHdl
3682cdf0e10cSrcweir ? SW_EVENT_FRM_MOVE
3683cdf0e10cSrcweir : SW_EVENT_FRM_RESIZE;
3684cdf0e10cSrcweir
3685cdf0e10cSrcweir if( 0 != ( pFlyFmt = rSh.GetFlyFrmFmt() ) &&
3686cdf0e10cSrcweir 0 != ( pMacro = pFlyFmt->GetMacro().GetMacroTable().
3687cdf0e10cSrcweir Get( nEvent )) &&
3688cdf0e10cSrcweir aRszMvHdlPt != aDocPt )
3689cdf0e10cSrcweir {
3690cdf0e10cSrcweir aRszMvHdlPt = aDocPt;
3691cdf0e10cSrcweir sal_uInt16 nPos = 0;
3692cdf0e10cSrcweir String sRet;
3693cdf0e10cSrcweir SbxArrayRef xArgs = new SbxArray;
3694cdf0e10cSrcweir SbxVariableRef xVar = new SbxVariable;
3695cdf0e10cSrcweir xVar->PutString( pFlyFmt->GetName() );
3696cdf0e10cSrcweir xArgs->Put( &xVar, ++nPos );
3697cdf0e10cSrcweir
3698cdf0e10cSrcweir if( SW_EVENT_FRM_RESIZE == nEvent )
3699cdf0e10cSrcweir {
3700cdf0e10cSrcweir xVar = new SbxVariable;
3701cdf0e10cSrcweir xVar->PutUShort( static_cast< sal_uInt16 >(eSdrMoveHdl) );
3702cdf0e10cSrcweir xArgs->Put( &xVar, ++nPos );
3703cdf0e10cSrcweir }
3704cdf0e10cSrcweir
3705cdf0e10cSrcweir xVar = new SbxVariable;
3706cdf0e10cSrcweir xVar->PutLong( aDocPt.X() - aSttPt.X() );
3707cdf0e10cSrcweir xArgs->Put( &xVar, ++nPos );
3708cdf0e10cSrcweir xVar = new SbxVariable;
3709cdf0e10cSrcweir xVar->PutLong( aDocPt.Y() - aSttPt.Y() );
3710cdf0e10cSrcweir xArgs->Put( &xVar, ++nPos );
3711cdf0e10cSrcweir
3712cdf0e10cSrcweir ReleaseMouse();
3713cdf0e10cSrcweir
3714cdf0e10cSrcweir rSh.ExecMacro( *pMacro, &sRet, &xArgs );
3715cdf0e10cSrcweir
3716cdf0e10cSrcweir CaptureMouse();
3717cdf0e10cSrcweir
3718cdf0e10cSrcweir if( sRet.Len() && 0 != sRet.ToInt32() )
3719cdf0e10cSrcweir return ;
3720cdf0e10cSrcweir }
3721cdf0e10cSrcweir }
3722cdf0e10cSrcweir // Event-Verarbeitung fuers Resizen
3723cdf0e10cSrcweir
3724cdf0e10cSrcweir if( bIsDocReadOnly )
3725cdf0e10cSrcweir break;
3726cdf0e10cSrcweir
3727cdf0e10cSrcweir if ( rMEvt.IsShift() )
3728cdf0e10cSrcweir {
3729cdf0e10cSrcweir pSdrView->SetOrtho(sal_True);
3730cdf0e10cSrcweir pSdrView->SetAngleSnapEnabled(sal_True);
3731cdf0e10cSrcweir }
3732cdf0e10cSrcweir else
3733cdf0e10cSrcweir {
3734cdf0e10cSrcweir pSdrView->SetOrtho(sal_False);
3735cdf0e10cSrcweir pSdrView->SetAngleSnapEnabled(sal_False);
3736cdf0e10cSrcweir }
3737cdf0e10cSrcweir
3738cdf0e10cSrcweir (rSh.*rSh.fnDrag)( &aDocPt, rMEvt.IsShift() );
3739cdf0e10cSrcweir bIsInMove = sal_True;
3740cdf0e10cSrcweir }
3741cdf0e10cSrcweir else if( bIsDocReadOnly )
3742cdf0e10cSrcweir break;
3743cdf0e10cSrcweir
3744cdf0e10cSrcweir if ( !bInsWin )
3745cdf0e10cSrcweir {
3746cdf0e10cSrcweir Point aTmp( aDocPt );
3747cdf0e10cSrcweir aTmp += rSh.VisArea().Pos() - aOldPt;
3748cdf0e10cSrcweir LeaveArea( aTmp );
3749cdf0e10cSrcweir }
3750cdf0e10cSrcweir else if(bIsInMove)
3751cdf0e10cSrcweir EnterArea();
3752cdf0e10cSrcweir return;
3753cdf0e10cSrcweir }
3754cdf0e10cSrcweir if ( !rSh.IsSelFrmMode() && !bDDINetAttr &&
3755cdf0e10cSrcweir (IsMinMove( aStartPos,aPixPt ) || bIsInMove) &&
3756cdf0e10cSrcweir (rSh.IsInSelect() || !rSh.ChgCurrPam( aDocPt )) )
3757cdf0e10cSrcweir {
3758cdf0e10cSrcweir if ( pSdrView )
3759cdf0e10cSrcweir {
3760cdf0e10cSrcweir if ( rMEvt.IsShift() )
3761cdf0e10cSrcweir pSdrView->SetOrtho(sal_True);
3762cdf0e10cSrcweir else
3763cdf0e10cSrcweir pSdrView->SetOrtho(sal_False);
3764cdf0e10cSrcweir }
3765cdf0e10cSrcweir if ( !bInsWin )
3766cdf0e10cSrcweir {
3767cdf0e10cSrcweir Point aTmp( aDocPt );
3768cdf0e10cSrcweir aTmp += rSh.VisArea().Pos() - aOldPt;
3769cdf0e10cSrcweir LeaveArea( aTmp );
3770cdf0e10cSrcweir }
3771cdf0e10cSrcweir else
3772cdf0e10cSrcweir {
3773cdf0e10cSrcweir //JP 24.09.98: Fix fuer die Bugs 55592 / 55931
3774cdf0e10cSrcweir //JP 23.04.99: Fix fuer den Bugs 65289
3775cdf0e10cSrcweir //JP 06.07.99: Fix fuer den Bugs 67360
3776cdf0e10cSrcweir if( !rMEvt.IsSynthetic() &&
3777cdf0e10cSrcweir !(( MOUSE_LEFT + KEY_MOD1 ==
3778cdf0e10cSrcweir rMEvt.GetModifier() + rMEvt.GetButtons() ) &&
3779cdf0e10cSrcweir rSh.Is_FnDragEQBeginDrag() && !rSh.IsAddMode() ))
3780cdf0e10cSrcweir {
3781cdf0e10cSrcweir (rSh.*rSh.fnDrag)( &aDocPt,sal_False );
3782cdf0e10cSrcweir
3783cdf0e10cSrcweir bValidCrsrPos = !(CRSR_POSCHG & (rSh.*rSh.fnSetCrsr)(&aDocPt,sal_False));
3784cdf0e10cSrcweir EnterArea();
3785cdf0e10cSrcweir }
3786cdf0e10cSrcweir }
3787cdf0e10cSrcweir }
3788cdf0e10cSrcweir bDDINetAttr = sal_False;
3789cdf0e10cSrcweir break;
3790cdf0e10cSrcweir case 0:
3791cdf0e10cSrcweir {
3792cdf0e10cSrcweir if ( pApplyTempl )
3793cdf0e10cSrcweir {
3794cdf0e10cSrcweir UpdatePointer(aDocPt, 0); // evtl. muss hier ein Rahmen markiert werden
3795cdf0e10cSrcweir break;
3796cdf0e10cSrcweir }
3797cdf0e10cSrcweir //#i6193#, change ui if mouse is over SwPostItField
3798cdf0e10cSrcweir // TODO: do the same thing for redlines SW_REDLINE
3799cdf0e10cSrcweir SwRect aFldRect;
3800cdf0e10cSrcweir SwContentAtPos aCntntAtPos( SwContentAtPos::SW_FIELD);
3801cdf0e10cSrcweir if( rSh.GetContentAtPos( aDocPt, aCntntAtPos, sal_False, &aFldRect ) )
3802cdf0e10cSrcweir {
3803cdf0e10cSrcweir const SwField* pFld = aCntntAtPos.aFnd.pFld;
3804cdf0e10cSrcweir if (pFld->Which()== RES_POSTITFLD)
3805cdf0e10cSrcweir {
3806cdf0e10cSrcweir rView.GetPostItMgr()->SetShadowState(reinterpret_cast<const SwPostItField*>(pFld),false);
3807cdf0e10cSrcweir }
3808cdf0e10cSrcweir else
3809cdf0e10cSrcweir rView.GetPostItMgr()->SetShadowState(0,false);
3810cdf0e10cSrcweir }
3811cdf0e10cSrcweir else
3812cdf0e10cSrcweir rView.GetPostItMgr()->SetShadowState(0,false);
3813cdf0e10cSrcweir // no break;
3814cdf0e10cSrcweir }
3815cdf0e10cSrcweir case KEY_SHIFT:
3816cdf0e10cSrcweir case KEY_MOD2:
3817cdf0e10cSrcweir case KEY_MOD1:
3818cdf0e10cSrcweir if ( !bInsDraw )
3819cdf0e10cSrcweir {
3820cdf0e10cSrcweir sal_Bool bTstShdwCrsr = sal_True;
3821cdf0e10cSrcweir
3822cdf0e10cSrcweir UpdatePointer( aDocPt, rMEvt.GetModifier() );
3823cdf0e10cSrcweir
3824cdf0e10cSrcweir const SwFrmFmt* pFmt = 0;
3825cdf0e10cSrcweir const SwFmtINetFmt* pINet = 0;
3826cdf0e10cSrcweir SwContentAtPos aCntntAtPos( SwContentAtPos::SW_INETATTR );
3827cdf0e10cSrcweir if( rSh.GetContentAtPos( aDocPt, aCntntAtPos ) )
3828cdf0e10cSrcweir pINet = (SwFmtINetFmt*)aCntntAtPos.aFnd.pAttr;
3829cdf0e10cSrcweir
3830cdf0e10cSrcweir const void* pTmp = pINet;
3831cdf0e10cSrcweir
3832cdf0e10cSrcweir if( pINet ||
3833cdf0e10cSrcweir 0 != ( pTmp = pFmt = rSh.GetFmtFromAnyObj( aDocPt )))
3834cdf0e10cSrcweir {
3835cdf0e10cSrcweir bTstShdwCrsr = sal_False;
3836cdf0e10cSrcweir if( pTmp == pINet )
3837cdf0e10cSrcweir aSaveCallEvent.Set( pINet );
3838cdf0e10cSrcweir else
3839cdf0e10cSrcweir {
3840cdf0e10cSrcweir IMapObject* pIMapObj = pFmt->GetIMapObject( aDocPt );
3841cdf0e10cSrcweir if( pIMapObj )
3842cdf0e10cSrcweir aSaveCallEvent.Set( pFmt, pIMapObj );
3843cdf0e10cSrcweir else
3844cdf0e10cSrcweir aSaveCallEvent.Set( EVENT_OBJECT_URLITEM, pFmt );
3845cdf0e10cSrcweir }
3846cdf0e10cSrcweir
3847cdf0e10cSrcweir // sollte wir ueber einem InternetFeld mit einem
3848cdf0e10cSrcweir // gebundenen Macro stehen?
3849cdf0e10cSrcweir if( aSaveCallEvent != aLastCallEvent )
3850cdf0e10cSrcweir {
3851cdf0e10cSrcweir if( aLastCallEvent.HasEvent() )
3852cdf0e10cSrcweir rSh.CallEvent( SFX_EVENT_MOUSEOUT_OBJECT,
3853cdf0e10cSrcweir aLastCallEvent, sal_True );
3854cdf0e10cSrcweir // 0 besagt, das das Object gar keine Tabelle hat
3855cdf0e10cSrcweir if( !rSh.CallEvent( SFX_EVENT_MOUSEOVER_OBJECT,
3856cdf0e10cSrcweir aSaveCallEvent ))
3857cdf0e10cSrcweir aSaveCallEvent.Clear();
3858cdf0e10cSrcweir }
3859cdf0e10cSrcweir }
3860cdf0e10cSrcweir else if( aLastCallEvent.HasEvent() )
3861cdf0e10cSrcweir {
3862cdf0e10cSrcweir // Cursor stand auf einem Object
3863cdf0e10cSrcweir rSh.CallEvent( SFX_EVENT_MOUSEOUT_OBJECT,
3864cdf0e10cSrcweir aLastCallEvent, sal_True );
3865cdf0e10cSrcweir }
3866cdf0e10cSrcweir
3867cdf0e10cSrcweir if( bTstShdwCrsr && bInsWin && !bIsDocReadOnly &&
3868cdf0e10cSrcweir !bInsFrm &&
3869cdf0e10cSrcweir !rSh.GetViewOptions()->getBrowseMode() &&
3870cdf0e10cSrcweir rSh.GetViewOptions()->IsShadowCursor() &&
3871cdf0e10cSrcweir !(rMEvt.GetModifier() + rMEvt.GetButtons()) &&
3872cdf0e10cSrcweir !rSh.HasSelection() && !GetConnectMetaFile() )
3873cdf0e10cSrcweir {
3874cdf0e10cSrcweir SwRect aRect;
3875cdf0e10cSrcweir sal_Int16 eOrient;
3876cdf0e10cSrcweir SwFillMode eMode = (SwFillMode)rSh.GetViewOptions()->GetShdwCrsrFillMode();
3877cdf0e10cSrcweir if( rSh.GetShadowCrsrPos( aDocPt, eMode, aRect, eOrient ))
3878cdf0e10cSrcweir {
3879cdf0e10cSrcweir if( !pShadCrsr )
3880cdf0e10cSrcweir pShadCrsr = new SwShadowCursor( *this,
3881cdf0e10cSrcweir SwViewOption::GetDirectCursorColor() );
3882cdf0e10cSrcweir if( text::HoriOrientation::RIGHT != eOrient && text::HoriOrientation::CENTER != eOrient )
3883cdf0e10cSrcweir eOrient = text::HoriOrientation::LEFT;
3884cdf0e10cSrcweir pShadCrsr->SetPos( aRect.Pos(), aRect.Height(), static_cast< sal_uInt16 >(eOrient) );
3885cdf0e10cSrcweir bDelShadCrsr = sal_False;
3886cdf0e10cSrcweir }
3887cdf0e10cSrcweir }
3888cdf0e10cSrcweir }
3889cdf0e10cSrcweir break;
3890cdf0e10cSrcweir case MOUSE_LEFT + KEY_MOD2:
3891cdf0e10cSrcweir if( rSh.IsBlockMode() && !rMEvt.IsSynthetic() )
3892cdf0e10cSrcweir {
3893cdf0e10cSrcweir (rSh.*rSh.fnDrag)( &aDocPt,sal_False );
3894cdf0e10cSrcweir bValidCrsrPos = !(CRSR_POSCHG & (rSh.*rSh.fnSetCrsr)(&aDocPt,sal_False));
3895cdf0e10cSrcweir EnterArea();
3896cdf0e10cSrcweir }
3897cdf0e10cSrcweir break;
3898cdf0e10cSrcweir }
3899cdf0e10cSrcweir
3900cdf0e10cSrcweir if( bDelShadCrsr && pShadCrsr )
3901cdf0e10cSrcweir delete pShadCrsr, pShadCrsr = 0;
3902cdf0e10cSrcweir bWasShdwCrsr = sal_False;
3903cdf0e10cSrcweir }
3904cdf0e10cSrcweir
3905cdf0e10cSrcweir /*--------------------------------------------------------------------
3906cdf0e10cSrcweir Beschreibung: Button Up
3907cdf0e10cSrcweir --------------------------------------------------------------------*/
3908cdf0e10cSrcweir
3909cdf0e10cSrcweir
MouseButtonUp(const MouseEvent & rMEvt)3910cdf0e10cSrcweir void SwEditWin::MouseButtonUp(const MouseEvent& rMEvt)
3911cdf0e10cSrcweir {
3912cdf0e10cSrcweir sal_Bool bCallBase = sal_True;
3913cdf0e10cSrcweir
3914cdf0e10cSrcweir sal_Bool bCallShadowCrsr = bWasShdwCrsr;
3915cdf0e10cSrcweir bWasShdwCrsr = sal_False;
3916cdf0e10cSrcweir if( pShadCrsr )
3917cdf0e10cSrcweir delete pShadCrsr, pShadCrsr = 0;
3918cdf0e10cSrcweir
3919cdf0e10cSrcweir if( pRowColumnSelectionStart )
3920cdf0e10cSrcweir DELETEZ( pRowColumnSelectionStart );
3921cdf0e10cSrcweir
3922cdf0e10cSrcweir SdrHdlKind eOldSdrMoveHdl = eSdrMoveHdl;
3923cdf0e10cSrcweir eSdrMoveHdl = HDL_USER; // fuer die MoveEvents - wieder zuruecksetzen
3924cdf0e10cSrcweir
3925cdf0e10cSrcweir // sicherheitshalber zuruecksetzen Bug 27900
3926cdf0e10cSrcweir rView.SetTabColFromDoc( sal_False );
3927cdf0e10cSrcweir rView.SetNumRuleNodeFromDoc(NULL);
3928cdf0e10cSrcweir
3929cdf0e10cSrcweir SwWrtShell &rSh = rView.GetWrtShell();
3930cdf0e10cSrcweir SET_CURR_SHELL( &rSh );
3931cdf0e10cSrcweir SdrView *pSdrView = rSh.GetDrawView();
3932cdf0e10cSrcweir if ( pSdrView )
3933cdf0e10cSrcweir {
3934cdf0e10cSrcweir pSdrView->SetOrtho(sal_False);
3935cdf0e10cSrcweir
3936cdf0e10cSrcweir if ( pSdrView->MouseButtonUp( rMEvt,this ) )
3937cdf0e10cSrcweir {
3938cdf0e10cSrcweir rSh.GetView().GetViewFrame()->GetBindings().InvalidateAll(sal_False);
3939cdf0e10cSrcweir return; // Event von der SdrView ausgewertet
3940cdf0e10cSrcweir }
3941cdf0e10cSrcweir }
3942cdf0e10cSrcweir //MouseButtonUp nur bearbeiten, wenn auch das Down an dieses Fenster ging.
3943cdf0e10cSrcweir if ( !bMBPressed )
3944cdf0e10cSrcweir {
3945cdf0e10cSrcweir return;
3946cdf0e10cSrcweir }
3947cdf0e10cSrcweir
3948cdf0e10cSrcweir Point aDocPt( PixelToLogic( rMEvt.GetPosPixel() ) );
3949cdf0e10cSrcweir
3950cdf0e10cSrcweir if ( bDDTimerStarted )
3951cdf0e10cSrcweir {
3952cdf0e10cSrcweir StopDDTimer( &rSh, aDocPt );
3953cdf0e10cSrcweir bMBPressed = sal_False;
3954cdf0e10cSrcweir if ( rSh.IsSelFrmMode() )
3955cdf0e10cSrcweir {
3956cdf0e10cSrcweir (rSh.*rSh.fnEndDrag)( &aDocPt, sal_False );
3957cdf0e10cSrcweir bFrmDrag = sal_False;
3958cdf0e10cSrcweir }
3959cdf0e10cSrcweir bNoInterrupt = sal_False;
3960cdf0e10cSrcweir ReleaseMouse();
3961cdf0e10cSrcweir return;
3962cdf0e10cSrcweir }
3963cdf0e10cSrcweir
3964cdf0e10cSrcweir if( pAnchorMarker )
3965cdf0e10cSrcweir {
39664772d9afSArmin Le Grand if(pAnchorMarker->GetHdl())
39674772d9afSArmin Le Grand {
39685b40a975SOliver-Rainer Wittmann // delete selected after drag
39694772d9afSArmin Le Grand pAnchorMarker->GetHdl()->SetSelected(false);
39704772d9afSArmin Le Grand }
39714772d9afSArmin Le Grand
3972cdf0e10cSrcweir Point aPnt( pAnchorMarker->GetLastPos() );
3973cdf0e10cSrcweir DELETEZ( pAnchorMarker );
3974cdf0e10cSrcweir if( aPnt.X() || aPnt.Y() )
3975cdf0e10cSrcweir rSh.FindAnchorPos( aPnt, sal_True );
3976cdf0e10cSrcweir }
3977cdf0e10cSrcweir if ( bInsDraw && rView.GetDrawFuncPtr() )
3978cdf0e10cSrcweir {
3979cdf0e10cSrcweir if ( rView.GetDrawFuncPtr()->MouseButtonUp( rMEvt ) )
3980cdf0e10cSrcweir {
3981cdf0e10cSrcweir if (rView.GetDrawFuncPtr()) // Koennte im MouseButtonUp zerstoert worden sein
3982cdf0e10cSrcweir {
3983cdf0e10cSrcweir rView.GetDrawFuncPtr()->Deactivate();
3984cdf0e10cSrcweir
3985cdf0e10cSrcweir if (!rView.IsDrawMode())
3986cdf0e10cSrcweir {
3987cdf0e10cSrcweir rView.SetDrawFuncPtr(NULL);
3988cdf0e10cSrcweir SfxBindings& rBind = rView.GetViewFrame()->GetBindings();
3989cdf0e10cSrcweir rBind.Invalidate( SID_ATTR_SIZE );
3990cdf0e10cSrcweir rBind.Invalidate( SID_TABLE_CELL );
3991cdf0e10cSrcweir }
3992cdf0e10cSrcweir }
3993cdf0e10cSrcweir
3994cdf0e10cSrcweir if ( rSh.IsObjSelected() )
3995cdf0e10cSrcweir {
3996cdf0e10cSrcweir rSh.EnterSelFrmMode();
3997cdf0e10cSrcweir if (!rView.GetDrawFuncPtr())
3998cdf0e10cSrcweir StdDrawMode( OBJ_NONE, sal_True );
3999cdf0e10cSrcweir }
4000cdf0e10cSrcweir else if ( rSh.IsFrmSelected() )
4001cdf0e10cSrcweir {
4002cdf0e10cSrcweir rSh.EnterSelFrmMode();
4003cdf0e10cSrcweir StopInsFrm();
4004cdf0e10cSrcweir }
4005cdf0e10cSrcweir else
4006cdf0e10cSrcweir {
4007cdf0e10cSrcweir const Point aDocPos( PixelToLogic( aStartPos ) );
4008cdf0e10cSrcweir bValidCrsrPos = !(CRSR_POSCHG & (rSh.*rSh.fnSetCrsr)(&aDocPos,sal_False));
4009cdf0e10cSrcweir rSh.Edit();
4010cdf0e10cSrcweir }
4011cdf0e10cSrcweir
4012cdf0e10cSrcweir rView.AttrChangedNotify( &rSh );
4013cdf0e10cSrcweir }
4014cdf0e10cSrcweir else if (rMEvt.GetButtons() == MOUSE_RIGHT && rSh.IsDrawCreate())
4015cdf0e10cSrcweir rView.GetDrawFuncPtr()->BreakCreate(); // Zeichnen abbrechen
4016cdf0e10cSrcweir
4017cdf0e10cSrcweir bNoInterrupt = sal_False;
4018cdf0e10cSrcweir ReleaseMouse();
4019cdf0e10cSrcweir return;
4020cdf0e10cSrcweir }
4021cdf0e10cSrcweir sal_Bool bPopMode = sal_False;
4022cdf0e10cSrcweir switch ( rMEvt.GetModifier() + rMEvt.GetButtons() )
4023cdf0e10cSrcweir {
4024cdf0e10cSrcweir case MOUSE_LEFT:
4025cdf0e10cSrcweir if ( bInsDraw && rSh.IsDrawCreate() )
4026cdf0e10cSrcweir {
4027cdf0e10cSrcweir if ( rView.GetDrawFuncPtr() && rView.GetDrawFuncPtr()->MouseButtonUp(rMEvt) == sal_True )
4028cdf0e10cSrcweir {
4029cdf0e10cSrcweir rView.GetDrawFuncPtr()->Deactivate();
4030cdf0e10cSrcweir rView.AttrChangedNotify( &rSh );
4031cdf0e10cSrcweir if ( rSh.IsObjSelected() )
4032cdf0e10cSrcweir rSh.EnterSelFrmMode();
4033cdf0e10cSrcweir if ( rView.GetDrawFuncPtr() && bInsFrm )
4034cdf0e10cSrcweir StopInsFrm();
4035cdf0e10cSrcweir }
4036cdf0e10cSrcweir bCallBase = sal_False;
4037cdf0e10cSrcweir break;
4038cdf0e10cSrcweir }
4039cdf0e10cSrcweir case MOUSE_LEFT + KEY_MOD1:
4040cdf0e10cSrcweir case MOUSE_LEFT + KEY_MOD2:
4041cdf0e10cSrcweir case MOUSE_LEFT + KEY_SHIFT + KEY_MOD1:
4042cdf0e10cSrcweir if ( bFrmDrag && rSh.IsSelFrmMode() )
4043cdf0e10cSrcweir {
4044cdf0e10cSrcweir if ( rMEvt.IsMod1() ) //Kopieren und nicht moven.
4045cdf0e10cSrcweir {
4046cdf0e10cSrcweir //Drag abbrechen, statt dessen internes Copy verwenden
4047cdf0e10cSrcweir Rectangle aRect;
4048cdf0e10cSrcweir rSh.GetDrawView()->TakeActionRect( aRect );
4049cdf0e10cSrcweir if (!aRect.IsEmpty())
4050cdf0e10cSrcweir {
4051cdf0e10cSrcweir rSh.BreakDrag();
4052cdf0e10cSrcweir Point aEndPt, aSttPt;
4053cdf0e10cSrcweir if ( rSh.GetSelFrmType() & FRMTYPE_FLY_ATCNT )
4054cdf0e10cSrcweir {
4055cdf0e10cSrcweir aEndPt = aRect.TopLeft();
4056cdf0e10cSrcweir aSttPt = rSh.GetDrawView()->GetAllMarkedRect().TopLeft();
4057cdf0e10cSrcweir }
4058cdf0e10cSrcweir else
4059cdf0e10cSrcweir {
4060cdf0e10cSrcweir aEndPt = aRect.Center();
4061cdf0e10cSrcweir aSttPt = rSh.GetDrawView()->GetAllMarkedRect().Center();
4062cdf0e10cSrcweir }
4063cdf0e10cSrcweir if ( aSttPt != aEndPt )
4064cdf0e10cSrcweir {
4065cdf0e10cSrcweir rSh.StartUndo( UNDO_UI_DRAG_AND_COPY );
4066cdf0e10cSrcweir rSh.Copy(&rSh, aSttPt, aEndPt, sal_False);
4067cdf0e10cSrcweir rSh.EndUndo( UNDO_UI_DRAG_AND_COPY );
4068cdf0e10cSrcweir }
4069cdf0e10cSrcweir }
4070cdf0e10cSrcweir else
4071cdf0e10cSrcweir (rSh.*rSh.fnEndDrag)( &aDocPt,sal_False );
4072cdf0e10cSrcweir }
4073cdf0e10cSrcweir else
4074cdf0e10cSrcweir {
4075cdf0e10cSrcweir {
4076cdf0e10cSrcweir const SwFrmFmt* pFlyFmt;
4077cdf0e10cSrcweir const SvxMacro* pMacro;
4078cdf0e10cSrcweir
4079cdf0e10cSrcweir sal_uInt16 nEvent = HDL_MOVE == eOldSdrMoveHdl
4080cdf0e10cSrcweir ? SW_EVENT_FRM_MOVE
4081cdf0e10cSrcweir : SW_EVENT_FRM_RESIZE;
4082cdf0e10cSrcweir
4083cdf0e10cSrcweir if( 0 != ( pFlyFmt = rSh.GetFlyFrmFmt() ) &&
4084cdf0e10cSrcweir 0 != ( pMacro = pFlyFmt->GetMacro().GetMacroTable().
4085cdf0e10cSrcweir Get( nEvent )) )
4086cdf0e10cSrcweir {
4087cdf0e10cSrcweir const Point aSttPt( PixelToLogic( aStartPos ) );
4088cdf0e10cSrcweir aRszMvHdlPt = aDocPt;
4089cdf0e10cSrcweir sal_uInt16 nPos = 0;
4090cdf0e10cSrcweir SbxArrayRef xArgs = new SbxArray;
4091cdf0e10cSrcweir SbxVariableRef xVar = new SbxVariable;
4092cdf0e10cSrcweir xVar->PutString( pFlyFmt->GetName() );
4093cdf0e10cSrcweir xArgs->Put( &xVar, ++nPos );
4094cdf0e10cSrcweir
4095cdf0e10cSrcweir if( SW_EVENT_FRM_RESIZE == nEvent )
4096cdf0e10cSrcweir {
4097cdf0e10cSrcweir xVar = new SbxVariable;
4098cdf0e10cSrcweir xVar->PutUShort( static_cast< sal_uInt16 >(eOldSdrMoveHdl) );
4099cdf0e10cSrcweir xArgs->Put( &xVar, ++nPos );
4100cdf0e10cSrcweir }
4101cdf0e10cSrcweir
4102cdf0e10cSrcweir xVar = new SbxVariable;
4103cdf0e10cSrcweir xVar->PutLong( aDocPt.X() - aSttPt.X() );
4104cdf0e10cSrcweir xArgs->Put( &xVar, ++nPos );
4105cdf0e10cSrcweir xVar = new SbxVariable;
4106cdf0e10cSrcweir xVar->PutLong( aDocPt.Y() - aSttPt.Y() );
4107cdf0e10cSrcweir xArgs->Put( &xVar, ++nPos );
4108cdf0e10cSrcweir
4109cdf0e10cSrcweir xVar = new SbxVariable;
4110cdf0e10cSrcweir xVar->PutUShort( 1 );
4111cdf0e10cSrcweir xArgs->Put( &xVar, ++nPos );
4112cdf0e10cSrcweir
4113cdf0e10cSrcweir ReleaseMouse();
4114cdf0e10cSrcweir
4115cdf0e10cSrcweir rSh.ExecMacro( *pMacro, 0, &xArgs );
4116cdf0e10cSrcweir
4117cdf0e10cSrcweir CaptureMouse();
4118cdf0e10cSrcweir }
4119cdf0e10cSrcweir }
4120cdf0e10cSrcweir (rSh.*rSh.fnEndDrag)( &aDocPt,sal_False );
4121cdf0e10cSrcweir }
4122cdf0e10cSrcweir bFrmDrag = sal_False;
4123cdf0e10cSrcweir bCallBase = sal_False;
4124cdf0e10cSrcweir break;
4125cdf0e10cSrcweir }
4126cdf0e10cSrcweir bPopMode = sal_True;
4127cdf0e10cSrcweir // no break
4128cdf0e10cSrcweir case MOUSE_LEFT + KEY_SHIFT:
4129cdf0e10cSrcweir if (rSh.IsSelFrmMode())
4130cdf0e10cSrcweir {
4131cdf0e10cSrcweir
4132cdf0e10cSrcweir (rSh.*rSh.fnEndDrag)( &aDocPt, sal_False );
4133cdf0e10cSrcweir bFrmDrag = sal_False;
4134cdf0e10cSrcweir bCallBase = sal_False;
4135cdf0e10cSrcweir break;
4136cdf0e10cSrcweir }
4137cdf0e10cSrcweir
4138cdf0e10cSrcweir if( bHoldSelection )
4139cdf0e10cSrcweir {
4140cdf0e10cSrcweir //JP 27.04.99: Bug 65389 - das EndDrag sollte auf jedenfall
4141cdf0e10cSrcweir // gerufen werden.
4142cdf0e10cSrcweir bHoldSelection = sal_False;
4143cdf0e10cSrcweir (rSh.*rSh.fnEndDrag)( &aDocPt, sal_False );
4144cdf0e10cSrcweir }
4145cdf0e10cSrcweir else
4146cdf0e10cSrcweir {
4147cdf0e10cSrcweir if ( !rSh.IsInSelect() && rSh.ChgCurrPam( aDocPt ) )
4148cdf0e10cSrcweir {
4149cdf0e10cSrcweir const sal_Bool bTmpNoInterrupt = bNoInterrupt;
4150cdf0e10cSrcweir bNoInterrupt = sal_False;
4151*2b518738Smseidel { // nur temp. Move-Context aufspannen, da sonst die
4152cdf0e10cSrcweir // Abfrage auf die Inhaltsform nicht funktioniert!!!
4153*2b518738Smseidel MV_CONTEXT( &rSh );
4154cdf0e10cSrcweir const Point aDocPos( PixelToLogic( aStartPos ) );
4155cdf0e10cSrcweir bValidCrsrPos = !(CRSR_POSCHG & (rSh.*rSh.fnSetCrsr)(&aDocPos,sal_False));
4156cdf0e10cSrcweir }
4157cdf0e10cSrcweir bNoInterrupt = bTmpNoInterrupt;
4158cdf0e10cSrcweir
4159cdf0e10cSrcweir }
4160cdf0e10cSrcweir else
4161cdf0e10cSrcweir {
4162cdf0e10cSrcweir sal_Bool bInSel = rSh.IsInSelect();
4163cdf0e10cSrcweir (rSh.*rSh.fnEndDrag)( &aDocPt, sal_False );
4164cdf0e10cSrcweir
4165cdf0e10cSrcweir // Internetfield? --> Link-Callen (DocLaden!!)
4166cdf0e10cSrcweir //JP 18.10.96: Bug 32437 -
4167cdf0e10cSrcweir // if( !rSh.HasSelection() )
4168cdf0e10cSrcweir if( !bInSel )
4169cdf0e10cSrcweir {
4170cdf0e10cSrcweir sal_uInt16 nFilter = URLLOAD_NOFILTER;
4171cdf0e10cSrcweir if( KEY_MOD1 == rMEvt.GetModifier() )
4172cdf0e10cSrcweir nFilter |= URLLOAD_NEWVIEW;
4173cdf0e10cSrcweir
4174cdf0e10cSrcweir sal_Bool bExecHyperlinks = rView.GetDocShell()->IsReadOnly();
4175cdf0e10cSrcweir if ( !bExecHyperlinks )
4176cdf0e10cSrcweir {
4177cdf0e10cSrcweir SvtSecurityOptions aSecOpts;
4178cdf0e10cSrcweir const sal_Bool bSecureOption = aSecOpts.IsOptionSet( SvtSecurityOptions::E_CTRLCLICK_HYPERLINK );
4179cdf0e10cSrcweir if ( ( bSecureOption && rMEvt.GetModifier() == KEY_MOD1 ) ||
4180cdf0e10cSrcweir ( !bSecureOption && rMEvt.GetModifier() != KEY_MOD1 ) )
4181cdf0e10cSrcweir bExecHyperlinks = sal_True;
4182cdf0e10cSrcweir }
4183cdf0e10cSrcweir
4184cdf0e10cSrcweir const sal_Bool bExecSmarttags = rMEvt.GetModifier() == KEY_MOD1;
4185cdf0e10cSrcweir
4186cdf0e10cSrcweir if(pApplyTempl)
4187cdf0e10cSrcweir bExecHyperlinks = sal_False;
4188cdf0e10cSrcweir
4189cdf0e10cSrcweir SwContentAtPos aCntntAtPos( SwContentAtPos::SW_CLICKFIELD |
4190cdf0e10cSrcweir SwContentAtPos::SW_INETATTR |
4191cdf0e10cSrcweir SwContentAtPos::SW_SMARTTAG | SwContentAtPos::SW_FORMCTRL);
4192cdf0e10cSrcweir
4193cdf0e10cSrcweir if( rSh.GetContentAtPos( aDocPt, aCntntAtPos, sal_True ) )
4194cdf0e10cSrcweir {
4195cdf0e10cSrcweir sal_Bool bViewLocked = rSh.IsViewLocked();
4196cdf0e10cSrcweir if( !bViewLocked && !rSh.IsReadOnlyAvailable() &&
4197cdf0e10cSrcweir aCntntAtPos.IsInProtectSect() )
4198cdf0e10cSrcweir rSh.LockView( sal_True );
4199cdf0e10cSrcweir
4200cdf0e10cSrcweir ReleaseMouse();
4201cdf0e10cSrcweir
4202cdf0e10cSrcweir if( SwContentAtPos::SW_FIELD == aCntntAtPos.eCntntAtPos )
4203cdf0e10cSrcweir {
420469a74367SOliver-Rainer Wittmann if ( aCntntAtPos.pFndTxtAttr != NULL
420569a74367SOliver-Rainer Wittmann && aCntntAtPos.pFndTxtAttr->Which() == RES_TXTATR_INPUTFIELD )
420669a74367SOliver-Rainer Wittmann {
420769a74367SOliver-Rainer Wittmann // select content of Input Field, but exclude CH_TXT_ATR_INPUTFIELDSTART
420869a74367SOliver-Rainer Wittmann // and CH_TXT_ATR_INPUTFIELDEND
420969a74367SOliver-Rainer Wittmann rSh.SttSelect();
421069a74367SOliver-Rainer Wittmann rSh.SelectTxt( *(aCntntAtPos.pFndTxtAttr->GetStart()) + 1,
421169a74367SOliver-Rainer Wittmann *(aCntntAtPos.pFndTxtAttr->End()) - 1 );
421269a74367SOliver-Rainer Wittmann }
421369a74367SOliver-Rainer Wittmann else
421469a74367SOliver-Rainer Wittmann {
4215cdf0e10cSrcweir rSh.ClickToField( *aCntntAtPos.aFnd.pFld );
4216cdf0e10cSrcweir }
421769a74367SOliver-Rainer Wittmann }
4218cdf0e10cSrcweir else if ( SwContentAtPos::SW_SMARTTAG == aCntntAtPos.eCntntAtPos )
4219cdf0e10cSrcweir {
4220cdf0e10cSrcweir // execute smarttag menu
4221cdf0e10cSrcweir if ( bExecSmarttags && SwSmartTagMgr::Get().IsSmartTagsEnabled() )
4222cdf0e10cSrcweir rView.ExecSmartTagPopup( aDocPt );
4223cdf0e10cSrcweir }
4224cdf0e10cSrcweir else if ( SwContentAtPos::SW_FORMCTRL == aCntntAtPos.eCntntAtPos )
4225cdf0e10cSrcweir {
4226cdf0e10cSrcweir ASSERT( aCntntAtPos.aFnd.pFldmark != NULL, "where is my field ptr???");
4227cdf0e10cSrcweir if ( aCntntAtPos.aFnd.pFldmark != NULL)
4228cdf0e10cSrcweir {
4229cdf0e10cSrcweir IFieldmark *fieldBM = const_cast< IFieldmark* > ( aCntntAtPos.aFnd.pFldmark );
4230cdf0e10cSrcweir if (fieldBM->GetFieldname( ).equalsAscii( ODF_FORMCHECKBOX ) )
4231cdf0e10cSrcweir {
4232cdf0e10cSrcweir ICheckboxFieldmark* pCheckboxFm = dynamic_cast<ICheckboxFieldmark*>(fieldBM);
4233cdf0e10cSrcweir pCheckboxFm->SetChecked(!pCheckboxFm->IsChecked());
4234cdf0e10cSrcweir pCheckboxFm->Invalidate();
4235cdf0e10cSrcweir rSh.InvalidateWindows( rView.GetVisArea() );
4236cdf0e10cSrcweir } else if (fieldBM->GetFieldname().equalsAscii( ODF_FORMDROPDOWN) ) {
4237cdf0e10cSrcweir rView.ExecFieldPopup( aDocPt, fieldBM );
4238cdf0e10cSrcweir fieldBM->Invalidate();
4239cdf0e10cSrcweir rSh.InvalidateWindows( rView.GetVisArea() );
4240cdf0e10cSrcweir } else {
4241cdf0e10cSrcweir // unknown type..
4242cdf0e10cSrcweir }
4243cdf0e10cSrcweir }
4244cdf0e10cSrcweir }
4245cdf0e10cSrcweir else // if ( SwContentAtPos::SW_INETATTR == aCntntAtPos.eCntntAtPos )
4246cdf0e10cSrcweir {
4247cdf0e10cSrcweir if ( bExecHyperlinks )
4248cdf0e10cSrcweir rSh.ClickToINetAttr( *(SwFmtINetFmt*)aCntntAtPos.aFnd.pAttr, nFilter );
4249cdf0e10cSrcweir }
4250cdf0e10cSrcweir
4251cdf0e10cSrcweir rSh.LockView( bViewLocked );
4252cdf0e10cSrcweir bCallShadowCrsr = sal_False;
4253cdf0e10cSrcweir }
4254cdf0e10cSrcweir else
4255cdf0e10cSrcweir {
4256cdf0e10cSrcweir aCntntAtPos = SwContentAtPos( SwContentAtPos::SW_FTN );
4257cdf0e10cSrcweir if( !rSh.GetContentAtPos( aDocPt, aCntntAtPos, sal_True ) && bExecHyperlinks )
4258cdf0e10cSrcweir {
4259cdf0e10cSrcweir SdrViewEvent aVEvt;
4260cdf0e10cSrcweir
4261cdf0e10cSrcweir if (pSdrView)
4262cdf0e10cSrcweir pSdrView->PickAnything(rMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
4263cdf0e10cSrcweir
4264cdf0e10cSrcweir if (pSdrView && aVEvt.eEvent == SDREVENT_EXECUTEURL)
4265cdf0e10cSrcweir {
4266cdf0e10cSrcweir // URL-Feld getroffen
4267cdf0e10cSrcweir const SvxURLField *pField = aVEvt.pURLField;
4268cdf0e10cSrcweir if (pField)
4269cdf0e10cSrcweir {
4270cdf0e10cSrcweir String sURL(pField->GetURL());
4271cdf0e10cSrcweir String sTarget(pField->GetTargetFrame());
4272cdf0e10cSrcweir ::LoadURL( sURL, &rSh, nFilter, &sTarget);
4273cdf0e10cSrcweir }
4274cdf0e10cSrcweir bCallShadowCrsr = sal_False;
4275cdf0e10cSrcweir }
4276cdf0e10cSrcweir else
4277cdf0e10cSrcweir {
4278cdf0e10cSrcweir // Grafik getroffen
4279cdf0e10cSrcweir ReleaseMouse();
4280cdf0e10cSrcweir if( rSh.ClickToINetGrf( aDocPt, nFilter ))
4281cdf0e10cSrcweir bCallShadowCrsr = sal_False;
4282cdf0e10cSrcweir }
4283cdf0e10cSrcweir }
4284cdf0e10cSrcweir }
4285cdf0e10cSrcweir
4286cdf0e10cSrcweir if( bCallShadowCrsr &&
4287cdf0e10cSrcweir rSh.GetViewOptions()->IsShadowCursor() &&
4288cdf0e10cSrcweir MOUSE_LEFT == (rMEvt.GetModifier() + rMEvt.GetButtons()) &&
4289cdf0e10cSrcweir !rSh.HasSelection() &&
4290cdf0e10cSrcweir !GetConnectMetaFile() &&
4291cdf0e10cSrcweir rSh.VisArea().IsInside( aDocPt ))
4292cdf0e10cSrcweir {
4293cdf0e10cSrcweir SwUndoId nLastUndoId(UNDO_EMPTY);
4294cdf0e10cSrcweir if (rSh.GetLastUndoInfo(0, & nLastUndoId))
4295cdf0e10cSrcweir {
4296cdf0e10cSrcweir if (UNDO_INS_FROM_SHADOWCRSR == nLastUndoId)
4297cdf0e10cSrcweir {
4298cdf0e10cSrcweir rSh.Undo();
4299cdf0e10cSrcweir }
4300cdf0e10cSrcweir }
4301cdf0e10cSrcweir SwFillMode eMode = (SwFillMode)rSh.GetViewOptions()->GetShdwCrsrFillMode();
4302cdf0e10cSrcweir rSh.SetShadowCrsrPos( aDocPt, eMode );
4303cdf0e10cSrcweir }
4304cdf0e10cSrcweir }
4305cdf0e10cSrcweir }
4306cdf0e10cSrcweir bCallBase = sal_False;
4307cdf0e10cSrcweir
4308cdf0e10cSrcweir }
4309cdf0e10cSrcweir
4310cdf0e10cSrcweir // gfs. im Down gepushten Mode wieder zuruecksetzen
4311cdf0e10cSrcweir if ( bPopMode && bModePushed )
4312cdf0e10cSrcweir {
4313cdf0e10cSrcweir rSh.PopMode();
4314cdf0e10cSrcweir bModePushed = sal_False;
4315cdf0e10cSrcweir bCallBase = sal_False;
4316cdf0e10cSrcweir }
4317cdf0e10cSrcweir break;
4318cdf0e10cSrcweir
4319cdf0e10cSrcweir default:
4320cdf0e10cSrcweir ReleaseMouse();
4321cdf0e10cSrcweir return;
4322cdf0e10cSrcweir }
4323cdf0e10cSrcweir
4324cdf0e10cSrcweir if( pApplyTempl )
4325cdf0e10cSrcweir {
4326cdf0e10cSrcweir int eSelection = rSh.GetSelectionType();
4327cdf0e10cSrcweir SwFormatClipboard* pFormatClipboard = pApplyTempl->pFormatClipboard;
4328cdf0e10cSrcweir if( pFormatClipboard )//apply format paintbrush
4329cdf0e10cSrcweir {
4330cdf0e10cSrcweir // get some parameters
4331cdf0e10cSrcweir SwWrtShell& rWrtShell = rView.GetWrtShell();
4332cdf0e10cSrcweir SfxStyleSheetBasePool* pPool=0;
4333cdf0e10cSrcweir bool bNoCharacterFormats = false;
4334cdf0e10cSrcweir bool bNoParagraphFormats = false;
4335cdf0e10cSrcweir {
4336cdf0e10cSrcweir SwDocShell* pDocSh = rView.GetDocShell();
4337cdf0e10cSrcweir if(pDocSh)
4338cdf0e10cSrcweir pPool = pDocSh->GetStyleSheetPool();
4339cdf0e10cSrcweir if( (rMEvt.GetModifier()&KEY_MOD1) && (rMEvt.GetModifier()&KEY_SHIFT) )
4340cdf0e10cSrcweir bNoCharacterFormats = true;
4341cdf0e10cSrcweir else if( rMEvt.GetModifier() & KEY_MOD1 )
4342cdf0e10cSrcweir bNoParagraphFormats = true;
4343cdf0e10cSrcweir }
4344cdf0e10cSrcweir // execute paste
4345cdf0e10cSrcweir pFormatClipboard->Paste( rWrtShell, pPool, bNoCharacterFormats, bNoParagraphFormats );
4346cdf0e10cSrcweir
4347cdf0e10cSrcweir //if the clipboard is empty after paste remove the ApplyTemplate
4348cdf0e10cSrcweir if(!pFormatClipboard->HasContent())
4349cdf0e10cSrcweir SetApplyTemplate(SwApplyTemplate());
4350cdf0e10cSrcweir }
4351cdf0e10cSrcweir else if( pApplyTempl->nColor )
4352cdf0e10cSrcweir {
4353cdf0e10cSrcweir sal_uInt16 nId = 0;
4354cdf0e10cSrcweir switch( pApplyTempl->nColor )
4355cdf0e10cSrcweir {
4356cdf0e10cSrcweir case SID_ATTR_CHAR_COLOR_EXT:
4357cdf0e10cSrcweir nId = RES_CHRATR_COLOR;
4358cdf0e10cSrcweir break;
4359cdf0e10cSrcweir case SID_ATTR_CHAR_COLOR_BACKGROUND_EXT:
4360cdf0e10cSrcweir nId = RES_CHRATR_BACKGROUND;
4361cdf0e10cSrcweir break;
4362cdf0e10cSrcweir }
4363cdf0e10cSrcweir if( nId && (nsSelectionType::SEL_TXT|nsSelectionType::SEL_TBL) & eSelection)
4364cdf0e10cSrcweir {
4365cdf0e10cSrcweir if( rSh.IsSelection() && !rSh.HasReadonlySel() )
4366cdf0e10cSrcweir {
4367cdf0e10cSrcweir if(nId == RES_CHRATR_BACKGROUND)
4368cdf0e10cSrcweir {
4369cdf0e10cSrcweir Color aColor( COL_TRANSPARENT );
4370cdf0e10cSrcweir if( !SwEditWin::bTransparentBackColor )
4371cdf0e10cSrcweir aColor = SwEditWin::aTextBackColor;
437269a74367SOliver-Rainer Wittmann rSh.SetAttrItem( SvxBrushItem( aColor, nId ) );
4373cdf0e10cSrcweir }
4374cdf0e10cSrcweir else
437569a74367SOliver-Rainer Wittmann rSh.SetAttrItem( SvxColorItem(SwEditWin::aTextColor, nId) );
4376cdf0e10cSrcweir rSh.UnSetVisCrsr();
4377cdf0e10cSrcweir rSh.EnterStdMode();
4378cdf0e10cSrcweir rSh.SetVisCrsr(aDocPt);
4379cdf0e10cSrcweir
4380cdf0e10cSrcweir pApplyTempl->bUndo = sal_True;
4381cdf0e10cSrcweir bCallBase = sal_False;
4382cdf0e10cSrcweir aTemplateTimer.Stop();
4383cdf0e10cSrcweir }
4384cdf0e10cSrcweir else if(rMEvt.GetClicks() == 1)
4385cdf0e10cSrcweir {
4386cdf0e10cSrcweir // keine Selektion -> also Giesskanne abschalten
4387cdf0e10cSrcweir aTemplateTimer.Start();
4388cdf0e10cSrcweir }
4389cdf0e10cSrcweir }
4390cdf0e10cSrcweir }
4391cdf0e10cSrcweir else
4392cdf0e10cSrcweir {
4393cdf0e10cSrcweir String aStyleName;
4394cdf0e10cSrcweir switch ( pApplyTempl->eType )
4395cdf0e10cSrcweir {
4396cdf0e10cSrcweir case SFX_STYLE_FAMILY_PARA:
4397cdf0e10cSrcweir if( (( nsSelectionType::SEL_TXT | nsSelectionType::SEL_TBL )
4398cdf0e10cSrcweir & eSelection ) && !rSh.HasReadonlySel() )
4399cdf0e10cSrcweir {
4400cdf0e10cSrcweir rSh.SetTxtFmtColl( pApplyTempl->aColl.pTxtColl );
4401cdf0e10cSrcweir pApplyTempl->bUndo = sal_True;
4402cdf0e10cSrcweir bCallBase = sal_False;
4403cdf0e10cSrcweir if ( pApplyTempl->aColl.pTxtColl )
4404cdf0e10cSrcweir aStyleName = pApplyTempl->aColl.pTxtColl->GetName();
4405cdf0e10cSrcweir }
4406cdf0e10cSrcweir break;
4407cdf0e10cSrcweir case SFX_STYLE_FAMILY_CHAR:
4408cdf0e10cSrcweir if( (( nsSelectionType::SEL_TXT | nsSelectionType::SEL_TBL )
4409cdf0e10cSrcweir & eSelection ) && !rSh.HasReadonlySel() )
4410cdf0e10cSrcweir {
441169a74367SOliver-Rainer Wittmann rSh.SetAttrItem( SwFmtCharFmt(pApplyTempl->aColl.pCharFmt) );
4412cdf0e10cSrcweir rSh.UnSetVisCrsr();
4413cdf0e10cSrcweir rSh.EnterStdMode();
4414cdf0e10cSrcweir rSh.SetVisCrsr(aDocPt);
4415cdf0e10cSrcweir pApplyTempl->bUndo = sal_True;
4416cdf0e10cSrcweir bCallBase = sal_False;
4417cdf0e10cSrcweir if ( pApplyTempl->aColl.pCharFmt )
4418cdf0e10cSrcweir aStyleName = pApplyTempl->aColl.pCharFmt->GetName();
4419cdf0e10cSrcweir }
4420cdf0e10cSrcweir break;
4421cdf0e10cSrcweir case SFX_STYLE_FAMILY_FRAME :
4422cdf0e10cSrcweir {
4423cdf0e10cSrcweir const SwFrmFmt* pFmt = rSh.GetFmtFromObj( aDocPt );
4424cdf0e10cSrcweir if(PTR_CAST(SwFlyFrmFmt, pFmt))
4425cdf0e10cSrcweir {
4426cdf0e10cSrcweir rSh.SetFrmFmt( pApplyTempl->aColl.pFrmFmt, sal_False, &aDocPt );
4427cdf0e10cSrcweir pApplyTempl->bUndo = sal_True;
4428cdf0e10cSrcweir bCallBase = sal_False;
4429cdf0e10cSrcweir if( pApplyTempl->aColl.pFrmFmt )
4430cdf0e10cSrcweir aStyleName = pApplyTempl->aColl.pFrmFmt->GetName();
4431cdf0e10cSrcweir }
4432cdf0e10cSrcweir break;
4433cdf0e10cSrcweir }
4434cdf0e10cSrcweir case SFX_STYLE_FAMILY_PAGE:
4435cdf0e10cSrcweir // Kein Undo bei Seitenvorlagen
4436cdf0e10cSrcweir rSh.ChgCurPageDesc( *pApplyTempl->aColl.pPageDesc );
4437cdf0e10cSrcweir if ( pApplyTempl->aColl.pPageDesc )
4438cdf0e10cSrcweir aStyleName = pApplyTempl->aColl.pPageDesc->GetName();
4439cdf0e10cSrcweir bCallBase = sal_False;
4440cdf0e10cSrcweir break;
4441cdf0e10cSrcweir case SFX_STYLE_FAMILY_PSEUDO:
4442cdf0e10cSrcweir if( !rSh.HasReadonlySel() )
4443cdf0e10cSrcweir {
4444cdf0e10cSrcweir rSh.SetCurNumRule( *pApplyTempl->aColl.pNumRule,
4445cdf0e10cSrcweir false,
4446cdf0e10cSrcweir pApplyTempl->aColl.pNumRule->GetDefaultListId() );
4447cdf0e10cSrcweir bCallBase = sal_False;
4448cdf0e10cSrcweir pApplyTempl->bUndo = sal_True;
4449cdf0e10cSrcweir if( pApplyTempl->aColl.pNumRule )
4450cdf0e10cSrcweir aStyleName = pApplyTempl->aColl.pNumRule->GetName();
4451cdf0e10cSrcweir }
4452cdf0e10cSrcweir break;
4453cdf0e10cSrcweir }
4454cdf0e10cSrcweir
4455cdf0e10cSrcweir uno::Reference< frame::XDispatchRecorder > xRecorder =
4456cdf0e10cSrcweir rView.GetViewFrame()->GetBindings().GetRecorder();
4457cdf0e10cSrcweir if ( aStyleName.Len() && xRecorder.is() )
4458cdf0e10cSrcweir {
4459cdf0e10cSrcweir SfxShell *pSfxShell = lcl_GetShellFromDispatcher( rView, TYPE(SwTextShell) );
4460cdf0e10cSrcweir if ( pSfxShell )
4461cdf0e10cSrcweir {
4462cdf0e10cSrcweir SfxRequest aReq( rView.GetViewFrame(), SID_STYLE_APPLY );
4463cdf0e10cSrcweir aReq.AppendItem( SfxStringItem( SID_STYLE_APPLY, aStyleName ) );
4464cdf0e10cSrcweir aReq.AppendItem( SfxUInt16Item( SID_STYLE_FAMILY, (sal_uInt16) pApplyTempl->eType ) );
4465cdf0e10cSrcweir aReq.Done();
4466cdf0e10cSrcweir }
4467cdf0e10cSrcweir }
4468cdf0e10cSrcweir }
4469cdf0e10cSrcweir
4470cdf0e10cSrcweir }
4471cdf0e10cSrcweir ReleaseMouse();
4472cdf0e10cSrcweir // Hier kommen nur verarbeitete MouseEvents an; nur bei diesen duerfen
4473cdf0e10cSrcweir // die Modi zurueckgesetzt werden.
4474cdf0e10cSrcweir bMBPressed = sal_False;
4475cdf0e10cSrcweir
4476cdf0e10cSrcweir //sicherheitshalber aufrufen, da jetzt das Selektieren bestimmt zu Ende ist.
4477cdf0e10cSrcweir //Andernfalls koennte der Timeout des Timers Kummer machen.
4478cdf0e10cSrcweir EnterArea();
4479cdf0e10cSrcweir bNoInterrupt = sal_False;
4480cdf0e10cSrcweir
4481cdf0e10cSrcweir if (bCallBase)
4482cdf0e10cSrcweir Window::MouseButtonUp(rMEvt);
4483cdf0e10cSrcweir }
4484cdf0e10cSrcweir
4485cdf0e10cSrcweir
4486cdf0e10cSrcweir /*--------------------------------------------------------------------
4487cdf0e10cSrcweir Beschreibung: Vorlage anwenden
4488cdf0e10cSrcweir --------------------------------------------------------------------*/
4489cdf0e10cSrcweir
4490cdf0e10cSrcweir
SetApplyTemplate(const SwApplyTemplate & rTempl)4491cdf0e10cSrcweir void SwEditWin::SetApplyTemplate(const SwApplyTemplate &rTempl)
4492cdf0e10cSrcweir {
4493cdf0e10cSrcweir static sal_Bool bIdle = sal_False;
4494cdf0e10cSrcweir DELETEZ(pApplyTempl);
4495cdf0e10cSrcweir SwWrtShell &rSh = rView.GetWrtShell();
4496cdf0e10cSrcweir
4497cdf0e10cSrcweir if(rTempl.pFormatClipboard)
4498cdf0e10cSrcweir {
4499cdf0e10cSrcweir pApplyTempl = new SwApplyTemplate( rTempl );
4500cdf0e10cSrcweir SetPointer( POINTER_FILL );//@todo #i20119# maybe better a new brush pointer here in future
4501cdf0e10cSrcweir rSh.NoEdit( sal_False );
4502cdf0e10cSrcweir bIdle = rSh.GetViewOptions()->IsIdle();
4503cdf0e10cSrcweir ((SwViewOption *)rSh.GetViewOptions())->SetIdle( sal_False );
4504cdf0e10cSrcweir }
4505cdf0e10cSrcweir else if(rTempl.nColor)
4506cdf0e10cSrcweir {
4507cdf0e10cSrcweir pApplyTempl = new SwApplyTemplate( rTempl );
4508cdf0e10cSrcweir SetPointer( POINTER_FILL );
4509cdf0e10cSrcweir rSh.NoEdit( sal_False );
4510cdf0e10cSrcweir bIdle = rSh.GetViewOptions()->IsIdle();
4511cdf0e10cSrcweir ((SwViewOption *)rSh.GetViewOptions())->SetIdle( sal_False );
4512cdf0e10cSrcweir }
4513cdf0e10cSrcweir else if( rTempl.eType )
4514cdf0e10cSrcweir {
4515cdf0e10cSrcweir pApplyTempl = new SwApplyTemplate( rTempl );
4516cdf0e10cSrcweir SetPointer( POINTER_FILL );
4517cdf0e10cSrcweir rSh.NoEdit( sal_False );
4518cdf0e10cSrcweir bIdle = rSh.GetViewOptions()->IsIdle();
4519cdf0e10cSrcweir ((SwViewOption *)rSh.GetViewOptions())->SetIdle( sal_False );
4520cdf0e10cSrcweir }
4521cdf0e10cSrcweir else
4522cdf0e10cSrcweir {
4523cdf0e10cSrcweir SetPointer( POINTER_TEXT );
4524cdf0e10cSrcweir rSh.UnSetVisCrsr();
4525cdf0e10cSrcweir
4526cdf0e10cSrcweir ((SwViewOption *)rSh.GetViewOptions())->SetIdle( bIdle );
4527cdf0e10cSrcweir if ( !rSh.IsSelFrmMode() )
4528cdf0e10cSrcweir rSh.Edit();
4529cdf0e10cSrcweir }
4530cdf0e10cSrcweir
4531cdf0e10cSrcweir static sal_uInt16 __READONLY_DATA aInva[] =
4532cdf0e10cSrcweir {
4533cdf0e10cSrcweir SID_STYLE_WATERCAN,
4534cdf0e10cSrcweir SID_ATTR_CHAR_COLOR_EXT,
4535cdf0e10cSrcweir SID_ATTR_CHAR_COLOR_BACKGROUND_EXT,
4536cdf0e10cSrcweir 0
4537cdf0e10cSrcweir };
4538cdf0e10cSrcweir rView.GetViewFrame()->GetBindings().Invalidate(aInva);
4539cdf0e10cSrcweir }
4540cdf0e10cSrcweir
4541cdf0e10cSrcweir /*--------------------------------------------------------------------
4542cdf0e10cSrcweir Beschreibung: ctor
4543cdf0e10cSrcweir --------------------------------------------------------------------*/
4544cdf0e10cSrcweir
4545cdf0e10cSrcweir
SwEditWin(Window * pParent,SwView & rMyView)4546cdf0e10cSrcweir SwEditWin::SwEditWin(Window *pParent, SwView &rMyView):
4547cdf0e10cSrcweir Window(pParent, WinBits(WB_CLIPCHILDREN | WB_DIALOGCONTROL)),
4548cdf0e10cSrcweir DropTargetHelper( this ),
4549cdf0e10cSrcweir DragSourceHelper( this ),
4550cdf0e10cSrcweir
4551cdf0e10cSrcweir eBufferLanguage(LANGUAGE_DONTKNOW),
4552cdf0e10cSrcweir pApplyTempl(0),
4553cdf0e10cSrcweir pAnchorMarker( 0 ),
4554cdf0e10cSrcweir pUserMarker( 0 ),
4555cdf0e10cSrcweir pUserMarkerObj( 0 ),
4556cdf0e10cSrcweir pShadCrsr( 0 ),
4557cdf0e10cSrcweir pRowColumnSelectionStart( 0 ),
4558cdf0e10cSrcweir
4559cdf0e10cSrcweir rView( rMyView ),
4560cdf0e10cSrcweir
4561cdf0e10cSrcweir aActHitType(SDRHIT_NONE),
4562cdf0e10cSrcweir m_nDropFormat( 0 ),
4563cdf0e10cSrcweir m_nDropAction( 0 ),
4564cdf0e10cSrcweir m_nDropDestination( 0 ),
4565cdf0e10cSrcweir
4566cdf0e10cSrcweir nInsFrmColCount( 1 ),
4567cdf0e10cSrcweir eDrawMode(OBJ_NONE),
4568cdf0e10cSrcweir
4569cdf0e10cSrcweir bLockInput(sal_False),
4570cdf0e10cSrcweir bObjectSelect( sal_False ),
45715b40a975SOliver-Rainer Wittmann nKS_NUMDOWN_Count(0),
45725b40a975SOliver-Rainer Wittmann nKS_NUMINDENTINC_Count(0)
4573cdf0e10cSrcweir {
4574cdf0e10cSrcweir SetHelpId(HID_EDIT_WIN);
4575cdf0e10cSrcweir EnableChildTransparentMode();
4576cdf0e10cSrcweir SetDialogControlFlags( WINDOW_DLGCTRL_RETURN | WINDOW_DLGCTRL_WANTFOCUS );
4577cdf0e10cSrcweir
4578cdf0e10cSrcweir bLinkRemoved = bMBPressed = bInsDraw = bInsFrm =
4579cdf0e10cSrcweir bIsInDrag = bOldIdle = bOldIdleSet = bChainMode = bWasShdwCrsr = sal_False;
4580cdf0e10cSrcweir //#i42732# initially use the input language
4581cdf0e10cSrcweir bUseInputLanguage = sal_True;
4582cdf0e10cSrcweir
4583cdf0e10cSrcweir SetMapMode(MapMode(MAP_TWIP));
4584cdf0e10cSrcweir
4585cdf0e10cSrcweir SetPointer( POINTER_TEXT );
4586cdf0e10cSrcweir aTimer.SetTimeoutHdl(LINK(this, SwEditWin, TimerHandler));
4587cdf0e10cSrcweir
4588cdf0e10cSrcweir bTblInsDelMode = sal_False;
4589cdf0e10cSrcweir aKeyInputTimer.SetTimeout( 3000 );
4590cdf0e10cSrcweir aKeyInputTimer.SetTimeoutHdl(LINK(this, SwEditWin, KeyInputTimerHandler));
4591cdf0e10cSrcweir
4592cdf0e10cSrcweir aKeyInputFlushTimer.SetTimeout( 200 );
4593cdf0e10cSrcweir aKeyInputFlushTimer.SetTimeoutHdl(LINK(this, SwEditWin, KeyInputFlushHandler));
4594cdf0e10cSrcweir
4595cdf0e10cSrcweir // TemplatePointer fuer Farben soll nach Einfachclick
4596cdf0e10cSrcweir // ohne Selektion zurueckgesetzt werden
4597cdf0e10cSrcweir aTemplateTimer.SetTimeout(400);
4598cdf0e10cSrcweir aTemplateTimer.SetTimeoutHdl(LINK(this, SwEditWin, TemplateTimerHdl));
4599cdf0e10cSrcweir
4600cdf0e10cSrcweir //JP 16.12.98: temporaere Loesung!!! Sollte bei jeder Cursorbewegung
4601cdf0e10cSrcweir // den Font von der akt. einfuege Position setzen!
4602cdf0e10cSrcweir if( !rMyView.GetDocShell()->IsReadOnly() )
4603cdf0e10cSrcweir {
4604cdf0e10cSrcweir Font aFont;
4605cdf0e10cSrcweir SetInputContext( InputContext( aFont, INPUTCONTEXT_TEXT |
4606cdf0e10cSrcweir INPUTCONTEXT_EXTTEXTINPUT ) );
4607cdf0e10cSrcweir }
4608cdf0e10cSrcweir }
4609cdf0e10cSrcweir
4610cdf0e10cSrcweir
4611cdf0e10cSrcweir
~SwEditWin()4612cdf0e10cSrcweir SwEditWin::~SwEditWin()
4613cdf0e10cSrcweir {
4614cdf0e10cSrcweir aKeyInputTimer.Stop();
4615cdf0e10cSrcweir delete pShadCrsr;
4616cdf0e10cSrcweir delete pRowColumnSelectionStart;
4617cdf0e10cSrcweir if( pQuickHlpData->bClear && rView.GetWrtShellPtr() )
4618cdf0e10cSrcweir pQuickHlpData->Stop( rView.GetWrtShell() );
4619cdf0e10cSrcweir bExecuteDrag = sal_False;
4620cdf0e10cSrcweir delete pApplyTempl;
4621cdf0e10cSrcweir rView.SetDrawFuncPtr(NULL);
4622cdf0e10cSrcweir
4623cdf0e10cSrcweir if(pUserMarker)
4624cdf0e10cSrcweir {
4625cdf0e10cSrcweir delete pUserMarker;
4626cdf0e10cSrcweir }
4627cdf0e10cSrcweir
4628cdf0e10cSrcweir delete pAnchorMarker;
4629cdf0e10cSrcweir }
4630cdf0e10cSrcweir
4631cdf0e10cSrcweir
4632cdf0e10cSrcweir /******************************************************************************
4633cdf0e10cSrcweir * Beschreibung: DrawTextEditMode einschalten
4634cdf0e10cSrcweir ******************************************************************************/
4635cdf0e10cSrcweir
4636cdf0e10cSrcweir
EnterDrawTextMode(const Point & aDocPos)4637cdf0e10cSrcweir void SwEditWin::EnterDrawTextMode( const Point& aDocPos )
4638cdf0e10cSrcweir {
4639cdf0e10cSrcweir if ( rView.EnterDrawTextMode(aDocPos) == sal_True )
4640cdf0e10cSrcweir {
4641cdf0e10cSrcweir if (rView.GetDrawFuncPtr())
4642cdf0e10cSrcweir {
4643cdf0e10cSrcweir rView.GetDrawFuncPtr()->Deactivate();
4644cdf0e10cSrcweir rView.SetDrawFuncPtr(NULL);
4645cdf0e10cSrcweir rView.LeaveDrawCreate();
4646cdf0e10cSrcweir }
4647cdf0e10cSrcweir rView.NoRotate();
4648cdf0e10cSrcweir rView.AttrChangedNotify( &rView.GetWrtShell() );
4649cdf0e10cSrcweir }
4650cdf0e10cSrcweir }
4651cdf0e10cSrcweir
4652cdf0e10cSrcweir /******************************************************************************
4653cdf0e10cSrcweir * Beschreibung: DrawMode einschalten
4654cdf0e10cSrcweir ******************************************************************************/
4655cdf0e10cSrcweir
4656cdf0e10cSrcweir
4657cdf0e10cSrcweir
EnterDrawMode(const MouseEvent & rMEvt,const Point & aDocPos)4658cdf0e10cSrcweir sal_Bool SwEditWin::EnterDrawMode(const MouseEvent& rMEvt, const Point& aDocPos)
4659cdf0e10cSrcweir {
4660cdf0e10cSrcweir SwWrtShell &rSh = rView.GetWrtShell();
4661cdf0e10cSrcweir SdrView *pSdrView = rSh.GetDrawView();
4662cdf0e10cSrcweir
4663cdf0e10cSrcweir if ( rView.GetDrawFuncPtr() )
4664cdf0e10cSrcweir {
4665cdf0e10cSrcweir if (rSh.IsDrawCreate())
4666cdf0e10cSrcweir return sal_True;
4667cdf0e10cSrcweir
4668cdf0e10cSrcweir sal_Bool bRet = rView.GetDrawFuncPtr()->MouseButtonDown( rMEvt );
4669cdf0e10cSrcweir rView.AttrChangedNotify( &rSh );
4670cdf0e10cSrcweir return bRet;
4671cdf0e10cSrcweir }
4672cdf0e10cSrcweir
4673cdf0e10cSrcweir if ( pSdrView && pSdrView->IsTextEdit() )
4674cdf0e10cSrcweir {
4675cdf0e10cSrcweir sal_Bool bUnLockView = !rSh.IsViewLocked();
4676cdf0e10cSrcweir rSh.LockView( sal_True );
4677cdf0e10cSrcweir
4678cdf0e10cSrcweir rSh.EndTextEdit(); // Danebengeklickt, Ende mit Edit
4679cdf0e10cSrcweir rSh.SelectObj( aDocPos );
4680cdf0e10cSrcweir if ( !rSh.IsObjSelected() && !rSh.IsFrmSelected() )
4681cdf0e10cSrcweir rSh.LeaveSelFrmMode();
4682cdf0e10cSrcweir else
4683cdf0e10cSrcweir {
4684cdf0e10cSrcweir SwEditWin::nDDStartPosY = aDocPos.Y();
4685cdf0e10cSrcweir SwEditWin::nDDStartPosX = aDocPos.X();
4686cdf0e10cSrcweir bFrmDrag = sal_True;
4687cdf0e10cSrcweir }
4688cdf0e10cSrcweir if( bUnLockView )
4689cdf0e10cSrcweir rSh.LockView( sal_False );
4690cdf0e10cSrcweir rView.AttrChangedNotify( &rSh );
4691cdf0e10cSrcweir return sal_True;
4692cdf0e10cSrcweir }
4693cdf0e10cSrcweir return sal_False;
4694cdf0e10cSrcweir }
4695cdf0e10cSrcweir
4696cdf0e10cSrcweir /******************************************************************************
4697cdf0e10cSrcweir * Beschreibung:
4698cdf0e10cSrcweir ******************************************************************************/
4699cdf0e10cSrcweir
4700cdf0e10cSrcweir
4701cdf0e10cSrcweir
IsDrawSelMode()4702cdf0e10cSrcweir sal_Bool SwEditWin::IsDrawSelMode()
4703cdf0e10cSrcweir {
4704cdf0e10cSrcweir return IsObjectSelect();
4705cdf0e10cSrcweir }
4706cdf0e10cSrcweir
4707cdf0e10cSrcweir /******************************************************************************
4708cdf0e10cSrcweir * Beschreibung:
4709cdf0e10cSrcweir ******************************************************************************/
4710cdf0e10cSrcweir
4711cdf0e10cSrcweir
GetFocus()4712cdf0e10cSrcweir void SwEditWin::GetFocus()
4713cdf0e10cSrcweir {
4714cdf0e10cSrcweir if ( rView.GetPostItMgr()->HasActiveSidebarWin() )
4715cdf0e10cSrcweir {
4716cdf0e10cSrcweir rView.GetPostItMgr()->GrabFocusOnActiveSidebarWin();
4717cdf0e10cSrcweir }
4718cdf0e10cSrcweir else
4719cdf0e10cSrcweir {
4720cdf0e10cSrcweir rView.GotFocus();
4721cdf0e10cSrcweir Window::GetFocus();
4722cdf0e10cSrcweir rView.GetWrtShell().InvalidateAccessibleFocus();
4723cdf0e10cSrcweir }
4724cdf0e10cSrcweir }
4725cdf0e10cSrcweir
4726cdf0e10cSrcweir /******************************************************************************
4727cdf0e10cSrcweir * Beschreibung:
4728cdf0e10cSrcweir ******************************************************************************/
4729cdf0e10cSrcweir
4730cdf0e10cSrcweir
4731cdf0e10cSrcweir
LoseFocus()4732cdf0e10cSrcweir void SwEditWin::LoseFocus()
4733cdf0e10cSrcweir {
4734cdf0e10cSrcweir rView.GetWrtShell().InvalidateAccessibleFocus();
4735cdf0e10cSrcweir Window::LoseFocus();
4736cdf0e10cSrcweir if( pQuickHlpData->bClear )
4737cdf0e10cSrcweir pQuickHlpData->Stop( rView.GetWrtShell() );
4738cdf0e10cSrcweir rView.LostFocus();
4739cdf0e10cSrcweir }
4740cdf0e10cSrcweir
4741cdf0e10cSrcweir /******************************************************************************
4742cdf0e10cSrcweir * Beschreibung:
4743cdf0e10cSrcweir ******************************************************************************/
4744cdf0e10cSrcweir
4745cdf0e10cSrcweir
4746cdf0e10cSrcweir
Command(const CommandEvent & rCEvt)4747cdf0e10cSrcweir void SwEditWin::Command( const CommandEvent& rCEvt )
4748cdf0e10cSrcweir {
4749cdf0e10cSrcweir SwWrtShell &rSh = rView.GetWrtShell();
4750cdf0e10cSrcweir
4751cdf0e10cSrcweir if ( !rView.GetViewFrame() )
4752cdf0e10cSrcweir {
4753cdf0e10cSrcweir //Wenn der ViewFrame in Kuerze stirbt kein Popup mehr!
4754cdf0e10cSrcweir Window::Command(rCEvt);
4755cdf0e10cSrcweir return;
4756cdf0e10cSrcweir }
4757cdf0e10cSrcweir
4758cdf0e10cSrcweir // The command event is send to the window after a possible context
4759cdf0e10cSrcweir // menu from an inplace client has been closed. Now we have the chance
4760cdf0e10cSrcweir // to deactivate the inplace client without any problem regarding parent
4761cdf0e10cSrcweir // windows and code on the stack.
4762cdf0e10cSrcweir // For more information, see #126086# and #128122#
4763cdf0e10cSrcweir SfxInPlaceClient* pIPClient = rSh.GetSfxViewShell()->GetIPClient();
4764cdf0e10cSrcweir sal_Bool bIsOleActive = ( pIPClient && pIPClient->IsObjectInPlaceActive() );
4765cdf0e10cSrcweir if ( bIsOleActive && ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU ))
4766cdf0e10cSrcweir {
4767cdf0e10cSrcweir rSh.FinishOLEObj();
4768cdf0e10cSrcweir return;
4769cdf0e10cSrcweir }
4770cdf0e10cSrcweir
4771cdf0e10cSrcweir sal_Bool bCallBase = sal_True;
4772cdf0e10cSrcweir
4773cdf0e10cSrcweir switch ( rCEvt.GetCommand() )
4774cdf0e10cSrcweir {
4775cdf0e10cSrcweir case COMMAND_CONTEXTMENU:
4776cdf0e10cSrcweir {
4777cdf0e10cSrcweir const sal_uInt16 nId = SwInputChild::GetChildWindowId();
4778cdf0e10cSrcweir SwInputChild* pChildWin = (SwInputChild*)GetView().GetViewFrame()->
4779cdf0e10cSrcweir GetChildWindow( nId );
4780cdf0e10cSrcweir
4781cdf0e10cSrcweir if (rView.GetPostItMgr()->IsHit(rCEvt.GetMousePosPixel()))
4782cdf0e10cSrcweir return;
4783cdf0e10cSrcweir
4784cdf0e10cSrcweir if((!pChildWin || pChildWin->GetView() != &rView) &&
4785cdf0e10cSrcweir !rSh.IsDrawCreate() && !IsDrawAction())
4786cdf0e10cSrcweir {
4787cdf0e10cSrcweir SET_CURR_SHELL( &rSh );
4788cdf0e10cSrcweir if (!pApplyTempl)
4789cdf0e10cSrcweir {
4790cdf0e10cSrcweir if (bNoInterrupt == sal_True)
4791cdf0e10cSrcweir {
4792cdf0e10cSrcweir ReleaseMouse();
4793cdf0e10cSrcweir bNoInterrupt = sal_False;
4794cdf0e10cSrcweir bMBPressed = sal_False;
4795cdf0e10cSrcweir }
4796cdf0e10cSrcweir Point aDocPos( PixelToLogic( rCEvt.GetMousePosPixel() ) );
4797cdf0e10cSrcweir if ( !rCEvt.IsMouseEvent() )
4798cdf0e10cSrcweir aDocPos = rSh.GetCharRect().Center();
4799cdf0e10cSrcweir else
4800cdf0e10cSrcweir {
4801cdf0e10cSrcweir SelectMenuPosition(rSh, rCEvt.GetMousePosPixel());
4802cdf0e10cSrcweir rView.StopShellTimer();
4803cdf0e10cSrcweir
4804cdf0e10cSrcweir }
4805cdf0e10cSrcweir const Point aPixPos = LogicToPixel( aDocPos );
4806cdf0e10cSrcweir
4807cdf0e10cSrcweir if ( rView.GetDocShell()->IsReadOnly() )
4808cdf0e10cSrcweir {
4809cdf0e10cSrcweir SwReadOnlyPopup* pROPopup = new SwReadOnlyPopup( aDocPos, rView );
4810cdf0e10cSrcweir
4811cdf0e10cSrcweir ui::ContextMenuExecuteEvent aEvent;
4812cdf0e10cSrcweir aEvent.SourceWindow = VCLUnoHelper::GetInterface( this );
4813cdf0e10cSrcweir aEvent.ExecutePosition.X = aPixPos.X();
4814cdf0e10cSrcweir aEvent.ExecutePosition.Y = aPixPos.Y();
4815cdf0e10cSrcweir Menu* pMenu = 0;
4816cdf0e10cSrcweir ::rtl::OUString sMenuName =
4817cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "private:resource/ReadonlyContextMenu");
4818cdf0e10cSrcweir if( GetView().TryContextMenuInterception( *pROPopup, sMenuName, pMenu, aEvent ) )
4819cdf0e10cSrcweir {
4820cdf0e10cSrcweir if ( pMenu )
4821cdf0e10cSrcweir {
4822cdf0e10cSrcweir sal_uInt16 nExecId = ((PopupMenu*)pMenu)->Execute(this, aPixPos);
4823cdf0e10cSrcweir if( !::ExecuteMenuCommand( *static_cast<PopupMenu*>(pMenu), *rView.GetViewFrame(), nExecId ))
4824cdf0e10cSrcweir pROPopup->Execute(this, nExecId);
4825cdf0e10cSrcweir }
4826cdf0e10cSrcweir else
4827cdf0e10cSrcweir pROPopup->Execute(this, aPixPos);
4828cdf0e10cSrcweir }
4829cdf0e10cSrcweir delete pROPopup;
4830cdf0e10cSrcweir }
4831cdf0e10cSrcweir else if ( !rView.ExecSpellPopup( aDocPos ) )
4832cdf0e10cSrcweir GetView().GetViewFrame()->GetDispatcher()->ExecutePopup( 0, this, &aPixPos);
4833cdf0e10cSrcweir }
4834cdf0e10cSrcweir else if (pApplyTempl->bUndo)
4835cdf0e10cSrcweir rSh.Do(SwWrtShell::UNDO);
4836cdf0e10cSrcweir bCallBase = sal_False;
4837cdf0e10cSrcweir }
4838cdf0e10cSrcweir }
4839cdf0e10cSrcweir break;
4840cdf0e10cSrcweir
4841cdf0e10cSrcweir case COMMAND_WHEEL:
4842cdf0e10cSrcweir case COMMAND_STARTAUTOSCROLL:
4843cdf0e10cSrcweir case COMMAND_AUTOSCROLL:
4844cdf0e10cSrcweir if( pShadCrsr )
4845cdf0e10cSrcweir delete pShadCrsr, pShadCrsr = 0;
4846cdf0e10cSrcweir bCallBase = !rView.HandleWheelCommands( rCEvt );
4847cdf0e10cSrcweir break;
4848cdf0e10cSrcweir
4849cdf0e10cSrcweir case COMMAND_VOICE:
4850cdf0e10cSrcweir {
4851cdf0e10cSrcweir //ggf. an Outliner weiterleiten
4852cdf0e10cSrcweir if ( rSh.HasDrawView() && rSh.GetDrawView()->IsTextEdit() )
4853cdf0e10cSrcweir {
4854cdf0e10cSrcweir bCallBase = sal_False;
4855cdf0e10cSrcweir rSh.GetDrawView()->GetTextEditOutlinerView()->Command( rCEvt );
4856cdf0e10cSrcweir break;
4857cdf0e10cSrcweir }
4858cdf0e10cSrcweir
4859cdf0e10cSrcweir const CommandVoiceData *pCData = rCEvt.GetVoiceData();
4860cdf0e10cSrcweir if ( VOICECOMMANDTYPE_CONTROL == pCData->GetType() )
4861cdf0e10cSrcweir break;
4862cdf0e10cSrcweir
4863cdf0e10cSrcweir
4864cdf0e10cSrcweir sal_uInt16 nSlotId = 0;
4865cdf0e10cSrcweir SfxPoolItem *pItem = 0;
4866cdf0e10cSrcweir
4867cdf0e10cSrcweir switch ( pCData->GetCommand() )
4868cdf0e10cSrcweir {
4869cdf0e10cSrcweir case DICTATIONCOMMAND_NEWPARAGRAPH: nSlotId = FN_INSERT_BREAK; break;
4870cdf0e10cSrcweir case DICTATIONCOMMAND_NEWLINE: nSlotId = FN_INSERT_LINEBREAK; break;
4871cdf0e10cSrcweir case DICTATIONCOMMAND_LEFT: nSlotId = FN_PREV_WORD; break;
4872cdf0e10cSrcweir case DICTATIONCOMMAND_RIGHT: nSlotId = FN_NEXT_WORD; break;
4873cdf0e10cSrcweir case DICTATIONCOMMAND_UP: nSlotId = FN_LINE_UP; break;
4874cdf0e10cSrcweir case DICTATIONCOMMAND_DOWN: nSlotId = FN_LINE_DOWN; break;
4875cdf0e10cSrcweir case DICTATIONCOMMAND_UNDO: nSlotId = SID_UNDO; break;
4876cdf0e10cSrcweir case DICTATIONCOMMAND_REPEAT: nSlotId = SID_REPEAT; break;
4877cdf0e10cSrcweir case DICTATIONCOMMAND_DEL: nSlotId = FN_DELETE_BACK_WORD; break;
4878cdf0e10cSrcweir
4879cdf0e10cSrcweir case DICTATIONCOMMAND_BOLD_ON: nSlotId = SID_ATTR_CHAR_WEIGHT;
4880cdf0e10cSrcweir pItem = new SvxWeightItem( WEIGHT_BOLD, RES_CHRATR_WEIGHT );
4881cdf0e10cSrcweir break;
4882cdf0e10cSrcweir case DICTATIONCOMMAND_BOLD_OFF: nSlotId = SID_ATTR_CHAR_WEIGHT;
4883cdf0e10cSrcweir pItem = new SvxWeightItem( WEIGHT_NORMAL, RES_CHRATR_WEIGHT );
4884cdf0e10cSrcweir break;
4885cdf0e10cSrcweir case DICTATIONCOMMAND_UNDERLINE_ON: nSlotId = SID_ATTR_CHAR_UNDERLINE;
4886cdf0e10cSrcweir pItem = new SvxUnderlineItem( UNDERLINE_SINGLE, RES_CHRATR_WEIGHT );
4887cdf0e10cSrcweir break;
4888cdf0e10cSrcweir case DICTATIONCOMMAND_UNDERLINE_OFF:nSlotId = SID_ATTR_CHAR_UNDERLINE;
4889cdf0e10cSrcweir pItem = new SvxUnderlineItem( UNDERLINE_NONE, RES_CHRATR_UNDERLINE );
4890cdf0e10cSrcweir break;
4891cdf0e10cSrcweir case DICTATIONCOMMAND_ITALIC_ON: nSlotId = SID_ATTR_CHAR_POSTURE;
4892cdf0e10cSrcweir pItem = new SvxPostureItem( ITALIC_NORMAL, RES_CHRATR_POSTURE );
4893cdf0e10cSrcweir break;
4894cdf0e10cSrcweir case DICTATIONCOMMAND_ITALIC_OFF: nSlotId = SID_ATTR_CHAR_POSTURE;
4895cdf0e10cSrcweir pItem = new SvxPostureItem( ITALIC_NONE, RES_CHRATR_POSTURE );
4896cdf0e10cSrcweir break;
4897cdf0e10cSrcweir case DICTATIONCOMMAND_NUMBERING_ON:
489834760e49SOliver-Rainer Wittmann if ( !rSh.GetNumRuleAtCurrCrsrPos() )
4899cdf0e10cSrcweir nSlotId = FN_NUM_NUMBERING_ON;
4900cdf0e10cSrcweir break;
4901cdf0e10cSrcweir case DICTATIONCOMMAND_NUMBERING_OFF:
490234760e49SOliver-Rainer Wittmann if ( rSh.GetNumRuleAtCurrCrsrPos() )
4903cdf0e10cSrcweir nSlotId = FN_NUM_NUMBERING_ON;
4904cdf0e10cSrcweir break;
4905cdf0e10cSrcweir case DICTATIONCOMMAND_TAB:
4906cdf0e10cSrcweir {
4907cdf0e10cSrcweir rSh.Insert( '\t' );
4908cdf0e10cSrcweir }
4909cdf0e10cSrcweir break;
4910cdf0e10cSrcweir case DICTATIONCOMMAND_UNKNOWN:
4911cdf0e10cSrcweir {
4912cdf0e10cSrcweir rView.GetWrtShell().Insert( pCData->GetText() );
4913cdf0e10cSrcweir }
4914cdf0e10cSrcweir break;
4915cdf0e10cSrcweir
4916cdf0e10cSrcweir #ifdef DBG_UTIL
4917cdf0e10cSrcweir default:
4918870262e3SDon Lewis ASSERT( sal_False, "unknown speech command." );
4919cdf0e10cSrcweir #endif
4920cdf0e10cSrcweir }
4921cdf0e10cSrcweir if ( nSlotId )
4922cdf0e10cSrcweir {
4923cdf0e10cSrcweir bCallBase = sal_False;
4924cdf0e10cSrcweir if ( pItem )
4925cdf0e10cSrcweir {
4926cdf0e10cSrcweir const SfxPoolItem* aArgs[2];
4927cdf0e10cSrcweir aArgs[0] = pItem;
4928cdf0e10cSrcweir aArgs[1] = 0;
4929cdf0e10cSrcweir GetView().GetViewFrame()->GetBindings().Execute(
4930cdf0e10cSrcweir nSlotId, aArgs, 0, SFX_CALLMODE_STANDARD );
4931cdf0e10cSrcweir delete pItem;
4932cdf0e10cSrcweir }
4933cdf0e10cSrcweir else
4934cdf0e10cSrcweir GetView().GetViewFrame()->GetBindings().Execute( nSlotId );
4935cdf0e10cSrcweir }
4936cdf0e10cSrcweir }
4937cdf0e10cSrcweir break;
4938cdf0e10cSrcweir
4939cdf0e10cSrcweir case COMMAND_STARTEXTTEXTINPUT:
4940cdf0e10cSrcweir {
4941cdf0e10cSrcweir sal_Bool bIsDocReadOnly = rView.GetDocShell()->IsReadOnly() &&
4942cdf0e10cSrcweir rSh.IsCrsrReadonly();
4943cdf0e10cSrcweir if(!bIsDocReadOnly)
4944cdf0e10cSrcweir {
4945cdf0e10cSrcweir if( rSh.HasDrawView() && rSh.GetDrawView()->IsTextEdit() )
4946cdf0e10cSrcweir {
4947cdf0e10cSrcweir bCallBase = sal_False;
4948cdf0e10cSrcweir rSh.GetDrawView()->GetTextEditOutlinerView()->Command( rCEvt );
4949cdf0e10cSrcweir }
4950cdf0e10cSrcweir else
4951cdf0e10cSrcweir {
4952cdf0e10cSrcweir if( rSh.HasSelection() )
4953cdf0e10cSrcweir rSh.DelRight();
4954cdf0e10cSrcweir
4955cdf0e10cSrcweir bCallBase = sal_False;
4956cdf0e10cSrcweir LanguageType eInputLanguage = GetInputLanguage();
4957cdf0e10cSrcweir rSh.CreateExtTextInput(eInputLanguage);
4958cdf0e10cSrcweir }
4959cdf0e10cSrcweir }
4960cdf0e10cSrcweir break;
4961cdf0e10cSrcweir }
4962cdf0e10cSrcweir case COMMAND_ENDEXTTEXTINPUT:
4963cdf0e10cSrcweir {
4964cdf0e10cSrcweir sal_Bool bIsDocReadOnly = rView.GetDocShell()->IsReadOnly() &&
4965cdf0e10cSrcweir rSh.IsCrsrReadonly();
4966cdf0e10cSrcweir if(!bIsDocReadOnly)
4967cdf0e10cSrcweir {
4968cdf0e10cSrcweir if( rSh.HasDrawView() && rSh.GetDrawView()->IsTextEdit() )
4969cdf0e10cSrcweir {
4970cdf0e10cSrcweir bCallBase = sal_False;
4971cdf0e10cSrcweir rSh.GetDrawView()->GetTextEditOutlinerView()->Command( rCEvt );
4972cdf0e10cSrcweir }
4973cdf0e10cSrcweir else
4974cdf0e10cSrcweir {
4975cdf0e10cSrcweir bCallBase = sal_False;
4976cdf0e10cSrcweir String sRecord = rSh.DeleteExtTextInput();
4977cdf0e10cSrcweir uno::Reference< frame::XDispatchRecorder > xRecorder =
4978cdf0e10cSrcweir rView.GetViewFrame()->GetBindings().GetRecorder();
4979cdf0e10cSrcweir
4980cdf0e10cSrcweir if ( sRecord.Len() )
4981cdf0e10cSrcweir {
4982cdf0e10cSrcweir // #102812# convert quotes in IME text
4983721f84f2Smseidel // works on the last input character, this is especially in Korean text often done
4984cdf0e10cSrcweir // quotes that are inside of the string are not replaced!
4985cdf0e10cSrcweir const sal_Unicode aCh = sRecord.GetChar(sRecord.Len() - 1);
4986cdf0e10cSrcweir SvxAutoCorrCfg* pACfg = SvxAutoCorrCfg::Get();
4987cdf0e10cSrcweir SvxAutoCorrect* pACorr = pACfg->GetAutoCorrect();
4988cdf0e10cSrcweir if(pACorr &&
4989cdf0e10cSrcweir (( pACorr->IsAutoCorrFlag( ChgQuotes ) && ('\"' == aCh ))||
4990cdf0e10cSrcweir ( pACorr->IsAutoCorrFlag( ChgSglQuotes ) && ( '\'' == aCh))))
4991cdf0e10cSrcweir {
4992cdf0e10cSrcweir rSh.DelLeft();
4993cdf0e10cSrcweir rSh.AutoCorrect( *pACorr, aCh );
4994cdf0e10cSrcweir }
4995cdf0e10cSrcweir
4996cdf0e10cSrcweir if ( xRecorder.is() )
4997cdf0e10cSrcweir {
4998cdf0e10cSrcweir //Shell ermitteln
4999cdf0e10cSrcweir SfxShell *pSfxShell = lcl_GetShellFromDispatcher( rView, TYPE(SwTextShell) );
5000cdf0e10cSrcweir // Request generieren und recorden
5001cdf0e10cSrcweir if (pSfxShell)
5002cdf0e10cSrcweir {
5003cdf0e10cSrcweir SfxRequest aReq( rView.GetViewFrame(), FN_INSERT_STRING );
5004cdf0e10cSrcweir aReq.AppendItem( SfxStringItem( FN_INSERT_STRING, sRecord ) );
5005cdf0e10cSrcweir aReq.Done();
5006cdf0e10cSrcweir }
5007cdf0e10cSrcweir }
5008cdf0e10cSrcweir }
5009cdf0e10cSrcweir }
5010cdf0e10cSrcweir }
5011cdf0e10cSrcweir }
5012cdf0e10cSrcweir break;
5013cdf0e10cSrcweir case COMMAND_EXTTEXTINPUT:
5014cdf0e10cSrcweir {
5015cdf0e10cSrcweir sal_Bool bIsDocReadOnly = rView.GetDocShell()->IsReadOnly() &&
5016cdf0e10cSrcweir rSh.IsCrsrReadonly();
5017cdf0e10cSrcweir if(!bIsDocReadOnly)
5018cdf0e10cSrcweir {
5019cdf0e10cSrcweir QuickHelpData aTmpQHD;
5020cdf0e10cSrcweir if( pQuickHlpData->bClear )
5021cdf0e10cSrcweir {
5022cdf0e10cSrcweir aTmpQHD.Move( *pQuickHlpData );
5023cdf0e10cSrcweir pQuickHlpData->Stop( rSh );
5024cdf0e10cSrcweir }
5025cdf0e10cSrcweir String sWord;
5026cdf0e10cSrcweir if( rSh.HasDrawView() && rSh.GetDrawView()->IsTextEdit() )
5027cdf0e10cSrcweir {
5028cdf0e10cSrcweir bCallBase = sal_False;
5029cdf0e10cSrcweir rSh.GetDrawView()->GetTextEditOutlinerView()->Command( rCEvt );
5030cdf0e10cSrcweir }
5031cdf0e10cSrcweir else
5032cdf0e10cSrcweir {
5033cdf0e10cSrcweir const CommandExtTextInputData* pData = rCEvt.GetExtTextInputData();
5034cdf0e10cSrcweir if( pData )
5035cdf0e10cSrcweir {
5036cdf0e10cSrcweir sWord = pData->GetText();
5037cdf0e10cSrcweir bCallBase = sal_False;
5038cdf0e10cSrcweir rSh.SetExtTextInputData( *pData );
5039cdf0e10cSrcweir }
5040cdf0e10cSrcweir }
5041cdf0e10cSrcweir uno::Reference< frame::XDispatchRecorder > xRecorder =
5042cdf0e10cSrcweir rView.GetViewFrame()->GetBindings().GetRecorder();
5043cdf0e10cSrcweir if(!xRecorder.is())
5044cdf0e10cSrcweir {
5045cdf0e10cSrcweir SvxAutoCorrCfg* pACfg = SvxAutoCorrCfg::Get();
5046cdf0e10cSrcweir SvxAutoCorrect* pACorr = pACfg->GetAutoCorrect();
5047cdf0e10cSrcweir if( pACfg && pACorr &&
5048cdf0e10cSrcweir ( pACfg->IsAutoTextTip() ||
5049cdf0e10cSrcweir pACorr->GetSwFlags().bAutoCompleteWords ) &&
5050cdf0e10cSrcweir rSh.GetPrevAutoCorrWord( *pACorr, sWord ) )
5051cdf0e10cSrcweir {
5052cdf0e10cSrcweir ShowAutoTextCorrectQuickHelp(sWord, pACfg, pACorr, sal_True);
5053cdf0e10cSrcweir }
5054cdf0e10cSrcweir }
5055cdf0e10cSrcweir }
5056cdf0e10cSrcweir }
5057cdf0e10cSrcweir break;
5058cdf0e10cSrcweir case COMMAND_CURSORPOS:
5059af7a586eSTsutomu Uchino {
5060af7a586eSTsutomu Uchino sal_Bool bIsDocReadOnly = rView.GetDocShell()->IsReadOnly() &&
5061af7a586eSTsutomu Uchino rSh.IsCrsrReadonly();
5062af7a586eSTsutomu Uchino if ( !bIsDocReadOnly )
5063af7a586eSTsutomu Uchino {
5064af7a586eSTsutomu Uchino if( rSh.HasDrawView() && rSh.GetDrawView()->IsTextEdit() )
5065af7a586eSTsutomu Uchino {
5066af7a586eSTsutomu Uchino bCallBase = sal_False;
5067af7a586eSTsutomu Uchino rSh.GetDrawView()->GetTextEditOutlinerView()->Command( rCEvt );
5068af7a586eSTsutomu Uchino }
5069af7a586eSTsutomu Uchino else
5070af7a586eSTsutomu Uchino {
5071af7a586eSTsutomu Uchino const SwExtTextInput* pExtInp = rSh.GetDoc()->GetExtTextInput();
5072af7a586eSTsutomu Uchino if ( pExtInp )
5073af7a586eSTsutomu Uchino {
5074af7a586eSTsutomu Uchino // The carret placed at the end of the preedit.
5075af7a586eSTsutomu Uchino if ( POS_COLLIDE_START == ComparePosition( *pExtInp->End(), *pExtInp->End(),
5076af7a586eSTsutomu Uchino *rSh.GetCrsr()->End(), *rSh.GetCrsr()->End() ) )
5077af7a586eSTsutomu Uchino {
5078af7a586eSTsutomu Uchino SwRect aInputRect;
5079af7a586eSTsutomu Uchino if ( rSh.GetCharRectAt( aInputRect, *pExtInp->Start() ) )
5080af7a586eSTsutomu Uchino {
5081af7a586eSTsutomu Uchino Rectangle aRect( aInputRect.SVRect() );
5082af7a586eSTsutomu Uchino SetCursorRect( &aRect, 1 );
5083af7a586eSTsutomu Uchino bCallBase = sal_False;
5084af7a586eSTsutomu Uchino }
5085af7a586eSTsutomu Uchino }
5086af7a586eSTsutomu Uchino if ( bCallBase )
5087af7a586eSTsutomu Uchino SetCursorRect();
5088af7a586eSTsutomu Uchino }
5089af7a586eSTsutomu Uchino }
5090af7a586eSTsutomu Uchino }
5091af7a586eSTsutomu Uchino }
5092cdf0e10cSrcweir break;
5093cdf0e10cSrcweir
5094cdf0e10cSrcweir case COMMAND_PASTESELECTION:
5095cdf0e10cSrcweir if( !rView.GetDocShell()->IsReadOnly() )
5096cdf0e10cSrcweir {
5097cdf0e10cSrcweir TransferableDataHelper aDataHelper(
5098cdf0e10cSrcweir TransferableDataHelper::CreateFromSelection( this ));
5099cdf0e10cSrcweir if( !aDataHelper.GetXTransferable().is() )
5100cdf0e10cSrcweir break;
5101cdf0e10cSrcweir
5102cdf0e10cSrcweir sal_uLong nDropFormat;
5103cdf0e10cSrcweir sal_uInt16 nEventAction, nDropAction, nDropDestination;
5104cdf0e10cSrcweir nDropDestination = GetDropDestination( rCEvt.GetMousePosPixel() );
5105cdf0e10cSrcweir if( !nDropDestination )
5106cdf0e10cSrcweir break;
5107cdf0e10cSrcweir
5108cdf0e10cSrcweir nDropAction = SotExchange::GetExchangeAction(
5109cdf0e10cSrcweir aDataHelper.GetDataFlavorExVector(),
5110cdf0e10cSrcweir nDropDestination, EXCHG_IN_ACTION_COPY,
5111cdf0e10cSrcweir EXCHG_IN_ACTION_COPY, nDropFormat,
5112cdf0e10cSrcweir nEventAction );
5113cdf0e10cSrcweir if( EXCHG_INOUT_ACTION_NONE != nDropAction )
5114cdf0e10cSrcweir {
5115cdf0e10cSrcweir const Point aDocPt( PixelToLogic( rCEvt.GetMousePosPixel() ) );
5116cdf0e10cSrcweir SwTransferable::PasteData( aDataHelper, rSh, nDropAction,
5117cdf0e10cSrcweir nDropFormat, nDropDestination, sal_False,
5118cdf0e10cSrcweir sal_False, &aDocPt, EXCHG_IN_ACTION_COPY,
5119cdf0e10cSrcweir sal_True );
5120cdf0e10cSrcweir }
5121cdf0e10cSrcweir }
5122cdf0e10cSrcweir break;
5123cdf0e10cSrcweir case COMMAND_MODKEYCHANGE :
5124cdf0e10cSrcweir {
5125cdf0e10cSrcweir const CommandModKeyData* pCommandData = (const CommandModKeyData*)rCEvt.GetData();
5126cdf0e10cSrcweir if(pCommandData->IsMod1() && !pCommandData->IsMod2())
5127cdf0e10cSrcweir {
5128cdf0e10cSrcweir sal_uInt16 nSlot = 0;
5129cdf0e10cSrcweir if(pCommandData->IsLeftShift() && !pCommandData->IsRightShift())
5130cdf0e10cSrcweir nSlot = SID_ATTR_PARA_LEFT_TO_RIGHT;
5131cdf0e10cSrcweir else if(!pCommandData->IsLeftShift() && pCommandData->IsRightShift())
5132cdf0e10cSrcweir nSlot = SID_ATTR_PARA_RIGHT_TO_LEFT;
5133cdf0e10cSrcweir if(nSlot && SW_MOD()->GetCTLOptions().IsCTLFontEnabled())
5134cdf0e10cSrcweir GetView().GetViewFrame()->GetDispatcher()->Execute(nSlot);
5135cdf0e10cSrcweir }
5136cdf0e10cSrcweir }
5137cdf0e10cSrcweir break;
5138cdf0e10cSrcweir case COMMAND_HANGUL_HANJA_CONVERSION :
5139cdf0e10cSrcweir GetView().GetViewFrame()->GetDispatcher()->Execute(SID_HANGUL_HANJA_CONVERSION);
5140cdf0e10cSrcweir break;
5141cdf0e10cSrcweir case COMMAND_INPUTLANGUAGECHANGE :
5142cdf0e10cSrcweir //#i42732# update state of fontname if input language changes
5143cdf0e10cSrcweir bInputLanguageSwitched = true;
5144cdf0e10cSrcweir SetUseInputLanguage( sal_True );
5145cdf0e10cSrcweir break;
5146cdf0e10cSrcweir case COMMAND_SELECTIONCHANGE:
5147cdf0e10cSrcweir {
5148cdf0e10cSrcweir const CommandSelectionChangeData *pData = rCEvt.GetSelectionChangeData();
5149cdf0e10cSrcweir rSh.SttCrsrMove();
5150cdf0e10cSrcweir rSh.GoStartSentence();
5151cdf0e10cSrcweir rSh.GetCrsr()->GetPoint()->nContent += sal::static_int_cast<sal_uInt16, sal_uLong>(pData->GetStart());
5152cdf0e10cSrcweir rSh.SetMark();
5153cdf0e10cSrcweir rSh.GetCrsr()->GetMark()->nContent += sal::static_int_cast<sal_uInt16, sal_uLong>(pData->GetEnd() - pData->GetStart());
5154cdf0e10cSrcweir rSh.EndCrsrMove( sal_True );
5155cdf0e10cSrcweir }
5156cdf0e10cSrcweir break;
5157cdf0e10cSrcweir case COMMAND_PREPARERECONVERSION:
5158cdf0e10cSrcweir if( rSh.HasSelection() )
5159cdf0e10cSrcweir {
5160cdf0e10cSrcweir SwPaM *pCrsr = (SwPaM*)rSh.GetCrsr();
5161cdf0e10cSrcweir
5162cdf0e10cSrcweir if( rSh.IsMultiSelection() )
5163cdf0e10cSrcweir {
5164cdf0e10cSrcweir if( pCrsr && !pCrsr->HasMark() &&
5165cdf0e10cSrcweir pCrsr->GetPoint() == pCrsr->GetMark() )
5166cdf0e10cSrcweir {
5167cdf0e10cSrcweir rSh.GoPrevCrsr();
5168cdf0e10cSrcweir pCrsr = (SwPaM*)rSh.GetCrsr();
5169cdf0e10cSrcweir }
5170cdf0e10cSrcweir
5171cdf0e10cSrcweir // Cancel all selections other than the last selected one.
5172cdf0e10cSrcweir while( rSh.GetCrsr()->GetNext() != rSh.GetCrsr() )
5173cdf0e10cSrcweir delete rSh.GetCrsr()->GetNext();
5174cdf0e10cSrcweir }
5175cdf0e10cSrcweir
5176cdf0e10cSrcweir if( pCrsr )
5177cdf0e10cSrcweir {
5178cdf0e10cSrcweir sal_uLong nPosNodeIdx = pCrsr->GetPoint()->nNode.GetIndex();
5179cdf0e10cSrcweir xub_StrLen nPosIdx = pCrsr->GetPoint()->nContent.GetIndex();
5180cdf0e10cSrcweir sal_uLong nMarkNodeIdx = pCrsr->GetMark()->nNode.GetIndex();
5181cdf0e10cSrcweir xub_StrLen nMarkIdx = pCrsr->GetMark()->nContent.GetIndex();
5182cdf0e10cSrcweir
5183cdf0e10cSrcweir if( !rSh.GetCrsr()->HasMark() )
5184cdf0e10cSrcweir rSh.GetCrsr()->SetMark();
5185cdf0e10cSrcweir
5186cdf0e10cSrcweir rSh.SttCrsrMove();
5187cdf0e10cSrcweir
5188cdf0e10cSrcweir if( nPosNodeIdx < nMarkNodeIdx )
5189cdf0e10cSrcweir {
5190cdf0e10cSrcweir rSh.GetCrsr()->GetPoint()->nNode = nPosNodeIdx;
5191cdf0e10cSrcweir rSh.GetCrsr()->GetPoint()->nContent = nPosIdx;
5192cdf0e10cSrcweir rSh.GetCrsr()->GetMark()->nNode = nPosNodeIdx;
5193cdf0e10cSrcweir rSh.GetCrsr()->GetMark()->nContent =
5194cdf0e10cSrcweir rSh.GetCrsr()->GetCntntNode( sal_True )->Len();
5195cdf0e10cSrcweir }
5196cdf0e10cSrcweir else if( nPosNodeIdx == nMarkNodeIdx )
5197cdf0e10cSrcweir {
5198cdf0e10cSrcweir rSh.GetCrsr()->GetPoint()->nNode = nPosNodeIdx;
5199cdf0e10cSrcweir rSh.GetCrsr()->GetPoint()->nContent = nPosIdx;
5200cdf0e10cSrcweir rSh.GetCrsr()->GetMark()->nNode = nMarkNodeIdx;
5201cdf0e10cSrcweir rSh.GetCrsr()->GetMark()->nContent = nMarkIdx;
5202cdf0e10cSrcweir }
5203cdf0e10cSrcweir else
5204cdf0e10cSrcweir {
5205cdf0e10cSrcweir rSh.GetCrsr()->GetMark()->nNode = nMarkNodeIdx;
5206cdf0e10cSrcweir rSh.GetCrsr()->GetMark()->nContent = nMarkIdx;
5207cdf0e10cSrcweir rSh.GetCrsr()->GetPoint()->nNode = nMarkNodeIdx;
5208cdf0e10cSrcweir rSh.GetCrsr()->GetPoint()->nContent =
5209cdf0e10cSrcweir rSh.GetCrsr()->GetCntntNode( sal_False )->Len();
5210cdf0e10cSrcweir }
5211cdf0e10cSrcweir
5212cdf0e10cSrcweir rSh.EndCrsrMove( sal_True );
5213cdf0e10cSrcweir }
5214cdf0e10cSrcweir }
5215cdf0e10cSrcweir break;
5216cdf0e10cSrcweir #ifdef DBG_UTIL
5217cdf0e10cSrcweir default:
5218870262e3SDon Lewis ASSERT( sal_False, "unknown command." );
5219cdf0e10cSrcweir #endif
5220cdf0e10cSrcweir }
5221cdf0e10cSrcweir if (bCallBase)
5222cdf0e10cSrcweir Window::Command(rCEvt);
5223cdf0e10cSrcweir }
5224cdf0e10cSrcweir
5225cdf0e10cSrcweir /* -----------------25.08.2003 10:12-----------------
5226cdf0e10cSrcweir #i18686#: select the object/cursor at the mouse
5227cdf0e10cSrcweir position of the context menu request
5228cdf0e10cSrcweir --------------------------------------------------*/
SelectMenuPosition(SwWrtShell & rSh,const Point & rMousePos)5229cdf0e10cSrcweir sal_Bool SwEditWin::SelectMenuPosition(SwWrtShell& rSh, const Point& rMousePos )
5230cdf0e10cSrcweir {
5231cdf0e10cSrcweir sal_Bool bRet = sal_False;
5232cdf0e10cSrcweir const Point aDocPos( PixelToLogic( rMousePos ) );
5233cdf0e10cSrcweir const bool bIsInsideSelectedObj( rSh.IsInsideSelectedObj( aDocPos ) );
5234cdf0e10cSrcweir //create a synthetic mouse event out of the coordinates
5235cdf0e10cSrcweir MouseEvent aMEvt(rMousePos);
5236cdf0e10cSrcweir SdrView *pSdrView = rSh.GetDrawView();
5237cdf0e10cSrcweir if ( pSdrView )
5238cdf0e10cSrcweir {
52395b40a975SOliver-Rainer Wittmann // no close of insert_draw and reset of draw mode,
52405b40a975SOliver-Rainer Wittmann // if context menu position is inside a selected object.
5241cdf0e10cSrcweir if ( !bIsInsideSelectedObj && rView.GetDrawFuncPtr() )
5242cdf0e10cSrcweir {
5243cdf0e10cSrcweir
5244cdf0e10cSrcweir rView.GetDrawFuncPtr()->Deactivate();
5245cdf0e10cSrcweir rView.SetDrawFuncPtr(NULL);
5246cdf0e10cSrcweir rView.LeaveDrawCreate();
5247cdf0e10cSrcweir SfxBindings& rBind = rView.GetViewFrame()->GetBindings();
5248cdf0e10cSrcweir rBind.Invalidate( SID_ATTR_SIZE );
5249cdf0e10cSrcweir rBind.Invalidate( SID_TABLE_CELL );
5250cdf0e10cSrcweir }
5251cdf0e10cSrcweir
5252cdf0e10cSrcweir // if draw text is active and there's a text selection
5253cdf0e10cSrcweir // at the mouse position then do nothing
5254cdf0e10cSrcweir if(rSh.GetSelectionType() & nsSelectionType::SEL_DRW_TXT)
5255cdf0e10cSrcweir {
5256cdf0e10cSrcweir OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
5257cdf0e10cSrcweir ESelection aSelection = pOLV->GetSelection();
5258cdf0e10cSrcweir if(!aSelection.IsZero())
5259cdf0e10cSrcweir {
5260cdf0e10cSrcweir SdrOutliner* pOutliner = pSdrView->GetTextEditOutliner();
5261cdf0e10cSrcweir sal_Bool bVertical = pOutliner->IsVertical();
5262cdf0e10cSrcweir const EditEngine& rEditEng = pOutliner->GetEditEngine();
5263cdf0e10cSrcweir Point aEEPos(aDocPos);
5264cdf0e10cSrcweir const Rectangle& rOutputArea = pOLV->GetOutputArea();
5265cdf0e10cSrcweir // regard vertical mode
5266cdf0e10cSrcweir if(bVertical)
5267cdf0e10cSrcweir {
5268cdf0e10cSrcweir aEEPos -= rOutputArea.TopRight();
5269cdf0e10cSrcweir //invert the horizontal direction and exchange X and Y
5270cdf0e10cSrcweir long nTemp = -aEEPos.X();
5271cdf0e10cSrcweir aEEPos.X() = aEEPos.Y();
5272cdf0e10cSrcweir aEEPos.Y() = nTemp;
5273cdf0e10cSrcweir }
5274cdf0e10cSrcweir else
5275cdf0e10cSrcweir aEEPos -= rOutputArea.TopLeft();
5276cdf0e10cSrcweir
5277cdf0e10cSrcweir EPosition aDocPosition = rEditEng.FindDocPosition(aEEPos);
5278cdf0e10cSrcweir ESelection aCompare(aDocPosition.nPara, aDocPosition.nIndex);
5279cdf0e10cSrcweir // make it a forward selection - otherwise the IsLess/IsGreater do not work :-(
5280cdf0e10cSrcweir aSelection.Adjust();
5281cdf0e10cSrcweir if(!aCompare.IsLess(aSelection) && !aCompare.IsGreater(aSelection))
5282cdf0e10cSrcweir {
5283cdf0e10cSrcweir return sal_False;
5284cdf0e10cSrcweir }
5285cdf0e10cSrcweir }
5286cdf0e10cSrcweir
5287cdf0e10cSrcweir }
5288cdf0e10cSrcweir
5289cdf0e10cSrcweir if (pSdrView->MouseButtonDown( aMEvt, this ) )
5290cdf0e10cSrcweir {
5291cdf0e10cSrcweir pSdrView->MouseButtonUp( aMEvt, this );
5292cdf0e10cSrcweir rSh.GetView().GetViewFrame()->GetBindings().InvalidateAll(sal_False);
5293cdf0e10cSrcweir return sal_True;
5294cdf0e10cSrcweir }
5295cdf0e10cSrcweir }
5296cdf0e10cSrcweir rSh.ResetCursorStack();
5297cdf0e10cSrcweir
5298cdf0e10cSrcweir if ( EnterDrawMode( aMEvt, aDocPos ) )
5299cdf0e10cSrcweir {
5300cdf0e10cSrcweir return sal_True;
5301cdf0e10cSrcweir }
5302cdf0e10cSrcweir if ( rView.GetDrawFuncPtr() && bInsFrm )
5303cdf0e10cSrcweir {
5304cdf0e10cSrcweir StopInsFrm();
5305cdf0e10cSrcweir rSh.Edit();
5306cdf0e10cSrcweir }
5307cdf0e10cSrcweir
5308cdf0e10cSrcweir UpdatePointer( aDocPos, 0 );
5309cdf0e10cSrcweir
5310cdf0e10cSrcweir if( !rSh.IsSelFrmMode() &&
5311cdf0e10cSrcweir !GetView().GetViewFrame()->GetDispatcher()->IsLocked() )
5312cdf0e10cSrcweir {
5313cdf0e10cSrcweir // #107513#
5314cdf0e10cSrcweir // Test if there is a draw object at that position and if it should be selected.
5315cdf0e10cSrcweir sal_Bool bShould = rSh.ShouldObjectBeSelected(aDocPos);
5316cdf0e10cSrcweir
5317cdf0e10cSrcweir if(bShould)
5318cdf0e10cSrcweir {
5319cdf0e10cSrcweir rView.NoRotate();
5320cdf0e10cSrcweir rSh.HideCrsr();
5321cdf0e10cSrcweir
5322cdf0e10cSrcweir sal_Bool bUnLockView = !rSh.IsViewLocked();
5323cdf0e10cSrcweir rSh.LockView( sal_True );
5324cdf0e10cSrcweir sal_Bool bSelObj = rSh.SelectObj( aDocPos, 0);
5325cdf0e10cSrcweir if( bUnLockView )
5326cdf0e10cSrcweir rSh.LockView( sal_False );
5327cdf0e10cSrcweir
5328cdf0e10cSrcweir if( bSelObj )
5329cdf0e10cSrcweir {
5330cdf0e10cSrcweir bRet = sal_True;
5331cdf0e10cSrcweir // falls im Macro der Rahmen deselektiert
5332cdf0e10cSrcweir // wurde, muss nur noch der Cursor
5333cdf0e10cSrcweir // wieder angezeigt werden.
5334cdf0e10cSrcweir if( FRMTYPE_NONE == rSh.GetSelFrmType() )
5335cdf0e10cSrcweir rSh.ShowCrsr();
5336cdf0e10cSrcweir else
5337cdf0e10cSrcweir {
5338cdf0e10cSrcweir if (rSh.IsFrmSelected() && rView.GetDrawFuncPtr())
5339cdf0e10cSrcweir {
5340cdf0e10cSrcweir rView.GetDrawFuncPtr()->Deactivate();
5341cdf0e10cSrcweir rView.SetDrawFuncPtr(NULL);
5342cdf0e10cSrcweir rView.LeaveDrawCreate();
5343cdf0e10cSrcweir rView.AttrChangedNotify( &rSh );
5344cdf0e10cSrcweir }
5345cdf0e10cSrcweir
5346cdf0e10cSrcweir rSh.EnterSelFrmMode( &aDocPos );
5347cdf0e10cSrcweir bFrmDrag = sal_True;
5348cdf0e10cSrcweir UpdatePointer( aDocPos, 0 );
5349cdf0e10cSrcweir return bRet;
5350cdf0e10cSrcweir }
5351cdf0e10cSrcweir }
5352cdf0e10cSrcweir
5353cdf0e10cSrcweir if (!rView.GetDrawFuncPtr())
5354cdf0e10cSrcweir rSh.ShowCrsr();
5355cdf0e10cSrcweir }
5356cdf0e10cSrcweir }
5357cdf0e10cSrcweir else if ( rSh.IsSelFrmMode() &&
5358cdf0e10cSrcweir (aActHitType == SDRHIT_NONE ||
5359cdf0e10cSrcweir !bIsInsideSelectedObj))
5360cdf0e10cSrcweir {
5361cdf0e10cSrcweir rView.NoRotate();
5362cdf0e10cSrcweir sal_Bool bUnLockView = !rSh.IsViewLocked();
5363cdf0e10cSrcweir rSh.LockView( sal_True );
5364cdf0e10cSrcweir sal_uInt8 nFlag = 0;
5365cdf0e10cSrcweir
5366cdf0e10cSrcweir if ( rSh.IsSelFrmMode() )
5367cdf0e10cSrcweir {
5368cdf0e10cSrcweir rSh.UnSelectFrm();
5369cdf0e10cSrcweir rSh.LeaveSelFrmMode();
5370cdf0e10cSrcweir rView.AttrChangedNotify(&rSh);
5371cdf0e10cSrcweir bRet = sal_True;
5372cdf0e10cSrcweir }
5373cdf0e10cSrcweir
5374cdf0e10cSrcweir sal_Bool bSelObj = rSh.SelectObj( aDocPos, nFlag );
5375cdf0e10cSrcweir if( bUnLockView )
5376cdf0e10cSrcweir rSh.LockView( sal_False );
5377cdf0e10cSrcweir
5378cdf0e10cSrcweir if( !bSelObj )
5379cdf0e10cSrcweir {
5380cdf0e10cSrcweir // Cursor hier umsetzen, damit er nicht zuerst
5381cdf0e10cSrcweir // im Rahmen gezeichnet wird; ShowCrsr() geschieht
5382cdf0e10cSrcweir // in LeaveSelFrmMode()
5383cdf0e10cSrcweir bValidCrsrPos = !(CRSR_POSCHG & (rSh.*rSh.fnSetCrsr)(&aDocPos,sal_False));
5384cdf0e10cSrcweir rSh.LeaveSelFrmMode();
5385cdf0e10cSrcweir rView.LeaveDrawCreate();
5386cdf0e10cSrcweir rView.AttrChangedNotify( &rSh );
5387cdf0e10cSrcweir bRet = sal_True;
5388cdf0e10cSrcweir }
5389cdf0e10cSrcweir else
5390cdf0e10cSrcweir {
5391cdf0e10cSrcweir rSh.HideCrsr();
5392cdf0e10cSrcweir rSh.EnterSelFrmMode( &aDocPos );
5393cdf0e10cSrcweir rSh.SelFlyGrabCrsr();
5394cdf0e10cSrcweir rSh.MakeSelVisible();
5395cdf0e10cSrcweir bFrmDrag = sal_True;
5396cdf0e10cSrcweir if( rSh.IsFrmSelected() &&
5397cdf0e10cSrcweir rView.GetDrawFuncPtr() )
5398cdf0e10cSrcweir {
5399cdf0e10cSrcweir rView.GetDrawFuncPtr()->Deactivate();
5400cdf0e10cSrcweir rView.SetDrawFuncPtr(NULL);
5401cdf0e10cSrcweir rView.LeaveDrawCreate();
5402cdf0e10cSrcweir rView.AttrChangedNotify( &rSh );
5403cdf0e10cSrcweir }
5404cdf0e10cSrcweir UpdatePointer( aDocPos, 0 );
5405cdf0e10cSrcweir bRet = sal_True;
5406cdf0e10cSrcweir }
5407cdf0e10cSrcweir }
5408cdf0e10cSrcweir else if ( rSh.IsSelFrmMode() && bIsInsideSelectedObj )
5409cdf0e10cSrcweir {
5410cdf0e10cSrcweir // ## object at the mouse cursor is already selected - do nothing
5411cdf0e10cSrcweir return sal_False;
5412cdf0e10cSrcweir }
5413cdf0e10cSrcweir
5414cdf0e10cSrcweir if ( rSh.IsGCAttr() )
5415cdf0e10cSrcweir {
5416cdf0e10cSrcweir rSh.GCAttr();
5417cdf0e10cSrcweir rSh.ClearGCAttr();
5418cdf0e10cSrcweir }
5419cdf0e10cSrcweir
5420cdf0e10cSrcweir sal_Bool bOverSelect = rSh.ChgCurrPam( aDocPos ), bOverURLGrf = sal_False;
5421cdf0e10cSrcweir if( !bOverSelect )
5422cdf0e10cSrcweir bOverURLGrf = bOverSelect = 0 != rSh.IsURLGrfAtPos( aDocPos );
5423cdf0e10cSrcweir
5424cdf0e10cSrcweir if ( !bOverSelect )
5425cdf0e10cSrcweir {
5426*2b518738Smseidel { // nur temp. Move-Context aufspannen, da sonst die
5427cdf0e10cSrcweir // Abfrage auf die Inhaltsform nicht funktioniert!!!
5428*2b518738Smseidel MV_CONTEXT( &rSh );
5429cdf0e10cSrcweir (rSh.*rSh.fnSetCrsr)(&aDocPos, sal_False);
5430cdf0e10cSrcweir bRet = sal_True;
5431cdf0e10cSrcweir }
5432cdf0e10cSrcweir }
5433cdf0e10cSrcweir if( !bOverURLGrf )
5434cdf0e10cSrcweir {
5435cdf0e10cSrcweir const int nSelType = rSh.GetSelectionType();
5436cdf0e10cSrcweir if( nSelType == nsSelectionType::SEL_OLE ||
5437cdf0e10cSrcweir nSelType == nsSelectionType::SEL_GRF )
5438cdf0e10cSrcweir {
5439*2b518738Smseidel MV_CONTEXT( &rSh );
5440cdf0e10cSrcweir if( !rSh.IsFrmSelected() )
5441cdf0e10cSrcweir rSh.GotoNextFly();
5442cdf0e10cSrcweir rSh.EnterSelFrmMode();
5443cdf0e10cSrcweir bRet = sal_True;
5444cdf0e10cSrcweir }
5445cdf0e10cSrcweir }
5446cdf0e10cSrcweir return bRet;
5447cdf0e10cSrcweir }
5448cdf0e10cSrcweir
lcl_GetShellFromDispatcher(SwView & rView,TypeId nType)5449cdf0e10cSrcweir SfxShell* lcl_GetShellFromDispatcher( SwView& rView, TypeId nType )
5450cdf0e10cSrcweir {
5451cdf0e10cSrcweir //Shell ermitteln
5452cdf0e10cSrcweir SfxShell* pShell;
5453cdf0e10cSrcweir SfxDispatcher* pDispatcher = rView.GetViewFrame()->GetDispatcher();
5454cdf0e10cSrcweir for(sal_uInt16 i = 0; sal_True; ++i )
5455cdf0e10cSrcweir {
5456cdf0e10cSrcweir pShell = pDispatcher->GetShell( i );
5457cdf0e10cSrcweir if( !pShell || pShell->IsA( nType ) )
5458cdf0e10cSrcweir break;
5459cdf0e10cSrcweir }
5460cdf0e10cSrcweir return pShell;
5461cdf0e10cSrcweir }
5462cdf0e10cSrcweir
5463cdf0e10cSrcweir
5464cdf0e10cSrcweir
ClearTip()5465cdf0e10cSrcweir void SwEditWin::ClearTip()
5466cdf0e10cSrcweir {
5467cdf0e10cSrcweir }
5468cdf0e10cSrcweir
IMPL_LINK(SwEditWin,KeyInputFlushHandler,Timer *,EMPTYARG)5469cdf0e10cSrcweir IMPL_LINK( SwEditWin, KeyInputFlushHandler, Timer *, EMPTYARG )
5470cdf0e10cSrcweir {
5471cdf0e10cSrcweir FlushInBuffer();
5472cdf0e10cSrcweir return 0;
5473cdf0e10cSrcweir }
5474cdf0e10cSrcweir
5475cdf0e10cSrcweir
IMPL_LINK(SwEditWin,KeyInputTimerHandler,Timer *,EMPTYARG)5476cdf0e10cSrcweir IMPL_LINK( SwEditWin, KeyInputTimerHandler, Timer *, EMPTYARG )
5477cdf0e10cSrcweir {
5478cdf0e10cSrcweir bTblInsDelMode = sal_False;
5479cdf0e10cSrcweir return 0;
5480cdf0e10cSrcweir }
5481cdf0e10cSrcweir
_InitStaticData()5482cdf0e10cSrcweir void SwEditWin::_InitStaticData()
5483cdf0e10cSrcweir {
5484cdf0e10cSrcweir pQuickHlpData = new QuickHelpData();
5485cdf0e10cSrcweir }
5486cdf0e10cSrcweir
_FinitStaticData()5487cdf0e10cSrcweir void SwEditWin::_FinitStaticData()
5488cdf0e10cSrcweir {
5489cdf0e10cSrcweir delete pQuickHlpData;
5490cdf0e10cSrcweir }
5491cdf0e10cSrcweir /* -----------------23.01.2003 12:15-----------------
5492cdf0e10cSrcweir * #i3370# remove quick help to prevent saving
5493cdf0e10cSrcweir * of autocorrection suggestions
5494cdf0e10cSrcweir * --------------------------------------------------*/
StopQuickHelp()5495cdf0e10cSrcweir void SwEditWin::StopQuickHelp()
5496cdf0e10cSrcweir {
5497cdf0e10cSrcweir if( HasFocus() && pQuickHlpData && pQuickHlpData->bClear )
5498cdf0e10cSrcweir pQuickHlpData->Stop( rView.GetWrtShell() );
5499cdf0e10cSrcweir }
5500cdf0e10cSrcweir
5501cdf0e10cSrcweir /*-----------------23.02.97 18:39-------------------
5502cdf0e10cSrcweir
5503cdf0e10cSrcweir --------------------------------------------------*/
5504cdf0e10cSrcweir
5505cdf0e10cSrcweir
IMPL_LINK(SwEditWin,TemplateTimerHdl,Timer *,EMPTYARG)5506cdf0e10cSrcweir IMPL_LINK(SwEditWin, TemplateTimerHdl, Timer*, EMPTYARG)
5507cdf0e10cSrcweir {
5508cdf0e10cSrcweir SetApplyTemplate(SwApplyTemplate());
5509cdf0e10cSrcweir return 0;
5510cdf0e10cSrcweir }
5511cdf0e10cSrcweir
5512cdf0e10cSrcweir
SetChainMode(sal_Bool bOn)5513cdf0e10cSrcweir void SwEditWin::SetChainMode( sal_Bool bOn )
5514cdf0e10cSrcweir {
5515cdf0e10cSrcweir if ( !bChainMode )
5516cdf0e10cSrcweir StopInsFrm();
5517cdf0e10cSrcweir
5518cdf0e10cSrcweir if ( pUserMarker )
5519cdf0e10cSrcweir {
5520cdf0e10cSrcweir delete pUserMarker;
5521cdf0e10cSrcweir pUserMarker = 0L;
5522cdf0e10cSrcweir }
5523cdf0e10cSrcweir
5524cdf0e10cSrcweir bChainMode = bOn;
5525cdf0e10cSrcweir if ( !bChainMode )
5526cdf0e10cSrcweir rView.GetViewFrame()->HideStatusText();
5527cdf0e10cSrcweir
5528cdf0e10cSrcweir static sal_uInt16 __READONLY_DATA aInva[] =
5529cdf0e10cSrcweir {
5530cdf0e10cSrcweir FN_FRAME_CHAIN, FN_FRAME_UNCHAIN, 0
5531cdf0e10cSrcweir };
5532cdf0e10cSrcweir rView.GetViewFrame()->GetBindings().Invalidate(aInva);
5533cdf0e10cSrcweir }
5534cdf0e10cSrcweir
CreateAccessible()5535cdf0e10cSrcweir uno::Reference< ::com::sun::star::accessibility::XAccessible > SwEditWin::CreateAccessible()
5536cdf0e10cSrcweir {
5537cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex()); // this should have
553886e1cf34SPedro Giffuni // happened already!!!
5539cdf0e10cSrcweir SwWrtShell *pSh = rView.GetWrtShellPtr();
5540cdf0e10cSrcweir ASSERT( pSh, "no writer shell, no accessible object" );
5541cdf0e10cSrcweir uno::Reference<
5542cdf0e10cSrcweir ::com::sun::star::accessibility::XAccessible > xAcc;
5543cdf0e10cSrcweir if( pSh )
5544cdf0e10cSrcweir xAcc = pSh->CreateAccessible();
5545cdf0e10cSrcweir
5546cdf0e10cSrcweir return xAcc;
5547cdf0e10cSrcweir }
5548cdf0e10cSrcweir
5549cdf0e10cSrcweir //-------------------------------------------------------------
5550cdf0e10cSrcweir
Move(QuickHelpData & rCpy)5551cdf0e10cSrcweir void QuickHelpData::Move( QuickHelpData& rCpy )
5552cdf0e10cSrcweir {
5553cdf0e10cSrcweir // Pointer verschieben
5554cdf0e10cSrcweir aArr.Insert( &rCpy.aArr );
5555cdf0e10cSrcweir rCpy.aArr.Remove( (sal_uInt16)0, rCpy.aArr.Count() );
5556cdf0e10cSrcweir // nTipId = rCpy.nTipId;
5557cdf0e10cSrcweir bClear = rCpy.bClear;
5558cdf0e10cSrcweir nLen = rCpy.nLen;
5559cdf0e10cSrcweir nCurArrPos = rCpy.nCurArrPos;
5560cdf0e10cSrcweir bChkInsBlank = rCpy.bChkInsBlank;
5561cdf0e10cSrcweir bIsTip = rCpy.bIsTip;
5562cdf0e10cSrcweir bIsAutoText = rCpy.bIsAutoText;
5563cdf0e10cSrcweir
5564cdf0e10cSrcweir if( pCETID ) delete pCETID;
5565cdf0e10cSrcweir pCETID = rCpy.pCETID;
5566cdf0e10cSrcweir rCpy.pCETID = 0;
5567cdf0e10cSrcweir
5568cdf0e10cSrcweir if( pAttrs )
5569cdf0e10cSrcweir delete[] pAttrs;
5570cdf0e10cSrcweir pAttrs = rCpy.pAttrs;
5571cdf0e10cSrcweir rCpy.pAttrs = 0;
5572cdf0e10cSrcweir }
5573cdf0e10cSrcweir
ClearCntnt()5574cdf0e10cSrcweir void QuickHelpData::ClearCntnt()
5575cdf0e10cSrcweir {
5576cdf0e10cSrcweir nLen = nCurArrPos = 0;
5577cdf0e10cSrcweir bClear = bChkInsBlank = sal_False;
5578cdf0e10cSrcweir nTipId = 0;
5579cdf0e10cSrcweir aArr.DeleteAndDestroy( 0 , aArr.Count() );
5580cdf0e10cSrcweir bIsTip = sal_True;
5581cdf0e10cSrcweir bIsAutoText = sal_True;
5582cdf0e10cSrcweir delete pCETID, pCETID = 0;
5583cdf0e10cSrcweir delete[] pAttrs, pAttrs = 0;
5584cdf0e10cSrcweir }
5585cdf0e10cSrcweir
5586cdf0e10cSrcweir
Start(SwWrtShell & rSh,sal_uInt16 nWrdLen)5587cdf0e10cSrcweir void QuickHelpData::Start( SwWrtShell& rSh, sal_uInt16 nWrdLen )
5588cdf0e10cSrcweir {
5589cdf0e10cSrcweir if( pCETID ) delete pCETID, pCETID = 0;
5590cdf0e10cSrcweir if( pAttrs ) delete[] pAttrs, pAttrs = 0;
5591cdf0e10cSrcweir
5592cdf0e10cSrcweir if( USHRT_MAX != nWrdLen )
5593cdf0e10cSrcweir {
5594cdf0e10cSrcweir nLen = nWrdLen;
5595cdf0e10cSrcweir nCurArrPos = 0;
5596cdf0e10cSrcweir }
5597cdf0e10cSrcweir bClear = sal_True;
5598cdf0e10cSrcweir
5599cdf0e10cSrcweir Window& rWin = rSh.GetView().GetEditWin();
5600cdf0e10cSrcweir if( bIsTip )
5601cdf0e10cSrcweir {
5602cdf0e10cSrcweir Point aPt( rWin.OutputToScreenPixel( rWin.LogicToPixel(
5603cdf0e10cSrcweir rSh.GetCharRect().Pos() )));
5604cdf0e10cSrcweir aPt.Y() -= 3;
5605cdf0e10cSrcweir nTipId = Help::ShowTip( &rWin, Rectangle( aPt, Size( 1, 1 )),
5606cdf0e10cSrcweir *aArr[ nCurArrPos ],
5607cdf0e10cSrcweir QUICKHELP_LEFT | QUICKHELP_BOTTOM );
5608cdf0e10cSrcweir }
5609cdf0e10cSrcweir else
5610cdf0e10cSrcweir {
5611cdf0e10cSrcweir String sStr( *aArr[ nCurArrPos ] );
5612cdf0e10cSrcweir sStr.Erase( 0, nLen );
5613cdf0e10cSrcweir sal_uInt16 nL = sStr.Len();
5614cdf0e10cSrcweir pAttrs = new sal_uInt16[ nL ];
5615cdf0e10cSrcweir for( sal_uInt16 n = nL; n; )
5616cdf0e10cSrcweir *(pAttrs + --n ) = EXTTEXTINPUT_ATTR_DOTTEDUNDERLINE |
5617cdf0e10cSrcweir EXTTEXTINPUT_ATTR_HIGHLIGHT;
5618cdf0e10cSrcweir pCETID = new CommandExtTextInputData( sStr, pAttrs, nL,
5619cdf0e10cSrcweir 0, 0, 0, sal_False );
5620cdf0e10cSrcweir rSh.CreateExtTextInput(rWin.GetInputLanguage());
5621cdf0e10cSrcweir rSh.SetExtTextInputData( *pCETID );
5622cdf0e10cSrcweir }
5623cdf0e10cSrcweir }
5624cdf0e10cSrcweir
Stop(SwWrtShell & rSh)5625cdf0e10cSrcweir void QuickHelpData::Stop( SwWrtShell& rSh )
5626cdf0e10cSrcweir {
5627cdf0e10cSrcweir if( !bIsTip )
5628cdf0e10cSrcweir rSh.DeleteExtTextInput( 0, sal_False );
5629cdf0e10cSrcweir else if( nTipId )
5630cdf0e10cSrcweir Help::HideTip( nTipId );
5631cdf0e10cSrcweir ClearCntnt();
5632cdf0e10cSrcweir }
5633cdf0e10cSrcweir
FillStrArr(SwWrtShell & rSh,const String & rWord)5634cdf0e10cSrcweir void QuickHelpData::FillStrArr( SwWrtShell& rSh, const String& rWord )
5635cdf0e10cSrcweir {
5636b10a5c0bSHerbert Dürr // #i22961# get the letter-case context
5637b10a5c0bSHerbert Dürr const CharClass& rCharClass = GetAppCharClass();
5638b10a5c0bSHerbert Dürr const String aLWord = rCharClass.toLower( rWord, 0, rWord.Len() );
5639b10a5c0bSHerbert Dürr const bool bIsUpper = (rWord == rCharClass.toUpper( rWord, 0, rWord.Len() ) );
5640b10a5c0bSHerbert Dürr const bool bIsLower = (rWord == aLWord);
5641b10a5c0bSHerbert Dürr
5642b10a5c0bSHerbert Dürr // add all matching month/day names from the calendar
5643cdf0e10cSrcweir salhelper::SingletonRef<SwCalendarWrapper>* pCalendar = s_getCalendarWrapper();
5644cdf0e10cSrcweir (*pCalendar)->LoadDefaultCalendar( rSh.GetCurLang() );
5645cdf0e10cSrcweir
5646cdf0e10cSrcweir {
5647cdf0e10cSrcweir uno::Sequence< i18n::CalendarItem > aNames(
5648cdf0e10cSrcweir (*pCalendar)->getMonths() );
5649cdf0e10cSrcweir for( int n = 0; n < 2; ++n )
5650cdf0e10cSrcweir {
5651cdf0e10cSrcweir for( long nPos = 0, nEnd = aNames.getLength(); nPos < nEnd; ++nPos )
5652cdf0e10cSrcweir {
5653b10a5c0bSHerbert Dürr const String& rS = aNames[ nPos ].FullName;
5654b10a5c0bSHerbert Dürr if( rS.Len() <= rWord.Len() + 1 )
5655b10a5c0bSHerbert Dürr continue;
5656b10a5c0bSHerbert Dürr const String aLName = rCharClass.toLower( rS, 0, rWord.Len() );
5657b10a5c0bSHerbert Dürr if( aLName != aLWord )
5658b10a5c0bSHerbert Dürr continue;
5659b10a5c0bSHerbert Dürr // #i22961# provide case-sensitive autocompletion suggestions
5660b10a5c0bSHerbert Dürr String* pNew = new String( (bIsUpper==bIsLower) ? rS : (bIsUpper ? rCharClass.toUpper(rS,0,rS.Len()) : rCharClass.toLower(rS,0,rS.Len())) );
5661cdf0e10cSrcweir if( !aArr.Insert( pNew ) )
5662cdf0e10cSrcweir delete pNew;
5663cdf0e10cSrcweir }
5664cdf0e10cSrcweir if( !n ) // get data for the second loop
5665cdf0e10cSrcweir aNames = (*pCalendar)->getDays();
5666cdf0e10cSrcweir }
5667cdf0e10cSrcweir }
5668cdf0e10cSrcweir
56693234e392SHerbert Dürr // and then add all words from the AutoCompleteWord-List
5670cdf0e10cSrcweir const SwAutoCompleteWord& rACLst = rSh.GetAutoCompleteWords();
5671cdf0e10cSrcweir sal_uInt16 nStt, nEnd;
5672cdf0e10cSrcweir if( rACLst.GetRange( rWord, nStt, nEnd ) )
5673cdf0e10cSrcweir {
56743234e392SHerbert Dürr for(; nStt < nEnd; ++nStt )
5675cdf0e10cSrcweir {
5676cdf0e10cSrcweir const String& rS = rACLst[ nStt ];
56773234e392SHerbert Dürr if( rS.Len() <= rWord.Len() )
56783234e392SHerbert Dürr continue;
56793234e392SHerbert Dürr // #i22961# provide case-sensitive autocompletion suggestions
56803234e392SHerbert Dürr String* pNew = new String( (bIsUpper==bIsLower) ? rS : (bIsUpper ? rCharClass.toUpper(rS,0,rS.Len()) : rCharClass.toLower(rS,0,rS.Len())) );
5681cdf0e10cSrcweir if( !aArr.Insert( pNew ) )
5682cdf0e10cSrcweir delete pNew;
5683cdf0e10cSrcweir }
5684cdf0e10cSrcweir }
5685cdf0e10cSrcweir }
5686b10a5c0bSHerbert Dürr
ShowAutoTextCorrectQuickHelp(const String & rWord,SvxAutoCorrCfg * pACfg,SvxAutoCorrect * pACorr,sal_Bool bFromIME)5687cdf0e10cSrcweir void SwEditWin::ShowAutoTextCorrectQuickHelp(
5688cdf0e10cSrcweir const String& rWord, SvxAutoCorrCfg* pACfg, SvxAutoCorrect* pACorr,
5689cdf0e10cSrcweir sal_Bool bFromIME )
5690cdf0e10cSrcweir {
5691cdf0e10cSrcweir SwWrtShell& rSh = rView.GetWrtShell();
5692cdf0e10cSrcweir pQuickHlpData->ClearCntnt();
5693cdf0e10cSrcweir if( pACfg->IsAutoTextTip() )
5694cdf0e10cSrcweir {
5695cdf0e10cSrcweir SwGlossaryList* pList = ::GetGlossaryList();
5696cdf0e10cSrcweir pList->HasLongName( rWord, &pQuickHlpData->aArr );
5697cdf0e10cSrcweir }
5698cdf0e10cSrcweir
5699cdf0e10cSrcweir if( pQuickHlpData->aArr.Count() )
5700cdf0e10cSrcweir {
5701cdf0e10cSrcweir pQuickHlpData->bIsTip = sal_True;
5702cdf0e10cSrcweir pQuickHlpData->bIsAutoText = sal_True;
5703cdf0e10cSrcweir }
5704cdf0e10cSrcweir else if( pACorr->GetSwFlags().bAutoCompleteWords )
5705cdf0e10cSrcweir {
5706cdf0e10cSrcweir pQuickHlpData->bIsAutoText = sal_False;
5707cdf0e10cSrcweir pQuickHlpData->bIsTip = bFromIME ||
5708cdf0e10cSrcweir !pACorr ||
5709cdf0e10cSrcweir pACorr->GetSwFlags().bAutoCmpltShowAsTip;
5710cdf0e10cSrcweir
5711cdf0e10cSrcweir pQuickHlpData->FillStrArr( rSh, rWord );
5712cdf0e10cSrcweir }
5713cdf0e10cSrcweir
5714cdf0e10cSrcweir if( pQuickHlpData->aArr.Count() )
5715cdf0e10cSrcweir pQuickHlpData->Start( rSh, rWord.Len() );
5716cdf0e10cSrcweir }
5717cdf0e10cSrcweir
5718cdf0e10cSrcweir /* -----------------29.03.2006 11:01-----------------
5719cdf0e10cSrcweir *
5720cdf0e10cSrcweir * --------------------------------------------------*/
5721cdf0e10cSrcweir
SetUseInputLanguage(sal_Bool bNew)5722cdf0e10cSrcweir void SwEditWin::SetUseInputLanguage( sal_Bool bNew )
5723cdf0e10cSrcweir {
5724cdf0e10cSrcweir if ( bNew || bUseInputLanguage )
5725cdf0e10cSrcweir {
5726cdf0e10cSrcweir SfxBindings& rBind = GetView().GetViewFrame()->GetBindings();
5727cdf0e10cSrcweir rBind.Invalidate( SID_ATTR_CHAR_FONT );
5728cdf0e10cSrcweir rBind.Invalidate( SID_ATTR_CHAR_FONTHEIGHT );
5729cdf0e10cSrcweir }
5730cdf0e10cSrcweir bUseInputLanguage = bNew;
5731cdf0e10cSrcweir }
5732cdf0e10cSrcweir
5733cdf0e10cSrcweir /*-- 13.11.2008 10:18:17---------------------------------------------------
5734cdf0e10cSrcweir
5735cdf0e10cSrcweir -----------------------------------------------------------------------*/
GetSurroundingText() const5736cdf0e10cSrcweir XubString SwEditWin::GetSurroundingText() const
5737cdf0e10cSrcweir {
5738cdf0e10cSrcweir String sReturn;
5739cdf0e10cSrcweir SwWrtShell& rSh = rView.GetWrtShell();
5740cdf0e10cSrcweir if( rSh.HasSelection() && !rSh.IsMultiSelection() && rSh.IsSelOnePara() )
5741cdf0e10cSrcweir rSh.GetSelectedText( sReturn, GETSELTXT_PARABRK_TO_ONLYCR );
5742cdf0e10cSrcweir else if( !rSh.HasSelection() )
5743cdf0e10cSrcweir {
5744cdf0e10cSrcweir SwPosition *pPos = rSh.GetCrsr()->GetPoint();
5745cdf0e10cSrcweir xub_StrLen nPos = pPos->nContent.GetIndex();
5746cdf0e10cSrcweir
5747cdf0e10cSrcweir // get the sentence around the cursor
5748cdf0e10cSrcweir rSh.HideCrsr();
5749cdf0e10cSrcweir rSh.GoStartSentence();
5750cdf0e10cSrcweir rSh.SetMark();
5751cdf0e10cSrcweir rSh.GoEndSentence();
5752cdf0e10cSrcweir rSh.GetSelectedText( sReturn, GETSELTXT_PARABRK_TO_ONLYCR );
5753cdf0e10cSrcweir
5754cdf0e10cSrcweir pPos->nContent = nPos;
5755cdf0e10cSrcweir rSh.ClearMark();
5756cdf0e10cSrcweir rSh.HideCrsr();
5757cdf0e10cSrcweir }
5758cdf0e10cSrcweir
5759cdf0e10cSrcweir return sReturn;
5760cdf0e10cSrcweir }
5761cdf0e10cSrcweir /*-- 13.11.2008 10:18:17---------------------------------------------------
5762cdf0e10cSrcweir
5763cdf0e10cSrcweir -----------------------------------------------------------------------*/
GetSurroundingTextSelection() const5764cdf0e10cSrcweir Selection SwEditWin::GetSurroundingTextSelection() const
5765cdf0e10cSrcweir {
5766cdf0e10cSrcweir SwWrtShell& rSh = rView.GetWrtShell();
5767cdf0e10cSrcweir if( rSh.HasSelection() )
5768cdf0e10cSrcweir {
5769cdf0e10cSrcweir String sReturn;
5770cdf0e10cSrcweir rSh.GetSelectedText( sReturn, GETSELTXT_PARABRK_TO_ONLYCR );
5771cdf0e10cSrcweir return Selection( 0, sReturn.Len() );
5772cdf0e10cSrcweir }
5773cdf0e10cSrcweir else
5774cdf0e10cSrcweir {
5775cdf0e10cSrcweir // Return the position of the visible cursor in the sentence
5776cdf0e10cSrcweir // around the visible cursor.
5777cdf0e10cSrcweir SwPosition *pPos = rSh.GetCrsr()->GetPoint();
5778cdf0e10cSrcweir xub_StrLen nPos = pPos->nContent.GetIndex();
5779cdf0e10cSrcweir
5780cdf0e10cSrcweir rSh.HideCrsr();
5781cdf0e10cSrcweir rSh.GoStartSentence();
5782cdf0e10cSrcweir xub_StrLen nStartPos = rSh.GetCrsr()->GetPoint()->nContent.GetIndex();
5783cdf0e10cSrcweir
5784cdf0e10cSrcweir pPos->nContent = nPos;
5785cdf0e10cSrcweir rSh.ClearMark();
5786cdf0e10cSrcweir rSh.ShowCrsr();
5787cdf0e10cSrcweir
5788cdf0e10cSrcweir return Selection( nPos - nStartPos, nPos - nStartPos );
5789cdf0e10cSrcweir }
5790cdf0e10cSrcweir }
5791ca62e2c2SSteve Yin // MT: Removed Windows::SwitchView() introduced with IA2 CWS.
5792721f84f2Smseidel // There are other notifications for this when the active view has changed, so please update the code to use that event mechanism
SwitchView()5793ca62e2c2SSteve Yin void SwEditWin::SwitchView()
5794ca62e2c2SSteve Yin {
5795ca62e2c2SSteve Yin #ifdef ACCESSIBLE_LAYOUT
5796ca62e2c2SSteve Yin if (!Application::IsAccessibilityEnabled())
5797ca62e2c2SSteve Yin {
5798ca62e2c2SSteve Yin return ;
5799ca62e2c2SSteve Yin }
5800ca62e2c2SSteve Yin rView.GetWrtShell().InvalidateAccessibleFocus();
5801ca62e2c2SSteve Yin #endif
5802ca62e2c2SSteve Yin }
5803721f84f2Smseidel
5804721f84f2Smseidel /* vim: set noet sw=4 ts=4: */
5805