xref: /trunk/main/vcl/inc/salinst.hxx (revision 4893698d)
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 _SV_SALINST_HXX
25 #define _SV_SALINST_HXX
26 
27 #include "com/sun/star/uno/Reference.hxx"
28 
29 #include "vcl/sv.h"
30 #include "vcl/displayconnectiondispatch.hxx"
31 #include "vcl/dllapi.h"
32 
33 #include "tools/string.hxx"
34 
35 #include "rtl/ref.hxx"
36 #include "rtl/string.hxx"
37 
38 #include <list>
39 
40 struct SystemParentData;
41 struct SalPrinterQueueInfo;
42 struct SalStatus;
43 struct ImplJobSetup;
44 class SalGraphics;
45 class SalFrame;
46 class SalObject;
47 class SalMenu;
48 class SalMenuItem;
49 class SalVirtualDevice;
50 class SalInfoPrinter;
51 class SalPrinter;
52 class SalTimer;
53 class ImplPrnQueueList;
54 class SalI18NImeStatus;
55 class SalSystem;
56 class SalBitmap;
57 struct SalItemParams;
58 class SalSession;
59 struct SystemGraphicsData;
60 struct SystemWindowData;
61 class Menu;
62 
63 namespace vos { class IMutex; }
64 
65 // ---------------
66 // - SalInstance -
67 // ---------------
68 
69 class VCL_PLUGIN_PUBLIC SalInstance
70 {
71 private:
72     rtl::Reference< vcl::DisplayConnectionDispatch > m_pEventInst;
73 
74 public:
SalInstance()75     SalInstance() {}
76     virtual ~SalInstance();
77 
78     // Frame
79     // DisplayName for Unix ???
80     virtual SalFrame*      	CreateChildFrame( SystemParentData* pParent, sal_uLong nStyle ) = 0;
81     virtual SalFrame*      	CreateFrame( SalFrame* pParent, sal_uLong nStyle ) = 0;
82     virtual void				DestroyFrame( SalFrame* pFrame ) = 0;
83 
84     // Object (System Child Window)
85     virtual SalObject*			CreateObject( SalFrame* pParent, SystemWindowData* pWindowData, sal_Bool bShow = sal_True ) = 0;
86     virtual void				DestroyObject( SalObject* pObject ) = 0;
87 
88     // VirtualDevice
89     // nDX and nDY in Pixel
90     // nBitCount: 0 == Default(=as window) / 1 == Mono
91     // pData allows for using a system dependent graphics or device context
92     virtual SalVirtualDevice*	CreateVirtualDevice( SalGraphics* pGraphics,
93                                                      long nDX, long nDY,
94                                                      sal_uInt16 nBitCount, const SystemGraphicsData *pData = NULL ) = 0;
95     virtual void				DestroyVirtualDevice( SalVirtualDevice* pDevice ) = 0;
96 
97     // Printer
98     // pSetupData->mpDriverData can be 0
99     // pSetupData must be updated with the current
100     // JobSetup
101     virtual SalInfoPrinter*	CreateInfoPrinter( SalPrinterQueueInfo* pQueueInfo,
102                                                ImplJobSetup* pSetupData ) = 0;
103     virtual void				DestroyInfoPrinter( SalInfoPrinter* pPrinter ) = 0;
104     virtual SalPrinter*		CreatePrinter( SalInfoPrinter* pInfoPrinter ) = 0;
105     virtual void				DestroyPrinter( SalPrinter* pPrinter ) = 0;
106 
107     virtual void				GetPrinterQueueInfo( ImplPrnQueueList* pList ) = 0;
108     virtual void				GetPrinterQueueState( SalPrinterQueueInfo* pInfo ) = 0;
109     virtual void				DeletePrinterQueueInfo( SalPrinterQueueInfo* pInfo ) = 0;
110     virtual String             GetDefaultPrinter() = 0;
111 
112     // SalTimer
113     virtual SalTimer*			CreateSalTimer() = 0;
114     // SalI18NImeStatus
115     virtual SalI18NImeStatus*	CreateI18NImeStatus() = 0;
116     // SalSystem
117     virtual SalSystem*			CreateSalSystem() = 0;
118     // SalBitmap
119     virtual SalBitmap*			CreateSalBitmap() = 0;
120 
121     // YieldMutex
122     virtual vos::IMutex*		GetYieldMutex() = 0;
123     virtual sal_uLong				ReleaseYieldMutex() = 0;
124     virtual void				AcquireYieldMutex( sal_uLong nCount ) = 0;
125     // return true, if yield mutex is owned by this thread, else false
126     virtual bool                CheckYieldMutex() = 0;
127 
128 	// wait next event and dispatch
129     // must returned by UserEvent (SalFrame::PostEvent)
130     // and timer
131     virtual void				Yield( bool bWait, bool bHandleAllCurrentEvents ) = 0;
132     virtual bool				AnyInput( sal_uInt16 nType ) = 0;
133 
134                             // Menus
135     virtual SalMenu*        CreateMenu( sal_Bool bMenuBar, Menu* pMenu );
136     virtual void            DestroyMenu( SalMenu* pMenu);
137     virtual SalMenuItem*    CreateMenuItem( const SalItemParams* pItemData );
138     virtual void            DestroyMenuItem( SalMenuItem* pItem );
139 
140     // may return NULL to disable session management
141     virtual SalSession*		CreateSalSession() = 0;
142 
143     // methods for XDisplayConnection
144 
SetEventCallback(rtl::Reference<vcl::DisplayConnectionDispatch> const & pInstance)145     void				SetEventCallback( rtl::Reference< vcl::DisplayConnectionDispatch > const & pInstance )
146     { m_pEventInst = pInstance; }
CallEventCallback(void * pEvent,int nBytes)147     bool				CallEventCallback( void* pEvent, int nBytes )
148     { return m_pEventInst.is() && m_pEventInst->dispatchEvent( pEvent, nBytes ); }
CallErrorCallback(void * pEvent,int nBytes)149     bool				CallErrorCallback( void* pEvent, int nBytes )
150     { return m_pEventInst.is() && m_pEventInst->dispatchErrorEvent( pEvent, nBytes ); }
151 
152     enum ConnectionIdentifierType { AsciiCString, Blob };
153     virtual void*				GetConnectionIdentifier( ConnectionIdentifierType& rReturnedType, int& rReturnedBytes ) = 0;
154 
155     // this is a vehicle for PrintFontManager to bridge the gap between vcl and libvclplug_*
156     // this is only necessary because PrintFontManager is an exported vcl API and therefore
157     // needs to be in libvcl while libvclplug_* do not contain exported C++ API
158     virtual void        FillFontPathList( std::list< rtl::OString >& o_rFontPaths );
159 
160     // dtrans implementation
161     virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
162         CreateClipboard( const com::sun::star::uno::Sequence< com::sun::star::uno::Any >& i_rArguments );
163     virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDragSource();
164     virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDropTarget();
165     virtual void        AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType) = 0;
166 };
167 
168 // called from SVMain
169 SalInstance* CreateSalInstance();
170 void DestroySalInstance( SalInstance* pInst );
171 
172 // -------------------------
173 // - SalInstance-Functions -
174 // -------------------------
175 
176 void SalAbort( const XubString& rErrorText );
177 
178 VCL_PLUGIN_PUBLIC const ::rtl::OUString& SalGetDesktopEnvironment();
179 
180 // -----------
181 // - SalData -
182 // -----------
183 
184 void InitSalData();                         // called from Application-Ctor
185 void DeInitSalData();                       // called from Application-Dtor
186 
187 void InitSalMain();
188 void DeInitSalMain();
189 
190 // ----------
191 // - SVMain -
192 // ----------
193 
194 // Callbacks (indepen in \sv\source\app\svmain.cxx)
195 VCL_DLLPUBLIC sal_Bool SVMain();
196 
197 #endif // _SV_SALINST_HXX
198