/* * This file is part of muCommander, http://www.mucommander.com * Copyright (C) 2002-2016 Maxence Bernard * * muCommander 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. * * muCommander 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 com.mucommander.ui.main.tabs; import com.mucommander.commons.file.FileURL; import com.mucommander.core.LocalLocationHistory; import com.mucommander.ui.main.FolderPanel; import com.mucommander.ui.tabs.TabFactory; /** * Factory for creating {@link com.mucommander.ui.main.tabs.FileTableTab} which is a clone of a given {@link com.mucommander.ui.main.tabs.FileTableTab} * * @author Arik Hadas */ public class ClonedFileTableTabFactory implements TabFactory<FileTableTab, FileTableTab> { private FolderPanel folderPanel; public ClonedFileTableTabFactory(FolderPanel folderPanel) { this.folderPanel = folderPanel; } public FileTableTab createTab(FileTableTab tab) { if (tab.getLocation() == null) throw new RuntimeException("Invalid location"); return new ClonedFileTableTab(tab, folderPanel); } class ClonedFileTableTab extends FileTableTab { /** The location presented in this tab */ private FileURL location; /** Flag that indicates whether the tab is locked or not */ private boolean locked; /** Title that is assigned for the tab */ private String title; /** History of accessed location within the tab */ private LocalLocationHistory locationHistory; /** * Private constructor * * @param location - the location that would be presented in the tab */ private ClonedFileTableTab(FileTableTab tab, FolderPanel folderPanel) { this.location = tab.getLocation(); this.locked = tab.isLocked(); this.title = tab.getTitle(); locationHistory = new LocalLocationHistory(folderPanel); } @Override public void setLocation(FileURL location) { this.location = location; // add location to the history (See LocalLocationHistory to see how it handles the first location it gets) locationHistory.tryToAddToHistory(location); } @Override public FileURL getLocation() { return location; } @Override public void setLocked(boolean locked) { this.locked = locked; } @Override public void setTitle(String title) { this.title = title; } @Override public String getTitle() { return title; } @Override public boolean isLocked() { return locked; } @Override public LocalLocationHistory getLocationHistory() { return locationHistory; } @Override public boolean equals(Object obj) { if (obj instanceof FileTableTab) { FileTableTab other = ((FileTableTab) obj); return location.equals(other.getLocation()) && locked == ((FileTableTab) obj).isLocked(); } return false; } @Override public int hashCode() { return location.hashCode(); } } }