// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.help; import java.util.ArrayList; import java.util.Collections; import java.util.Observable; public class HelpBrowserHistory extends Observable { private HelpBrowser browser; private ArrayList<String> history; private int historyPos = 0; public HelpBrowserHistory(HelpBrowser browser) { this.browser = browser; history = new ArrayList<String>(); } public void clear() { history.clear(); historyPos = 0; setChanged(); notifyObservers(); } public boolean canGoBack() { return historyPos > 0; } public boolean canGoForward() { return historyPos + 1 < history.size(); } public void back() { historyPos--; if (historyPos < 0) return; String url = history.get(historyPos); browser.openUrl(url); setChanged(); notifyObservers(); } public void forward() { historyPos++; if (historyPos >= history.size()) return; String url = history.get(historyPos); browser.openUrl(url); setChanged(); notifyObservers(); } public void setCurrentUrl(String url) { boolean add=true; if (historyPos >= 0 && historyPos < history.size() && history.get(historyPos).toString().equals(url.toString())) { add = false; } else if (historyPos == history.size() -1) { // do nothing just append } else if (historyPos ==0 && history.size() > 0) { history = new ArrayList<String>(Collections.singletonList(history.get(0))); } else if (historyPos < history.size() -1 && historyPos > 0) { history = new ArrayList<String>(history.subList(0, historyPos)); } else { history = new ArrayList<String>(); } if(add) { history.add(url); historyPos = history.size()-1; } setChanged(); notifyObservers(); } }