| #include "menu.h" |
| #include "layout.h" |
| |
| #define MENU_FIRST_COLUMN 3 |
| #define MENU_SECOND_COLUMN 44 |
| #define MENU_TOP 4 |
| #define MENU_BOTTOM 16 |
| |
| void menu_layout(menu_t *menu) |
| { |
| int |
| x=MENU_FIRST_COLUMN, |
| y=MENU_TOP, |
| |
| max_width = 0, |
| max_front_width = 0, |
| max_back_width = 0; |
| |
| int |
| height = 0, |
| //temp_h, |
| temp_l; |
| |
| item_t* |
| item; |
| |
| if (menu->type == MENUTYPE_POPUP) |
| { |
| x = 0; |
| y = 0; |
| } |
| |
| /* Find size maximums */ |
| item = (item_t *)(menu->item_list.first); |
| while (item) |
| { |
| if (item->w > max_width) |
| max_width = item->w; |
| if (item->front_width > max_front_width) |
| max_front_width = item->front_width; |
| if (item->back_width > max_back_width) |
| max_back_width = item->back_width; |
| |
| item = (item_t *)(item->link.next); |
| } |
| |
| /* Layout phase */ |
| item = (item_t *)(menu->item_list.first); |
| while (item) |
| { |
| item->x = x; |
| item->y = y; |
| temp_l = menu->item_spacing + item->h - 1; |
| y += temp_l; |
| if (y > MENU_BOTTOM || item->break_after == true) |
| { |
| y = MENU_TOP; |
| x = MENU_SECOND_COLUMN; |
| } |
| height += temp_l; |
| item->w = max_width; |
| item->front_width = max_front_width; |
| item->back_width = max_back_width; |
| item = (item_t *)(item->link.next); |
| } |
| |
| height -= menu->item_spacing; |
| |
| /* Set the first item to be the acrive one */ |
| if (menu->current_item == NULL) |
| { |
| menu->current_item = (item_t *)(menu->item_list.first); |
| while (menu->current_item && menu->current_item->disabled == true) |
| { |
| menu->current_item = (item_t *)(menu->current_item->link.next); |
| } |
| } |
| |
| menu->w = max_width; |
| menu->h = height; |
| } |