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/CHECKBOX.cpp $
15 * Code to handle checkboxes.
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 * 5 2/11/99 3:08p Dave
26 * PXO refresh button. Very preliminary squad war support.
28 * 4 12/02/98 5:47p Dave
29 * Put in interface xstr code. Converted barracks screen to new format.
31 * 3 10/13/98 9:29a Dave
32 * Started neatening up freespace.h. Many variables renamed and
33 * reorganized. Added AlphaColors.[h,cpp]
35 * 2 10/07/98 10:54a Dave
38 * 1 10/07/98 10:51a Dave
40 * 9 2/03/98 4:21p Hoffoss
41 * Made UI controls draw white text when disabled.
43 * 8 1/14/98 6:43p Hoffoss
44 * Massive changes to UI code. A lot cleaner and better now. Did all
45 * this to get the new UI_DOT_SLIDER to work properly, which the old code
46 * wasn't flexible enough to handle.
48 * 7 9/07/97 10:05p Lawrance
49 * don't set hotspot_num, done in gadget constructor
51 * 6 6/12/97 12:39p John
52 * made ui use freespace colors
54 * 5 6/11/97 1:13p John
55 * Started fixing all the text colors in the game.
57 * 4 5/22/97 5:36p Lawrance
58 * allowing custom art for scrollbars
60 * 3 12/08/96 1:58a Lawrance
61 * changed text color for check-box from black to green
63 * 2 11/29/96 6:08p Lawrance
64 * enabled check-boxes to be set to a specific value outside of the
67 * 1 11/14/96 6:55p John
74 #include "alphacolors.h"
76 void UI_CHECKBOX::create(UI_WINDOW *wnd, char *_text, int _x, int _y, int _state )
80 // gr_get_string_size( &_w, &_h, "X" );
85 text = strdup( _text );
89 base_create( wnd, UI_KIND_CHECKBOX, _x, _y, _w, _h );
96 void UI_CHECKBOX::destroy()
101 UI_GADGET::destroy();
105 void UI_CHECKBOX::draw()
111 if ( disabled_flag ) {
113 if ( bmap_ids[CBOX_DISABLED_MARKED] != -1 ) {
114 gr_set_bitmap(bmap_ids[CBOX_DISABLED_MARKED]);
119 if ( bmap_ids[CBOX_DISABLED_CLEAR] != -1 ) {
120 gr_set_bitmap(bmap_ids[CBOX_DISABLED_CLEAR]);
125 else { // not disabled
126 if ( position == 0 ) { // up
127 if ( flag ) { // marked
128 if ( bmap_ids[CBOX_UP_MARKED] != -1 ) {
129 gr_set_bitmap(bmap_ids[CBOX_UP_MARKED]);
134 if ( bmap_ids[CBOX_UP_CLEAR] != -1 ) {
135 gr_set_bitmap(bmap_ids[CBOX_UP_CLEAR]);
141 if ( flag ) { // marked
142 if ( bmap_ids[CBOX_DOWN_MARKED] != -1 ) {
143 gr_set_bitmap(bmap_ids[CBOX_DOWN_MARKED]);
148 if ( bmap_ids[CBOX_DOWN_CLEAR] != -1 ) {
149 gr_set_bitmap(bmap_ids[CBOX_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 );
165 ui_draw_box_in( 0, 0, w-1, h-1 );
170 gr_set_color_fast( &CGRAY );
171 else if (my_wnd->selected_gadget == this)
172 gr_set_color_fast( &CBRIGHT_GREEN );
174 gr_set_color_fast( &CGREEN );
177 ui_string_centered( Middle(w) + offset, Middle(h) + offset, "X" );
179 ui_string_centered( Middle(w) + offset, Middle(h) + offset, " " );
183 gr_string( x+w+4, y+2, text );
188 void UI_CHECKBOX::process(int focus)
190 int OnMe, oldposition;
197 if (my_wnd->selected_gadget == this)
200 OnMe = is_mouse_on();
202 oldposition = position;
204 if ( B1_PRESSED && OnMe ) {
210 if (my_wnd->keypress == hotkey ) {
212 my_wnd->last_keypress = 0;
215 if ( focus && ((my_wnd->keypress == KEY_SPACEBAR) || (my_wnd->keypress == KEY_ENTER)) )
219 if ( (oldposition == 2) && (keyd_pressed[KEY_SPACEBAR] || keyd_pressed[KEY_ENTER]) )
225 if ( (oldposition == 1) && OnMe ){
228 if ( (oldposition == 2) && focus ){
233 if (pressed_down && user_function ) {
241 int UI_CHECKBOX::changed()
246 int UI_CHECKBOX::checked()
251 void UI_CHECKBOX::set_state(int _state)