mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
excessive encoding panel update, status bar border
This commit is contained in:
+1
-1
@@ -285,7 +285,7 @@ public class ColorAndFontDescriptionPanel extends JPanel {
|
||||
return panel;
|
||||
}
|
||||
|
||||
public void addActionListener(ActionListener actionListener) {
|
||||
public void setActionListener(ActionListener actionListener) {
|
||||
myActionListener = actionListener;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -47,7 +47,7 @@ public class OptionsPanelImpl extends JPanel implements OptionsPanel {
|
||||
mySchemesProvider = schemesProvider;
|
||||
myCategoryName = categoryName;
|
||||
|
||||
optionsPanel.addActionListener(new ActionListener(){
|
||||
optionsPanel.setActionListener(new ActionListener() {
|
||||
public void actionPerformed(final ActionEvent e) {
|
||||
myDispatcher.getMulticaster().settingsChanged();
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ public class FileTreeTable extends AbstractFileTreeTable<Charset> {
|
||||
setText(t.displayName());
|
||||
}
|
||||
else if (file != null) {
|
||||
Charset charset = ChooseFileEncodingAction.charsetFromContent(file);
|
||||
Charset charset = ChooseFileEncodingAction.cachedCharsetFromContent(file);
|
||||
if (charset != null) {
|
||||
setText(charset.displayName());
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.openapi.vfs.encoding;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -78,9 +79,13 @@ public abstract class EncodingManager {
|
||||
public abstract Charset getDefaultCharsetForPropertiesFiles(@Nullable VirtualFile virtualFile);
|
||||
public abstract void setDefaultCharsetForPropertiesFiles(@Nullable VirtualFile virtualFile, @Nullable Charset charset);
|
||||
|
||||
public abstract void addPropertyChangeListener(PropertyChangeListener listener);
|
||||
/**
|
||||
* @deprecated use {@link EncodingManager#addPropertyChangeListener(java.beans.PropertyChangeListener, com.intellij.openapi.Disposable)} instead
|
||||
*/
|
||||
public abstract void addPropertyChangeListener(@NotNull PropertyChangeListener listener);
|
||||
public abstract void addPropertyChangeListener(@NotNull PropertyChangeListener listener, @NotNull Disposable parentDisposable);
|
||||
|
||||
public abstract void removePropertyChangeListener(PropertyChangeListener listener);
|
||||
public abstract void removePropertyChangeListener(@NotNull PropertyChangeListener listener);
|
||||
|
||||
public abstract Charset getCachedCharsetFromContent(@NotNull Document document);
|
||||
}
|
||||
|
||||
+4
-4
@@ -60,7 +60,7 @@ public abstract class ChooseFileEncodingAction extends ComboBoxAction {
|
||||
|
||||
boolean enabled = result.second;
|
||||
if (myVirtualFile != null) {
|
||||
Charset charset = charsetFromContent(myVirtualFile);
|
||||
Charset charset = cachedCharsetFromContent(myVirtualFile);
|
||||
String prefix = charset == null ? "" : "Encoding (auto-detected):";
|
||||
if (charset == null) charset = myVirtualFile.getCharset();
|
||||
e.getPresentation().setText(prefix + " " + charset.toString());
|
||||
@@ -72,7 +72,7 @@ public abstract class ChooseFileEncodingAction extends ComboBoxAction {
|
||||
public static boolean isEnabled(@Nullable VirtualFile virtualFile) {
|
||||
boolean enabled = true;
|
||||
if (virtualFile != null) {
|
||||
Charset charset = charsetFromContent(virtualFile);
|
||||
Charset charset = cachedCharsetFromContent(virtualFile);
|
||||
if (charset != null) {
|
||||
enabled = false;
|
||||
}
|
||||
@@ -97,7 +97,7 @@ public abstract class ChooseFileEncodingAction extends ComboBoxAction {
|
||||
}
|
||||
|
||||
@Nullable("returns null if charset set cannot be determined from content")
|
||||
public static Charset charsetFromContent(final VirtualFile virtualFile) {
|
||||
public static Charset cachedCharsetFromContent(final VirtualFile virtualFile) {
|
||||
if (virtualFile == null) return null;
|
||||
final Document document = FileDocumentManager.getInstance().getDocument(virtualFile);
|
||||
if (document == null) return null;
|
||||
@@ -126,7 +126,7 @@ public abstract class ChooseFileEncodingAction extends ComboBoxAction {
|
||||
public static Pair<String,Boolean> update(@Nullable VirtualFile virtualFile) {
|
||||
String pattern;
|
||||
boolean enabled = virtualFile != null && isEnabled(virtualFile);
|
||||
Charset charsetFromContent = charsetFromContent(virtualFile);
|
||||
Charset charsetFromContent = cachedCharsetFromContent(virtualFile);
|
||||
if (virtualFile != null && FileDocumentManager.getInstance().isFileModified(virtualFile)) {
|
||||
//no sense to reload file with UTF-detected chars using other encoding
|
||||
if (charsetFromContent != null) {
|
||||
|
||||
+21
-5
@@ -38,6 +38,7 @@ import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectLocator;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.CharsetToolkit;
|
||||
@@ -45,6 +46,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.Alarm;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -85,17 +87,18 @@ public class EncodingManagerImpl extends EncodingManager implements PersistentSt
|
||||
editorFactory.getEventMulticaster().addDocumentListener(new DocumentAdapter() {
|
||||
@Override
|
||||
public void documentChanged(DocumentEvent e) {
|
||||
updateEncodingFromContent(e.getDocument());
|
||||
queueUpdateEncodingFromContent(e.getDocument());
|
||||
}
|
||||
}, this);
|
||||
editorFactory.addEditorFactoryListener(new EditorFactoryAdapter() {
|
||||
@Override
|
||||
public void editorCreated(EditorFactoryEvent event) {
|
||||
updateEncodingFromContent(event.getEditor().getDocument());
|
||||
queueUpdateEncodingFromContent(event.getEditor().getDocument());
|
||||
}
|
||||
}, this);
|
||||
}
|
||||
|
||||
@NonNls public static final String PROP_CACHED_ENCODING_CHANGED = "cachedEncoding";
|
||||
private boolean pollAndHandleDocument() {
|
||||
final Document document = myChangedDocuments.poll();
|
||||
if (document == null) return false;
|
||||
@@ -106,7 +109,9 @@ public class EncodingManagerImpl extends EncodingManager implements PersistentSt
|
||||
Project project = guessProject(virtualFile);
|
||||
if (project != null && project.isDisposed()) return;
|
||||
Charset charset = LoadTextUtil.charsetFromContentOrNull(project, virtualFile, document.getText());
|
||||
Charset oldCached = getCachedCharsetFromContent(document);
|
||||
document.putUserData(CACHED_CHARSET_FROM_CONTENT, charset);
|
||||
((EncodingManagerImpl)EncodingManager.getInstance()).firePropertyChange(PROP_CACHED_ENCODING_CHANGED, oldCached, charset);
|
||||
}
|
||||
});
|
||||
return true;
|
||||
@@ -123,7 +128,7 @@ public class EncodingManagerImpl extends EncodingManager implements PersistentSt
|
||||
}
|
||||
}
|
||||
|
||||
public void updateEncodingFromContent(@NotNull Document document) {
|
||||
public void queueUpdateEncodingFromContent(@NotNull Document document) {
|
||||
myChangedDocuments.offer(document);
|
||||
addCacheEncodingAlarm();
|
||||
}
|
||||
@@ -244,11 +249,22 @@ public class EncodingManagerImpl extends EncodingManager implements PersistentSt
|
||||
EncodingProjectManager.getInstance(project).setDefaultCharsetForPropertiesFiles(virtualFile, charset);
|
||||
}
|
||||
|
||||
public void addPropertyChangeListener(PropertyChangeListener listener){
|
||||
public void addPropertyChangeListener(@NotNull PropertyChangeListener listener){
|
||||
myPropertyChangeSupport.addPropertyChangeListener(listener);
|
||||
}
|
||||
|
||||
public void removePropertyChangeListener(PropertyChangeListener listener){
|
||||
@Override
|
||||
public void addPropertyChangeListener(@NotNull final PropertyChangeListener listener, @NotNull Disposable parentDisposable) {
|
||||
myPropertyChangeSupport.addPropertyChangeListener(listener);
|
||||
Disposer.register(parentDisposable, new Disposable() {
|
||||
@Override
|
||||
public void dispose() {
|
||||
removePropertyChangeListener(listener);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void removePropertyChangeListener(@NotNull PropertyChangeListener listener){
|
||||
myPropertyChangeSupport.removePropertyChangeListener(listener);
|
||||
}
|
||||
void firePropertyChange(final String propertyName, final Object oldValue, final Object newValue) {
|
||||
|
||||
+9
-3
@@ -23,6 +23,7 @@
|
||||
package com.intellij.openapi.vfs.encoding;
|
||||
|
||||
import com.intellij.ide.GeneralSettings;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.openapi.components.StorageScheme;
|
||||
@@ -71,7 +72,7 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager {
|
||||
documentManager.addListener(new PsiDocumentManager.Listener() {
|
||||
public void documentCreated(Document document, PsiFile psiFile) {
|
||||
if (document != null) {
|
||||
((EncodingManagerImpl)EncodingManager.getInstance()).updateEncodingFromContent(document);
|
||||
((EncodingManagerImpl)EncodingManager.getInstance()).queueUpdateEncodingFromContent(document);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -274,11 +275,16 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager {
|
||||
}
|
||||
}
|
||||
|
||||
public void addPropertyChangeListener(PropertyChangeListener listener){
|
||||
public void addPropertyChangeListener(@NotNull PropertyChangeListener listener){
|
||||
EncodingManager.getInstance().addPropertyChangeListener(listener);
|
||||
}
|
||||
|
||||
public void removePropertyChangeListener(PropertyChangeListener listener){
|
||||
@Override
|
||||
public void addPropertyChangeListener(@NotNull PropertyChangeListener listener, @NotNull Disposable parentDisposable) {
|
||||
EncodingManager.getInstance().addPropertyChangeListener(listener,parentDisposable);
|
||||
}
|
||||
|
||||
public void removePropertyChangeListener(@NotNull PropertyChangeListener listener){
|
||||
EncodingManager.getInstance().removePropertyChangeListener(listener);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,11 +18,6 @@ package com.intellij.openapi.wm.impl.status;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.impl.SimpleDataContext;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.EditorFactory;
|
||||
import com.intellij.openapi.editor.event.DocumentAdapter;
|
||||
import com.intellij.openapi.editor.event.DocumentEvent;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -34,11 +29,11 @@ import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.encoding.ChooseFileEncodingAction;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingManager;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingManagerImpl;
|
||||
import com.intellij.openapi.wm.CustomStatusBarWidget;
|
||||
import com.intellij.openapi.wm.StatusBar;
|
||||
import com.intellij.openapi.wm.StatusBarWidget;
|
||||
import com.intellij.ui.awt.RelativePoint;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -46,25 +41,24 @@ import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
/**
|
||||
* @author cdr
|
||||
*/
|
||||
public class EncodingPanel extends EditorBasedWidget implements StatusBarWidget.Multiframe, CustomStatusBarWidget {
|
||||
private final Alarm myUpdateAlarm;
|
||||
private final TextPanel myComponent;
|
||||
private boolean actionEnabled;
|
||||
|
||||
public EncodingPanel(@NotNull final Project project) {
|
||||
super(project);
|
||||
myUpdateAlarm = new Alarm(this);
|
||||
|
||||
myComponent = new TextPanel(getMaxValue()){
|
||||
@Override
|
||||
protected void paintComponent(@NotNull final Graphics g) {
|
||||
super.paintComponent(g);
|
||||
EncodingPanel.this.update();
|
||||
if (actionEnabled) {
|
||||
setForeground(UIUtil.getActiveTextColor());
|
||||
if (getText() != null) {
|
||||
@@ -85,6 +79,7 @@ public class EncodingPanel extends EditorBasedWidget implements StatusBarWidget.
|
||||
showPopup(e);
|
||||
}
|
||||
});
|
||||
myComponent.setBorder(WidgetBorder.INSTANCE);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -122,23 +117,14 @@ public class EncodingPanel extends EditorBasedWidget implements StatusBarWidget.
|
||||
public void install(@NotNull StatusBar statusBar) {
|
||||
super.install(statusBar);
|
||||
// should update to reflect encoding-from-content
|
||||
EditorFactory.getInstance().getEventMulticaster().addDocumentListener(new DocumentAdapter() {
|
||||
EncodingManager.getInstance().addPropertyChangeListener(new PropertyChangeListener() {
|
||||
@Override
|
||||
public void documentChanged(DocumentEvent e) {
|
||||
Editor editor = getEditor();
|
||||
if (editor == null) return;
|
||||
Document current = editor.getDocument();
|
||||
if (e.getDocument() != current) return;
|
||||
|
||||
myUpdateAlarm.cancelAllRequests();
|
||||
myUpdateAlarm.addRequest(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
update();
|
||||
}
|
||||
}, 300);
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if (evt.getPropertyName().equals(EncodingManagerImpl.PROP_CACHED_ENCODING_CHANGED)) {
|
||||
update();
|
||||
}
|
||||
}
|
||||
},this);
|
||||
}, this);
|
||||
}
|
||||
|
||||
private void showPopup(MouseEvent e) {
|
||||
@@ -179,7 +165,7 @@ public class EncodingPanel extends EditorBasedWidget implements StatusBarWidget.
|
||||
String text;
|
||||
String toolTip;
|
||||
if (file != null) {
|
||||
Charset charset = ChooseFileEncodingAction.charsetFromContent(file);
|
||||
Charset charset = ChooseFileEncodingAction.cachedCharsetFromContent(file);
|
||||
if (charset == null) charset = file.getCharset();
|
||||
|
||||
text = charset.displayName();
|
||||
|
||||
@@ -15,13 +15,11 @@
|
||||
*/
|
||||
package com.intellij.lang.properties;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.AbstractProjectComponent;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingManager;
|
||||
@@ -74,12 +72,7 @@ public class PropertiesFilesManager extends AbstractProjectComponent {
|
||||
}
|
||||
}
|
||||
};
|
||||
EncodingManager.getInstance().addPropertyChangeListener(myListener);
|
||||
Disposer.register(myProject, new Disposable() {
|
||||
public void dispose() {
|
||||
EncodingManager.getInstance().removePropertyChangeListener(myListener);
|
||||
}
|
||||
});
|
||||
EncodingManager.getInstance().addPropertyChangeListener(myListener,myProject);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
Reference in New Issue
Block a user