/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef _EDTWIN_HXX #define _EDTWIN_HXX #include #include #include #include #include #include #define _SVSTDARR_STRINGSISORTDTOR #include class SwWrtShell; class SwView; class SwRect; class ViewShell; class SwAnchorMarker; class SdrObject; class SwShadowCursor; class DataChangedEvent; class SvxAutoCorrCfg; class SvxAutoCorrect; class SwPaM; struct SwApplyTemplate; struct QuickHelpData; class SdrDropMarkerOverlay; /*-------------------------------------------------------------------- Beschreibung: Eingabe-Fenster --------------------------------------------------------------------*/ class SwEditWin: public Window, public DropTargetHelper, public DragSourceHelper { friend void ScrollMDI(ViewShell* pVwSh, const SwRect&, sal_uInt16 nRangeX, sal_uInt16 nRangeY); friend sal_Bool IsScrollMDI(ViewShell* pVwSh, const SwRect&); friend void SizeNotify(ViewShell* pVwSh, const Size &); friend void PageNumNotify( ViewShell* pVwSh, sal_uInt16 nPhyNum, sal_uInt16 nVirtNum, const String& rPg ); static QuickHelpData* pQuickHlpData; static sal_Bool bReplaceQuote; static long nDDStartPosX, nDDStartPosY; static Color aTextColor; //Textfarbe, fuer die Giesskanne static sal_Bool bTransparentBackColor; // Hintergrund transparent static Color aTextBackColor; //Texthintergrundfarbe, fuer die Giesskanne /* * Timer und Handler fuer das Weiterscrollen, wenn der * Mauspointer innerhalb eines Drag-Vorgangs ausserhalb des * EditWin stehen bleibt. In regelmaessigen Intervallen wird * die Selektion in Richtung der Mausposition vergroessert. */ AutoTimer aTimer; // Timer fuer verschachtelte KeyInputs (z.B. fuer Tabellen) Timer aKeyInputTimer; // timer for ANY-KeyInut question without a following KeyInputEvent Timer aKeyInputFlushTimer; String aInBuffer; LanguageType eBufferLanguage; Point aStartPos; Point aMovePos; Point aRszMvHdlPt; Timer aTemplateTimer; // Type/Objecte ueber dem der MousePointer steht SwCallMouseEvent aSaveCallEvent; SwApplyTemplate *pApplyTempl; SwAnchorMarker *pAnchorMarker; // zum Verschieben eines Ankers SdrDropMarkerOverlay *pUserMarker; SdrObject *pUserMarkerObj; SwShadowCursor *pShadCrsr; Point *pRowColumnSelectionStart; // save position where table row/column selection has been started SwView &rView; int aActHitType; // aktueller Mauspointer sal_uLong m_nDropFormat; //Format aus dem letzten QueryDrop sal_uInt16 m_nDropAction; //Action aus dem letzten QueryDrop sal_uInt16 m_nDropDestination; //Ziel aus dem letzten QueryDrop sal_uInt16 eBezierMode; sal_uInt16 nInsFrmColCount; //Spaltenzahl fuer interaktiven Rahmen SdrObjKind eDrawMode; sal_Bool bLinkRemoved : 1, bMBPressed : 1, bInsDraw : 1, bInsFrm : 1, bIsInMove : 1, bIsInDrag : 1, //StartExecuteDrag nich doppelt ausfuehren bOldIdle : 1, //Zum abschalten des Idle'ns bOldIdleSet : 1, //waehrend QeueryDrop bTblInsDelMode : 1, // bTblIsInsMode : 1, // bTblIsColMode : 1, // bChainMode : 1, //Rahmen verbinden bWasShdwCrsr : 1, //ShadowCrsr war im MouseButtonDown an bLockInput : 1, //Lock waehrend die Rechenleiste aktiv ist bIsRowDrag : 1, //selection of rows is used, in combination with pRowColumnSelectionStart /** #i42732# display status of font size/name depending on either the input language or the selection position depending on what has changed lately */ bUseInputLanguage: 1, bObjectSelect : 1; sal_uInt16 nKS_NUMDOWN_Count; // #i23725# sal_uInt16 nKS_NUMINDENTINC_Count; void LeaveArea(const Point &); void JustifyAreaTimer(); inline void EnterArea(); void RstMBDownFlags(); void ChangeFly( sal_uInt8 nDir, sal_Bool bWeb = sal_False ); void ChangeDrawing( sal_uInt8 nDir ); sal_Bool EnterDrawMode(const MouseEvent& rMEvt, const Point& aDocPos); sal_Bool RulerColumnDrag( const MouseEvent& rMEvt, sal_Bool bVerticalMode); //Hilfsfunktionen fuer D&D void DropCleanup(); void CleanupDropUserMarker(); sal_uInt16 GetDropDestination( const Point& rPixPnt, SdrObject ** ppObj = 0 ); //select the object/cursor at the mouse position of the context menu request sal_Bool SelectMenuPosition(SwWrtShell& rSh, const Point& rMousePos ); /* * Handler fuer das Weiterscrollen, wenn der Mauspointer innerhalb eines * Drag-Vorgangs ausserhalb des EditWin stehen bleibt. In regelmaessigen * Intervallen wird die Selektion in Richtung der Mausposition * vergroessert. */ DECL_LINK( TimerHandler, Timer * ); void StartDDTimer(); void StopDDTimer(SwWrtShell *, const Point &); DECL_LINK( DDHandler, Timer * ); // timer for ANY-KeyInut question without a following KeyInputEvent DECL_LINK( KeyInputFlushHandler, Timer * ); // Timer fuer verschachtelte KeyInputs (z.B. fuer Tabellen) DECL_LINK( KeyInputTimerHandler, Timer * ); // Timer fuer das ApplyTemplates per Maus (verkapptes Drag&Drop) DECL_LINK( TemplateTimerHdl, Timer* ); using OutputDevice::GetTextColor; protected: virtual void DataChanged( const DataChangedEvent& ); virtual void PrePaint(); virtual void Paint( const Rectangle& rRect ); virtual void KeyInput(const KeyEvent &rKEvt); virtual void GetFocus(); virtual void LoseFocus(); virtual void MouseMove(const MouseEvent& rMEvt); virtual void MouseButtonDown(const MouseEvent& rMEvt); virtual void MouseButtonUp(const MouseEvent& rMEvt); virtual void RequestHelp(const HelpEvent& rEvt); virtual void Command( const CommandEvent& rCEvt ); // Drag & Drop Interface virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ); virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); virtual XubString GetSurroundingText() const; virtual Selection GetSurroundingTextSelection() const; void ShowAutoTextCorrectQuickHelp( const String& rWord, SvxAutoCorrCfg* pACfg, SvxAutoCorrect* pACorr, sal_Bool bFromIME = sal_False ); public: void UpdatePointer(const Point &, sal_uInt16 nButtons = 0); sal_Bool IsDrawSelMode(); sal_Bool IsDrawAction() { return (bInsDraw); } void SetDrawAction(sal_Bool bFlag) { bInsDraw = bFlag; } void SetObjectSelect( sal_Bool bVal ) { bObjectSelect = bVal; } sal_Bool IsObjectSelect() const { return bObjectSelect; } inline SdrObjKind GetSdrDrawMode(/*sal_Bool bBuf = sal_False*/) const { return eDrawMode; } inline void SetSdrDrawMode( SdrObjKind eSdrObjectKind ) { eDrawMode = eSdrObjectKind; SetObjectSelect( sal_False ); } void StdDrawMode( SdrObjKind eSdrObjectKind, sal_Bool bObjSelect ); sal_Bool IsFrmAction() { return (bInsFrm); } inline sal_uInt16 GetBezierMode() { return eBezierMode; } void SetBezierMode(sal_uInt16 eBezMode) { eBezierMode = eBezMode; } void EnterDrawTextMode(const Point& aDocPos); // DrawTextEditMode einschalten void InsFrm(sal_uInt16 nCols); void StopInsFrm(); sal_uInt16 GetFrmColCount() const {return nInsFrmColCount;} //Spaltenzahl fuer interaktiven Rahmen void SetChainMode( sal_Bool bOn ); sal_Bool IsChainMode() const { return bChainMode; } void FlushInBuffer(); sal_Bool IsInputSequenceCheckingRequired( const String &rText, const SwPaM& rCrsr ) const; static void SetReplaceQuote(sal_Bool bOn = sal_True) { bReplaceQuote = bOn; } static sal_Bool IsReplaceQuote() { return bReplaceQuote; } void SetApplyTemplate(const SwApplyTemplate &); SwApplyTemplate* GetApplyTemplate() const { return pApplyTempl; } void StartExecuteDrag(); void DragFinished(); sal_uInt16 GetDropAction() const { return m_nDropAction; } sal_uLong GetDropFormat() const { return m_nDropFormat; } Color GetTextColor() { return aTextColor; } void SetTextColor(const Color& rCol ) { aTextColor = rCol; } Color GetTextBackColor() { return aTextBackColor; } void SetTextBackColor(const Color& rCol ) { aTextBackColor = rCol; } void SetTextBackColorTransparent(sal_Bool bSet) { bTransparentBackColor = bSet; } sal_Bool IsTextBackColorTransparent() { return bTransparentBackColor; } void LockKeyInput(sal_Bool bSet){bLockInput = bSet;} const SwView &GetView() const { return rView; } SwView &GetView() { return rView; } virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible(); // Tipfenster loeschen static void ClearTip(); static inline long GetDDStartPosX() { return nDDStartPosX; } static inline long GetDDStartPosY() { return nDDStartPosY; } static void _InitStaticData(); static void _FinitStaticData(); //#i3370# remove quick help to prevent saving of autocorrection suggestions void StopQuickHelp(); // --> OD 2005-02-18 #i42921# - add parameter sal_Bool RulerMarginDrag( const MouseEvent& rMEvt, const bool bVerticalMode ); // <-- /** #i42732# display status of font size/name depending on either the input language or the selection position depending on what has changed lately */ void SetUseInputLanguage( sal_Bool bNew ); sal_Bool IsUseInputLanguage() const { return bUseInputLanguage; } SwEditWin(Window *pParent, SwView &); virtual ~SwEditWin(); virtual void SwitchView(); }; #endif