Android Open Source - AndroSol Undo Stack






From Project

Back to project page AndroSol.

License

The source code is released under:

MIT License

If you think the Android project AndroSol listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package lib.cards.utilities;
//w  w w  . j  av  a2  s.c o m
import java.util.ArrayList;
import java.util.List;

public class UndoStack {
    public UndoStack() {
        commands = new ArrayList<Command>();
        index = -1;
    }

    // Current command index into list.
    private int index;
    private List<Command> commands;

    private void setIndexToTop() {
        index = getLastCommandIndex();
    }

    private int getLastCommandIndex() {
        return commands.size() - 1;
    }

    public boolean executeCommand(Command command) {
        // Do the command. If it is successful then:
        // Remove everything after Index from the list.
        // Add the new command to the list.
        // Set Index to point to the top of the list.
        if (command.invoke()) {
            if (command.getClearsUndoStack()) {
                commands.clear();
            } else if (index < getLastCommandIndex()) {
                commands.remove(commands.subList(index + 1, index + 1
                        + commands.size() - getLastCommandIndex()));
                commands.add(command);
            } else {
                commands.add(command);
            }
            setIndexToTop();
        }
        return false;
    }

    public boolean undo() {
        // Undo the current command.
        // Decrement Index;
        if (peek() != null) {
            if (!peek().undo()) {
                // TODO: Something wrong with the undo stack. How to resolve?
                return false;
            }
            index--;
            return true;
        }

        return false;
    }

    public boolean reInvoke() {
        // Do the next command, if possible.
        // Increment index if that succeeds.
        if (peekNext() != null) {
            if (!peekNext().reInvoke()) {
                // TODO: Something wrong with the undo stack. How to resolve?
                return false;
            }
            index++;
            return true;
        }

        return false;
    }

    private boolean getIndexIsValid() {
        return isValidIndex(index);
    }

    private boolean isValidIndex(int index) {
        return index >= 0 && index < commands.size();
    }

    private Command peekNext() {
        if (index < getLastCommandIndex() && isValidIndex(index + 1)) {
            return commands.get(index + 1);
        }
        return null;
    }

    public Command peek() {
        return getIndexIsValid() ? commands.get(index) : null;
    }
}




Java Source Code List

com.example.androsol.AndroidDeck.java
com.example.androsol.AndroidGameBoard.java
com.example.androsol.CardSpriteImpl.java
com.example.androsol.DeckTheme.java
com.example.androsol.DisplayMessageActivity.java
com.example.androsol.GameSurface.java
com.example.androsol.MainActivity.java
com.example.androsol.SpriteImpl.java
com.example.androsol.StackSpriteImpl.java
com.example.androsol.StandardDeck.java
lib.cards.controllers.Actions.java
lib.cards.controllers.DealAction.java
lib.cards.controllers.GameActionState.java
lib.cards.controllers.GameAction.java
lib.cards.controllers.GameController.java
lib.cards.controllers.NewGameActionState.java
lib.cards.controllers.NewGameAction.java
lib.cards.controllers.StackMoveAction.java
lib.cards.controllers.StackMoveState.java
lib.cards.models.CardColor.java
lib.cards.models.CardStackId.java
lib.cards.models.CardStack.java
lib.cards.models.CardState.java
lib.cards.models.CardSuit.java
lib.cards.models.CardValue.java
lib.cards.models.Card.java
lib.cards.models.CardsMovedEventHandler.java
lib.cards.models.CardsMovedEventObject.java
lib.cards.models.EmptyTableauPileFilledBy.java
lib.cards.models.EventHandler.java
lib.cards.models.FoundationBaseCard.java
lib.cards.models.FoundationSequence.java
lib.cards.models.Foundation.java
lib.cards.models.FreeCell.java
lib.cards.models.GameEventObject.java
lib.cards.models.GameOverEventHandler.java
lib.cards.models.GameOverEventObject.java
lib.cards.models.GameProperties.java
lib.cards.models.GameState.java
lib.cards.models.Game.java
lib.cards.models.MoveGroupsOfCardsAsAUnit.java
lib.cards.models.NewGameEventHandler.java
lib.cards.models.NumberOfCardsDealtFromStock.java
lib.cards.models.RedealsAllowed.java
lib.cards.models.RestoreGameEventHandler.java
lib.cards.models.ScoreChangedEventHandler.java
lib.cards.models.ScoreChangedEventObject.java
lib.cards.models.StackType.java
lib.cards.models.Stock.java
lib.cards.models.SubStackMovedEventHandler.java
lib.cards.models.SubStackMovedEventObject.java
lib.cards.models.SubStack.java
lib.cards.models.TableauSequence.java
lib.cards.models.TableauType.java
lib.cards.models.Tableau.java
lib.cards.models.Waste.java
lib.cards.utilities.CollectionUtils.java
lib.cards.utilities.CommandImpl.java
lib.cards.utilities.Command.java
lib.cards.utilities.Point.java
lib.cards.utilities.Rect.java
lib.cards.utilities.Size.java
lib.cards.utilities.UndoStack.java
lib.cards.views.CardSprite.java
lib.cards.views.DeckMetrics.java
lib.cards.views.Deck.java
lib.cards.views.GameBoardImpl.java
lib.cards.views.GameBoardMetrics.java
lib.cards.views.GameBoard.java
lib.cards.views.SpriteAddedEventHandler.java
lib.cards.views.SpriteDefaultActionEventHandler.java
lib.cards.views.SpriteEventObject.java
lib.cards.views.SpriteRemovedEventHandler.java
lib.cards.views.SpriteSelectedEventHandler.java
lib.cards.views.Sprite.java
lib.cards.views.StackSprite.java