2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com
.intellij
.ui
;
19 import com
.intellij
.openapi
.editor
.Document
;
20 import com
.intellij
.openapi
.editor
.event
.DocumentListener
;
21 import com
.intellij
.openapi
.editor
.impl
.event
.DocumentEventImpl
;
22 import com
.intellij
.openapi
.fileTypes
.StdFileTypes
;
23 import com
.intellij
.openapi
.project
.Project
;
24 import com
.intellij
.openapi
.ui
.ComponentWithBrowseButton
;
25 import com
.intellij
.util
.Function
;
26 import com
.intellij
.util
.containers
.ContainerUtil
;
28 import java
.awt
.event
.ActionListener
;
29 import java
.util
.List
;
34 public class ReferenceEditorWithBrowseButton
extends ComponentWithBrowseButton
<EditorTextField
> implements TextAccessor
{
35 private final Function
<String
,Document
> myFactory
;
36 private final List
<DocumentListener
> myDocumentListeners
= ContainerUtil
.createEmptyCOWList();
38 public ReferenceEditorWithBrowseButton(final ActionListener browseActionListener
, final Project project
, final Function
<String
,Document
> factory
, String text
) {
39 this(browseActionListener
, new EditorTextField(factory
.fun(text
), project
, StdFileTypes
.JAVA
), factory
);
42 public ReferenceEditorWithBrowseButton(final ActionListener browseActionListener
, final EditorTextField editorTextField
, final Function
<String
,Document
> factory
) {
43 super(editorTextField
, browseActionListener
);
47 public void addDocumentListener(DocumentListener listener
) {
48 myDocumentListeners
.add(listener
);
49 getEditorTextField().getDocument().addDocumentListener(listener
);
52 public void removeDocumentListener(DocumentListener listener
) {
53 myDocumentListeners
.remove(listener
);
54 getEditorTextField().getDocument().removeDocumentListener(listener
);
57 public EditorTextField
getEditorTextField() {
58 return getChildComponent();
61 public String
getText(){
62 return getEditorTextField().getText().trim();
65 public void setText(final String text
) {
66 Document oldDocument
= getEditorTextField().getDocument();
67 String oldText
= oldDocument
.getText();
68 for(DocumentListener listener
: myDocumentListeners
) {
69 oldDocument
.removeDocumentListener(listener
);
71 Document document
= myFactory
.fun(text
);
72 getEditorTextField().setDocument(document
);
73 for(DocumentListener listener
: myDocumentListeners
) {
74 document
.addDocumentListener(listener
);
75 listener
.documentChanged(new DocumentEventImpl(document
, 0, oldText
, text
, -1, false));
79 public boolean isEditable() {
80 return !getEditorTextField().getEditor().isViewer();