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