package com.seventh7.mybatis.ui; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.openapi.ui.popup.PopupChooserBuilder; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.components.JBCheckBox; import com.intellij.ui.components.JBList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * @author yanglin */ public final class UiComponentFacade { private Project project; private FileEditorManager fileEditorManager; private UiComponentFacade(Project project) { this.project = project; this.fileEditorManager = FileEditorManager.getInstance(project); } public static UiComponentFacade getInstance(@NotNull Project project) { return new UiComponentFacade(project); } public VirtualFile showSingleFolderSelectionDialog(@NotNull String title, @Nullable VirtualFile toSelect, @Nullable VirtualFile... roots) { final FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor(); descriptor.setTitle(title); if (null != roots) { descriptor.setRoots(roots); } return FileChooser.chooseFile(descriptor, project, toSelect); } public JBPopup showListPopupWithSingleClickable(@NotNull String popupTitle, @NotNull ListSelectionListener popupListener, @NotNull String clickableTitle, @Nullable final ClickableListener clickableListener, @NotNull Object[] objs) { PopupChooserBuilder builder = createListPopupBuilder(popupTitle, popupListener, objs); JBCheckBox checkBox = new JBCheckBox(clickableTitle); builder.setSouthComponent(checkBox); final JBPopup popup = builder.createPopup(); if (null != clickableListener) { final Runnable runnable = new Runnable() { @Override public void run() { clickableListener.clicked(); } }; checkBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { popup.dispose(); setActionForExecutableListener(runnable, clickableListener); } }); } setPositionForShown(popup); return popup; } public JBPopup showListPopup(@NotNull String title, @Nullable final ListSelectionListener listener, @NotNull Object[] objs) { PopupChooserBuilder builder = createListPopupBuilder(title, listener, objs); JBPopup popup = builder.createPopup(); setPositionForShown(popup); return popup; } private void setPositionForShown(JBPopup popup) { Editor editor = fileEditorManager.getSelectedTextEditor(); if (null != editor) { popup.showInBestPositionFor(editor); } else { popup.showCenteredInCurrentWindow(project); } } private void setActionForExecutableListener(Runnable runnable, ExecutableListener listener) { final Application application = ApplicationManager.getApplication(); if (listener.isWriteAction()) { application.runWriteAction(runnable); } else { application.runReadAction(runnable); } } public PopupChooserBuilder createListPopupBuilder(@NotNull String title, @Nullable final ListSelectionListener listener, @NotNull Object... objs) { final JBList list = new JBList(objs); PopupChooserBuilder builder = new PopupChooserBuilder(list); builder.setTitle(title); if (null != listener) { final Runnable runnable = new Runnable() { @Override public void run() { listener.selected(list.getSelectedIndex()); } }; builder.setItemChoosenCallback(new Runnable() { @Override public void run() { setActionForExecutableListener(runnable, listener); } }); } return builder; } }