diff options
Diffstat (limited to 'plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/DesignerToolWindow.java')
-rw-r--r-- | plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/DesignerToolWindow.java | 139 |
1 files changed, 139 insertions, 0 deletions
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 |