| /************************************************************** |
| * |
| * 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 _SANE_HXX |
| #define _SANE_HXX |
| |
| #include <osl/thread.h> |
| #include <osl/module.h> |
| #include <tools/string.hxx> |
| #include <vcl/bitmap.hxx> |
| #include <sane/sane.h> |
| #include <scanner.hxx> |
| |
| // --------------------- |
| // - BitmapTransporter - |
| // --------------------- |
| |
| class BitmapTransporter : public OWeakObject, AWT::XBitmap |
| { |
| SvMemoryStream m_aStream; |
| vos::OMutex m_aProtector; |
| |
| public: |
| |
| BitmapTransporter(); |
| virtual ~BitmapTransporter(); |
| |
| |
| // XInterface |
| virtual ANY SAL_CALL queryInterface( const Type & rType ) throw( RuntimeException ); |
| virtual void SAL_CALL acquire() throw() { OWeakObject::acquire(); } |
| virtual void SAL_CALL release() throw() { OWeakObject::release(); } |
| |
| virtual AWT::Size SAL_CALL getSize() throw(); |
| virtual SEQ( sal_Int8 ) SAL_CALL getDIB() throw(); |
| virtual SEQ( sal_Int8 ) SAL_CALL getMaskDIB() throw() { return SEQ( sal_Int8 )(); } |
| |
| // Misc |
| void lock() { m_aProtector.acquire(); } |
| void unlock() { m_aProtector.release(); } |
| SvMemoryStream& getStream() { return m_aStream; } |
| }; |
| |
| // -------- |
| // - Sane - |
| // -------- |
| |
| class Sane |
| { |
| private: |
| static int nRefCount; |
| static oslModule pSaneLib; |
| |
| static SANE_Status (*p_init)( SANE_Int*, |
| SANE_Auth_Callback ); |
| static void (*p_exit)(); |
| static SANE_Status (*p_get_devices)( const SANE_Device***, |
| SANE_Bool ); |
| static SANE_Status (*p_open)( SANE_String_Const, SANE_Handle ); |
| static void (*p_close)( SANE_Handle ); |
| static const SANE_Option_Descriptor* (*p_get_option_descriptor)( |
| SANE_Handle, SANE_Int ); |
| static SANE_Status (*p_control_option)( SANE_Handle, SANE_Int, |
| SANE_Action, void*, |
| SANE_Int* ); |
| static SANE_Status (*p_get_parameters)( SANE_Handle, |
| SANE_Parameters* ); |
| static SANE_Status (*p_start)( SANE_Handle ); |
| static SANE_Status (*p_read)( SANE_Handle, SANE_Byte*, SANE_Int, |
| SANE_Int* ); |
| static void (*p_cancel)( SANE_Handle ); |
| static SANE_Status (*p_set_io_mode)( SANE_Handle, SANE_Bool ); |
| static SANE_Status (*p_get_select_fd)( SANE_Handle, SANE_Int* ); |
| static SANE_String_Const (*p_strstatus)( SANE_Status ); |
| |
| static SANE_Int nVersion; |
| static SANE_Device** ppDevices; |
| static int nDevices; |
| |
| const SANE_Option_Descriptor** mppOptions; |
| int mnOptions; |
| int mnDevice; |
| SANE_Handle maHandle; |
| |
| Link maReloadOptionsLink; |
| |
| inline oslGenericFunction |
| LoadSymbol( const char* ); |
| void Init(); |
| void DeInit(); |
| |
| SANE_Status ControlOption( int, SANE_Action, void* ); |
| |
| sal_Bool CheckConsistency( const char*, sal_Bool bInit = sal_False ); |
| |
| public: |
| Sane(); |
| ~Sane(); |
| |
| static sal_Bool IsSane() |
| { return pSaneLib ? sal_True : sal_False; } |
| sal_Bool IsOpen() |
| { return maHandle ? sal_True : sal_False; } |
| static int CountDevices() |
| { return nDevices; } |
| static String GetName( int n ) |
| { return String( ppDevices[n]->name ? ppDevices[n]->name : "", osl_getThreadTextEncoding() ); } |
| static String GetVendor( int n ) |
| { return String( ppDevices[n]->vendor ? ppDevices[n]->vendor : "", osl_getThreadTextEncoding() ); } |
| static String GetModel( int n ) |
| { return String( ppDevices[n]->model ? ppDevices[n]->model : "", osl_getThreadTextEncoding() ); } |
| static String GetType( int n ) |
| { return String( ppDevices[n]->type ? ppDevices[n]->type : "", osl_getThreadTextEncoding() ); } |
| |
| String GetOptionName( int n ) |
| { return String( mppOptions[n]->name ? (char*)mppOptions[n]->name : "", osl_getThreadTextEncoding() ); } |
| String GetOptionTitle( int n ) |
| { return String( mppOptions[n]->title ? (char*)mppOptions[n]->title : "", osl_getThreadTextEncoding() ); } |
| SANE_Value_Type GetOptionType( int n ) |
| { return mppOptions[n]->type; } |
| SANE_Unit GetOptionUnit( int n ) |
| { return mppOptions[n]->unit; } |
| String GetOptionUnitName( int n ); |
| SANE_Int GetOptionCap( int n ) |
| { return mppOptions[n]->cap; } |
| SANE_Constraint_Type GetOptionConstraintType( int n ) |
| { return mppOptions[n]->constraint_type; } |
| const char** GetStringConstraint( int n ) |
| { return (const char**)mppOptions[n]->constraint.string_list; } |
| int GetRange( int, double*& ); |
| |
| inline int GetOptionElements( int n ); |
| int GetOptionByName( const char* ); |
| sal_Bool GetOptionValue( int, sal_Bool& ); |
| sal_Bool GetOptionValue( int, ByteString& ); |
| sal_Bool GetOptionValue( int, double&, int nElement = 0 ); |
| sal_Bool GetOptionValue( int, double* ); |
| |
| sal_Bool SetOptionValue( int, sal_Bool ); |
| sal_Bool SetOptionValue( int, const String& ); |
| sal_Bool SetOptionValue( int, double, int nElement = 0 ); |
| sal_Bool SetOptionValue( int, double* ); |
| |
| sal_Bool ActivateButtonOption( int ); |
| |
| int CountOptions() { return mnOptions; } |
| int GetDeviceNumber() { return mnDevice; } |
| |
| sal_Bool Open( const char* ); |
| sal_Bool Open( int ); |
| void Close(); |
| void ReloadDevices(); |
| void ReloadOptions(); |
| |
| sal_Bool Start( BitmapTransporter& ); |
| |
| inline Link SetReloadOptionsHdl( const Link& rLink ); |
| }; |
| |
| inline int Sane::GetOptionElements( int n ) |
| { |
| if( mppOptions[n]->type == SANE_TYPE_FIXED || |
| mppOptions[n]->type == SANE_TYPE_INT ) |
| { |
| return mppOptions[n]->size/sizeof( SANE_Word ); |
| } |
| return 1; |
| } |
| |
| inline Link Sane::SetReloadOptionsHdl( const Link& rLink ) |
| { |
| Link aRet = maReloadOptionsLink; |
| maReloadOptionsLink = rLink; |
| return aRet; |
| } |
| |
| #endif |