2 * Copyright (C) Volition, Inc. 1999. All rights reserved.
4 * All source code herein is the property of Volition, Inc. You may not sell
5 * or otherwise commercially exploit the source or things you created based on
10 * $Logfile: /Freespace2/code/UI/RADIO.cpp $
15 * Code to handle radio buttons.
18 * Revision 1.2 2002/06/09 04:41:29 relnev
19 * added copyright header
21 * Revision 1.1.1.1 2002/05/03 03:28:11 root
25 * 4 12/02/98 5:47p Dave
26 * Put in interface xstr code. Converted barracks screen to new format.
28 * 3 10/13/98 9:29a Dave
29 * Started neatening up freespace.h. Many variables renamed and
30 * reorganized. Added AlphaColors.[h,cpp]
32 * 2 10/07/98 10:54a Dave
35 * 1 10/07/98 10:51a Dave
37 * 9 3/10/98 4:19p John
38 * Cleaned up graphics lib. Took out most unused gr functions. Made D3D
39 * & Glide have popups and print screen. Took out all >8bpp software
40 * support. Made Fred zbuffer. Made zbuffer allocate dynamically to
41 * support Fred. Made zbuffering key off of functions rather than one
44 * 8 2/03/98 4:21p Hoffoss
45 * Made UI controls draw white text when disabled.
47 * 7 1/14/98 6:44p Hoffoss
48 * Massive changes to UI code. A lot cleaner and better now. Did all
49 * this to get the new UI_DOT_SLIDER to work properly, which the old code
50 * wasn't flexible enough to handle.
52 * 6 6/12/97 12:39p John
53 * made ui use freespace colors
55 * 5 6/11/97 1:13p John
56 * Started fixing all the text colors in the game.
58 * 4 5/26/97 10:26a Lawrance
59 * get slider control working 100%
61 * 3 1/01/97 6:46p Lawrance
62 * changed text color of radio button to green from black
64 * 2 11/15/96 11:43a John
66 * 1 11/14/96 6:55p John
73 #include "alphacolors.h"
75 void UI_RADIO::create(UI_WINDOW *wnd, char *_text, int _x, int _y, int _state, int _group )
79 // gr_get_string_size( &_w, &_h, "X" );
88 base_create( wnd, UI_KIND_RADIO, _x, _y, _w, _h );
96 void UI_RADIO::destroy()
101 UI_GADGET::destroy();
104 void UI_RADIO::draw()
111 if ( disabled_flag ) {
113 if ( bmap_ids[RADIO_DISABLED_MARKED] != -1 ) {
114 gr_set_bitmap(bmap_ids[RADIO_DISABLED_MARKED]);
119 if ( bmap_ids[RADIO_DISABLED_CLEAR] != -1 ) {
120 gr_set_bitmap(bmap_ids[RADIO_DISABLED_CLEAR]);
125 else { // not disabled
126 if ( position == 0 ) { // up
127 if ( flag ) { // marked
128 if ( bmap_ids[RADIO_UP_MARKED] != -1 ) {
129 gr_set_bitmap(bmap_ids[RADIO_UP_MARKED]);
134 if ( bmap_ids[RADIO_UP_CLEAR] != -1 ) {
135 gr_set_bitmap(bmap_ids[RADIO_UP_CLEAR]);
141 if ( flag ) { // marked
142 if ( bmap_ids[RADIO_DOWN_MARKED] != -1 ) {
143 gr_set_bitmap(bmap_ids[RADIO_DOWN_MARKED]);
148 if ( bmap_ids[RADIO_DOWN_CLEAR] != -1 ) {
149 gr_set_bitmap(bmap_ids[RADIO_DOWN_CLEAR]);
157 gr_set_font(my_wnd->f_id);
158 gr_set_clip( x, y, w, h );
160 if (position == 0 ) {
161 ui_draw_box_out( 0, 0, w-1, h-1 );
164 ui_draw_box_in( 0, 0, w-1, h-1 );
169 gr_set_color_fast(&CDARK_GRAY);
170 else if (my_wnd->selected_gadget == this)
171 gr_set_color_fast(&CBRIGHT_GREEN);
173 gr_set_color_fast(&CGREEN);
176 // ui_string_centered( Middle(w)+offset, Middle(h)+offset, "*" );
178 // ui_string_centered( Middle(w)+offset, Middle(h)+offset, "o" );
180 gr_circle( Middle(w)+offset, Middle(h)+offset, 8 );
182 gr_circle( Middle(w)+offset, Middle(h)+offset, 8 );
183 gr_set_color_fast( &CWHITE );
184 gr_circle( Middle(w)+offset, Middle(h)+offset, 4 );
188 gr_set_color_fast(&CDARK_GRAY);
189 else if (my_wnd->selected_gadget == this)
190 gr_set_color_fast(&CBRIGHT_GREEN);
192 gr_set_color_fast(&CGREEN);
196 gr_string( x+w+4, y+2, text );
201 void UI_RADIO::process(int focus)
203 int OnMe, oldposition;
210 if (my_wnd->selected_gadget == this)
213 OnMe = is_mouse_on();
215 oldposition = position;
217 if (B1_PRESSED && OnMe) {
223 if (my_wnd->keypress == hotkey) {
225 my_wnd->last_keypress = 0;
228 if ( focus && ((my_wnd->keypress == KEY_SPACEBAR) || (my_wnd->keypress == KEY_ENTER)) )
232 if ( (oldposition == 2) && (keyd_pressed[KEY_SPACEBAR] || keyd_pressed[KEY_ENTER]) )
238 if ( (oldposition == 1) && OnMe )
240 if ( (oldposition == 2) && focus )
244 if (pressed_down && user_function) {
248 if (pressed_down && (flag == 0)) {
249 UI_GADGET *tmp = (UI_GADGET *) next;
252 while (tmp != this) {
253 if (tmp->kind == UI_KIND_RADIO) {
254 tmpr = (UI_RADIO *) tmp;
255 if ((tmpr->group == group) && tmpr->flag) {
257 tmpr->pressed_down = 0;
268 int UI_RADIO::changed()
273 int UI_RADIO::checked()