1# 2# MyDocument.h 3# RubyRaiseMan 4# 5# Created by FUJIMOTO Hisakuni on Sun Aug 11 2002. 6# Copyright (c) 2001 __MyCompanyName__. All rights reserved. 7# 8 9require 'osx/cocoa' 10require 'PreferenceController' 11 12class MyDocument < OSX::NSDocument 13 include OSX 14 15 ib_outlets :deleteButton, :tableView 16 17 def initialize 18 @employees = Array.new 19 NSNotificationCenter.defaultCenter. 20 addObserver self, 21 :selector, 'handleColorChange:', 22 :name, PreferenceController::BNRColorChanged, 23 :object, nil 24 end 25 26 def dealloc 27 NSNotificationCenter.defaultCenter.removeObserver(self) 28 super_dealloc 29 end 30 31 def deleteEmployee (sender) 32 peapleToRemove = Array.new 33 iter = @tableView.selectedRowEnumerator 34 while index = iter.nextObject do 35 peapleToRemove.push @employees[index.to_i] 36 end 37 38 choice = OSX.NSRunAlertPanel NSLocalizedString("Delete"), 39 NSLocalizedString("SureDelete"), 40 NSLocalizedString("Yes"), 41 NSLocalizedString("No"), 42 nil, peapleToRemove.size 43 44 if choice == NSAlertDefaultReturn then 45 peapleToRemove.each {|i| @employees.delete(i) } 46 updateChangeCount(NSChangeDone) 47 update_ui 48 end 49 end 50 ib_action :deleteEmployee 51 52 def newEmployee (sender) 53 create_new_employee 54 update_ui 55 end 56 ib_action :newEmployee 57 58 # data source 59 def numberOfRowsInTableView (tblView) 60 @employees.size 61 end 62 63 def tableView_objectValueForTableColumn_row (tblView, col, row) 64 identifier = col.identifier 65 person = @employees[row] 66 person.send(identifier.to_s.intern) 67 end 68 69 def tableView_setObjectValue_forTableColumn_row (tblView, obj, col, row) 70 identifier = col.identifier 71 person = @employees[row] 72 if obj.isKindOfClass?(NSDecimalNumber) then 73 obj = obj.to_f 74 else 75 obj = obj.to_s 76 end 77 person.send("#{identifier}=".intern, obj) 78 updateChangeCount(NSChangeDone) 79 end 80 81 # delegate 82 def tableViewSelectionDidChange (aNotification) 83 @deleteButton.setEnabled(@employees.size > 0 && @tableView.selectedRow != -1) 84 end 85 86 def create_new_employee 87 @employees.push(Person.new) 88 updateChangeCount(NSChangeDone) 89 @currentIndex = @employees.size - 1 90 end 91 92 def update_ui 93 @tableView.reloadData if @tableView 94 @deleteButton.setEnabled(@employees.size > 0 && @tableView.selectedRow != -1) if @deleteButton 95 end 96 97 def windowNibName 98 return "MyDocument" 99 end 100 101 def windowControllerDidLoadNib (aController) 102 super_windowControllerDidLoadNib(aController) 103 104 defaults = NSUserDefaults.standardUserDefaults 105 colorAsData = defaults[PreferenceController::BNRTableBgColorKey] 106 @tableView.setBackgroundColor NSUnarchiver.unarchiveObjectWithData(colorAsData) 107 108 update_ui 109 end 110 111 def dataRepresentationOfType (type) 112 @tableView.deselectAll(nil) 113 dumped_data = Marshal.dump @employees 114 return NSArchiver.archivedDataWithRootObject(dumped_data) 115 end 116 117 def loadDataRepresentation_ofType (data, type) 118 dumped_data = NSUnarchiver.unarchiveObjectWithData(data) 119 @employees = Marshal.load(dumped_data.to_s) 120 updateChangeCount(NSChangeCleared) 121 update_ui 122 return true 123 end 124 125 def handleColorChange (ntfy) 126 @tableView.setBackgroundColor(ntfy.object) 127 update_ui 128 end 129 130end 131