//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use objc2::__framework_prelude::*;
use objc2_foundation::*;
#[cfg(feature = "objc2-quartz-core")]
#[cfg(not(target_os = "watchos"))]
use objc2_quartz_core::*;

use crate::*;

// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UIPageControlInteractionState(pub NSInteger);
impl UIPageControlInteractionState {
    #[doc(alias = "UIPageControlInteractionStateNone")]
    pub const None: Self = Self(0);
    #[doc(alias = "UIPageControlInteractionStateDiscrete")]
    pub const Discrete: Self = Self(1);
    #[doc(alias = "UIPageControlInteractionStateContinuous")]
    pub const Continuous: Self = Self(2);
}

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

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

// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UIPageControlBackgroundStyle(pub NSInteger);
impl UIPageControlBackgroundStyle {
    #[doc(alias = "UIPageControlBackgroundStyleAutomatic")]
    pub const Automatic: Self = Self(0);
    #[doc(alias = "UIPageControlBackgroundStyleProminent")]
    pub const Prominent: Self = Self(1);
    #[doc(alias = "UIPageControlBackgroundStyleMinimal")]
    pub const Minimal: Self = Self(2);
}

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

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

// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct UIPageControlDirection(pub NSInteger);
impl UIPageControlDirection {
    #[doc(alias = "UIPageControlDirectionNatural")]
    pub const Natural: Self = Self(0);
    #[doc(alias = "UIPageControlDirectionLeftToRight")]
    pub const LeftToRight: Self = Self(1);
    #[doc(alias = "UIPageControlDirectionRightToLeft")]
    pub const RightToLeft: Self = Self(2);
    #[doc(alias = "UIPageControlDirectionTopToBottom")]
    pub const TopToBottom: Self = Self(3);
    #[doc(alias = "UIPageControlDirectionBottomToTop")]
    pub const BottomToTop: Self = Self(4);
}

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

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

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

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

#[cfg(all(
    feature = "UIControl",
    feature = "UIResponder",
    feature = "UIView",
    feature = "objc2-quartz-core"
))]
#[cfg(not(target_os = "watchos"))]
unsafe impl CALayerDelegate for UIPageControl {}

#[cfg(all(feature = "UIControl", feature = "UIResponder", feature = "UIView"))]
unsafe impl NSCoding for UIPageControl {}

#[cfg(all(feature = "UIControl", feature = "UIResponder", feature = "UIView"))]
unsafe impl NSObjectProtocol for UIPageControl {}

#[cfg(all(
    feature = "UIAppearance",
    feature = "UIControl",
    feature = "UIResponder",
    feature = "UIView"
))]
unsafe impl UIAppearance for UIPageControl {}

#[cfg(all(
    feature = "UIAppearance",
    feature = "UIControl",
    feature = "UIResponder",
    feature = "UIView"
))]
unsafe impl UIAppearanceContainer for UIPageControl {}

#[cfg(all(feature = "UIControl", feature = "UIResponder", feature = "UIView"))]
unsafe impl UICoordinateSpace for UIPageControl {}

#[cfg(all(
    feature = "UIControl",
    feature = "UIDynamicBehavior",
    feature = "UIResponder",
    feature = "UIView"
))]
unsafe impl UIDynamicItem for UIPageControl {}

#[cfg(all(
    feature = "UIControl",
    feature = "UIFocus",
    feature = "UIResponder",
    feature = "UIView"
))]
unsafe impl UIFocusEnvironment for UIPageControl {}

#[cfg(all(
    feature = "UIControl",
    feature = "UIFocus",
    feature = "UIResponder",
    feature = "UIView"
))]
unsafe impl UIFocusItem for UIPageControl {}

#[cfg(all(
    feature = "UIControl",
    feature = "UIFocus",
    feature = "UIResponder",
    feature = "UIView"
))]
unsafe impl UIFocusItemContainer for UIPageControl {}

#[cfg(all(feature = "UIControl", feature = "UIResponder", feature = "UIView"))]
unsafe impl UIResponderStandardEditActions for UIPageControl {}

#[cfg(all(
    feature = "UIControl",
    feature = "UIResponder",
    feature = "UITraitCollection",
    feature = "UIView"
))]
unsafe impl UITraitEnvironment for UIPageControl {}

