objc2-quartz 0.3.2

Bindings to the Quartz framework
Documentation
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_app_kit::*;
use objc2_foundation::*;
#[cfg(feature = "objc2-image-capture-core")]
use objc2_image_capture_core::*;

use crate::*;

extern_protocol!(
    /// A delegate of IKScannerDeviceView must conform to IKScannerDeviceViewDelegate protocol.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/quartz/ikscannerdeviceviewdelegate?language=objc)
    pub unsafe trait IKScannerDeviceViewDelegate {
        /// This message is sent for each image that gets scanned.
        ///
        /// Based on the IKScannerDeviceViewTransferMode the downloaded file will be saved on disk using the 'url', or returned in memory as NSData
        ///
        /// # Safety
        ///
        /// - `scanner_device_view` might not allow `None`.
        /// - `url` might not allow `None`.
        /// - `data` might not allow `None`.
        /// - `error` might not allow `None`.
        #[optional]
        #[unsafe(method(scannerDeviceView:didScanToURL:fileData:error:))]
        #[unsafe(method_family = none)]
        unsafe fn scannerDeviceView_didScanToURL_fileData_error(
            &self,
            scanner_device_view: Option<&IKScannerDeviceView>,
            url: Option<&NSURL>,
            data: Option<&NSData>,
            error: Option<&NSError>,
        );

        /// For file based transfer this message is sent for each image that gets scanned.
        ///
        /// Based on the IKScannerDeviceViewTransferMode the downloaded file will be saved on disk using the 'url', or returned in memory as NSData
        ///
        /// # Safety
        ///
        /// - `scanner_device_view` might not allow `None`.
        /// - `url` might not allow `None`.
        /// - `error` might not allow `None`.
        #[optional]
        #[unsafe(method(scannerDeviceView:didScanToURL:error:))]
        #[unsafe(method_family = none)]
        unsafe fn scannerDeviceView_didScanToURL_error(
            &self,
            scanner_device_view: Option<&IKScannerDeviceView>,
            url: Option<&NSURL>,
            error: Option<&NSError>,
        );

        #[cfg(feature = "objc2-image-capture-core")]
        /// For memory a based transfer this message is sent for every time an image band of data was scanned.
        ///
        /// The 'data' parameter describes the scanned image data. Note that rotation/cropping/image adjustments are not applied yet. The 'scanInfo' parameter contains additional information (rotation angle, ...) that should be applied once the scan is completed.
        ///
        /// # Safety
        ///
        /// - `scanner_device_view` might not allow `None`.
        /// - `data` might not allow `None`.
        /// - `scan_info` generic should be of the correct type.
        /// - `scan_info` might not allow `None`.
        /// - `error` might not allow `None`.
        #[optional]
        #[unsafe(method(scannerDeviceView:didScanToBandData:scanInfo:error:))]
        #[unsafe(method_family = none)]
        unsafe fn scannerDeviceView_didScanToBandData_scanInfo_error(
            &self,
            scanner_device_view: Option<&IKScannerDeviceView>,
            data: Option<&ICScannerBandData>,
            scan_info: Option<&NSDictionary>,
            error: Option<&NSError>,
        );

        /// This message is sent every time the scanner device reports an error.
        ///
        /// # Safety
        ///
        /// - `scanner_device_view` might not allow `None`.
        /// - `error` might not allow `None`.
        #[optional]
        #[unsafe(method(scannerDeviceView:didEncounterError:))]
        #[unsafe(method_family = none)]
        unsafe fn scannerDeviceView_didEncounterError(
            &self,
            scanner_device_view: Option<&IKScannerDeviceView>,
            error: Option<&NSError>,
        );
    }
);

/// [Apple's documentation](https://developer.apple.com/documentation/quartz/ikscannerdeviceviewtransfermode?language=objc)
// NS_CLOSED_ENUM
#[repr(isize)] // NSInteger
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum IKScannerDeviceViewTransferMode {
    #[doc(alias = "IKScannerDeviceViewTransferModeFileBased")]
    FileBased = 0,
    #[doc(alias = "IKScannerDeviceViewTransferModeMemoryBased")]
    MemoryBased = 1,
}

