//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use objc2::__framework_prelude::*;
use objc2_foundation::*;
#[cfg(feature = "objc2-uniform-type-identifiers")]
use objc2_uniform_type_identifiers::*;

use crate::*;

extern_protocol!(
    pub unsafe trait UIDocumentPickerDelegate: NSObjectProtocol + IsMainThreadOnly {
        #[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
        #[optional]
        #[method(documentPicker:didPickDocumentsAtURLs:)]
        unsafe fn documentPicker_didPickDocumentsAtURLs(
            &self,
            controller: &UIDocumentPickerViewController,
            urls: &NSArray<NSURL>,
        );

        #[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
        #[optional]
        #[method(documentPickerWasCancelled:)]
        unsafe fn documentPickerWasCancelled(&self, controller: &UIDocumentPickerViewController);

        #[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
        #[deprecated]
        #[optional]
        #[method(documentPicker:didPickDocumentAtURL:)]
        unsafe fn documentPicker_didPickDocumentAtURL(
            &self,
            controller: &UIDocumentPickerViewController,
            url: &NSURL,
        );
    }

    unsafe impl ProtocolType for dyn UIDocumentPickerDelegate {}
);

// NS_ENUM
#[deprecated = "Use appropriate initializers instead"]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UIDocumentPickerMode(pub NSUInteger);
impl UIDocumentPickerMode {
    #[deprecated = "Use appropriate initializers instead"]
    #[doc(alias = "UIDocumentPickerModeImport")]
    pub const Import: Self = Self(0);
    #[deprecated = "Use appropriate initializers instead"]
    #[doc(alias = "UIDocumentPickerModeOpen")]
    pub const Open: Self = Self(1);
    #[deprecated = "Use appropriate initializers instead"]
    #[doc(alias = "UIDocumentPickerModeExportToService")]
    pub const ExportToService: Self = Self(2);
    #[deprecated = "Use appropriate initializers instead"]
    #[doc(alias = "UIDocumentPickerModeMoveToService")]
    pub const MoveToService: Self = Self(3);
}

unsafe impl Encode for UIDocumentPickerMode {
    const ENCODING: Encoding = NSUInteger::ENCODING;
}

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

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
    pub struct UIDocumentPickerViewController;

    #[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
    unsafe impl ClassType for UIDocumentPickerViewController {
        #[inherits(UIResponder, NSObject)]
        type Super = UIViewController;
        type Mutability = MainThreadOnly;
    }
);

#[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
unsafe impl NSCoding for UIDocumentPickerViewController {}

#[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
unsafe impl NSObjectProtocol for UIDocumentPickerViewController {}

#[cfg(all(
    feature = "UIAppearance",
    feature = "UIResponder",
    feature = "UIViewController"
))]
unsafe impl UIAppearanceContainer for UIDocumentPickerViewController {}

#[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
unsafe impl UIContentContainer for UIDocumentPickerViewController {}

#[cfg(all(
    feature = "UIFocus",
    feature = "UIResponder",
    feature = "UIViewController"
))]
unsafe impl UIFocusEnvironment for UIDocumentPickerViewController {}

#[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
unsafe impl UIResponderStandardEditActions for UIDocumentPickerViewController {}

#[cfg(all(
    feature = "UIResponder",
    feature = "UITraitCollection",
    feature = "UIViewController"
))]
unsafe impl UITraitEnvironment for UIDocumentPickerViewController {}

