/* (global) menu variables */
MenuAction menuaction;
-int show_menu;
-int menu_change;
+bool show_menu;
+bool menu_change;
texture_type checkbox, checkbox_checked, back, arrow_left, arrow_right;
menu_type main_menu, game_menu, options_menu, highscore_menu, load_game_menu, save_game_menu;
{
if(pmenu != current_menu)
{
- menu_change = YES;
+ menu_change = true;
last_menu = current_menu;
current_menu = pmenu;
timer_start(&pmenu->effect, 500);
if(kind == MN_TOGGLE)
pnew_item->toggled = init_toggle;
else
- pnew_item->toggled = NO;
+ pnew_item->toggled = false;
pnew_item->target_menu = target_menu;
pnew_item->input = (char*) malloc(sizeof(char));
pnew_item->input[0] = '\0';
/* Initialize a menu */
void menu_init(menu_type* pmenu)
{
+ pmenu->x = screen->w/2;
+ pmenu->y = screen->h/2;
pmenu->arrange_left = 0;
- pmenu->num_items = 0;
- pmenu->active_item = 0;
- pmenu->item = NULL;
- timer_init(&pmenu->effect,NO);
+ pmenu->num_items = 0;
+ pmenu->active_item = 0;
+ pmenu->item = NULL;
+ timer_init(&pmenu->effect,false);
}
/* Add an item to a menu */
void menu_additem(menu_type* pmenu, menu_item_type* pmenu_item)
{
++pmenu->num_items;
- pmenu->item = (menu_item_type*) realloc(pmenu->item, sizeof(menu_item_type) * pmenu->num_items);
+ pmenu->item = (menu_item_type*)realloc(pmenu->item, sizeof(menu_item_type) * pmenu->num_items);
memcpy(&pmenu->item[pmenu->num_items-1],pmenu_item,sizeof(menu_item_type));
free(pmenu_item);
}
else
pmenu->active_item = pmenu->num_items-1;
break;
+
case MENU_ACTION_DOWN:
if(pmenu->active_item < pmenu->num_items-1)
++pmenu->active_item;
else
pmenu->active_item = 0;
break;
+
case MENU_ACTION_LEFT:
if(item.kind == MN_STRINGSELECT
&& item.list->num_items != 0)
item.list->active_item = 0;
}
break;
+
case MENU_ACTION_HIT:
if(item.kind == MN_GOTO
&& item.target_menu != NULL)
else if(item.kind == MN_TOGGLE)
{
item.toggled = !item.toggled;
- menu_change = YES;
+ menu_change = true;
}
else if(item.kind == MN_ACTION || item.kind == MN_TEXTFIELD || item.kind == MN_NUMFIELD)
{
- item.toggled = YES;
+ item.toggled = true;
}
else if(item.kind == MN_BACK)
{
menu_set_current(last_menu);
}
break;
+
case MENU_ACTION_REMOVE:
if(item.kind == MN_TEXTFIELD
|| item.kind == MN_NUMFIELD)
}
}
break;
+
case MENU_ACTION_INPUT:
if(item.kind == MN_TEXTFIELD
|| (item.kind == MN_NUMFIELD && mn_input_char >= '0' && mn_input_char <= '9'))
}
}
break;
+
case MENU_ACTION_NONE:
break;
}
}
- if(item.kind == MN_DEACTIVE || item.kind == MN_LABEL || item.kind == MN_HL)
+ menu_item_type& new_item = pmenu->item[pmenu->active_item];
+ if(new_item.kind == MN_DEACTIVE
+ || new_item.kind == MN_LABEL
+ || new_item.kind == MN_HL)
{
+ // Skip the horzontal line item
if(menuaction != MENU_ACTION_UP && menuaction != MENU_ACTION_DOWN)
menuaction = MENU_ACTION_DOWN;
if(pmenu->num_items > 1)
menu_action(pmenu);
}
-
}
/* Check, if the value of the active menu item has changed. */
if(pmenu->num_items != 0 && pmenu->item != NULL)
{
- if((item.kind == MN_ACTION || item.kind == MN_TEXTFIELD || item.kind == MN_NUMFIELD) && item.toggled == YES)
+ if((item.kind == MN_ACTION || item.kind == MN_TEXTFIELD || item.kind == MN_NUMFIELD) && item.toggled == true)
{
- item.toggled = NO;
+ item.toggled = false;
show_menu = 0;
return pmenu->active_item;
}
effect_offset = (index % 2) ? effect_time : -effect_time;
}
- int x_pos = screen->w/2;
- int y_pos = screen->h/2 + 24*index - menu_height/2 + 12 + effect_offset;
+ int x_pos = pmenu->x;
+ int y_pos = pmenu->y + 24*index - menu_height/2 + 12 + effect_offset;
int shadow_size = 2;
int text_width = strlen(pitem.text) * font_width;
int input_width = strlen(pitem.input) * font_width;
int list_width = strlen(string_list_active(pitem.list)) * font_width;
text_type* text_font = &white_text;
- if(pmenu->arrange_left == YES)
+ if(pmenu->arrange_left == true)
x_pos += 24 - menu_width/2 + (text_width + input_width + list_width)/2;
if(index == pmenu->active_item)
case MN_HL:
{
- int x = screen->w/2 - menu_width/2;
+ int x = pmenu->x - menu_width/2;
int y = y_pos - 12 - effect_offset;
/* Draw a horizontal line with a little 3d effect */
fillrect(x, y + 6,
menu_width, 4,
210,50,50,225);
- fillrect(x, y + 10 + 6,
+ fillrect(x, y + 6,
menu_width, 2,
0,0,0,255);
break;
{
text_draw_align(text_font, pitem.text, x_pos, y_pos, A_HMIDDLE, A_VMIDDLE, shadow_size);
- if(pitem.toggled == YES)
+ if(pitem.toggled == true)
texture_draw(&checkbox_checked,
x_pos + (text_width+font_width)/2,
y_pos - 8);
/* Draw the current menu. */
void menu_draw(menu_type* pmenu)
{
- int y;
int menu_height;
int menu_width;
- /* The width of the menu has to be more than the width of the text with the most characters */
+ /* The width of the menu has to be more than the width of the text
+ with the most characters */
menu_width = 0;
for(int i = 0; i < pmenu->num_items; ++i)
{
- y = strlen(pmenu->item[i].text) + (pmenu->item[i].input ? strlen(pmenu->item[i].input) + 1 : 0) + strlen(string_list_active(pmenu->item[i].list));
- if( y > menu_width )
+ int w = strlen(pmenu->item[i].text) + (pmenu->item[i].input ? strlen(pmenu->item[i].input) + 1 : 0) + strlen(string_list_active(pmenu->item[i].list));
+ if( w > menu_width )
{
- menu_width = y;
+ menu_width = w;
if( pmenu->item[i].kind == MN_TOGGLE)
menu_width += 2;
}
menu_width = menu_width * 16 + 48;
menu_height = (pmenu->num_items) * 24;
- int center_x = screen->w/2;
/* Draw a transparent background */
- fillrect(center_x - menu_width/2,screen->h/2-(((pmenu->num_items)*24)/2),menu_width,menu_height,150,150,150,100);
+ fillrect(pmenu->x - menu_width/2,
+ pmenu->y - 24*pmenu->num_items/2,
+ menu_width,menu_height,150,150,150,100);
for(int i = 0; i < pmenu->num_items; ++i)
{
/* Reset/Set global defaults */
void menu_reset(void)
{
- menu_change = NO;
- show_menu = NO;
+ menu_change = false;
+ show_menu = false;
menuaction = MENU_ACTION_NONE;
current_menu = NULL;
last_menu = NULL;
/* Draw the current menu and execute the (menu)events */
void menu_process_current(void)
{
- menu_change = NO;
+ menu_change = false;
if(current_menu != NULL)
{
{
case SDLK_UP: /* Menu Up */
menuaction = MENU_ACTION_UP;
- menu_change = YES;
+ menu_change = true;
break;
case SDLK_DOWN: /* Menu Down */
menuaction = MENU_ACTION_DOWN;
- menu_change = YES;
+ menu_change = true;
break;
case SDLK_LEFT: /* Menu Up */
menuaction = MENU_ACTION_LEFT;
- menu_change = YES;
+ menu_change = true;
break;
case SDLK_RIGHT: /* Menu Down */
menuaction = MENU_ACTION_RIGHT;
- menu_change = YES;
+ menu_change = true;
break;
case SDLK_SPACE:
if(current_menu->item[current_menu->active_item].kind == MN_TEXTFIELD)
{
menuaction = MENU_ACTION_INPUT;
- menu_change = YES;
+ menu_change = true;
mn_input_char = ' ';
break;
}
case SDLK_RETURN: /* Menu Hit */
menuaction = MENU_ACTION_HIT;
- menu_change = YES;
+ menu_change = true;
break;
case SDLK_DELETE:
case SDLK_BACKSPACE:
menuaction = MENU_ACTION_REMOVE;
- menu_change = YES;
+ menu_change = true;
delete_character++;
break;
default:
if( (key >= SDLK_0 && key <= SDLK_9) || (key >= SDLK_a && key <= SDLK_z) || (key >= SDLK_SPACE && key <= SDLK_SLASH))
{
menuaction = MENU_ACTION_INPUT;
- menu_change = YES;
+ menu_change = true;
mn_input_char = *ch;
}
else
#endif*/
}
+menu_item_type*
+menu_additem(menu_type* pmenu, MenuItemKind kind, char *text, int init_toggle, void* target_menu)
+{
+ menu_item_type* item = menu_item_create(kind, text, init_toggle, target_menu);
+ menu_additem(pmenu, item);
+ return item;
+}
+
+// EOF //