<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -119,9 +119,9 @@ SC.runLoop = SC.Object.create({
     
   _flushInvokeQueue: function() {
     var queue = this._invokeQueue, hadContent = NO, len, idx, handler ;
-    if (queue &amp;&amp; queue.length &gt; 0) {
+    if (queue &amp;&amp; queue.targets &gt; 0) {
       this._invokeQueue = null; // reset queue.
-      hadContent = queue.targets&gt;0; // has targets?
+      hadContent = YES; // has targets!
       if (hadContent) queue.invokeMethods();
     }
     return hadContent ;</diff>
      <filename>application/run_loop.js</filename>
    </modified>
    <modified>
      <diff>@@ -190,7 +190,7 @@ SC.mixin(/** @scope SC */ {
     var len = (obj ? obj.length : null), type = SC.typeOf(obj);
     return !(SC.none(len) || 
       ((type === SC.T_FUNCTION) &amp;&amp; !(obj instanceof NodeList)) || 
-      (type === SC.T_STRING) || obj.setInterval) || obj.objectAt ;
+      (type === SC.T_STRING) || obj.setInterval) || (obj &amp;&amp; obj.objectAt) ;
   },
   
   /**</diff>
      <filename>core.js</filename>
    </modified>
    <modified>
      <diff>@@ -628,6 +628,7 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
   */
   _collection_isDirtyDidChange: function() {
     if (this.get('isVisibleInWindow') &amp;&amp; this.get('isDirty')) {
+      console.log('%@:_collection_isDirtyDidChange()'.fmt(this));
       this.invokeOnce(this._fullUpdateChildren);
     }  
   }.observes('isDirty', 'isVisibleInWindow'),
@@ -817,7 +818,8 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate,
     Overrides the default view implementation.  Calls layoutResize() first 
     to give you the chance to relayout your children.  The notifies children.
   */
-  viewDidResize: function() { 
+  viewDidResize: function() {
+    console.log('viewDidResize') ; 
     this.layoutResize();  
     return sc_super();
   }.observes('layout'),</diff>
      <filename>desktop.platform/views/collection.js</filename>
    </modified>
    <modified>
      <diff>@@ -64,7 +64,7 @@ SC.ListView = SC.CollectionView.extend(
     
     You can override this as you wish.
   */
-  exampleView: SC.ListItemView,
+  exampleView: SC.LabelView,
   
   /**
     The default layout for the list view simply fills the entire parentView.
@@ -170,11 +170,12 @@ SC.ListView = SC.CollectionView.extend(
     The default version of this property is set to YES unless you set a 
     delegate or a contentRowHeightKey.
   */
-  hasUniformRowHeights: function(key, value) {
-    if (value !== undefined) this._list_hasUniformRowHeights = value ;
-    value = this._list_hasUniformRowHeights;
-    return SC.none(value) ? !((this.delegate &amp;&amp; this.delegate.collectionViewHeightForRowAtContentIndex) || this.contentRowHeightKey) : value ;
-  }.property('delegate', 'contentRowHeightKey').cacheable(),
+  hasUniformRowHeights: YES,
+  // function(key, value) {
+  //     if (value !== undefined) this._list_hasUniformRowHeights = value ;
+  //     value = this._list_hasUniformRowHeights;
+  //     return SC.none(value) ? !((this.delegate &amp;&amp; this.delegate.collectionViewHeightForRowAtContentIndex) || this.contentRowHeightKey) : value ;
+  //   }.property('delegate', 'contentRowHeightKey').cacheable(),
 
   /**
     Calculates the offset for the row at the specified index.  Based on the 
@@ -327,7 +328,9 @@ SC.ListView = SC.CollectionView.extend(
   },
   
   insertionPointClass: SC.View.extend({
-    emptyElement: '&lt;div class=&quot;list-insertion-point&quot;&gt;&lt;span class=&quot;anchor&quot;&gt;&lt;/span&gt;&lt;/div&gt;'
+    emptyElement: '&lt;div&gt;&lt;span class=&quot;anchor&quot;&gt;&lt;/span&gt;&lt;/div&gt;',
+    styleClass: 'sc-list-insertion-point',
+    layout: SC.merge(SC.FULL_WIDTH, { top: 0, height: 5 })
   }),
 
   showInsertionPoint: function(itemView, dropOperation) {</diff>
      <filename>desktop.platform/views/list.js</filename>
    </modified>
    <modified>
      <diff>@@ -25,12 +25,30 @@ SC.SparseArray = function(length) {
   return this ;
 } ;
 
-SC.SparseArray.prototype = {
+SC.SparseArray.prototype = SC.merge(SC.Observable, SC.Enumerable, SC.Array, SC.DelegateSupport, {
+
+  /**
+    Use this method to update the content at a specified index.  This will 
+    note that the array content has changed without notifying the delegate
+    again of a change.
+    
+    @param {Number} index the index to alter
+    @param {Object} obj the object to insert
+    @returns {SC.SparseArray} reciever
+  */
+  provideContentAtIndex: function(index, obj) {
+    var content = this._sa_content ;
+    if (!content) content = this._sa_content = [] ;
+    content[index] = obj;
+    this.enumerableContentDidChange() ;
+    return this ;
+  },
+  
   
   /** @private */
     replace: function(idx, amt, objects) {
-      var content = this._content ;
-      if (!content) content = this._content = [] ;
+      var content = this._sa_content ;
+      if (!content) content = this._sa_content = [] ;
       content.replace(idx, amt, objects) ;
       this.invokeDelegateMethod(this.delegate, 'sparseArrayDidReplace', this, idx. amt, objects) ;
       this.enumerableContentDidChange() ;
@@ -39,33 +57,29 @@ SC.SparseArray.prototype = {
 
   /** @private */
     objectAt: function(idx) {
-      var content = this._content ;
-      if (!content) content = this._content = [] ;
-      var ret= content[idx] ;
+      var content = this._sa_content, ret ;
+      if (!content) content = this._sa_content = [] ;
+      ret= content[idx] ;
       if (ret === undefined) { 
-        // call method to load this object.
         this.invokeDelegateMethod(this.delegate, 'sparseArrayDidRequestIndex', this, idx) ;
       }
-      var ret= content[idx] ;
+      ret = content[idx];
       return ret ;
     },
 
     // removes content array
     flush: function() {
-      this_content = null ;
+      this._sa_content = null ;
       this.enumerableContentDidChange() ;
-      // call sparseArrayDidFlush(this) ;
+      this.invokeDelegateMethod(this.delegate, 'sparseArrayDidFlush', this);
       return this ;
     },
     
     /** TODO: explain */
     delegate: null,
     
-    _content: null
+    _sa_content: null
     
-    
-} ;
-
-SC.mixin(SC.SparseArray.prototype, SC.Observable, SC.Enumerable, SC.Array, SC.Delegate) ;
+}) ;
 
 SC.SparseArray.create = function(len) { return new SC.SparseArray(len); };
\ No newline at end of file</diff>
      <filename>system/sparse_array.js</filename>
    </modified>
    <modified>
      <diff>@@ -187,7 +187,7 @@ SC.Control = {
     if (content === undefined) content = this.get('content');
     
     // get actual content key
-    contentKey = this.get(contentKey);
+    contentKey = this[contentKey] ? this.get(contentKey) : this.getDelegateProperty(this.displayDelegate, contentKey);
     if (contentKey &amp;&amp; (all || key === contentKey)) {
       var v = (content) ? (content.get ? content.get(contentKey) : content[contentKey]) : null ;
       this.set(prop, v);</diff>
      <filename>views/mixins/control.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>5ce30d175448030a4486f0891a0b715ed29b674a</id>
    </parent>
  </parents>
  <author>
    <name>Charles Jolley</name>
    <email>charles@sproutit.com</email>
  </author>
  <url>http://github.com/sproutit/sproutcore/commit/3b75cbff93f4c88a0380004b8279df8ad1e52cb2</url>
  <id>3b75cbff93f4c88a0380004b8279df8ad1e52cb2</id>
  <committed-date>2008-12-22T10:13:31-08:00</committed-date>
  <authored-date>2008-12-22T10:13:31-08:00</authored-date>
  <message>latest testing for collection views</message>
  <tree>093569419f8998486d1f0361952ef4943508a877</tree>
  <committer>
    <name>Charles Jolley</name>
    <email>charles@sproutit.com</email>
  </committer>
</commit>
