/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/


#ifndef __com_sun_star_scanner_XScannerManager_idl__
#define __com_sun_star_scanner_XScannerManager_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

#ifndef __com_sun_star_scanner_ScannerContext_idl__
#include <com/sun/star/scanner/ScannerContext.idl>
#endif

#ifndef __com_sun_star_scanner_ScannerException_idl__
#include <com/sun/star/scanner/ScannerException.idl>
#endif

#ifndef __com_sun_star_lang_XEventListener_idl__
#include <com/sun/star/lang/XEventListener.idl>
#endif

#ifndef __com_sun_star_scanner_ScanError_idl__
#include <com/sun/star/scanner/ScanError.idl>
#endif

#ifndef __com_sun_star_awt_XBitmap_idl__
#include <com/sun/star/awt/XBitmap.idl>
#endif


//=============================================================================

module com { module sun { module star { module scanner { 

//=============================================================================
/**
*/
published interface XScannerManager: com::sun::star::uno::XInterface
{
	//-------------------------------------------------------------------------
	// DOCUMENTATION CHANGED FOR XScannerManager::getAvailableScanners
	/** returns all avilable scanner devices
	 */
	sequence<com::sun::star::scanner::ScannerContext> getAvailableScanners();

	//-------------------------------------------------------------------------
	/** produce some kind of User Interface to let the user have a preview,
		configure the scan area, etc., it
		returns FALSE if user cancelled this process
	*/
	boolean configureScanner( [inout] com::sun::star::scanner::ScannerContext scanner_context )
			raises( com::sun::star::scanner::ScannerException );

	//-------------------------------------------------------------------------
	/**start the scanning process
		listener will be called when scan is complete
		the EventObject of the disposing call will contain
		the ScannerManager if the scan was successfull,
		an empty interface otherwise
	*/
	void startScan( [in] com::sun::star::scanner::ScannerContext scanner_context,
			 [in] com::sun::star::lang::XEventListener listener )
			raises( com::sun::star::scanner::ScannerException );

	//-------------------------------------------------------------------------
	/**get the state of scanning after completion of scan
	*/
	com::sun::star::scanner::ScanError getError( [in] com::sun::star::scanner::ScannerContext scanner_context )
			raises( com::sun::star::scanner::ScannerException );

	//-------------------------------------------------------------------------
	/**get the image after completion of scan
	*/
	com::sun::star::awt::XBitmap getBitmap( [in] com::sun::star::scanner::ScannerContext scanner_context )
			raises( com::sun::star::scanner::ScannerException );

};

//=============================================================================

}; }; }; }; 

#endif
