/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.undo; import java.util.*; public class XUndoList { private XUndoManager manager = null; private ArrayList<XUndoItem> items = new ArrayList<XUndoItem>(0); private int current = 0; private boolean isCurrentUndone = false; public XUndoList(XUndoManager manager) { this.manager = manager; } public XUndoItem[] items() { return items.toArray(new XUndoItem[items.size()]); } public int getLastUndone() { return (isCurrentUndone) ? current : current + 1; } public void execute(int i) { if(i == current) { if(isCurrentUndone) manager.redo(); else manager.undo(); isCurrentUndone = !isCurrentUndone; } else if(i < current) { if(isCurrentUndone) --current; for (int j = current; j >= i; j--) manager.undo(); isCurrentUndone = true; } else if(i > current) { if(!isCurrentUndone) ++current; for (int j = current; j <= i; j++) manager.redo(); isCurrentUndone = false; } current = i; } void add(XUndoItem item) { items.add(item); } void setCurrent(int current) { this.current = current; if(current < 0) { current = 0; isCurrentUndone = true; } } }