changedUpdate exception
[fedora-idea.git] / platform / platform-impl / src / com / intellij / ui / ReferenceEditorWithBrowseButton.java
blob9ff9b28b12197d788cf4dc75673cb14b686e4440
1 /*
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;
31 /**
32 * @author ven
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);
44 myFactory = factory;
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();