added WebPath Control for dom elements
[fedora-idea.git] / source / com / intellij / util / xml / ui / DomUIFactoryImpl.java
blob5c687579d62f3df53bca59b09f15839ea65f8d25
1 /*
2 * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved.
3 */
4 package com.intellij.util.xml.ui;
6 import com.intellij.openapi.editor.event.DocumentAdapter;
7 import com.intellij.openapi.editor.event.DocumentEvent;
8 import com.intellij.openapi.editor.impl.EditorComponentImpl;
9 import com.intellij.psi.PsiClass;
10 import com.intellij.ui.BooleanTableCellEditor;
11 import com.intellij.ui.UserActivityWatcher;
12 import com.intellij.util.xml.DomElement;
13 import com.intellij.util.xml.DomUtil;
14 import com.intellij.javaee.web.WebPath;
15 import org.jetbrains.annotations.NonNls;
17 import javax.swing.*;
18 import javax.swing.border.EmptyBorder;
19 import javax.swing.table.TableCellEditor;
20 import java.awt.*;
21 import java.lang.reflect.Type;
23 /**
24 * @author peter
26 public class DomUIFactoryImpl extends DomUIFactory {
28 protected TableCellEditor createCellEditor(DomElement element, Class type) {
29 if (Boolean.class.equals(type) || boolean.class.equals(type)) {
30 return new BooleanTableCellEditor();
33 if (String.class.equals(type)) {
34 return new DefaultCellEditor(removeBorder(new JTextField()));
37 if (PsiClass.class.equals(type)) {
38 return new PsiClassTableCellEditor(element.getManager().getProject(), element.getResolveScope());
41 if (Enum.class.isAssignableFrom(type)) {
42 return new ComboTableCellEditor((Class<? extends Enum>)type, false);
45 assert false : "Type not supported: " + type;
46 return null;
49 public UserActivityWatcher createEditorAwareUserActivityWatcher() {
50 return new UserActivityWatcher() {
51 private DocumentAdapter myListener = new DocumentAdapter() {
52 public void documentChanged(DocumentEvent e) {
53 fireUIChanged();
57 protected void processComponent(final Component component) {
58 super.processComponent(component);
59 if (component instanceof EditorComponentImpl) {
60 ((EditorComponentImpl)component).getEditor().getDocument().addDocumentListener(myListener);
64 protected void unprocessComponent(final Component component) {
65 super.unprocessComponent(component);
66 if (component instanceof EditorComponentImpl) {
67 ((EditorComponentImpl)component).getEditor().getDocument().removeDocumentListener(myListener);
73 public BaseControl createCustomControl(final Type type, DomWrapper<String> wrapper, final boolean commitOnEveryChange) {
74 // todo registry for custom controls
75 if (WebPath.class.isAssignableFrom(DomUtil.getRawType(type))) {
76 return new WebPathControl(wrapper, commitOnEveryChange);
78 return null;
81 public BaseControl createPsiClassControl(DomWrapper<String> wrapper, final boolean commitOnEveryChange) {
82 return new PsiClassControl(wrapper, commitOnEveryChange);
85 public BaseControl createPsiTypeControl(DomWrapper<String> wrapper, final boolean commitOnEveryChange) {
86 return new PsiTypeControl(wrapper, commitOnEveryChange);
89 public BaseControl createTextControl(DomWrapper<String> wrapper, final boolean commitOnEveryChange) {
90 return new TextControl(wrapper, commitOnEveryChange);
93 private static <T extends JComponent> T removeBorder(final T component) {
94 component.setBorder(new EmptyBorder(0, 0, 0, 0));
95 return component;
98 @NonNls
99 public String getComponentName() {
100 return getClass().getName();
103 public void initComponent() {
106 public void disposeComponent() {