xref: /trunk/main/sc/source/ui/inc/tabvwsh.hxx (revision 0deba7fb)
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 
24 #ifndef SC_TABVWSH_HXX
25 #define SC_TABVWSH_HXX
26 
27 #include <svtools/htmlcfg.hxx>
28 #include <sfx2/viewsh.hxx>
29 #include <sfx2/viewfac.hxx>
30 #include <editeng/svxenum.hxx>
31 #include "scdllapi.h"
32 #include "dbfunc.hxx"			// -> tabview
33 #include "target.hxx"
34 #include "rangelst.hxx"			// ScRangeListRef
35 #include "shellids.hxx"
36 #include "tabprotection.hxx" // for ScPasswordHash
37 
38 class FmFormShell;
39 class SbxObject;
40 class SdrOle2Obj;
41 class SfxBindings;
42 class SfxChildWindow;
43 class SfxModelessDialog;
44 class SvxBorderLine;
45 class SvxBoxObjectRef;
46 class SvxNumberInfoItem;
47 struct SfxChildWinInfo;
48 
49 class ScArea;
50 class ScAuditingShell;
51 class ScDrawShell;
52 class ScDrawTextObjectBar;
53 class ScEditShell;
54 class ScInputHandler;
55 class ScPivotShell;
56 class ScDrawFormShell;
57 class ScCellShell;
58 class ScOleObjectShell;
59 class ScGraphicShell;
60 class ScMediaShell;
61 class ScChartShell;
62 class ScPageBreakShell;
63 class ScDPObject;
64 class ScNavigatorSettings;
65 
66 struct ScHeaderFieldData;
67 
68 namespace com { namespace sun { namespace star { namespace frame {
69 	class XDispatchProviderInterceptor;
70 } } } }
71 
72 namespace svx {
73 	class ExtrusionBar;
74 	class FontworkBar;
75 }
76 
77 enum ObjectSelectionType
78 {
79 	OST_NONE,
80 	OST_Cell,
81 	OST_Editing,
82 	OST_DrawText,
83 	OST_Drawing,
84 	OST_DrawForm,
85 	OST_Pivot,
86 	OST_Auditing,
87 	OST_OleObject,
88 	OST_Chart,
89 	OST_Graphic,
90 	OST_Media
91 };
92 
93 //==================================================================
94 
95 
96 class ScTabViewShell: public SfxViewShell, public ScDBFunc
97 {
98 private:
99 	static sal_uInt16			nInsertCtrlState;
100 	static sal_uInt16			nInsCellsCtrlState;
101 	static sal_uInt16			nInsObjCtrlState;
102 
103     SvxHtmlOptions          aHTMLOpt;
104 	ObjectSelectionType		eCurOST;
105 	sal_uInt16					nDrawSfxId;
106 	sal_uInt16					nCtrlSfxId;
107 	sal_uInt16					nFormSfxId;
108     String                  sDrawCustom;                // current custom shape type
109 	ScDrawShell*			pDrawShell;
110 	ScDrawTextObjectBar*	pDrawTextShell;
111 	ScEditShell*			pEditShell;
112 	ScPivotShell*			pPivotShell;
113 	ScAuditingShell*		pAuditingShell;
114 	ScDrawFormShell*		pDrawFormShell;
115 	ScCellShell*			pCellShell;
116 	ScOleObjectShell*		pOleObjectShell;
117 	ScChartShell*			pChartShell;
118 	ScGraphicShell*			pGraphicShell;
119 	ScMediaShell*			pMediaShell;
120 	ScPageBreakShell*		pPageBreakShell;
121 	svx::ExtrusionBar*		pExtrusionBarShell;
122 	svx::FontworkBar*		pFontworkBarShell;
123 
124 	FmFormShell*			pFormShell;
125 
126 	ScInputHandler*			pInputHandler;				// fuer OLE-Eingabezeile
127 
128 	SvxBorderLine*			pCurFrameLine;
129 
130 	::com::sun::star::uno::Reference<
131 		::com::sun::star::frame::XDispatchProviderInterceptor >
132 							xDisProvInterceptor;
133 
134 	Point					aWinPos;
135 
136 	ScTabViewTarget			aTarget;
137 	ScArea*					pPivotSource;
138 	ScDPObject*				pDialogDPObject;
139 
140     ScNavigatorSettings*    pNavSettings;
141 
142     // used in first Activate
143 	sal_Bool					bFirstActivate;
144 
145 	sal_Bool					bActiveDrawSh;
146 	sal_Bool					bActiveDrawTextSh;
147 	sal_Bool					bActivePivotSh;
148 	sal_Bool					bActiveAuditingSh;
149 	sal_Bool					bActiveDrawFormSh;
150 	sal_Bool					bActiveOleObjectSh;
151 	sal_Bool					bActiveChartSh;
152 	sal_Bool					bActiveGraphicSh;
153 	sal_Bool					bActiveMediaSh;
154 	sal_Bool					bActiveEditSh;
155 
156 	sal_Bool                    bFormShellAtTop;            // does the FormShell need to be on top?
157 
158 
159 	sal_Bool					bDontSwitch;				// EditShell nicht abschalten
160 	sal_Bool					bInFormatDialog;			// fuer GetSelectionText
161 	sal_Bool					bPrintSelected;				// for result of SvxPrtQryBox
162 
163 	sal_Bool					bReadOnly;					// um Status-Aenderungen zu erkennen
164 //IAccessibility2 Implementation 2009-----
165 	sal_Bool 					bIsActive;
166 //-----IAccessibility2 Implementation 2009
167 	SbxObject*				pScSbxObject;
168 
169 //UNUSED2008-05  sal_Bool                    bChartDlgIsEdit;            // Datenbereich aendern
170 	sal_Bool					bChartAreaValid;			// wenn Chart aufgezogen wird
171 	String					aEditChartName;
172 	ScRangeListRef			aChartSource;
173 	Rectangle				aChartPos;
174 	SCTAB					nChartDestTab;
175 	sal_uInt16					nCurRefDlgId;
176 
177 	SfxBroadcaster*			pAccessibilityBroadcaster;
178 
179 	static const int		MASTERENUMCOMMANDS = 6;
180     String					aCurrShapeEnumCommand[ MASTERENUMCOMMANDS ];
181 
182 private:
183 	void	Construct( sal_uInt8 nForceDesignMode = SC_FORCEMODE_NONE );
184 
185 //UNUSED2008-05  void          SetMySubShell( SfxShell* pShell );
186 	SfxShell*		GetMySubShell() const;
187 
188 	void			DoReadUserData( const String& rData );
189     void          DoReadUserDataSequence( const ::com::sun::star::uno::Sequence<
190                                      ::com::sun::star::beans::PropertyValue >& rSettings );
191 
192 	DECL_LINK( SimpleRefClose, String* );
193 	DECL_LINK( SimpleRefDone, String* );
194 	DECL_LINK( SimpleRefAborted, String* );
195 	DECL_LINK( SimpleRefChange, String* );
196     DECL_LINK( FormControlActivated, FmFormShell* );
197 	DECL_LINK( HtmlOptionsHdl, void * );
198 
199 protected:
200 	virtual void	Activate(sal_Bool bMDI);
201 	virtual void	Deactivate(sal_Bool bMDI);
202 	virtual sal_uInt16	PrepareClose( sal_Bool bUI = sal_True, sal_Bool bForBrowsing = sal_False );
203 
204 	virtual void	ShowCursor(FASTBOOL bOn);
205 
206 	virtual void	Move();		// Benachrichtigung
207 
208 	virtual void	AdjustPosSizePixel( const Point &rPos, const Size &rSize );		// alt
209 
210 	virtual void	InnerResizePixel( const Point &rOfs, const Size &rSize );		// neu
211 	virtual void	OuterResizePixel( const Point &rOfs, const Size &rSize );
212 	virtual void	SetZoomFactor( const Fraction &rZoomX, const Fraction &rZoomY );
213 
214 	virtual void	QueryObjAreaPixel( Rectangle& rRect ) const;
215 
216 	virtual Size	GetOptimalSizePixel() const;
217 
218 	virtual String  GetSelectionText( sal_Bool bWholeWord );
219 	virtual sal_Bool	HasSelection( sal_Bool bText ) const;
220 	virtual String  GetDescription() const;
221 
222 	virtual void	WriteUserData(String &, sal_Bool bBrowse = sal_False);
223 	virtual void	ReadUserData(const String &, sal_Bool bBrowse = sal_False);
224     virtual void    WriteUserDataSequence (::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >&, sal_Bool bBrowse = sal_False );
225     virtual void    ReadUserDataSequence (const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >&, sal_Bool bBrowse = sal_False );
226 
227     virtual void    UIDeactivated( SfxInPlaceClient* pClient );
228 
229 	virtual FASTBOOL KeyInput( const KeyEvent &rKeyEvent );
230 	virtual SdrView* GetDrawView() const;
231 
232 public:
233 					TYPEINFO_VISIBILITY(SC_DLLPUBLIC);
234 
235 					SFX_DECL_INTERFACE(SCID_TABVIEW_SHELL)
236 					SFX_DECL_VIEWFACTORY(ScTabViewShell);
237 
238 
239 					// -> Clone-Methode fuer Factory
240 
241 //UNUSED2008-05  ScTabViewShell( SfxViewFrame*           pViewFrame,
242 //UNUSED2008-05                  const ScTabViewShell&   rWin );
243 
244 					// aus einer allgemeinen Shell konstruieren und
245 					// soviel wie moeglich uebernehmen (SliderPos etc.):
246 
247 					ScTabViewShell( SfxViewFrame*			pViewFrame,
248 									SfxViewShell*			pOldSh );
249 
250 	virtual			~ScTabViewShell();
251 
252 	Window*			GetDialogParent();
253 
254     bool            IsRefInputMode() const;
255 	void			ExecuteInputDirect();
256 
257 	ScInputHandler*	GetInputHandler() const;
258 	void			UpdateInputHandler( sal_Bool bForce = sal_False, sal_Bool bStopEditing = sal_True );
259     void            UpdateInputHandlerCellAdjust( SvxCellHorJustify eJust );
260 	sal_Bool			TabKeyInput(const KeyEvent& rKEvt);
261 	sal_Bool			SfxKeyInput(const KeyEvent& rKEvt);
262 
263 	void			SetActive();
264 
265 	SvxBorderLine*	GetDefaultFrameLine() const { return pCurFrameLine; }
266 	void 			SetDefaultFrameLine(const SvxBorderLine* pLine );
267 
268 //UNUSED2008-05  void            ExecuteShowNIY( SfxRequest& rReq );
269 //UNUSED2008-05  void			StateDisabled( SfxItemSet& rSet );
270 
271 	SC_DLLPUBLIC void			Execute( SfxRequest& rReq );
272 	SC_DLLPUBLIC void			GetState( SfxItemSet& rSet );
273 
274 	void			ExecuteTable( SfxRequest& rReq );
275 	void			GetStateTable( SfxItemSet& rSet );
276 
277 	void			WindowChanged();
278 	void 			ExecDraw(SfxRequest&);
279 	void			ExecDrawIns(SfxRequest& rReq);
280 	void 			GetDrawState(SfxItemSet &rSet);
281 	void 			GetDrawInsState(SfxItemSet &rSet);
282 	void			ExecGallery(SfxRequest& rReq);		// StarGallery
283 	void			GetGalleryState(SfxItemSet& rSet);
284 
285 	void			ExecChildWin(SfxRequest& rReq);
286 	void			GetChildWinState( SfxItemSet& rSet );
287 
288 	void			ExecImageMap( SfxRequest& rReq );
289 	void			GetImageMapState( SfxItemSet& rSet );
290 
291 	void			ExecTbx( SfxRequest& rReq );
292 	void			GetTbxState( SfxItemSet& rSet );
293 
294 	void			ExecuteSave( SfxRequest& rReq );
295 	void			GetSaveState( SfxItemSet& rSet );
296 	void			ExecSearch( SfxRequest& rReq );
297 
298 	void			ExecuteUndo(SfxRequest& rReq);
299 	void			GetUndoState(SfxItemSet &rSet);
300 
301 	void			ExecuteSbx( SfxRequest& rReq );
302 	void			GetSbxState( SfxItemSet& rSet );
303 
304 	void			ExecuteObject(SfxRequest& rReq);
305 	void			GetObjectState(SfxItemSet &rSet);
306 
307 	void			ExecDrawOpt(SfxRequest& rReq);
308 	void			GetDrawOptState(SfxItemSet &rSet);
309 
310     void            UpdateDrawShell();
311 	void			SetDrawShell( sal_Bool bActive );
312 	void			SetDrawTextShell( sal_Bool bActive );
313 
314 	void			SetPivotShell( sal_Bool bActive );
315 	ScArea*			GetPivotSource(){return pPivotSource;}
316 	void			SetPivotSource(ScArea* pSrc){pPivotSource=pSrc;}
317 	void			SetDialogDPObject( const ScDPObject* pObj );
318 	const ScDPObject* GetDialogDPObject() const { return pDialogDPObject; }
319 
320 	sal_Bool			GetDontSwitch(){return bDontSwitch;}
321 	void			SetDontSwitch(sal_Bool bFlag){bDontSwitch=bFlag;}
322 
323 
324 	void			SetAuditShell( sal_Bool bActive );
325 	void			SetDrawFormShell( sal_Bool bActive );
326 	void			SetEditShell(EditView* pView, sal_Bool bActive );
327 	void			SetOleObjectShell( sal_Bool bActive );
328 	void			SetChartShell( sal_Bool bActive );
329 	void			SetGraphicShell( sal_Bool bActive );
330 	void			SetMediaShell( sal_Bool bActive );
331 
332 
333 	void			SetDrawShellOrSub();
334 	void			SetCurSubShell( ObjectSelectionType eOST, sal_Bool bForce = sal_False );
335 
336     void            SetFormShellAtTop( sal_Bool bSet );
337 
338 	ObjectSelectionType GetCurObjectSelectionType();
339 
340 	virtual ErrCode	DoVerb(long nVerb);
341 
342 
343 	void			StopEditShell();
344 	sal_Bool			IsDrawTextShell() const;
345 	sal_Bool			IsAuditShell() const;
346 
347 	void			SetDrawTextUndo( ::svl::IUndoManager* pUndoMgr );
348 
349 	void			FillFieldData( ScHeaderFieldData& rData );
350 
351 //UNUSED2008-05  void            ResetChartArea();
352 	void			SetChartArea( const ScRangeListRef& rSource, const Rectangle& rDest );
353 	sal_Bool			GetChartArea( ScRangeListRef& rSource, Rectangle& rDest, SCTAB& rTab ) const;
354 
355 //UNUSED2008-05  sal_Bool            IsChartDlgEdit() const;
356 //UNUSED2008-05  void            SetChartDlgEdit(sal_Bool bFlag){bChartDlgIsEdit=bFlag;}
357 
358 	void			SetEditChartName(const String& aStr){aEditChartName=aStr;}
359 //UNUSED2008-05  const String&   GetEditChartName() const;
360 
361 	virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
362 
363     ScNavigatorSettings*    GetNavigatorSettings();
364 
365 	// Drucken:
366 	virtual SfxPrinter*		GetPrinter( sal_Bool bCreate = sal_False );
367 	virtual sal_uInt16			SetPrinter( SfxPrinter* pNewPrinter,
368                                           sal_uInt16 nDiffFlags = SFX_PRINTER_ALL, bool bIsApi=false );
369 
370 	virtual SfxTabPage*     CreatePrintOptionsPage( Window *pParent, const SfxItemSet &rOptions );
371 
372 	void			ConnectObject( SdrOle2Obj* pObj );
373 	sal_Bool			ActivateObject( SdrOle2Obj* pObj, long nVerb );
374 
375     void            DeactivateOle();
376 
377 	SC_DLLPUBLIC static ScTabViewShell* GetActiveViewShell();
378 	SfxModelessDialog*	CreateRefDialog( SfxBindings* pB, SfxChildWindow* pCW,
379 										SfxChildWinInfo* pInfo,
380 										Window* pParent, sal_uInt16 nSlotId );
381 
382 	void			UpdateOleZoom();
383 	inline SbxObject* GetScSbxObject() const
384 					{ return pScSbxObject; }
385 	inline void		SetScSbxObject( SbxObject* pOb )
386 					{ pScSbxObject = pOb; }
387 
388 	FmFormShell*	GetFormShell() const	{ return pFormShell; }
389 
390 	void 	InsertURL( const String& rName, const String& rURL, const String& rTarget,
391 							sal_uInt16 nMode );
392 	void 	InsertURLButton( const String& rName, const String& rURL, const String& rTarget,
393 							const Point* pInsPos = NULL );
394 	void 	InsertURLField( const String& rName, const String& rURL, const String& rTarget );
395 
396 	sal_Bool	SelectObject( const String& rName );
397 
398 	void	SetInFormatDialog(sal_Bool bFlag) {bInFormatDialog=bFlag;}
399 	sal_Bool    IsInFormatDialog() {return bInFormatDialog;}
400 
401 	void	ForceMove()		{ Move(); }
402 
403 	void 	MakeNumberInfoItem		( ScDocument*			 pDoc,
404 									  ScViewData*			 pViewData,
405 									  SvxNumberInfoItem**	 ppItem );
406 
407 	void 	UpdateNumberFormatter	( ScDocument*		     	pDoc,
408 									  const SvxNumberInfoItem& 	rInfoItem );
409 
410 	void	ExecuteCellFormatDlg	( SfxRequest& rReq, sal_uInt16 nTabPage = 0xffff );
411 
412 	sal_Bool	GetFunction( String& rFuncStr, sal_uInt16 nErrCode = 0 );
413 
414 	void	StartSimpleRefDialog( const String& rTitle, const String& rInitVal,
415                                     sal_Bool bCloseOnButtonUp, sal_Bool bSingleCell, sal_Bool bMultiSelection );
416 	void	StopSimpleRefDialog();
417 
418 	void	SetCurRefDlgId( sal_uInt16 nNew );
419 
420 	void	AddAccessibilityObject( SfxListener& rObject );
421 	void	RemoveAccessibilityObject( SfxListener& rObject );
422 	void	BroadcastAccessibility( const SfxHint &rHint );
423 	sal_Bool	HasAccessibilityObjects();
424 
425     bool    ExecuteRetypePassDlg(ScPasswordHash eDesiredHash);
426 
427     using ScTabView::ShowCursor;
428 //IAccessibility2 Implementation 2009-----
429 	sal_Bool IsActive(){ return bIsActive; }
430 	rtl::OUString GetFormula(ScAddress& rAddress);
431 	const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & GetForms() const;
432 //-----IAccessibility2 Implementation 2009
433 };
434 
435 //==================================================================
436 
437 
438 #endif
439 
440