Remove blank slate view only when required.
Ensures the enclosing view is not scrollable when showing blank slate.

This turns off the scroller elasticity before showing the blank slate view. It restores
the original value whenever the blank slate is removed.
Refactor cellSize to itemSize.

Aligns naming convention with the name of the corresponding property.
Leverage the power of ObjC.

Instead of explicitly declaring ivars for properties, lets just implicitly declare them through synthesis of the property.
Code clean up.

Standardize the way that properties are declared.
Code clean up.

Comply with style guide.
Use carbon key codes instead of hard coded ones.
Use a simple built-in solution to synchronize animations.

Use AppKit's native -[NSAnimationContext runAnimationGroup:completionHandler:] to be able
to do any clean up after the animation is complete.
Don't show selection rect when blank slate is visible.
Fixes #121. Explicitly set action for 'contents' event.

For some reason CATextLayer does not respect [CATransaction disableActions] flag. So instead of
fussing with it, lets explicitly tell CoreAnimation that there is no (null) action for the
'contents' event.
Keep track of the number of rows.

If there is a difference between the cached number of rows and the
newly calculated number of rows update the control's content size.
Implement more reliable way to suppress clipview updates.

Whenever any aspect of the control is modified, it will try to update the clipview. Previously
we tried blocking the update by using a static variable. This depends on a reference count. Once
the reference count is zero, then we can stop suppressing the updates.
Prevent possible assertion.

Create a non mutable copy of the supplied cells, this guarantees us
that the cells won't change during the enumeration.
Add and remove the noItemsView on demand.

We no longer have to wait for a reloadData to add and remove this view.
Updates the control's scrollers and content noteNumberOfCells changed is encountered.

This method allows us to dynamically load the contents of the grid without having to
reload the entire grid.
Fixes #120. Let views know that some of the data has changed.

Instead of informing the grids to reload all of their data, just let them know that the
number of rows / items may have changed.  CoverFlow view is limited, we have to reload
the entire view.
Easier way to calculate the selection box.

Retrieve the min of the initial and current points, get the max of the two, and
build a rectangle that covers those two points. The min points are restricted by
the minimum boundary {0,1} and the max points are restricted by the maximum
boundary {CGGetMaxX(bounds), CGGetMaxY(bounds)}.  The origin of the selection box
is the min points while the size is max points subtracted by the min points.
Rely on NSView for converting the flippedness of a rect.

Eliminate a function that is already performed by AppKit.
Refactor OE_layerForPoint to something more descriptive.

OE_layerForPoint: is now OE_girdLayerForPoint:.
Refactor OE_gridLayerForPoint: leverage CALayer's hitLayer.

Use built-in -hitLayer: to determine the hit layer of the point. Return the layer if it is a valid OEGridLayer.