Interruptible * ActionStack::getPrevious(Interruptible * next, int type, int state, int display) { int n = getPreviousIndex(next, type, state, display); if (n == -1) return NULL; return ((Interruptible *) mObjects[n]); }
void Menu::selectPreviousItem() { if(getItemCount() > 1) { int startingPoint = getSelectedIndex(); int previousIndex = getPreviousIndex(startingPoint); while(previousIndex != startingPoint) { if(items.at(previousIndex)->isEnabled()) { setSelectedIndex(previousIndex); break; } previousIndex = getPreviousIndex(previousIndex); } } // Don't do anything if there is only 1 or 0 items }
int ActionStack::getPreviousIndex(Interruptible * next, int type, int state, int display) { int found = 0; if (!next) found = 1; for (int i = (int)(mObjects.size()) - 1; i >= 0; i--) { Interruptible * current = (Interruptible *) mObjects[i]; if (found && (type == 0 || current->type == type) && (state == 0 || current->state == state) && (display == -1 || current->display == display)) { return i; } if (current == next) found = 1; } if (!found) return getPreviousIndex(NULL, type, state, display); return -1; }
bool ActionStack::CheckUserInput(JButton inputKey) { JButton key = inputKey; JButton trigger = (options[Options::REVERSETRIGGERS].number ? JGE_BTN_NEXT : JGE_BTN_PREV); if (mode == ACTIONSTACK_STANDARD) { if (askIfWishesToInterrupt) { int x,y; if(observer->getInput()->GetLeftClickCoordinates(x, y)) { key = handleInterruptRequest(inputKey, x, y); } if (JGE_BTN_SEC == key && gModRules.game.canInterrupt()) { setIsInterrupting(askIfWishesToInterrupt); return true; } else if ((JGE_BTN_OK == key) || (trigger == key)) { cancelInterruptOffer(); return true; } else if ((JGE_BTN_PRI == key)) { cancelInterruptOffer(DONT_INTERRUPT_ALL); return true; } return true; } else if (observer->isInterrupting) { if (JGE_BTN_SEC == key) { if(observer->mExtraPayment) { observer->mExtraPayment->action->CheckUserInput(JGE_BTN_SEC); observer->mExtraPayment = NULL; } endOfInterruption(); return true; } } } else if (mode == ACTIONSTACK_TARGET) { if (modal) { if (JGE_BTN_UP == key) { if (mObjects[mCurr]) { int n = getPreviousIndex(((Interruptible *) mObjects[mCurr]), 0, 0, 1); if (n != -1 && n != mCurr && mObjects[mCurr]->Leaving(JGE_BTN_UP)) { mCurr = n; mObjects[mCurr]->Entering(); DebugTrace("ACTIONSTACK UP TO mCurr = " << mCurr); } } return true; } else if (JGE_BTN_DOWN == key) { if( mObjects[mCurr]) { int n = getNextIndex(((Interruptible *) mObjects[mCurr]), 0, 0, 1); if (n!= -1 && n != mCurr && mObjects[mCurr]->Leaving(JGE_BTN_DOWN)) { mCurr = n; mObjects[mCurr]->Entering(); DebugTrace("ACTIONSTACK DOWN TO mCurr " << mCurr); } } return true; } else if (JGE_BTN_OK == key) { DebugTrace("ACTIONSTACK CLICKED mCurr = " << mCurr); observer->stackObjectClicked(((Interruptible *) mObjects[mCurr])); return true; } return true; //Steal the input to other layers if we're visible } if (JGE_BTN_CANCEL == key) { if (modal) modal = 0; else modal = 1; return true; } } return false; }