mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Refactoring: move common code to platform
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.designer;
|
||||
|
||||
import com.intellij.openapi.ui.ThreeComponentsSplitter;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public interface DesignerEditorPanelFacade {
|
||||
Object getClientProperty(Object key);
|
||||
|
||||
void putClientProperty(Object key, Object value);
|
||||
|
||||
ThreeComponentsSplitter getContentSplitter();
|
||||
}
|
||||
+4
-4
@@ -54,7 +54,7 @@ public class LightToolWindow extends JPanel {
|
||||
private final ThreeComponentsSplitter myContentSplitter;
|
||||
private ToolWindowAnchor myAnchor;
|
||||
private final Project myProject;
|
||||
private final AbstractToolWindowManager myManager;
|
||||
private final LightToolWindowManager myManager;
|
||||
private final PropertiesComponent myPropertiesComponent;
|
||||
private boolean myShowContent;
|
||||
private final String myShowStateKey;
|
||||
@@ -86,7 +86,7 @@ public class LightToolWindow extends JPanel {
|
||||
JComponent focusedComponent,
|
||||
ThreeComponentsSplitter contentSplitter,
|
||||
ToolWindowAnchor anchor,
|
||||
AbstractToolWindowManager manager,
|
||||
LightToolWindowManager manager,
|
||||
Project project,
|
||||
PropertiesComponent propertiesComponent,
|
||||
String key,
|
||||
@@ -101,8 +101,8 @@ public class LightToolWindow extends JPanel {
|
||||
myManager = manager;
|
||||
myPropertiesComponent = propertiesComponent;
|
||||
|
||||
myShowStateKey = AbstractToolWindowManager.EDITOR_MODE + key + ".SHOW";
|
||||
myWidthKey = AbstractToolWindowManager.EDITOR_MODE + key + ".WIDTH";
|
||||
myShowStateKey = LightToolWindowManager.EDITOR_MODE + key + ".SHOW";
|
||||
myWidthKey = LightToolWindowManager.EDITOR_MODE + key + ".WIDTH";
|
||||
|
||||
HeaderPanel header = new HeaderPanel();
|
||||
header.setLayout(new BorderLayout());
|
||||
@@ -0,0 +1,323 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.designer;
|
||||
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.actionSystem.ActionGroup;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ProjectComponent;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
|
||||
import com.intellij.openapi.project.DumbAwareRunnable;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.startup.StartupManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ToolWindowAnchor;
|
||||
import com.intellij.openapi.wm.ex.ToolWindowEx;
|
||||
import com.intellij.util.ParameterizedRunnable;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import com.intellij.util.ui.update.MergingUpdateQueue;
|
||||
import com.intellij.util.ui.update.Update;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public abstract class LightToolWindowManager implements ProjectComponent {
|
||||
public static final String EDITOR_MODE = "UI_DESIGNER_EDITOR_MODE.";
|
||||
|
||||
private final MergingUpdateQueue myWindowQueue = new MergingUpdateQueue(getComponentName(), 200, true, null);
|
||||
protected final Project myProject;
|
||||
protected final FileEditorManager myFileEditorManager;
|
||||
protected volatile ToolWindow myToolWindow;
|
||||
private volatile boolean myToolWindowDisposed;
|
||||
|
||||
private final PropertiesComponent myPropertiesComponent;
|
||||
public final String myEditorModeKey;
|
||||
private ToggleEditorModeAction myLeftEditorModeAction;
|
||||
private ToggleEditorModeAction myRightEditorModeAction;
|
||||
|
||||
private MessageBusConnection myConnection;
|
||||
private final FileEditorManagerListener myListener = new FileEditorManagerListener() {
|
||||
@Override
|
||||
public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
|
||||
bindToDesigner(getActiveDesigner());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
|
||||
ApplicationManager.getApplication().invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
bindToDesigner(getActiveDesigner());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void selectionChanged(@NotNull FileEditorManagerEvent event) {
|
||||
bindToDesigner(getDesigner(event.getNewEditor()));
|
||||
}
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ToolWindow
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
protected LightToolWindowManager(Project project, FileEditorManager fileEditorManager) {
|
||||
myProject = project;
|
||||
myFileEditorManager = fileEditorManager;
|
||||
myPropertiesComponent = PropertiesComponent.getInstance(myProject);
|
||||
myEditorModeKey = EDITOR_MODE + getComponentName() + ".STATE";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void projectOpened() {
|
||||
initToolWindow();
|
||||
|
||||
StartupManager.getInstance(myProject).runWhenProjectIsInitialized(new DumbAwareRunnable() {
|
||||
public void run() {
|
||||
if (getEditorMode() == null) {
|
||||
initListeners();
|
||||
bindToDesigner(getActiveDesigner());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void projectClosed() {
|
||||
if (!myToolWindowDisposed) {
|
||||
disposeComponent();
|
||||
myToolWindowDisposed = true;
|
||||
myToolWindow = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void initListeners() {
|
||||
myConnection = myProject.getMessageBus().connect(myProject);
|
||||
myConnection.subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, myListener);
|
||||
}
|
||||
|
||||
private void removeListeners() {
|
||||
myConnection.disconnect();
|
||||
myConnection = null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected abstract DesignerEditorPanelFacade getDesigner(FileEditor editor);
|
||||
|
||||
@Nullable
|
||||
public DesignerEditorPanelFacade getActiveDesigner() {
|
||||
for (FileEditor editor : myFileEditorManager.getSelectedEditors()) {
|
||||
DesignerEditorPanelFacade designer = getDesigner(editor);
|
||||
if (designer != null) {
|
||||
return designer;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void bindToDesigner(final DesignerEditorPanelFacade designer) {
|
||||
myWindowQueue.cancelAllUpdates();
|
||||
myWindowQueue.queue(new Update("update") {
|
||||
@Override
|
||||
public void run() {
|
||||
if (myToolWindowDisposed) {
|
||||
return;
|
||||
}
|
||||
if (myToolWindow == null) {
|
||||
if (designer == null) {
|
||||
return;
|
||||
}
|
||||
initToolWindow();
|
||||
}
|
||||
updateToolWindow(designer);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected abstract void initToolWindow();
|
||||
|
||||
protected abstract void updateToolWindow(@Nullable DesignerEditorPanelFacade designer);
|
||||
|
||||
protected final void initGearActions() {
|
||||
ToolWindowEx toolWindow = (ToolWindowEx)myToolWindow;
|
||||
toolWindow.setAdditionalGearActions(new DefaultActionGroup(createGearActions()));
|
||||
}
|
||||
|
||||
protected abstract ToolWindowAnchor getAnchor();
|
||||
|
||||
@Override
|
||||
public void initComponent() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disposeComponent() {
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// LightToolWindow
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public final ActionGroup createGearActions() {
|
||||
DefaultActionGroup group = new DefaultActionGroup("In Editor Mode", true);
|
||||
|
||||
if (myLeftEditorModeAction == null) {
|
||||
myLeftEditorModeAction = createToggleAction(ToolWindowAnchor.LEFT);
|
||||
}
|
||||
group.add(myLeftEditorModeAction);
|
||||
|
||||
if (myRightEditorModeAction == null) {
|
||||
myRightEditorModeAction = createToggleAction(ToolWindowAnchor.RIGHT);
|
||||
}
|
||||
group.add(myRightEditorModeAction);
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
protected abstract ToggleEditorModeAction createToggleAction(ToolWindowAnchor anchor);
|
||||
|
||||
public final void bind(DesignerEditorPanelFacade designer) {
|
||||
if (isEditorMode()) {
|
||||
myCreateAction.run(designer);
|
||||
}
|
||||
}
|
||||
|
||||
public final void dispose(DesignerEditorPanelFacade designer) {
|
||||
if (isEditorMode()) {
|
||||
disposeContent(designer);
|
||||
}
|
||||
}
|
||||
|
||||
protected final Object getContent(DesignerEditorPanelFacade designer) {
|
||||
LightToolWindow toolWindow = (LightToolWindow)designer.getClientProperty(getComponentName());
|
||||
return toolWindow.getContent();
|
||||
}
|
||||
|
||||
protected abstract LightToolWindow createContent(DesignerEditorPanelFacade designer);
|
||||
|
||||
protected final LightToolWindow createContent(DesignerEditorPanelFacade designer,
|
||||
LightToolWindowContent content,
|
||||
String title,
|
||||
Icon icon,
|
||||
JComponent component,
|
||||
JComponent focusedComponent,
|
||||
int defaultWidth,
|
||||
AnAction[] actions) {
|
||||
return new LightToolWindow(content,
|
||||
title,
|
||||
icon,
|
||||
component,
|
||||
focusedComponent,
|
||||
designer.getContentSplitter(),
|
||||
getEditorMode(),
|
||||
this,
|
||||
myProject,
|
||||
myPropertiesComponent,
|
||||
getComponentName(),
|
||||
defaultWidth,
|
||||
actions);
|
||||
}
|
||||
|
||||
protected final void disposeContent(DesignerEditorPanelFacade designer) {
|
||||
String key = getComponentName();
|
||||
LightToolWindow toolWindow = (LightToolWindow)designer.getClientProperty(key);
|
||||
designer.putClientProperty(key, null);
|
||||
toolWindow.dispose();
|
||||
}
|
||||
|
||||
private final ParameterizedRunnable<DesignerEditorPanelFacade> myCreateAction = new ParameterizedRunnable<DesignerEditorPanelFacade>() {
|
||||
@Override
|
||||
public void run(DesignerEditorPanelFacade designer) {
|
||||
designer.putClientProperty(getComponentName(), createContent(designer));
|
||||
}
|
||||
};
|
||||
|
||||
private final ParameterizedRunnable<DesignerEditorPanelFacade> myUpdateAnchorAction =
|
||||
new ParameterizedRunnable<DesignerEditorPanelFacade>() {
|
||||
@Override
|
||||
public void run(DesignerEditorPanelFacade designer) {
|
||||
LightToolWindow toolWindow = (LightToolWindow)designer.getClientProperty(getComponentName());
|
||||
toolWindow.updateAnchor(getEditorMode());
|
||||
}
|
||||
};
|
||||
|
||||
private final ParameterizedRunnable<DesignerEditorPanelFacade> myDisposeAction = new ParameterizedRunnable<DesignerEditorPanelFacade>() {
|
||||
@Override
|
||||
public void run(DesignerEditorPanelFacade designer) {
|
||||
disposeContent(designer);
|
||||
}
|
||||
};
|
||||
|
||||
private void runUpdateContent(ParameterizedRunnable<DesignerEditorPanelFacade> action) {
|
||||
for (FileEditor editor : myFileEditorManager.getAllEditors()) {
|
||||
DesignerEditorPanelFacade designer = getDesigner(editor);
|
||||
if (designer != null) {
|
||||
action.run(designer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected final boolean isEditorMode() {
|
||||
return getEditorMode() != null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
final ToolWindowAnchor getEditorMode() {
|
||||
String value = myPropertiesComponent.getValue(myEditorModeKey);
|
||||
if (value == null) {
|
||||
return getAnchor();
|
||||
}
|
||||
return value.equals("ToolWindow") ? null : ToolWindowAnchor.fromText(value);
|
||||
}
|
||||
|
||||
final void setEditorMode(@Nullable ToolWindowAnchor newState) {
|
||||
ToolWindowAnchor oldState = getEditorMode();
|
||||
myPropertiesComponent.setValue(myEditorModeKey, newState == null ? "ToolWindow" : newState.toString());
|
||||
|
||||
if (oldState != null && newState != null) {
|
||||
runUpdateContent(myUpdateAnchorAction);
|
||||
}
|
||||
else if (newState != null) {
|
||||
removeListeners();
|
||||
updateToolWindow(null);
|
||||
runUpdateContent(myCreateAction);
|
||||
}
|
||||
else {
|
||||
runUpdateContent(myDisposeAction);
|
||||
initListeners();
|
||||
bindToDesigner(getActiveDesigner());
|
||||
}
|
||||
}
|
||||
|
||||
final ToolWindow getToolWindow() {
|
||||
return myToolWindow;
|
||||
}
|
||||
}
|
||||
+6
-11
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.designer;
|
||||
|
||||
import com.intellij.designer.palette.PaletteToolWindowManager;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.ToggleAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -25,12 +24,12 @@ import com.intellij.openapi.wm.ToolWindowAnchor;
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public class ToggleEditorModeAction extends ToggleAction {
|
||||
private final AbstractToolWindowManager myManager;
|
||||
private final Project myProject;
|
||||
public abstract class ToggleEditorModeAction extends ToggleAction {
|
||||
protected final LightToolWindowManager myManager;
|
||||
protected final Project myProject;
|
||||
private final ToolWindowAnchor myAnchor;
|
||||
|
||||
public ToggleEditorModeAction(AbstractToolWindowManager manager, Project project, ToolWindowAnchor anchor) {
|
||||
public ToggleEditorModeAction(LightToolWindowManager manager, Project project, ToolWindowAnchor anchor) {
|
||||
super(StringUtil.capitalize(anchor.toString()), "Pin/unpin tool window to " + anchor + " side UI Designer Editor", null);
|
||||
myManager = manager;
|
||||
myProject = project;
|
||||
@@ -47,7 +46,7 @@ public class ToggleEditorModeAction extends ToggleAction {
|
||||
if (state) {
|
||||
myManager.setEditorMode(myAnchor);
|
||||
|
||||
AbstractToolWindowManager manager = getOppositeManager();
|
||||
LightToolWindowManager manager = getOppositeManager();
|
||||
if (manager.getEditorMode() == myAnchor) {
|
||||
manager.setEditorMode(myAnchor == ToolWindowAnchor.LEFT ? ToolWindowAnchor.RIGHT : ToolWindowAnchor.LEFT);
|
||||
}
|
||||
@@ -57,9 +56,5 @@ public class ToggleEditorModeAction extends ToggleAction {
|
||||
}
|
||||
}
|
||||
|
||||
private AbstractToolWindowManager getOppositeManager() {
|
||||
AbstractToolWindowManager designerManager = DesignerToolWindowManager.getInstance(myProject);
|
||||
AbstractToolWindowManager paletteManager = PaletteToolWindowManager.getInstance(myProject);
|
||||
return myManager == designerManager ? paletteManager : designerManager;
|
||||
}
|
||||
protected abstract LightToolWindowManager getOppositeManager();
|
||||
}
|
||||
+14
-286
@@ -15,121 +15,25 @@
|
||||
*/
|
||||
package com.intellij.designer;
|
||||
|
||||
import com.intellij.designer.designSurface.DesignerEditorPanel;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.actionSystem.ActionGroup;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ProjectComponent;
|
||||
import com.intellij.designer.palette.PaletteToolWindowManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
|
||||
import com.intellij.openapi.project.DumbAwareRunnable;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.startup.StartupManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ToolWindowAnchor;
|
||||
import com.intellij.openapi.wm.ex.ToolWindowEx;
|
||||
import com.intellij.util.ParameterizedRunnable;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import com.intellij.util.ui.update.MergingUpdateQueue;
|
||||
import com.intellij.util.ui.update.Update;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public abstract class AbstractToolWindowManager implements ProjectComponent {
|
||||
public static final String EDITOR_MODE = "UI_DESIGNER_EDITOR_MODE.";
|
||||
|
||||
private final MergingUpdateQueue myWindowQueue = new MergingUpdateQueue(getComponentName(), 200, true, null);
|
||||
protected final Project myProject;
|
||||
protected final FileEditorManager myFileEditorManager;
|
||||
protected volatile ToolWindow myToolWindow;
|
||||
private volatile boolean myToolWindowDisposed;
|
||||
|
||||
private final PropertiesComponent myPropertiesComponent;
|
||||
public final String myEditorModeKey;
|
||||
private ToggleEditorModeAction myLeftEditorModeAction;
|
||||
private ToggleEditorModeAction myRightEditorModeAction;
|
||||
|
||||
private MessageBusConnection myConnection;
|
||||
private final FileEditorManagerListener myListener = new FileEditorManagerListener() {
|
||||
@Override
|
||||
public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
|
||||
bindToDesigner(getActiveDesigner());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
|
||||
ApplicationManager.getApplication().invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
bindToDesigner(getActiveDesigner());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void selectionChanged(@NotNull FileEditorManagerEvent event) {
|
||||
bindToDesigner(getDesigner(event.getNewEditor()));
|
||||
}
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ToolWindow
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
public abstract class AbstractToolWindowManager extends LightToolWindowManager {
|
||||
|
||||
protected AbstractToolWindowManager(Project project, FileEditorManager fileEditorManager) {
|
||||
myProject = project;
|
||||
myFileEditorManager = fileEditorManager;
|
||||
myPropertiesComponent = PropertiesComponent.getInstance(myProject);
|
||||
myEditorModeKey = EDITOR_MODE + getComponentName() + ".STATE";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void projectOpened() {
|
||||
initToolWindow();
|
||||
|
||||
StartupManager.getInstance(myProject).runWhenProjectIsInitialized(new DumbAwareRunnable() {
|
||||
public void run() {
|
||||
if (getEditorMode() == null) {
|
||||
initListeners();
|
||||
bindToDesigner(getActiveDesigner());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void projectClosed() {
|
||||
if (!myToolWindowDisposed) {
|
||||
disposeComponent();
|
||||
myToolWindowDisposed = true;
|
||||
myToolWindow = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void initListeners() {
|
||||
myConnection = myProject.getMessageBus().connect(myProject);
|
||||
myConnection.subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, myListener);
|
||||
}
|
||||
|
||||
private void removeListeners() {
|
||||
myConnection.disconnect();
|
||||
myConnection = null;
|
||||
super(project, fileEditorManager);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static DesignerEditorPanel getDesigner(FileEditor editor) {
|
||||
@Override
|
||||
protected DesignerEditorPanelFacade getDesigner(FileEditor editor) {
|
||||
if (editor instanceof DesignerEditor) {
|
||||
DesignerEditor designerEditor = (DesignerEditor)editor;
|
||||
return designerEditor.getDesignerPanel();
|
||||
@@ -137,196 +41,20 @@ public abstract class AbstractToolWindowManager implements ProjectComponent {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public DesignerEditorPanel getActiveDesigner() {
|
||||
for (FileEditor editor : myFileEditorManager.getSelectedEditors()) {
|
||||
DesignerEditorPanel designer = getDesigner(editor);
|
||||
if (designer != null) {
|
||||
return designer;
|
||||
@Override
|
||||
protected ToggleEditorModeAction createToggleAction(ToolWindowAnchor anchor) {
|
||||
return new ToggleEditorModeAction(this, myProject, anchor) {
|
||||
@Override
|
||||
protected LightToolWindowManager getOppositeManager() {
|
||||
AbstractToolWindowManager designerManager = DesignerToolWindowManager.getInstance(myProject);
|
||||
AbstractToolWindowManager paletteManager = PaletteToolWindowManager.getInstance(myProject);
|
||||
return myManager == designerManager ? paletteManager : designerManager;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected static DesignerCustomizations getCustomizations() {
|
||||
return DesignerCustomizations.EP_NAME.findExtension(DesignerCustomizations.class);
|
||||
}
|
||||
|
||||
private void bindToDesigner(final DesignerEditorPanel designer) {
|
||||
myWindowQueue.cancelAllUpdates();
|
||||
myWindowQueue.queue(new Update("update") {
|
||||
@Override
|
||||
public void run() {
|
||||
if (myToolWindowDisposed) {
|
||||
return;
|
||||
}
|
||||
if (myToolWindow == null) {
|
||||
if (designer == null) {
|
||||
return;
|
||||
}
|
||||
initToolWindow();
|
||||
}
|
||||
updateToolWindow(designer);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected abstract void initToolWindow();
|
||||
|
||||
protected abstract void updateToolWindow(@Nullable DesignerEditorPanel designer);
|
||||
|
||||
protected final void initGearActions() {
|
||||
ToolWindowEx toolWindow = (ToolWindowEx)myToolWindow;
|
||||
toolWindow.setAdditionalGearActions(new DefaultActionGroup(createGearActions()));
|
||||
}
|
||||
|
||||
protected abstract ToolWindowAnchor getAnchor();
|
||||
|
||||
@Override
|
||||
public void initComponent() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disposeComponent() {
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// LightToolWindow
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public final ActionGroup createGearActions() {
|
||||
DefaultActionGroup group = new DefaultActionGroup("In Editor Mode", true);
|
||||
|
||||
if (myLeftEditorModeAction == null) {
|
||||
myLeftEditorModeAction = new ToggleEditorModeAction(this, myProject, ToolWindowAnchor.LEFT);
|
||||
}
|
||||
group.add(myLeftEditorModeAction);
|
||||
|
||||
if (myRightEditorModeAction == null) {
|
||||
myRightEditorModeAction = new ToggleEditorModeAction(this, myProject, ToolWindowAnchor.RIGHT);
|
||||
}
|
||||
group.add(myRightEditorModeAction);
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
public final void bind(DesignerEditorPanel designer) {
|
||||
if (isEditorMode()) {
|
||||
myCreateAction.run(designer);
|
||||
}
|
||||
}
|
||||
|
||||
public final void dispose(DesignerEditorPanel designer) {
|
||||
if (isEditorMode()) {
|
||||
disposeContent(designer);
|
||||
}
|
||||
}
|
||||
|
||||
protected final Object getContent(DesignerEditorPanel designer) {
|
||||
LightToolWindow toolWindow = (LightToolWindow)designer.getClientProperty(getComponentName());
|
||||
return toolWindow.getContent();
|
||||
}
|
||||
|
||||
protected abstract LightToolWindow createContent(DesignerEditorPanel designer);
|
||||
|
||||
protected final LightToolWindow createContent(DesignerEditorPanel designer,
|
||||
LightToolWindowContent content,
|
||||
String title,
|
||||
Icon icon,
|
||||
JComponent component,
|
||||
JComponent focusedComponent,
|
||||
int defaultWidth,
|
||||
AnAction[] actions) {
|
||||
return new LightToolWindow(content,
|
||||
title,
|
||||
icon,
|
||||
component,
|
||||
focusedComponent,
|
||||
designer.getContentSplitter(),
|
||||
getEditorMode(),
|
||||
this,
|
||||
myProject,
|
||||
myPropertiesComponent,
|
||||
getComponentName(),
|
||||
defaultWidth,
|
||||
actions);
|
||||
}
|
||||
|
||||
protected final void disposeContent(DesignerEditorPanel designer) {
|
||||
String key = getComponentName();
|
||||
LightToolWindow toolWindow = (LightToolWindow)designer.getClientProperty(key);
|
||||
designer.putClientProperty(key, null);
|
||||
toolWindow.dispose();
|
||||
}
|
||||
|
||||
private final ParameterizedRunnable<DesignerEditorPanel> myCreateAction = new ParameterizedRunnable<DesignerEditorPanel>() {
|
||||
@Override
|
||||
public void run(DesignerEditorPanel designer) {
|
||||
designer.putClientProperty(getComponentName(), createContent(designer));
|
||||
}
|
||||
};
|
||||
|
||||
private final ParameterizedRunnable<DesignerEditorPanel> myUpdateAnchorAction = new ParameterizedRunnable<DesignerEditorPanel>() {
|
||||
@Override
|
||||
public void run(DesignerEditorPanel designer) {
|
||||
LightToolWindow toolWindow = (LightToolWindow)designer.getClientProperty(getComponentName());
|
||||
toolWindow.updateAnchor(getEditorMode());
|
||||
}
|
||||
};
|
||||
|
||||
private final ParameterizedRunnable<DesignerEditorPanel> myDisposeAction = new ParameterizedRunnable<DesignerEditorPanel>() {
|
||||
@Override
|
||||
public void run(DesignerEditorPanel designer) {
|
||||
disposeContent(designer);
|
||||
}
|
||||
};
|
||||
|
||||
private void runUpdateContent(ParameterizedRunnable<DesignerEditorPanel> action) {
|
||||
for (FileEditor editor : myFileEditorManager.getAllEditors()) {
|
||||
DesignerEditorPanel designer = getDesigner(editor);
|
||||
if (designer != null) {
|
||||
action.run(designer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected final boolean isEditorMode() {
|
||||
return getEditorMode() != null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
final ToolWindowAnchor getEditorMode() {
|
||||
String value = myPropertiesComponent.getValue(myEditorModeKey);
|
||||
if (value == null) {
|
||||
return getAnchor();
|
||||
}
|
||||
return value.equals("ToolWindow") ? null : ToolWindowAnchor.fromText(value);
|
||||
}
|
||||
|
||||
final void setEditorMode(@Nullable ToolWindowAnchor newState) {
|
||||
ToolWindowAnchor oldState = getEditorMode();
|
||||
myPropertiesComponent.setValue(myEditorModeKey, newState == null ? "ToolWindow" : newState.toString());
|
||||
|
||||
if (oldState != null && newState != null) {
|
||||
runUpdateContent(myUpdateAnchorAction);
|
||||
}
|
||||
else if (newState != null) {
|
||||
removeListeners();
|
||||
updateToolWindow(null);
|
||||
runUpdateContent(myCreateAction);
|
||||
}
|
||||
else {
|
||||
runUpdateContent(myDisposeAction);
|
||||
initListeners();
|
||||
bindToDesigner(getActiveDesigner());
|
||||
}
|
||||
}
|
||||
|
||||
final ToolWindow getToolWindow() {
|
||||
return myToolWindow;
|
||||
}
|
||||
}
|
||||
@@ -96,8 +96,8 @@ public final class DesignerToolWindowManager extends AbstractToolWindowManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateToolWindow(@Nullable DesignerEditorPanel designer) {
|
||||
myToolWindowContent.update(designer);
|
||||
protected void updateToolWindow(@Nullable DesignerEditorPanelFacade designer) {
|
||||
myToolWindowContent.update((DesignerEditorPanel)designer);
|
||||
|
||||
if (designer == null) {
|
||||
myToolWindow.setAvailable(false, null);
|
||||
@@ -126,9 +126,9 @@ public final class DesignerToolWindowManager extends AbstractToolWindowManager {
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
protected LightToolWindow createContent(DesignerEditorPanel designer) {
|
||||
protected LightToolWindow createContent(DesignerEditorPanelFacade designer) {
|
||||
DesignerToolWindow toolWindowContent = new DesignerToolWindow(myProject, false);
|
||||
toolWindowContent.update(designer);
|
||||
toolWindowContent.update((DesignerEditorPanel)designer);
|
||||
|
||||
return createContent(designer,
|
||||
toolWindowContent,
|
||||
|
||||
+2
-1
@@ -78,7 +78,8 @@ import java.util.List;
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public abstract class DesignerEditorPanel extends JPanel implements DataProvider, ModuleProvider, RadPropertyContext {
|
||||
public abstract class DesignerEditorPanel extends JPanel
|
||||
implements DesignerEditorPanelFacade, DataProvider, ModuleProvider, RadPropertyContext {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.designer.designSurface.DesignerEditorPanel");
|
||||
|
||||
protected static final Integer LAYER_COMPONENT = JLayeredPane.DEFAULT_LAYER;
|
||||
|
||||
+5
-4
@@ -17,6 +17,7 @@ package com.intellij.designer.palette;
|
||||
|
||||
import com.intellij.designer.AbstractToolWindowManager;
|
||||
import com.intellij.designer.DesignerCustomizations;
|
||||
import com.intellij.designer.DesignerEditorPanelFacade;
|
||||
import com.intellij.designer.LightToolWindow;
|
||||
import com.intellij.designer.designSurface.DesignerEditorPanel;
|
||||
import com.intellij.icons.AllIcons;
|
||||
@@ -85,8 +86,8 @@ public class PaletteToolWindowManager extends AbstractToolWindowManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateToolWindow(@Nullable DesignerEditorPanel designer) {
|
||||
myToolWindowPanel.loadPalette(designer);
|
||||
protected void updateToolWindow(@Nullable DesignerEditorPanelFacade designer) {
|
||||
myToolWindowPanel.loadPalette((DesignerEditorPanel)designer);
|
||||
|
||||
if (myToolWindowPanel.isEmpty()) {
|
||||
myToolWindow.setAvailable(false, null);
|
||||
@@ -115,9 +116,9 @@ public class PaletteToolWindowManager extends AbstractToolWindowManager {
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
protected LightToolWindow createContent(DesignerEditorPanel designer) {
|
||||
protected LightToolWindow createContent(DesignerEditorPanelFacade designer) {
|
||||
PalettePanel palettePanel = new PalettePanel();
|
||||
palettePanel.loadPalette(designer);
|
||||
palettePanel.loadPalette((DesignerEditorPanel)designer);
|
||||
|
||||
return createContent(designer,
|
||||
palettePanel,
|
||||
|
||||
Reference in New Issue
Block a user