tab_view/
tab_view.rs

1#![allow(deprecated)] // the cocoa crate is deprecated
2use cocoa::base::{id, nil, selector, NO};
3
4use cocoa::appkit::{
5    NSApp, NSApplication, NSApplicationActivateIgnoringOtherApps,
6    NSApplicationActivationPolicyRegular, NSBackingStoreType, NSMenu, NSMenuItem,
7    NSRunningApplication, NSTabView, NSTabViewItem, NSWindow, NSWindowStyleMask,
8};
9use cocoa::foundation::{NSAutoreleasePool, NSPoint, NSProcessInfo, NSRect, NSSize, NSString};
10
11fn main() {
12    unsafe {
13        // create a tab View
14        let tab_view = NSTabView::new(nil)
15            .initWithFrame_(NSRect::new(NSPoint::new(0., 0.), NSSize::new(200., 200.)));
16
17        // create a tab view item
18        let tab_view_item =
19            NSTabViewItem::new(nil).initWithIdentifier_(NSString::alloc(nil).init_str("TabView1"));
20
21        tab_view_item.setLabel_(NSString::alloc(nil).init_str("Tab view item 1"));
22        tab_view.addTabViewItem_(tab_view_item);
23
24        // create a second tab view item
25        let tab_view_item2 =
26            NSTabViewItem::new(nil).initWithIdentifier_(NSString::alloc(nil).init_str("TabView2"));
27
28        tab_view_item2.setLabel_(NSString::alloc(nil).init_str("Tab view item 2"));
29        tab_view.addTabViewItem_(tab_view_item2);
30
31        // Create the app and set the content.
32        let app = create_app(NSString::alloc(nil).init_str("Tab View"), tab_view);
33        app.run();
34    }
35}
36
37unsafe fn create_app(title: id, content: id) -> id {
38    let _pool = NSAutoreleasePool::new(nil);
39
40    let app = NSApp();
41    app.setActivationPolicy_(NSApplicationActivationPolicyRegular);
42
43    // create Menu Bar
44    let menubar = NSMenu::new(nil).autorelease();
45    let app_menu_item = NSMenuItem::new(nil).autorelease();
46    menubar.addItem_(app_menu_item);
47    app.setMainMenu_(menubar);
48
49    // create Application menu
50    let app_menu = NSMenu::new(nil).autorelease();
51    let quit_prefix = NSString::alloc(nil).init_str("Quit ");
52    let quit_title =
53        quit_prefix.stringByAppendingString_(NSProcessInfo::processInfo(nil).processName());
54    let quit_action = selector("terminate:");
55    let quit_key = NSString::alloc(nil).init_str("q");
56    let quit_item = NSMenuItem::alloc(nil)
57        .initWithTitle_action_keyEquivalent_(quit_title, quit_action, quit_key)
58        .autorelease();
59    app_menu.addItem_(quit_item);
60    app_menu_item.setSubmenu_(app_menu);
61
62    // create Window
63    let window = NSWindow::alloc(nil)
64        .initWithContentRect_styleMask_backing_defer_(
65            NSRect::new(NSPoint::new(0., 0.), NSSize::new(200., 200.)),
66            NSWindowStyleMask::NSTitledWindowMask
67                | NSWindowStyleMask::NSClosableWindowMask
68                | NSWindowStyleMask::NSResizableWindowMask
69                | NSWindowStyleMask::NSMiniaturizableWindowMask
70                | NSWindowStyleMask::NSUnifiedTitleAndToolbarWindowMask,
71            NSBackingStoreType::NSBackingStoreBuffered,
72            NO,
73        )
74        .autorelease();
75    window.cascadeTopLeftFromPoint_(NSPoint::new(20., 20.));
76    window.center();
77
78    window.setTitle_(title);
79    window.makeKeyAndOrderFront_(nil);
80
81    window.setContentView_(content);
82    let current_app = NSRunningApplication::currentApplication(nil);
83    current_app.activateWithOptions_(NSApplicationActivateIgnoringOtherApps);
84
85    app
86}