extern_methods!(
    #[cfg(all(feature = "UIControl", feature = "UIResponder", feature = "UIView"))]
    unsafe impl UIPageControl {
        #[method(numberOfPages)]
        pub unsafe fn numberOfPages(&self) -> NSInteger;

        #[method(setNumberOfPages:)]
        pub unsafe fn setNumberOfPages(&self, number_of_pages: NSInteger);

        #[method(currentPage)]
        pub unsafe fn currentPage(&self) -> NSInteger;

        #[method(setCurrentPage:)]
        pub unsafe fn setCurrentPage(&self, current_page: NSInteger);

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

        #[method(setHidesForSinglePage:)]
        pub unsafe fn setHidesForSinglePage(&self, hides_for_single_page: bool);

        #[cfg(feature = "UIPageControlProgress")]
        #[method_id(@__retain_semantics Other progress)]
        pub unsafe fn progress(&self) -> Option<Retained<UIPageControlProgress>>;

        #[cfg(feature = "UIPageControlProgress")]
        #[method(setProgress:)]
        pub unsafe fn setProgress(&self, progress: Option<&UIPageControlProgress>);

        #[cfg(feature = "UIColor")]
        #[method_id(@__retain_semantics Other pageIndicatorTintColor)]
        pub unsafe fn pageIndicatorTintColor(&self) -> Option<Retained<UIColor>>;

        #[cfg(feature = "UIColor")]
        #[method(setPageIndicatorTintColor:)]
        pub unsafe fn setPageIndicatorTintColor(&self, page_indicator_tint_color: Option<&UIColor>);

        #[cfg(feature = "UIColor")]
        #[method_id(@__retain_semantics Other currentPageIndicatorTintColor)]
        pub unsafe fn currentPageIndicatorTintColor(&self) -> Option<Retained<UIColor>>;

        #[cfg(feature = "UIColor")]
        #[method(setCurrentPageIndicatorTintColor:)]
        pub unsafe fn setCurrentPageIndicatorTintColor(
            &self,
            current_page_indicator_tint_color: Option<&UIColor>,
        );

        #[method(backgroundStyle)]
        pub unsafe fn backgroundStyle(&self) -> UIPageControlBackgroundStyle;

        #[method(setBackgroundStyle:)]
        pub unsafe fn setBackgroundStyle(&self, background_style: UIPageControlBackgroundStyle);

        #[method(direction)]
        pub unsafe fn direction(&self) -> UIPageControlDirection;

        #[method(setDirection:)]
        pub unsafe fn setDirection(&self, direction: UIPageControlDirection);

        #[method(interactionState)]
        pub unsafe fn interactionState(&self) -> UIPageControlInteractionState;

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

        #[method(setAllowsContinuousInteraction:)]
        pub unsafe fn setAllowsContinuousInteraction(&self, allows_continuous_interaction: bool);

        #[cfg(feature = "UIImage")]
        #[method_id(@__retain_semantics Other preferredIndicatorImage)]
        pub unsafe fn preferredIndicatorImage(&self) -> Option<Retained<UIImage>>;

        #[cfg(feature = "UIImage")]
        #[method(setPreferredIndicatorImage:)]
        pub unsafe fn setPreferredIndicatorImage(
            &self,
            preferred_indicator_image: Option<&UIImage>,
        );

        #[cfg(feature = "UIImage")]
        #[method_id(@__retain_semantics Other indicatorImageForPage:)]
        pub unsafe fn indicatorImageForPage(&self, page: NSInteger) -> Option<Retained<UIImage>>;

        #[cfg(feature = "UIImage")]
        #[method(setIndicatorImage:forPage:)]
        pub unsafe fn setIndicatorImage_forPage(&self, image: Option<&UIImage>, page: NSInteger);

        #[cfg(feature = "UIImage")]
        #[method_id(@__retain_semantics Other preferredCurrentPageIndicatorImage)]
        pub unsafe fn preferredCurrentPageIndicatorImage(&self) -> Option<Retained<UIImage>>;

        #[cfg(feature = "UIImage")]
        #[method(setPreferredCurrentPageIndicatorImage:)]
        pub unsafe fn setPreferredCurrentPageIndicatorImage(
            &self,
            preferred_current_page_indicator_image: Option<&UIImage>,
        );

        #[cfg(feature = "UIImage")]
        #[method_id(@__retain_semantics Other currentPageIndicatorImageForPage:)]
        pub unsafe fn currentPageIndicatorImageForPage(
            &self,
            page: NSInteger,
        ) -> Option<Retained<UIImage>>;

        #[cfg(feature = "UIImage")]
        #[method(setCurrentPageIndicatorImage:forPage:)]
        pub unsafe fn setCurrentPageIndicatorImage_forPage(
            &self,
            image: Option<&UIImage>,
            page: NSInteger,
        );

        #[method(sizeForNumberOfPages:)]
        pub unsafe fn sizeForNumberOfPages(&self, page_count: NSInteger) -> CGSize;

        #[deprecated = "defersCurrentPageDisplay no longer does anything reasonable with the new interaction mode."]
        #[method(defersCurrentPageDisplay)]
        pub unsafe fn defersCurrentPageDisplay(&self) -> bool;

        #[deprecated = "defersCurrentPageDisplay no longer does anything reasonable with the new interaction mode."]
        #[method(setDefersCurrentPageDisplay:)]
        pub unsafe fn setDefersCurrentPageDisplay(&self, defers_current_page_display: bool);

        #[deprecated = "updateCurrentPageDisplay no longer does anything reasonable with the new interaction mode."]
        #[method(updateCurrentPageDisplay)]
        pub unsafe fn updateCurrentPageDisplay(&self);
    }
);

extern_methods!(
    /// Methods declared on superclass `UIControl`
    #[cfg(all(feature = "UIControl", feature = "UIResponder", feature = "UIView"))]
    unsafe impl UIPageControl {
        #[method_id(@__retain_semantics Init initWithFrame:)]
        pub unsafe fn initWithFrame(this: Allocated<Self>, frame: CGRect) -> Retained<Self>;

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

        #[cfg(all(feature = "UIAction", feature = "UIMenuElement"))]
        #[method_id(@__retain_semantics Init initWithFrame:primaryAction:)]
        pub unsafe fn initWithFrame_primaryAction(
            this: Allocated<Self>,
            frame: CGRect,
            primary_action: Option<&UIAction>,
        ) -> Retained<Self>;
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    #[cfg(all(feature = "UIControl", feature = "UIResponder", feature = "UIView"))]
    unsafe impl UIPageControl {
        #[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>;
    }
);
