use cocoa::base::{id, BOOL};
use cocoa::foundation::{NSRect, NSSize, NSUInteger};
use crate::constants::ICEXIFOrientationType;
use core_graphics::base::CGFloat;
use core_graphics::image::CGImageRef;
use libc::c_uchar;
use objc::*;
#[repr(u64)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ICScannerFunctionalUnitType {
ICScannerFunctionalUnitTypeFlatbed = 0,
ICScannerFunctionalUnitTypePositiveTransparency = 1,
ICScannerFunctionalUnitTypeNegativeTransparency = 2,
ICScannerFunctionalUnitTypeDocumentFeeder = 3,
}
#[repr(u64)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ICScannerMeasurementUnit {
ICScannerMeasurementUnitInches = 0,
ICScannerMeasurementUnitCentimeters = 1,
ICScannerMeasurementUnitPicas = 2,
ICScannerMeasurementUnitPoints = 3,
ICScannerMeasurementUnitTwips = 4,
ICScannerMeasurementUnitPixels = 5,
}
#[repr(u64)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ICScannerBitDepth {
ICScannerBitDepth1Bit = 1,
ICScannerBitDepth8Bits = 8,
ICScannerBitDepth16Bits = 16,
}
#[repr(u64)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ICScannerColorDataFormatType {
ICScannerColorDataFormatTypeChunky = 0,
ICScannerColorDataFormatTypePlanar = 1,
}
#[repr(u64)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ICScannerPixelDataType {
ICScannerPixelDataTypeBW = 0,
ICScannerPixelDataTypeGray = 1,
ICScannerPixelDataTypeRGB = 2,
ICScannerPixelDataTypePalette = 3,
ICScannerPixelDataTypeCMY = 4,
ICScannerPixelDataTypeCMYK = 5,
ICScannerPixelDataTypeYUV = 6,
ICScannerPixelDataTypeYUVK = 7,
ICScannerPixelDataTypeCIEXYZ = 8,
}
#[repr(u64)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ICScannerDocumentType {
ICScannerDocumentTypeDefault = 0,
ICScannerDocumentTypeA4 = 1,
ICScannerDocumentTypeB5 = 2,
ICScannerDocumentTypeUSLetter = 3,
ICScannerDocumentTypeUSLegal = 4,
ICScannerDocumentTypeA5 = 5,
ICScannerDocumentTypeISOB4 = 6,
ICScannerDocumentTypeISOB6 = 7,
ICScannerDocumentTypeUSLedger = 9,
ICScannerDocumentTypeUSExecutive = 10,
ICScannerDocumentTypeA3 = 11,
ICScannerDocumentTypeISOB3 = 12,
ICScannerDocumentTypeA6 = 13,
ICScannerDocumentTypeC4 = 14,
ICScannerDocumentTypeC5 = 15,
ICScannerDocumentTypeC6 = 16,
ICScannerDocumentType4A0 = 17,
ICScannerDocumentType2A0 = 18,
ICScannerDocumentTypeA0 = 19,
ICScannerDocumentTypeA1 = 20,
ICScannerDocumentTypeA2 = 21,
ICScannerDocumentTypeA7 = 22,
ICScannerDocumentTypeA8 = 23,
ICScannerDocumentTypeA9 = 24,
ICScannerDocumentType10 = 25,
ICScannerDocumentTypeISOB0 = 26,
ICScannerDocumentTypeISOB1 = 27,
ICScannerDocumentTypeISOB2 = 28,
ICScannerDocumentTypeISOB5 = 29,
ICScannerDocumentTypeISOB7 = 30,
ICScannerDocumentTypeISOB8 = 31,
ICScannerDocumentTypeISOB9 = 32,
ICScannerDocumentTypeISOB10 = 33,
ICScannerDocumentTypeJISB0 = 34,
ICScannerDocumentTypeJISB1 = 35,
ICScannerDocumentTypeJISB2 = 36,
ICScannerDocumentTypeJISB3 = 37,
ICScannerDocumentTypeJISB4 = 38,
ICScannerDocumentTypeJISB6 = 39,
ICScannerDocumentTypeJISB7 = 40,
ICScannerDocumentTypeJISB8 = 41,
ICScannerDocumentTypeJISB9 = 42,
ICScannerDocumentTypeJISB10 = 43,
ICScannerDocumentTypeC0 = 44,
ICScannerDocumentTypeC1 = 45,
ICScannerDocumentTypeC2 = 46,
ICScannerDocumentTypeC3 = 47,
ICScannerDocumentTypeC7 = 48,
ICScannerDocumentTypeC8 = 49,
ICScannerDocumentTypeC9 = 50,
ICScannerDocumentTypeC10 = 51,
ICScannerDocumentTypeUSStatement = 52,
ICScannerDocumentTypeBusinessCard = 53,
ICScannerDocumentTypeE = 60,
ICScannerDocumentType3R = 61,
ICScannerDocumentType4R = 62,
ICScannerDocumentType5R = 63,
ICScannerDocumentType6R = 64,
ICScannerDocumentType8R = 65,
ICScannerDocumentTypeS8R = 66,
ICScannerDocumentType10R = 67,
ICScannerDocumentTypeS10R = 68,
ICScannerDocumentType11R = 69,
ICScannerDocumentType12R = 70,
ICScannerDocumentTypeS12R = 71,
ICScannerDocumentType110 = 72,
ICScannerDocumentTypeAPSH = 73,
ICScannerDocumentTypeAPSC = 74,
ICScannerDocumentTypeAPSP = 75,
ICScannerDocumentType135 = 76,
ICScannerDocumentTypeMF = 77,
ICScannerDocumentTypeLF = 78,
}
#[repr(u64)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ICScannerFunctionalUnitState {
ICScannerFunctionalUnitStateReady = (1 << 0),
ICScannerFunctionalUnitStateScanInProgress = (1 << 1),
ICScannerFunctionalUnitStateOverviewScanInProgress = (1 << 2),
}
#[repr(u64)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ICScannerFeatureType {
ICScannerFeatureTypeEnumeration = 0,
ICScannerFeatureTypeRange = 1,
ICScannerFeatureTypeBoolean = 2,
ICScannerFeatureTypeTemplate = 3,
}
pub trait ICScannerFeature: Sized {
unsafe fn type_(self) -> ICScannerFeatureType;
unsafe fn internalName(self) -> id;
unsafe fn humanReadableName(self) -> id;
unsafe fn tooltip(self) -> id;
}
impl ICScannerFeature for id {
unsafe fn type_(self) -> ICScannerFeatureType {
msg_send![self, type]
}
unsafe fn internalName(self) -> id {
msg_send![self, internalName]
}
unsafe fn humanReadableName(self) -> id {
msg_send![self, humanReadableName]
}
unsafe fn tooltip(self) -> id {
msg_send![self, tooltip]
}
}
pub trait ICScannerFeatureEnumeration: Sized {
unsafe fn currentValue(self) -> id;
unsafe fn setCurrentValue(self, currentValue: id);
unsafe fn defaultValue(self) -> id;
unsafe fn values(self) -> id;
unsafe fn menuItemLabels(self) -> id;
unsafe fn menuItemLabelsTooltips(self) -> id;
}
impl ICScannerFeatureEnumeration for id {
unsafe fn currentValue(self) -> id {
msg_send![self, currentValue]
}
unsafe fn setCurrentValue(self, currentValue: id) {
msg_send![self, setCurrentValue: currentValue]
}
unsafe fn defaultValue(self) -> id {
msg_send![self, defaultValue]
}
unsafe fn values(self) -> id {
msg_send![self, values]
}
unsafe fn menuItemLabels(self) -> id {
msg_send![self, menuItemLabels]
}
unsafe fn menuItemLabelsTooltips(self) -> id {
msg_send![self, menuItemLabelsTooltips]
}
}
pub trait ICScannerFeatureRange: Sized {
unsafe fn currentValue(self) -> CGFloat;
unsafe fn setCurrentValue(self, currentValue: CGFloat);
unsafe fn defaultValue(self) -> CGFloat;
unsafe fn minValue(self) -> CGFloat;
unsafe fn maxValue(self) -> CGFloat;
unsafe fn stepSize(self) -> CGFloat;
}
impl ICScannerFeatureRange for id {
unsafe fn currentValue(self) -> CGFloat {
msg_send![self, currentValue]
}
unsafe fn setCurrentValue(self, currentValue: CGFloat) {
msg_send![self, setCurrentValue: currentValue]
}
unsafe fn defaultValue(self) -> CGFloat {
msg_send![self, defaultValue]
}
unsafe fn minValue(self) -> CGFloat {
msg_send![self, minValue]
}
unsafe fn maxValue(self) -> CGFloat {
msg_send![self, maxValue]
}
unsafe fn stepSize(self) -> CGFloat {
msg_send![self, stepSize]
}
}
pub trait ICScannerFeatureBoolean: Sized {
unsafe fn value(self) -> BOOL;
unsafe fn setValue(self, value: BOOL);
}
impl ICScannerFeatureBoolean for id {
unsafe fn value(self) -> BOOL {
msg_send![self, value]
}
unsafe fn setValue(self, value: BOOL) {
msg_send![self, setValue: value]
}
}
pub trait ICScannerFeatureTemplate: Sized {
unsafe fn targets(self) -> id;
}
impl ICScannerFeatureTemplate for id {
unsafe fn targets(self) -> id {
msg_send![self, targets]
}
}
pub trait ICScannerFunctionalUnit: Sized {
unsafe fn type_(self) -> ICScannerFunctionalUnitType;
unsafe fn pixelDataType(self) -> ICScannerPixelDataType;
unsafe fn setPixelDataType(self, pixelDataType: ICScannerPixelDataType);
unsafe fn supportedBitDepths(self) -> id;
unsafe fn bitDepth(self) -> ICScannerBitDepth;
unsafe fn setBitDepth(self, bitDepth: ICScannerBitDepth);
unsafe fn supportedMeasurementUnits(self) -> id;
unsafe fn measurementUnit(self) -> ICScannerMeasurementUnit;
unsafe fn setMeasurementUnit(self, measurementUnit: ICScannerMeasurementUnit);
unsafe fn supportedResolutions(self) -> id;
unsafe fn preferredResolutions(self) -> id;
unsafe fn resolution(self) -> NSUInteger;
unsafe fn setResolution(self, resolution: NSUInteger);
unsafe fn nativeXResolution(self) -> NSUInteger;
unsafe fn nativeYResolution(self) -> NSUInteger;
unsafe fn supportedScaleFactors(self) -> id;
unsafe fn preferredScaleFactors(self) -> id;
unsafe fn scaleFactor(self) -> NSUInteger;
unsafe fn setScaleFactor(self, scaleFactor: NSUInteger);
unsafe fn templates(self) -> id;
unsafe fn vendorFeatures(self) -> id;
unsafe fn physicalSize(self) -> NSSize;
unsafe fn scanArea(self) -> NSRect;
unsafe fn setScanArea(self, scanArea: NSRect);
unsafe fn scanAreaOrientation(self) -> ICEXIFOrientationType;
unsafe fn setScanAreaOrientation(self, scanAreaOrientation: ICEXIFOrientationType);
unsafe fn acceptsThresholdForBlackAndWhiteScanning(self) -> BOOL;
unsafe fn usesThresholdForBlackAndWhiteScanning(self) -> BOOL;
unsafe fn setUsesThresholdForBlackAndWhiteScanning(
self,
usesThresholdForBlackAndWhiteScanning: BOOL,
);
unsafe fn defaultThresholdForBlackAndWhiteScanning(self) -> c_uchar;
unsafe fn thresholdForBlackAndWhiteScanning(self) -> c_uchar;
unsafe fn setThresholdForBlackAndWhiteScanning(
self,
thresholdForBlackAndWhiteScanning: c_uchar,
);
unsafe fn state(self) -> ICScannerFunctionalUnitState;
unsafe fn scanInProgress(self) -> BOOL;
unsafe fn scanProgressPercentDone(self) -> CGFloat;
unsafe fn canPerformOverviewScan(self) -> BOOL;
unsafe fn overviewScanInProgress(self) -> BOOL;
unsafe fn overviewImage(self) -> CGImageRef;
unsafe fn overviewResolution(self) -> NSUInteger;
unsafe fn setOverviewResolution(self, overviewResolution: NSUInteger);
}
impl ICScannerFunctionalUnit for id {
unsafe fn type_(self) -> ICScannerFunctionalUnitType {
msg_send![self, type]
}
unsafe fn pixelDataType(self) -> ICScannerPixelDataType {
msg_send![self, pixelDataType]
}
unsafe fn setPixelDataType(self, pixelDataType: ICScannerPixelDataType) {
msg_send![self, setPixelDataType: pixelDataType]
}
unsafe fn supportedBitDepths(self) -> id {
msg_send![self, supportedBitDepths]
}
unsafe fn bitDepth(self) -> ICScannerBitDepth {
msg_send![self, bitDepth]
}
unsafe fn setBitDepth(self, bitDepth: ICScannerBitDepth) {
msg_send![self, setBitDepth: bitDepth]
}
unsafe fn supportedMeasurementUnits(self) -> id {
msg_send![self, supportedMeasurementUnits]
}
unsafe fn measurementUnit(self) -> ICScannerMeasurementUnit {
msg_send![self, measurementUnit]
}
unsafe fn setMeasurementUnit(self, measurementUnit: ICScannerMeasurementUnit) {
msg_send![self, setMeasurementUnit: measurementUnit]
}
unsafe fn supportedResolutions(self) -> id {
msg_send![self, supportedResolutions]
}
unsafe fn preferredResolutions(self) -> id {
msg_send![self, preferredResolutions]
}
unsafe fn resolution(self) -> NSUInteger {
msg_send![self, resolution]
}
unsafe fn setResolution(self, resolution: NSUInteger) {
msg_send![self, setResolution: resolution]
}
unsafe fn nativeXResolution(self) -> NSUInteger {
msg_send![self, nativeXResolution]
}
unsafe fn nativeYResolution(self) -> NSUInteger {
msg_send![self, nativeYResolution]
}
unsafe fn supportedScaleFactors(self) -> id {
msg_send![self, supportedScaleFactors]
}
unsafe fn preferredScaleFactors(self) -> id {
msg_send![self, preferredScaleFactors]
}
unsafe fn scaleFactor(self) -> NSUInteger {
msg_send![self, scaleFactor]
}
unsafe fn setScaleFactor(self, scaleFactor: NSUInteger) {
msg_send![self, setScaleFactor: scaleFactor]
}
unsafe fn templates(self) -> id {
msg_send![self, templates]
}
unsafe fn vendorFeatures(self) -> id {
msg_send![self, vendorFeatures]
}
unsafe fn physicalSize(self) -> NSSize {
msg_send![self, physicalSize]
}
unsafe fn scanArea(self) -> NSRect {
msg_send![self, scanArea]
}
unsafe fn setScanArea(self, scanArea: NSRect) {
msg_send![self, setScanArea: scanArea]
}
unsafe fn scanAreaOrientation(self) -> ICEXIFOrientationType {
msg_send![self, scanAreaOrientation]
}
unsafe fn setScanAreaOrientation(self, scanAreaOrientation: ICEXIFOrientationType) {
msg_send![self, setScanAreaOrientation: scanAreaOrientation]
}
unsafe fn acceptsThresholdForBlackAndWhiteScanning(self) -> BOOL {
msg_send![self, acceptsThresholdForBlackAndWhiteScanning]
}
unsafe fn usesThresholdForBlackAndWhiteScanning(self) -> BOOL {
msg_send![self, usesThresholdForBlackAndWhiteScanning]
}
unsafe fn setUsesThresholdForBlackAndWhiteScanning(
self,
usesThresholdForBlackAndWhiteScanning: BOOL,
) {
msg_send![
self,
setUsesThresholdForBlackAndWhiteScanning: usesThresholdForBlackAndWhiteScanning
]
}
unsafe fn defaultThresholdForBlackAndWhiteScanning(self) -> c_uchar {
msg_send![self, defaultThresholdForBlackAndWhiteScanning]
}
unsafe fn thresholdForBlackAndWhiteScanning(self) -> c_uchar {
msg_send![self, thresholdForBlackAndWhiteScanning]
}
unsafe fn setThresholdForBlackAndWhiteScanning(
self,
thresholdForBlackAndWhiteScanning: c_uchar,
) {
msg_send![
self,
setThresholdForBlackAndWhiteScanning: thresholdForBlackAndWhiteScanning
]
}
unsafe fn state(self) -> ICScannerFunctionalUnitState {
msg_send![self, state]
}
unsafe fn scanInProgress(self) -> BOOL {
msg_send![self, scanInProgress]
}
unsafe fn scanProgressPercentDone(self) -> CGFloat {
msg_send![self, scanProgressPercentDone]
}
unsafe fn canPerformOverviewScan(self) -> BOOL {
msg_send![self, canPerformOverviewScan]
}
unsafe fn overviewScanInProgress(self) -> BOOL {
msg_send![self, overviewScanInProgress]
}
unsafe fn overviewImage(self) -> CGImageRef {
msg_send![self, overviewImage]
}
unsafe fn overviewResolution(self) -> NSUInteger {
msg_send![self, overviewResolution]
}
unsafe fn setOverviewResolution(self, overviewResolution: NSUInteger) {
msg_send![self, setOverviewResolution: overviewResolution]
}
}
pub trait ICScannerFunctionalUnitFlatbed: Sized {
unsafe fn supportedDocumentTypes(self) -> id;
unsafe fn documentType(self) -> ICScannerDocumentType;
unsafe fn setDocumentType(self, documentType: ICScannerDocumentType);
unsafe fn documentSize(self) -> NSSize;
}
impl ICScannerFunctionalUnitFlatbed for id {
unsafe fn supportedDocumentTypes(self) -> id {
msg_send![self, supportedDocumentTypes]
}
unsafe fn documentType(self) -> ICScannerDocumentType {
msg_send![self, documentType]
}
unsafe fn setDocumentType(self, documentType: ICScannerDocumentType) {
msg_send![self, setDocumentType: documentType]
}
unsafe fn documentSize(self) -> NSSize {
msg_send![self, documentSize]
}
}
pub trait ICScannerFunctionalUnitPositiveTransparency: Sized {
unsafe fn supportedDocumentTypes(self) -> id;
unsafe fn documentType(self) -> ICScannerDocumentType;
unsafe fn setDocumentType(self, documentType: ICScannerDocumentType);
unsafe fn documentSize(self) -> NSSize;
}
impl ICScannerFunctionalUnitPositiveTransparency for id {
unsafe fn supportedDocumentTypes(self) -> id {
msg_send![self, supportedDocumentTypes]
}
unsafe fn documentType(self) -> ICScannerDocumentType {
msg_send![self, documentType]
}
unsafe fn setDocumentType(self, documentType: ICScannerDocumentType) {
msg_send![self, setDocumentType: documentType]
}
unsafe fn documentSize(self) -> NSSize {
msg_send![self, documentSize]
}
}
pub trait ICScannerFunctionalUnitNegativeTransparency: Sized {
unsafe fn supportedDocumentTypes(self) -> id;
unsafe fn documentType(self) -> ICScannerDocumentType;
unsafe fn setDocumentType(self, documentType: ICScannerDocumentType);
unsafe fn documentSize(self) -> NSSize;
}
impl ICScannerFunctionalUnitNegativeTransparency for id {
unsafe fn supportedDocumentTypes(self) -> id {
msg_send![self, supportedDocumentTypes]
}
unsafe fn documentType(self) -> ICScannerDocumentType {
msg_send![self, documentType]
}
unsafe fn setDocumentType(self, documentType: ICScannerDocumentType) {
msg_send![self, setDocumentType: documentType]
}
unsafe fn documentSize(self) -> NSSize {
msg_send![self, documentSize]
}
}
pub trait ICScannerFunctionalUnitDocumentFeeder: Sized {
unsafe fn supportedDocumentTypes(self) -> id;
unsafe fn documentType(self) -> ICScannerDocumentType;
unsafe fn setDocumentType(self, documentType: ICScannerDocumentType);
unsafe fn documentSize(self) -> NSSize;
unsafe fn supportsDuplexScanning(self) -> BOOL;
unsafe fn duplexScanningEnabled(self) -> BOOL;
unsafe fn setDuplexScanningEnabled(self, duplexScanningEnabled: BOOL);
unsafe fn documentLoaded(self) -> BOOL;
unsafe fn oddPageOrientation(self) -> ICEXIFOrientationType;
unsafe fn setOddPageOrientation(self, oddPageOrientation: ICEXIFOrientationType);
unsafe fn evenPageOrientation(self) -> ICEXIFOrientationType;
unsafe fn setEvenPageOrientation(self, evenPageOrientation: ICEXIFOrientationType);
unsafe fn reverseFeederPageOrder(self) -> BOOL;
}
impl ICScannerFunctionalUnitDocumentFeeder for id {
unsafe fn supportedDocumentTypes(self) -> id {
msg_send![self, supportedDocumentTypes]
}
unsafe fn documentType(self) -> ICScannerDocumentType {
msg_send![self, documentType]
}
unsafe fn setDocumentType(self, documentType: ICScannerDocumentType) {
msg_send![self, setDocumentType: documentType]
}
unsafe fn documentSize(self) -> NSSize {
msg_send![self, documentSize]
}
unsafe fn supportsDuplexScanning(self) -> BOOL {
msg_send![self, supportsDuplexScanning]
}
unsafe fn duplexScanningEnabled(self) -> BOOL {
msg_send![self, duplexScanningEnabled]
}
unsafe fn setDuplexScanningEnabled(self, duplexScanningEnabled: BOOL) {
msg_send![self, setDuplexScanningEnabled: duplexScanningEnabled]
}
unsafe fn documentLoaded(self) -> BOOL {
msg_send![self, documentLoaded]
}
unsafe fn oddPageOrientation(self) -> ICEXIFOrientationType {
msg_send![self, oddPageOrientation]
}
unsafe fn setOddPageOrientation(self, oddPageOrientation: ICEXIFOrientationType) {
msg_send![self, setOddPageOrientation: oddPageOrientation]
}
unsafe fn evenPageOrientation(self) -> ICEXIFOrientationType {
msg_send![self, evenPageOrientation]
}
unsafe fn setEvenPageOrientation(self, evenPageOrientation: ICEXIFOrientationType) {
msg_send![self, setEvenPageOrientation: evenPageOrientation]
}
unsafe fn reverseFeederPageOrder(self) -> BOOL {
msg_send![self, reverseFeederPageOrder]
}
}