Go to file
Ivan Sapozhnik a0016a047c Readme
2020-04-07 21:42:21 +02:00
.github/ISSUE_TEMPLATE Update issue templates 2020-04-04 23:48:12 +02:00
.swiftpm/xcode/package.xcworkspace Popover implementation 2020-04-01 23:39:27 +02:00
Sources/Popover Tiny improvement 2020-04-07 20:51:21 +02:00
Tests Popover implementation 2020-04-01 23:39:27 +02:00
.gitignore Initial Commit 2020-04-01 23:02:39 +02:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2020-04-04 23:42:25 +02:00
Package.swift Custom view inside status bar item 2020-04-03 14:15:07 +02:00
popover.png Readme 2020-04-07 21:42:21 +02:00
README.md Readme 2020-04-07 21:42:21 +02:00

Popover

Mac OS custom popover. alt text

Install

Since this is a Swift Package, the installation process is pretty stright forward.

Manual way

Update your Package.swift dependencies:

dependencies: [
    .package(url: "https://github.com/iSapozhnik/Popover", from: "1.0.8")
]

Via Xcode:

  1. Go to File -> Swift Packages -> Add Package Dependency.
  2. Put GitHub URL https://github.com/iSapozhnik/Popover and click Next
  3. Select the latest version
  4. Click Finish

How to use

  1. In your AppDelegate import Popover
  2. Create a view you want to put into a status bar.
  3. Create a content view controller which would be embedded inside Popover
  4. Optionally create menu items
  5. Create a Popover instance. Here you can use either standard configuration (you don't need to pass windowConfiguration parameter in this case) or you can subclass DefaultConfiguration, override some properties and pass a new instance as a parameter. If in ste 4 you have created menu items, pass it here as well.
  6. Call prepare to set everything up.

And here is how typical AppDelegate may look like:

import Cocoa
import Popover

class MyPopoverConfiguration: DefaultConfiguration {
    override var backgroundColor: NSColor {
        return NSColor.systemRed
    }

    override var borderColor: NSColor? {
        return NSColor.red
    }
}

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    var popover: Popover!

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        let statusItemView = StatusItemView(frame: NSRect(width: 22.0, height: 20))

        let viewController = MainViewController()

        let menuItems: [Popover.MenuItemType] = [
            .item(Popover.MenuItem(title: "Settings", action: viewController.showSettings)),
            .separator,
            .item(Popover.MenuItem(title: "Quit", key: "q", action: viewController.quit))
        ]

        popover = Popover(with: MyPopoverConfiguration(), menuItems: menuItems)
        popover.prepare(with: statusItemView, contentViewController: viewController)
    }
}

Heavily inspired by CCNStatusItem