");
- if (myGravatarId != null) {
- builder.append(".append("http://www.gravatar.com/avatar/").append(myGravatarId).append("?s=40\"/) ");
- }
+ if (myAvatarUrl != null) {
+ builder.append(".append(myAvatarUrl).append("\") ");
+ }
builder.append(" | ");
if (getAuthor() != null) {
builder.append("Author: ").append(getAuthor()).append(" ");
diff --git a/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java b/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java
index 39a97184fe72..a8445b7f76ac 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java
@@ -240,7 +240,7 @@ public class GithubRepository extends BaseRepositoryImpl {
@Override
public Comment fun(GithubIssueComment comment) {
return new GithubComment(comment.getCreatedAt(), comment.getUser().getLogin(), comment.getBodyHtml(),
- comment.getUser().getGravatarId(),
+ comment.getUser().getAvatarUrl(),
comment.getUser().getHtmlUrl());
}
});
diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesImplUtil.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesImplUtil.java
index 15e73791f8ea..502d9b4dc499 100644
--- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesImplUtil.java
+++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesImplUtil.java
@@ -15,7 +15,6 @@
*/
package com.intellij.lang.properties;
-import com.intellij.lang.HtmlScriptContentProvider;
import com.intellij.lang.properties.psi.PropertiesFile;
import com.intellij.lang.properties.psi.PropertyKeyIndex;
import com.intellij.lang.properties.xml.XmlPropertiesFileImpl;
@@ -79,7 +78,13 @@ public class PropertiesImplUtil extends PropertiesUtil {
private static ResourceBundle getResourceBundle(@NotNull final String baseName, @NotNull final PsiDirectory baseDirectory) {
PropertiesFile defaultPropertiesFile = null;
final ResourceBundleManager bundleBaseNameManager = ResourceBundleManager.getInstance(baseDirectory.getProject());
- for (final PsiFile psiFile : baseDirectory.getFiles()) {
+ final PsiFile[] psiFiles = ApplicationManager.getApplication().runReadAction(new Computable() {
+ @Override
+ public PsiFile[] compute() {
+ return baseDirectory.getFiles();
+ }
+ });
+ for (final PsiFile psiFile : psiFiles) {
if (baseName.equals(bundleBaseNameManager.getBaseName(psiFile))) {
final PropertiesFile propertiesFile = getPropertiesFile(psiFile);
if (propertiesFile != null) {
@@ -147,4 +152,4 @@ public class PropertiesImplUtil extends PropertiesUtil {
}
return getResourceBundle(baseName, baseDirectory);
}
-}
+}
\ 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 2631e83625a5..a35be4d28697 100644
--- a/plugins/ui-designer-core/src/com/intellij/designer/DesignerToolWindowManager.java
+++ b/plugins/ui-designer-core/src/com/intellij/designer/DesignerToolWindowManager.java
@@ -126,7 +126,7 @@ public final class DesignerToolWindowManager extends AbstractToolWindowManager {
//////////////////////////////////////////////////////////////////////////////////////////
@Override
- protected LightToolWindow createContent(DesignerEditorPanelFacade designer) {
+ protected LightToolWindow createContent(@NotNull DesignerEditorPanelFacade designer) {
DesignerToolWindow toolWindowContent = new DesignerToolWindow(myProject, false);
toolWindowContent.update((DesignerEditorPanel)designer);
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/designSurface/DesignerEditorPanel.java b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/DesignerEditorPanel.java
index c3aaa6939f54..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
@@ -177,7 +177,7 @@ public abstract class DesignerEditorPanel extends JPanel
}
private void createDesignerCard() {
- JPanel panel = new JPanel(new FillLayout());
+ JPanel panel = new JPanel(new LightFillLayout());
myContentSplitter.setInnerComponent(panel);
myLayeredPane = new MyLayeredPane();
@@ -859,103 +859,6 @@ public abstract class DesignerEditorPanel extends JPanel
//
//////////////////////////////////////////////////////////////////////////////////////////
- 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 63631f772665..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
@@ -89,7 +89,7 @@ public class PaletteToolWindowManager extends AbstractToolWindowManager {
protected void updateToolWindow(@Nullable DesignerEditorPanelFacade designer) {
myToolWindowPanel.loadPalette((DesignerEditorPanel)designer);
- if (myToolWindowPanel.isEmpty()) {
+ if (designer == null) {
myToolWindow.setAvailable(false, null);
}
else {
@@ -116,7 +116,7 @@ public class PaletteToolWindowManager extends AbstractToolWindowManager {
//////////////////////////////////////////////////////////////////////////////////////////
@Override
- protected LightToolWindow createContent(DesignerEditorPanelFacade designer) {
+ protected LightToolWindow createContent(@NotNull DesignerEditorPanelFacade designer) {
PalettePanel palettePanel = new PalettePanel();
palettePanel.loadPalette((DesignerEditorPanel)designer);
diff --git a/plugins/ui-designer/src/META-INF/plugin.xml b/plugins/ui-designer/src/META-INF/plugin.xml
index 1871b77a7cb8..1dbd8d76a91c 100644
--- a/plugins/ui-designer/src/META-INF/plugin.xml
+++ b/plugins/ui-designer/src/META-INF/plugin.xml
@@ -147,12 +147,12 @@
- com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager
+ com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager
- com.intellij.ide.palette.impl.PaletteManager
+ com.intellij.ide.palette.impl.PaletteToolWindowManager
com.intellij.uiDesigner.clientProperties.ClientPropertiesManager
diff --git a/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteComponentList.java b/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteComponentList.java
index ea4f6de53401..77b58a922a87 100644
--- a/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteComponentList.java
+++ b/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteComponentList.java
@@ -42,14 +42,16 @@ import java.awt.event.*;
*/
public class PaletteComponentList extends JBList {
private final Project myProject;
+ private final PaletteWindow myPalette;
private final PaletteGroup myGroup;
private int myHoverIndex = -1;
private int myBeforeClickSelectedRow = -1;
private int myDropTargetIndex = -1;
private boolean myNeedClearSelection = false;
- public PaletteComponentList(Project project, PaletteGroup group) {
+ public PaletteComponentList(Project project, PaletteWindow palette, PaletteGroup group) {
myProject = project;
+ myPalette = palette;
myGroup = group;
setModel(new AbstractListModel() {
public int getSize() {
@@ -118,15 +120,15 @@ public class PaletteComponentList extends JBList {
addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
- PaletteManager.getInstance(myProject).notifyKeyEvent(e);
+ myPalette.notifyKeyEvent(e);
}
public void keyReleased(KeyEvent e) {
- PaletteManager.getInstance(myProject).notifyKeyEvent(e);
+ myPalette.notifyKeyEvent(e);
}
public void keyTyped(KeyEvent e) {
- PaletteManager.getInstance(myProject).notifyKeyEvent(e);
+ myPalette.notifyKeyEvent(e);
}
});
@@ -395,7 +397,7 @@ public class PaletteComponentList extends JBList {
}
public void dropActionChanged(final int gestureModifiers) {
- PaletteManager.getInstance(myProject).notifyDropActionChanged(gestureModifiers);
+ myPalette.notifyDropActionChanged(gestureModifiers);
}
}
}
diff --git a/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteManager.java b/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteManager.java
deleted file mode 100644
index 1ad6a1cd858d..000000000000
--- a/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteManager.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * 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.ide.palette.impl;
-
-import com.intellij.icons.AllIcons;
-import com.intellij.ide.IdeBundle;
-import com.intellij.ide.palette.PaletteDragEventListener;
-import com.intellij.ide.palette.PaletteItem;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.components.ProjectComponent;
-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.ToolWindowManager;
-import com.intellij.util.containers.ContainerUtil;
-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.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.util.List;
-
-/**
- * @author yole
- */
-public class PaletteManager implements ProjectComponent {
- private final Project myProject;
- private final FileEditorManager myFileEditorManager;
- private PaletteWindow myPaletteWindow;
- private ToolWindow myPaletteToolWindow;
- private final List myKeyListeners = ContainerUtil.createLockFreeCopyOnWriteList();
- private final List myDragEventListeners = ContainerUtil.createLockFreeCopyOnWriteList();
- private final List mySelectionListeners = ContainerUtil.createLockFreeCopyOnWriteList();
-
- public PaletteManager(Project project, FileEditorManager fileEditorManager) {
- myProject = project;
- myFileEditorManager = fileEditorManager;
- }
-
- @Override
- public void projectOpened() {
- if (!ApplicationManager.getApplication().isHeadlessEnvironment()) {
- StartupManager.getInstance(myProject).registerPostStartupActivity(new Runnable() {
- @Override
- public void run() {
- myPaletteWindow = new PaletteWindow(myProject);
- myPaletteToolWindow = ToolWindowManager.getInstance(myProject).
- registerToolWindow(IdeBundle.message("toolwindow.palette"),
- myPaletteWindow,
- ToolWindowAnchor.RIGHT,
- myProject,
- true);
- myPaletteToolWindow.setIcon(AllIcons.Toolwindows.ToolWindowPalette);
- setContent();
- final MyFileEditorManagerListener myListener = new MyFileEditorManagerListener();
- myFileEditorManager.addFileEditorManagerListener(myListener, myProject);
- }
- });
- }
- }
-
- @Override
- public void projectClosed() {
- if (myPaletteWindow != null) {
- myPaletteWindow.dispose();
- ToolWindowManager.getInstance(myProject).unregisterToolWindow(IdeBundle.message("toolwindow.palette"));
- myPaletteWindow = null;
- }
- }
-
- @Override
- @NotNull
- public String getComponentName() {
- return "PaletteManager";
- }
-
- @Override
- public void initComponent() {
- }
-
- @Override
- public void disposeComponent() {
- if (myPaletteWindow != null) {
- myPaletteWindow.dispose();
- }
- }
-
- public static PaletteManager getInstance(final Project project) {
- return project.getComponent(PaletteManager.class);
- }
-
- public void clearActiveItem() {
- if (myPaletteWindow != null) {
- myPaletteWindow.clearActiveItem();
- }
- }
-
- @Nullable
- public PaletteItem getActiveItem() {
- if (myPaletteWindow != null) {
- return myPaletteWindow.getActiveItem();
- }
- return null;
- }
-
- @Nullable
- public T getActiveItem(Class cls) {
- PaletteItem item = getActiveItem();
- if (item != null && item.getClass().isInstance(item)) {
- //noinspection unchecked
- return (T)item;
- }
- return null;
- }
-
- public void addKeyListener(KeyListener l) {
- myKeyListeners.add(l);
- }
-
- public void removeKeyListener(KeyListener l) {
- myKeyListeners.remove(l);
- }
-
- public void addDragEventListener(PaletteDragEventListener l) {
- myDragEventListeners.add(l);
- }
-
- public void removeDragEventListener(PaletteDragEventListener l) {
- myDragEventListeners.remove(l);
- }
-
- public void addSelectionListener(ListSelectionListener l) {
- mySelectionListeners.add(l);
- }
-
- public void removeSelectionListener(ListSelectionListener l) {
- mySelectionListeners.remove(l);
- }
-
- private final MergingUpdateQueue myQueue = new MergingUpdateQueue("palette", 200, true, null);
-
- private void processFileEditorChange(@Nullable final VirtualFile selectedFile) {
- myQueue.cancelAllUpdates();
- myQueue.queue(new Update("update") {
- @Override
- public void run() {
- if (myPaletteWindow == null) return;
- myPaletteWindow.refreshPaletteIfChanged(selectedFile);
- setContent();
- }
- });
- }
-
- private void setContent() {
- if (myPaletteWindow.getActiveGroupCount() == 0) {
- myPaletteToolWindow.setAvailable(false, null);
- }
- else {
- myPaletteToolWindow.setAvailable(true, null);
- myPaletteToolWindow.show(null);
- }
- }
-
- void notifyKeyEvent(final KeyEvent e) {
- for (KeyListener l : myKeyListeners) {
- if (e.getID() == KeyEvent.KEY_PRESSED) {
- l.keyPressed(e);
- }
- else if (e.getID() == KeyEvent.KEY_RELEASED) {
- l.keyReleased(e);
- }
- else if (e.getID() == KeyEvent.KEY_TYPED) {
- l.keyTyped(e);
- }
- }
- }
-
- void notifyDropActionChanged(int gestureModifiers) {
- for (PaletteDragEventListener l : myDragEventListeners) {
- l.dropActionChanged(gestureModifiers);
- }
- }
-
- void notifySelectionChanged(final ListSelectionEvent event) {
- for (ListSelectionListener l : mySelectionListeners) {
- l.valueChanged(event);
- }
- }
-
- private class MyFileEditorManagerListener implements FileEditorManagerListener {
- @Override
- public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
- processFileEditorChange(file);
- }
-
- @Override
- public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
- processFileEditorChange(null);
- }
-
- @Override
- public void selectionChanged(@NotNull FileEditorManagerEvent event) {
- processFileEditorChange(event.getNewFile());
- }
- }
-}
diff --git a/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteToolWindowManager.java b/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteToolWindowManager.java
new file mode 100644
index 000000000000..c6fe8756d1f5
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteToolWindowManager.java
@@ -0,0 +1,118 @@
+/*
+ * 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.ide.palette.impl;
+
+import com.intellij.designer.DesignerEditorPanelFacade;
+import com.intellij.designer.LightToolWindow;
+import com.intellij.icons.AllIcons;
+import com.intellij.ide.IdeBundle;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.fileEditor.FileEditorManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.wm.ToolWindowAnchor;
+import com.intellij.openapi.wm.ToolWindowManager;
+import com.intellij.ui.content.Content;
+import com.intellij.ui.content.ContentManager;
+import com.intellij.uiDesigner.AbstractToolWindowManager;
+import com.intellij.uiDesigner.designSurface.GuiEditor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Alexander Lobas
+ */
+public class PaletteToolWindowManager extends AbstractToolWindowManager {
+ private final PaletteWindow myToolWindowPanel;
+
+ public PaletteToolWindowManager(Project project, FileEditorManager fileEditorManager) {
+ super(project, fileEditorManager);
+ myToolWindowPanel = ApplicationManager.getApplication().isHeadlessEnvironment() ? null : new PaletteWindow(project);
+ }
+
+ public static PaletteWindow getInstance(GuiEditor designer) {
+ PaletteToolWindowManager manager = getInstance(designer.getProject());
+ if (manager.isEditorMode()) {
+ return (PaletteWindow)manager.getContent(designer);
+ }
+ return manager.myToolWindowPanel;
+ }
+
+ public static PaletteToolWindowManager getInstance(Project project) {
+ return project.getComponent(PaletteToolWindowManager.class);
+ }
+
+ @Override
+ protected void initToolWindow() {
+ myToolWindow = ToolWindowManager.getInstance(myProject)
+ .registerToolWindow(IdeBundle.message("toolwindow.palette"), false, getAnchor(), myProject, true);
+ myToolWindow.setIcon(AllIcons.Toolwindows.ToolWindowPalette);
+ initGearActions();
+
+ ContentManager contentManager = myToolWindow.getContentManager();
+ Content content = contentManager.getFactory().createContent(myToolWindowPanel, null, false);
+ content.setCloseable(false);
+ content.setPreferredFocusableComponent(myToolWindowPanel);
+ contentManager.addContent(content);
+ contentManager.setSelectedContent(content, true);
+ myToolWindow.setAvailable(false, null);
+ }
+
+ @Override
+ protected void updateToolWindow(@Nullable DesignerEditorPanelFacade designer) {
+ myToolWindowPanel.refreshPaletteIfChanged((GuiEditor)designer);
+
+ if (designer == null) {
+ myToolWindow.setAvailable(false, null);
+ }
+ else {
+ myToolWindow.setAvailable(true, null);
+ myToolWindow.show(null);
+ }
+ }
+
+ @Override
+ protected ToolWindowAnchor getAnchor() {
+ return ToolWindowAnchor.RIGHT;
+ }
+
+ @Override
+ protected LightToolWindow createContent(@NotNull DesignerEditorPanelFacade designer) {
+ PaletteWindow palettePanel = new PaletteWindow(myProject);
+ palettePanel.refreshPaletteIfChanged((GuiEditor)designer);
+
+ return createContent(designer,
+ palettePanel,
+ IdeBundle.message("toolwindow.palette"),
+ AllIcons.Toolwindows.ToolWindowPalette,
+ palettePanel,
+ palettePanel,
+ 180,
+ null);
+ }
+
+ @Override
+ public void disposeComponent() {
+ if (myToolWindowPanel != null) {
+ myToolWindowPanel.dispose();
+ }
+ }
+
+ @NotNull
+ @Override
+ public String getComponentName() {
+ return "PaletteManager";
+ }
+}
\ No newline at end of file
diff --git a/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteWindow.java b/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteWindow.java
index 27f280386731..0c7b57ce999c 100644
--- a/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteWindow.java
+++ b/plugins/ui-designer/src/com/intellij/ide/palette/impl/PaletteWindow.java
@@ -15,18 +15,19 @@
*/
package com.intellij.ide.palette.impl;
+import com.intellij.designer.LightToolWindowContent;
import com.intellij.ide.palette.PaletteGroup;
import com.intellij.ide.palette.PaletteItem;
import com.intellij.ide.palette.PaletteItemProvider;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.extensions.Extensions;
-import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.PopupHandler;
import com.intellij.ui.ScrollPaneFactory;
import com.intellij.ui.components.JBTabbedPane;
+import com.intellij.uiDesigner.designSurface.GuiEditor;
import com.intellij.util.ArrayUtil;
import com.intellij.util.containers.HashSet;
import org.jetbrains.annotations.NonNls;
@@ -48,7 +49,7 @@ import java.util.*;
/**
* @author yole
*/
-public class PaletteWindow extends JPanel implements DataProvider {
+public class PaletteWindow extends JPanel implements LightToolWindowContent, DataProvider {
private final Project myProject;
private final ArrayList myGroupHeaders = new ArrayList();
private final PaletteItemProvider[] myProviders;
@@ -60,7 +61,6 @@ public class PaletteWindow extends JPanel implements DataProvider {
private PaletteGroupHeader myLastFocusedGroup;
@NonNls private static final String ourHelpID = "guiDesigner.uiTour.palette";
- private PaletteManager myPaletteManager;
private final DragSourceListener myDragSourceListener = new DragSourceAdapter() {
@Override
@@ -74,20 +74,17 @@ public class PaletteWindow extends JPanel implements DataProvider {
}
};
+ private GuiEditor myDesigner;
+
public PaletteWindow(Project project) {
myProject = project;
- myPaletteManager = PaletteManager.getInstance(myProject);
myProviders = Extensions.getExtensions(PaletteItemProvider.EP_NAME, project);
- for (PaletteItemProvider provider : myProviders) {
- provider.addListener(myPropertyChangeListener);
- }
setLayout(new GridLayout(1, 1));
myScrollPane.addMouseListener(new MyScrollPanePopupHandler());
myScrollPane.setBorder(null);
KeyStroke escStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
new ClearActiveItemAction().registerCustomShortcutSet(new CustomShortcutSet(escStroke), myScrollPane);
- refreshPalette();
if (!ApplicationManager.getApplication().isHeadlessEnvironment()) {
DragSource.getDefaultDragSource().addDragSourceListener(myDragSourceListener);
@@ -95,16 +92,40 @@ public class PaletteWindow extends JPanel implements DataProvider {
}
public void dispose() {
+ removePaletteProviderListener();
+
if (!ApplicationManager.getApplication().isHeadlessEnvironment()) {
DragSource.getDefaultDragSource().removeDragSourceListener(myDragSourceListener);
}
}
- public void refreshPalette() {
- refreshPalette(null);
+ private void addPaletteProviderListener() {
+ for (PaletteItemProvider provider : myProviders) {
+ provider.addListener(myPropertyChangeListener);
+ }
}
- public void refreshPalette(@Nullable VirtualFile selectedFile) {
+ private void removePaletteProviderListener() {
+ for (PaletteItemProvider provider : myProviders) {
+ provider.removeListener(myPropertyChangeListener);
+ }
+ }
+
+ public void refreshPaletteIfChanged(@Nullable GuiEditor designer) {
+ removePaletteProviderListener();
+ myDesigner = designer;
+ if (designer != null) {
+ addPaletteProviderListener();
+ }
+
+ VirtualFile file = designer == null ? null : designer.getFile();
+ Set currentGroups = new HashSet(collectCurrentGroups(file));
+ if (!currentGroups.equals(myGroups)) {
+ refreshPalette(file);
+ }
+ }
+
+ private void refreshPalette(@Nullable VirtualFile selectedFile) {
for (PaletteGroupHeader groupHeader : myGroupHeaders) {
groupHeader.getComponentList().removeListSelectionListener(myListSelectionListener);
}
@@ -161,7 +182,7 @@ public class PaletteWindow extends JPanel implements DataProvider {
myGroupHeaders.add(groupHeader);
myGroups.add(group);
control.add(groupHeader);
- PaletteComponentList componentList = new PaletteComponentList(myProject, group);
+ PaletteComponentList componentList = new PaletteComponentList(myProject, this, group);
control.add(componentList);
groupHeader.setComponentList(componentList);
componentList.addListSelectionListener(myListSelectionListener);
@@ -177,12 +198,6 @@ public class PaletteWindow extends JPanel implements DataProvider {
private ArrayList collectCurrentGroups(@Nullable VirtualFile selectedFile) {
ArrayList result = new ArrayList();
- if (selectedFile == null) {
- VirtualFile[] editedFiles = FileEditorManager.getInstance(myProject).getSelectedFiles();
- if (editedFiles.length > 0) {
- selectedFile = editedFiles[0];
- }
- }
if (selectedFile != null) {
for (PaletteItemProvider provider : myProviders) {
PaletteGroup[] groups = provider.getActiveGroups(selectedFile);
@@ -192,24 +207,13 @@ public class PaletteWindow extends JPanel implements DataProvider {
return result;
}
- public void refreshPaletteIfChanged(VirtualFile selectedFile) {
- Set currentGroups = new HashSet(collectCurrentGroups(selectedFile));
- if (!currentGroups.equals(myGroups)) {
- refreshPalette(selectedFile);
- }
- }
-
- public int getActiveGroupCount() {
- return myGroups.size();
- }
-
public void clearActiveItem() {
if (getActiveItem() == null) return;
for (PaletteGroupHeader group : myGroupHeaders) {
group.getComponentList().clearSelection();
}
ListSelectionEvent event = new ListSelectionEvent(this, -1, -1, false);
- myPaletteManager.notifySelectionChanged(event);
+ notifySelectionChanged(event);
}
@Nullable
@@ -222,6 +226,16 @@ public class PaletteWindow extends JPanel implements DataProvider {
return null;
}
+ @Nullable
+ public T getActiveItem(Class cls) {
+ PaletteItem item = getActiveItem();
+ if (item != null && item.getClass().isInstance(item)) {
+ //noinspection unchecked
+ return (T)item;
+ }
+ return null;
+ }
+
@Nullable
public Object getData(String dataId) {
if (PlatformDataKeys.HELP_ID.is(dataId)) {
@@ -269,6 +283,29 @@ public class PaletteWindow extends JPanel implements DataProvider {
}
}
+ void notifyKeyEvent(final KeyEvent e) {
+ if (myDesigner != null) {
+ if (e.getID() == KeyEvent.KEY_PRESSED) {
+ myDesigner.paletteKeyPressed(e);
+ }
+ else if (e.getID() == KeyEvent.KEY_RELEASED) {
+ myDesigner.paletteKeyReleased(e);
+ }
+ }
+ }
+
+ void notifyDropActionChanged(int gestureModifiers) {
+ if (myDesigner != null) {
+ myDesigner.paletteDropActionChanged(gestureModifiers);
+ }
+ }
+
+ void notifySelectionChanged(final ListSelectionEvent event) {
+ if (myDesigner != null) {
+ myDesigner.paletteValueChanged(event);
+ }
+ }
+
private class MyListSelectionListener implements ListSelectionListener {
public void valueChanged(ListSelectionEvent e) {
PaletteComponentList sourceList = (PaletteComponentList)e.getSource();
@@ -283,13 +320,13 @@ public class PaletteWindow extends JPanel implements DataProvider {
break;
}
}
- myPaletteManager.notifySelectionChanged(e);
+ notifySelectionChanged(e);
}
}
private class MyPropertyChangeListener implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent evt) {
- refreshPalette();
+ refreshPalette(myDesigner.getFile());
}
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/AbstractToolWindowManager.java b/plugins/ui-designer/src/com/intellij/uiDesigner/AbstractToolWindowManager.java
new file mode 100644
index 000000000000..1a221506c1c2
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/AbstractToolWindowManager.java
@@ -0,0 +1,67 @@
+/*
+ * 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.uiDesigner;
+
+import com.intellij.designer.DesignerEditorPanelFacade;
+import com.intellij.designer.LightToolWindowManager;
+import com.intellij.designer.ToggleEditorModeAction;
+import com.intellij.ide.palette.impl.PaletteToolWindowManager;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.fileEditor.FileEditor;
+import com.intellij.openapi.fileEditor.FileEditorManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.wm.ToolWindowAnchor;
+import com.intellij.uiDesigner.editor.UIFormEditor;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Alexander Lobas
+ */
+public abstract class AbstractToolWindowManager extends LightToolWindowManager {
+ public AbstractToolWindowManager(Project project, FileEditorManager fileEditorManager) {
+ super(project, fileEditorManager);
+ }
+
+ @Override
+ public void projectOpened() {
+ if (!ApplicationManager.getApplication().isHeadlessEnvironment()) {
+ super.projectOpened();
+ }
+ }
+
+ @Nullable
+ @Override
+ protected DesignerEditorPanelFacade getDesigner(FileEditor editor) {
+ if (editor instanceof UIFormEditor) {
+ UIFormEditor formEditor = (UIFormEditor)editor;
+ return formEditor.getEditor();
+ }
+ return null;
+ }
+
+ @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;
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/FormEditingUtil.java b/plugins/ui-designer/src/com/intellij/uiDesigner/FormEditingUtil.java
index 6f9866018f4c..f2443b264b78 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/FormEditingUtil.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/FormEditingUtil.java
@@ -41,7 +41,7 @@ import com.intellij.uiDesigner.editor.UIFormEditor;
import com.intellij.uiDesigner.lw.*;
import com.intellij.uiDesigner.palette.ComponentItem;
import com.intellij.uiDesigner.palette.Palette;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import com.intellij.uiDesigner.propertyInspector.properties.BindingProperty;
import com.intellij.uiDesigner.propertyInspector.properties.IntroComponentProperty;
import com.intellij.uiDesigner.radComponents.RadAbstractGridLayoutManager;
@@ -602,7 +602,7 @@ public final class FormEditingUtil {
if (project == null) {
return null;
}
- final UIDesignerToolWindowManager toolWindowManager = UIDesignerToolWindowManager.getInstance(project);
+ final DesignerToolWindowManager toolWindowManager = DesignerToolWindowManager.getInstance(project);
if (toolWindowManager == null) {
return null;
}
@@ -702,7 +702,7 @@ public final class FormEditingUtil {
final RadContainer root = (RadContainer)getRoot(component);
if (root == null) return;
- ComponentTreeBuilder builder = UIDesignerToolWindowManager.getInstance(component.getProject()).getComponentTreeBuilder();
+ ComponentTreeBuilder builder = DesignerToolWindowManager.getInstance(editor).getComponentTreeBuilder();
// this can return null if the click to select the control also requested to grab the focus -
// the component tree will be instantiated after the event has been processed completely
if (builder != null) {
@@ -724,7 +724,7 @@ public final class FormEditingUtil {
public static void selectComponents(final GuiEditor editor, List components) {
if (components.size() > 0) {
RadComponent component = components.get(0);
- ComponentTreeBuilder builder = UIDesignerToolWindowManager.getInstance(component.getProject()).getComponentTreeBuilder();
+ ComponentTreeBuilder builder = DesignerToolWindowManager.getInstance(editor).getComponentTreeBuilder();
if (builder == null) {
// race condition when handling event?
return;
@@ -780,7 +780,7 @@ public final class FormEditingUtil {
}
public static Object getNextSaveUndoGroupId(final Project project) {
- final GuiEditor guiEditor = UIDesignerToolWindowManager.getInstance(project).getActiveFormEditor();
+ final GuiEditor guiEditor = DesignerToolWindowManager.getInstance(project).getActiveFormEditor();
return guiEditor == null ? null : guiEditor.getNextSaveGroupId();
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/FormHighlightingPass.java b/plugins/ui-designer/src/com/intellij/uiDesigner/FormHighlightingPass.java
index dae49482b998..e78c1d957f74 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/FormHighlightingPass.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/FormHighlightingPass.java
@@ -19,7 +19,7 @@ package com.intellij.uiDesigner;
import com.intellij.codeHighlighting.HighlightingPass;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.uiDesigner.designSurface.GuiEditor;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import org.jetbrains.annotations.NotNull;
/**
@@ -37,7 +37,7 @@ public class FormHighlightingPass implements HighlightingPass {
}
public void applyInformationToEditor() {
- UIDesignerToolWindowManager.getInstance(myEditor.getProject()).refreshErrors();
+ DesignerToolWindowManager.getInstance(myEditor).refreshErrors();
myEditor.refreshIntentionHint();
}
-}
+}
\ No newline at end of file
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ExpandSelectionAction.java b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ExpandSelectionAction.java
index c04c39ac4f4b..d1f2e6dd3688 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ExpandSelectionAction.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ExpandSelectionAction.java
@@ -18,13 +18,14 @@ package com.intellij.uiDesigner.actions;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
-import com.intellij.uiDesigner.*;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
-import com.intellij.uiDesigner.radComponents.RadComponent;
-import com.intellij.uiDesigner.radComponents.RadContainer;
-import com.intellij.uiDesigner.designSurface.GuiEditor;
+import com.intellij.uiDesigner.FormEditingUtil;
+import com.intellij.uiDesigner.SelectionState;
import com.intellij.uiDesigner.componentTree.ComponentPtr;
import com.intellij.uiDesigner.componentTree.ComponentTreeBuilder;
+import com.intellij.uiDesigner.designSurface.GuiEditor;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
+import com.intellij.uiDesigner.radComponents.RadComponent;
+import com.intellij.uiDesigner.radComponents.RadContainer;
import java.util.Stack;
@@ -43,7 +44,7 @@ public final class ExpandSelectionAction extends AnAction{
final SelectionState selectionState = editor.getSelectionState();
selectionState.setInsideChange(true);
- ComponentTreeBuilder builder = UIDesignerToolWindowManager.getInstance(editor.getProject()).getComponentTreeBuilder();
+ ComponentTreeBuilder builder = DesignerToolWindowManager.getInstance(editor).getComponentTreeBuilder();
if (builder != null) {
builder.beginUpdateSelection();
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ResetValueAction.java b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ResetValueAction.java
index 108451fff59c..d9085a3d08c5 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ResetValueAction.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ResetValueAction.java
@@ -18,10 +18,7 @@ package com.intellij.uiDesigner.actions;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.uiDesigner.designSurface.GuiEditor;
-import com.intellij.uiDesigner.propertyInspector.Property;
-import com.intellij.uiDesigner.propertyInspector.PropertyInspector;
-import com.intellij.uiDesigner.propertyInspector.PropertyInspectorTable;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
+import com.intellij.uiDesigner.propertyInspector.*;
import com.intellij.uiDesigner.radComponents.RadComponent;
import java.util.ArrayList;
@@ -44,7 +41,7 @@ public class ResetValueAction extends AbstractGuiEditorAction {
public static void doResetValue(final List selection, final Property property, final GuiEditor editor) {
try {
if (!editor.ensureEditable()) return;
- final PropertyInspector propertyInspector = UIDesignerToolWindowManager.getInstance(editor.getProject()).getPropertyInspector();
+ final PropertyInspector propertyInspector = DesignerToolWindowManager.getInstance(editor).getPropertyInspector();
if (propertyInspector.isEditing()) {
propertyInspector.stopEditing();
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/SelectAllComponentsAction.java b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/SelectAllComponentsAction.java
index cdfe0686c438..2569b4fb8477 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/SelectAllComponentsAction.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/SelectAllComponentsAction.java
@@ -15,13 +15,13 @@
*/
package com.intellij.uiDesigner.actions;
-import com.intellij.uiDesigner.designSurface.GuiEditor;
-import com.intellij.uiDesigner.radComponents.RadComponent;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
-import com.intellij.uiDesigner.componentTree.ComponentTreeBuilder;
-import com.intellij.uiDesigner.FormEditingUtil;
-import com.intellij.uiDesigner.lw.IComponent;
import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.uiDesigner.FormEditingUtil;
+import com.intellij.uiDesigner.componentTree.ComponentTreeBuilder;
+import com.intellij.uiDesigner.designSurface.GuiEditor;
+import com.intellij.uiDesigner.lw.IComponent;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
+import com.intellij.uiDesigner.radComponents.RadComponent;
import java.util.List;
@@ -30,7 +30,7 @@ import java.util.List;
*/
public class SelectAllComponentsAction extends AbstractGuiEditorAction {
protected void actionPerformed(final GuiEditor editor, final List selection, final AnActionEvent e) {
- final ComponentTreeBuilder builder = UIDesignerToolWindowManager.getInstance(editor.getProject()).getComponentTreeBuilder();
+ final ComponentTreeBuilder builder = DesignerToolWindowManager.getInstance(editor).getComponentTreeBuilder();
builder.beginUpdateSelection();
try {
FormEditingUtil.iterate(editor.getRootContainer(), new FormEditingUtil.ComponentVisitor() {
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ShrinkSelectionAction.java b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ShrinkSelectionAction.java
index ccbbe252164b..20d79845c45f 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ShrinkSelectionAction.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/ShrinkSelectionAction.java
@@ -18,12 +18,12 @@ package com.intellij.uiDesigner.actions;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
-import com.intellij.uiDesigner.SelectionState;
import com.intellij.uiDesigner.FormEditingUtil;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
+import com.intellij.uiDesigner.SelectionState;
import com.intellij.uiDesigner.componentTree.ComponentPtr;
import com.intellij.uiDesigner.componentTree.ComponentTreeBuilder;
import com.intellij.uiDesigner.designSurface.GuiEditor;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import java.util.Stack;
@@ -37,7 +37,7 @@ public final class ShrinkSelectionAction extends AnAction{
assert editor != null;
final SelectionState selectionState = editor.getSelectionState();
selectionState.setInsideChange(true);
- ComponentTreeBuilder builder = UIDesignerToolWindowManager.getInstance(editor.getProject()).getComponentTreeBuilder();
+ ComponentTreeBuilder builder = DesignerToolWindowManager.getInstance(editor).getComponentTreeBuilder();
builder.beginUpdateSelection();
try{
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/ComponentTreeBuilder.java b/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/ComponentTreeBuilder.java
index 25791e2815da..aa5161ea0b96 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/ComponentTreeBuilder.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/ComponentTreeBuilder.java
@@ -25,8 +25,8 @@ import com.intellij.uiDesigner.FormEditingUtil;
import com.intellij.uiDesigner.HierarchyChangeListener;
import com.intellij.uiDesigner.SelectionWatcher;
import com.intellij.uiDesigner.designSurface.GuiEditor;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import com.intellij.uiDesigner.propertyInspector.PropertyInspector;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
import com.intellij.uiDesigner.radComponents.RadComponent;
import com.intellij.uiDesigner.radComponents.RadContainer;
import org.jetbrains.annotations.NotNull;
@@ -221,7 +221,7 @@ public final class ComponentTreeBuilder extends AbstractTreeBuilder {
}
private void updateSelection() {
- final PropertyInspector propertyInspector = UIDesignerToolWindowManager.getInstance(myEditor.getProject()).getPropertyInspector();
+ final PropertyInspector propertyInspector = DesignerToolWindowManager.getInstance(myEditor).getPropertyInspector();
if (propertyInspector.isEditing()) {
propertyInspector.stopEditing();
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/DesignDropTargetListener.java b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/DesignDropTargetListener.java
index d96eac097f48..f3ddc85e9280 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/DesignDropTargetListener.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/DesignDropTargetListener.java
@@ -15,26 +15,26 @@
*/
package com.intellij.uiDesigner.designSurface;
-import com.intellij.ide.palette.impl.PaletteManager;
+import com.intellij.ide.palette.impl.PaletteToolWindowManager;
import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.command.CommandProcessor;
+import com.intellij.openapi.diagnostic.Logger;
import com.intellij.uiDesigner.CutCopyPasteSupport;
import com.intellij.uiDesigner.FormEditingUtil;
import com.intellij.uiDesigner.SimpleTransferable;
import com.intellij.uiDesigner.UIDesignerBundle;
import com.intellij.uiDesigner.componentTree.ComponentTree;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
import com.intellij.uiDesigner.core.GridConstraints;
import com.intellij.uiDesigner.palette.ComponentItem;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import com.intellij.uiDesigner.radComponents.RadComponent;
import com.intellij.uiDesigner.radComponents.RadContainer;
import javax.swing.*;
import java.awt.*;
import java.awt.dnd.*;
-import java.util.List;
import java.util.ArrayList;
+import java.util.List;
/**
* @author yole
@@ -49,12 +49,10 @@ class DesignDropTargetListener implements DropTargetListener {
private final GuiEditor myEditor;
private final GridInsertProcessor myGridInsertProcessor;
private boolean myUseDragDelta = false;
- private final ComponentTree myComponentTree;
public DesignDropTargetListener(final GuiEditor editor) {
myEditor = editor;
myGridInsertProcessor = new GridInsertProcessor(editor);
- myComponentTree = UIDesignerToolWindowManager.getInstance(editor.getProject()).getComponentTree();
}
public void dragEnter(DropTargetDragEvent dtde) {
@@ -150,16 +148,18 @@ class DesignDropTargetListener implements DropTargetListener {
myEditor.getDragLayer().repaint();
ComponentDropLocation location = myGridInsertProcessor.processDragEvent(dtde.getLocation(), myComponentDragObject);
+ ComponentTree componentTree = DesignerToolWindowManager.getInstance(myEditor).getComponentTree();
+
if (!location.canDrop(myComponentDragObject) ||
(myDraggedComponentList != null && FormEditingUtil.isDropOnChild(myDraggedComponentList, location))) {
- if (myComponentTree != null) {
- myComponentTree.setDropTargetComponent(null);
+ if (componentTree != null) {
+ componentTree.setDropTargetComponent(null);
}
dtde.rejectDrag();
}
else {
- if (myComponentTree != null) {
- myComponentTree.setDropTargetComponent(location.getContainer());
+ if (componentTree != null) {
+ componentTree.setDropTargetComponent(location.getContainer());
}
dtde.acceptDrag(dtde.getDropAction());
}
@@ -178,8 +178,9 @@ class DesignDropTargetListener implements DropTargetListener {
public void dragExit(DropTargetEvent dte) {
try {
- if (myComponentTree != null) {
- myComponentTree.setDropTargetComponent(null);
+ ComponentTree componentTree = DesignerToolWindowManager.getInstance(myEditor).getComponentTree();
+ if (componentTree != null) {
+ componentTree.setDropTargetComponent(null);
}
myUseDragDelta = false;
if (myDraggedComponentList != null) {
@@ -198,8 +199,9 @@ class DesignDropTargetListener implements DropTargetListener {
public void drop(final DropTargetDropEvent dtde) {
try {
- if (myComponentTree != null) {
- myComponentTree.setDropTargetComponent(null);
+ ComponentTree componentTree = DesignerToolWindowManager.getInstance(myEditor).getComponentTree();
+ if (componentTree != null) {
+ componentTree.setDropTargetComponent(null);
}
@@ -221,7 +223,7 @@ class DesignDropTargetListener implements DropTargetListener {
new InsertComponentProcessor(myEditor).processComponentInsert(dtde.getLocation(), componentItem);
ApplicationManager.getApplication().invokeLater(new Runnable() {
public void run() {
- PaletteManager.getInstance(myEditor.getProject()).clearActiveItem();
+ PaletteToolWindowManager.getInstance(myEditor).clearActiveItem();
myEditor.getActiveDecorationLayer().removeFeedback();
myEditor.getLayeredPane().setCursor(null);
myEditor.getGlassLayer().requestFocus();
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GlassLayer.java b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GlassLayer.java
index 015a9dc4653e..8122989132d8 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GlassLayer.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GlassLayer.java
@@ -21,7 +21,7 @@ import com.intellij.ui.popup.PopupOwner;
import com.intellij.uiDesigner.FormEditingUtil;
import com.intellij.uiDesigner.actions.*;
import com.intellij.uiDesigner.componentTree.ComponentTree;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import com.intellij.uiDesigner.radComponents.RadComponent;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -136,7 +136,7 @@ public final class GlassLayer extends JComponent implements DataProvider, PopupO
*/
public Object getData(final String dataId) {
if(CommonDataKeys.NAVIGATABLE.is(dataId)) {
- final ComponentTree componentTree = UIDesignerToolWindowManager.getInstance(myEditor.getProject()).getComponentTree();
+ final ComponentTree componentTree = DesignerToolWindowManager.getInstance(myEditor).getComponentTree();
if (componentTree != null) {
return componentTree.getData(dataId);
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java
index 22d4d461f2ac..7459a05a33c3 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java
@@ -17,10 +17,10 @@ package com.intellij.uiDesigner.designSurface;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.designer.DesignerEditorPanelFacade;
+import com.intellij.designer.LightFillLayout;
import com.intellij.ide.DeleteProvider;
import com.intellij.ide.highlighter.XmlFileHighlighter;
-import com.intellij.ide.palette.PaletteDragEventListener;
-import com.intellij.ide.palette.impl.PaletteManager;
+import com.intellij.ide.palette.impl.PaletteToolWindowManager;
import com.intellij.lang.properties.psi.PropertiesFile;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
@@ -43,7 +43,9 @@ import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogBuilder;
import com.intellij.openapi.ui.ThreeComponentsSplitter;
+import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Ref;
+import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
@@ -57,13 +59,15 @@ import com.intellij.uiDesigner.componentTree.ComponentSelectionListener;
import com.intellij.uiDesigner.componentTree.ComponentTree;
import com.intellij.uiDesigner.core.GridLayoutManager;
import com.intellij.uiDesigner.core.Util;
+import com.intellij.uiDesigner.editor.UIFormEditor;
import com.intellij.uiDesigner.lw.CompiledClassPropertiesProvider;
import com.intellij.uiDesigner.lw.IComponent;
import com.intellij.uiDesigner.lw.IProperty;
import com.intellij.uiDesigner.lw.LwRootContainer;
import com.intellij.uiDesigner.palette.ComponentItem;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindow;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import com.intellij.uiDesigner.propertyInspector.PropertyInspector;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
import com.intellij.uiDesigner.propertyInspector.properties.IntroStringProperty;
import com.intellij.uiDesigner.radComponents.RadComponent;
import com.intellij.uiDesigner.radComponents.RadContainer;
@@ -71,6 +75,7 @@ import com.intellij.uiDesigner.radComponents.RadRootContainer;
import com.intellij.uiDesigner.radComponents.RadTabbedPane;
import com.intellij.util.Alarm;
import com.intellij.util.NotNullProducer;
+import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -78,11 +83,13 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.event.EventListenerList;
import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
-import java.awt.event.*;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Locale;
@@ -100,6 +107,7 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
private static final Logger LOG = Logger.getInstance("#com.intellij.uiDesigner.GuiEditor");
private final Project myProject;
+ @NotNull private final UIFormEditor myEditor;
private Module myModule;
@NotNull private final VirtualFile myFile;
@@ -184,7 +192,9 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
*/
private boolean myInsideChange;
private final DocumentAdapter myDocumentListener;
- private final CardLayout myCardLayout;
+ private final CardLayout myCardLayout = new CardLayout();
+ private final ThreeComponentsSplitter myContentSplitter = new ThreeComponentsSplitter();
+ private final JPanel myCardPanel = new JPanel(myCardLayout);
@NonNls private final static String CARD_VALID = "valid";
@NonNls private final static String CARD_INVALID = "invalid";
@@ -207,9 +217,6 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
private final QuickFixManagerImpl myQuickFixManager;
private final GridCaptionPanel myHorzCaptionPanel;
private final GridCaptionPanel myVertCaptionPanel;
- private final MyPaletteKeyListener myPaletteKeyListener;
- private final MyPaletteDragListener myPaletteDragListener;
- private final MyPaletteSelectionListener myPaletteSelectionListener;
private ComponentPtr mySelectionAnchor;
private ComponentPtr mySelectionLead;
/**
@@ -226,7 +233,8 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
* @throws java.lang.IllegalArgumentException if the file
* is null or file is not valid PsiFile
*/
- public GuiEditor(Project project, @NotNull final Module module, @NotNull final VirtualFile file) {
+ public GuiEditor(@NotNull UIFormEditor editor, @NotNull Project project, @NotNull Module module, @NotNull VirtualFile file) {
+ myEditor = editor;
LOG.assertTrue(file.isValid());
myProject = project;
@@ -235,13 +243,25 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
myCutCopyPasteSupport = new CutCopyPasteSupport(this);
- myCardLayout = new CardLayout();
- setLayout(myCardLayout);
+ setLayout(new BorderLayout());
+
+ myContentSplitter.setDividerWidth(0);
+ myContentSplitter.setDividerMouseZoneSize(Registry.intValue("ide.splitter.mouseZone"));
+ add(myContentSplitter, BorderLayout.CENTER);
myValidCard = new JPanel(new BorderLayout());
myInvalidCard = createInvalidCard();
- add(myValidCard, CARD_VALID);
- add(myInvalidCard, CARD_INVALID);
+
+ myCardPanel.add(myValidCard, CARD_VALID);
+ myCardPanel.add(myInvalidCard, CARD_INVALID);
+
+ JPanel contentPanel = new JPanel(new LightFillLayout());
+ JLabel toolbar = new JLabel();
+ toolbar.setVisible(false);
+ contentPanel.add(toolbar);
+ contentPanel.add(myCardPanel);
+
+ myContentSplitter.setInnerComponent(contentPanel);
myListenerList = new EventListenerList();
@@ -350,23 +370,28 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
myActiveDecorationLayer.installSelectionWatcher();
- final PaletteManager paletteManager = PaletteManager.getInstance(getProject());
- myPaletteKeyListener = new MyPaletteKeyListener();
- paletteManager.addKeyListener(myPaletteKeyListener);
- myPaletteDragListener = new MyPaletteDragListener();
- paletteManager.addDragEventListener(myPaletteDragListener);
- myPaletteSelectionListener = new MyPaletteSelectionListener();
- paletteManager.addSelectionListener(myPaletteSelectionListener);
-
ActionManager.getInstance().getAction("GuiDesigner.IncreaseIndent").registerCustomShortcutSet(
new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0)), myGlassLayer);
ActionManager.getInstance().getAction("GuiDesigner.DecreaseIndent").registerCustomShortcutSet(
new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, KeyEvent.SHIFT_MASK)), myGlassLayer);
+
+ UIUtil.invokeLaterIfNeeded(new Runnable() {
+ @Override
+ public void run() {
+ DesignerToolWindowManager.getInstance(myProject).bind(GuiEditor.this);
+ PaletteToolWindowManager.getInstance(myProject).bind(GuiEditor.this);
+ }
+ });
}
@Override
public ThreeComponentsSplitter getContentSplitter() {
- return null; // TODO: Auto-generated method stub
+ return myContentSplitter;
+ }
+
+ @NotNull
+ public UIFormEditor getEditor() {
+ return myEditor;
}
@NotNull
@@ -385,13 +410,14 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
myWhere = new Exception();
}
- final PaletteManager paletteManager = PaletteManager.getInstance(getProject());
- paletteManager.removeKeyListener(myPaletteKeyListener);
- paletteManager.removeDragEventListener(myPaletteDragListener);
- paletteManager.removeSelectionListener(myPaletteSelectionListener);
myDocument.removeDocumentListener(myDocumentListener);
PsiManager.getInstance(getProject()).removePsiTreeChangeListener(myPsiTreeChangeListener);
+
+ DesignerToolWindowManager.getInstance(myProject).dispose(this);
+ PaletteToolWindowManager.getInstance(myProject).dispose(this);
myPsiTreeChangeListener.dispose();
+
+ Disposer.dispose(myContentSplitter);
}
@NotNull
@@ -459,8 +485,7 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
public void refreshAndSave(final boolean forceSync) {
// Update property inspector
- final UIDesignerToolWindowManager manager = UIDesignerToolWindowManager.getInstance(getProject());
- final PropertyInspector propertyInspector = manager.getPropertyInspector();
+ final PropertyInspector propertyInspector = DesignerToolWindowManager.getInstance(this).getPropertyInspector();
if (propertyInspector != null) {
propertyInspector.synchWithTree(forceSync);
}
@@ -509,8 +534,7 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
// Standard Swing cut/copy/paste actions should work if user is editing something inside property inspector
Project project = getProject();
if (project.isDisposed()) return null;
- final UIDesignerToolWindowManager manager = UIDesignerToolWindowManager.getInstance(project);
- final PropertyInspector inspector = manager.getPropertyInspector();
+ final PropertyInspector inspector = DesignerToolWindowManager.getInstance(this).getPropertyInspector();
if (inspector != null && inspector.isEditing()) {
return null;
}
@@ -667,7 +691,7 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
public void setStringDescriptorLocale(final Locale locale) {
myRootContainer.setStringDescriptorLocale(locale);
refreshProperties();
- UIDesignerToolWindowManager.getInstance(getProject()).updateComponentTree();
+ DesignerToolWindowManager.getInstance(this).updateComponentTree();
DaemonCodeAnalyzer.getInstance(getProject()).restart();
}
@@ -705,10 +729,10 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
});
if (!anythingModified.isNull()) {
refresh();
- final UIDesignerToolWindowManager twm = UIDesignerToolWindowManager.getInstance(getProject());
- ComponentTree tree = twm.getComponentTree();
+ DesignerToolWindow designerToolWindow = DesignerToolWindowManager.getInstance(this);
+ ComponentTree tree = designerToolWindow.getComponentTree();
if (tree != null) tree.repaint();
- PropertyInspector inspector = twm.getPropertyInspector();
+ PropertyInspector inspector = designerToolWindow.getPropertyInspector();
if (inspector != null) inspector.synchWithTree(true);
}
}
@@ -871,7 +895,7 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
restoreTabbedPaneSelectedTabs(tabbedPaneSelectedTabs);
}
myInvalid = false;
- myCardLayout.show(this, CARD_VALID);
+ myCardLayout.show(myCardPanel, CARD_VALID);
refresh();
}
catch (Exception exc) {
@@ -892,7 +916,7 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
setRootContainer(new RadRootContainer(this, "0"));
myFormInvalidLabel.setText(UIDesignerBundle.message("error.form.file.is.invalid.message", FormEditingUtil.getExceptionMessage(exc)));
myInvalid = true;
- myCardLayout.show(this, CARD_INVALID);
+ myCardLayout.show(myCardPanel, CARD_INVALID);
repaint();
}
@@ -995,10 +1019,6 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
return undoManager.isUndoInProgress() || undoManager.isRedoInProgress();
}
- private boolean isActiveEditor() {
- return UIDesignerToolWindowManager.getInstance(getProject()).getActiveFormEditor() == this;
- }
-
void hideIntentionHint() {
myQuickFixManager.hideIntentionHint();
}
@@ -1095,8 +1115,7 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
}
public void update(final AnActionEvent e) {
- final UIDesignerToolWindowManager manager = UIDesignerToolWindowManager.getInstance(getProject());
- PropertyInspector inspector = manager.getPropertyInspector();
+ PropertyInspector inspector = DesignerToolWindowManager.getInstance(GuiEditor.this).getPropertyInspector();
e.getPresentation().setEnabled(inspector != null && !inspector.isEditing());
}
}
@@ -1117,9 +1136,8 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
}
public boolean canDeleteElement(@NotNull final DataContext dataContext) {
- final UIDesignerToolWindowManager manager = UIDesignerToolWindowManager.getInstance(getProject());
return
- !manager.getPropertyInspector().isEditing() &&
+ !DesignerToolWindowManager.getInstance(GuiEditor.this).getPropertyInspector().isEditing() &&
!myInplaceEditingLayer.isEditing() &&
FormEditingUtil.canDeleteSelection(GuiEditor.this);
}
@@ -1223,39 +1241,30 @@ public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade
}
}
- private class MyPaletteKeyListener extends KeyAdapter {
- @Override
- public void keyPressed(KeyEvent e) {
- PaletteManager paletteManager = PaletteManager.getInstance(getProject());
- if (e.getKeyCode() == KeyEvent.VK_SHIFT && paletteManager.getActiveItem(ComponentItem.class) != null && isActiveEditor()) {
- setDesignTimeInsets(12);
- }
- }
-
- @Override
- public void keyReleased(KeyEvent e) {
- if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
- setDesignTimeInsets(2);
- }
+ public void paletteKeyPressed(KeyEvent e) {
+ if (e.getKeyCode() == KeyEvent.VK_SHIFT && PaletteToolWindowManager.getInstance(this).getActiveItem(ComponentItem.class) != null) {
+ setDesignTimeInsets(12);
}
}
- private class MyPaletteDragListener implements PaletteDragEventListener {
- public void dropActionChanged(int gestureModifiers) {
- if ((gestureModifiers & InputEvent.SHIFT_MASK) != 0 && isActiveEditor()) {
- setDesignTimeInsets(12);
- }
- else {
- setDesignTimeInsets(2);
- }
+ public void paletteKeyReleased(KeyEvent e) {
+ if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
+ setDesignTimeInsets(2);
}
}
- private class MyPaletteSelectionListener implements ListSelectionListener {
- public void valueChanged(ListSelectionEvent e) {
- if (PaletteManager.getInstance(getProject()).getActiveItem() == null) {
- myProcessor.cancelPaletteInsert();
- }
+ public void paletteDropActionChanged(int gestureModifiers) {
+ if ((gestureModifiers & InputEvent.SHIFT_MASK) != 0) {
+ setDesignTimeInsets(12);
+ }
+ else {
+ setDesignTimeInsets(2);
}
}
-}
+
+ public void paletteValueChanged(ListSelectionEvent e) {
+ if (PaletteToolWindowManager.getInstance(this).getActiveItem() == null) {
+ myProcessor.cancelPaletteInsert();
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/InsertComponentProcessor.java b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/InsertComponentProcessor.java
index b088447afa0b..4eb3f32a0ed3 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/InsertComponentProcessor.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/InsertComponentProcessor.java
@@ -17,7 +17,7 @@ package com.intellij.uiDesigner.designSurface;
import com.intellij.CommonBundle;
import com.intellij.codeInsight.FileModificationService;
-import com.intellij.ide.palette.impl.PaletteManager;
+import com.intellij.ide.palette.impl.PaletteToolWindowManager;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.diagnostic.Logger;
@@ -63,7 +63,6 @@ import java.util.Map;
public final class InsertComponentProcessor extends EventProcessor {
private static final Logger LOG = Logger.getInstance("#com.intellij.uiDesigner.designSurface.InsertComponentProcessor");
- private final PaletteManager myPaletteManager;
private final GuiEditor myEditor;
private boolean mySticky;
private RadComponent myInsertedComponent;
@@ -87,7 +86,6 @@ public final class InsertComponentProcessor extends EventProcessor {
public InsertComponentProcessor(@NotNull final GuiEditor editor) {
myEditor = editor;
myGridInsertProcessor = new GridInsertProcessor(editor);
- myPaletteManager = PaletteManager.getInstance(editor.getProject());
}
public void setSticky(final boolean sticky) {
@@ -261,7 +259,7 @@ public final class InsertComponentProcessor extends EventProcessor {
private ComponentItem getComponentToInsert() {
return (myComponentToInsert != null)
? myComponentToInsert
- : myPaletteManager.getActiveItem(ComponentItem.class);
+ : PaletteToolWindowManager.getInstance(myEditor).getActiveItem(ComponentItem.class);
}
public void processComponentInsert(@NotNull final Point point, final ComponentItem item) {
@@ -295,7 +293,7 @@ public final class InsertComponentProcessor extends EventProcessor {
setCursor(Cursor.getDefaultCursor());
if (myInsertedComponent == null) {
if (!mySticky) {
- PaletteManager.getInstance(myEditor.getProject()).clearActiveItem();
+ PaletteToolWindowManager.getInstance(myEditor).clearActiveItem();
}
return;
}
@@ -328,7 +326,7 @@ public final class InsertComponentProcessor extends EventProcessor {
checkBindTopLevelPanel();
if (!mySticky) {
- PaletteManager.getInstance(myEditor.getProject()).clearActiveItem();
+ PaletteToolWindowManager.getInstance(myEditor).clearActiveItem();
}
myEditor.refreshAndSave(false);
@@ -578,7 +576,7 @@ public final class InsertComponentProcessor extends EventProcessor {
}
public Cursor processMouseMoveEvent(final MouseEvent e) {
- final ComponentItem componentItem = myPaletteManager.getActiveItem(ComponentItem.class);
+ final ComponentItem componentItem = PaletteToolWindowManager.getInstance(myEditor).getActiveItem(ComponentItem.class);
if (componentItem != null) {
return myGridInsertProcessor.processMouseMoveEvent(e.getPoint(), false, new ComponentItemDragObject(componentItem));
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/MainProcessor.java b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/MainProcessor.java
index 3816a3aa66f8..951ae951f56e 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/MainProcessor.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/MainProcessor.java
@@ -15,7 +15,7 @@
*/
package com.intellij.uiDesigner.designSurface;
-import com.intellij.ide.palette.impl.PaletteManager;
+import com.intellij.ide.palette.impl.PaletteToolWindowManager;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.uiDesigner.FormEditingUtil;
@@ -58,7 +58,7 @@ public final class MainProcessor extends EventProcessor{
if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
if (e.getID() == KeyEvent.KEY_PRESSED) {
if ((myCurrentProcessor != null && myCurrentProcessor.isDragActive()) ||
- (PaletteManager.getInstance(myEditor.getProject()).getActiveItem(ComponentItem.class) != null &&
+ (PaletteToolWindowManager.getInstance(myEditor).getActiveItem(ComponentItem.class) != null &&
myCurrentProcessor != myInsertComponentProcessor)) {
myEditor.setDesignTimeInsets(12);
}
@@ -151,7 +151,7 @@ public final class MainProcessor extends EventProcessor{
Cursor cursor = Cursor.getDefaultCursor();
if(id==MouseEvent.MOUSE_MOVED){
- if (PaletteManager.getInstance(myEditor.getProject()).getActiveItem(ComponentItem.class) != null) {
+ if (PaletteToolWindowManager.getInstance(myEditor).getActiveItem(ComponentItem.class) != null) {
if (myInsertFeedbackEnabled) {
cursor = myInsertComponentProcessor.processMouseMoveEvent(e);
}
@@ -292,7 +292,7 @@ public final class MainProcessor extends EventProcessor{
return;
}
- final ComponentItem selectedItem = PaletteManager.getInstance(myEditor.getProject()).getActiveItem(ComponentItem.class);
+ final ComponentItem selectedItem = PaletteToolWindowManager.getInstance(myEditor).getActiveItem(ComponentItem.class);
if (selectedItem != null) {
myInsertComponentProcessor.setSticky(UIUtil.isControlKeyDown(e));
myCurrentProcessor = myInsertComponentProcessor;
@@ -341,7 +341,7 @@ public final class MainProcessor extends EventProcessor{
return true;
}
}
- else if (PaletteManager.getInstance(myEditor.getProject()).getActiveItem(ComponentItem.class) != null) {
+ else if (PaletteToolWindowManager.getInstance(myEditor).getActiveItem(ComponentItem.class) != null) {
cancelPaletteInsert();
return true;
}
@@ -349,7 +349,7 @@ public final class MainProcessor extends EventProcessor{
}
void cancelPaletteInsert() {
- PaletteManager.getInstance(myEditor.getProject()).clearActiveItem();
+ PaletteToolWindowManager.getInstance(myEditor).clearActiveItem();
myEditor.getLayeredPane().setCursor(Cursor.getDefaultCursor());
myEditor.getActiveDecorationLayer().removeFeedback();
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/PassiveDecorationLayer.java b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/PassiveDecorationLayer.java
index 070612857a53..1153adadfdf0 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/PassiveDecorationLayer.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/PassiveDecorationLayer.java
@@ -17,7 +17,7 @@ package com.intellij.uiDesigner.designSurface;
import com.intellij.uiDesigner.FormEditingUtil;
import com.intellij.uiDesigner.componentTree.ComponentTree;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import com.intellij.uiDesigner.radComponents.RadButtonGroup;
import com.intellij.uiDesigner.radComponents.RadComponent;
import com.intellij.uiDesigner.radComponents.RadRootContainer;
@@ -56,7 +56,7 @@ class PassiveDecorationLayer extends JComponent{
final Set paintedGroups = new HashSet();
final RadRootContainer rootContainer = myEditor.getRootContainer();
- final ComponentTree componentTree = UIDesignerToolWindowManager.getInstance(component.getProject()).getComponentTree();
+ final ComponentTree componentTree = DesignerToolWindowManager.getInstance(myEditor).getComponentTree();
final Collection selectedGroups = componentTree != null
? componentTree.getSelectedElements(RadButtonGroup.class)
: Collections.emptyList();
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/QuickFixManagerImpl.java b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/QuickFixManagerImpl.java
index 15e1c34daf78..241ae963a3cd 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/QuickFixManagerImpl.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/QuickFixManagerImpl.java
@@ -18,14 +18,12 @@ package com.intellij.uiDesigner.designSurface;
import com.intellij.uiDesigner.ErrorAnalyzer;
import com.intellij.uiDesigner.ErrorInfo;
import com.intellij.uiDesigner.FormEditingUtil;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
+import com.intellij.uiDesigner.componentTree.ComponentSelectionListener;
import com.intellij.uiDesigner.quickFixes.QuickFixManager;
import com.intellij.uiDesigner.radComponents.RadComponent;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
import java.awt.*;
import java.util.ArrayList;
@@ -35,9 +33,9 @@ import java.util.ArrayList;
public class QuickFixManagerImpl extends QuickFixManager {
public QuickFixManagerImpl(final GuiEditor editor, final GlassLayer component, final JViewport viewPort) {
super(editor, component, viewPort);
- final UIDesignerToolWindowManager toolWindowManager = UIDesignerToolWindowManager.getInstance(editor.getProject());
- toolWindowManager.addComponentSelectionListener(new TreeSelectionListener() {
- public void valueChanged(TreeSelectionEvent e) {
+ editor.addComponentSelectionListener(new ComponentSelectionListener() {
+ @Override
+ public void selectedComponentChanged(GuiEditor source) {
hideIntentionHint();
updateIntentionHintVisibility();
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/editor/UIFormEditor.java b/plugins/ui-designer/src/com/intellij/uiDesigner/editor/UIFormEditor.java
index 796b880b6244..c457500c703c 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/editor/UIFormEditor.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/editor/UIFormEditor.java
@@ -48,14 +48,14 @@ public final class UIFormEditor extends UserDataHolderBase implements /*Navigata
private final GuiEditor myEditor;
private UIFormEditor.MyBackgroundEditorHighlighter myBackgroundEditorHighlighter;
- public UIFormEditor(final Project project, final VirtualFile file){
+ public UIFormEditor(@NotNull final Project project, @NotNull final VirtualFile file){
final VirtualFile vf = file instanceof LightVirtualFile ? ((LightVirtualFile)file).getOriginalFile() : file;
final Module module = ModuleUtil.findModuleForFile(vf, project);
if (module == null) {
throw new IllegalArgumentException("No module for file " + file + " in project " + project);
}
myFile = file;
- myEditor = new GuiEditor(project, module, file);
+ myEditor = new GuiEditor(this, project, module, file);
}
@NotNull
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/DesignerToolWindow.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/DesignerToolWindow.java
new file mode 100644
index 000000000000..e8164e19e21e
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/DesignerToolWindow.java
@@ -0,0 +1,139 @@
+/*
+ * 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.uiDesigner.propertyInspector;
+
+import com.intellij.designer.LightToolWindowContent;
+import com.intellij.openapi.actionSystem.DataProvider;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.ui.Splitter;
+import com.intellij.openapi.util.Disposer;
+import com.intellij.ui.IdeBorderFactory;
+import com.intellij.ui.ScrollPaneFactory;
+import com.intellij.ui.SideBorder;
+import com.intellij.uiDesigner.componentTree.ComponentTree;
+import com.intellij.uiDesigner.componentTree.ComponentTreeBuilder;
+import com.intellij.uiDesigner.designSurface.GuiEditor;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import java.awt.*;
+
+/**
+ * @author Alexander Lobas
+ */
+public class DesignerToolWindow implements LightToolWindowContent {
+ private final MyToolWindowPanel myToolWindowPanel = new MyToolWindowPanel();
+ private ComponentTree myComponentTree;
+ private ComponentTreeBuilder myComponentTreeBuilder;
+ private PropertyInspector myPropertyInspector;
+
+ public DesignerToolWindow(Project project) {
+ myComponentTree = new ComponentTree(project);
+
+ JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myComponentTree);
+ scrollPane.setBorder(IdeBorderFactory.createBorder(SideBorder.BOTTOM));
+ scrollPane.setPreferredSize(new Dimension(250, -1));
+ myComponentTree.initQuickFixManager(scrollPane.getViewport());
+
+ myPropertyInspector = new PropertyInspector(project, myComponentTree);
+
+ myToolWindowPanel.setFirstComponent(scrollPane);
+ myToolWindowPanel.setSecondComponent(myPropertyInspector);
+ }
+
+ @Override
+ public void dispose() {
+ clearTreeBuilder();
+ myToolWindowPanel.dispose();
+ myComponentTree = null;
+ myPropertyInspector = null;
+ }
+
+ private void clearTreeBuilder() {
+ if (myComponentTreeBuilder != null) {
+ Disposer.dispose(myComponentTreeBuilder);
+ myComponentTreeBuilder = null;
+ }
+ }
+
+ public void update(GuiEditor designer) {
+ clearTreeBuilder();
+
+ myComponentTree.setModel(new DefaultTreeModel(new DefaultMutableTreeNode()));
+ myComponentTree.setEditor(designer);
+ myPropertyInspector.setEditor(designer);
+
+ if (designer == null) {
+ myComponentTree.setFormEditor(null);
+ }
+ else {
+ myComponentTree.setFormEditor(designer.getEditor());
+ myComponentTreeBuilder = new ComponentTreeBuilder(myComponentTree, designer);
+ }
+ }
+
+ public JComponent getToolWindowPanel() {
+ return myToolWindowPanel;
+ }
+
+ public ComponentTree getComponentTree() {
+ return myComponentTree;
+ }
+
+ public ComponentTreeBuilder getComponentTreeBuilder() {
+ return myComponentTreeBuilder;
+ }
+
+ public void updateComponentTree() {
+ if (myComponentTreeBuilder != null) {
+ myComponentTreeBuilder.queueUpdate();
+ }
+ }
+
+ public PropertyInspector getPropertyInspector() {
+ return myPropertyInspector;
+ }
+
+ public void refreshErrors() {
+ if (myComponentTree != null) {
+ myComponentTree.refreshIntentionHint();
+ myComponentTree.repaint(myComponentTree.getVisibleRect());
+ }
+
+ // PropertyInspector
+ if (myPropertyInspector != null) {
+ myPropertyInspector.refreshIntentionHint();
+ myPropertyInspector.repaint(myPropertyInspector.getVisibleRect());
+ }
+ }
+
+ private class MyToolWindowPanel extends Splitter implements DataProvider {
+ MyToolWindowPanel() {
+ super(true, 0.33f);
+ }
+
+ @Nullable
+ public Object getData(@NonNls String dataId) {
+ if (GuiEditor.DATA_KEY.is(dataId) && myComponentTree != null) {
+ return myComponentTree.getData(dataId);
+ }
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/DesignerToolWindowManager.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/DesignerToolWindowManager.java
new file mode 100644
index 000000000000..36e6935dae99
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/DesignerToolWindowManager.java
@@ -0,0 +1,131 @@
+/*
+ * 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.uiDesigner.propertyInspector;
+
+import com.intellij.designer.DesignerEditorPanelFacade;
+import com.intellij.designer.LightToolWindow;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.fileEditor.FileEditorManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.wm.ToolWindowAnchor;
+import com.intellij.openapi.wm.ToolWindowManager;
+import com.intellij.openapi.wm.impl.content.ToolWindowContentUi;
+import com.intellij.ui.content.Content;
+import com.intellij.ui.content.ContentManager;
+import com.intellij.uiDesigner.AbstractToolWindowManager;
+import com.intellij.uiDesigner.UIDesignerBundle;
+import com.intellij.uiDesigner.designSurface.GuiEditor;
+import icons.UIDesignerIcons;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Alexander Lobas
+ */
+public class DesignerToolWindowManager extends AbstractToolWindowManager {
+ private final DesignerToolWindow myToolWindowPanel;
+
+ public DesignerToolWindowManager(Project project, FileEditorManager fileEditorManager) {
+ super(project, fileEditorManager);
+ myToolWindowPanel = ApplicationManager.getApplication().isHeadlessEnvironment() ? null : new DesignerToolWindow(project);
+ }
+
+ public static DesignerToolWindow getInstance(GuiEditor designer) {
+ DesignerToolWindowManager manager = getInstance(designer.getProject());
+ if (manager.isEditorMode()) {
+ return (DesignerToolWindow)manager.getContent(designer);
+ }
+ return manager.myToolWindowPanel;
+ }
+
+ public static DesignerToolWindowManager getInstance(Project project) {
+ return project.getComponent(DesignerToolWindowManager.class);
+ }
+
+ @Nullable
+ public GuiEditor getActiveFormEditor() {
+ return (GuiEditor)getActiveDesigner();
+ }
+
+ @Override
+ protected void initToolWindow() {
+ myToolWindow = ToolWindowManager.getInstance(myProject).registerToolWindow(UIDesignerBundle.message("toolwindow.ui.designer.name"),
+ false, getAnchor(), myProject, true);
+ myToolWindow.setIcon(UIDesignerIcons.ToolWindowUIDesigner);
+
+ if (!ApplicationManager.getApplication().isHeadlessEnvironment()) {
+ myToolWindow.getComponent().putClientProperty(ToolWindowContentUi.HIDE_ID_LABEL, "true");
+ }
+
+ initGearActions();
+
+ ContentManager contentManager = myToolWindow.getContentManager();
+ Content content =
+ contentManager.getFactory()
+ .createContent(myToolWindowPanel.getToolWindowPanel(), UIDesignerBundle.message("toolwindow.ui.designer.title"), false);
+ content.setCloseable(false);
+ content.setPreferredFocusableComponent(myToolWindowPanel.getComponentTree());
+ contentManager.addContent(content);
+ contentManager.setSelectedContent(content, true);
+ myToolWindow.setAvailable(false, null);
+ }
+
+ @Override
+ protected void updateToolWindow(@Nullable DesignerEditorPanelFacade designer) {
+ myToolWindowPanel.update((GuiEditor)designer);
+
+ if (designer == null) {
+ myToolWindow.setAvailable(false, null);
+ }
+ else {
+ myToolWindow.setAvailable(true, null);
+ myToolWindow.show(null);
+ }
+ }
+
+ @Override
+ protected ToolWindowAnchor getAnchor() {
+ return ToolWindowAnchor.LEFT;
+ }
+
+ @Override
+ protected LightToolWindow createContent(@NotNull DesignerEditorPanelFacade designer) {
+ DesignerToolWindow toolWindowContent = new DesignerToolWindow(myProject);
+ toolWindowContent.update((GuiEditor)designer);
+
+ return createContent(designer,
+ toolWindowContent,
+ UIDesignerBundle.message("toolwindow.ui.designer.title"),
+ UIDesignerIcons.ToolWindowUIDesigner,
+ toolWindowContent.getToolWindowPanel(),
+ toolWindowContent.getComponentTree(),
+ 320,
+ null);
+ }
+
+ @Override
+ public void disposeComponent() {
+ if (myToolWindowPanel != null) {
+ myToolWindowPanel.dispose();
+ }
+ }
+
+ @NotNull
+ @Override
+ public String getComponentName() {
+ return "UIDesignerToolWindowManager";
+ }
+}
\ No newline at end of file
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/PropertyInspectorTable.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/PropertyInspectorTable.java
index 059ba0407107..e4b7fccedbff 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/PropertyInspectorTable.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/PropertyInspectorTable.java
@@ -281,7 +281,8 @@ public final class PropertyInspectorTable extends Table implements DataProvider{
return myEditor;
}
else if (PlatformDataKeys.FILE_EDITOR.is(dataId)) {
- return UIDesignerToolWindowManager.getInstance(myProject).getActiveFormFileEditor();
+ GuiEditor designer = DesignerToolWindowManager.getInstance(myProject).getActiveFormEditor();
+ return designer == null ? null : designer.getEditor();
}
else if (PlatformDataKeys.HELP_ID.is(dataId)) {
return ourHelpID;
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/UIDesignerToolWindowManager.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/UIDesignerToolWindowManager.java
deleted file mode 100644
index 5d6092c8032a..000000000000
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/UIDesignerToolWindowManager.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright 2000-2009 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.uiDesigner.propertyInspector;
-
-import com.intellij.openapi.actionSystem.DataProvider;
-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.Project;
-import com.intellij.openapi.ui.Splitter;
-import com.intellij.openapi.util.Disposer;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.wm.ToolWindow;
-import com.intellij.openapi.wm.ToolWindowAnchor;
-import com.intellij.openapi.wm.ToolWindowManager;
-import com.intellij.ui.IdeBorderFactory;
-import com.intellij.ui.ScrollPaneFactory;
-import com.intellij.ui.SideBorder;
-import com.intellij.uiDesigner.UIDesignerBundle;
-import com.intellij.uiDesigner.componentTree.ComponentTree;
-import com.intellij.uiDesigner.componentTree.ComponentTreeBuilder;
-import com.intellij.uiDesigner.designSurface.GuiEditor;
-import com.intellij.uiDesigner.editor.UIFormEditor;
-import com.intellij.util.containers.ContainerUtil;
-import com.intellij.util.ui.update.MergingUpdateQueue;
-import com.intellij.util.ui.update.Update;
-import icons.UIDesignerIcons;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.*;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import java.awt.*;
-import java.util.List;
-
-/**
- * @author yole
- */
-public class UIDesignerToolWindowManager implements ProjectComponent {
- private final Project myProject;
- private MyToolWindowPanel myToolWindowPanel;
- private ComponentTree myComponentTree;
- private ComponentTreeBuilder myComponentTreeBuilder;
- private PropertyInspector myPropertyInspector;
- private final FileEditorManager myFileEditorManager;
- private ToolWindow myToolWindow;
- private boolean myToolWindowDisposed = false;
- private final List myPendingListeners = ContainerUtil.createLockFreeCopyOnWriteList();
-
- public UIDesignerToolWindowManager(final Project project, final FileEditorManager fileEditorManager) {
- myProject = project;
- myFileEditorManager = fileEditorManager;
- MyFileEditorManagerListener listener = new MyFileEditorManagerListener();
- myFileEditorManager.addFileEditorManagerListener(listener,project);
- }
-
- public void projectOpened() {
- }
-
- private void checkInitToolWindow() {
- if (!myToolWindowDisposed && myToolWindow == null) {
- initToolWindow();
- }
- }
-
- private void initToolWindow() {
- myToolWindowPanel = new MyToolWindowPanel();
- myComponentTree = new ComponentTree(myProject);
- for (TreeSelectionListener listener : myPendingListeners) {
- myComponentTree.addTreeSelectionListener(listener);
- }
- myPendingListeners.clear();
- final JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myComponentTree);
- scrollPane.setBorder(IdeBorderFactory.createBorder(SideBorder.BOTTOM));
- scrollPane.setPreferredSize(new Dimension(250, -1));
- myComponentTree.initQuickFixManager(scrollPane.getViewport());
- myPropertyInspector= new PropertyInspector(myProject, myComponentTree);
- myToolWindowPanel.setFirstComponent(scrollPane);
- myToolWindowPanel.setSecondComponent(myPropertyInspector);
- myToolWindow = ToolWindowManager.getInstance(myProject).registerToolWindow(UIDesignerBundle.message("toolwindow.ui.designer"),
- myToolWindowPanel,
- ToolWindowAnchor.LEFT, myProject, true);
- myToolWindow.setIcon(UIDesignerIcons.ToolWindowUIDesigner);
- myToolWindow.setAvailable(false, null);
- }
-
- public void projectClosed() {
- if (myToolWindowPanel != null) {
- if (myComponentTreeBuilder != null) {
- Disposer.dispose(myComponentTreeBuilder);
- }
- myToolWindowPanel = null;
- myToolWindow = null;
- myToolWindowDisposed = true;
- }
- }
-
- @NotNull @NonNls
- public String getComponentName() {
- return "UIDesignerToolWindowManager";
- }
-
- public void initComponent() {
- }
-
- public void disposeComponent() {
- }
-
- private final MergingUpdateQueue myQueue = new MergingUpdateQueue("property.inspector", 200, true, null);
-
- private void processFileEditorChange(final UIFormEditor newEditor) {
- myQueue.cancelAllUpdates();
- myQueue.queue(new Update("update") {
- public void run() {
- if (myToolWindowDisposed) return;
- GuiEditor activeFormEditor = newEditor != null ? newEditor.getEditor() : null;
- if (myToolWindow == null) {
- if (activeFormEditor == null) return;
- initToolWindow();
- }
- if (myComponentTreeBuilder != null) {
- Disposer.dispose(myComponentTreeBuilder);
- myComponentTreeBuilder = null;
- }
- myComponentTree.setModel(new DefaultTreeModel(new DefaultMutableTreeNode()));
- myComponentTree.setEditor(activeFormEditor);
- myComponentTree.setFormEditor(newEditor);
- myPropertyInspector.setEditor(activeFormEditor);
- if (activeFormEditor == null) {
- myToolWindow.setAvailable(false, null);
- }
- else {
- myComponentTreeBuilder = new ComponentTreeBuilder(myComponentTree, activeFormEditor);
- myToolWindow.setAvailable(true, null);
- myToolWindow.show(null);
- }
- }
- });
- }
-
- @Nullable
- public UIFormEditor getActiveFormFileEditor() {
- FileEditor[] fileEditors = myFileEditorManager.getSelectedEditors();
- for (FileEditor fileEditor : fileEditors) {
- if (fileEditor instanceof UIFormEditor) {
- return (UIFormEditor)fileEditor;
- }
- }
- return null;
- }
-
- @Nullable
- public GuiEditor getActiveFormEditor() {
- UIFormEditor formEditor = getActiveFormFileEditor();
- return formEditor == null ? null : formEditor.getEditor();
- }
-
- public static UIDesignerToolWindowManager getInstance(Project project) {
- return project.getComponent(UIDesignerToolWindowManager.class);
- }
-
- public ComponentTree getComponentTree() {
- checkInitToolWindow();
- return myComponentTree;
- }
-
- public ComponentTreeBuilder getComponentTreeBuilder() {
- return myComponentTreeBuilder;
- }
-
- public PropertyInspector getPropertyInspector() {
- return myPropertyInspector;
- }
-
- public void refreshErrors() {
- if (myComponentTree != null) {
- myComponentTree.refreshIntentionHint();
- myComponentTree.repaint(myComponentTree.getVisibleRect());
- }
-
- // PropertyInspector
- if (myPropertyInspector != null) {
- myPropertyInspector.refreshIntentionHint();
- myPropertyInspector.repaint(myPropertyInspector.getVisibleRect());
- }
- }
-
- public void updateComponentTree() {
- final ComponentTreeBuilder builder = myComponentTreeBuilder;
- if (builder != null) {
- builder.queueUpdate();
- }
- }
-
- public void addComponentSelectionListener(TreeSelectionListener treeSelectionListener) {
- if (myComponentTree != null) {
- myComponentTree.addTreeSelectionListener(treeSelectionListener);
- }
- else {
- myPendingListeners.add(treeSelectionListener);
- }
- }
-
- private class MyFileEditorManagerListener implements FileEditorManagerListener {
- public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
- processFileEditorChange(getActiveFormFileEditor());
- }
-
- public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
- ApplicationManager.getApplication().invokeLater(new Runnable() {
- @Override
- public void run() {
- processFileEditorChange(getActiveFormFileEditor());
- }
- });
- }
-
- public void selectionChanged(@NotNull FileEditorManagerEvent event) {
- UIFormEditor newEditor = event.getNewEditor() instanceof UIFormEditor ? (UIFormEditor)event.getNewEditor() : null;
- processFileEditorChange(newEditor);
- }
- }
-
- private class MyToolWindowPanel extends Splitter implements DataProvider {
- MyToolWindowPanel() {
- super(true, 0.33f);
- }
-
- @Nullable
- public Object getData(@NonNls String dataId) {
- if (GuiEditor.DATA_KEY.is(dataId)) {
- return getActiveFormEditor();
- }
- return null;
- }
- }
-}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/BindingEditor.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/BindingEditor.java
index 03c65b6640b1..c7547c7ff710 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/BindingEditor.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/BindingEditor.java
@@ -25,8 +25,8 @@ import com.intellij.uiDesigner.FormEditingUtil;
import com.intellij.uiDesigner.core.Spacer;
import com.intellij.uiDesigner.inspections.FormInspectionUtil;
import com.intellij.uiDesigner.lw.IRootContainer;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import com.intellij.uiDesigner.propertyInspector.InplaceContext;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
import com.intellij.uiDesigner.propertyInspector.properties.BindingProperty;
import com.intellij.uiDesigner.radComponents.RadComponent;
import com.intellij.uiDesigner.radComponents.RadErrorComponent;
@@ -67,7 +67,8 @@ public final class BindingEditor extends ComboBoxPropertyEditor {
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
- UIDesignerToolWindowManager.getInstance(project).getPropertyInspector().requestFocus();
+ DesignerToolWindowManager.getInstance(DesignerToolWindowManager.getInstance(project).getActiveFormEditor())
+ .getPropertyInspector().requestFocus();
}
}
);
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/string/StringEditor.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/string/StringEditor.java
index 99a6bbc82fcf..2f22910f08af 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/string/StringEditor.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/string/StringEditor.java
@@ -26,9 +26,9 @@ import com.intellij.ui.DocumentAdapter;
import com.intellij.uiDesigner.UIDesignerBundle;
import com.intellij.uiDesigner.designSurface.GuiEditor;
import com.intellij.uiDesigner.lw.StringDescriptor;
-import com.intellij.uiDesigner.propertyInspector.PropertyEditor;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import com.intellij.uiDesigner.propertyInspector.InplaceContext;
+import com.intellij.uiDesigner.propertyInspector.PropertyEditor;
import com.intellij.uiDesigner.propertyInspector.properties.IntroStringProperty;
import com.intellij.uiDesigner.radComponents.RadComponent;
import com.intellij.util.ui.UIUtil;
@@ -170,7 +170,7 @@ public final class StringEditor extends PropertyEditor {
public void actionPerformed(final ActionEvent e) {
// 1. Show editor dialog
- final GuiEditor guiEditor = UIDesignerToolWindowManager.getInstance(myProject).getActiveFormEditor();
+ final GuiEditor guiEditor = DesignerToolWindowManager.getInstance(myProject).getActiveFormEditor();
LOG.assertTrue(guiEditor != null);
final StringEditorDialog dialog = new StringEditorDialog(
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/properties/BindingProperty.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/properties/BindingProperty.java
index 58306f72167a..70d7d3017a95 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/properties/BindingProperty.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/properties/BindingProperty.java
@@ -39,10 +39,10 @@ import com.intellij.uiDesigner.compiler.AsmCodeGenerator;
import com.intellij.uiDesigner.designSurface.GuiEditor;
import com.intellij.uiDesigner.designSurface.InsertComponentProcessor;
import com.intellij.uiDesigner.inspections.FormInspectionUtil;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import com.intellij.uiDesigner.propertyInspector.Property;
import com.intellij.uiDesigner.propertyInspector.PropertyEditor;
import com.intellij.uiDesigner.propertyInspector.PropertyRenderer;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
import com.intellij.uiDesigner.propertyInspector.editors.BindingEditor;
import com.intellij.uiDesigner.propertyInspector.renderers.LabelPropertyRenderer;
import com.intellij.uiDesigner.quickFixes.CreateFieldFix;
@@ -177,7 +177,7 @@ public final class BindingProperty extends Property {
}
// Commit document before refactoring starts
- GuiEditor editor = UIDesignerToolWindowManager.getInstance(project).getActiveFormEditor();
+ GuiEditor editor = DesignerToolWindowManager.getInstance(project).getActiveFormEditor();
if (editor != null) {
editor.refreshAndSave(false);
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/quickFixes/ShowHintAction.java b/plugins/ui-designer/src/com/intellij/uiDesigner/quickFixes/ShowHintAction.java
index f08294c5cbff..beb87f197151 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/quickFixes/ShowHintAction.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/quickFixes/ShowHintAction.java
@@ -17,8 +17,8 @@ package com.intellij.uiDesigner.quickFixes;
import com.intellij.openapi.actionSystem.*;
import com.intellij.uiDesigner.designSurface.GuiEditor;
+import com.intellij.uiDesigner.propertyInspector.DesignerToolWindowManager;
import com.intellij.uiDesigner.propertyInspector.PropertyInspector;
-import com.intellij.uiDesigner.propertyInspector.UIDesignerToolWindowManager;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -46,8 +46,7 @@ final class ShowHintAction extends AnAction {
myManager.showIntentionHint();
// 2. Commit possible non committed value and show popup
- final UIDesignerToolWindowManager manager = UIDesignerToolWindowManager.getInstance(editor.getProject());
- final PropertyInspector propertyInspector = manager.getPropertyInspector();
+ final PropertyInspector propertyInspector = DesignerToolWindowManager.getInstance(myManager.getEditor()).getPropertyInspector();
if(propertyInspector != null && propertyInspector.isEditing()) {
propertyInspector.stopEditing();
}
diff --git a/plugins/ui-designer/src/messages/UIDesignerBundle.properties b/plugins/ui-designer/src/messages/UIDesignerBundle.properties
index d8231bc59b39..d544e3993776 100644
--- a/plugins/ui-designer/src/messages/UIDesignerBundle.properties
+++ b/plugins/ui-designer/src/messages/UIDesignerBundle.properties
@@ -271,7 +271,8 @@ add.component.choose.icon=Choose Icon File
inspection.no.scroll.pane=Scrollable component not in JScrollPane
inspection.no.scroll.pane.quickfix=Surround with JScrollPane
surround.with.popup.title=Surround With
-toolwindow.ui.designer=UI Designer
+toolwindow.ui.designer.name=UI Designer
+toolwindow.ui.designer.title=Component Tree
error.cannot.delete.unused.field=Cannot delete unused field: {0}
command.delete.unused.field=Delete Unused Field
error.for.component=Component {0}: {1}
|