2 * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved.
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
;
18 import javax
.swing
.border
.EmptyBorder
;
19 import javax
.swing
.table
.TableCellEditor
;
21 import java
.lang
.reflect
.Type
;
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
;
49 public UserActivityWatcher
createEditorAwareUserActivityWatcher() {
50 return new UserActivityWatcher() {
51 private DocumentAdapter myListener
= new DocumentAdapter() {
52 public void documentChanged(DocumentEvent e
) {
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
);
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));
99 public String
getComponentName() {
100 return getClass().getName();
103 public void initComponent() {
106 public void disposeComponent() {