xref: /trunk/main/basctl/source/inc/basidesh.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 #ifndef _BASIDESH_HXX
28 #define _BASIDESH_HXX
29 
30 #include "sbxitem.hxx"
31 
32 #include "scriptdocument.hxx"
33 #include "doceventnotifier.hxx"
34 #include <sfx2/viewfac.hxx>
35 #include <sfx2/shell.hxx>
36 #ifndef _SCRBAR_HXX //autogen
37 #include <vcl/scrbar.hxx>
38 #endif
39 #ifndef _TABLE_HXX //autogen
40 #include <tools/table.hxx>
41 #endif
42 #include <sfx2/viewsh.hxx>
43 #include <svx/ifaceids.hxx>
44 
45 #ifndef _COM_SUN_STAR_IO_XINPUTSTREAMPROVIDER_HXX_
46 #include <com/sun/star/io/XInputStreamProvider.hpp>
47 #endif
48 
49 #include <com/sun/star/container/XContainerListener.hpp>
50 
51 //----------------------------------------------------------------------------
52 
53 const sal_uLong BASICIDE_UI_FEATURE_SHOW_BROWSER = 0x00000001;
54 
55 //----------------------------------------------------------------------------
56 
57 class ModulWindow;
58 class ModulWindowLayout;
59 class DialogWindow;
60 class SdrView;
61 class ObjectCatalog;
62 class BasicIDETabBar;
63 class TabBar;
64 class IDEBaseWindow;
65 class SbxObject;
66 class SbModule;
67 class StarBASIC;
68 class LocalizationMgr;
69 struct BasicIDEShell_Impl;
70 
71 #if _SOLAR__PRIVATE
72 DECLARE_TABLE( IDEWindowTable, IDEBaseWindow* )
73 #else
74 typedef Table IDEWindowTable;
75 #endif
76 
77 namespace BasicIDE
78 {
79     bool RemoveDialog( const ScriptDocument& rDocument, const String& rLibName, const String& rDlgName );
80 }
81 
82 class BasicIDEShell :public SfxViewShell
83                     ,public ::basctl::DocumentEventListener
84 {
85 friend class JavaDebuggingListenerImpl;
86 friend class LocalizationMgr;
87 friend sal_Bool implImportDialog( Window* pWin, const String& rCurPath, const ScriptDocument& rDocument, const String& aLibName );
88 friend bool BasicIDE::RemoveDialog( const ScriptDocument& rDocument, const String& rLibName, const String& rDlgName );
89 
90 	ObjectCatalog* 		pObjectCatalog;
91 
92 	IDEWindowTable		aIDEWindowTable;
93 	sal_uInt16				nCurKey;
94 	IDEBaseWindow* 		pCurWin;
95     ScriptDocument      m_aCurDocument;
96     String              m_aCurLibName;
97 	LocalizationMgr*	m_pCurLocalizationMgr;
98 
99 	ScrollBar			aHScrollBar;
100 	ScrollBar			aVScrollBar;
101 	ScrollBarBox		aScrollBarBox;
102 	BasicIDETabBar*		pTabBar;
103 	sal_Bool				bTabBarSplitted;
104 	sal_Bool				bCreatingWindow;
105 	ModulWindowLayout*	pModulLayout;
106     sal_Bool                m_bAppBasicModified;
107     ::basctl::DocumentEventNotifier
108                         m_aNotifier;
109 friend class ContainerListenerImpl;
110     ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener > m_xLibListener;
111 
112 #if _SOLAR__PRIVATE
113 	void				Init();
114 	void				InitTabBar();
115 	void				InitScrollBars();
116 	void				CheckWindows();
117 	void				RemoveWindows( const ScriptDocument& rDocument, const String& rLibName, sal_Bool bDestroy );
118 	void				UpdateWindows();
119 	void				ShowObjectDialog( sal_Bool bShow, sal_Bool bCreateOrDestroy );
120 	void				InvalidateBasicIDESlots();
121 	void				StoreAllWindowData( sal_Bool bPersistent = sal_True );
122 	void				SetMDITitle();
123 	void				EnableScrollbars( sal_Bool bEnable );
124     void                SetCurLib( const ScriptDocument& rDocument, String aLibName, bool bUpdateWindows = true , bool bCheck = true );
125 	void				SetCurLibForLocalization( const ScriptDocument& rDocument, String aLibName );
126 
127 	void				ImplStartListening( StarBASIC* pBasic );
128 
129 	DECL_LINK( TabBarHdl, TabBar* );
130 	DECL_LINK( AccelSelectHdl, Accelerator* );
131 	DECL_LINK( ObjectDialogCancelHdl, ObjectCatalog * );
132 	DECL_LINK( TabBarSplitHdl, TabBar * );
133 #endif
134 
135 protected:
136 	virtual void    	AdjustPosSizePixel( const Point &rPos, const Size &rSize );
137 	virtual void		OuterResizePixel( const Point &rPos, const Size &rSize );
138 	virtual Size    	GetOptimalSizePixel() const;
139 	sal_uInt16				InsertWindowInTable( IDEBaseWindow* pNewWin );
140 	virtual sal_uInt16 		PrepareClose( sal_Bool bUI, sal_Bool bForBrowsing );
141 
142 	void				SetCurWindow( IDEBaseWindow* pNewWin, sal_Bool bUpdateTabBar = sal_False, sal_Bool bRememberAsCurrent = sal_True );
143 	void				ManageToolbars();
144 	void 				RemoveWindow( IDEBaseWindow* pWindow, sal_Bool bDestroy, sal_Bool bAllowChangeCurWindow = sal_True );
145 	void				ArrangeTabBar();
146 
147 	ModulWindow*		CreateBasWin( const ScriptDocument& rDocument, const String& rLibName, const String& rModName );
148     DialogWindow*       CreateDlgWin( const ScriptDocument& rDocument, const String& rLibName, const String& rDlgName );
149 
150 	ModulWindow*		FindBasWin( const ScriptDocument& rDocument, const String& rLibName, const String& rModName, sal_Bool bCreateIfNotExist, sal_Bool bFindSuspended = sal_False );
151 	ModulWindow* 		ShowActiveModuleWindow( StarBASIC* pBasic );
152 
153 	virtual void 		SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
154 								const SfxHint& rHint, const TypeId& rHintType );
155 
156 	virtual void		Activate(sal_Bool bMDI);
157 	virtual void		Deactivate(sal_Bool bMDI);
158 
159 	virtual void		Move();
160 	virtual	void		ShowCursor( FASTBOOL bOn = sal_True );
161 
162 	void				CreateModulWindowLayout();
163 	void				DestroyModulWindowLayout();
164 	void				UpdateModulWindowLayout( bool bBasicStopped );
165 
166     // DocumentEventListener
167     virtual void onDocumentCreated( const ScriptDocument& _rDocument );
168     virtual void onDocumentOpened( const ScriptDocument& _rDocument );
169     virtual void onDocumentSave( const ScriptDocument& _rDocument );
170     virtual void onDocumentSaveDone( const ScriptDocument& _rDocument );
171     virtual void onDocumentSaveAs( const ScriptDocument& _rDocument );
172     virtual void onDocumentSaveAsDone( const ScriptDocument& _rDocument );
173     virtual void onDocumentClosed( const ScriptDocument& _rDocument );
174     virtual void onDocumentTitleChanged( const ScriptDocument& _rDocument );
175     virtual void onDocumentModeChanged( const ScriptDocument& _rDocument );
176 
177 public:
178 						TYPEINFO();
179 						SFX_DECL_INTERFACE( SVX_INTERFACE_BASIDE_VIEWSH )
180 						SFX_DECL_VIEWFACTORY(BasicIDEShell);
181 
182 						BasicIDEShell( SfxViewFrame *pFrame, SfxViewShell *pOldSh );
183 						~BasicIDEShell();
184 
185 	IDEBaseWindow*		GetCurWindow() const 	{ return pCurWin; }
186     const ScriptDocument&
187                         GetCurDocument() const { return m_aCurDocument; }
188     const String&       GetCurLibName() const { return m_aCurLibName; }
189 	ObjectCatalog* 		GetObjectCatalog() const	{ return pObjectCatalog; }
190 	LocalizationMgr*	GetCurLocalizationMgr() const { return m_pCurLocalizationMgr; }
191 
192 	ScrollBar&			GetHScrollBar() 		{ return aHScrollBar; }
193 	ScrollBar&			GetVScrollBar() 		{ return aVScrollBar; }
194 	ScrollBarBox&		GetScrollBarBox() 		{ return aScrollBarBox; }
195 	TabBar*				GetTabBar()				{ return (TabBar*)pTabBar; }
196 	IDEWindowTable&		GetIDEWindowTable() 	{ return aIDEWindowTable; }
197 
198 	SdrView*			GetCurDlgView() const;
199 
200     ::svl::IUndoManager*
201                         GetUndoManager();
202 
203     virtual com::sun::star::uno::Reference< com::sun::star::view::XRenderable > GetRenderable();
204 
205 	// virtual sal_uInt16			Print( SfxProgress &rProgress, sal_Bool bIsAPI, PrintDialog *pPrintDialog = 0 );
206 	virtual SfxPrinter*		GetPrinter( sal_Bool bCreate );
207 	virtual sal_uInt16			SetPrinter( SfxPrinter *pNewPrinter, sal_uInt16 nDiffFlags = SFX_PRINTER_ALL, bool bIsAPI=false );
208 	virtual String			GetSelectionText( sal_Bool bCompleteWords );
209 	virtual sal_Bool			HasSelection( sal_Bool bText ) const;
210 
211 	void				GetState( SfxItemSet& );
212 	void				ExecuteGlobal( SfxRequest& rReq );
213 	void				ExecuteCurrent( SfxRequest& rReq );
214 	void				ExecuteBasic( SfxRequest& rReq );
215 	void				ExecuteDialog( SfxRequest& rReq );
216 
217 	virtual	sal_Bool	HasUIFeature( sal_uInt32 nFeature );
218 
219 	long				CallBasicErrorHdl( StarBASIC* pBasic );
220 	long				CallBasicBreakHdl( StarBASIC* pBasic );
221 
222 	ModulWindowLayout*	GetLayoutWindow() const { return pModulLayout; }
223 
224 	IDEBaseWindow*		FindWindow( const ScriptDocument& rDocument, const String& rLibName = String(), const String& rName = String(), sal_uInt16 nType = BASICIDE_TYPE_UNKNOWN, sal_Bool bFindSuspended = sal_False );
225     DialogWindow*       FindDlgWin( const ScriptDocument& rDocument, const String& rLibName, const String& rDlgName, sal_Bool bCreateIfNotExist, sal_Bool bFindSuspended = sal_False );
226 	IDEBaseWindow*		FindApplicationWindow();
227     sal_Bool				NextPage( sal_Bool bPrev = sal_False );
228 
229 	sal_Bool	            IsAppBasicModified() const { return m_bAppBasicModified; }
230 	void			    SetAppBasicModified( sal_Bool bModified = sal_True ) { m_bAppBasicModified = bModified; }
231 
232 	// For Dialog Drag&Drop in Dialog Organizer
233 	static void CopyDialogResources(
234 		::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStreamProvider >& io_xISP,
235 		const ScriptDocument& rSourceDoc, const String& rSourceLibName, const ScriptDocument& rDestDoc,
236 		const String& rDestLibName,	const String& rDlgName );
237 
238     virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >
239                         GetCurrentDocument() const;
240 
241 };
242 
243 #endif // _BASIDESH_HXX
244