TODO for next few days:
 - Layout manager that saves/restores user layout
   - Keeps position, size ands possibly docking information for every window
     (Main window probably needs to be handled specially)
   - At startup all windows register with it
   - Calling restore() will place all windows in proper positions
   - It will also set up hooks to those windows so it gets updates when they get moved/sized/docked
 - Project create/Project open window
   - Shows at the start of the editor
   - Also has hooks directly from File menu (Create project, Open project)
 - EditorPrefs class
   - Stores all of editor preferences, including layout information
   - Also keeps a list of all known projects
 - Menu bar:
   - File->Create project, File->Open project
   - Windows menu with a list of all windows
     - List gets populated easily so people can write plugin windows
	  - Plugin windows should possibly also be able to assign themselves to other Menu item than Windows
 - Docking system
   - All open windows can be docked/unocked
   - Their layout data gets saved
   - The way I handle editor windows at the moment is pretty weird with alot of custom handling for resize/move
     - Attempt to get rid of that or at least dont use it until I have window look more fleshed out
	 - Look at QSizeGrip for resizing
	 - QStackWidget (or QStackLayout) for stacking and tabbed windows
 - Make sure entire interface is skinnable
 - Create a generic "Prefs" system that supports arrays and loading/saving to ini files
   - Using EditorPrefs is too cumbersome and it won't allow extensions to use it anyway


Dock overlay widget colors need to be customizable

Unique IDs for windows. Currently I don't guarantee IDs will be the same if user adds a window before I restore them from file.

When restoring windows what happens why I try to restore an unloaded plugin?
 - A NullWindow?

 After I undock a window it needs to return itself to the default size
  - Allow widgets to specify default size


  WindowDockManager
 Checks if we're mousing over any dock widgets
 If not it checks if we're mousing over DynamicTabBar (in any open window)
   If we are it gets the polygons from DynamicTabBar and renders them
   Also gets the current polygon and highlights it
   Upon mouse release it find exactly at what index the mouse was released and adds the widget to the tab bar

   getWindowAtPosition doesn't consider if two or more windows are overlapping. It should return the front most
Dragging window around occludes possible dock points. I need to make the window less visible while dragging.