summaryrefslogtreecommitdiff
path: root/extensions/source/scanner/sane.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/source/scanner/sane.hxx')
-rw-r--r--extensions/source/scanner/sane.hxx200
1 files changed, 200 insertions, 0 deletions
diff --git a/extensions/source/scanner/sane.hxx b/extensions/source/scanner/sane.hxx
new file mode 100644
index 000000000000..44ce0d295f42
--- /dev/null
+++ b/extensions/source/scanner/sane.hxx
@@ -0,0 +1,200 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 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* );
+
+ BOOL CheckConsistency( const char*, BOOL bInit = FALSE );
+
+public:
+ Sane();
+ ~Sane();
+
+ static BOOL IsSane()
+ { return pSaneLib ? TRUE : FALSE; }
+ BOOL IsOpen()
+ { return maHandle ? TRUE : 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* );
+ BOOL GetOptionValue( int, BOOL& );
+ BOOL GetOptionValue( int, ByteString& );
+ BOOL GetOptionValue( int, double&, int nElement = 0 );
+ BOOL GetOptionValue( int, double* );
+
+ BOOL SetOptionValue( int, BOOL );
+ BOOL SetOptionValue( int, const String& );
+ BOOL SetOptionValue( int, double, int nElement = 0 );
+ BOOL SetOptionValue( int, double* );
+
+ BOOL ActivateButtonOption( int );
+
+ int CountOptions() { return mnOptions; }
+ int GetDeviceNumber() { return mnDevice; }
+
+ BOOL Open( const char* );
+ BOOL Open( int );
+ void Close();
+ void ReloadDevices();
+ void ReloadOptions();
+
+ 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