Removed ValuePlug::Computation::resultWritten.

It dates back to a time when the results of computations were allowed to be NULL - since they are now guaranteed to be non-NULL we can just test m_resultValue to see if it has been written.
Fixed threading issue in ValuePlug caching code.

We were calling cached() and then calling get(), but in the moments in between, another thread could have removed the item we wanted from the cache. The new test cases would either throw exceptions from the nullGetter() or they would hang - now they don't.
Reimplemented GafferUI.Metadata in C++.
Added node description to NodeGadget tooltips.

Fixes #157. That issue does discuss showing object counts and other things, of which I'm quite skeptical - I think it'll be too expensive. No doubt there is additional information which could go be displayed though, so the tooltip will also show a "summary" Metadata item if it has been registered - this will allow individual node types to add useful information by registering a dynamic Metadata item.
Fixed bug in Widget.mousePosition() with GLWidget overlays.

Qt's mapFromGlobal() method doesn't do the right thing when the widget is in a GraphicsView, as it is in a GLWidget overlay. We've already dealt with that issue in Widget.bound(), so rejigging the relativeTo behaviour in terms of that fixes things.
Fixed drag/drop offset in GLWidget overlays.

The reported mouse position was being offset because we were relying on Qt's mapFromGlobal() method which doesn't work properly for widgets inside QGraphicsScenes. This affected the virtual sliders for image viewer exposure/gamma widgets.
Merge pull request #689 from johnhaddon/valuePlug

Cache threading fix
Merge pull request #692 from johnhaddon/overlayDragFix

Overlay mouse position fixes
Added GafferUI.SpacerGadget class.

This just claims some space and doesn't render anything into it - useful for putting blank space into layouts.
Refactored StandardNodeGadget.

It now uses the new Spacer class to get the size behaviour it wants, rather than lots of funky logic in bound() and doRender(). It also always has containers for nodules on all sides, rather than just at the top/bottom or left/right - current nodule location is still dictated by the orientation parameter as before.
Added "nodeGadget:nodulePosition" Metadata.

This allows nodules to be placed arbitrarily on the left/right/bottom or top. Initially only the ShaderAssignment node makes use of this, placing the shader nodule on the left.

Fixes #82.
Updated NodeGadget tooltip to show node type rather than name.

The name is already visible in the NodeGraph anyway.
Added "includeRoot" plug to GafferScene::SubTree.

This means that when choosing /path/to/theNewRoot as the root, the subtree will be output under /theNewRoot rather than /. Previously we were performing an Isolate followed by a Subtree to achieve the same effect, so this is decent improvement in terms of convenience.

Fixes #565.
Fixed GafferScene.ScenePath.isValid().

The previous implementation attempted to call ScenePlug.bound() for the path and returned False if there was an Exception, but this wasn't a good approach in several cases. The problem was that many nodes don't do any sanity checking on the path during computation for the sake of speed. The Group node for instance doesn't check that the first element in the path is actually the name of the group - it just makes decisions based on the length of the path. Since efficiency is of major concern to us, the solution isn't to bog all the node implementations down in lots of unecessary input validation.

Instead, ScenePath.isValid() now traverses up the path from the root, ensuring that the next required path element is present in the child names at each point. This definition of validity doesn't affect node performance and is robust in all cases.

The most visible effect of this fix is that when a path chooser is opened for an invalid path, the path is automatically truncated until it is valid - this reduces confusion arising from renaming the hiearchy and then browsing for a previously set path.

Fixes #64.
Merge pull request #693 from johnhaddon/sidePlugs

ShaderAssignment shader plug on left hand side
Merge pull request #694 from johnhaddon/subtreeRoot

Added "includeRoot" plug to GafferScene::SubTree.
Merge pull request #695 from johnhaddon/scenePathIsValid

Fixed GafferScene.ScenePath.isValid().
Fixed copy/paste bug with unselected PathFilter input.

When the copy is taken, the output of the PathFilter is calculated to provide a static value for the filter input on the node being copied. Because the usual ScriptNode context doesn't contain a scene:path entry, this was erroring. We now ignore missing scene:path entries, and just return NoMatch instead.
Merge pull request #697 from johnhaddon/pathFilterCopyPaste

Fixed copy/paste bug with unselected PathFilter input.
Updated OSLRenderer for OSL version 1.4.

Backwards compatibility with 1.3 is maintained. Also updated the default build options to use 1.4.