001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.help; 003 004 import java.util.ArrayList; 005 import java.util.Collections; 006 import java.util.Observable; 007 008 public class HelpBrowserHistory extends Observable { 009 private HelpBrowser browser; 010 private ArrayList<String> history; 011 private int historyPos = 0; 012 013 public HelpBrowserHistory(HelpBrowser browser) { 014 this.browser = browser; 015 history = new ArrayList<String>(); 016 } 017 018 public void clear() { 019 history.clear(); 020 historyPos = 0; 021 setChanged(); 022 notifyObservers(); 023 } 024 025 public boolean canGoBack() { 026 return historyPos > 0; 027 } 028 029 public boolean canGoForward() { 030 return historyPos + 1 < history.size(); 031 } 032 033 public void back() { 034 historyPos--; 035 if (historyPos < 0) return; 036 String url = history.get(historyPos); 037 browser.openUrl(url); 038 setChanged(); 039 notifyObservers(); 040 } 041 042 public void forward() { 043 historyPos++; 044 if (historyPos >= history.size()) return; 045 String url = history.get(historyPos); 046 browser.openUrl(url); 047 setChanged(); 048 notifyObservers(); 049 } 050 051 public void setCurrentUrl(String url) { 052 boolean add=true; 053 054 if (historyPos >= 0 && historyPos < history.size() && history.get(historyPos).toString().equals(url.toString())) { 055 add = false; 056 } else if (historyPos == history.size() -1) { 057 // do nothing just append 058 } else if (historyPos ==0 && history.size() > 0) { 059 history = new ArrayList<String>(Collections.singletonList(history.get(0))); 060 } else if (historyPos < history.size() -1 && historyPos > 0) { 061 history = new ArrayList<String>(history.subList(0, historyPos)); 062 } else { 063 history = new ArrayList<String>(); 064 } 065 if(add) 066 { 067 history.add(url); 068 historyPos = history.size()-1; 069 } 070 setChanged(); 071 notifyObservers(); 072 } 073 }