Wow. Regular journal updates at the moment. Nice to feel motivated again actually.
The tool panel on the right-hand side of the application always contains a vertical stack of controls and I wanted to be able to show/hide them easily so I've just taken some inspiration from Qt's layout system and created a fairly simple VerticalLayout class. I just add the controls to this layout when I construct the panel, just giving them a starting Y value of zero.
When I call the layout's Update() method, it runs through and arranges the controls vertically. There is also an AddSpace(int) method with a default height.
The layout can also show and hide controls and spaces so it is pretty trivial now to make controls appear and disappear with the layout rearranging the other controls nicely.
So, for example, in the screenshot above, the Create Face and Reverse Vertex Order buttons now appear and disappear on a contextual basis. I prefer this to disabled buttons and I don't have an easy way to draw my custom buttons in a disabled state anyway so this solves two problems really.
Even if you never plan to use Qt, I'd seriously recommend taking a look at the layout system it uses. If I'd been writing this application from scratch, or if I ever start a new Win32 application again, the very first thing I'll do is implement a recursive layout system. For such a simple concept, it is quite remarkable how it takes away all the pain of GUI design without a form designer. It probably isn't just Qt that has this, but it's the first place I've used it so extensively.
I've also implemented a Snap Together command in the new Vertices menu that snaps groups of vertices (you guessed it) together to the average centre point of the selection. I've a few more vertex actions to implement (snap to cursor, welding, unwelding etc) but nothing very exciting.