package gw.plugin.ij.util;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.impl.PsiAwareFileEditorManagerImpl;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.WindowManager;
import gw.lang.reflect.module.IModule;
import gw.plugin.ij.filetypes.GosuFileTypes;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
public class UIUtil {
public static void closeAllGosuEditors(@NotNull Project project, @Nullable IModule gsModule) {
final FileEditorManager manager = PsiAwareFileEditorManagerImpl.getInstance(project);
for (VirtualFile file : manager.getOpenFiles()) {
if (GosuFileTypes.isGosuFile(file)) {
if (gsModule == null || GosuModuleUtil.findModuleForFile(file, project) == gsModule) {
manager.closeFile(file);
}
}
}
}
@NotNull
public static JFrame getFrame(Project project) {
return (JFrame) WindowManager.getInstance().getIdeFrame(project);
}
@NotNull
public static JFrame getFrame() {
return (JFrame) WindowManager.getInstance().getIdeFrame(null);
}
public static void settleModalEventQueue() {
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
while (eventQueue.peekEvent() != null) {
try {
AWTEvent event = eventQueue.getNextEvent();
Object src = event.getSource();
if (event instanceof ActiveEvent) {
((ActiveEvent) event).dispatch();
} else if (src instanceof Component) {
((Component) src).dispatchEvent(event);
} else if (src instanceof MenuComponent) {
((MenuComponent) src).dispatchEvent(event);
}
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
}
}