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