mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-29 09:47:50 +08:00
Works
This commit is contained in:
parent
081823f5e8
commit
7a1289600e
@ -3,13 +3,10 @@
|
|||||||
package org.intellij.sdk.maxOpenPrj;
|
package org.intellij.sdk.maxOpenPrj;
|
||||||
|
|
||||||
import com.intellij.openapi.Disposable;
|
import com.intellij.openapi.Disposable;
|
||||||
import com.intellij.openapi.actionSystem.CommonShortcuts;
|
|
||||||
import com.intellij.openapi.components.ServiceManager;
|
import com.intellij.openapi.components.ServiceManager;
|
||||||
import com.intellij.openapi.project.DumbAwareAction;
|
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.project.ProjectManager;
|
import com.intellij.openapi.project.ProjectManager;
|
||||||
import com.intellij.openapi.project.ProjectManagerListener;
|
import com.intellij.openapi.project.ProjectManagerListener;
|
||||||
import com.intellij.openapi.ui.Messages;
|
|
||||||
import com.intellij.openapi.ui.popup.Balloon;
|
import com.intellij.openapi.ui.popup.Balloon;
|
||||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
||||||
import com.intellij.openapi.util.Disposer;
|
import com.intellij.openapi.util.Disposer;
|
||||||
@ -38,12 +35,9 @@ public class ProjectOpenCloseListener implements ProjectManagerListener, Disposa
|
|||||||
projectCountingService.incrProjectCount();
|
projectCountingService.incrProjectCount();
|
||||||
// See if the total # of projects violates the limit.
|
// See if the total # of projects violates the limit.
|
||||||
if (projectCountingService.projectLimitExceeded()) {
|
if (projectCountingService.projectLimitExceeded()) {
|
||||||
|
System.out.println("\n\nOpen limit transition called for: " + project.toString());
|
||||||
// Transitioned to outside the limit
|
// Transitioned to outside the limit
|
||||||
// Messages.showMessageDialog(
|
showBalloon("projectOpened", project, "Opening Project \"" + project.getName() + "\"", "The number of open projects exceeds the SDK plugin max_opened_projects limit.");
|
||||||
// "The number of open projects exceeds the SDK plugin max_opened_projects limit.",
|
|
||||||
// "Opening Project \"" + project.getName() + "\"",
|
|
||||||
// Messages.getErrorIcon());
|
|
||||||
showBalloon(project, "Opening Project \"" + project.getName() + "\"", "The number of open projects exceeds the SDK plugin max_opened_projects limit.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,44 +56,57 @@ public class ProjectOpenCloseListener implements ProjectManagerListener, Disposa
|
|||||||
projectCountingService.decrProjectCount();
|
projectCountingService.decrProjectCount();
|
||||||
// See if the total # of projects no longer violates the limit.
|
// See if the total # of projects no longer violates the limit.
|
||||||
if (!projectCountingService.projectLimitExceeded() && previouslyOverCount) {
|
if (!projectCountingService.projectLimitExceeded() && previouslyOverCount) {
|
||||||
// Transitioned from above the limit to within the limit.
|
System.out.println("\n\nCLOSED limit transition called for: " + project.toString());
|
||||||
// Messages.showMessageDialog(
|
// Transitioned to within the limit.
|
||||||
// "The number of open projects does not exceed the SDK plugin max_opened_projects limit.",
|
showBalloon("projectClosed", project, "\"" + project.getName() + "\" Has Been Closed", "The number of open projects is below the SDK plugin max_opened_projects limit.");
|
||||||
// "\"" + project.getName() + "\" Has Been Closed",
|
|
||||||
// Messages.getErrorIcon());
|
|
||||||
showBalloon(project, "\"" + project.getName() + "\" Has Been Closed", "The number of open projects is below the SDK plugin max_opened_projects limit.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
CLOSED limit transition called for: Project (name=testKotlin, containerState=DISPOSE_IN_PROGRESS, componentStore=/Users/jhake/Documents/source/scratch/testKotlin)
|
||||||
|
From: projectClosed - allProjects[2] = Project (name=conditional_operator_test, containerState=ACTIVE, componentStore=/Users/jhake/Documents/source/scratch/conditional_operator_test) , Open = true
|
||||||
|
From: projectClosed - allProjects[1] = Project (name=foobar, containerState=ACTIVE, componentStore=/Users/jhake/Documents/source/scratch/foobar) , Open = true
|
||||||
|
From: projectClosed - allProjects[0] = Project (name=SimpleTest, containerState=ACTIVE, componentStore=/Users/jhake/Documents/source/scratch/SimpleTest) , Open = true
|
||||||
|
*/
|
||||||
|
private void showBalloon(String caller, Project project, String title, String message) {
|
||||||
|
// Ensure the project is open. If not, use the next youngest one in the project list
|
||||||
|
ProjectManager projectManager = ProjectManager.getInstance();
|
||||||
|
Project[] allProjects = projectManager.getOpenProjects();
|
||||||
|
Project validProject = allProjects[allProjects.length - 1];
|
||||||
|
if (validProject == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
System.out.println(String.format("From: %s - validProject = %s", caller, validProject.toString()));
|
||||||
|
|
||||||
private void showBalloon(Project project, String title, String message) {
|
// Verify the place to put the balloon
|
||||||
|
final WindowManager manager = WindowManager.getInstance();
|
||||||
|
final JFrame frame = manager.getFrame(validProject);
|
||||||
|
JRootPane pane = frame.getRootPane();
|
||||||
|
if (pane == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Construct and show the balloon
|
||||||
JLabel component = new JLabel(message);
|
JLabel component = new JLabel(message);
|
||||||
final Balloon balloon = JBPopupFactory.getInstance().createBalloonBuilder(component)
|
final Balloon balloon = JBPopupFactory.getInstance().createBalloonBuilder(component)
|
||||||
.setShadow(true)
|
.setShadow(true)
|
||||||
.setAnimationCycle(200) // Was 0
|
.setAnimationCycle(200) // Was 0
|
||||||
.setHideOnClickOutside(true)
|
.setHideOnClickOutside(true)
|
||||||
// .setHideOnKeyOutside(true)
|
.setHideOnAction(false)
|
||||||
.setHideOnAction(true) // was false
|
|
||||||
.setFillColor(UIUtil.getControlColor())
|
.setFillColor(UIUtil.getControlColor())
|
||||||
.setTitle(title) // Added
|
.setTitle(title) // Added
|
||||||
.setFadeoutTime(5000) // Added
|
.setFadeoutTime(5000) // Added
|
||||||
.createBalloon();
|
.createBalloon();
|
||||||
// DumbAwareAction.create(e -> balloon.hide())
|
Disposer.register(validProject, balloon);
|
||||||
// .registerCustomShortcutSet(CommonShortcuts.ESCAPE, component);
|
balloon.showInCenterOf(pane);
|
||||||
Disposer.register(project, balloon);
|
|
||||||
// final Balloon.Position position = QuickEditAction.getBalloonPosition(editor);
|
// final Balloon.Position position = QuickEditAction.getBalloonPosition(editor);
|
||||||
// RelativePoint point = JBPopupFactory.getInstance().guessBestPopupLocation(editor);
|
// RelativePoint point = JBPopupFactory.getInstance().guessBestPopupLocation(editor);
|
||||||
// if (position == Balloon.Position.above) {
|
// if (position == Balloon.Position.above) {
|
||||||
// final Point p = point.getPoint();
|
// final Point p = point.getPoint();
|
||||||
// point = new RelativePoint(point.getComponent(), new Point(p.x, p.y - editor.getLineHeight()));
|
// point = new RelativePoint(point.getComponent(), new Point(p.x, p.y - editor.getLineHeight()));
|
||||||
// }
|
// }
|
||||||
ProjectManager PM = ProjectManager.getInstance();
|
|
||||||
Project[] AllProjects = PM.getOpenProjects();
|
|
||||||
Project prevProject = AllProjects[AllProjects.length - 1];
|
|
||||||
final WindowManager manager = WindowManager.getInstance();
|
|
||||||
final JFrame frame = prevProject != null ? manager.getFrame(prevProject) : manager.findVisibleFrame();
|
|
||||||
JRootPane pane = frame.getRootPane();
|
|
||||||
balloon.showInCenterOf(pane);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user