/************************************************************************** OmegaT - Computer Assisted Translation (CAT) tool with fuzzy matching, translation memory, keyword search, glossaries, and translation leveraging into updated projects. Copyright (C) 2007 - Zoltan Bartko - bartkozoltan@bartkozoltan.com Home page: http://www.omegat.org/ Support center: http://groups.yahoo.com/group/OmegaT/ This file is part of OmegaT. OmegaT 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 3 of the License, or (at your option) any later version. OmegaT 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, see <http://www.gnu.org/licenses/>. **************************************************************************/ package org.omegat.gui.editor; import java.util.ArrayList; import java.util.List; /** * Segment history class. The model needed to implement functionality as in web * browsers - go to previous and goto next segment. * * Since this class is a singleton, use getInstance() to find out the instance. * * @author bartkoz */ class SegmentHistory { /** * the pointer */ private int pointer = -1; private List<Integer> history = new ArrayList<Integer>(); /** Creates a new instance of SegmentHistory */ protected SegmentHistory() { } /** * check if there is any way back */ public boolean hasNext() { return (pointer > -1 && pointer < history.size() - 1); } /** * check if there is any way forward */ public boolean hasPrev() { return (pointer > 0); } /** * insert a new segment number after the pointer. If the pointer is not at * the end of the list, the part of the list behind the pointer is discarded * before the new segment number is added */ public void insertNew(int segmentNumber) { if (pointer > -1) { int current = history.get(pointer); // no need for identical values- just to make sure if (current == segmentNumber) return; if (pointer < history.size() - 1) { // drop the ones later than the current /* * List subList = history.subList(pointer + 1, history.size()); * history.removeAll(subList); */ for (int i = history.size() - 1; i > pointer; i--) { history.remove(i); } } } history.add(segmentNumber); pointer++; } /** * return the current segment value. -1 if none available; */ public int getValue() { if (pointer > -1) return get(pointer); else return -1; } /** * return the previous segment value. -1 if not applicable (no previous) */ public int back() { if (pointer < 0) return -1; if (pointer > 0) pointer--; int result = get(pointer); return result; } /** * return the next segment value. -1 if not applicable (no next) */ public int forward() { if (pointer == -1 || pointer >= history.size() - 1) return -1; return get(++pointer); } /** * return the int value of the given item in the history list */ private int get(int index) { return history.get(index); } /** * clears the history list. It will be empty after the call. */ public void clear() { history.clear(); pointer = -1; } }