package com.chrisfolger.needsmoredojo.intellij.dialog;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.event.*;
public class AddNewImportSelectionDialog extends DialogWrapper {
private JPanel contentPane;
private JList importList;
private JTextField importItem;
public AddNewImportSelectionDialog(@Nullable Project project) {
super(project);
createCenterPanel();
init();
}
@Nullable
@Override
protected JComponent createCenterPanel() {
return contentPane;
}
@Nullable
@Override
public JComponent getPreferredFocusedComponent() {
return importList;
}
public String getSelectedItem()
{
return importItem.getText();
}
private String getActualItem(Object listItem)
{
String result = (String) listItem;
if(result.indexOf(':') > -1)
{
return result.substring(2).trim();
}
return result;
}
public void show(final String[] choices, String firstChoice) {
DefaultListModel model = new DefaultListModel();
int selectedIndex = 0;
for (int i = 0; i < choices.length; i++)
{
String prefix = "";
if(i < 10)
{
prefix = i + ": ";
}
model.addElement(prefix + choices[i]);
if(choices[i].equals(firstChoice))
{
selectedIndex = i;
}
}
importList.setModel(model);
importList.setSelectedIndex(selectedIndex);
importItem.setText(getActualItem(importList.getSelectedValue()));
importList.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() >= KeyEvent.VK_0 && e.getKeyCode() <= KeyEvent.VK_9)
{
int index = e.getKeyCode() - KeyEvent.VK_0;
if(index < choices.length)
{
importList.setSelectedIndex(index);
}
}
}
@Override
public void keyReleased(KeyEvent e) {}
});
importList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
importItem.setText(getActualItem(importList.getSelectedValue()));
}
});
super.show();
}
}