summaryrefslogtreecommitdiff
path: root/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java')
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java213
1 files changed, 133 insertions, 80 deletions
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 dbbc27655f4e..7459a05a33c3 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/GuiEditor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * 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.
@@ -16,9 +16,11 @@
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.palette.PaletteDragEventListener;
-import com.intellij.ide.palette.impl.PaletteManager;
+import com.intellij.ide.highlighter.XmlFileHighlighter;
+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;
@@ -27,14 +29,23 @@ import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.command.undo.UndoManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.editor.EditorFactory;
+import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.event.DocumentAdapter;
import com.intellij.openapi.editor.event.DocumentEvent;
+import com.intellij.openapi.editor.ex.EditorEx;
+import com.intellij.openapi.editor.ex.util.LexerEditorHighlighter;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.module.Module;
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.*;
@@ -48,19 +59,22 @@ 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;
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;
@@ -69,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;
@@ -87,10 +103,11 @@ import java.util.Map;
* @author Anton Katilin
* @author Vladimir Kondratyev
*/
-public final class GuiEditor extends JPanel implements DataProvider, ModuleProvider {
+public final class GuiEditor extends JPanel implements DesignerEditorPanelFacade, DataProvider, ModuleProvider {
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;
@@ -175,7 +192,9 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
*/
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";
@@ -198,9 +217,6 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
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;
/**
@@ -214,11 +230,11 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
/**
* @param file file to be edited
- * @throws java.lang.IllegalArgumentException
- * if the <code>file</code>
- * is <code>null</code> or <code>file</code> is not valid PsiFile
+ * @throws java.lang.IllegalArgumentException if the <code>file</code>
+ * is <code>null</code> or <code>file</code> 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;
@@ -227,13 +243,25 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
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();
@@ -288,7 +316,7 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
readFromFile(false);
JPanel panel = new JPanel(new GridBagLayout());
- panel.setBackground(Color.LIGHT_GRAY);
+ panel.setBackground(GridCaptionPanel.getGutterColor());
myHorzCaptionPanel = new GridCaptionPanel(this, false);
myVertCaptionPanel = new GridCaptionPanel(this, true);
@@ -311,7 +339,13 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
gbc.weighty = 1.0;
myScrollPane = ScrollPaneFactory.createScrollPane(myLayeredPane);
- myScrollPane.setBackground(new JBColor(Color.WHITE, UIUtil.getListBackground()));
+ myScrollPane.setBackground(new JBColor(new NotNullProducer<Color>() {
+ @NotNull
+ @Override
+ public Color produce() {
+ return EditorColorsManager.getInstance().getGlobalScheme().getDefaultBackground();
+ }
+ }));
panel.add(myScrollPane, gbc);
myHorzCaptionPanel.attachToScrollPane(myScrollPane);
myVertCaptionPanel.attachToScrollPane(myScrollPane);
@@ -336,18 +370,28 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
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 myContentSplitter;
+ }
+
+ @NotNull
+ public UIFormEditor getEditor() {
+ return myEditor;
}
@NotNull
@@ -366,13 +410,14 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
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
@@ -440,8 +485,7 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
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);
}
@@ -490,8 +534,7 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
// 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;
}
@@ -519,7 +562,7 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
/**
* @return the component which represents DnD layer. All currently
- * dragged (moved) component are on this layer.
+ * dragged (moved) component are on this layer.
*/
public DragLayer getDragLayer() {
return myDragLayer;
@@ -527,7 +570,7 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
/**
* @return the topmost <code>UiConainer</code> which in the root of
- * component hierarchy. This method never returns <code>null</code>.
+ * component hierarchy. This method never returns <code>null</code>.
*/
@NotNull
public RadRootContainer getRootContainer() {
@@ -558,7 +601,7 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
/**
* @return the component which represents layer with active decorators
- * such as grid edit controls, inplace editors, etc.
+ * such as grid edit controls, inplace editors, etc.
*/
public InplaceEditingLayer getInplaceEditingLayer() {
return myInplaceEditingLayer;
@@ -648,7 +691,7 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
public void setStringDescriptorLocale(final Locale locale) {
myRootContainer.setStringDescriptorLocale(locale);
refreshProperties();
- UIDesignerToolWindowManager.getInstance(getProject()).updateComponentTree();
+ DesignerToolWindowManager.getInstance(this).updateComponentTree();
DaemonCodeAnalyzer.getInstance(getProject()).restart();
}
@@ -686,10 +729,10 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
});
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);
}
}
@@ -852,7 +895,7 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
restoreTabbedPaneSelectedTabs(tabbedPaneSelectedTabs);
}
myInvalid = false;
- myCardLayout.show(this, CARD_VALID);
+ myCardLayout.show(myCardPanel, CARD_VALID);
refresh();
}
catch (Exception exc) {
@@ -873,7 +916,7 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
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();
}
@@ -976,14 +1019,35 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
return undoManager.isUndoInProgress() || undoManager.isRedoInProgress();
}
- private boolean isActiveEditor() {
- return UIDesignerToolWindowManager.getInstance(getProject()).getActiveFormEditor() == this;
- }
-
void hideIntentionHint() {
myQuickFixManager.hideIntentionHint();
}
+ public void showFormSource() {
+ EditorFactory editorFactory = EditorFactory.getInstance();
+
+ Editor editor = editorFactory.createViewer(myDocument, myProject);
+
+ try {
+ ((EditorEx)editor).setHighlighter(
+ new LexerEditorHighlighter(new XmlFileHighlighter(), EditorColorsManager.getInstance().getGlobalScheme()));
+
+ JComponent component = editor.getComponent();
+ component.setPreferredSize(new Dimension(640, 480));
+
+ DialogBuilder dialog = new DialogBuilder(myProject);
+
+ dialog.title("Form - " + myFile.getPresentableName()).dimensionKey("GuiDesigner.FormSource.Dialog");
+ dialog.centerPanel(component).setPreferredFocusComponent(editor.getContentComponent());
+ dialog.addOkAction();
+
+ dialog.show();
+ }
+ finally {
+ editorFactory.releaseEditor(editor);
+ }
+ }
+
private final class MyLayeredPane extends JBLayeredPane implements Scrollable {
/**
* All components allocate whole pane's area.
@@ -1051,8 +1115,7 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
}
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());
}
}
@@ -1073,9 +1136,8 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
}
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);
}
@@ -1179,39 +1241,30 @@ public final class GuiEditor extends JPanel implements DataProvider, ModuleProvi
}
}
- 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);
- }
+ public void paletteKeyPressed(KeyEvent e) {
+ if (e.getKeyCode() == KeyEvent.VK_SHIFT && PaletteToolWindowManager.getInstance(this).getActiveItem(ComponentItem.class) != null) {
+ setDesignTimeInsets(12);
}
+ }
- @Override
- public void keyReleased(KeyEvent e) {
- if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
- setDesignTimeInsets(2);
- }
+ public void paletteKeyReleased(KeyEvent e) {
+ if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
+ setDesignTimeInsets(2);
}
}
- private class MyPaletteDragListener implements PaletteDragEventListener {
- public void dropActionChanged(int gestureModifiers) {
- if ((gestureModifiers & InputEvent.SHIFT_MASK) != 0 && isActiveEditor()) {
- setDesignTimeInsets(12);
- }
- else {
- setDesignTimeInsets(2);
- }
+ public void paletteDropActionChanged(int gestureModifiers) {
+ if ((gestureModifiers & InputEvent.SHIFT_MASK) != 0) {
+ setDesignTimeInsets(12);
+ }
+ else {
+ setDesignTimeInsets(2);
}
}
- private class MyPaletteSelectionListener implements ListSelectionListener {
- public void valueChanged(ListSelectionEvent e) {
- if (PaletteManager.getInstance(getProject()).getActiveItem() == null) {
- myProcessor.cancelPaletteInsert();
- }
+ public void paletteValueChanged(ListSelectionEvent e) {
+ if (PaletteToolWindowManager.getInstance(this).getActiveItem() == null) {
+ myProcessor.cancelPaletteInsert();
}
}
-}
+} \ No newline at end of file