[macruby-changes] [361] MacRuby/trunk/lib/hotcocoa

source_changes at macosforge.org source_changes at macosforge.org
Thu Jul 10 13:54:28 PDT 2008


Revision: 361
          http://trac.macosforge.org/projects/ruby/changeset/361
Author:   rich at infoether.com
Date:     2008-07-10 13:54:28 -0700 (Thu, 10 Jul 2008)
Log Message:
-----------
switch to superview and stop tracking the layout_views

Modified Paths:
--------------
    MacRuby/trunk/lib/hotcocoa/layout_view.rb
    MacRuby/trunk/lib/hotcocoa/mappings/view.rb

Modified: MacRuby/trunk/lib/hotcocoa/layout_view.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/layout_view.rb	2008-07-10 19:39:10 UTC (rev 360)
+++ MacRuby/trunk/lib/hotcocoa/layout_view.rb	2008-07-10 20:54:28 UTC (rev 361)
@@ -2,7 +2,8 @@
 
 class LayoutOptions
   
-  attr_accessor :view, :defaults_view
+  attr_accessor :defaults_view
+  attr_reader   :view
   
   # options can be
   #
@@ -37,30 +38,30 @@
   #        Will be aligned to the tail (end) of the packing area.
   #      :fill
   #        Will be filled to the maximum size.
-  def initialize(options={})
-    @start = options[:start]
-    @expand = options[:expand]
-    @padding = options[:padding]
+  def initialize(view, options={})
+    @view           = view
+    @start          = options[:start]
+    @expand         = options[:expand]
+    @padding        = options[:padding]
     @left_padding   = options[:left_padding]    || @padding
     @right_padding  = options[:right_padding]   || @padding
     @top_padding    = options[:top_padding]     || @padding
     @bottom_padding = options[:bottom_padding]  || @padding
-    @other = options[:other]
-    @view = options[:view]
-    update_view!
-    @defaults_view = options[:view]
+    @other          = options[:other]
+    update_layout_views!
+    @defaults_view  = options[:defaults_view]
   end
 
   def start=(value)
     return if value == @start
     @start = value
-    update_view!
+    update_layout_views!
   end
   
   def start?
     return @start unless @start.nil?
     if in_layout_view?
-      @view.default_layout.start?
+      @view.superview.default_layout.start?
     else
       true
     end
@@ -69,13 +70,13 @@
   def expand=(value)
     return if value == @expand
     @expand = value
-    update_view!
+    update_layout_views!
   end
   
   def expand?
     return @expand unless @expand.nil?
     if in_layout_view?
-      @view.default_layout.expand?
+      @view.superview.default_layout.expand?
     else
       false
     end
@@ -85,13 +86,13 @@
     return if value == @left_padding
     @left_padding = value
     @padding = nil
-    update_view!
+    update_layout_views!
   end
   
   def left_padding
     return @left_padding unless @left_padding.nil?
     if in_layout_view?
-      @view.default_layout.left_padding
+      @view.superview.default_layout.left_padding
     else
       @padding || 0.0
     end
@@ -101,13 +102,13 @@
     return if value == @right_padding
     @right_padding = value
     @padding = nil
-    update_view!
+    update_layout_views!
   end
   
   def right_padding
     return @right_padding unless @right_padding.nil?
     if in_layout_view?
-      @view.default_layout.right_padding
+      @view.superview.default_layout.right_padding
     else
       @padding || 0.0
     end
@@ -117,13 +118,13 @@
     return if value == @top_padding
     @top_padding = value
     @padding = nil
-    update_view!
+    update_layout_views!
   end
 
   def top_padding
     return @top_padding unless @top_padding.nil?
     if in_layout_view?
-      @view.default_layout.top_padding
+      @view.superview.default_layout.top_padding
     else
       @padding || 0.0
     end
@@ -133,13 +134,13 @@
     return if value == @bottom_padding
     @bottom_padding = value
     @padding = nil
-    update_view!
+    update_layout_views!
   end
 
   def bottom_padding
     return @bottom_padding unless @bottom_padding.nil?
     if in_layout_view?
-      @view.default_layout.bottom_padding
+      @view.superview.default_layout.bottom_padding
     else
       @padding || 0.0
     end
