Auto merge of #457 - zed-industries:ns-save-panel, r=jrmuizel

Add NSSavePanel binding

This PR adds bindings to some basic `NSSavePanel` APIs. In Cocoa, `NSSavePanel` is a superclass of `NSOpenPanel`, which I added bindings for in #454.

Example:

```rust
let panel = NSSavePanel::savePanel(nil);
panel.setDirectoryURL(the_url);
let response = panel.runModal();
if response == NSModalResponse::NSModalResponseOk {
    let url_ptr = panel.URL().absoluteString().UTF8String();
    let url = CStr::from_ptr(url_ptr).to_string_lossy();
    eprintln!("You picked URL {}", url);
}

```
This commit is contained in:
bors-servo
2021-05-05 09:52:43 -04:00
committed by GitHub
+30 -6
View File
@@ -1786,7 +1786,36 @@ pub enum NSModalResponse {
NSModalResponseCancel = 0,
}
pub trait NSOpenPanel: Sized {
pub trait NSSavePanel: Sized {
unsafe fn savePanel(_: Self) -> id {
msg_send![class!(NSSavePanel), savePanel]
}
unsafe fn setDirectoryURL(self, url: id);
unsafe fn setCanCreateDirectories(self, canCreateDirectories: BOOL);
unsafe fn URL(self) -> id;
unsafe fn runModal(self) -> NSModalResponse;
}
impl NSSavePanel for id {
unsafe fn setDirectoryURL(self, url: id) {
msg_send![self, setDirectoryURL: url]
}
unsafe fn setCanCreateDirectories(self, canCreateDirectories: BOOL) {
msg_send![self, setCanCreateDirectories: canCreateDirectories]
}
unsafe fn URL(self) -> id {
msg_send![self, URL]
}
unsafe fn runModal(self) -> NSModalResponse {
msg_send![self, runModal]
}
}
pub trait NSOpenPanel: NSSavePanel {
unsafe fn openPanel(_: Self) -> id {
msg_send![class!(NSOpenPanel), openPanel]
}
@@ -1796,7 +1825,6 @@ pub trait NSOpenPanel: Sized {
unsafe fn setResolvesAliases_(self, resolvesAliases: BOOL);
unsafe fn setAllowsMultipleSelection_(self, allowsMultipleSelection: BOOL);
unsafe fn URLs(self) -> id;
unsafe fn runModal(self) -> NSModalResponse;
}
impl NSOpenPanel for id {
@@ -1819,10 +1847,6 @@ impl NSOpenPanel for id {
unsafe fn URLs(self) -> id {
msg_send![self, URLs]
}
unsafe fn runModal(self) -> NSModalResponse {
msg_send![self, runModal]
}
}
#[repr(usize)]