Skip to main content

cidre/ns/app/
pasteboard.rs

1use 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}