blob: e8164e19e21ee88e4acf2456795a57d54b731410 [file] [log] [blame]
/*
* 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;
}
}
}