You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fixes#511: Add`NSPanel` trait to create NSPanels
Intention for PR described here: #511.
I didn't extend any of the examples to include `NSPanel` because I think that's not really worth it. Instead, here is an adapted version of the `hello_world.rs` example that prints out responses of the API for both, `NSWindow` and `NSPanel`.
```Rust
extern crate cocoa;
use cocoa::appkit::{
NSApp, NSApplication, NSApplicationActivateIgnoringOtherApps,
NSApplicationActivationPolicyRegular, NSBackingStoreBuffered, NSMenu, NSMenuItem, NSPanel,
NSRunningApplication, NSWindow, NSWindowStyleMask,
};
use cocoa::base::{nil, selector, NO};
use cocoa::foundation::{NSAutoreleasePool, NSPoint, NSProcessInfo, NSRect, NSSize, NSString};
fn main() {
unsafe {
let _pool = NSAutoreleasePool::new(nil);
let app = NSApp();
app.setActivationPolicy_(NSApplicationActivationPolicyRegular);
// create Menu Bar
let menubar = NSMenu::new(nil).autorelease();
let app_menu_item = NSMenuItem::new(nil).autorelease();
menubar.addItem_(app_menu_item);
app.setMainMenu_(menubar);
// create Application menu
let app_menu = NSMenu::new(nil).autorelease();
let quit_prefix = NSString::alloc(nil).init_str("Quit ");
let quit_title =
quit_prefix.stringByAppendingString_(NSProcessInfo::processInfo(nil).processName());
let quit_action = selector("terminate:");
let quit_key = NSString::alloc(nil).init_str("q");
let quit_item = NSMenuItem::alloc(nil)
.initWithTitle_action_keyEquivalent_(quit_title, quit_action, quit_key)
.autorelease();
app_menu.addItem_(quit_item);
app_menu_item.setSubmenu_(app_menu);
// create Window
let window = NSWindow::alloc(nil)
.initWithContentRect_styleMask_backing_defer_(
NSRect::new(NSPoint::new(0., 0.), NSSize::new(200., 200.)),
NSWindowStyleMask::NSTitledWindowMask,
NSBackingStoreBuffered,
NO,
)
.autorelease();
window.cascadeTopLeftFromPoint_(NSPoint::new(20., 20.));
window.center();
let title = NSString::alloc(nil).init_str("Hello World!");
window.setTitle_(title);
window.makeKeyAndOrderFront_(nil);
// create Panel
let panel = NSPanel::alloc(nil)
.initWithContentRect_styleMask_backing_defer_(
NSRect::new(NSPoint::new(0., 0.), NSSize::new(200., 200.)),
NSWindowStyleMask::NSTitledWindowMask,
NSBackingStoreBuffered,
NO,
)
.autorelease();
panel.cascadeTopLeftFromPoint_(NSPoint::new(20., 20.));
panel.center();
let title = NSString::alloc(nil).init_str("Hello PANEL!");
panel.setTitle_(title);
panel.makeKeyAndOrderFront_(nil);
// Specific behavior of NSWindow & NSPanel
println!(
"NSWindow can become main window: {}",
window.canBecomeMainWindow()
); // returns true
println!(
"NSPanel can become main window? {}",
panel.canBecomeMainWindow()
); // returns false
// Test methods of NSPanel Trait
println!(
"BEFORE setting it: NSPanel is a floating panel: {}",
panel.floatingPanel()
); // returns false
println!(
"BEFORE setting it: NSPanel becomes key only when needed: {}",
panel.becomesKeyOnlyIfNeeded()
); // returns false
panel.setFloatingPanel(true);
panel.setBecomesKeyOnlyIfNeeded(true);
println!(
"AFTER: NSPanel is a floating panel: {}",
panel.floatingPanel()
); // returns true
println!(
"AFTER: NSPanel becomes key only when needed: {}",
panel.becomesKeyOnlyIfNeeded()
); // returns true
let current_app = NSRunningApplication::currentApplication(nil);
current_app.activateWithOptions_(NSApplicationActivateIgnoringOtherApps);
app.run();
}
}
```
0 commit comments