- ui_item_t *startitem, *it;
- if (ui_alive)
- {
- ui_mouse_x = bound(0, ui_mouse_x, vid.conwidth);
- ui_mouse_y = bound(0, ui_mouse_y, vid.conheight);
-
- if ((ui_active = ui_isactive()))
- {
- // validate currently selected item
- if(ui_list[ui_keyui] == NULL)
- {
- while (ui_list[ui_keyui] == NULL)
- ui_keyui = (ui_keyui + 1) % MAX_UI_COUNT;
- ui_keyitem = 0;
- }
- ui_keyitem = bound(0, ui_keyitem, ui_list[ui_keyui]->item_count - 1);
- startitem = ui_keyrealitem = &ui_list[ui_keyui]->items[ui_keyitem];
- if ((ui_keyrealitem->flags & ITEM_CLICKABLE) == 0)
- {
- do
- {
- // FIXME: cycle through UIs as well as items in a UI
- ui_keyitem = (ui_keyitem - 1) % ui_list[ui_keyui]->item_count - 1;
- ui_keyrealitem = &ui_list[ui_keyui]->items[ui_keyitem];
- }
- while (ui_keyrealitem != startitem && (ui_keyrealitem->flags & ITEM_CLICKABLE) == 0);
- }
-
- if (ui_keyqueuepos)
- {
- int i;
- for (i = 0;i < ui_keyqueuepos;i++)
- {
- startitem = ui_keyrealitem;
- switch(ui_keyqueue[i])
- {
- case UIKEY_UP:
- do
- {
- ui_keyitem--;
- if (ui_keyitem < 0)
- {
- do
- ui_keyui = (ui_keyui - 1) % MAX_UI_COUNT;
- while(ui_list[ui_keyui] == NULL);
- ui_keyitem = ui_list[ui_keyui]->item_count - 1;
- }
- ui_keyrealitem = &ui_list[ui_keyui]->items[ui_keyitem];
- }
- while (ui_keyrealitem != startitem && (ui_keyrealitem->flags & ITEM_CLICKABLE) == 0);
- break;
- case UIKEY_DOWN:
- do
- {
- ui_keyitem++;
- if (ui_keyitem >= ui_list[ui_keyui]->item_count)
- {
- do
- ui_keyui = (ui_keyui + 1) % MAX_UI_COUNT;
- while(ui_list[ui_keyui] == NULL);
- ui_keyitem = 0;
- }
- ui_keyrealitem = &ui_list[ui_keyui]->items[ui_keyitem];
- }
- while (ui_keyrealitem != startitem && (ui_keyrealitem->flags & ITEM_CLICKABLE) == 0);
- break;
- case UIKEY_LEFT:
- if (ui_keyrealitem->leftkey)
- ui_keyrealitem->leftkey(ui_keyrealitem->nativedata1, ui_keyrealitem->nativedata2, ui_keyrealitem->data1, ui_keyrealitem->data2);
- break;
- case UIKEY_RIGHT:
- if (ui_keyrealitem->rightkey)
- ui_keyrealitem->rightkey(ui_keyrealitem->nativedata1, ui_keyrealitem->nativedata2, ui_keyrealitem->data1, ui_keyrealitem->data2);
- break;
- case UIKEY_ENTER:
- if (ui_keyrealitem->enterkey)
- ui_keyrealitem->enterkey(ui_keyrealitem->nativedata1, ui_keyrealitem->nativedata2, ui_keyrealitem->data1, ui_keyrealitem->data2);
- break;
- }
- }
- }
- ui_keyqueuepos = 0;
-
- if (ui_mouseclick && (it = ui_hititem(ui_mouse_x, ui_mouse_y)) && it->mouseclick)
- it->mouseclick(it->nativedata1, it->nativedata2, it->data1, it->data2, ui_mouse_x - it->click_x, ui_mouse_y - it->click_y);
- }
- }
- ui_mouseclick = false;