package com.github.masahirosuzuka.PhoneGapIntelliJPlugin.runner.ui;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.ui.ComboBox;
import org.jetbrains.annotations.NotNull;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Collection;
@SuppressWarnings("unchecked")
public class ComboBoxWithMoreOption extends ComboBox {
@NotNull
private final Collection<String> myStartItems;
@NotNull
private final Collection<String> myExtendedItems;
@NotNull
private final String myMoreItem;
public ComboBoxWithMoreOption(@NotNull Collection<String> startItems, @NotNull Collection<String> extendedItems) {
super();
this.myStartItems = startItems;
myExtendedItems = extendedItems;
myMoreItem = "More options...";
initItems();
}
public void initItems() {
addItems(this, myStartItems);
this.addItem(myMoreItem);
this.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.DESELECTED && myMoreItem.equals(getSelectedItem())) {
final Object prevItem = e.getItem();
ApplicationManager.getApplication().invokeLater(() -> {
if (getItemCount() != myStartItems.size() + myExtendedItems.size()) {
ComboBoxWithMoreOption.this.extend();
setSelectedItem(prevItem);
}
if (!ComboBoxWithMoreOption.this.isPopupVisible()) {
ComboBoxWithMoreOption.this.showPopup();
}
});
}
}
});
}
public void setSelectedWithExtend(String value) {
if (!myStartItems.contains(value)) {
extend();
}
setSelectedItem(value);
}
private static void addItems(ComboBox box, Collection<String> items) {
for (String item : items) {
box.addItem(item);
}
}
public void extend() {
removeItem(myMoreItem);
addItems(this, myExtendedItems);
}
}