rust_macios/appkit/
ns_popover.rs1use objc::{class, msg_send, sel, sel_impl};
2
3use crate::{
4 core_graphics::CGRectEdge,
5 foundation::{NSCoder, NSRect, NSSize},
6 object,
7 objective_c_runtime::{id, traits::FromId},
8 utils::to_bool,
9};
10
11use super::{
12 interface_impl, ns_appearance::NSAppearance, INSResponder, INSView, INSViewController,
13 NSPopoverBehavior, NSViewController,
14};
15
16object! {
17 unsafe pub struct NSPopover;
19}
20
21impl NSPopover {
22 pub fn new() -> Self {
24 unsafe { Self::from_id(msg_send![class!(NSPopover), new]) }
25 }
26}
27
28impl Default for NSPopover {
29 fn default() -> Self {
30 Self::new()
31 }
32}
33
34impl INSResponder for NSPopover {}
35
36#[interface_impl(NSResponder)]
37impl NSPopover {
38 #[property]
43 pub fn content_view_controller(&self) -> NSViewController {
44 unsafe { NSViewController::from_id(msg_send![self.m_self(), contentViewController]) }
45 }
46
47 #[property]
53 pub fn set_content_view_controller<Controller>(&self, view_controller: Controller)
54 where
55 Controller: INSViewController,
56 {
57 unsafe { msg_send![self.m_self(), setContentViewController: view_controller] }
58 }
59
60 #[property]
64 pub fn behavior(&self) -> NSPopoverBehavior {
65 unsafe { msg_send![self.m_self(), behavior] }
66 }
67
68 #[property]
74 pub fn set_behavior(&self, behavior: NSPopoverBehavior) {
75 unsafe { msg_send![self.m_self(), setBehavior: behavior] }
76 }
77
78 #[method]
80 pub fn show_relative_to_rect_of_view_preferred_edge<V>(
81 &self,
82 rect: NSRect,
83 view: V,
84 edge: CGRectEdge,
85 ) where
86 V: INSView,
87 {
88 unsafe {
89 msg_send![self.m_self(), showRelativeToRect: rect ofView: view preferredEdge: edge]
90 }
91 }
92
93 #[property]
95 pub fn positioning_rect(&self) -> NSRect {
96 unsafe { msg_send![self.m_self(), positioningRect] }
97 }
98
99 #[property]
104 pub fn appearance(&self) -> NSAppearance {
105 unsafe { NSAppearance::from_id(msg_send![self.m_self(), appearance]) }
106 }
107
108 #[method]
114 pub fn set_appearance(&self, appearance: NSAppearance) {
115 unsafe { msg_send![self.m_self(), setAppearance: appearance] }
116 }
117
118 #[property]
120 pub fn effective_appearance(&self) -> NSAppearance {
121 unsafe { NSAppearance::from_id(msg_send![self.m_self(), effectiveAppearance]) }
122 }
123
124 #[property]
126 pub fn animates(&self) -> bool {
127 unsafe { to_bool(msg_send![self.m_self(), animates]) }
128 }
129
130 #[property]
132 pub fn content_size(&self) -> NSSize {
133 unsafe { msg_send![self.m_self(), contentSize] }
134 }
135
136 #[property]
142 pub fn set_content_size(&self, size: NSSize) {
143 unsafe { msg_send![self.m_self(), setContentSize: size] }
144 }
145
146 #[property]
148 pub fn shown(&self) -> bool {
149 unsafe { to_bool(msg_send![self.m_self(), isShown]) }
150 }
151
152 #[property]
154 pub fn detached(&self) -> bool {
155 unsafe { to_bool(msg_send![self.m_self(), isDetached]) }
156 }
157
158 #[method]
163 pub fn perform_close(&self, sender: id) {
164 unsafe { msg_send![self.m_self(), performClose: sender] }
165 }
166
167 #[method]
169 pub fn close(&self) {
170 unsafe { msg_send![self.m_self(), close] }
171 }
172
173 #[property]
175 pub fn delegate(&self) -> id {
176 unsafe { msg_send![self.m_self(), delegate] }
177 }
178
179 #[method]
185 pub fn set_delegate(&self, delegate: id) {
186 unsafe { msg_send![self.m_self(), setDelegate: delegate] }
187 }
188
189 #[method]
194 pub fn init(&self) -> NSPopover {
195 unsafe { msg_send![self.m_self(), init] }
196 }
197
198 #[method]
200 pub fn init_with_coder(&self, coder: NSCoder) -> NSPopover {
201 unsafe { msg_send![self.m_self(), initWithCoder: coder] }
202 }
203}