/* All programs in this directory and subdirectories are published under the GNU General Public License as described below. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Further information about the GNU GPL is available at: http://www.gnu.org/copyleft/gpl.ja.html */ package net.sf.jabref.groups; import javax.swing.undo.AbstractUndoableEdit; import net.sf.jabref.Globals; /** * @author jzieren * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */ public class UndoableMoveGroup extends AbstractUndoableEdit { private final GroupSelector m_groupSelector; private final GroupTreeNode m_groupsRootHandle; private final int[] m_pathToNewParent; private final int m_newChildIndex; private final int[] m_pathToOldParent; private final int m_oldChildIndex; /** * @param moveNode * The node which is being moved. At the time of construction of * this object, it must not have moved yet. * @param newParent * The new parent node to which <b>moveNode </b> will be moved. * @param newChildIndex * The child index at <b>newParent </b> to which <b>moveNode </b> * will be moved. */ public UndoableMoveGroup(GroupSelector gs, GroupTreeNode groupsRoot, GroupTreeNode moveNode, GroupTreeNode newParent, int newChildIndex) { m_groupSelector = gs; m_groupsRootHandle = groupsRoot; m_pathToNewParent = newParent.getIndexedPath(); m_newChildIndex = newChildIndex; m_pathToOldParent = ((GroupTreeNode) moveNode.getParent()) .getIndexedPath(); m_oldChildIndex = moveNode.getParent().getIndex(moveNode); } public String getUndoPresentationName() { return Globals.lang("Undo") + ": " + Globals.lang("move group"); } public String getRedoPresentationName() { return Globals.lang("Redo") + ": " + Globals.lang("move group"); } public void undo() { super.undo(); GroupTreeNode cursor = m_groupsRootHandle .getDescendant(m_pathToNewParent); cursor = (GroupTreeNode) cursor.getChildAt(m_newChildIndex); m_groupsRootHandle.getDescendant(m_pathToOldParent).insert(cursor, m_oldChildIndex); m_groupSelector.revalidateGroups(); } public void redo() { super.redo(); GroupTreeNode cursor = m_groupsRootHandle .getDescendant(m_pathToOldParent); cursor = (GroupTreeNode) cursor.getChildAt(m_oldChildIndex); m_groupsRootHandle.getDescendant(m_pathToNewParent).insert(cursor, m_newChildIndex); m_groupSelector.revalidateGroups(); } }