//
// DocHubLocation.swift
// DocHub
//
// Created by Tristan Juricek on 6/24/14.
// Copyright (c) 2014 Perforce. All rights reserved.
//
import AppKit
import Foundation
// Tracks the current location of "where" we are in the application
class DocHubLocation : NSObject {
let libraryObserver = PropertyObserver<Library>()
let areaObserver = PropertyObserver<Area>()
let directoryObserver = PropertyObserver<Directory>()
let fileObserver = PropertyObserver<File>()
var backStack = Array<DocHubLocation>()
var nextStack = Array<DocHubLocation>()
init() {
}
var library:Library? {
willSet(newLib) {
backStack.append(DocHubLocation())
area = nil
directory = nil
file = nil
}
didSet {
if let lib = library {
libraryObserver.fire(lib)
}
}
}
var area:Area? {
willSet(newArea) {
directory = nil
file = nil
}
didSet {
if let ar = area {
areaObserver.fire(ar)
}
}
}
var directory:Directory? {
willSet(newDir) {
file = nil
}
didSet {
if let dir = directory {
directoryObserver.fire(dir)
}
}
}
var file:File? {
didSet {
if let ff = file {
fileObserver.fire(ff)
}
}
}
var directoryCount:Int {
var count = 0
var dir = directory
if dir {
count++
while dir?.parent {
count++
}
}
return count
}
func directoryAt(index:Int) -> DirectoryLike? {
if area == nil {
return nil
}
if index == 0 {
return area!
}
var idx = index - 1
var dir = directory
while idx > 0 && dir {
idx--
dir = dir!.parent
}
return dir
}
}