use of com.intellij.execution.KillableProcess in project intellij-community by JetBrains.
the class ShowRunningListAction method getCurrentState.
private static Pair<? extends JComponent, String> getCurrentState(@NotNull List<Project> projects) {
NonOpaquePanel panel = new NonOpaquePanel(new GridLayout(0, 1, 10, 10));
StringBuilder state = new StringBuilder();
for (int i = 0; i < projects.size(); i++) {
Project project = projects.get(i);
final ExecutionManagerImpl executionManager = ExecutionManagerImpl.getInstance(project);
List<RunContentDescriptor> runningDescriptors = executionManager.getRunningDescriptors(Condition.TRUE);
if (!runningDescriptors.isEmpty() && projects.size() > 1) {
state.append(project.getName());
panel.add(new JLabel("<html><body><b>Project '" + project.getName() + "'</b></body></html>"));
}
for (RunContentDescriptor descriptor : runningDescriptors) {
Set<Executor> executors = executionManager.getExecutors(descriptor);
for (Executor executor : executors) {
state.append(System.identityHashCode(descriptor.getAttachedContent())).append("@").append(System.identityHashCode(executor.getIcon())).append(";");
ProcessHandler processHandler = descriptor.getProcessHandler();
Icon icon = (processHandler instanceof KillableProcess && processHandler.isProcessTerminating()) ? AllIcons.Debugger.KillProcess : executor.getIcon();
JLabel label = new JLabel("<html><body><a href=\"\">" + descriptor.getDisplayName() + "</a></body></html>", icon, SwingConstants.LEADING);
label.setIconTextGap(JBUI.scale(2));
label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
label.putClientProperty(KEY, Trinity.create(project, executor, descriptor));
panel.add(label);
}
}
}
if (panel.getComponentCount() == 0) {
panel.setBorder(JBUI.Borders.empty(10));
panel.add(new JLabel(ExecutionBundle.message("show.running.list.balloon.nothing"), SwingConstants.CENTER));
} else {
panel.setBorder(JBUI.Borders.empty(10, 10, 0, 10));
JLabel label = new JLabel(ExecutionBundle.message("show.running.list.balloon.hint"));
label.setFont(JBUI.Fonts.miniFont());
panel.add(label);
}
return Pair.create(panel, state.toString());
}
use of com.intellij.execution.KillableProcess in project intellij-community by JetBrains.
the class StopAction method update.
@Override
public void update(final AnActionEvent e) {
boolean enable = false;
Icon icon = getTemplatePresentation().getIcon();
String description = getTemplatePresentation().getDescription();
Presentation presentation = e.getPresentation();
if (isPlaceGlobal(e)) {
List<RunContentDescriptor> stoppableDescriptors = getActiveStoppableDescriptors(e.getDataContext());
List<Pair<TaskInfo, ProgressIndicator>> cancellableProcesses = getCancellableProcesses(e.getProject());
int todoSize = stoppableDescriptors.size() + cancellableProcesses.size();
if (todoSize > 1) {
presentation.setText(getTemplatePresentation().getText() + "...");
} else if (todoSize == 1) {
if (stoppableDescriptors.size() == 1) {
presentation.setText(ExecutionBundle.message("stop.configuration.action.name", StringUtil.escapeMnemonics(stoppableDescriptors.get(0).getDisplayName())));
} else {
TaskInfo taskInfo = cancellableProcesses.get(0).first;
presentation.setText(taskInfo.getCancelText() + " " + taskInfo.getTitle());
}
} else {
presentation.setText(getTemplatePresentation().getText());
}
enable = todoSize > 0;
if (todoSize > 1) {
icon = IconUtil.addText(icon, String.valueOf(todoSize));
}
} else {
RunContentDescriptor contentDescriptor = e.getData(LangDataKeys.RUN_CONTENT_DESCRIPTOR);
ProcessHandler processHandler = contentDescriptor == null ? null : contentDescriptor.getProcessHandler();
if (processHandler != null && !processHandler.isProcessTerminated()) {
if (!processHandler.isProcessTerminating()) {
enable = true;
} else if (processHandler instanceof KillableProcess && ((KillableProcess) processHandler).canKillProcess()) {
enable = true;
icon = AllIcons.Debugger.KillProcess;
description = "Kill process";
}
}
RunProfile runProfile = e.getData(LangDataKeys.RUN_PROFILE);
if (runProfile == null && contentDescriptor == null) {
presentation.setText(getTemplatePresentation().getText());
} else {
presentation.setText(ExecutionBundle.message("stop.configuration.action.name", StringUtil.escapeMnemonics(runProfile == null ? contentDescriptor.getDisplayName() : runProfile.getName())));
}
}
presentation.setEnabled(enable);
presentation.setIcon(icon);
presentation.setDescription(description);
}
use of com.intellij.execution.KillableProcess in project intellij-community by JetBrains.
the class StopProcessAction method update.
public static void update(@NotNull Presentation presentation, @NotNull Presentation templatePresentation, @Nullable ProcessHandler processHandler) {
boolean enable = false;
Icon icon = templatePresentation.getIcon();
String description = templatePresentation.getDescription();
if (processHandler != null && !processHandler.isProcessTerminated()) {
enable = true;
if (processHandler.isProcessTerminating() && processHandler instanceof KillableProcess) {
KillableProcess killableProcess = (KillableProcess) processHandler;
if (killableProcess.canKillProcess()) {
// 'force quite' action presentation
icon = AllIcons.Debugger.KillProcess;
description = "Kill process";
}
}
}
presentation.setEnabled(enable);
presentation.setIcon(icon);
presentation.setDescription(description);
}
Aggregations