Skip to content

Instantly share code, notes, and snippets.

@corybohon
Last active May 12, 2016 00:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save corybohon/3735578fe58188e32ae8c6d5cc670cee to your computer and use it in GitHub Desktop.
Save corybohon/3735578fe58188e32ae8c6d5cc670cee to your computer and use it in GitHub Desktop.
//
// ViewController.swift
// Reminderz
//
// Created by Cory Bohon on 4/21/16.
// Copyright © 2016 MartianCraft. All rights reserved.
//
import Cocoa
class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
@IBOutlet var tableView: NSTableView!
@IBOutlet var todoNameField: NSTextField!
@IBOutlet var todoDueDatePicker: NSDatePicker!
let dateFormatter: NSDateFormatter = NSDateFormatter()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.todoDueDatePicker.dateValue = NSDate()
self.todoNameField.becomeFirstResponder()
self.dateFormatter.timeStyle = .ShortStyle
self.dateFormatter.dateStyle = .ShortStyle
self.tableView.setDelegate(self)
self.tableView.setDataSource(self)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(updateData(_:)), name: "dataAvailable", object: nil)
}
@IBAction func saveButtonClicked(sender: NSButton) {
if self.todoNameField.stringValue.characters.count > 0 {
let todoItem: TodoItem = TodoItem()
todoItem.setTodo(self.todoNameField.stringValue, dueDate: self.todoDueDatePicker.dateValue)
DataManager.sharedInstance.addTodoItem(todoItem)
self.todoNameField.stringValue = ""
self.todoDueDatePicker.dateValue = NSDate()
} else {
let alertView: NSAlert = NSAlert()
alertView.alertStyle = .InformationalAlertStyle
alertView.messageText = "Todo name is invalid"
alertView.informativeText = "The name field must have a value before adding the todo to the list."
alertView.runModal()
}
}
// Table View Delegate and Data Source
func numberOfRowsInTableView(tableView: NSTableView) -> Int {
return DataManager.sharedInstance.storedTodos.count
}
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? {
if let todoItem:TodoItem = DataManager.sharedInstance.storedTodos[row] {
var stringValue: String = ""
var cellIdentifier: String = ""
if tableColumn?.identifier == "itemColumn" {
stringValue = todoItem.todoName
cellIdentifier = "nameCell"
} else if tableColumn?.identifier == "dueDateColumn" {
stringValue = self.dateFormatter.stringFromDate(todoItem.todoDueDate)
cellIdentifier = "dateCell"
}
if let cell = tableView.makeViewWithIdentifier(cellIdentifier, owner: nil) as? NSTableCellView {
cell.textField?.stringValue = stringValue
let currentDate: NSDate = NSDate()
if !todoItem.todoDueDate.earlierDate(currentDate).isEqualToDate(currentDate) {
cell.alphaValue = 0.25
}
return cell
}
}
return nil
}
func updateData(sender: NSNotification) {
self.tableView.reloadData()
}
// Keyboard shortcuts
override func keyDown(theEvent: NSEvent) {
interpretKeyEvents([theEvent])
}
override func deleteBackward(sender: AnyObject?) {
let selectedRow: Int = self.tableView.selectedRow
if selectedRow == -1 {
return
}
DataManager.sharedInstance.removeTodoItem(DataManager.sharedInstance.storedTodos[selectedRow])
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment