/* GanttProject is an opensource project management tool. License: GPL3 Copyright (C) 2012 GanttProject Team This program 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. This program 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.sourceforge.ganttproject.document.webdav; import java.awt.Component; import java.awt.GridLayout; import java.util.List; import javax.swing.BorderFactory; import javax.swing.DefaultListCellRenderer; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.ListCellRenderer; import javax.swing.SwingConstants; import javax.swing.UIManager; import net.sourceforge.ganttproject.action.GPAction; import net.sourceforge.ganttproject.document.webdav.WebDavResource.WebDavException; import com.google.common.base.Joiner; /** * Renders WebDAV file names and lock information * * @author dbarashev (Dmitry Barashev) */ class FilesCellRenderer implements ListCellRenderer { private final DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer(); @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { WebDavResource webdavResource = (WebDavResource) value; JComponent result; try { JComponent defaultComponent = (JComponent) defaultRenderer.getListCellRendererComponent(list, webdavResource.getName(), index, isSelected, cellHasFocus); List<String> lockOwners = webdavResource.getLockOwners(); if (webdavResource.isCollection()) { result = new JLabel(webdavResource.getName(), GPAction.getIcon("16", "folder.png"), SwingConstants.LEADING); } else { if (lockOwners.isEmpty()) { result = defaultComponent; } else { JLabel name = new JLabel(webdavResource.getName()); JLabel locks = new JLabel(Joiner.on(',').join(lockOwners), GPAction.getIcon("8", "status-locked.png"), SwingConstants.LEADING); locks.setFont(locks.getFont().deriveFont(locks.getFont().getSize()*0.82f)); locks.setForeground(UIManager.getColor("List.disabledForeground")); JPanel box = new JPanel(new GridLayout(2, 1)); box.add(name); box.add(locks); if (isSelected) { name.setBackground(UIManager.getColor("List.selectionBackground")); locks.setBackground(UIManager.getColor("List.selectionBackground")); } result = box; } result.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0), result.getBorder())); } result = decorate(result, defaultComponent, isSelected); return result; } catch (WebDavException e) { return new JLabel("error"); } } private JComponent decorate(JComponent result, JComponent defaultComponent, boolean isSelected) { if (isSelected) { result.setBackground(UIManager.getColor("List.selectionBackground")); } else { result.setBackground(UIManager.getColor("List.background")); } result.setBorder(defaultComponent.getBorder()); return result; } }