extern_methods!(
    #[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
    unsafe impl UIDocumentPickerViewController {
        #[deprecated]
        #[method_id(@__retain_semantics Init initWithDocumentTypes:inMode:)]
        pub unsafe fn initWithDocumentTypes_inMode(
            this: Allocated<Self>,
            allowed_ut_is: &NSArray<NSString>,
            mode: UIDocumentPickerMode,
        ) -> Retained<Self>;

        #[cfg(feature = "objc2-uniform-type-identifiers")]
        #[method_id(@__retain_semantics Init initForOpeningContentTypes:asCopy:)]
        pub unsafe fn initForOpeningContentTypes_asCopy(
            this: Allocated<Self>,
            content_types: &NSArray<UTType>,
            as_copy: bool,
        ) -> Retained<Self>;

        #[cfg(feature = "objc2-uniform-type-identifiers")]
        #[method_id(@__retain_semantics Init initForOpeningContentTypes:)]
        pub unsafe fn initForOpeningContentTypes(
            this: Allocated<Self>,
            content_types: &NSArray<UTType>,
        ) -> Retained<Self>;

        #[method_id(@__retain_semantics Init initWithCoder:)]
        pub unsafe fn initWithCoder(
            this: Allocated<Self>,
            coder: &NSCoder,
        ) -> Option<Retained<Self>>;

        #[deprecated]
        #[method_id(@__retain_semantics Init initWithURL:inMode:)]
        pub unsafe fn initWithURL_inMode(
            this: Allocated<Self>,
            url: &NSURL,
            mode: UIDocumentPickerMode,
        ) -> Retained<Self>;

        #[deprecated]
        #[method_id(@__retain_semantics Init initWithURLs:inMode:)]
        pub unsafe fn initWithURLs_inMode(
            this: Allocated<Self>,
            urls: &NSArray<NSURL>,
            mode: UIDocumentPickerMode,
        ) -> Retained<Self>;

        #[method_id(@__retain_semantics Init initForExportingURLs:asCopy:)]
        pub unsafe fn initForExportingURLs_asCopy(
            this: Allocated<Self>,
            urls: &NSArray<NSURL>,
            as_copy: bool,
        ) -> Retained<Self>;

        #[method_id(@__retain_semantics Init initForExportingURLs:)]
        pub unsafe fn initForExportingURLs(
            this: Allocated<Self>,
            urls: &NSArray<NSURL>,
        ) -> Retained<Self>;

        #[method_id(@__retain_semantics Other delegate)]
        pub unsafe fn delegate(
            &self,
        ) -> Option<Retained<ProtocolObject<dyn UIDocumentPickerDelegate>>>;

        #[method(setDelegate:)]
        pub unsafe fn setDelegate(
            &self,
            delegate: Option<&ProtocolObject<dyn UIDocumentPickerDelegate>>,
        );

        #[deprecated = "Use appropriate initializers instead"]
        #[method(documentPickerMode)]
        pub unsafe fn documentPickerMode(&self) -> UIDocumentPickerMode;

        #[method(allowsMultipleSelection)]
        pub unsafe fn allowsMultipleSelection(&self) -> bool;

        #[method(setAllowsMultipleSelection:)]
        pub unsafe fn setAllowsMultipleSelection(&self, allows_multiple_selection: bool);

        #[method(shouldShowFileExtensions)]
        pub unsafe fn shouldShowFileExtensions(&self) -> bool;

        #[method(setShouldShowFileExtensions:)]
        pub unsafe fn setShouldShowFileExtensions(&self, should_show_file_extensions: bool);

        #[method_id(@__retain_semantics Other directoryURL)]
        pub unsafe fn directoryURL(&self) -> Option<Retained<NSURL>>;

        #[method(setDirectoryURL:)]
        pub unsafe fn setDirectoryURL(&self, directory_url: Option<&NSURL>);
    }
);

extern_methods!(
    /// Methods declared on superclass `UIViewController`
    #[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
    unsafe impl UIDocumentPickerViewController {
        #[method_id(@__retain_semantics Init initWithNibName:bundle:)]
        pub unsafe fn initWithNibName_bundle(
            this: Allocated<Self>,
            nib_name_or_nil: Option<&NSString>,
            nib_bundle_or_nil: Option<&NSBundle>,
        ) -> Retained<Self>;
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    #[cfg(all(feature = "UIResponder", feature = "UIViewController"))]
    unsafe impl UIDocumentPickerViewController {
        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new(mtm: MainThreadMarker) -> Retained<Self>;
    }
);
