/*
* org.openmicroscopy.shoola.agents.imviewer.view.HistoryCanvas
*
*------------------------------------------------------------------------------
* Copyright (C) 2006-2007 University of Dundee. All rights reserved.
*
*
* 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 2 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 org.openmicroscopy.shoola.agents.imviewer.view;
//Java imports
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
//Third-party libraries
//Application-internal dependencies
import org.openmicroscopy.shoola.agents.imviewer.IconManager;
import org.openmicroscopy.shoola.agents.imviewer.util.HistoryItem;
import org.openmicroscopy.shoola.util.ui.tpane.TinyPane;
/**
* Displays the history elements.
*
* @author Jean-Marie Burel
* <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
* @author Donald MacDonald
* <a href="mailto:donald@lifesci.dundee.ac.uk">donald@lifesci.dundee.ac.uk</a>
* @version 3.0
* <small>
* (<b>Internal version:</b> $Revision: $Date: $)
* </small>
* @since OME3.0
*/
class HistoryCanvas
extends TinyPane
{
/** Reference to the Model. */
private ImViewerControl controller;
/** Adds button to the tool bar. */
private void addDecoration()
{
IconManager icons = IconManager.getInstance();
JButton clearButton = new JButton(icons.getIcon(
IconManager.HISTORY_CLEAR_12));
clearButton.addActionListener(
controller.getAction(ImViewerControl.CLEAR_HISTORY));
clearButton.setToolTipText("Clear the History excepted the initial " +
"view.");
clearButton.setContentAreaFilled(false);
clearButton.setBorder(BorderFactory.createEmptyBorder());
clearButton.setMargin(new Insets(0, 0, 0, 0));
clearButton.setOpaque(false);
clearButton.setFocusPainted(false);
List<JButton> nodes = new ArrayList<JButton>();
nodes.add(clearButton);
setDecoration(nodes);
}
/**
* Creates a new instance.
*
* @param controller Reference to the Control. Mustn't be <code>null</code>.
*/
HistoryCanvas(ImViewerControl controller)
{
this.controller = controller;
clearDefaultButtons();
addDecoration();
setListenToBorder(false);
this.controller = controller;
}
/**
* Clears the history.
*
* @param nodes The collection of nodes.
*/
void clearHistory(List nodes)
{
JComponent desktop = getInternalDesktop();
desktop.removeAll();
Iterator i = nodes.iterator();
while (i.hasNext())
desktop.add((HistoryItem) i.next());
Rectangle r = getBounds();
Rectangle bounds = getContentsBounds();
Insets insets = getInsets();
int w = r.width-insets.left-insets.right;
if (w < 0) return;
Dimension d = new Dimension(w, bounds.height);
desktop.setSize(d);
desktop.setPreferredSize(d);
}
/**
* Lays out the nodes in a grid view.
*
* @param width The width available.
* @param nodes The collection of nodes.
*/
void doGridLayout(int width, List nodes)
{
if (nodes == null || nodes.size() == 0) return;
HistoryItem child = null;
Dimension maxDim = ((HistoryItem) nodes.get(0)).getPreferredSize();
//int m = width/maxDim.width;
//int n = nodes.size();
//if (m != 0) n = n/m+1;
Iterator i = nodes.iterator();
int j = 0;
while (i.hasNext()) {
child = (HistoryItem) i.next();
child.setBounds(j*maxDim.width, 0, maxDim.width, maxDim.height);
child.validate();
j++;
}
int finalWidth = nodes.size()*maxDim.width;
if (finalWidth > width) {
JScrollPane dskDecorator = getDeskDecorator();
Dimension d = new Dimension(finalWidth, getPreferredSize().height);
getInternalDesktop().setSize(d);
getInternalDesktop().setPreferredSize(d);
getInternalDesktop().validate();
dskDecorator.getHorizontalScrollBar().setValue(finalWidth);
}
}
}