diff --git a/platform/platform-impl/src/com/intellij/designer/DesignerEditorPanelFacade.java b/platform/platform-impl/src/com/intellij/designer/DesignerEditorPanelFacade.java new file mode 100644 index 000000000000..fa9ecf8610ac --- /dev/null +++ b/platform/platform-impl/src/com/intellij/designer/DesignerEditorPanelFacade.java @@ -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(); +} \ No newline at end of file diff --git a/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindow.java b/platform/platform-impl/src/com/intellij/designer/LightToolWindow.java similarity index 98% rename from plugins/ui-designer-core/src/com/intellij/designer/LightToolWindow.java rename to platform/platform-impl/src/com/intellij/designer/LightToolWindow.java index 4bbccfa84934..0d644217ef90 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindow.java +++ b/platform/platform-impl/src/com/intellij/designer/LightToolWindow.java @@ -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()); diff --git a/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindowContent.java b/platform/platform-impl/src/com/intellij/designer/LightToolWindowContent.java similarity index 100% rename from plugins/ui-designer-core/src/com/intellij/designer/LightToolWindowContent.java rename to platform/platform-impl/src/com/intellij/designer/LightToolWindowContent.java diff --git a/platform/platform-impl/src/com/intellij/designer/LightToolWindowManager.java b/platform/platform-impl/src/com/intellij/designer/LightToolWindowManager.java new file mode 100644 index 000000000000..e6d887ea2c43 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/designer/LightToolWindowManager.java @@ -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 myCreateAction = new ParameterizedRunnable() { + @Override + public void run(DesignerEditorPanelFacade designer) { + designer.putClientProperty(getComponentName(), createContent(designer)); + } + }; + + private final ParameterizedRunnable myUpdateAnchorAction = + new ParameterizedRunnable() { + @Override + public void run(DesignerEditorPanelFacade designer) { + LightToolWindow toolWindow = (LightToolWindow)designer.getClientProperty(getComponentName()); + toolWindow.updateAnchor(getEditorMode()); + } + }; + + private final ParameterizedRunnable myDisposeAction = new ParameterizedRunnable() { + @Override + public void run(DesignerEditorPanelFacade designer) { + disposeContent(designer); + } + }; + + private void runUpdateContent(ParameterizedRunnable 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; + } +} \ No newline at end of file diff --git a/plugins/ui-designer-core/src/com/intellij/designer/ToggleEditorModeAction.java b/platform/platform-impl/src/com/intellij/designer/ToggleEditorModeAction.java similarity index 69% rename from plugins/ui-designer-core/src/com/intellij/designer/ToggleEditorModeAction.java rename to platform/platform-impl/src/com/intellij/designer/ToggleEditorModeAction.java index 238de681c4b2..668a0405f4b2 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/ToggleEditorModeAction.java +++ b/platform/platform-impl/src/com/intellij/designer/ToggleEditorModeAction.java @@ -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(); } \ No newline at end of file diff --git a/plugins/ui-designer-core/src/com/intellij/designer/AbstractToolWindowManager.java b/plugins/ui-designer-core/src/com/intellij/designer/AbstractToolWindowManager.java index 3fcce90e6801..7c23529c828b 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/AbstractToolWindowManager.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/AbstractToolWindowManager.java @@ -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 myCreateAction = new ParameterizedRunnable() { - @Override - public void run(DesignerEditorPanel designer) { - designer.putClientProperty(getComponentName(), createContent(designer)); - } - }; - - private final ParameterizedRunnable myUpdateAnchorAction = new ParameterizedRunnable() { - @Override - public void run(DesignerEditorPanel designer) { - LightToolWindow toolWindow = (LightToolWindow)designer.getClientProperty(getComponentName()); - toolWindow.updateAnchor(getEditorMode()); - } - }; - - private final ParameterizedRunnable myDisposeAction = new ParameterizedRunnable() { - @Override - public void run(DesignerEditorPanel designer) { - disposeContent(designer); - } - }; - - private void runUpdateContent(ParameterizedRunnable 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; - } } \ No newline at end of file diff --git a/plugins/ui-designer-core/src/com/intellij/designer/DesignerToolWindowManager.java b/plugins/ui-designer-core/src/com/intellij/designer/DesignerToolWindowManager.java index 8c5fa6412e04..2631e83625a5 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/DesignerToolWindowManager.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/DesignerToolWindowManager.java @@ -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, diff --git a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java index 067924556325..c3aaa6939f54 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java @@ -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; diff --git a/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteToolWindowManager.java b/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteToolWindowManager.java index ae14d96e0248..63631f772665 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteToolWindowManager.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteToolWindowManager.java @@ -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,