Refactoring

GitOrigin-RevId: 972c43b3dc74a6287cec0eb3d43b4a4ec663e74f
This commit is contained in:
Rustam Vishnyakov
2019-12-23 15:07:19 +00:00
committed by intellij-monorepo-bot
parent ccee533c85
commit 701fc823e5
3 changed files with 62 additions and 76 deletions
@@ -22,71 +22,56 @@ import java.awt.*;
import java.util.Objects;
import java.util.function.BooleanSupplier;
class LightEditFrameWrapper implements Disposable {
class LightEditFrameWrapper extends ProjectFrameHelper implements Disposable {
private final LightEditPanel myLightEditPanel;
private final ProjectFrameHelper myProjectFrameHelper;
private BooleanSupplier myCloseHandler;
private final BooleanSupplier myCloseHandler;
LightEditFrameWrapper(@NotNull LightEditPanel lightEditPanel) {
myLightEditPanel = lightEditPanel;
myProjectFrameHelper = allocateFrame();
Disposer.register(this, myProjectFrameHelper);
myProjectFrameHelper.getFrame().setJMenuBar(new LightEditMenuBar());
private LightEditPanel myEditPanel;
LightEditFrameWrapper(@NotNull IdeFrameImpl frame, @NotNull BooleanSupplier closeHandler) {
super(frame, null);
getFrame().setJMenuBar(new LightEditMenuBar());
myCloseHandler = closeHandler;
}
@NotNull
LightEditPanel getLightEditPanel() {
return myLightEditPanel;
return myEditPanel;
}
@NotNull
private ProjectFrameHelper allocateFrame() {
return ((WindowManagerImpl)WindowManager.getInstance()).allocateFrame(LightEditUtil.getProject(), () -> {
return new ProjectFrameHelper(ProjectFrameAllocatorKt.createNewProjectFrame(), null) {
@NotNull
@Override
protected IdeRootPane createIdeRootPane() {
return new LightEditRootPane(getFrame(), this, this);
}
@Override
protected void installDefaultProjectStatusBarWidgets(@NotNull Project project) {
IdeStatusBarImpl statusBar = Objects.requireNonNull(getStatusBar());
addWidget(project, statusBar, new LightEditPositionWidget(myLightEditPanel.getEditorManager()),
StatusBar.Anchors.before(IdeMessagePanel.FATAL_ERROR));
addWidget(project, statusBar, new LightEditAutosaveWidget(myLightEditPanel.getEditorManager()),
StatusBar.Anchors.before(IdeMessagePanel.FATAL_ERROR));
statusBar.updateWidgets();
}
@NotNull
@Override
protected CloseProjectWindowHelper createCloseProjectWindowHelper() {
return new CloseProjectWindowHelper() {
@Override
public void windowClosing(@Nullable Project project) {
if (myCloseHandler.getAsBoolean()) {
super.windowClosing(project);
}
}
};
}
};
});
@Override
protected IdeRootPane createIdeRootPane() {
return new LightEditRootPane(getFrame(), this, this);
}
public void setTitle(@NotNull String title) {
IdeFrameImpl frame = myProjectFrameHelper.getFrame();
frame.setTitle(title);
@Override
protected void installDefaultProjectStatusBarWidgets(@NotNull Project project) {
LightEditorManager editorManager = LightEditService.getInstance().getEditorManager();
IdeStatusBarImpl statusBar = Objects.requireNonNull(getStatusBar());
addWidget(this, statusBar, new LightEditPositionWidget(editorManager),
StatusBar.Anchors.before(IdeMessagePanel.FATAL_ERROR));
addWidget(this, statusBar, new LightEditAutosaveWidget(editorManager),
StatusBar.Anchors.before(IdeMessagePanel.FATAL_ERROR));
statusBar.updateWidgets();
}
public void setOnCloseHandler(@NotNull BooleanSupplier closeHandler) {
myCloseHandler = closeHandler;
@NotNull
@Override
protected CloseProjectWindowHelper createCloseProjectWindowHelper() {
return new CloseProjectWindowHelper() {
@Override
public void windowClosing(@Nullable Project project) {
if (myCloseHandler.getAsBoolean()) {
super.windowClosing(project);
}
}
};
}
@Override
public void dispose() {
Disposer.dispose(myEditPanel);
}
private class LightEditRootPane extends IdeRootPane {
@@ -97,7 +82,8 @@ class LightEditFrameWrapper implements Disposable {
@NotNull
@Override
protected Component getCenterComponent(@NotNull JFrame frame, @NotNull Disposable parentDisposable) {
return myLightEditPanel;
myEditPanel = new LightEditPanel();
return myEditPanel;
}
@NotNull
@@ -124,4 +110,10 @@ class LightEditFrameWrapper implements Disposable {
protected void deinstallNorthComponents() {
}
}
static LightEditFrameWrapper allocate(@NotNull BooleanSupplier closeHandler) {
return (LightEditFrameWrapper)((WindowManagerImpl)WindowManager.getInstance()).allocateFrame(
LightEditUtil.getProject(),
() -> new LightEditFrameWrapper(ProjectFrameAllocatorKt.createNewProjectFrame(), closeHandler));
}
}
@@ -15,19 +15,14 @@ public class LightEditPanel extends JPanel implements Disposable {
private final LightEditorManager myEditorManager;
private final LightEditTabs myTabs;
public LightEditPanel(LightEditorManager editorManager) {
myEditorManager = editorManager;
public LightEditPanel() {
myEditorManager = LightEditService.getInstance().getEditorManager();
setLayout(new BorderLayout());
myTabs = new LightEditTabs(this, myEditorManager);
add(myTabs, BorderLayout.CENTER);
Disposer.register(this, myTabs);
}
@NotNull
LightEditorManager getEditorManager() {
return myEditorManager;
}
public LightEditTabs getTabs() {
return myTabs;
}
@@ -29,7 +29,6 @@ public class LightEditService implements Disposable, LightEditorListener, Persis
private static final Logger LOG = Logger.getInstance(LightEditService.class);
private LightEditFrameWrapper myFrameWrapper;
private boolean myWrapperIsStale;
private final LightEditorManager myEditorManager;
private final LightEditConfiguration myConfiguration = new LightEditConfiguration();
@@ -55,19 +54,20 @@ public class LightEditService implements Disposable, LightEditorListener, Persis
}
private void init() {
if (myFrameWrapper == null || myWrapperIsStale) {
final LightEditPanel editorPanel = new LightEditPanel(myEditorManager);
myFrameWrapper = new LightEditFrameWrapper(editorPanel);
myFrameWrapper.setOnCloseHandler(()-> closeEditorWindow());
myWrapperIsStale = false;
if (myFrameWrapper == null) {
myFrameWrapper = LightEditFrameWrapper.allocate(()->closeEditorWindow());
LOG.info("Frame created");
}
else {
myFrameWrapper.getFrame().setVisible(true);
LOG.info("Window opened");
}
}
public void showEditorWindow() {
if (!ApplicationManager.getApplication().isUnitTestMode()) {
init();
myFrameWrapper.setTitle(getAppName());
myFrameWrapper.getFrame().setTitle(getAppName());
}
}
@@ -127,11 +127,10 @@ public class LightEditService implements Disposable, LightEditorListener, Persis
public boolean closeEditorWindow() {
if (canClose()) {
disposeEditorPanel();
myWrapperIsStale = true;
Disposer.dispose(myEditorManager);
myFrameWrapper.getFrame().setVisible(false);
LOG.info("Window closed");
if (ProjectManager.getInstance().getOpenProjects().length == 0 && WelcomeFrame.getInstance() == null) {
disposeFrameWrapper();
LOG.info("No open projects or welcome frame, exiting");
try {
ApplicationManager.getApplication().exit();
@@ -167,27 +166,27 @@ public class LightEditService implements Disposable, LightEditorListener, Persis
}
public LightEditPanel getEditPanel() {
assert !Disposer.isDisposed(myFrameWrapper.getLightEditPanel());
return myFrameWrapper.getLightEditPanel();
}
private void disposeEditorPanel() {
LightEditPanel editorPanel = getEditPanel();
Disposer.dispose(editorPanel);
}
@Override
public void dispose() {
if (myFrameWrapper != null) {
disposeEditorPanel();
Disposer.dispose(myFrameWrapper);
LOG.info("Frame disposed");
disposeFrameWrapper();
}
}
private void disposeFrameWrapper() {
Disposer.dispose(myFrameWrapper);
myFrameWrapper = null;
LOG.info("Frame disposed");
}
@Override
public void afterSelect(@Nullable LightEditorInfo editorInfo) {
if (myFrameWrapper != null && !myWrapperIsStale) {
myFrameWrapper.setTitle(getAppName() + (editorInfo != null ? ": " + editorInfo.getFile().getPresentableUrl() : ""));
if (myFrameWrapper != null) {
myFrameWrapper.getFrame().setTitle(getAppName() + (editorInfo != null ? ": " + editorInfo.getFile().getPresentableUrl() : ""));
}
}