package com.intellij.remoteServer.impl.runtime.ui; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowAnchor; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.remoteServer.configuration.RemoteServer; import com.intellij.remoteServer.configuration.RemoteServerListener; import com.intellij.remoteServer.configuration.RemoteServersManager; import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentFactory; import icons.RemoteServersIcons; import org.jetbrains.annotations.NotNull; /** * Created by IntelliJ IDEA. * User: michael.golubev */ public class ServersToolWindow { public static final String ID = "Application Servers"; private final Project myProject; private final ToolWindow myToolWindow; public ServersToolWindow(final Project project) { myProject = project; for (RemoteServersViewContributor contributor : RemoteServersViewContributor.EP_NAME.getExtensions()) { contributor.setupAvailabilityListener(project, new Runnable() { @Override public void run() { updateWindowAvailable(true); } }); } myProject.getMessageBus().connect().subscribe(RemoteServerListener.TOPIC, new RemoteServerListener() { @Override public void serverAdded(@NotNull RemoteServer<?> server) { updateWindowAvailable(true); } @Override public void serverRemoved(@NotNull RemoteServer<?> server) { updateWindowAvailable(false); } }); myToolWindow = ToolWindowManager.getInstance(project).registerToolWindow(ID, false, ToolWindowAnchor.BOTTOM); myToolWindow.setIcon(RemoteServersIcons.ServersToolWindow); final ContentFactory contentFactory = ContentFactory.SERVICE.getInstance(); final ServersToolWindowContent serversContent = new ServersToolWindowContent(project); Content content = contentFactory.createContent(serversContent.getMainPanel(), null, false); Disposer.register(content, serversContent); myToolWindow.getContentManager().addContent(content); updateWindowAvailable(false); } private void updateWindowAvailable(boolean showIfAvailable) { boolean available = isAvailable(); boolean doShow = !myToolWindow.isAvailable() && available; if (myToolWindow.isAvailable() && !available) { myToolWindow.hide(null); } myToolWindow.setAvailable(available, null); if (showIfAvailable && doShow) { myToolWindow.show(null); } } private boolean isAvailable() { if (!RemoteServersManager.getInstance().getServers().isEmpty()) { return true; } for (RemoteServersViewContributor contributor : RemoteServersViewContributor.EP_NAME.getExtensions()) { if (contributor.canContribute(myProject)) { return true; } } return false; } }