/* * 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.bookmark.BookmarkManager; import com.mucommander.commons.file.FileURL; import com.mucommander.commons.file.protocol.local.LocalFile; import com.mucommander.commons.file.util.PathUtils; import com.mucommander.core.LocalLocationHistory; import com.mucommander.text.Translator; import com.mucommander.ui.tabs.Tab; /** * Interface of tab in the {@link com.mucommander.ui.main.FolderPanel} that contains a {@link com.mucommander.ui.main.table.FileTable} * * @author Arik Hadas */ public abstract class FileTableTab implements Tab { /** * Setter for the location presented in the tab * * @param location the file that is going to be presented in the tab */ public abstract void setLocation(FileURL location); /** * Getter for the location presented in the tab * * @return the file that is being presented in the tab */ public abstract FileURL getLocation(); /** * Set the tab to be locked or unlocked according to the given flag * * @param locked flag that indicates whether the tab should be locked or not */ public abstract void setLocked(boolean locked); /** * Returns whether the tab is locked * * @return indication whether the tab is locked */ public abstract boolean isLocked(); /** * Set the title of the tab to the given string * * @param title - predefined title to be assigned to the tab, null for no predefined title */ public abstract void setTitle(String title); /** * Returns the title that was assigned for the tab * * @return the title that was assigned for the tab, null is returned if no title was assigned */ public abstract String getTitle(); /** * Returns a string representation for the tab: * the tab's fixed title will be returned if such title was assigned, * otherwise, a string representation will be created based on the tab's location: * for local file, the filename will be returned ("/" in case the root folder is presented) * for remote file, the returned pattern will be "\<host\>:\<filename\>" * * @return String representation of the tab */ public String getDisplayableTitle() { String title = getTitle(); return title != null ? title : createDisplayableTitleFromLocation(getLocation()); } private String createDisplayableTitleFromLocation(FileURL location) { if (BookmarkManager.isBookmark(location) && location.getHost() == null) return Translator.get("bookmarks_menu"); boolean local = FileURL.LOCALHOST.equals(location.getHost()); return getHostRepresentation(location.getHost(), local) + getFilenameRepresentation(location.getFilename(), local); } private String getHostRepresentation(String host, boolean local) { return local ? "" : host + ":"; } private String getFilenameRepresentation(String filename, boolean local) { // Under for OSes with 'root drives' (Windows, OS/2), remove the leading '/' character if(local && LocalFile.hasRootDrives() && filename != null) return PathUtils.removeLeadingSeparator(filename, "/"); // Under other OSes, if the filename is empty return "/" else return filename == null ? "/" : filename; } /** * Returns the tracker of the last accessed locations within the tab * * @return tracker of the last accessed locations within the tab */ public abstract LocalLocationHistory getLocationHistory(); }