unsafe impl Encode for IKScannerDeviceViewTransferMode {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

unsafe impl RefEncode for IKScannerDeviceViewTransferMode {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

/// [Apple's documentation](https://developer.apple.com/documentation/quartz/ikscannerdeviceviewdisplaymode?language=objc)
// NS_CLOSED_ENUM
#[repr(isize)] // NSInteger
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum IKScannerDeviceViewDisplayMode {
    #[doc(alias = "IKScannerDeviceViewDisplayModeNone")]
    None = -1,
    #[doc(alias = "IKScannerDeviceViewDisplayModeSimple")]
    Simple = 0,
    #[doc(alias = "IKScannerDeviceViewDisplayModeAdvanced")]
    Advanced = 1,
}

unsafe impl Encode for IKScannerDeviceViewDisplayMode {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

unsafe impl RefEncode for IKScannerDeviceViewDisplayMode {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

extern_class!(
    /// IKScannerDeviceView displays a UI to work with Image Capture supported scanners.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/quartz/ikscannerdeviceview?language=objc)
    #[unsafe(super(NSView, NSResponder, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct IKScannerDeviceView;
);

extern_conformance!(
    unsafe impl NSAccessibility for IKScannerDeviceView {}
);

extern_conformance!(
    unsafe impl NSAccessibilityElementProtocol for IKScannerDeviceView {}
);

extern_conformance!(
    unsafe impl NSAnimatablePropertyContainer for IKScannerDeviceView {}
);

extern_conformance!(
    unsafe impl NSAppearanceCustomization for IKScannerDeviceView {}
);

extern_conformance!(
    unsafe impl NSCoding for IKScannerDeviceView {}
);

extern_conformance!(
    unsafe impl NSDraggingDestination for IKScannerDeviceView {}
);

extern_conformance!(
    unsafe impl NSObjectProtocol for IKScannerDeviceView {}
);

extern_conformance!(
    unsafe impl NSUserInterfaceItemIdentification for IKScannerDeviceView {}
);

impl IKScannerDeviceView {
    extern_methods!(
        /// delegate of the IKScannerDeviceView.
        ///
        /// # Safety
        ///
        /// This is not retained internally, you must ensure the object is still alive.
        #[unsafe(method(delegate))]
        #[unsafe(method_family = none)]
        pub unsafe fn delegate(
            &self,
        ) -> Option<Retained<ProtocolObject<dyn IKScannerDeviceViewDelegate>>>;

        /// Setter for [`delegate`][Self::delegate].
        ///
        /// # Safety
        ///
        /// - `delegate` might not allow `None`.
        /// - This is unretained, you must ensure the object is kept alive while in use.
        #[unsafe(method(setDelegate:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setDelegate(
            &self,
            delegate: Option<&ProtocolObject<dyn IKScannerDeviceViewDelegate>>,
        );

        #[cfg(feature = "objc2-image-capture-core")]
        /// the scanner device.
        ///
        /// # Safety
        ///
        /// This is not retained internally, you must ensure the object is still alive.
        #[unsafe(method(scannerDevice))]
        #[unsafe(method_family = none)]
        pub unsafe fn scannerDevice(&self) -> Option<Retained<ICScannerDevice>>;

        #[cfg(feature = "objc2-image-capture-core")]
        /// Setter for [`scannerDevice`][Self::scannerDevice].
        ///
        /// # Safety
        ///
        /// - `scanner_device` might not allow `None`.
        /// - This is unretained, you must ensure the object is kept alive while in use.
        #[unsafe(method(setScannerDevice:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setScannerDevice(&self, scanner_device: Option<&ICScannerDevice>);

        /// current display mode.
        #[unsafe(method(mode))]
        #[unsafe(method_family = none)]
        pub unsafe fn mode(&self) -> IKScannerDeviceViewDisplayMode;

        /// Setter for [`mode`][Self::mode].
        #[unsafe(method(setMode:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setMode(&self, mode: IKScannerDeviceViewDisplayMode);

        /// support a simple scanning UI.
        #[unsafe(method(hasDisplayModeSimple))]
        #[unsafe(method_family = none)]
        pub unsafe fn hasDisplayModeSimple(&self) -> bool;

        /// Setter for [`hasDisplayModeSimple`][Self::hasDisplayModeSimple].
        #[unsafe(method(setHasDisplayModeSimple:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setHasDisplayModeSimple(&self, has_display_mode_simple: bool);

        /// support advanced scanning UI.
        #[unsafe(method(hasDisplayModeAdvanced))]
        #[unsafe(method_family = none)]
        pub unsafe fn hasDisplayModeAdvanced(&self) -> bool;

        /// Setter for [`hasDisplayModeAdvanced`][Self::hasDisplayModeAdvanced].
        #[unsafe(method(setHasDisplayModeAdvanced:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setHasDisplayModeAdvanced(&self, has_display_mode_advanced: bool);

