Most of the work has been done in the Input class for Immediate input. I just have to code up a few more client functions for checking whether keys were just released etc., and then I'll be able to get down to working on my GUI code.
I want to design the interface in such a way that I can easilly add new ellements, such as buttons and ingame windows. At the moment the engine is working off a basic game state stack system, with the various screens being represented by a new game state. Its how I did Maul Ball and my last few graphical games. This game is going to require a better GUI interface so I may as well do it properly.
I'm think the best thing to do would have a base GUIParent class, which I will inherit from my game state interface and the GUIElement class. The GUIElement class would have children GUIElements and would form a basic tree structure. Each GUIElement would contain a pointer to the GUIParent class as well as their immediate GUIElement parent. This would allow me to filter down mouse clicks to the correct objects quickly as well as allowing each of the objects to make changes to the game state easilly.