GUI programming is much less fun that I expected. Code::Blocks has a presumably nice wx layout widget thing (wxSmith) which I probably should have set my project up to use (and I might still, because this has been a drag, and there's a lot of editor pieces left to write). Instead I'm coding everything by hand. I've finally started to get the hang of Sizers, which are great, as long as you're trying to make your window the minimum size it can be. Of course, some windows should be the maximum size that fits in their parent window, and I haven't quite figured out the best way to approach that yet. Fortunately, that's a fairly minor issue, but writing just this basic functionality into the editor has taken much longer than I'd hoped.
I never was much of a C++ dev. I was a servicable C programmer (Computer Engineering classes don't get much higher level than C, you know), but certainly no rock star. And I'm using C++11 concepts (especially std::unique_ptr<>, which is pretty great), and when I learned C++, that was called "C++0x" and nobody supported any of it. As a result, there's been kind of a learning curve. That's a major factor in how slowly my code has been coming together. I'm also largely ignorant on a lot of key programming tools and concepts, and I'm not entirely sure how to remedy that ignorance. Notably, testing (which I gripe about a little more below) and actually using the debugger. I only barely understand the debugger and can't do much more other than add watch variables and breakpoints. So learning to recognize when I'm doing things right and when I'm doing things wrong has been part of this process. I didn't even know what an Initialization List was before this project began, and those are amazing language features. It alone solves a bunch of the things that I've always wondered how to properly do.
I'm still trying to figure out how to write unit tests, so I, uh, don't really have any tests in the code now. Partly this is because I don't understand how to write unit tests for GUI code at all, but mostly this is because I haven't spent the time to sit down with some proper unit test documentation explaining how to approach writing various kinds of unit tests.
Don't get my griping wrong though -- I'm having a lot of fun writing and debugging this software. It's more exciting than most things that I've spent time on lately. I've barely even played any games in the last few weeks because I'd rather be working on my own; which is a great sign, as far as I'm concerned. I love doing what I'm doing, even the grindy parts where I spend two hours debugging what turns out to be a fairly minor mistake on my part. At the point of this writing, I've got my editing grid, the ability to create tile sets, and the ability to add tiles into those tilesets, complete with controls that represent the tiles in a "palette" window. My goal for this weekend is to allow a user to select a tile and place it on the tile map. Maybe I'll even get removing tiles from tilesets or saving tilesets implemented. It's an exciting time to be alive!