package org.chartsy.main;
import java.awt.Component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.AbstractListModel;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;
import org.chartsy.main.chart.Indicator;
import org.chartsy.main.utils.SerialVersion;
/**
*
* @author Viorel
*/
public class IndicatorsList extends JList
{
private static final long serialVersionUID = SerialVersion.APPVERSION;
private ChartFrame chartFrame;
private ChartFrameAdapter chartFrameAdapter;
private DefaultListModel listModel;
private IndicatorsListRenderer listRenderer;
public IndicatorsList(ChartFrame frame)
{
this.chartFrame = frame;
this.listModel = new DefaultListModel();
this.listRenderer = new IndicatorsListRenderer();
setOpaque(false);
setDoubleBuffered(true);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setBorder(BorderFactory.createEmptyBorder());
setDragEnabled(false);
setModel(listModel);
setFixedCellHeight(Indicator.DEFAULT_HEIGHT);
setCellRenderer(listRenderer);
chartFrameAdapter = new ChartFrameAdapter()
{
@Override
public void indicatorAdded(Indicator indicator)
{
int index = listModel.size();
listModel.add(index, indicator);
revalidate();
repaint();
}
@Override
public void indicatorRemoved(Indicator indicator)
{
listModel.removeElement(indicator);
revalidate();
repaint();
}
};
chartFrame.addChartFrameListener(chartFrameAdapter);
}
public ChartFrame getChartFrame()
{
return chartFrame;
}
public int getIndicatorsCount()
{
return getModel().getSize();
}
class IndicatorsListModel extends AbstractListModel
{
private List<Indicator> indicators;
public IndicatorsListModel()
{
indicators = Collections.synchronizedList(new ArrayList<Indicator>());
}
@Override
public int getSize()
{
return indicators.size();
}
@Override
public Object getElementAt(int index)
{
return indicators.get(index);
}
}
class IndicatorsListRenderer extends JPanel implements ListCellRenderer
{
public IndicatorsListRenderer()
{
setOpaque(false);
}
@Override
public Component getListCellRendererComponent
(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
Indicator indicator = (Indicator) value;
IndicatorPanel indicatorPanel = new IndicatorPanel(chartFrame, indicator);
indicatorPanel.updateToolbox();
int height = Indicator.DEFAULT_HEIGHT != indicator.getMaximizedHeight()
? indicator.getMaximizedHeight()
: Indicator.DEFAULT_HEIGHT;
indicatorPanel.setMaximizedHeight(height);
return indicatorPanel;
}
}
}