1*1d2dbeb0SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*1d2dbeb0SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*1d2dbeb0SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*1d2dbeb0SAndrew Rist * distributed with this work for additional information 6*1d2dbeb0SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*1d2dbeb0SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*1d2dbeb0SAndrew Rist * "License"); you may not use this file except in compliance 9*1d2dbeb0SAndrew Rist * with the License. You may obtain a copy of the License at 10*1d2dbeb0SAndrew Rist * 11*1d2dbeb0SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*1d2dbeb0SAndrew Rist * 13*1d2dbeb0SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*1d2dbeb0SAndrew Rist * software distributed under the License is distributed on an 15*1d2dbeb0SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*1d2dbeb0SAndrew Rist * KIND, either express or implied. See the License for the 17*1d2dbeb0SAndrew Rist * specific language governing permissions and limitations 18*1d2dbeb0SAndrew Rist * under the License. 19*1d2dbeb0SAndrew Rist * 20*1d2dbeb0SAndrew Rist *************************************************************/ 21*1d2dbeb0SAndrew Rist 22*1d2dbeb0SAndrew Rist 23cdf0e10cSrcweir #ifndef _EDTWIN_HXX 24cdf0e10cSrcweir #define _EDTWIN_HXX 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include <svx/svdobj.hxx> 27cdf0e10cSrcweir #include <tools/link.hxx> 28cdf0e10cSrcweir #include <vcl/timer.hxx> 29cdf0e10cSrcweir #include <vcl/window.hxx> 30cdf0e10cSrcweir #include <svtools/transfer.hxx> 31cdf0e10cSrcweir #include <swevent.hxx> 32cdf0e10cSrcweir 33cdf0e10cSrcweir #define _SVSTDARR_STRINGSISORTDTOR 34cdf0e10cSrcweir #include <svl/svstdarr.hxx> 35cdf0e10cSrcweir 36cdf0e10cSrcweir class SwWrtShell; 37cdf0e10cSrcweir class SwView; 38cdf0e10cSrcweir class SwRect; 39cdf0e10cSrcweir class ViewShell; 40cdf0e10cSrcweir class SwAnchorMarker; 41cdf0e10cSrcweir class SdrObject; 42cdf0e10cSrcweir class SwShadowCursor; 43cdf0e10cSrcweir class DataChangedEvent; 44cdf0e10cSrcweir class SvxAutoCorrCfg; 45cdf0e10cSrcweir class SvxAutoCorrect; 46cdf0e10cSrcweir class SwPaM; 47cdf0e10cSrcweir struct SwApplyTemplate; 48cdf0e10cSrcweir struct QuickHelpData; 49cdf0e10cSrcweir class SdrDropMarkerOverlay; 50cdf0e10cSrcweir 51cdf0e10cSrcweir /*-------------------------------------------------------------------- 52cdf0e10cSrcweir Beschreibung: Eingabe-Fenster 53cdf0e10cSrcweir --------------------------------------------------------------------*/ 54cdf0e10cSrcweir 55cdf0e10cSrcweir class SwEditWin: public Window, 56cdf0e10cSrcweir public DropTargetHelper, public DragSourceHelper 57cdf0e10cSrcweir { 58cdf0e10cSrcweir friend void ScrollMDI(ViewShell* pVwSh, const SwRect&, 59cdf0e10cSrcweir sal_uInt16 nRangeX, sal_uInt16 nRangeY); 60cdf0e10cSrcweir friend sal_Bool IsScrollMDI(ViewShell* pVwSh, const SwRect&); 61cdf0e10cSrcweir 62cdf0e10cSrcweir friend void SizeNotify(ViewShell* pVwSh, const Size &); 63cdf0e10cSrcweir 64cdf0e10cSrcweir friend void PageNumNotify( ViewShell* pVwSh, 65cdf0e10cSrcweir sal_uInt16 nPhyNum, 66cdf0e10cSrcweir sal_uInt16 nVirtNum, 67cdf0e10cSrcweir const String& rPg ); 68cdf0e10cSrcweir 69cdf0e10cSrcweir static QuickHelpData* pQuickHlpData; 70cdf0e10cSrcweir 71cdf0e10cSrcweir static sal_Bool bReplaceQuote; 72cdf0e10cSrcweir static long nDDStartPosX, nDDStartPosY; 73cdf0e10cSrcweir 74cdf0e10cSrcweir static Color aTextColor; //Textfarbe, fuer die Giesskanne 75cdf0e10cSrcweir static sal_Bool bTransparentBackColor; // Hintergrund transparent 76cdf0e10cSrcweir static Color aTextBackColor; //Texthintergrundfarbe, fuer die Giesskanne 77cdf0e10cSrcweir 78cdf0e10cSrcweir /* 79cdf0e10cSrcweir * Timer und Handler fuer das Weiterscrollen, wenn der 80cdf0e10cSrcweir * Mauspointer innerhalb eines Drag-Vorgangs ausserhalb des 81cdf0e10cSrcweir * EditWin stehen bleibt. In regelmaessigen Intervallen wird 82cdf0e10cSrcweir * die Selektion in Richtung der Mausposition vergroessert. 83cdf0e10cSrcweir */ 84cdf0e10cSrcweir AutoTimer aTimer; 85cdf0e10cSrcweir // Timer fuer verschachtelte KeyInputs (z.B. fuer Tabellen) 86cdf0e10cSrcweir Timer aKeyInputTimer; 87cdf0e10cSrcweir // timer for ANY-KeyInut question without a following KeyInputEvent 88cdf0e10cSrcweir Timer aKeyInputFlushTimer; 89cdf0e10cSrcweir 90cdf0e10cSrcweir String aInBuffer; 91cdf0e10cSrcweir LanguageType eBufferLanguage; 92cdf0e10cSrcweir Point aStartPos; 93cdf0e10cSrcweir Point aMovePos; 94cdf0e10cSrcweir Point aRszMvHdlPt; 95cdf0e10cSrcweir Timer aTemplateTimer; 96cdf0e10cSrcweir 97cdf0e10cSrcweir // Type/Objecte ueber dem der MousePointer steht 98cdf0e10cSrcweir SwCallMouseEvent aSaveCallEvent; 99cdf0e10cSrcweir 100cdf0e10cSrcweir SwApplyTemplate *pApplyTempl; 101cdf0e10cSrcweir SwAnchorMarker *pAnchorMarker; // zum Verschieben eines Ankers 102cdf0e10cSrcweir 103cdf0e10cSrcweir SdrDropMarkerOverlay *pUserMarker; 104cdf0e10cSrcweir SdrObject *pUserMarkerObj; 105cdf0e10cSrcweir SwShadowCursor *pShadCrsr; 106cdf0e10cSrcweir Point *pRowColumnSelectionStart; // save position where table row/column selection has been started 107cdf0e10cSrcweir 108cdf0e10cSrcweir SwView &rView; 109cdf0e10cSrcweir 110cdf0e10cSrcweir int aActHitType; // aktueller Mauspointer 111cdf0e10cSrcweir 112cdf0e10cSrcweir sal_uLong m_nDropFormat; //Format aus dem letzten QueryDrop 113cdf0e10cSrcweir sal_uInt16 m_nDropAction; //Action aus dem letzten QueryDrop 114cdf0e10cSrcweir sal_uInt16 m_nDropDestination; //Ziel aus dem letzten QueryDrop 115cdf0e10cSrcweir 116cdf0e10cSrcweir sal_uInt16 eBezierMode; 117cdf0e10cSrcweir sal_uInt16 nInsFrmColCount; //Spaltenzahl fuer interaktiven Rahmen 118cdf0e10cSrcweir SdrObjKind eDrawMode; 119cdf0e10cSrcweir sal_Bool bLinkRemoved : 1, 120cdf0e10cSrcweir bMBPressed : 1, 121cdf0e10cSrcweir bInsDraw : 1, 122cdf0e10cSrcweir bInsFrm : 1, 123cdf0e10cSrcweir bIsInMove : 1, 124cdf0e10cSrcweir bIsInDrag : 1, //StartExecuteDrag nich doppelt ausfuehren 125cdf0e10cSrcweir bOldIdle : 1, //Zum abschalten des Idle'ns 126cdf0e10cSrcweir bOldIdleSet : 1, //waehrend QeueryDrop 127cdf0e10cSrcweir bTblInsDelMode : 1, // 128cdf0e10cSrcweir bTblIsInsMode : 1, // 129cdf0e10cSrcweir bTblIsColMode : 1, // 130cdf0e10cSrcweir bChainMode : 1, //Rahmen verbinden 131cdf0e10cSrcweir bWasShdwCrsr : 1, //ShadowCrsr war im MouseButtonDown an 132cdf0e10cSrcweir bLockInput : 1, //Lock waehrend die Rechenleiste aktiv ist 133cdf0e10cSrcweir bIsRowDrag : 1, //selection of rows is used, in combination with pRowColumnSelectionStart 134cdf0e10cSrcweir /** #i42732# display status of font size/name depending on either the input language or the 135cdf0e10cSrcweir selection position depending on what has changed lately 136cdf0e10cSrcweir */ 137cdf0e10cSrcweir bUseInputLanguage: 1, 138cdf0e10cSrcweir bObjectSelect : 1; 139cdf0e10cSrcweir 140cdf0e10cSrcweir 141cdf0e10cSrcweir sal_uInt16 nKS_NUMDOWN_Count; // #i23725# 142cdf0e10cSrcweir sal_uInt16 nKS_NUMINDENTINC_Count; 143cdf0e10cSrcweir 144cdf0e10cSrcweir void LeaveArea(const Point &); 145cdf0e10cSrcweir void JustifyAreaTimer(); 146cdf0e10cSrcweir inline void EnterArea(); 147cdf0e10cSrcweir 148cdf0e10cSrcweir void RstMBDownFlags(); 149cdf0e10cSrcweir 150cdf0e10cSrcweir void ChangeFly( sal_uInt8 nDir, sal_Bool bWeb = sal_False ); 151cdf0e10cSrcweir void ChangeDrawing( sal_uInt8 nDir ); 152cdf0e10cSrcweir 153cdf0e10cSrcweir sal_Bool EnterDrawMode(const MouseEvent& rMEvt, const Point& aDocPos); 154cdf0e10cSrcweir sal_Bool RulerColumnDrag( const MouseEvent& rMEvt, sal_Bool bVerticalMode); 155cdf0e10cSrcweir 156cdf0e10cSrcweir //Hilfsfunktionen fuer D&D 157cdf0e10cSrcweir void DropCleanup(); 158cdf0e10cSrcweir void CleanupDropUserMarker(); 159cdf0e10cSrcweir sal_uInt16 GetDropDestination( const Point& rPixPnt, 160cdf0e10cSrcweir SdrObject ** ppObj = 0 ); 161cdf0e10cSrcweir //select the object/cursor at the mouse position of the context menu request 162cdf0e10cSrcweir sal_Bool SelectMenuPosition(SwWrtShell& rSh, const Point& rMousePos ); 163cdf0e10cSrcweir 164cdf0e10cSrcweir /* 165cdf0e10cSrcweir * Handler fuer das Weiterscrollen, wenn der Mauspointer innerhalb eines 166cdf0e10cSrcweir * Drag-Vorgangs ausserhalb des EditWin stehen bleibt. In regelmaessigen 167cdf0e10cSrcweir * Intervallen wird die Selektion in Richtung der Mausposition 168cdf0e10cSrcweir * vergroessert. 169cdf0e10cSrcweir */ 170cdf0e10cSrcweir DECL_LINK( TimerHandler, Timer * ); 171cdf0e10cSrcweir void StartDDTimer(); 172cdf0e10cSrcweir void StopDDTimer(SwWrtShell *, const Point &); 173cdf0e10cSrcweir DECL_LINK( DDHandler, Timer * ); 174cdf0e10cSrcweir 175cdf0e10cSrcweir // timer for ANY-KeyInut question without a following KeyInputEvent 176cdf0e10cSrcweir DECL_LINK( KeyInputFlushHandler, Timer * ); 177cdf0e10cSrcweir 178cdf0e10cSrcweir // Timer fuer verschachtelte KeyInputs (z.B. fuer Tabellen) 179cdf0e10cSrcweir DECL_LINK( KeyInputTimerHandler, Timer * ); 180cdf0e10cSrcweir 181cdf0e10cSrcweir // Timer fuer das ApplyTemplates per Maus (verkapptes Drag&Drop) 182cdf0e10cSrcweir DECL_LINK( TemplateTimerHdl, Timer* ); 183cdf0e10cSrcweir 184cdf0e10cSrcweir using OutputDevice::GetTextColor; 185cdf0e10cSrcweir 186cdf0e10cSrcweir protected: 187cdf0e10cSrcweir 188cdf0e10cSrcweir virtual void DataChanged( const DataChangedEvent& ); 189cdf0e10cSrcweir virtual void PrePaint(); 190cdf0e10cSrcweir virtual void Paint( const Rectangle& rRect ); 191cdf0e10cSrcweir virtual void KeyInput(const KeyEvent &rKEvt); 192cdf0e10cSrcweir 193cdf0e10cSrcweir virtual void GetFocus(); 194cdf0e10cSrcweir virtual void LoseFocus(); 195cdf0e10cSrcweir 196cdf0e10cSrcweir 197cdf0e10cSrcweir virtual void MouseMove(const MouseEvent& rMEvt); 198cdf0e10cSrcweir virtual void MouseButtonDown(const MouseEvent& rMEvt); 199cdf0e10cSrcweir virtual void MouseButtonUp(const MouseEvent& rMEvt); 200cdf0e10cSrcweir virtual void RequestHelp(const HelpEvent& rEvt); 201cdf0e10cSrcweir 202cdf0e10cSrcweir virtual void Command( const CommandEvent& rCEvt ); 203cdf0e10cSrcweir 204cdf0e10cSrcweir // Drag & Drop Interface 205cdf0e10cSrcweir virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); 206cdf0e10cSrcweir virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ); 207cdf0e10cSrcweir virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); 208cdf0e10cSrcweir 209cdf0e10cSrcweir virtual XubString GetSurroundingText() const; 210cdf0e10cSrcweir virtual Selection GetSurroundingTextSelection() const; 211cdf0e10cSrcweir 212cdf0e10cSrcweir void ShowAutoTextCorrectQuickHelp( const String& rWord, SvxAutoCorrCfg* pACfg, 213cdf0e10cSrcweir SvxAutoCorrect* pACorr, sal_Bool bFromIME = sal_False ); 214cdf0e10cSrcweir public: 215cdf0e10cSrcweir 216cdf0e10cSrcweir void UpdatePointer(const Point &, sal_uInt16 nButtons = 0); 217cdf0e10cSrcweir 218cdf0e10cSrcweir sal_Bool IsDrawSelMode(); 219cdf0e10cSrcweir sal_Bool IsDrawAction() { return (bInsDraw); } 220cdf0e10cSrcweir void SetDrawAction(sal_Bool bFlag) { bInsDraw = bFlag; } 221cdf0e10cSrcweir 222cdf0e10cSrcweir void SetObjectSelect( sal_Bool bVal ) { bObjectSelect = bVal; } 223cdf0e10cSrcweir sal_Bool IsObjectSelect() const { return bObjectSelect; } 224cdf0e10cSrcweir 225cdf0e10cSrcweir inline SdrObjKind GetSdrDrawMode(/*sal_Bool bBuf = sal_False*/) const { return eDrawMode; } 226cdf0e10cSrcweir inline void SetSdrDrawMode( SdrObjKind eSdrObjectKind ) { eDrawMode = eSdrObjectKind; SetObjectSelect( sal_False ); } 227cdf0e10cSrcweir void StdDrawMode( SdrObjKind eSdrObjectKind, sal_Bool bObjSelect ); 228cdf0e10cSrcweir 229cdf0e10cSrcweir sal_Bool IsFrmAction() { return (bInsFrm); } 230cdf0e10cSrcweir inline sal_uInt16 GetBezierMode() { return eBezierMode; } 231cdf0e10cSrcweir void SetBezierMode(sal_uInt16 eBezMode) { eBezierMode = eBezMode; } 232cdf0e10cSrcweir void EnterDrawTextMode(const Point& aDocPos); // DrawTextEditMode einschalten 233cdf0e10cSrcweir void InsFrm(sal_uInt16 nCols); 234cdf0e10cSrcweir void StopInsFrm(); 235cdf0e10cSrcweir sal_uInt16 GetFrmColCount() const {return nInsFrmColCount;} //Spaltenzahl fuer interaktiven Rahmen 236cdf0e10cSrcweir 237cdf0e10cSrcweir 238cdf0e10cSrcweir void SetChainMode( sal_Bool bOn ); 239cdf0e10cSrcweir sal_Bool IsChainMode() const { return bChainMode; } 240cdf0e10cSrcweir 241cdf0e10cSrcweir void FlushInBuffer(); 242cdf0e10cSrcweir sal_Bool IsInputSequenceCheckingRequired( const String &rText, const SwPaM& rCrsr ) const; 243cdf0e10cSrcweir 244cdf0e10cSrcweir 245cdf0e10cSrcweir static void SetReplaceQuote(sal_Bool bOn = sal_True) { bReplaceQuote = bOn; } 246cdf0e10cSrcweir static sal_Bool IsReplaceQuote() { return bReplaceQuote; } 247cdf0e10cSrcweir 248cdf0e10cSrcweir void SetApplyTemplate(const SwApplyTemplate &); 249cdf0e10cSrcweir SwApplyTemplate* GetApplyTemplate() const { return pApplyTempl; } 250cdf0e10cSrcweir 251cdf0e10cSrcweir void StartExecuteDrag(); 252cdf0e10cSrcweir void DragFinished(); 253cdf0e10cSrcweir sal_uInt16 GetDropAction() const { return m_nDropAction; } 254cdf0e10cSrcweir sal_uLong GetDropFormat() const { return m_nDropFormat; } 255cdf0e10cSrcweir 256cdf0e10cSrcweir Color GetTextColor() { return aTextColor; } 257cdf0e10cSrcweir 258cdf0e10cSrcweir void SetTextColor(const Color& rCol ) { aTextColor = rCol; } 259cdf0e10cSrcweir 260cdf0e10cSrcweir Color GetTextBackColor() 261cdf0e10cSrcweir { return aTextBackColor; } 262cdf0e10cSrcweir void SetTextBackColor(const Color& rCol ) 263cdf0e10cSrcweir { aTextBackColor = rCol; } 264cdf0e10cSrcweir void SetTextBackColorTransparent(sal_Bool bSet) 265cdf0e10cSrcweir { bTransparentBackColor = bSet; } 266cdf0e10cSrcweir sal_Bool IsTextBackColorTransparent() 267cdf0e10cSrcweir { return bTransparentBackColor; } 268cdf0e10cSrcweir void LockKeyInput(sal_Bool bSet){bLockInput = bSet;} 269cdf0e10cSrcweir 270cdf0e10cSrcweir const SwView &GetView() const { return rView; } 271cdf0e10cSrcweir SwView &GetView() { return rView; } 272cdf0e10cSrcweir 273cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible(); 274cdf0e10cSrcweir 275cdf0e10cSrcweir // Tipfenster loeschen 276cdf0e10cSrcweir static void ClearTip(); 277cdf0e10cSrcweir 278cdf0e10cSrcweir static inline long GetDDStartPosX() { return nDDStartPosX; } 279cdf0e10cSrcweir static inline long GetDDStartPosY() { return nDDStartPosY; } 280cdf0e10cSrcweir 281cdf0e10cSrcweir static void _InitStaticData(); 282cdf0e10cSrcweir static void _FinitStaticData(); 283cdf0e10cSrcweir 284cdf0e10cSrcweir //#i3370# remove quick help to prevent saving of autocorrection suggestions 285cdf0e10cSrcweir void StopQuickHelp(); 286cdf0e10cSrcweir 287cdf0e10cSrcweir // --> OD 2005-02-18 #i42921# - add parameter <bVerticalMode> 288cdf0e10cSrcweir sal_Bool RulerMarginDrag( const MouseEvent& rMEvt, 289cdf0e10cSrcweir const bool bVerticalMode ); 290cdf0e10cSrcweir // <-- 291cdf0e10cSrcweir 292cdf0e10cSrcweir /** #i42732# display status of font size/name depending on either the input 293cdf0e10cSrcweir language or the selection position depending on what has changed lately 294cdf0e10cSrcweir */ 295cdf0e10cSrcweir void SetUseInputLanguage( sal_Bool bNew ); 296cdf0e10cSrcweir sal_Bool IsUseInputLanguage() const { return bUseInputLanguage; } 297cdf0e10cSrcweir 298cdf0e10cSrcweir SwEditWin(Window *pParent, SwView &); 299cdf0e10cSrcweir virtual ~SwEditWin(); 300cdf0e10cSrcweir }; 301cdf0e10cSrcweir 302cdf0e10cSrcweir #endif 303cdf0e10cSrcweir 304