console gutter component should use setAdditionalColumnsCount now (we use editor area)

rename outdated historyAnnotation
This commit is contained in:
Vladimir Krivosheev
2014-02-24 14:11:23 +01:00
parent 32209cb11b
commit 48921aff8d
3 changed files with 52 additions and 25 deletions
@@ -60,9 +60,9 @@ class ConsoleGutterComponent extends JComponent implements MouseMotionListener {
});
}
public void updateSize() {
public void updateSize(int start, int end) {
int oldAnnotationsWidth = maxAnnotationWidth;
computeMaxAnnotationWidth();
computeMaxAnnotationWidth(start, end);
if (oldAnnotationsWidth != maxAnnotationWidth || myLastPreferredHeight != editor.getPreferredHeight()) {
fireResized();
}
@@ -73,7 +73,7 @@ class ConsoleGutterComponent extends JComponent implements MouseMotionListener {
processComponentEvent(new ComponentEvent(this, ComponentEvent.COMPONENT_RESIZED));
}
private void computeMaxAnnotationWidth() {
private void computeMaxAnnotationWidth(int start, int end) {
gutterContentProvider.beforeUiComponentUpdate(editor);
if (!gutterContentProvider.hasText()) {
@@ -82,10 +82,10 @@ class ConsoleGutterComponent extends JComponent implements MouseMotionListener {
}
FontMetrics fontMetrics = editor.getFontMetrics(Font.PLAIN);
int lineCount = editor.getDocument().getLineCount();
int lineCount = Math.min(end, editor.getDocument().getLineCount());
int gutterSize = 0;
for (int i = 0; i < lineCount; i++) {
String text = gutterContentProvider.getText(i, editor);
for (int line = start; line < lineCount; line++) {
String text = gutterContentProvider.getText(line, editor);
if (text != null) {
gutterSize = Math.max(gutterSize, fontMetrics.stringWidth(text));
}
@@ -94,7 +94,9 @@ class ConsoleGutterComponent extends JComponent implements MouseMotionListener {
if (gutterSize != 0) {
gutterSize += lineEndInset;
}
maxAnnotationWidth = gutterSize;
maxAnnotationWidth = Math.max(gutterSize, maxAnnotationWidth);
editor.getSettings().setAdditionalColumnsCount(1 + (maxAnnotationWidth / EditorUtil.getSpaceWidth(Font.PLAIN, editor)));
}
@Override
@@ -125,7 +125,7 @@ public final class LanguageConsoleBuilder {
return new Pair<AnAction, ConsoleHistoryController>(action, historyController);
}
public LanguageConsoleBuilder historyAnnotation(@Nullable GutterContentProvider value) {
public LanguageConsoleBuilder gutterContentProvider(@Nullable GutterContentProvider value) {
gutterContentProvider = value;
return this;
}
@@ -196,6 +196,11 @@ public final class LanguageConsoleBuilder {
this.psiFileFactory = psiFileFactory;
}
@Override
boolean isHistoryViewerForceAdditionalColumnsUsage() {
return gutterContentProvider == null;
}
@NotNull
@Override
protected PsiFile createFile(@NotNull LightVirtualFile virtualFile, @NotNull Document document, @NotNull Project project) {
@@ -288,7 +293,7 @@ public final class LanguageConsoleBuilder {
private final ConsoleIconGutterComponent lineStartGutter;
private final ConsoleGutterComponent lineEndGutter;
private Runnable gutterSizeUpdater;
private Task gutterSizeUpdater;
private RangeHighlighterEx lineSeparatorPainter;
public GutterUpdateScheduler(@NotNull ConsoleIconGutterComponent lineStartGutter, @NotNull ConsoleGutterComponent lineEndGutter) {
@@ -333,7 +338,7 @@ public final class LanguageConsoleBuilder {
int startDocLine = document.getLineNumber(event.getOffset());
int endDocLine = document.getLineNumber(event.getOffset() + event.getNewLength());
if (event.getOldLength() > event.getNewLength() || startDocLine != endDocLine || StringUtil.indexOf(event.getOldFragment(), '\n') != -1) {
updateGutterSize();
updateGutterSize(0, Integer.MAX_VALUE);
}
}
else if (event.getOldLength() > 0) {
@@ -342,6 +347,8 @@ public final class LanguageConsoleBuilder {
}
private void documentCleared() {
gutterSizeUpdater = null;
assert gutterContentProvider != null;
gutterContentProvider.documentCleared(getHistoryViewer());
}
@@ -358,26 +365,38 @@ public final class LanguageConsoleBuilder {
else {
addLineSeparatorPainterIfNeed();
}
updateGutterSize();
updateGutterSize(0, Integer.MAX_VALUE);
}
private void updateGutterSize() {
private void updateGutterSize(int start, int end) {
if (gutterSizeUpdater != null) {
gutterSizeUpdater.start = Math.min(start, gutterSizeUpdater.start);
gutterSizeUpdater.end = Math.max(end, gutterSizeUpdater.end);
return;
}
gutterSizeUpdater = new Runnable() {
@Override
public void run() {
if (!getHistoryViewer().isDisposed()) {
lineStartGutter.updateSize();
lineEndGutter.updateSize();
}
gutterSizeUpdater = null;
}
};
gutterSizeUpdater = new Task(start, end);
SwingUtilities.invokeLater(gutterSizeUpdater);
}
private final class Task implements Runnable {
private int start;
private int end;
public Task(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public void run() {
if (!getHistoryViewer().isDisposed()) {
lineStartGutter.updateSize();
lineEndGutter.updateSize(start, end);
}
gutterSizeUpdater = null;
}
}
}
private final class LineSeparatorPainter extends RangeMarkerImpl implements RangeHighlighterEx, Getter<RangeHighlighterEx> {
@@ -682,6 +682,10 @@ public class LanguageConsoleImpl implements Disposable, TypeSafeDataProvider {
return ObjectUtils.assertNotNull(PsiManager.getInstance(project).findFile(virtualFile));
}
boolean isHistoryViewerForceAdditionalColumnsUsage() {
return true;
}
private class MyLayout extends AbstractLayoutManager {
@Override
public Dimension preferredLayoutSize(final Container parent) {
@@ -713,9 +717,11 @@ public class LanguageConsoleImpl implements Disposable, TypeSafeDataProvider {
// deal with width
final int width = Math.max(editorSize.width, historySize.width);
newEditorSize.width = width + editor.getScrollPane().getHorizontalScrollBar().getHeight();
history.getSoftWrapModel().forceAdditionalColumnsUsage();
editor.getSettings().setAdditionalColumnsCount(2 + (width - editorSize.width) / EditorUtil.getSpaceWidth(Font.PLAIN, editor));
history.getSettings().setAdditionalColumnsCount(2 + (width - historySize.width) / EditorUtil.getSpaceWidth(Font.PLAIN, history));
if (isHistoryViewerForceAdditionalColumnsUsage()) {
history.getSoftWrapModel().forceAdditionalColumnsUsage();
editor.getSettings().setAdditionalColumnsCount(2 + (width - editorSize.width) / EditorUtil.getSpaceWidth(Font.PLAIN, editor));
history.getSettings().setAdditionalColumnsCount(2 + (width - historySize.width) / EditorUtil.getSpaceWidth(Font.PLAIN, history));
}
// deal with height
if (historySize.width == 0) {