@@ -148,7 +149,7 @@
   def other
     return @other unless @other.nil?
     if in_layout_view?
-      @view.default_layout.other
+      @view.superview.default_layout.other
     else
       :align_head
     end
@@ -157,14 +158,14 @@
   def other=(value)
     return if value == @other
     @other = value
-    update_view!
+    update_layout_views!
   end
   
   def padding=(value)
     return if value == @padding
     @right_padding = @left_padding = @top_padding = @bottom_padding = value
     @padding = value
-    update_view!
+    update_layout_views!
   end
   
   def padding
@@ -178,11 +179,11 @@
   private
   
     def in_layout_view?
-      @view && @view.kind_of?(LayoutView)
+      @view && @view.superview.kind_of?(LayoutView)
     end
 
-    def update_view!
-      @view.views_updated! if in_layout_view?
+    def update_layout_views!
+      @view.superview.views_updated! if in_layout_view?
       @defaults_view.views_updated! if @defaults_view
     end
     
@@ -195,7 +196,6 @@
     @mode = :vertical
     @spacing = 10.0
     @margin = 10.0
-    @layout_views = []
     self
   end
 
@@ -219,12 +219,12 @@
   
   def default_layout=(options)
     options[:defaults_view] = self
-    @default_layout = LayoutOptions.new(options)
+    @default_layout = LayoutOptions.new(nil, options)
     relayout!
   end
   
   def default_layout
-    @default_layout ||= LayoutOptions.new(:defaults_view => self)
+    @default_layout ||= LayoutOptions.new(nil, :defaults_view => self)
   end
 
   def spacing
@@ -250,17 +250,14 @@
   end
   
   def <<(view)
-    if subviews.include?(view)
-      raise ArgumentError, "view #{view} already in this layout view"
-    end
     addSubview(view)
-    if view.respond_to?(:layout) && !view.layout.nil?
-      view.layout.view = self
-      @layout_views << view
-    end
-    relayout!
   end
   
+  def addSubview(view)
+    super
+    relayout! if view.respond_to?(:layout)
+  end
+  
   def views_updated!
     relayout!
   end
@@ -270,13 +267,12 @@
       raise ArgumentError, "view #{view} not packed"
     end
     view.removeFromSuperview
-    @layout_views.delete(view)
+    relayout!
   end
 
   def remove_all_views
-    @layout_views.each {|view| view.layout.view = nil}
     subviews.each { |view| view.removeFromSuperview }
-    @layout_views.clear
+    relayout!
   end
 
   if $DEBUG
@@ -307,7 +303,8 @@
 
     expandable_size = end_dimension
     expandable_views = 0
-    @layout_views.each do |view|
+    subviews.each do |view|
+      next if !view.respond_to?(:layout) || view.layout.nil?
       if view.layout.expand?
         expandable_views += 1
       else
@@ -317,7 +314,8 @@
     end
     expandable_size /= expandable_views
 
-    @layout_views.each do |view|
+    subviews.each do |view|
+      next if !view.respond_to?(:layout) || view.layout.nil?
       options = view.layout
       subview_size = view.frameSize
       view_frame = NSMakeRect(0, 0, *subview_size)

Modified: MacRuby/trunk/lib/hotcocoa/mappings/view.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/mappings/view.rb	2008-07-10 19:39:10 UTC (rev 360)
+++ MacRuby/trunk/lib/hotcocoa/mappings/view.rb	2008-07-10 20:54:28 UTC (rev 361)
@@ -23,17 +23,20 @@
       setAutoresizingMask(value)
     end
     
+    def <<(view)
+      addSubview(view)
+    end
+    
     def layout=(options)
-      if @layout && @layout.view
+      if @layout
         if options.nil?
-          @layout.view.remove_view(self)
+          superview.views_updated! if superview.kind_of?(LayoutView)
           @layout = nil
         else
-          options[:view] = @layout.view
-          @layout = LayoutOptions.new(options)
+          @layout = LayoutOptions.new(self, options)
         end
       else
-        @layout = LayoutOptions.new(options)
+        @layout = LayoutOptions.new(self, options)
       end
     end
     
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080710/1ba878b4/attachment-0001.html 


More information about the macruby-changes mailing list