/* * Copyright 2013 Hewlett-Packard Development Company, L.P * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.hp.alm.ali.idea.ui; import com.intellij.openapi.project.Project; import javax.swing.JComboBox; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; public class ChooserBox<E> extends JComboBox implements ItemListener { private int lastSelectedIndex; final protected Project project; public ChooserBox(Project project) { this.project = project; addItemListener(this); } @Override public void itemStateChanged(ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED) { if(e.getItem() instanceof ChoosingItem) { hidePopup(); showChooser((ChoosingItem<E>)e.getItem()); } lastSelectedIndex = getSelectedIndex(); } } private void showChooser(ChoosingItem<E> chooser) { TableFilterDialog<E> filterDialog = new TableFilterDialog<E>(project, chooser.toString(), false, "Name", chooser.getItemsProvider(), chooser.getItemRenderer()); filterDialog.setVisible(true); if(filterDialog.isOk()) { E selected = filterDialog.getSelectedItem(); Object comboItem = chooser.create(selected); for(int i = 0; i < getItemCount(); i++) { if(getItemAt(i).equals(comboItem)) { setSelectedIndex(i); return; } } addItem(comboItem); setSelectedIndex(getItemCount() - 1); } else { setSelectedIndex(lastSelectedIndex); } } }