[macruby-changes] [498] MacRuby/trunk/sample-macruby/HotCocoa
source_changes at macosforge.org
source_changes at macosforge.org
Wed Aug 27 18:45:43 PDT 2008
Revision: 498
http://trac.macosforge.org/projects/ruby/changeset/498
Author: rich at infoether.com
Date: 2008-08-27 18:45:43 -0700 (Wed, 27 Aug 2008)
Log Message:
-----------
add layout view app and remove old one
Added Paths:
-----------
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Info.plist
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/MacOS/
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/MacOS/LayoutView
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/PkgInfo
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/Layout View.icns
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/lib/
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/lib/application.rb
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/lib/menu.rb
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/rb_main.rb
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Rakefile
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/config/
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/config/build.yml
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/lib/
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/lib/application.rb
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/lib/menu.rb
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/resources/
MacRuby/trunk/sample-macruby/HotCocoa/layout_view/resources/HotCocoa.icns
Removed Paths:
-------------
MacRuby/trunk/sample-macruby/HotCocoa/layout_view.rb
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Info.plist
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Info.plist (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Info.plist 2008-08-28 01:45:43 UTC (rev 498)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleIconFile</key>
+ <string>Layout View.icns</string>
+ <key>CFBundleExecutable</key>
+ <string>LayoutView</string>
+ <key>CFBundleIdentifier</key>
+ <string>com.yourcompany.Layout View</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>Layout View</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+</dict>
+</plist>
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/MacOS/LayoutView
===================================================================
(Binary files differ)
Property changes on: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/MacOS/LayoutView
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/PkgInfo
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/PkgInfo (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/PkgInfo 2008-08-28 01:45:43 UTC (rev 498)
@@ -0,0 +1 @@
+APPL????
\ No newline at end of file
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/Layout View.icns
===================================================================
(Binary files differ)
Property changes on: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/Layout View.icns
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/lib/application.rb
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/lib/application.rb (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/lib/application.rb 2008-08-28 01:45:43 UTC (rev 498)
@@ -0,0 +1,166 @@
+require 'hotcocoa'
+
+class MyView < NSView
+
+ include HotCocoa::Behaviors
+
+ DefaultSize = [30, 30]
+
+ def self.create
+ alloc.initWithFrame([0, 0, *DefaultSize])
+ end
+
+ def initWithFrame(frame)
+ super
+ self.layout = {}
+ self
+ end
+
+ def reset_size
+ setFrameSize(DefaultSize)
+ end
+
+ attr_accessor :number
+
+ def drawRect(rect)
+ (color :red => 0.29, :green => 0.26, :blue => 0.55).set
+ NSFrameRect(rect)
+ (color :red => 0.51, :green => 0.45, :blue => 0.95).set
+ NSRectFill(NSInsetRect(rect, 1, 1))
+
+ @attributes ||= { NSFontAttributeName => NSFont.systemFontOfSize(10) }
+ str = @number.to_s
+ strsize = str.sizeWithAttributes @attributes
+ point = [
+ (rect.size.width / 2.0) - (strsize.width / 2.0),
+ (rect.size.height / 2.0) - (strsize.height / 2.0)
+ ]
+ @number.to_s.drawAtPoint point, withAttributes:@attributes
+ end
+
+end
+
+def create_slider_layout(label, &block)
+ layout_view :mode => :horizontal, :frame => [0, 0, 0, 24], :layout => {:expand => :width} do |view|
+ view << label(:text => label, :layout => {:align => :center})
+ s = slider :min => 0, :max => 50, :tic_marks => 20, :on_action => block, :layout => {:expand => :width, :align => :center}
+ s.setFrameSize([0, 24]) # TODO sizeToFit doesn't set the height for us
+ view << s
+ end
+end
+
+include HotCocoa
+
+application :name => "Layout View" do |app|
+
+ window :frame => [100, 100, 500, 500], :title => "Packing View Madness" do |win|
+ views = []
+
+ window :frame => [700, 100, 200, 500], :default_layout => {:start => false} do |pane|
+
+ pane.view << create_slider_layout('Spacing') { |x| win.view.spacing = x.to_i }
+
+ pane.view << create_slider_layout('Margin') { |x| win.view.margin = x.to_i }
+
+ pane.view << button(:title => "Vertical", :type => :switch, :state => :on) do |b|
+ b.on_action do |b|
+ views.each { |v| v.reset_size }
+ win.view.mode = b.on? ? :vertical : :horizontal
+ end
+ end
+
+ selected_view = nil
+ expand_b = nil
+ expand_h = nil
+ left_padding_s = right_padding_s = top_padding_s = bottom_padding_s = nil
+ other_p = nil
+ views_p = popup :items => ['No View'], :layout => {:expand => :width}
+ views_p.on_action do |p|
+ selected_view = views[p.items.selected_index]
+ options = selected_view.layout
+ expand_b.state = options.expand_width?
+ expand_h.state = options.expand_height?
+ left_padding_s.intValue = options.left_padding
+ right_padding_s.intValue = options.right_padding
+ top_padding_s.intValue = options.top_padding
+ bottom_padding_s.intValue = options.bottom_padding
+ other_p.items.selected = case options.align
+ when :left then 0
+ when :center then 1
+ when :right then 2
+ end
+ end
+
+ add_b = button :title => "Add view"
+ add_b.on_action do
+ view = MyView.create
+ views << view
+ view.number = views.size
+ win.view.addSubview view
+ views_p.items = views.map { |x| "View #{x.number}" }
+ selected_view = views[0]
+ end
+ pane.view << add_b
+ pane.view << views_p
+ expand_b = button :title => "Expand width", :type => :switch, :state => :off
+ expand_h = button :title => "Expand height", :type => :switch, :state => :off
+ expand_b.on_action do |b|
+ selected_view.reset_size
+ selected_view.layout.expand = if expand_b.on?
+ if expand_h.on?
+ [:width, :height]
+ else
+ :width
+ end
+ elsif expand_h.on?
+ :height
+ else
+ nil
+ end
+ end
+ expand_h.on_action do |b|
+ selected_view.reset_size
+ selected_view.layout.expand = if expand_b.on?
+ if expand_h.on?
+ [:width, :height]
+ else
+ :width
+ end
+ elsif expand_h.on?
+ :height
+ else
+ nil
+ end
+ end
+ pane.view << expand_b
+ pane.view << expand_h
+
+ v = create_slider_layout('Left') { |x| selected_view.layout.left_padding = x.to_i }
+ left_padding_s = v.subviews[1]
+ pane.view << v
+
+ v = create_slider_layout('Right') { |x| selected_view.layout.right_padding = x.to_i }
+ right_padding_s = v.subviews[1]
+ pane.view << v
+
+ v = create_slider_layout('Top') { |x| selected_view.layout.top_padding = x.to_i }
+ top_padding_s = v.subviews[1]
+ pane.view << v
+
+ v = create_slider_layout('Bottom') { |x| selected_view.layout.bottom_padding = x.to_i }
+ bottom_padding_s = v.subviews[1]
+ pane.view << v
+
+ pane.view << layout_view(:mode => :horizontal, :frame => [0, 0, 0, 24], :layout => {:expand => :width}) do |view|
+ view << label(:text => 'Align', :layout => {:align => :center})
+ view << popup(:items => ['Left/Bottom', 'Center', 'Right/Top'], :layout => {:expand => :width, :align => :center}) do |p|
+ p.on_action do |x|
+ selected_view.reset_size
+ selected_view.layout.align = [:left, :center, :right][p.items.selected_index-1]
+ end
+ other_p = p
+ end
+ end
+ end
+ end
+end
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/lib/menu.rb
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/lib/menu.rb (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/lib/menu.rb 2008-08-28 01:45:43 UTC (rev 498)
@@ -0,0 +1,32 @@
+module HotCocoa
+ def application_menu
+ menu do |main|
+ main.submenu :apple do |apple|
+ apple.item :about, :title => "About #{NSApp.name}"
+ apple.separator
+ apple.item :preferences, :key => ","
+ apple.separator
+ apple.submenu :services
+ apple.separator
+ apple.item :hide, :title => "Hide #{NSApp.name}", :key => "h"
+ apple.item :hide_others, :title => "Hide Others", :key => "h", :modifiers => [:command, :alt]
+ apple.item :show_all, :title => "Show All"
+ apple.separator
+ apple.item :quit, :title => "Quit #{NSApp.name}", :key => "q"
+ end
+ main.submenu :file do |file|
+ file.item :new, :key => "n"
+ file.item :open, :key => "o"
+ end
+ main.submenu :window do |win|
+ win.item :minimize, :key => "m"
+ win.item :zoom
+ win.separator
+ win.item :bring_all_to_front, :title => "Bring All to Front", :key => "o"
+ end
+ main.submenu :help do |help|
+ help.item :help, :title => "#{NSApp.name} Help"
+ end
+ end
+ end
+end
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/rb_main.rb
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/rb_main.rb (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Layout View.app/Contents/Resources/rb_main.rb 2008-08-28 01:45:43 UTC (rev 498)
@@ -0,0 +1,4 @@
+
+ $:.unshift NSBundle.mainBundle.resourcePath.fileSystemRepresentation
+ load 'lib/application.rb'
+
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Rakefile
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Rakefile (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/layout_view/Rakefile 2008-08-28 01:45:43 UTC (rev 498)
@@ -0,0 +1,18 @@
+task :default => [:run]
+
+task :build do
+ require 'hotcocoa/application_builder'
+ ApplicationBuilder.build :file => "config/build.yml"
+end
+
+task :run => [:build] do
+ require 'yaml'
+ app_name = YAML.load(File.read("config/build.yml"))[:name]
+ `open "#{app_name}.app"`
+end
+
+task :clean do
+ require 'yaml'
+ app_name = YAML.load(File.read("config/build.yml"))[:name]
+ `rm -rf "#{app_name}.app"`
+end
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/config/build.yml
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/layout_view/config/build.yml (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/layout_view/config/build.yml 2008-08-28 01:45:43 UTC (rev 498)
@@ -0,0 +1,6 @@
+name: Layout View
+load: lib/application.rb
+version: "1.0"
+icon: resources/HotCocoa.icns
+sources:
+ - lib/**/*.rb
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/lib/application.rb
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/layout_view/lib/application.rb (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/layout_view/lib/application.rb 2008-08-28 01:45:43 UTC (rev 498)
@@ -0,0 +1,166 @@
+require 'hotcocoa'
+
+class MyView < NSView
+
+ include HotCocoa::Behaviors
+
+ DefaultSize = [30, 30]
+
+ def self.create
+ alloc.initWithFrame([0, 0, *DefaultSize])
+ end
+
+ def initWithFrame(frame)
+ super
+ self.layout = {}
+ self
+ end
+
+ def reset_size
+ setFrameSize(DefaultSize)
+ end
+
+ attr_accessor :number
+
+ def drawRect(rect)
+ (color :red => 0.29, :green => 0.26, :blue => 0.55).set
+ NSFrameRect(rect)
+ (color :red => 0.51, :green => 0.45, :blue => 0.95).set
+ NSRectFill(NSInsetRect(rect, 1, 1))
+
+ @attributes ||= { NSFontAttributeName => NSFont.systemFontOfSize(10) }
+ str = @number.to_s
+ strsize = str.sizeWithAttributes @attributes
+ point = [
+ (rect.size.width / 2.0) - (strsize.width / 2.0),
+ (rect.size.height / 2.0) - (strsize.height / 2.0)
+ ]
+ @number.to_s.drawAtPoint point, withAttributes:@attributes
+ end
+
+end
+
+def create_slider_layout(label, &block)
+ layout_view :mode => :horizontal, :frame => [0, 0, 0, 24], :layout => {:expand => :width} do |view|
+ view << label(:text => label, :layout => {:align => :center})
+ s = slider :min => 0, :max => 50, :tic_marks => 20, :on_action => block, :layout => {:expand => :width, :align => :center}
+ s.setFrameSize([0, 24]) # TODO sizeToFit doesn't set the height for us
+ view << s
+ end
+end
+
+include HotCocoa
+
+application :name => "Layout View" do |app|
+
+ window :frame => [100, 100, 500, 500], :title => "Packing View Madness" do |win|
+ views = []
+
+ window :frame => [700, 100, 200, 500], :default_layout => {:start => false} do |pane|
+
+ pane.view << create_slider_layout('Spacing') { |x| win.view.spacing = x.to_i }
+
+ pane.view << create_slider_layout('Margin') { |x| win.view.margin = x.to_i }
+
+ pane.view << button(:title => "Vertical", :type => :switch, :state => :on) do |b|
+ b.on_action do |b|
+ views.each { |v| v.reset_size }
+ win.view.mode = b.on? ? :vertical : :horizontal
+ end
+ end
+
+ selected_view = nil
+ expand_b = nil
+ expand_h = nil
+ left_padding_s = right_padding_s = top_padding_s = bottom_padding_s = nil
+ other_p = nil
+ views_p = popup :items => ['No View'], :layout => {:expand => :width}
+ views_p.on_action do |p|
+ selected_view = views[p.items.selected_index]
+ options = selected_view.layout
+ expand_b.state = options.expand_width?
+ expand_h.state = options.expand_height?
+ left_padding_s.intValue = options.left_padding
+ right_padding_s.intValue = options.right_padding
+ top_padding_s.intValue = options.top_padding
+ bottom_padding_s.intValue = options.bottom_padding
+ other_p.items.selected = case options.align
+ when :left then 0
+ when :center then 1
+ when :right then 2
+ end
+ end
+
+ add_b = button :title => "Add view"
+ add_b.on_action do
+ view = MyView.create
+ views << view
+ view.number = views.size
+ win.view.addSubview view
+ views_p.items = views.map { |x| "View #{x.number}" }
+ selected_view = views[0]
+ end
+ pane.view << add_b
+ pane.view << views_p
+ expand_b = button :title => "Expand width", :type => :switch, :state => :off
+ expand_h = button :title => "Expand height", :type => :switch, :state => :off
+ expand_b.on_action do |b|
+ selected_view.reset_size
+ selected_view.layout.expand = if expand_b.on?
+ if expand_h.on?
+ [:width, :height]
+ else
+ :width
+ end
+ elsif expand_h.on?
+ :height
+ else
+ nil
+ end
+ end
+ expand_h.on_action do |b|
+ selected_view.reset_size
+ selected_view.layout.expand = if expand_b.on?
+ if expand_h.on?
+ [:width, :height]
+ else
+ :width
+ end
+ elsif expand_h.on?
+ :height
+ else
+ nil
+ end
+ end
+ pane.view << expand_b
+ pane.view << expand_h
+
+ v = create_slider_layout('Left') { |x| selected_view.layout.left_padding = x.to_i }
+ left_padding_s = v.subviews[1]
+ pane.view << v
+
+ v = create_slider_layout('Right') { |x| selected_view.layout.right_padding = x.to_i }
+ right_padding_s = v.subviews[1]
+ pane.view << v
+
+ v = create_slider_layout('Top') { |x| selected_view.layout.top_padding = x.to_i }
+ top_padding_s = v.subviews[1]
+ pane.view << v
+
+ v = create_slider_layout('Bottom') { |x| selected_view.layout.bottom_padding = x.to_i }
+ bottom_padding_s = v.subviews[1]
+ pane.view << v
+
+ pane.view << layout_view(:mode => :horizontal, :frame => [0, 0, 0, 24], :layout => {:expand => :width}) do |view|
+ view << label(:text => 'Align', :layout => {:align => :center})
+ view << popup(:items => ['Left/Bottom', 'Center', 'Right/Top'], :layout => {:expand => :width, :align => :center}) do |p|
+ p.on_action do |x|
+ selected_view.reset_size
+ selected_view.layout.align = [:left, :center, :right][p.items.selected_index-1]
+ end
+ other_p = p
+ end
+ end
+ end
+ end
+end
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/lib/menu.rb
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/layout_view/lib/menu.rb (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/layout_view/lib/menu.rb 2008-08-28 01:45:43 UTC (rev 498)
@@ -0,0 +1,32 @@
+module HotCocoa
+ def application_menu
+ menu do |main|
+ main.submenu :apple do |apple|
+ apple.item :about, :title => "About #{NSApp.name}"
+ apple.separator
+ apple.item :preferences, :key => ","
+ apple.separator
+ apple.submenu :services
+ apple.separator
+ apple.item :hide, :title => "Hide #{NSApp.name}", :key => "h"
+ apple.item :hide_others, :title => "Hide Others", :key => "h", :modifiers => [:command, :alt]
+ apple.item :show_all, :title => "Show All"
+ apple.separator
+ apple.item :quit, :title => "Quit #{NSApp.name}", :key => "q"
+ end
+ main.submenu :file do |file|
+ file.item :new, :key => "n"
+ file.item :open, :key => "o"
+ end
+ main.submenu :window do |win|
+ win.item :minimize, :key => "m"
+ win.item :zoom
+ win.separator
+ win.item :bring_all_to_front, :title => "Bring All to Front", :key => "o"
+ end
+ main.submenu :help do |help|
+ help.item :help, :title => "#{NSApp.name} Help"
+ end
+ end
+ end
+end
Added: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/resources/HotCocoa.icns
===================================================================
(Binary files differ)
Property changes on: MacRuby/trunk/sample-macruby/HotCocoa/layout_view/resources/HotCocoa.icns
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Deleted: MacRuby/trunk/sample-macruby/HotCocoa/layout_view.rb
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/layout_view.rb 2008-08-27 21:55:20 UTC (rev 497)
+++ MacRuby/trunk/sample-macruby/HotCocoa/layout_view.rb 2008-08-28 01:45:43 UTC (rev 498)
@@ -1,166 +0,0 @@
-require 'hotcocoa'
-
-class MyView < NSView
-
- include HotCocoa::Behaviors
-
- DefaultSize = [30, 30]
-
- def self.create
- alloc.initWithFrame([0, 0, *DefaultSize])
- end
-
- def initWithFrame(frame)
- super
- self.layout = {}
- self
- end
-
- def reset_size
- setFrameSize(DefaultSize)
- end
-
- attr_accessor :number
-
- def drawRect(rect)
- (color :red => 0.29, :green => 0.26, :blue => 0.55).set
- NSFrameRect(rect)
- (color :red => 0.51, :green => 0.45, :blue => 0.95).set
- NSRectFill(NSInsetRect(rect, 1, 1))
-
- @attributes ||= { NSFontAttributeName => NSFont.systemFontOfSize(10) }
- str = @number.to_s
- strsize = str.sizeWithAttributes @attributes
- point = [
- (rect.size.width / 2.0) - (strsize.width / 2.0),
- (rect.size.height / 2.0) - (strsize.height / 2.0)
- ]
- @number.to_s.drawAtPoint point, withAttributes:@attributes
- end
-
-end
-
-def create_slider_layout(label, &block)
- layout_view :mode => :horizontal, :frame => [0, 0, 0, 24], :layout => {:expand => :width} do |view|
- view << label(:text => label, :layout => {:align => :center})
- s = slider :min => 0, :max => 50, :tic_marks => 20, :on_action => block, :layout => {:expand => :width, :align => :center}
- s.setFrameSize([0, 24]) # TODO sizeToFit doesn't set the height for us
- view << s
- end
-end
-
-include HotCocoa
-
-application :name => "Layout View" do |app|
-
- window :frame => [100, 100, 500, 500], :title => "Packing View Madness" do |win|
- views = []
-
- window :frame => [700, 100, 200, 500], :default_layout => {:start => false} do |pane|
-
- pane.view << create_slider_layout('Spacing') { |x| win.view.spacing = x.to_i }
-
- pane.view << create_slider_layout('Margin') { |x| win.view.margin = x.to_i }
-
- pane.view << button(:title => "Vertical", :type => :switch, :state => :on) do |b|
- b.on_action do |b|
- views.each { |v| v.reset_size }
- win.view.mode = b.on? ? :vertical : :horizontal
- end
- end
-
- selected_view = nil
- expand_b = nil
- expand_h = nil
- left_padding_s = right_padding_s = top_padding_s = bottom_padding_s = nil
- other_p = nil
- views_p = popup :items => ['No View'], :layout => {:expand => :width}
- views_p.on_action do |p|
- selected_view = views[p.items.selected_index]
- options = selected_view.layout
- expand_b.state = options.expand_width?
- expand_h.state = options.expand_height?
- left_padding_s.intValue = options.left_padding
- right_padding_s.intValue = options.right_padding
- top_padding_s.intValue = options.top_padding
- bottom_padding_s.intValue = options.bottom_padding
- other_p.items.selected = case options.align
- when :left then 0
- when :center then 1
- when :right then 2
- end
- end
-
- add_b = button :title => "Add view"
- add_b.on_action do
- view = MyView.create
- views << view
- view.number = views.size
- win.view.addSubview view
- views_p.items = views.map { |x| "View #{x.number}" }
- selected_view = views[0]
- end
- pane.view << add_b
- pane.view << views_p
- expand_b = button :title => "Expand width", :type => :switch, :state => :off
- expand_h = button :title => "Expand height", :type => :switch, :state => :off
- expand_b.on_action do |b|
- selected_view.reset_size
- selected_view.layout.expand = if expand_b.on?
- if expand_h.on?
- [:width, :height]
- else
- :width
- end
- elsif expand_h.on?
- :height
- else
- nil
- end
- end
- expand_h.on_action do |b|
- selected_view.reset_size
- selected_view.layout.expand = if expand_b.on?
- if expand_h.on?
- [:width, :height]
- else
- :width
- end
- elsif expand_h.on?
- :height
- else
- nil
- end
- end
- pane.view << expand_b
- pane.view << expand_h
-
- v = create_slider_layout('Left') { |x| selected_view.layout.left_padding = x.to_i }
- left_padding_s = v.subviews[1]
- pane.view << v
-
- v = create_slider_layout('Right') { |x| selected_view.layout.right_padding = x.to_i }
- right_padding_s = v.subviews[1]
- pane.view << v
-
- v = create_slider_layout('Top') { |x| selected_view.layout.top_padding = x.to_i }
- top_padding_s = v.subviews[1]
- pane.view << v
-
- v = create_slider_layout('Bottom') { |x| selected_view.layout.bottom_padding = x.to_i }
- bottom_padding_s = v.subviews[1]
- pane.view << v
-
- pane.view << layout_view(:mode => :horizontal, :frame => [0, 0, 0, 24], :layout => {:expand => :width}) do |view|
- view << label(:text => 'Align', :layout => {:align => :center})
- view << popup(:items => ['Left/Bottom', 'Center', 'Right/Top'], :layout => {:expand => :width, :align => :center}) do |p|
- p.on_action do |x|
- selected_view.reset_size
- selected_view.layout.align = [:left, :center, :right][p.items.selected_index-1]
- end
- other_p = p
- end
- end
- end
- end
-end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080827/c66b373c/attachment-0001.html
More information about the macruby-changes
mailing list