So I tweaked my log data load code a bit more today. Nothing serious, I just noticed a few things that needed some cleaning up. My big project today was laying the groundwork for Katana's GUI system. I've never done a GUI before, but the general concepts are easy enough. I already have my objects:
- Static Text
- Input Text
- Selectable Text
And by using them, I shall create:
- Scroll Bar
- List Box
- Dropdown List
- Radio Buttons
- Check Box
- Input Textbox
Of course, these are all based off a CWidget class (of course) with all the common widget properties.
In addition, the UI manager will be able to display dialog boxes that can:
- Display any sized message, and sizes to fit the message
- Display OK and/or Cancel buttons
- Modal, which means it can take focus away from the rest of the UI until it's closed
- Static, which means there are no buttons (automatically modal)
- Timeout, which lets you display a static message box for a certain amount of seconds
The way the UI will work is a widget will be composed of objects. The object callbacks will route to the widget, and the widget will have its own callback that programs can use.
So let's take a Scroll Bar, for example. It'll be made up of Button and Image objects. When a user clicks on a scroll button, the callback is routed to the Scroll Bar. The Scroll Bar then updates itself, and calls the user function, passing along its new value. A simple interface. The Button and Image objects render themselves, all the Scroll Bar object has to do is update their positions on screen to make them act like a scroll bar.
So like I said, I have the groundwork laid out and compiled. I got my base widget header, my scrollbar header, and my UI manager header, plus associated files (enums, structs, etc). Sat I'll actually start implementing stuff, and hopefully I'll be able to test the GUI with a scrollbar scrolling some text by the end of the day. Prob won't be until Sun tho, since I have a busy weekend. But that's my goal.