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 _EXT_SCANNER_HXX
25 #define _EXT_SCANNER_HXX
26 
27 #include <tools/stream.hxx>
28 #include <vos/mutex.hxx>
29 #ifndef __RTL_USTRING_HXX_
30 #include <rtl/ustring.hxx>
31 #endif
32 #include <cppuhelper/weak.hxx>
33 #include <cppuhelper/weak.hxx>
34 #include <com/sun/star/uno/Reference.h>
35 #include <com/sun/star/uno/Sequence.h>
36 #ifndef __COM_SUN_STAR_AWT_XBITMAP_HPP
37 #include <com/sun/star/awt/XBitmap.hpp>
38 #endif
39 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
40 #include <com/sun/star/lang/XEventListener.hpp>
41 #ifndef __COM_SUN_STAR_LANG_EVENTOBJECT_HPP
42 #include <com/sun/star/lang/EventObject.hpp>
43 #endif
44 #include <com/sun/star/scanner/XScannerManager.hpp>
45 #include <com/sun/star/scanner/ScannerException.hpp>
46 
47 using namespace rtl;
48 using namespace cppu;
49 using namespace com::sun::star::uno;
50 using namespace com::sun::star::scanner;
51 
52 // -----------
53 // - Defines -
54 // -----------
55 
56 #define REF( _def_Obj )						Reference< _def_Obj >
57 #define SEQ( _def_Obj )						Sequence< _def_Obj >
58 #define ANY									Any
59 #define	AWT									com::sun::star::awt
60 
61 // ------------------
62 // - ScannerManager -
63 // ------------------
64 
65 class ScannerManager : public OWeakObject, XScannerManager, AWT::XBitmap
66 {
67 protected:
68 
69 	vos::OMutex								maProtector;
70 	void*									mpData;
71 
72 	void									AcquireData();
73 	void									ReleaseData();
74 
75 public:
76 
77 											ScannerManager();
78 	virtual									~ScannerManager();
79 
80 	// XInterface
81 	virtual ANY SAL_CALL					queryInterface( const Type & rType ) throw( RuntimeException );
82     virtual void SAL_CALL					acquire() throw();
83     virtual void SAL_CALL					release() throw();
84 
85 	// XScannerManager
86 	virtual SEQ( ScannerContext ) SAL_CALL	getAvailableScanners() throw();
87 	virtual sal_Bool SAL_CALL					configureScanner( ScannerContext& scanner_context ) throw( ScannerException );
88 	virtual void SAL_CALL					startScan( const ScannerContext& scanner_context, const REF( com::sun::star::lang::XEventListener )& rxListener ) throw( ScannerException );
89 	virtual ScanError SAL_CALL				getError( const ScannerContext& scanner_context ) throw( ScannerException );
90 	virtual REF( AWT::XBitmap ) SAL_CALL	getBitmap( const ScannerContext& scanner_context ) throw( ScannerException );
91 
92 	// XBitmap
93 	virtual AWT::Size SAL_CALL				getSize() throw();
94 	virtual SEQ( sal_Int8 ) SAL_CALL		getDIB() throw();
95 	virtual SEQ( sal_Int8 ) SAL_CALL		getMaskDIB() throw();
96 
97 	// Misc
98 	static OUString 						getImplementationName_Static() throw();
99     static Sequence< OUString > 			getSupportedServiceNames_Static() throw();
100 
Lock()101 	void									Lock() { maProtector.acquire(); }
Unlock()102 	void									Unlock() { maProtector.release(); }
103 
GetData() const104 	void*									GetData() const { return mpData; }
SetData(void * pData)105 	void									SetData( void* pData ) { ReleaseData(); mpData = pData; }
106 };
107 
108 // -----------------------------------------------------------------------------
109 
110 REF( XInterface ) SAL_CALL ScannerManager_CreateInstance( const REF( com::sun::star::lang::XMultiServiceFactory )& rxFactory ) throw( Exception );
111 
112 #endif
113