hotcocoa 0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +4 -0
- data/bin/hotcocoa +31 -0
- data/lib/hotcocoa/application_builder.rb +320 -0
- data/lib/hotcocoa/attributed_string.rb +143 -0
- data/lib/hotcocoa/behaviors.rb +7 -0
- data/lib/hotcocoa/data_sources/combo_box_data_source.rb +44 -0
- data/lib/hotcocoa/data_sources/table_data_source.rb +18 -0
- data/lib/hotcocoa/delegate_builder.rb +85 -0
- data/lib/hotcocoa/graphics/canvas.rb +836 -0
- data/lib/hotcocoa/graphics/color.rb +781 -0
- data/lib/hotcocoa/graphics/elements/particle.rb +75 -0
- data/lib/hotcocoa/graphics/elements/rope.rb +99 -0
- data/lib/hotcocoa/graphics/elements/sandpainter.rb +71 -0
- data/lib/hotcocoa/graphics/gradient.rb +63 -0
- data/lib/hotcocoa/graphics/image.rb +488 -0
- data/lib/hotcocoa/graphics/path.rb +325 -0
- data/lib/hotcocoa/graphics/pdf.rb +71 -0
- data/lib/hotcocoa/graphics.rb +161 -0
- data/lib/hotcocoa/kernel_ext.rb +14 -0
- data/lib/hotcocoa/kvo_accessors.rb +48 -0
- data/lib/hotcocoa/layout_view.rb +448 -0
- data/lib/hotcocoa/mapper.rb +227 -0
- data/lib/hotcocoa/mapping_methods.rb +40 -0
- data/lib/hotcocoa/mappings/alert.rb +25 -0
- data/lib/hotcocoa/mappings/application.rb +112 -0
- data/lib/hotcocoa/mappings/array_controller.rb +87 -0
- data/lib/hotcocoa/mappings/box.rb +39 -0
- data/lib/hotcocoa/mappings/button.rb +92 -0
- data/lib/hotcocoa/mappings/collection_view.rb +44 -0
- data/lib/hotcocoa/mappings/color.rb +28 -0
- data/lib/hotcocoa/mappings/column.rb +21 -0
- data/lib/hotcocoa/mappings/combo_box.rb +24 -0
- data/lib/hotcocoa/mappings/control.rb +33 -0
- data/lib/hotcocoa/mappings/font.rb +44 -0
- data/lib/hotcocoa/mappings/gradient.rb +15 -0
- data/lib/hotcocoa/mappings/image.rb +15 -0
- data/lib/hotcocoa/mappings/image_view.rb +43 -0
- data/lib/hotcocoa/mappings/label.rb +25 -0
- data/lib/hotcocoa/mappings/layout_view.rb +9 -0
- data/lib/hotcocoa/mappings/menu.rb +71 -0
- data/lib/hotcocoa/mappings/menu_item.rb +47 -0
- data/lib/hotcocoa/mappings/movie.rb +13 -0
- data/lib/hotcocoa/mappings/movie_view.rb +27 -0
- data/lib/hotcocoa/mappings/notification.rb +17 -0
- data/lib/hotcocoa/mappings/popup.rb +110 -0
- data/lib/hotcocoa/mappings/progress_indicator.rb +68 -0
- data/lib/hotcocoa/mappings/scroll_view.rb +29 -0
- data/lib/hotcocoa/mappings/search_field.rb +9 -0
- data/lib/hotcocoa/mappings/secure_text_field.rb +17 -0
- data/lib/hotcocoa/mappings/segmented_control.rb +97 -0
- data/lib/hotcocoa/mappings/slider.rb +25 -0
- data/lib/hotcocoa/mappings/sort_descriptor.rb +13 -0
- data/lib/hotcocoa/mappings/sound.rb +9 -0
- data/lib/hotcocoa/mappings/speech_synthesizer.rb +25 -0
- data/lib/hotcocoa/mappings/split_view.rb +21 -0
- data/lib/hotcocoa/mappings/status_bar.rb +7 -0
- data/lib/hotcocoa/mappings/status_item.rb +9 -0
- data/lib/hotcocoa/mappings/table_view.rb +110 -0
- data/lib/hotcocoa/mappings/text_field.rb +41 -0
- data/lib/hotcocoa/mappings/text_view.rb +13 -0
- data/lib/hotcocoa/mappings/timer.rb +25 -0
- data/lib/hotcocoa/mappings/toolbar.rb +97 -0
- data/lib/hotcocoa/mappings/toolbar_item.rb +36 -0
- data/lib/hotcocoa/mappings/view.rb +67 -0
- data/lib/hotcocoa/mappings/web_view.rb +22 -0
- data/lib/hotcocoa/mappings/window.rb +118 -0
- data/lib/hotcocoa/mappings/xml_parser.rb +41 -0
- data/lib/hotcocoa/mappings.rb +109 -0
- data/lib/hotcocoa/mvc.rb +175 -0
- data/lib/hotcocoa/notification_listener.rb +62 -0
- data/lib/hotcocoa/object_ext.rb +22 -0
- data/lib/hotcocoa/plist.rb +45 -0
- data/lib/hotcocoa/standard_rake_tasks.rb +17 -0
- data/lib/hotcocoa/template.rb +27 -0
- data/lib/hotcocoa/virtual_file_system.rb +172 -0
- data/lib/hotcocoa.rb +26 -0
- data/template/Rakefile +5 -0
- data/template/config/build.yml +8 -0
- data/template/lib/application.rb +45 -0
- data/template/lib/menu.rb +32 -0
- data/template/resources/HotCocoa.icns +0 -0
- data/test/test_helper.rb +3 -0
- data/test/test_hotcocoa.rb +11 -0
- metadata +137 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
HotCocoa::Mappings.map :menu => :NSMenu do
|
2
|
+
|
3
|
+
defaults :title => ""
|
4
|
+
|
5
|
+
def alloc_with_options(options)
|
6
|
+
NSMenu.alloc.initWithTitle(options.delete(:title))
|
7
|
+
end
|
8
|
+
|
9
|
+
custom_methods do
|
10
|
+
|
11
|
+
def submenu(symbol, options={}, &block)
|
12
|
+
item = addItemWithTitle((options[:title] || titleize(symbol)), :action => nil, :keyEquivalent => "")
|
13
|
+
submenu = builder.menu :title => (options[:title] || titleize(symbol))
|
14
|
+
case symbol
|
15
|
+
when :apple
|
16
|
+
app.setAppleMenu(submenu)
|
17
|
+
when :services
|
18
|
+
app.setServicesMenu(submenu)
|
19
|
+
when :window
|
20
|
+
app.setWindowsMenu(submenu)
|
21
|
+
end
|
22
|
+
item_map[symbol] = submenu
|
23
|
+
block.call(submenu) if block
|
24
|
+
setSubmenu submenu, :forItem => item
|
25
|
+
submenu
|
26
|
+
end
|
27
|
+
|
28
|
+
def item(symbol, options={})
|
29
|
+
options[:title] ||= titleize(symbol)
|
30
|
+
options[:action] ||= "on_#{symbol}:"
|
31
|
+
item = builder.menu_item(options)
|
32
|
+
item_map[symbol] = item
|
33
|
+
addItem item
|
34
|
+
item
|
35
|
+
end
|
36
|
+
|
37
|
+
def separator
|
38
|
+
addItem NSMenuItem.separatorItem
|
39
|
+
end
|
40
|
+
|
41
|
+
def [](*symbols)
|
42
|
+
symbol = symbols.shift
|
43
|
+
symbols.empty? ? item_map[symbol] : item_map[symbol][*symbols]
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def builder
|
49
|
+
@builder || create_builder
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_builder
|
53
|
+
@builder = Object.new
|
54
|
+
@builder.extend HotCocoa
|
55
|
+
@builder
|
56
|
+
end
|
57
|
+
|
58
|
+
def item_map
|
59
|
+
@item_map ||= {}
|
60
|
+
end
|
61
|
+
|
62
|
+
def titleize(symbol)
|
63
|
+
symbol.to_s.split("_").collect(&:capitalize).join(" ")
|
64
|
+
end
|
65
|
+
|
66
|
+
def app
|
67
|
+
@app ||= NSApplication.sharedApplication
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
HotCocoa::Mappings.map :menu_item => :NSMenuItem do
|
2
|
+
|
3
|
+
defaults :title => "", :key => "", :action => nil
|
4
|
+
|
5
|
+
constant :modifiers, {
|
6
|
+
:control => NSControlKeyMask,
|
7
|
+
:alt => NSAlternateKeyMask,
|
8
|
+
:command => NSCommandKeyMask,
|
9
|
+
:shift => NSShiftKeyMask
|
10
|
+
}
|
11
|
+
|
12
|
+
def alloc_with_options(options)
|
13
|
+
NSMenuItem.alloc.initWithTitle options.delete(:title), :action => options.delete(:action), :keyEquivalent => options.delete(:key)
|
14
|
+
end
|
15
|
+
|
16
|
+
custom_methods do
|
17
|
+
|
18
|
+
def on_action=(behavior)
|
19
|
+
object = Object.new
|
20
|
+
object.instance_variable_set("@behavior", behavior)
|
21
|
+
def object.perform_action(sender)
|
22
|
+
@behavior.call(sender)
|
23
|
+
end
|
24
|
+
setTarget(object)
|
25
|
+
setAction("perform_action:")
|
26
|
+
end
|
27
|
+
|
28
|
+
def on_action(&behavior)
|
29
|
+
self.on_action = behavior
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def key
|
34
|
+
keyEquivalent
|
35
|
+
end
|
36
|
+
|
37
|
+
def key=(value)
|
38
|
+
setKeyEquivalent(value)
|
39
|
+
end
|
40
|
+
|
41
|
+
def modifiers=(value)
|
42
|
+
setKeyEquivalentModifierMask(value)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
HotCocoa::Mappings.map :movie => :QTMovie, :framework => :QTKit do
|
2
|
+
|
3
|
+
def alloc_with_options(options)
|
4
|
+
if options.has_key?(:file)
|
5
|
+
QTMovie.movieWithFile(options.delete(:file), error:options.delete(:error))
|
6
|
+
elsif options.has_key?(:url)
|
7
|
+
QTMovie.movieWithURL(NSURL.alloc.initWithString(options.delete(:url)), error:options.delete(:error))
|
8
|
+
else
|
9
|
+
raise "Can only allocate a movie from a file or a url"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
HotCocoa::Mappings.map :movie_view => :QTMovieView, :framework => :QTKit do
|
2
|
+
|
3
|
+
defaults :layout => {}, :frame => DefaultEmptyRect
|
4
|
+
|
5
|
+
def init_with_options(movie_view, options)
|
6
|
+
movie_view.initWithFrame(options.delete(:frame))
|
7
|
+
end
|
8
|
+
|
9
|
+
custom_methods do
|
10
|
+
|
11
|
+
def controller_visible=(value)
|
12
|
+
setControllerVisible(value)
|
13
|
+
end
|
14
|
+
|
15
|
+
def controller_buttons=(buttons)
|
16
|
+
setBackButtonVisible(buttons.include?(:back))
|
17
|
+
setCustomButtonVisible(buttons.include?(:custom))
|
18
|
+
setHotSpotButtonVisible(buttons.include?(:hot_spot))
|
19
|
+
setStepButtonsVisible(buttons.include?(:step))
|
20
|
+
setTranslateButtonVisible(buttons.include?(:translate))
|
21
|
+
setVolumeButtonVisible(buttons.include?(:volume))
|
22
|
+
setZoomButtonsVisible(buttons.include?(:zoom))
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
HotCocoa::Mappings.map :notification => :NSNotification do
|
2
|
+
|
3
|
+
defaults :post => true, :distributed => false
|
4
|
+
|
5
|
+
def alloc_with_options(options)
|
6
|
+
if options.delete(:post)
|
7
|
+
if options.delete(:distributed)
|
8
|
+
NSDistributedNotificationCenter.defaultCenter.postNotificationName options.delete(:name), object:options.delete(:object), userInfo:options.delete(:info), deliverImmediately:(options.delete(:immediately) == true)
|
9
|
+
else
|
10
|
+
NSNotificationCenter.defaultCenter.postNotificationName options.delete(:name), object:options.delete(:object), userInfo:options.delete(:info)
|
11
|
+
end
|
12
|
+
else
|
13
|
+
NSNotification.notificationName options.delete(:name), object:options.delete(:object), userInfo:options.delete(:info)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
module HotCocoa
|
2
|
+
class PopUpItemList
|
3
|
+
|
4
|
+
include Enumerable
|
5
|
+
|
6
|
+
attr_reader :control
|
7
|
+
|
8
|
+
def initialize(control)
|
9
|
+
@control = control
|
10
|
+
end
|
11
|
+
|
12
|
+
def <<(title)
|
13
|
+
control.addItemWithTitle(title)
|
14
|
+
end
|
15
|
+
|
16
|
+
def [](index)
|
17
|
+
control.itemTitleAtIndex(index)
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete(title)
|
21
|
+
if title.kind_of?(Fixnum)
|
22
|
+
control.removeItemAtIndex(title)
|
23
|
+
else
|
24
|
+
control.removeItemWithTitle(title)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def insert(title, at:index)
|
29
|
+
control.insertItemWithTitle(title, atIndex:index)
|
30
|
+
end
|
31
|
+
|
32
|
+
def selected
|
33
|
+
control.titleOfSelectedItem
|
34
|
+
end
|
35
|
+
|
36
|
+
def selected=(title)
|
37
|
+
if title.kind_of?(Fixnum)
|
38
|
+
control.selectItemAtIndex(title)
|
39
|
+
else
|
40
|
+
control.selectItemWithTitle(title)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def selected_index
|
45
|
+
control.indexOfSelectedItem
|
46
|
+
end
|
47
|
+
|
48
|
+
def size
|
49
|
+
control.numberOfItems
|
50
|
+
end
|
51
|
+
|
52
|
+
def each(&block)
|
53
|
+
control.itemTitles.each(&block)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
class PopUpMenuItemList < PopUpItemList
|
59
|
+
include Enumerable
|
60
|
+
|
61
|
+
def selected
|
62
|
+
control.selectedItem
|
63
|
+
end
|
64
|
+
|
65
|
+
def selected=(menu_item)
|
66
|
+
if menu_item.kind_of?(Fixnum)
|
67
|
+
control.selectItemAtIndex(menu_item)
|
68
|
+
else
|
69
|
+
control.selectItem(menu_item)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def [](index)
|
74
|
+
control.itemAtIndex(index)
|
75
|
+
end
|
76
|
+
|
77
|
+
def each(&block)
|
78
|
+
control.itemArray.each(&block)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
HotCocoa::Mappings.map :popup => :NSPopUpButton do
|
84
|
+
|
85
|
+
defaults :pulls_down => false,
|
86
|
+
:frame => DefaultEmptyRect,
|
87
|
+
:layout => {}
|
88
|
+
|
89
|
+
def init_with_options(popup, options)
|
90
|
+
popup.initWithFrame(options.delete(:frame), pullsDown:options.delete(:pulls_down))
|
91
|
+
end
|
92
|
+
|
93
|
+
custom_methods do
|
94
|
+
|
95
|
+
def items=(values)
|
96
|
+
removeAllItems
|
97
|
+
addItemsWithTitles(values)
|
98
|
+
end
|
99
|
+
|
100
|
+
def items
|
101
|
+
@_item_list ||= HotCocoa::PopUpItemList.new(self)
|
102
|
+
end
|
103
|
+
|
104
|
+
def menu_items
|
105
|
+
@_menu_item_list ||= HotCocoa::PopUpMenuItemList.new(self)
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# Cocoa class: NSProgressIndicator
|
2
|
+
# ================================
|
3
|
+
#
|
4
|
+
# Apple Documentation: http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSProgressIndicator_Class/Reference/Reference.html
|
5
|
+
#
|
6
|
+
# Usage Example:
|
7
|
+
# --------------
|
8
|
+
#
|
9
|
+
|
10
|
+
|
11
|
+
HotCocoa::Mappings.map :progress_indicator => :NSProgressIndicator do
|
12
|
+
|
13
|
+
defaults :layout => {}, :frame => [0,0,250,20]
|
14
|
+
|
15
|
+
def init_with_options(progress_bar, options)
|
16
|
+
progress_bar.initWithFrame(options.delete(:frame))
|
17
|
+
end
|
18
|
+
|
19
|
+
custom_methods do
|
20
|
+
|
21
|
+
def to_f
|
22
|
+
doubleValue
|
23
|
+
end
|
24
|
+
alias :value :to_f
|
25
|
+
|
26
|
+
def value=(value)
|
27
|
+
setDoubleValue(value.to_f)
|
28
|
+
end
|
29
|
+
|
30
|
+
def start
|
31
|
+
startAnimation(nil)
|
32
|
+
end
|
33
|
+
|
34
|
+
def stop
|
35
|
+
stopAnimation(nil)
|
36
|
+
end
|
37
|
+
|
38
|
+
def show
|
39
|
+
setHidden(false)
|
40
|
+
end
|
41
|
+
|
42
|
+
def hide
|
43
|
+
setHidden(true)
|
44
|
+
end
|
45
|
+
|
46
|
+
def reset
|
47
|
+
setDoubleValue(0.0)
|
48
|
+
end
|
49
|
+
|
50
|
+
def style=(style_name)
|
51
|
+
if style_name == :spinning
|
52
|
+
setStyle(NSProgressIndicatorSpinningStyle)
|
53
|
+
else
|
54
|
+
setStyle(NSProgressIndicatorBarStyle)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def spinning_style
|
59
|
+
setStyle(NSProgressIndicatorSpinningStyle)
|
60
|
+
end
|
61
|
+
|
62
|
+
def bar_style
|
63
|
+
setStyle(NSProgressIndicatorBarStyle)
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
HotCocoa::Mappings.map :scroll_view => :NSScrollView do
|
2
|
+
|
3
|
+
defaults :vertical_scroller => true, :horizontal_scroller => true, :autoresizes_subviews => true, :layout => {}, :frame => [0,0,0,0]
|
4
|
+
|
5
|
+
def init_with_options(scroll_view, options)
|
6
|
+
scroll_view.initWithFrame options.delete(:frame)
|
7
|
+
end
|
8
|
+
|
9
|
+
custom_methods do
|
10
|
+
|
11
|
+
def <<(view)
|
12
|
+
setDocumentView(view)
|
13
|
+
end
|
14
|
+
|
15
|
+
def background=(value)
|
16
|
+
setDrawsBackground(value)
|
17
|
+
end
|
18
|
+
|
19
|
+
def vertical_scroller=(value)
|
20
|
+
setHasVerticalScroller(value)
|
21
|
+
end
|
22
|
+
|
23
|
+
def horizontal_scroller=(value)
|
24
|
+
setHasHorizontalScroller(value)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
HotCocoa::Mappings.map :secure_text_field => :NSSecureTextField do
|
2
|
+
|
3
|
+
defaults :selectable => true, :editable => true, :echo => true, :layout => {}
|
4
|
+
|
5
|
+
def init_with_options(secure_text_field, options)
|
6
|
+
secure_text_field.initWithFrame options.delete(:frame)
|
7
|
+
end
|
8
|
+
|
9
|
+
custom_methods do
|
10
|
+
|
11
|
+
def echo=(value)
|
12
|
+
cell.setEchosBullets(value)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module HotCocoa
|
2
|
+
class SegmentedControlSegment
|
3
|
+
attr_reader :number, :control
|
4
|
+
def initialize(control, number)
|
5
|
+
@number = number
|
6
|
+
@control = control
|
7
|
+
end
|
8
|
+
|
9
|
+
def width
|
10
|
+
control.widthForSegment(number)
|
11
|
+
end
|
12
|
+
|
13
|
+
def width=(width)
|
14
|
+
control.setWidth(width, forSegment:number)
|
15
|
+
end
|
16
|
+
|
17
|
+
def label
|
18
|
+
control.labelForSegment(number)
|
19
|
+
end
|
20
|
+
|
21
|
+
def label=(label)
|
22
|
+
control.setLabel(label, forSegment:number)
|
23
|
+
end
|
24
|
+
|
25
|
+
def image
|
26
|
+
control.imageForSegment(number)
|
27
|
+
end
|
28
|
+
|
29
|
+
def image=(image)
|
30
|
+
control.setImage(image, forSegment:number)
|
31
|
+
end
|
32
|
+
|
33
|
+
def menu
|
34
|
+
control.menuForSegment(number)
|
35
|
+
end
|
36
|
+
|
37
|
+
def menu=(menu)
|
38
|
+
control.setMenu(menu, forSegment:number)
|
39
|
+
end
|
40
|
+
|
41
|
+
def selected?
|
42
|
+
control.isSelectedForSegment(number)
|
43
|
+
end
|
44
|
+
|
45
|
+
def selected=(value)
|
46
|
+
control.setSelected(value, forSegment:number)
|
47
|
+
end
|
48
|
+
|
49
|
+
def enabled?
|
50
|
+
control.isEnabledForSegment(number)
|
51
|
+
end
|
52
|
+
|
53
|
+
def enabled=(value)
|
54
|
+
control.setEnabled(value, forSegment:number)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
HotCocoa::Mappings.map :segmented_control => :NSSegmentedControl do
|
60
|
+
|
61
|
+
defaults :layout => {}, :frame => [0,0,0,0]
|
62
|
+
|
63
|
+
def init_with_options(segmented_control, options)
|
64
|
+
segmented_control.initWithFrame options.delete(:frame)
|
65
|
+
end
|
66
|
+
|
67
|
+
custom_methods do
|
68
|
+
|
69
|
+
def segments=(segments)
|
70
|
+
segments.each do |segment|
|
71
|
+
self << segment
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def <<(data)
|
76
|
+
setSegmentCount(segmentCount+1)
|
77
|
+
segment = HotCocoa::SegmentedControlSegment.new(self, segmentCount-1)
|
78
|
+
data.each do |key, value|
|
79
|
+
segment.send("#{key}=", value)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def [](segment_number)
|
84
|
+
Segment.new(self, segment_number)
|
85
|
+
end
|
86
|
+
|
87
|
+
def select(segment_number)
|
88
|
+
setSelectedSegment(segment_number)
|
89
|
+
end
|
90
|
+
|
91
|
+
def selected_segment
|
92
|
+
HotCocoa::SegmentedControlSegment.new(self, selectedSegment)
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
HotCocoa::Mappings.map :slider => :NSSlider do
|
2
|
+
|
3
|
+
defaults :frame => DefaultEmptyRect, :layout => {}
|
4
|
+
|
5
|
+
def init_with_options(button, options)
|
6
|
+
button.initWithFrame options.delete(:frame)
|
7
|
+
end
|
8
|
+
|
9
|
+
custom_methods do
|
10
|
+
|
11
|
+
def min=(value)
|
12
|
+
setMinValue(value)
|
13
|
+
end
|
14
|
+
|
15
|
+
def max=(value)
|
16
|
+
setMaxValue(value)
|
17
|
+
end
|
18
|
+
|
19
|
+
def tic_marks=(value)
|
20
|
+
setNumberOfTickMarks(value)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
HotCocoa::Mappings.map :sort_descriptor => :NSSortDescriptor do
|
2
|
+
|
3
|
+
defaults :ascending => true
|
4
|
+
|
5
|
+
def init_with_options(sort_descriptor, opts)
|
6
|
+
if opts.has_key?(:selector)
|
7
|
+
sort_descriptor.initWithKey(opts.delete(:key), ascending:opts.delete(:ascending))
|
8
|
+
else
|
9
|
+
sort_descriptor.initWithKey(opts.delete(:key), ascending:opts.delete(:ascending), selector:opts.delete(:selector))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
HotCocoa::Mappings.map :speech_synthesizer => :NSSpeechSynthesizer do
|
2
|
+
|
3
|
+
def init_with_options(obj, options)
|
4
|
+
if voice = options.delete(:voice)
|
5
|
+
obj.initWithVoice voice
|
6
|
+
else
|
7
|
+
obj.init
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
custom_methods do
|
12
|
+
|
13
|
+
def speak(what, to=nil)
|
14
|
+
if to
|
15
|
+
url = to.is_a?(String) ? NSURL.fileURLWithPath(to) : to
|
16
|
+
startSpeakingString(what, toURL:url)
|
17
|
+
else
|
18
|
+
startSpeakingString(what)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
HotCocoa::Mappings.map :split_view => :NSSplitView do
|
2
|
+
|
3
|
+
defaults :layout => {}
|
4
|
+
|
5
|
+
def init_with_options(split_view, options)
|
6
|
+
split_view.initWithFrame options.delete(:frame)
|
7
|
+
end
|
8
|
+
|
9
|
+
custom_methods do
|
10
|
+
|
11
|
+
def horizontal=(value)
|
12
|
+
setVertical(!value)
|
13
|
+
end
|
14
|
+
|
15
|
+
def set_position(position, of_divider_at_index:index)
|
16
|
+
setPosition position, ofDividerAtIndex:index
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|