
Test new ScriptObject* system

When I change an object in InspectableObject field I probably need to rebuild entire GUI hierarchy for that object. Right now I'm not.

-----------------------------------------------
FINE GRAINED TASKS

- Add GUIUtility and a way how to calculate GUILayout height for use in inspectors

- Determine how will InspectorFields update child GUI elements. i.e. when number of elements in an array changes.

- Ensure all C++ editor fields have:
 - onValueChanged
 - setValue/getValue
 - undo/redo functionality

- Ensure that focus lost gets sent even when element gets destroyed. Otherwise UndoRedo buffer will fail to be properly cleared.

- Extend text field so it can be multi-line
- Add label to foldout
- Extend GameObject field so it can only accept a certain type
- Add ResourceField to C++

- Port to C#:
 - IntField
 - FloatField
 - ColorField
 - ToggleField
 - TextField
 - Vector2Field
 - Vector3Field
 - Vector4Field
 - GameObjectField
 - ResourceField

-----------------------------------------------
LESS IMPORTANT

A way to close a window & destroy a GUI panel!
 - Will likely need to refactor ScriptEditorWindow as currently it performs initialization
   in constructor and destroy in destructor, but open/close will be called within its lifetime
 - Also a way to get notified if the window gets closed from C++
 - Once closed the referenced GUIPanels should no longer work (set "destroyed" flag?)
 - What about calling Destroy on a GUIPanel?
   - It should notify owning EditorWindow

Ensure that setting depth for GUIArea works properly. It's not properly implemented yet.

UndoRedo should work on URI type basis where it remembers object ID, and path across its fields to the field that was modified
 - This way it wont keep an unnecessary reference to object
 - SerializableField should probably be the type responsible for handling the URI
 - Will I need two different URI types for resources and scene objects?
   - Probably, resources don't need hierarchies, but I think I should ignore resources for now as I'm not sure they will be using Inspectable system
 - When trying to undo/redo and object id cannot be found, it just skips it
 - When recompiling clear the undo/redo queue

Things to think about/do:
 - Add EditorFields to C#
 - Inspectable fields need TAB support
  - Modify C++ GUIElement so I can do setNextTabElement(GUIElement*)
 - Inspectable fields need Undo/Redo support. Consider how to best implement it
  - C++ Undo/Redo system needs nested contexts
  - C++ Ensure that Undo/Redo works on per-field basis (undoing items within a field)
  - Add C# UndoRedo
 - Modify C++ Editor fields so that calling setValue doesn't update the visual value until focus is lost
  - When user is currently writing in an input box I don't want refresh to overwrite that value.
 - Expand/Collapse needs to work for both Components and their sub-objects (Structs, Arrays, etc.)
 - How do I refresh currently visible inspector fields.
   - Also how will this be done with custom inspectors, when I might not use InspectableObject
 - Multi-rank arrays aren't properly supported in InspectableObject
 - Dictionaries aren't properly supported in InspectableObject
 - Need a way to add entries to arrays/lists/dictionaries (possibly also clone and delete entries) from inspector
 ----------------------

 Non-inspector:

  - Deleting first entry in input field moves the cursor incorrectly
  - Test if parsing int/float value from int/float field actually works
  - ProfilerOverlay elements are constantly dirty? even though I'm not calling update

Refactor BuiltinMaterialFactory to BuiltinEngineResources

Cursor
 - A way to save/load a set of cursors

Get rid of the CamelotFramework namespace
 - I shouldn't need to prefix each variable with 
 - Rename files/variables/macros starting with Cm
 - Rename projects starting with Camelot
 - Search for any remaining uses of "Camelot" and remove them

Undocking a window wont remove the tabbed title bar
While dragging an undocked window, dropping it over the main window (not over dock overlays) will not restore it

 - GameObjectField
   - When dragging over GameObjectField cursor needs to change depending whether drop will be accepted or not
   - How will I limit it to just certain component types?

Make a common class for ScriptGUIElement as they all share:
 - Destroy(), DestroyInstance(), SetParent(), SetVisible() methods, and potentially others

Add InsertElement to GUILayout

 Boost any replacement: http://www.codeproject.com/Articles/11250/High-Performance-Dynamic-Typing-in-C-using-a-Repla
  - Also POCO has any class