// // Document.swift // Graphic Analysis 2 // // Created by Kilian Hofmann on 15.06.17. // Copyright © 2017 Kilian Hofmann. All rights reserved. // import Cocoa class Document: NSDocument { var year: FileWrapper? var months: [FileWrapper?] = [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil] var days: [[FileWrapper?]] = [] var yearDatasource: CollectionViewYear = CollectionViewYear() var monthDatasource: CollectionViewMonth = CollectionViewMonth() var windowController: NSWindowController = NSWindowController() @IBOutlet var collectionViewYear: NSCollectionView! @IBOutlet var collectionViewMonth: NSCollectionView! @IBOutlet var progress: NSProgressIndicator! override init() { super.init() for _ in 0..<12 { var temp: [FileWrapper?] = [] for _ in 0..<31 { temp.append(nil) } days.append(temp) } } override class func autosavesInPlace() -> Bool { return false } override var windowNibName: String? { return "Document" } override func read(from fileWrapper: FileWrapper, ofType typeName: String) throws { year = fileWrapper for entry in fileWrapper.fileWrappers! { guard let month = Int(entry.key) else { continue } months[month-1] = entry.value for entry2 in entry.value.fileWrappers! { guard let day = Int(entry2.key) else { continue } days[month-1][day-1] = entry2.value } } //throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil) } override func windowControllerDidLoadNib(_ windowController: NSWindowController) { // Setup collection layout let flowLayout = NSCollectionViewFlowLayout() flowLayout.itemSize = NSSize(width: 228, height: 211) flowLayout.sectionInset = EdgeInsets(top: 10, left: 0, bottom: 10, right: 0) flowLayout.minimumInteritemSpacing = 10 flowLayout.minimumLineSpacing = 10 collectionViewYear.collectionViewLayout = flowLayout let flowLayout2 = NSCollectionViewFlowLayout() flowLayout2.itemSize = NSSize(width: 135, height: 132) flowLayout2.sectionInset = EdgeInsets(top: 2, left: 2, bottom: 2, right: 2) flowLayout2.minimumInteritemSpacing = 2 flowLayout2.minimumLineSpacing = 2 collectionViewMonth.collectionViewLayout = flowLayout2 // Performance windowController.window?.contentView?.wantsLayer = true self.windowController = windowController // Data sources and delegate monthDatasource = CollectionViewMonth(days: days, document: self) yearDatasource = CollectionViewYear(months: months, dataSourceMonth: monthDatasource, collectionViewMonth: collectionViewMonth, document: self) collectionViewYear.dataSource = yearDatasource collectionViewYear.delegate = yearDatasource collectionViewMonth.dataSource = monthDatasource collectionViewMonth.delegate = monthDatasource } override func shouldCloseWindowController(_ windowController: NSWindowController, delegate: Any?, shouldClose shouldCloseSelector: Selector?, contextInfo: UnsafeMutableRawPointer?) { super.shouldCloseWindowController(windowController, delegate: delegate, shouldClose: shouldCloseSelector, contextInfo: contextInfo) } override func printOperation(withSettings printSettings: [String : Any]) throws -> NSPrintOperation { let printOperation: NSPrintOperation = NSPrintOperation(view: collectionViewMonth) printOperation.printInfo.orientation = .landscape printOperation.printInfo.horizontalPagination = .fitPagination printOperation.printInfo.verticalPagination = .fitPagination printOperation.printInfo.topMargin = 1 printOperation.printInfo.rightMargin = 1 printOperation.printInfo.bottomMargin = 1 printOperation.printInfo.leftMargin = 1 return printOperation } }