Update

posted in Beals Software
Published April 24, 2006
Advertisement
Ethereal Darkness Interactive UpdateI didn't get squat done on this today. I've got a quite complex system done up for the script editor, and I dislike it very much. So, I'm probably going to spend the next 4 and a half hours designing a better system. The system needs to be modifyable(sp?) in case a function gets changed, added, or removed. I've set a deadline of Wednesday for this, so that I can started on the Audio system. This is going to take quite a while, so once I start the audio system, all other projects will probably stop (not fully, since I'll work on them when I get frustrated with the Audio system.)


Dragonfire Games UpdateI'm designing each widgets functionality out on paper before I start coding, which is helping me spot a lot of things I wouldn't have thought of. That is all.


RantYea, so since I seem to rant an awful lot, I decided to add another section for it. I'm adding it here so that the people who don't want to read it, don't have to. So, it probably won't get read at all.

My internet went out again today =/. I didn't get squat done either. Evidentally now that I don't have time to do anything, my parents decided that I need to more stuff. Its not that I mind doing things for them, its just that back when I had all kinds of time, they rarely even called me downstairs. Now I can't go 10 minutes without hearing someone yelling my name. And of course they can't do anything by themselves. Seriously, how am I going to "help" them feed the chicks? You unscrew the jar, fill the jar, screw the cap back on and its done. I'm pretty sure thats not a two person job. It seems they can't do anything by themselves. This is the reason I stay up until 6 and sleep until noon, I get 8 hours by myself [grin].
Previous Entry Update
Next Entry OMFG update
0 likes 4 comments

Comments

Mushu
That is perhaps the best-formatted post I have ever seen. Ever.

I think I'll start using that layout from now on.
April 24, 2006 12:41 AM
Programmer16
Thank you very much [grin].

Edit: Make sure you put the < hr > tag and the text on the same line, or you'll get big chunks of space in between:

< hr >< center >[ b ]Title[ /b ]< /center >< hr >Paragraph goes here.
April 24, 2006 12:53 AM
Trapper Zoid
That's pretty similar to the layout I use in my header files, except I left align the heading texts.

Maybe I should start using a similar layout in my journal posts as well!
April 24, 2006 01:11 AM
Programmer16
I figured I'd post it here instead of starting a new entry. I just did up some concepts on the user interface since I can't figure out how to do this fucking script editor =/. I'll talk to Raymond about it after he gets home from work.

Anyway, here's what most of the widgets on the list will look like:

Buttons


Choice Dialog


Counter


Listbox


Listview


Progress Bar


Tally Counter


TextBox


Listbox will hold only text items, whereas the Listview will hold anything based off of the Renderable class. Progressbars will be used throughout games (for healthbars and such). The Tally counter is for stuff like point allocation (i.e. in Baldur's Gate when you're choosing weapon proficiencies.) The choice dialog will consist of a listbox and 3 buttons. The buttons are optional.

Each widget is based off of a base widget class:

// basic OnMESSAGE methods
OnCreate
OnDestroy
OnRender
OnMove
OnResize
OnActivate
OnLeftClick
OnRightClick
OnMiddleClick
OnLeftRelease
OnRightRelease
OnMiddleRelease
OnMouseMove
OnMouseWheel

// OnDATAChange methods
OnTextChange
OnVisibilityChange
OnSelectionChange
OnStateChange


There are other things in the Widget class, but I haven't got all of that figured out.

The system includes a class called the Group. Its derived from widget and has 2 different forms: GroupBox, and Panel. GroupBox has graphical display qualities (like a Windows GroupBox). A panel on the other hand does not. The default settings for a Group is the panel setup. The system is pretty dependant on the user using the Group class.

Here's an example

// All pseudocode
dft::GuiManager g_Gui;

dft::RadioButton* pTempRadio = new RadioButton;
pTempRadio->Create(&g_Gui);

pTempRadio = new RadioButton;
pTempRadio->Create(&g_Gui);

pTempRadio = new RadioButton;
pTempRadio->Create(&g_Gui);

pTempRadio = new RadioButton;
pTempRadio->Create(&g_Gui);

pTempRadio = new RadioButton;
pTempRadio->Create(&g_Gui);










With this code you have no idea which radio belongs in which group.


dft::GuiManager g_Gui;

dft::Group* pGroup = new Group(GRP_PANEL);
dft::RadioButton pRadio = new dft::RadioButton;
pRadio->Create(&g_Gui);
pGroup->Add(pRadio);

pRadio = new dft::RadioButton;
pRadio->Create(&g_Gui);
pGroup->Add(pRadio);

pRadio = new dft::RadioButton;
pRadio->Create(&g_Gui);
pGroup->Add(pRadio);

pGroup = new Group(GRP_PANEL);
pRadio = new dft::RadioButton;
pRadio->Create(&g_Gui);
pGroup->Add(pRadio);

pRadio = new dft::RadioButton;
pRadio->Create(&g_Gui);
pGroup->Add(pRadio);










(See Telastyn, I told you I'd try [wink].)

With this pseudocode you can tell that the first 3 are in a group and the last 2 are in a different group. This also eases the code, since in the Group class, I can override the OnSelectionChange() and change each radio button status. This will also make it easier when I want to add tabs [grin].

Edit: I decided to go a little deeper in to this discussion. Grouping has been one of my major concerns, mostly because of the tab control and the radio button. I've had several different systems including different kinds of IDs, and a list of widgets that are grouped together stored within each widget (very bad idea). This system seems to work out very well and keeps with the design of the rest of the GUI code. You create and define a widget (by define I mean set it up) and then call Parent->Add(NewWidget). Something else that I didn't mention is that a Group also defines the area in which its children can be seen (its clipping rectangle.)
April 24, 2006 03:01 AM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement
Advertisement