cidre/ns/app/
pasteboard.rs1use crate::{arc, define_obj_type, define_opts, ns, objc};
2
3#[doc(alias = "NSPasteboardType")]
4pub type PasteboardType = ns::String;
5
6#[doc(alias = "NSPasteboardName")]
7pub type PasteboardName = ns::String;
8
9#[doc(alias = "NSPasteboardDetectionPattern")]
10pub type PasteboardDetectionPattern = ns::String;
11
12#[doc(alias = "NSPasteboardMetadataType")]
13pub type PasteboardMetadataType = ns::String;
14
15#[doc(alias = "NSPasteboardReadingOptionKey")]
16pub type PasteboardReadingOptionKey = ns::String;
17
18define_opts!(
19 #[doc(alias = "NSPasteboardContentsOptions")]
20 pub PasteboardContentsOpts(usize)
21);
22
23impl PasteboardContentsOpts {
24 pub const CURRENT_HOST_ONLY: Self = Self(1 << 0);
25}
26
27#[doc(alias = "NSPasteboardAccessBehavior")]
28#[derive(Debug, Copy, Clone, Eq, PartialEq)]
29#[repr(isize)]
30pub enum PasteboardAccessBehavior {
31 Default = 0,
32 Ask = 1,
33 AlwaysAllow = 2,
34 AlwaysDeny = 3,
35}
36
37define_obj_type!(
38 #[doc(alias = "NSPasteboard")]
39 pub Pasteboard(ns::Id),
40 NS_PASTEBOARD
41);
42
43impl Pasteboard {
44 #[objc::msg_send(generalPasteboard)]
45 pub fn general() -> arc::R<Self>;
46
47 #[objc::msg_send(pasteboardWithName:)]
48 pub fn with_name(name: &PasteboardName) -> arc::R<Self>;
49
50 #[objc::msg_send(pasteboardWithUniqueName)]
51 pub fn with_unique_name() -> arc::R<Self>;
52
53 #[objc::msg_send(name)]
54 pub fn name(&self) -> arc::R<PasteboardName>;
55
56 #[objc::msg_send(changeCount)]
57 pub fn change_count(&self) -> ns::Integer;
58
59 #[objc::msg_send(releaseGlobally)]
60 pub fn release_globally(&self);
61
62 #[objc::msg_send(accessBehavior)]
63 #[objc::available(macos = 15.4)]
64 pub fn access_behavior(&self) -> PasteboardAccessBehavior;
65
66 #[objc::msg_send(prepareForNewContentsWithOptions:)]
67 #[objc::available(macos = 10.12)]
68 pub fn prepare_for_new_contents_with_opts(
69 &mut self,
70 options: PasteboardContentsOpts,
71 ) -> ns::Integer;
72
73 #[objc::msg_send(clearContents)]
74 #[objc::available(macos = 10.6)]
75 pub fn clear_contents(&mut self) -> ns::Integer;
76
77 #[objc::msg_send(declareTypes:owner:)]
78 pub fn declare_types_owner(
79 &mut self,
80 new_types: &ns::Array<PasteboardType>,
81 new_owner: Option<&ns::Id>,
82 ) -> ns::Integer;
83
84 #[objc::msg_send(addTypes:owner:)]
85 pub fn add_types_owner(
86 &mut self,
87 new_types: &ns::Array<PasteboardType>,
88 new_owner: Option<&ns::Id>,
89 ) -> ns::Integer;
90
91 #[objc::msg_send(types)]
92 pub fn types(&self) -> Option<arc::R<ns::Array<PasteboardType>>>;
93
94 #[objc::msg_send(availableTypeFromArray:)]
95 pub fn available_type_from_array(
96 &self,
97 types: &ns::Array<PasteboardType>,
98 ) -> Option<arc::R<PasteboardType>>;
99
100 #[objc::msg_send(setData:forType:)]
101 pub fn set_data_for_type(
102 &mut self,
103 data: Option<&ns::Data>,
104 data_type: &PasteboardType,
105 ) -> bool;
106
107 #[objc::msg_send(setPropertyList:forType:)]
108 pub fn set_property_list_for_type(
109 &mut self,
110 plist: Option<&ns::Id>,
111 data_type: &PasteboardType,
112 ) -> bool;
113
114 #[objc::msg_send(setString:forType:)]
115 pub fn set_string_for_type(&mut self, string: &ns::String, data_type: &PasteboardType) -> bool;
116
117 #[objc::msg_send(dataForType:)]
118 pub fn data_for_type(&self, data_type: &PasteboardType) -> Option<arc::R<ns::Data>>;
119
120 #[objc::msg_send(propertyListForType:)]
121 pub fn property_list_for_type(&self, data_type: &PasteboardType) -> Option<arc::R<ns::Id>>;
122
123 #[objc::msg_send(stringForType:)]
124 pub fn string_for_type(&self, data_type: &PasteboardType) -> Option<arc::R<ns::String>>;
125}
126
127pub mod types {
128 use crate::{api, ns::PasteboardType};
129
130 #[doc(alias = "NSPasteboardTypeString")]
131 #[api::available(macos = 10.6)]
132 #[inline]
133 pub fn string() -> &'static PasteboardType {
134 unsafe { NSPasteboardTypeString }
135 }
136
137 #[doc(alias = "NSPasteboardTypePDF")]
138 #[api::available(macos = 10.6)]
139 #[inline]
140 pub fn pdf() -> &'static PasteboardType {
141 unsafe { NSPasteboardTypePDF }
142 }
143
144 #[doc(alias = "NSPasteboardTypeTIFF")]
145 #[api::available(macos = 10.6)]
146 #[inline]
147 pub fn tiff() -> &'static PasteboardType {
148 unsafe { NSPasteboardTypeTIFF }
149 }
150
151 #[doc(alias = "NSPasteboardTypePNG")]
152 #[api::available(macos = 10.6)]
153 #[inline]
154 pub fn png() -> &'static PasteboardType {
155 unsafe { NSPasteboardTypePNG }
156 }
157
158 #[doc(alias = "NSPasteboardTypeRTF")]
159 #[api::available(macos = 10.6)]
160 #[inline]
161 pub fn rtf() -> &'static PasteboardType {
162 unsafe { NSPasteboardTypeRTF }
163 }
164
165 #[doc(alias = "NSPasteboardTypeRTFD")]
166 #[api::available(macos = 10.6)]
167 #[inline]
168 pub fn rtfd() -> &'static PasteboardType {
169 unsafe { NSPasteboardTypeRTFD }
170 }
171
172 #[doc(alias = "NSPasteboardTypeHTML")]
173 #[api::available(macos = 10.6)]
174 #[inline]
175 pub fn html() -> &'static PasteboardType {
176 unsafe { NSPasteboardTypeHTML }
177 }
178
179 #[doc(alias = "NSPasteboardTypeTabularText")]
180 #[api::available(macos = 10.6)]
181 #[inline]
182 pub fn tabular_text() -> &'static PasteboardType {
183 unsafe { NSPasteboardTypeTabularText }
184 }
185
186 #[doc(alias = "NSPasteboardTypeFont")]
187 #[api::available(macos = 10.6)]
188 #[inline]
189 pub fn font() -> &'static PasteboardType {
190 unsafe { NSPasteboardTypeFont }
191 }
192
193 #[doc(alias = "NSPasteboardTypeRuler")]
194 #[api::available(macos = 10.6)]
195 #[inline]
196 pub fn ruler() -> &'static PasteboardType {
197 unsafe { NSPasteboardTypeRuler }
198 }
199
200 #[doc(alias = "NSPasteboardTypeColor")]
201 #[api::available(macos = 10.6)]
202 #[inline]
203 pub fn color() -> &'static PasteboardType {
204 unsafe { NSPasteboardTypeColor }
205 }
206
207 #[doc(alias = "NSPasteboardTypeSound")]
208 #[api::available(macos = 10.6)]
209 #[inline]
210 pub fn sound() -> &'static PasteboardType {
211 unsafe { NSPasteboardTypeSound }
212 }
213
214 #[doc(alias = "NSPasteboardTypeMultipleTextSelection")]
215 #[api::available(macos = 10.6)]
216 #[inline]
217 pub fn multiple_text_selection() -> &'static PasteboardType {
218 unsafe { NSPasteboardTypeMultipleTextSelection }
219 }
220
221 #[doc(alias = "NSPasteboardTypeTextFinderOptions")]
222 #[api::available(macos = 10.7)]
223 #[inline]
224 pub fn text_finder_opts() -> &'static PasteboardType {
225 unsafe { NSPasteboardTypeTextFinderOptions }
226 }
227
228 #[doc(alias = "NSPasteboardTypeURL")]
229 #[api::available(macos = 10.13)]
230 #[inline]
231 pub fn url() -> &'static PasteboardType {
232 unsafe { NSPasteboardTypeURL }
233 }
234
235 #[doc(alias = "NSPasteboardTypeFileURL")]
236 #[api::available(macos = 10.13)]
237 #[inline]
238 pub fn file_url() -> &'static PasteboardType {
239 unsafe { NSPasteboardTypeFileURL }
240 }
241
242 #[api::weak]
243 unsafe extern "C" {
244 #[api::available(macos = 10.6)]
245 static NSPasteboardTypeString: &'static PasteboardType;
246 #[api::available(macos = 10.6)]
247 static NSPasteboardTypePDF: &'static PasteboardType;
248 #[api::available(macos = 10.6)]
249 static NSPasteboardTypeTIFF: &'static PasteboardType;
250 #[api::available(macos = 10.6)]
251 static NSPasteboardTypePNG: &'static PasteboardType;
252 #[api::available(macos = 10.6)]
253 static NSPasteboardTypeRTF: &'static PasteboardType;
254 #[api::available(macos = 10.6)]
255 static NSPasteboardTypeRTFD: &'static PasteboardType;
256 #[api::available(macos = 10.6)]
257 static NSPasteboardTypeHTML: &'static PasteboardType;
258 #[api::available(macos = 10.6)]
259 static NSPasteboardTypeTabularText: &'static PasteboardType;
260 #[api::available(macos = 10.6)]
261 static NSPasteboardTypeFont: &'static PasteboardType;
262 #[api::available(macos = 10.6)]
263 static NSPasteboardTypeRuler: &'static PasteboardType;
264 #[api::available(macos = 10.6)]
265 static NSPasteboardTypeColor: &'static PasteboardType;
266 #[api::available(macos = 10.6)]
267 static NSPasteboardTypeSound: &'static PasteboardType;
268 #[api::available(macos = 10.6)]
269 static NSPasteboardTypeMultipleTextSelection: &'static PasteboardType;
270 #[api::available(macos = 10.7)]
271 static NSPasteboardTypeTextFinderOptions: &'static PasteboardType;
272 #[api::available(macos = 10.13)]
273 static NSPasteboardTypeURL: &'static PasteboardType;
274 #[api::available(macos = 10.13)]
275 static NSPasteboardTypeFileURL: &'static PasteboardType;
276 }
277}
278
279pub mod name {
280 use crate::{api, ns::PasteboardName};
281
282 #[doc(alias = "NSPasteboardNameGeneral")]
283 #[api::available(macos = 10.13)]
284 #[inline]
285 pub fn general() -> &'static PasteboardName {
286 unsafe { NSPasteboardNameGeneral }
287 }
288
289 #[doc(alias = "NSPasteboardNameFont")]
290 #[api::available(macos = 10.13)]
291 #[inline]
292 pub fn font() -> &'static PasteboardName {
293 unsafe { NSPasteboardNameFont }
294 }
295
296 #[doc(alias = "NSPasteboardNameRuler")]
297 #[api::available(macos = 10.13)]
298 #[inline]
299 pub fn ruler() -> &'static PasteboardName {
300 unsafe { NSPasteboardNameRuler }
301 }
302
303 #[doc(alias = "NSPasteboardNameFind")]
304 #[api::available(macos = 10.13)]
305 #[inline]
306 pub fn find() -> &'static PasteboardName {
307 unsafe { NSPasteboardNameFind }
308 }
309
310 #[doc(alias = "NSPasteboardNameDrag")]
311 #[api::available(macos = 10.13)]
312 #[inline]
313 pub fn drag() -> &'static PasteboardName {
314 unsafe { NSPasteboardNameDrag }
315 }
316
317 #[api::weak]
318 unsafe extern "C" {
319 #[api::available(macos = 10.13)]
320 static NSPasteboardNameGeneral: &'static PasteboardName;
321 #[api::available(macos = 10.13)]
322 static NSPasteboardNameFont: &'static PasteboardName;
323 #[api::available(macos = 10.13)]
324 static NSPasteboardNameRuler: &'static PasteboardName;
325 #[api::available(macos = 10.13)]
326 static NSPasteboardNameFind: &'static PasteboardName;
327 #[api::available(macos = 10.13)]
328 static NSPasteboardNameDrag: &'static PasteboardName;
329 }
330}
331
332pub mod reading_option_key {
333 use crate::{api, ns::PasteboardReadingOptionKey};
334
335 #[doc(alias = "NSPasteboardURLReadingFileURLsOnlyKey")]
336 #[api::available(macos = 10.6)]
337 #[inline]
338 pub fn url_reading_file_urls_only() -> &'static PasteboardReadingOptionKey {
339 unsafe { NSPasteboardURLReadingFileURLsOnlyKey }
340 }
341
342 #[doc(alias = "NSPasteboardURLReadingContentsConformToTypesKey")]
343 #[api::available(macos = 10.6)]
344 #[inline]
345 pub fn url_reading_contents_conform_to_types() -> &'static PasteboardReadingOptionKey {
346 unsafe { NSPasteboardURLReadingContentsConformToTypesKey }
347 }
348
349 #[api::weak]
350 unsafe extern "C" {
351 #[api::available(macos = 10.6)]
352 static NSPasteboardURLReadingFileURLsOnlyKey: &'static PasteboardReadingOptionKey;
353 #[api::available(macos = 10.6)]
354 static NSPasteboardURLReadingContentsConformToTypesKey: &'static PasteboardReadingOptionKey;
355 }
356}
357
358unsafe extern "C" {
359 static NS_PASTEBOARD: &'static objc::Class<Pasteboard>;
360}