diff options
Diffstat (limited to 'plugins/ui-designer-core')
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, |