// // DocHubControllers.swift // DocHub // // Created by Tristan Juricek on 6/10/14. // Copyright (c) 2014 Perforce. All rights reserved. // import Foundation import AppKit // The controller deals with nearly all "application" events from the different // views, well, since there's really only supposed to be one window. class DocHubController : NSObject, NSApplicationDelegate, NSSplitViewDelegate, LibraryViewDelegate { var window: NSWindow var mainSplitView: NSSplitView var libraryView: LibraryView var navigatorView: NavigatorView var toolbar: NSToolbar var toolbarDelegate: DocHubToolbarDelegate? var addPerforceController: AddPerforceController? = nil init() { let winRect = NSRect(x: 50, y: 150, width: 1024, height: 800) window = NSWindow(contentRect: winRect, styleMask: NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask, backing: NSBackingStoreType.Buffered, defer: false) mainSplitView = NSSplitView(frame: NSRect(x:0, y:0, width: 1024, height:800)) libraryView = LibraryView(frame: NSRect(x: 0, y: 0, width: 200, height:800)) navigatorView = NavigatorView(frame: NSRect(x:0, y:0, width: 700, height:800)) toolbar = NSToolbar(identifier: "DocHubToolbar") super.init() libraryView.delegate = self } func applicationDidFinishLaunching(aNotification: NSNotification?) { toolbarDelegate = DocHubToolbarDelegate(mainController:self) toolbar.delegate = toolbarDelegate toolbar.sizeMode = NSToolbarSizeMode.Small toolbar.displayMode = NSToolbarDisplayMode.IconOnly window.toolbar = toolbar mainSplitView.dividerStyle = NSSplitViewDividerStyle.Thin mainSplitView.vertical = true mainSplitView.delegate = self mainSplitView.addSubview(libraryView) mainSplitView.addSubview(navigatorView) mainSplitView.autoresizingMask = NSAutoresizingMaskOptions.ViewHeightSizable | NSAutoresizingMaskOptions.ViewWidthSizable if window.contentView is NSView { (window.contentView as NSView).autoresizesSubviews = true } window.contentView.addSubview(mainSplitView) window.title = NSLocalizedString("Document Hub", comment:"window.title") window.makeKeyAndOrderFront(self) } func applicationWillTerminate(aNotification: NSNotification?) { // Insert code here to tear down your application } func toggleLibrary() { let isCollapsed = mainSplitView.isSubviewCollapsed(libraryView) if isCollapsed { uncollapseLibrary() } else { collapseLibrary() } } func uncollapseLibrary() { libraryView.hidden = false let dividerW = mainSplitView.dividerThickness let libraryW = libraryView.frame.size.width let navigatorW = navigatorView.frame.size.width navigatorView.frame.size.width = (navigatorW - libraryW - dividerW) navigatorView.frame.origin.x = libraryW + dividerW navigatorView.setFrameSize(navigatorView.frame.size) mainSplitView.display() } func collapseLibrary() { libraryView.hidden = true navigatorView.setFrameSize(mainSplitView.frame.size) mainSplitView.display() } func splitView(splitView: NSSplitView!, canCollapseSubview subview: NSView!) -> Bool { return subview === libraryView } func splitView(splitView: NSSplitView!, shouldCollapseSubview subview: NSView!, forDoubleClickOnDividerAtIndex dividerIndex: Int) -> Bool { return dividerIndex == 0 } func addPerforceServer() { addPerforceController = AddPerforceController(windowNibName:"AddPerforceSheet") NSApp.beginSheet(addPerforceController!.window, modalForWindow: window, modalDelegate: addPerforceController, didEndSelector: "done", contextInfo: nil) } }