xref: /aoo41x/main/sc/source/ui/inc/inputhdl.hxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef SC_INPUTHDL_HXX
29 #define SC_INPUTHDL_HXX
30 
31 #include "global.hxx"
32 #include "address.hxx"
33 #include <tools/fract.hxx>
34 #include <tools/gen.hxx>
35 #include <editeng/svxenum.hxx>
36 
37 class ScDocument;
38 class ScTabView;
39 class ScTabViewShell;
40 class ScInputWindow;
41 class ScPatternAttr;
42 class EditEngine;
43 class ScEditEngineDefaulter;
44 class EditView;
45 class EditTextObject;
46 class ScInputHdlState;
47 class TypedScStrCollection;
48 class ScRangeFindList;
49 class Timer;
50 class KeyEvent;
51 class CommandEvent;
52 
53 struct ESelection;
54 
55 //========================================================================
56 //	ScInputHandler
57 //========================================================================
58 
59 class ScInputHandler
60 {
61 private:
62 	ScInputWindow*			pInputWin;
63 
64 	ScEditEngineDefaulter*	pEngine;   				// editierte Daten in der Tabelle
65 	EditView*				pTableView;					// aktive EditView dazu
66 	EditView*				pTopView;					// EditView in der Eingabezeile
67 
68 	TypedScStrCollection*		pColumnData;
69 	TypedScStrCollection*		pFormulaData;
70     TypedScStrCollection*		pFormulaDataPara;
71 	Window*					pTipVisibleParent;
72 	sal_uLong					nTipVisible;
73 	Window*					pTipVisibleSecParent;
74     sal_uLong                   nTipVisibleSec;
75 	String					aManualTip;
76 	String					aAutoSearch;
77 	sal_uInt16					nAutoPos;
78 	sal_Bool					bUseTab;					// Blaettern moeglich
79 
80 	sal_Bool					bTextValid;					// Text noch nicht in Edit-Engine
81 	String					aCurrentText;
82 
83 	String					aFormText;					// fuer Funktions-Autopilot
84 	xub_StrLen				nFormSelStart;				// Selektion fuer Funktions-Autopilot
85 	xub_StrLen				nFormSelEnd;
86 
87 	sal_uInt16					nAutoPar;					// autom.parentheses than can be overwritten
88 
89 	ScAddress				aCursorPos;
90 	ScInputMode				eMode;
91 	sal_Bool					bModified;
92 	sal_Bool					bSelIsRef;
93 	sal_Bool					bFormulaMode;
94 	sal_Bool					bInRangeUpdate;
95 	sal_Bool					bParenthesisShown;
96 	sal_Bool					bCreatingFuncView;
97 	sal_Bool					bInEnterHandler;
98 	sal_Bool					bCommandErrorShown;
99 	sal_Bool					bInOwnChange;
100 
101 	sal_Bool					bProtected;
102 	sal_Bool					bCellHasPercentFormat;
103 	sal_uLong					nValidation;
104     SvxCellHorJustify       eAttrAdjust;
105 
106 	Fraction				aScaleX;					// fuer Ref-MapMode
107 	Fraction				aScaleY;
108 
109 	ScTabViewShell*			pRefViewSh;
110 	ScTabViewShell*			pActiveViewSh;
111 
112 	const ScPatternAttr*	pLastPattern;
113 	SfxItemSet*			 	pEditDefaults;
114 	sal_Bool					bLastIsSymbol;
115 
116 	ScInputHdlState*		pLastState;
117 	Timer*					pDelayTimer;
118 
119 	ScRangeFindList*		pRangeFindList;
120 
121 	static sal_Bool				bAutoComplete;				// aus App-Optionen
122 	static sal_Bool				bOptLoaded;
123 
124 #ifdef _INPUTHDL_CXX
125 private:
126 	void			UpdateActiveView();
127 	void			SyncViews( EditView* pSourceView = NULL );
128 	sal_Bool			StartTable( sal_Unicode cTyped, sal_Bool bFromCommand );
129 	void			RemoveSelection();
130 	void			UpdateFormulaMode();
131 	void			InvalidateAttribs();
132 	void			ImplCreateEditEngine();
133 	DECL_LINK(		DelayTimer, Timer* );
134 	void			GetColData();
135 	void			UseColData();
136 	void			NextAutoEntry( sal_Bool bBack );
137 	void			UpdateAdjust( sal_Unicode cTyped );
138 	void			GetFormulaData();
139 	void			UseFormulaData();
140 	void			NextFormulaEntry( sal_Bool bBack );
141 	void			PasteFunctionData();
142 	void			PasteManualTip();
143 	EditView*		GetFuncEditView();
144 	void			RemoveAdjust();
145 	void			RemoveRangeFinder();
146 	void			DeleteRangeFinder();
147 	void			UpdateParenthesis();
148 	void			UpdateAutoCorrFlag();
149 	void			ResetAutoPar();
150 	void			AutoParAdded();
151 	sal_Bool			CursorAtClosingPar();
152 	void			SkipClosingPar();
153 	DECL_LINK( ModifyHdl, void* );
154 	DECL_LINK( ShowHideTipVisibleParentListener, VclWindowEvent* );
155 	DECL_LINK( ShowHideTipVisibleSecParentListener, VclWindowEvent* );
156 #endif
157 
158 public:
159 					ScInputHandler();
160 	virtual			~ScInputHandler();
161 
162 	void			SetMode( ScInputMode eNewMode );
163 	sal_Bool			IsInputMode() const	{ return (eMode != SC_INPUT_NONE); }
164 	sal_Bool			IsEditMode() const	{ return (eMode != SC_INPUT_NONE &&
165 												  eMode != SC_INPUT_TYPE); }
166 	sal_Bool			IsTopMode() const	{ return (eMode == SC_INPUT_TOP);  }
167 
168 	const String&	GetEditString();
169 	const String&	GetFormString() const	{ return aFormText; }
170 
171     const ScAddress& GetCursorPos() const   { return aCursorPos; }
172 
173 	sal_Bool			GetTextAndFields( ScEditEngineDefaulter& rDestEngine );
174 
175 	sal_Bool			KeyInput( const KeyEvent& rKEvt, sal_Bool bStartEdit = sal_False );
176 	void			EnterHandler( sal_uInt8 nBlockMode = 0 );
177 	void			CancelHandler();
178 	void			SetReference( const ScRange& rRef, ScDocument* pDoc );
179 	void			AddRefEntry();
180 
181 	sal_Bool			InputCommand( const CommandEvent& rCEvt, sal_Bool bForce );
182 
183 	void			InsertFunction( const String& rFuncName, sal_Bool bAddPar = sal_True );
184 	void			ClearText();
185 
186 	void			InputSelection( EditView* pView );
187 	void			InputChanged( EditView* pView, sal_Bool bFromNotify = sal_False );
188 
189 	void			ViewShellGone(ScTabViewShell* pViewSh);
190 	void			SetRefViewShell(ScTabViewShell*	pRefVsh) {pRefViewSh=pRefVsh;}
191 
192 
193 	void			NotifyChange( const ScInputHdlState* pState, sal_Bool bForce = sal_False,
194 									ScTabViewShell* pSourceSh = NULL,
195                                     sal_Bool bStopEditing = sal_True);
196     void            UpdateCellAdjust( SvxCellHorJustify eJust );
197 
198 	void			ResetDelayTimer(); //BugId 54702
199 
200 	void			HideTip();
201     void            HideTipBelow();
202     void            ShowTipCursor();
203 	void			ShowTip( const String& rText );		// am Cursor
204     void			ShowTipBelow( const String& rText );
205 
206 	void			SetRefScale( const Fraction& rX, const Fraction& rY );
207 	void			UpdateRefDevice();
208 
209 	EditView*		GetActiveView();
210 	EditView*		GetTableView()		{ return pTableView; }
211 	EditView*		GetTopView()		{ return pTopView; }
212 
213 	sal_Bool			DataChanging( sal_Unicode cTyped = 0, sal_Bool bFromCommand = sal_False );
214     void            DataChanged( sal_Bool bFromTopNotify = sal_False, sal_Bool bSetModified = sal_True );
215 
216 	sal_Bool			TakesReturn() const		{ return ( nTipVisible != 0 ); }
217 
218 	void			SetModified()		{ bModified = sal_True; }
219 
220 	sal_Bool			GetSelIsRef() const		{ return bSelIsRef; }
221 	void			SetSelIsRef(sal_Bool bSet)	{ bSelIsRef = bSet; }
222 
223 	void			ShowRefFrame();
224 
225 	ScRangeFindList* GetRangeFindList()		{ return pRangeFindList; }
226 
227 	void			UpdateRange( sal_uInt16 nIndex, const ScRange& rNew );
228 
229 	// Kommunikation mit Funktionsautopilot
230 	void			InputGetSelection		( xub_StrLen& rStart, xub_StrLen& rEnd );
231 	void		 	InputSetSelection		( xub_StrLen nStart, xub_StrLen nEnd );
232 	void		 	InputReplaceSelection	( const String& rStr );
233 	String			InputGetFormulaStr		();
234 
235 	sal_Bool			IsFormulaMode() const					{ return bFormulaMode; }
236 	ScInputWindow*	GetInputWindow()						{ return pInputWin; }
237 	void			SetInputWindow( ScInputWindow* pNew )	{ pInputWin = pNew; }
238 	void			StopInputWinEngine( sal_Bool bAll );
239 
240 	sal_Bool			IsInEnterHandler() const				{ return bInEnterHandler; }
241 	sal_Bool			IsInOwnChange() const					{ return bInOwnChange; }
242 
243 	sal_Bool			IsModalMode( SfxObjectShell* pDocSh );
244 
245 	void			ForgetLastPattern();
246 
247 	void			UpdateSpellSettings( sal_Bool bFromStartTab = sal_False );
248 
249 	void			FormulaPreview();
250 
251 	Size			GetTextSize();		// in 1/100mm
252 
253 					// eigentlich private, fuer SID_INPUT_SUM public
254 	void			InitRangeFinder( const String& rFormula );
255 
256 	static void		SetAutoComplete(sal_Bool bSet)	{ bAutoComplete = bSet; }
257 };
258 
259 //========================================================================
260 //	ScInputHdlState
261 //========================================================================
262 class ScInputHdlState
263 {
264 	friend class ScInputHandler;
265 
266 public:
267 		ScInputHdlState( const ScAddress& rCurPos,
268 						 const ScAddress& rStartPos,
269 						 const ScAddress& rEndPos,
270 						 const String& rString,
271 						 const EditTextObject* pData );
272 		ScInputHdlState( const ScInputHdlState& rCpy );
273 		~ScInputHdlState();
274 
275 	ScInputHdlState&	operator= ( const ScInputHdlState& r );
276 	int					operator==( const ScInputHdlState& r ) const;
277 	int					operator!=( const ScInputHdlState& r ) const
278 							{ return !operator==( r ); }
279 
280 	const ScAddress&		GetPos() const 			{ return aCursorPos; }
281 	const ScAddress&		GetStartPos() const 	{ return aStartPos; }
282 	const ScAddress& 		GetEndPos() const 		{ return aEndPos; }
283 	const String&			GetString() const		{ return aString; }
284 	const EditTextObject*	GetEditData() const		{ return pEditData; }
285 
286 private:
287 	ScAddress		aCursorPos;
288 	ScAddress		aStartPos;
289 	ScAddress		aEndPos;
290 	String			aString;
291 	EditTextObject* pEditData;
292 };
293 
294 
295 
296 #endif
297 
298 
299