        /// transfer mode either file based - or - in memory.
        #[unsafe(method(transferMode))]
        #[unsafe(method_family = none)]
        pub unsafe fn transferMode(&self) -> IKScannerDeviceViewTransferMode;

        /// Setter for [`transferMode`][Self::transferMode].
        #[unsafe(method(setTransferMode:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setTransferMode(&self, transfer_mode: IKScannerDeviceViewTransferMode);

        /// label for the 'Scan' control.
        #[unsafe(method(scanControlLabel))]
        #[unsafe(method_family = none)]
        pub unsafe fn scanControlLabel(&self) -> Retained<NSString>;

        /// Setter for [`scanControlLabel`][Self::scanControlLabel].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[unsafe(method(setScanControlLabel:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setScanControlLabel(&self, scan_control_label: Option<&NSString>);

        /// label for the 'Overview' control.
        #[unsafe(method(overviewControlLabel))]
        #[unsafe(method_family = none)]
        pub unsafe fn overviewControlLabel(&self) -> Retained<NSString>;

        /// Setter for [`overviewControlLabel`][Self::overviewControlLabel].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[unsafe(method(setOverviewControlLabel:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setOverviewControlLabel(&self, overview_control_label: Option<&NSString>);

        /// show a downloads directory control.
        #[unsafe(method(displaysDownloadsDirectoryControl))]
        #[unsafe(method_family = none)]
        pub unsafe fn displaysDownloadsDirectoryControl(&self) -> bool;

        /// Setter for [`displaysDownloadsDirectoryControl`][Self::displaysDownloadsDirectoryControl].
        #[unsafe(method(setDisplaysDownloadsDirectoryControl:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setDisplaysDownloadsDirectoryControl(
            &self,
            displays_downloads_directory_control: bool,
        );

        /// downloads directory.
        #[unsafe(method(downloadsDirectory))]
        #[unsafe(method_family = none)]
        pub unsafe fn downloadsDirectory(&self) -> Option<Retained<NSURL>>;

        /// Setter for [`downloadsDirectory`][Self::downloadsDirectory].
        ///
        /// # Safety
        ///
        /// `downloads_directory` might not allow `None`.
        #[unsafe(method(setDownloadsDirectory:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setDownloadsDirectory(&self, downloads_directory: Option<&NSURL>);

        /// document name.
        #[unsafe(method(documentName))]
        #[unsafe(method_family = none)]
        pub unsafe fn documentName(&self) -> Retained<NSString>;

        /// Setter for [`documentName`][Self::documentName].
        ///
        /// This is [copied][objc2_foundation::NSCopying::copy] when set.
        #[unsafe(method(setDocumentName:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setDocumentName(&self, document_name: Option<&NSString>);

        /// show a postprocessing application control.
        #[unsafe(method(displaysPostProcessApplicationControl))]
        #[unsafe(method_family = none)]
        pub unsafe fn displaysPostProcessApplicationControl(&self) -> bool;

        /// Setter for [`displaysPostProcessApplicationControl`][Self::displaysPostProcessApplicationControl].
        #[unsafe(method(setDisplaysPostProcessApplicationControl:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setDisplaysPostProcessApplicationControl(
            &self,
            displays_post_process_application_control: bool,
        );

        /// postprocessing application.
        #[unsafe(method(postProcessApplication))]
        #[unsafe(method_family = none)]
        pub unsafe fn postProcessApplication(&self) -> Option<Retained<NSURL>>;

        /// Setter for [`postProcessApplication`][Self::postProcessApplication].
        ///
        /// # Safety
        ///
        /// `post_process_application` might not allow `None`.
        #[unsafe(method(setPostProcessApplication:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setPostProcessApplication(&self, post_process_application: Option<&NSURL>);
    );
}

/// Methods declared on superclass `NSView`.
impl IKScannerDeviceView {
    extern_methods!(
        #[unsafe(method(initWithFrame:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithFrame(this: Allocated<Self>, frame_rect: NSRect) -> Retained<Self>;

        /// # Safety
        ///
        /// `coder` possibly has further requirements.
        #[unsafe(method(initWithCoder:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCoder(
            this: Allocated<Self>,
            coder: &NSCoder,
        ) -> Option<Retained<Self>>;
    );
}

/// Methods declared on superclass `NSResponder`.
impl IKScannerDeviceView {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
    );
}

/// Methods declared on superclass `NSObject`.
impl IKScannerDeviceView {
    extern_methods!(
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new(mtm: MainThreadMarker) -> Retained<Self>;
    );
}