Last active
May 12, 2016 00:18
-
-
Save corybohon/3735578fe58188e32ae8c6d5cc670cee to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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