/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.swing;
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.core.config.ConfigSource;
import com.opengamma.core.config.impl.ConfigItem;
import com.opengamma.engine.view.ViewDefinition;
import com.opengamma.master.config.ConfigMaster;
/**
* Swing component with a text box at the top and a filtered list of views underneath
*/
public class ViewBrowserListComponent extends JComponent {
private static final long serialVersionUID = 1L;
private static final Logger s_logger = LoggerFactory.getLogger(ViewBrowserListComponent.class);
private ConfigSource _configSource;
private JList<ViewEntry> _viewList;
private ViewListModel _viewListModel;
private ConfigMaster _configMaster;
private JTextField _viewNameTextField;
public ViewBrowserListComponent(ConfigSource configSource, ConfigMaster configMaster) {
_configSource = configSource;
_configMaster = configMaster;
_viewList = new JList<ViewEntry>();
_viewListModel = new ViewListModel(_configMaster);
_viewList.setModel(_viewListModel);
_viewList.setCellRenderer(getViewListCellRenderer());
_viewList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
_viewNameTextField = new JTextField();
_viewNameTextField.setHorizontalAlignment(JTextField.LEFT);
_viewNameTextField.addKeyListener(new KeyListener() {
private void actionPerformed(KeyEvent e) {
JTextField field = _viewNameTextField;
_viewListModel.setFilter(field.getText());;
}
@Override
public void keyTyped(KeyEvent e) {
s_logger.warn("key code = {}", e.getKeyCode());
actionPerformed(e);
}
@Override
public void keyPressed(KeyEvent e) {
s_logger.warn("key pressed = {}", e.getKeyCode());
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
_viewList.requestFocusInWindow();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
_viewList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
@SuppressWarnings("unchecked")
JList<ViewEntry> cb = (JList<ViewEntry>) e.getSource();
final ViewEntry viewEntry = (ViewEntry) cb.getSelectedValue();
if (viewEntry != null) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
@SuppressWarnings("unchecked")
ConfigItem<ViewDefinition> configItem = (ConfigItem<ViewDefinition>) _configSource.get(viewEntry.getUniqueId());
if (configItem.getValue() != null) {
_viewNameTextField.setText(viewEntry.getName());
//_portfolioTree.setModel(getPortfolioTreeModel(configItem.getValue().getPortfolioId(), getToolContext()));
} else {
JOptionPane.showMessageDialog(null, "There is no portfolio set in the selected view", "No portfolio", JOptionPane.ERROR_MESSAGE);
}
}
});
}
}
});
// add key listener to skip from the top of the list, to the text box.
_viewList.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP && _viewList.getSelectedIndex() == 0) {
_viewNameTextField.requestFocusInWindow();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
setLayout(new BorderLayout());
JScrollPane scrollPane = new JScrollPane(_viewList);
add(_viewNameTextField, BorderLayout.PAGE_START);
add(scrollPane, BorderLayout.CENTER);
}
private ListCellRenderer<? super ViewEntry> getViewListCellRenderer() {
return new ViewListCellRenderer();
}
public ViewListModel getViewListModel() {
return _viewListModel;
}
}