summaryrefslogtreecommitdiff
path: root/plugins/ui-designer-core
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/ui-designer-core')
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/AbstractToolWindowManager.java302
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/DesignerToolWindowManager.java8
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/LightToolWindow.java559
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/LightToolWindowContent.java23
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/PaletteToolWindowContent.java11
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/ToggleEditorModeAction.java65
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java102
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/palette/PalettePanel.java6
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteToolWindowManager.java11
9 files changed, 27 insertions, 1060 deletions
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 cf0961c6feaf..b936ae2814b3 100644
--- a/plugins/ui-designer-core/src/com/intellij/designer/AbstractToolWindowManager.java
+++ b/plugins/ui-designer-core/src/com/intellij/designer/AbstractToolWindowManager.java
@@ -15,122 +15,24 @@
*/
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.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 myToolWindowReady;
- 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).registerPostStartupActivity(new Runnable() {
- public void run() {
- myToolWindowReady = true;
- 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();
@@ -138,196 +40,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 (!myToolWindowReady || 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;
- }
} \ 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..a35be4d28697 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(@NotNull 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/LightToolWindow.java b/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindow.java
deleted file mode 100644
index 4bbccfa84934..000000000000
--- a/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindow.java
+++ /dev/null
@@ -1,559 +0,0 @@
-/*
- * Copyright 2000-2013 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.icons.AllIcons;
-import com.intellij.ide.util.PropertiesComponent;
-import com.intellij.openapi.actionSystem.*;
-import com.intellij.openapi.actionSystem.impl.ActionManagerImpl;
-import com.intellij.openapi.actionSystem.impl.MenuItemPresentationFactory;
-import com.intellij.openapi.keymap.KeymapUtil;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.ThreeComponentsSplitter;
-import com.intellij.openapi.util.SystemInfo;
-import com.intellij.openapi.wm.*;
-import com.intellij.openapi.wm.ex.ToolWindowEx;
-import com.intellij.openapi.wm.impl.AnchoredButton;
-import com.intellij.openapi.wm.impl.InternalDecorator;
-import com.intellij.openapi.wm.impl.StripeButtonUI;
-import com.intellij.openapi.wm.impl.content.ToolWindowContentUi;
-import com.intellij.ui.*;
-import com.intellij.ui.components.panels.Wrapper;
-import com.intellij.ui.tabs.TabsUtil;
-import com.intellij.util.ui.EmptyIcon;
-import com.intellij.util.ui.UIUtil;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.*;
-import java.awt.image.BufferedImage;
-
-/**
- * @author Alexander Lobas
- */
-public class LightToolWindow extends JPanel {
- public static final String LEFT_MIN_KEY = "left";
- public static final String RIGHT_MIN_KEY = "right";
- private static final String IGNORE_WIDTH_KEY = "ignore_width";
-
- private final LightToolWindowContent myContent;
- private final JComponent myFocusedComponent;
- private final ThreeComponentsSplitter myContentSplitter;
- private ToolWindowAnchor myAnchor;
- private final Project myProject;
- private final AbstractToolWindowManager myManager;
- private final PropertiesComponent myPropertiesComponent;
- private boolean myShowContent;
- private final String myShowStateKey;
- private int myCurrentWidth;
- private final String myWidthKey;
- private final JPanel myMinimizeComponent;
- private final AnchoredButton myMinimizeButton;
-
- private final TogglePinnedModeAction myToggleAutoHideModeAction = new TogglePinnedModeAction();
- private final ToggleDockModeAction myToggleDockModeAction = new ToggleDockModeAction();
- private final ToggleFloatingModeAction myToggleFloatingModeAction = new ToggleFloatingModeAction();
- private final ToggleSideModeAction myToggleSideModeAction = new ToggleSideModeAction();
-
- private final ComponentListener myWidthListener = new ComponentAdapter() {
- @Override
- public void componentResized(ComponentEvent e) {
- int width = isLeft() ? myContentSplitter.getFirstSize() : myContentSplitter.getLastSize();
- if (width > 0 && width != myCurrentWidth && myContentSplitter.getInnerComponent().getClientProperty(IGNORE_WIDTH_KEY) == null) {
- myCurrentWidth = width;
- myPropertiesComponent.setValue(myWidthKey, Integer.toString(width));
- }
- }
- };
-
- public LightToolWindow(LightToolWindowContent content,
- String title,
- Icon icon,
- JComponent component,
- JComponent focusedComponent,
- ThreeComponentsSplitter contentSplitter,
- ToolWindowAnchor anchor,
- AbstractToolWindowManager manager,
- Project project,
- PropertiesComponent propertiesComponent,
- String key,
- int defaultWidth,
- AnAction[] actions) {
- super(new BorderLayout());
- myContent = content;
- myFocusedComponent = focusedComponent;
- myContentSplitter = contentSplitter;
- myAnchor = anchor;
- myProject = project;
- myManager = manager;
- myPropertiesComponent = propertiesComponent;
-
- myShowStateKey = AbstractToolWindowManager.EDITOR_MODE + key + ".SHOW";
- myWidthKey = AbstractToolWindowManager.EDITOR_MODE + key + ".WIDTH";
-
- HeaderPanel header = new HeaderPanel();
- header.setLayout(new BorderLayout());
- add(header, BorderLayout.NORTH);
-
- JLabel titleLabel = new JLabel(title);
- titleLabel.setBorder(IdeBorderFactory.createEmptyBorder(2, 5, 2, 10));
- titleLabel.setFont(UIUtil.getLabelFont(UIUtil.FontSize.SMALL));
- header.add(titleLabel, BorderLayout.CENTER);
-
- JPanel actionPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 0));
- actionPanel.setBorder(IdeBorderFactory.createEmptyBorder(3, 0, 2, 0));
- actionPanel.setOpaque(false);
- header.add(actionPanel, BorderLayout.EAST);
-
- if (actions != null) {
- for (AnAction action : actions) {
- addAction(actionPanel, action);
- }
-
- actionPanel.add(new JLabel(AllIcons.General.Divider));
- }
-
- addAction(actionPanel, new GearAction());
- addAction(actionPanel, new HideAction());
-
- JPanel contentWrapper = new JPanel(new BorderLayout());
- contentWrapper.setBorder(IdeBorderFactory.createBorder(SideBorder.TOP));
- contentWrapper.add(component, BorderLayout.CENTER);
-
- add(contentWrapper, BorderLayout.CENTER);
-
- addMouseListener(new MouseAdapter() {
- public void mouseReleased(final MouseEvent e) {
- IdeFocusManager.getInstance(myProject).requestFocus(myFocusedComponent, true);
- }
- });
-
- addMouseListener(new PopupHandler() {
- public void invokePopup(Component component, int x, int y) {
- showGearPopup(component, x, y);
- }
- });
-
- myMinimizeButton = new AnchoredButton(title, icon) {
- @Override
- public void updateUI() {
- setUI(StripeButtonUI.createUI(this));
- setFont(UIUtil.getLabelFont(UIUtil.FontSize.SMALL));
- }
-
- @Override
- public int getMnemonic2() {
- return 0;
- }
-
- @Override
- public ToolWindowAnchor getAnchor() {
- return myAnchor;
- }
- };
- myMinimizeButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- myMinimizeButton.setSelected(false);
- updateContent(true, true);
- }
- });
- myMinimizeButton.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5));
- myMinimizeButton.setFocusable(false);
-
- myMinimizeButton.setRolloverEnabled(true);
- myMinimizeButton.setOpaque(false);
-
- myMinimizeComponent = new JPanel() {
- @Override
- public void doLayout() {
- Dimension size = myMinimizeButton.getPreferredSize();
- myMinimizeButton.setBounds(0, 0, getWidth(), size.height);
- }
- };
- myMinimizeComponent.add(myMinimizeButton);
-
- configureBorder();
- configureWidth(defaultWidth);
- updateContent(myPropertiesComponent.getBoolean(myShowStateKey, true), false);
- }
-
- private void configureBorder() {
- int borderStyle = isLeft() ? SideBorder.RIGHT : SideBorder.LEFT;
- setBorder(IdeBorderFactory.createBorder(borderStyle));
- myMinimizeComponent.setBorder(IdeBorderFactory.createBorder(borderStyle));
- }
-
- private void configureWidth(int defaultWidth) {
- myCurrentWidth = myPropertiesComponent.getOrInitInt(myWidthKey, defaultWidth);
- updateWidth();
- myContentSplitter.getInnerComponent().addComponentListener(myWidthListener);
- }
-
- private void updateWidth() {
- if (isLeft()) {
- myContentSplitter.setFirstSize(myCurrentWidth);
- }
- else {
- myContentSplitter.setLastSize(myCurrentWidth);
- }
- }
-
- public void updateAnchor(ToolWindowAnchor newAnchor) {
- JComponent minimizeParent = myContentSplitter.getInnerComponent();
- minimizeParent.putClientProperty(IGNORE_WIDTH_KEY, Boolean.TRUE);
-
- if (myShowContent) {
- Object oldWindow = isLeft() ? myContentSplitter.getFirstComponent() : myContentSplitter.getLastComponent();
- if (oldWindow == this) {
- setContentComponent(null);
- }
- }
- else {
- String key = getMinKey();
- if (minimizeParent.getClientProperty(key) == myMinimizeComponent) {
- minimizeParent.putClientProperty(key, null);
- }
- minimizeParent.putClientProperty(isLeft() ? RIGHT_MIN_KEY : LEFT_MIN_KEY, myMinimizeComponent);
- minimizeParent.revalidate();
- }
-
- myAnchor = newAnchor;
- configureBorder();
- updateWidth();
-
- if (myShowContent) {
- setContentComponent(this);
- }
-
- minimizeParent.putClientProperty(IGNORE_WIDTH_KEY, null);
- }
-
- private void updateContent(boolean show, boolean flag) {
- myShowContent = show;
-
- String key = getMinKey();
-
- JComponent minimizeParent = myContentSplitter.getInnerComponent();
-
- if (show) {
- minimizeParent.putClientProperty(key, null);
- minimizeParent.remove(myMinimizeComponent);
- }
-
- setContentComponent(show ? this : null);
-
- if (!show) {
- minimizeParent.putClientProperty(key, myMinimizeComponent);
- minimizeParent.add(myMinimizeComponent);
- }
-
- minimizeParent.revalidate();
-
- if (flag) {
- myPropertiesComponent.setValue(myShowStateKey, Boolean.toString(show));
- }
- }
-
- private void setContentComponent(JComponent component) {
- if (isLeft()) {
- myContentSplitter.setFirstComponent(component);
- }
- else {
- myContentSplitter.setLastComponent(component);
- }
- }
-
- public void dispose() {
- JComponent minimizeParent = myContentSplitter.getInnerComponent();
- minimizeParent.removeComponentListener(myWidthListener);
-
- setContentComponent(null);
- myContent.dispose();
-
- if (!myShowContent) {
- minimizeParent.putClientProperty(getMinKey(), null);
- minimizeParent.remove(myMinimizeComponent);
- minimizeParent.revalidate();
- }
- }
-
- private String getMinKey() {
- return isLeft() ? LEFT_MIN_KEY : RIGHT_MIN_KEY;
- }
-
- public Object getContent() {
- return myContent;
- }
-
- private boolean isLeft() {
- return myAnchor == ToolWindowAnchor.LEFT;
- }
-
- private boolean isActive() {
- IdeFocusManager fm = IdeFocusManager.getInstance(myProject);
- Component component = fm.getFocusedDescendantFor(this);
- if (component != null) {
- return true;
- }
- Component owner = fm.getLastFocusedFor(WindowManager.getInstance().getIdeFrame(myProject));
- return owner != null && SwingUtilities.isDescendingFrom(owner, this);
- }
-
- private void addAction(JPanel actionPanel, AnAction action) {
- actionPanel.add(new ActionButton(action));
- }
-
- private DefaultActionGroup createGearPopupGroup() {
- DefaultActionGroup group = new DefaultActionGroup();
-
- group.add(myManager.createGearActions());
- group.addSeparator();
-
- ToolWindowType type = myManager.getToolWindow().getType();
- if (type == ToolWindowType.DOCKED) {
- group.add(myToggleAutoHideModeAction);
- group.add(myToggleDockModeAction);
- group.add(myToggleFloatingModeAction);
- group.add(myToggleSideModeAction);
- }
- else if (type == ToolWindowType.FLOATING) {
- group.add(myToggleAutoHideModeAction);
- group.add(myToggleFloatingModeAction);
- }
- else if (type == ToolWindowType.SLIDING) {
- group.add(myToggleDockModeAction);
- group.add(myToggleFloatingModeAction);
- }
-
- return group;
- }
-
- private void showGearPopup(Component component, int x, int y) {
- ActionPopupMenu popupMenu =
- ((ActionManagerImpl)ActionManager.getInstance())
- .createActionPopupMenu(ToolWindowContentUi.POPUP_PLACE, createGearPopupGroup(), new MenuItemPresentationFactory(true));
- popupMenu.getComponent().show(component, x, y);
- }
-
- private class GearAction extends AnAction {
- public GearAction() {
- Presentation presentation = getTemplatePresentation();
- presentation.setIcon(AllIcons.General.Gear);
- presentation.setHoveredIcon(AllIcons.General.GearHover);
- }
-
- @Override
- public void actionPerformed(AnActionEvent e) {
- int x = 0;
- int y = 0;
- InputEvent inputEvent = e.getInputEvent();
- if (inputEvent instanceof MouseEvent) {
- x = ((MouseEvent)inputEvent).getX();
- y = ((MouseEvent)inputEvent).getY();
- }
-
- showGearPopup(inputEvent.getComponent(), x, y);
- }
- }
-
- private class HideAction extends AnAction {
- public HideAction() {
- Presentation presentation = getTemplatePresentation();
- presentation.setText(UIBundle.message("tool.window.hide.action.name"));
- if (isLeft()) {
- presentation.setIcon(AllIcons.General.HideLeftPart);
- presentation.setHoveredIcon(AllIcons.General.HideLeftPartHover);
- }
- else {
- presentation.setIcon(AllIcons.General.HideRightPart);
- presentation.setHoveredIcon(AllIcons.General.HideRightPartHover);
- }
- }
-
- @Override
- public void actionPerformed(AnActionEvent e) {
- updateContent(false, true);
- }
- }
-
- private class TogglePinnedModeAction extends ToggleAction {
- public TogglePinnedModeAction() {
- copyFrom(ActionManager.getInstance().getAction(InternalDecorator.TOGGLE_PINNED_MODE_ACTION_ID));
- }
-
- @Override
- public boolean isSelected(AnActionEvent e) {
- return !myManager.getToolWindow().isAutoHide();
- }
-
- @Override
- public void setSelected(AnActionEvent e, boolean state) {
- ToolWindow window = myManager.getToolWindow();
- window.setAutoHide(!window.isAutoHide());
- myManager.setEditorMode(null);
- }
- }
-
- private class ToggleDockModeAction extends ToggleAction {
- public ToggleDockModeAction() {
- copyFrom(ActionManager.getInstance().getAction(InternalDecorator.TOGGLE_DOCK_MODE_ACTION_ID));
- }
-
- @Override
- public boolean isSelected(AnActionEvent e) {
- return myManager.getToolWindow().getType() == ToolWindowType.DOCKED;
- }
-
- @Override
- public void setSelected(AnActionEvent e, boolean state) {
- ToolWindow window = myManager.getToolWindow();
- ToolWindowType type = window.getType();
- if (type == ToolWindowType.DOCKED) {
- window.setType(ToolWindowType.SLIDING, null);
- }
- else if (type == ToolWindowType.SLIDING) {
- window.setType(ToolWindowType.DOCKED, null);
- }
- myManager.setEditorMode(null);
- }
- }
-
- private class ToggleFloatingModeAction extends ToggleAction {
- public ToggleFloatingModeAction() {
- copyFrom(ActionManager.getInstance().getAction(InternalDecorator.TOGGLE_FLOATING_MODE_ACTION_ID));
- }
-
- @Override
- public boolean isSelected(AnActionEvent e) {
- return myManager.getToolWindow().getType() == ToolWindowType.FLOATING;
- }
-
- @Override
- public void setSelected(AnActionEvent e, boolean state) {
- ToolWindow window = myManager.getToolWindow();
- ToolWindowType type = window.getType();
- if (type == ToolWindowType.FLOATING) {
- window.setType(((ToolWindowEx)window).getInternalType(), null);
- }
- else {
- window.setType(ToolWindowType.FLOATING, null);
- }
- myManager.setEditorMode(null);
- }
- }
-
- private class ToggleSideModeAction extends ToggleAction {
- public ToggleSideModeAction() {
- copyFrom(ActionManager.getInstance().getAction(InternalDecorator.TOGGLE_SIDE_MODE_ACTION_ID));
- }
-
- @Override
- public boolean isSelected(AnActionEvent e) {
- return myManager.getToolWindow().isSplitMode();
- }
-
- @Override
- public void setSelected(AnActionEvent e, boolean state) {
- myManager.getToolWindow().setSplitMode(state, null);
- myManager.setEditorMode(null);
- }
- }
-
- private class ActionButton extends Wrapper implements ActionListener {
- private final AnAction myAction;
-
- public ActionButton(AnAction action) {
- myAction = action;
-
- Presentation presentation = action.getTemplatePresentation();
- InplaceButton button = new InplaceButton(KeymapUtil.createTooltipText(presentation.getText(), action), EmptyIcon.ICON_16, this) {
- @Override
- public boolean isActive() {
- return LightToolWindow.this.isActive();
- }
- };
- button.setHoveringEnabled(!SystemInfo.isMac);
- setContent(button);
-
- Icon icon = presentation.getIcon();
- Icon hoveredIcon = presentation.getHoveredIcon();
- button.setIcons(icon, icon, hoveredIcon == null ? icon : hoveredIcon);
- }
-
- @Override
- public void actionPerformed(ActionEvent e) {
- InputEvent inputEvent = e.getSource() instanceof InputEvent ? (InputEvent)e.getSource() : null;
- myAction.actionPerformed(AnActionEvent.createFromInputEvent(myAction, inputEvent, ActionPlaces.UNKNOWN));
- }
- }
-
- private class HeaderPanel extends JPanel {
- private BufferedImage myActiveImage;
- private BufferedImage myImage;
-
- @Override
- public Dimension getPreferredSize() {
- Dimension size = super.getPreferredSize();
- return new Dimension(size.width, TabsUtil.getTabsHeight());
- }
-
- @Override
- public Dimension getMinimumSize() {
- Dimension size = super.getMinimumSize();
- return new Dimension(size.width, TabsUtil.getTabsHeight());
- }
-
- protected void _paintComponent(Graphics g) { // XXX: visual artifacts on linux
- Rectangle r = getBounds();
-
- Image image;
- if (isActive()) {
- if (myActiveImage == null || myActiveImage.getHeight() != r.height) {
- myActiveImage = drawToBuffer(true, r.height);
- }
- image = myActiveImage;
- }
- else {
- if (myImage == null || myImage.getHeight() != r.height) {
- myImage = drawToBuffer(false, r.height);
- }
- image = myImage;
- }
-
- Graphics2D g2d = (Graphics2D)g;
- Rectangle clipBounds = g2d.getClip().getBounds();
- for (int x = clipBounds.x; x < clipBounds.x + clipBounds.width; x += 150) {
- g2d.drawImage(image, x, 0, null);
- }
- }
-
- protected boolean isActive() {
- return LightToolWindow.this.isActive();
- }
- }
-
- private static BufferedImage drawToBuffer(boolean active, int height) {
- final int width = 150;
-
- BufferedImage image = UIUtil.createImage(width, height, BufferedImage.TYPE_INT_ARGB);
- Graphics2D g = image.createGraphics();
- UIUtil.drawHeader(g, 0, width, height, active, true, false, false);
- g.dispose();
-
- return image;
- }
-} \ No newline at end of file
diff --git a/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindowContent.java b/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindowContent.java
deleted file mode 100644
index c3e00f7236f5..000000000000
--- a/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindowContent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2000-2013 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;
-
-/**
- * @author Alexander Lobas
- */
-public interface LightToolWindowContent {
- void dispose();
-} \ No newline at end of file
diff --git a/plugins/ui-designer-core/src/com/intellij/designer/PaletteToolWindowContent.java b/plugins/ui-designer-core/src/com/intellij/designer/PaletteToolWindowContent.java
index 5e77e7c0b02d..69949491991a 100644
--- a/plugins/ui-designer-core/src/com/intellij/designer/PaletteToolWindowContent.java
+++ b/plugins/ui-designer-core/src/com/intellij/designer/PaletteToolWindowContent.java
@@ -15,19 +15,8 @@
*/
package com.intellij.designer;
-import com.intellij.designer.designSurface.DesignerEditorPanel;
-import com.intellij.designer.palette.PaletteItem;
-import org.jetbrains.annotations.Nullable;
-
public interface PaletteToolWindowContent extends LightToolWindowContent {
- @Nullable
- PaletteItem getActiveItem();
-
void clearActiveItem();
void refresh();
-
- boolean isEmpty();
-
- void loadPalette(@Nullable DesignerEditorPanel designer);
} \ No newline at end of file
diff --git a/plugins/ui-designer-core/src/com/intellij/designer/ToggleEditorModeAction.java b/plugins/ui-designer-core/src/com/intellij/designer/ToggleEditorModeAction.java
deleted file mode 100644
index 238de681c4b2..000000000000
--- a/plugins/ui-designer-core/src/com/intellij/designer/ToggleEditorModeAction.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2000-2013 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.designer.palette.PaletteToolWindowManager;
-import com.intellij.openapi.actionSystem.AnActionEvent;
-import com.intellij.openapi.actionSystem.ToggleAction;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.openapi.wm.ToolWindowAnchor;
-
-/**
- * @author Alexander Lobas
- */
-public class ToggleEditorModeAction extends ToggleAction {
- private final AbstractToolWindowManager myManager;
- private final Project myProject;
- private final ToolWindowAnchor myAnchor;
-
- public ToggleEditorModeAction(AbstractToolWindowManager 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;
- myAnchor = anchor;
- }
-
- @Override
- public boolean isSelected(AnActionEvent e) {
- return myAnchor == myManager.getEditorMode();
- }
-
- @Override
- public void setSelected(AnActionEvent e, boolean state) {
- if (state) {
- myManager.setEditorMode(myAnchor);
-
- AbstractToolWindowManager manager = getOppositeManager();
- if (manager.getEditorMode() == myAnchor) {
- manager.setEditorMode(myAnchor == ToolWindowAnchor.LEFT ? ToolWindowAnchor.RIGHT : ToolWindowAnchor.LEFT);
- }
- }
- else {
- myManager.setEditorMode(null);
- }
- }
-
- private AbstractToolWindowManager getOppositeManager() {
- AbstractToolWindowManager designerManager = DesignerToolWindowManager.getInstance(myProject);
- AbstractToolWindowManager paletteManager = PaletteToolWindowManager.getInstance(myProject);
- return myManager == designerManager ? paletteManager : designerManager;
- }
-} \ No newline at end of file
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..87f9e2cb3332 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;
@@ -176,7 +177,7 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
}
private void createDesignerCard() {
- JPanel panel = new JPanel(new FillLayout());
+ JPanel panel = new JPanel(new LightFillLayout());
myContentSplitter.setInnerComponent(panel);
myLayeredPane = new MyLayeredPane();
@@ -858,103 +859,6 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
//
//////////////////////////////////////////////////////////////////////////////////////////
- private static final int MINIMIZE_WIDTH = 25;
-
- private static final class FillLayout implements LayoutManager2 {
- @Override
- public void addLayoutComponent(Component comp, Object constraints) {
- }
-
- @Override
- public float getLayoutAlignmentX(Container target) {
- return 0.5f;
- }
-
- @Override
- public float getLayoutAlignmentY(Container target) {
- return 0.5f;
- }
-
- @Override
- public void invalidateLayout(Container target) {
- }
-
- @Override
- public void addLayoutComponent(String name, Component comp) {
- }
-
- @Override
- public void removeLayoutComponent(Component comp) {
- }
-
- @Override
- public Dimension maximumLayoutSize(Container target) {
- return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
- }
-
- @Override
- public Dimension preferredLayoutSize(Container parent) {
- Component toolbar = parent.getComponent(0);
- Dimension toolbarSize = toolbar.isVisible() ? toolbar.getPreferredSize() : new Dimension();
- Dimension contentSize = parent.getComponent(1).getPreferredSize();
- int extraWidth = 0;
- JComponent jParent = (JComponent)parent;
- if (jParent.getClientProperty(LightToolWindow.LEFT_MIN_KEY) != null) {
- extraWidth += MINIMIZE_WIDTH;
- }
- if (jParent.getClientProperty(LightToolWindow.RIGHT_MIN_KEY) != null) {
- extraWidth += MINIMIZE_WIDTH;
- }
- return new Dimension(Math.max(toolbarSize.width, contentSize.width + extraWidth), toolbarSize.height + contentSize.height);
- }
-
- @Override
- public Dimension minimumLayoutSize(Container parent) {
- Component toolbar = parent.getComponent(0);
- Dimension toolbarSize = toolbar.isVisible() ? toolbar.getMinimumSize() : new Dimension();
- Dimension contentSize = parent.getComponent(1).getMinimumSize();
- int extraWidth = 0;
- JComponent jParent = (JComponent)parent;
- if (jParent.getClientProperty(LightToolWindow.LEFT_MIN_KEY) != null) {
- extraWidth += MINIMIZE_WIDTH;
- }
- if (jParent.getClientProperty(LightToolWindow.RIGHT_MIN_KEY) != null) {
- extraWidth += MINIMIZE_WIDTH;
- }
- return new Dimension(Math.max(toolbarSize.width, contentSize.width + extraWidth), toolbarSize.height + contentSize.height);
- }
-
- @Override
- public void layoutContainer(Container parent) {
- int leftWidth = 0;
- int rightWidth = 0;
- JComponent jParent = (JComponent)parent;
- JComponent left = (JComponent)jParent.getClientProperty(LightToolWindow.LEFT_MIN_KEY);
- if (left != null) {
- leftWidth = MINIMIZE_WIDTH;
- }
- JComponent right = (JComponent)jParent.getClientProperty(LightToolWindow.RIGHT_MIN_KEY);
- if (right != null) {
- rightWidth = MINIMIZE_WIDTH;
- }
- int extraWidth = leftWidth + rightWidth;
-
- int width = parent.getWidth() - extraWidth;
- int height = parent.getHeight();
- Component toolbar = parent.getComponent(0);
- Dimension toolbarSize = toolbar.isVisible() ? toolbar.getPreferredSize() : new Dimension();
- toolbar.setBounds(leftWidth, 0, width, toolbarSize.height);
- parent.getComponent(1).setBounds(leftWidth, toolbarSize.height, width, height - toolbarSize.height);
-
- if (left != null) {
- left.setBounds(0, 0, leftWidth, height);
- }
- if (right != null) {
- right.setBounds(width + leftWidth, 0, rightWidth, height);
- }
- }
- }
-
/**
* Size of the scene, in scroll pane view port pixels.
*/
diff --git a/plugins/ui-designer-core/src/com/intellij/designer/palette/PalettePanel.java b/plugins/ui-designer-core/src/com/intellij/designer/palette/PalettePanel.java
index a7dfef3758ae..f81baca17551 100644
--- a/plugins/ui-designer-core/src/com/intellij/designer/palette/PalettePanel.java
+++ b/plugins/ui-designer-core/src/com/intellij/designer/palette/PalettePanel.java
@@ -131,12 +131,6 @@ public class PalettePanel extends JPanel implements DataProvider, PaletteToolWin
repaint();
}
- @Override
- public boolean isEmpty() {
- return myGroups.isEmpty();
- }
-
- @Override
public void loadPalette(@Nullable DesignerEditorPanel designer) {
if (myDesigner == null && designer == null) {
return;
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..3fddf66eaad6 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,10 +86,10 @@ 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()) {
+ if (designer == null) {
myToolWindow.setAvailable(false, null);
}
else {
@@ -115,9 +116,9 @@ public class PaletteToolWindowManager extends AbstractToolWindowManager {
//////////////////////////////////////////////////////////////////////////////////////////
@Override
- protected LightToolWindow createContent(DesignerEditorPanel designer) {
+ protected LightToolWindow createContent(@NotNull DesignerEditorPanelFacade designer) {
PalettePanel palettePanel = new PalettePanel();
- palettePanel.loadPalette(designer);
+ palettePanel.loadPalette((DesignerEditorPanel)designer);
return createContent(designer,
palettePanel,