apply the new settings after 'fold lines like this' action invocation

This commit is contained in:
peter
2010-07-12 20:12:11 +01:00
parent 6690629036
commit 556c151ce1
2 changed files with 37 additions and 11 deletions
@@ -1,5 +1,6 @@
package com.intellij.execution.console;
import com.intellij.execution.impl.ConsoleViewImpl;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
@@ -14,12 +15,14 @@ import org.jetbrains.annotations.Nullable;
/**
* @author peter
*/
public class FoldLinesWithSubstring extends DumbAwareAction {
public class FoldLinesLikeThis extends DumbAwareAction {
private final Editor myEditor;
private final ConsoleViewImpl myConsole;
public FoldLinesWithSubstring(Editor editor) {
public FoldLinesLikeThis(Editor editor, ConsoleViewImpl console) {
super("Fold lines like this");
myEditor = editor;
myConsole = console;
}
@Nullable
@@ -71,5 +74,6 @@ public class FoldLinesWithSubstring extends DumbAwareAction {
}, ModalityState.stateForComponent(createComponent()));
}
});
myConsole.foldImmediately();
}
}
@@ -19,7 +19,7 @@ package com.intellij.execution.impl;
import com.intellij.codeInsight.navigation.IncrementalSearchHandler;
import com.intellij.execution.ConsoleFolding;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.console.FoldLinesWithSubstring;
import com.intellij.execution.console.FoldLinesLikeThis;
import com.intellij.execution.filters.*;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.ui.ConsoleView;
@@ -146,6 +146,23 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
myEditor.getCaretModel().moveToOffset(myEditor.getDocument().getTextLength());
}
public void foldImmediately() {
ApplicationManager.getApplication().assertIsDispatchThread();
myFoldingAlarm.cancelAllRequests();
myPendingFoldRegions.clear();
final FoldingModel model = myEditor.getFoldingModel();
model.runBatchFoldingOperation(new Runnable() {
public void run() {
for (FoldRegion region : model.getAllFoldRegions()) {
model.removeFoldRegion(region);
}
}
});
updateFoldings(0, myEditor.getDocument().getLineCount() - 1, true);
}
private static class TokenInfo{
private final ConsoleViewContentType contentType;
private int startOffset;
@@ -763,7 +780,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
final DefaultActionGroup group = new DefaultActionGroup();
group.add(new ClearAllAction());
group.add(new CopyAction());
group.add(new FoldLinesWithSubstring(myEditor));
group.add(new FoldLinesLikeThis(myEditor, this));
group.addSeparator();
final ActionManager actionManager = ActionManager.getInstance();
group.add(actionManager.getAction(DiffActions.COMPARE_WITH_CLIPBOARD));
@@ -832,10 +849,10 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
ApplicationManager.getApplication().assertIsDispatchThread();
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
highlightHyperlinks(myEditor, myHyperlinks, myCustomFilter, myPredefinedMessageFilter, line1, endLine);
updateFoldings(line1, endLine);
updateFoldings(line1, endLine, false);
}
private void updateFoldings(final int line1, final int endLine) {
private void updateFoldings(final int line1, final int endLine, boolean immediately) {
final Document document = myEditor.getDocument();
final CharSequence chars = document.getCharsSequence();
final int startLine = Math.max(0, line1);
@@ -844,7 +861,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
addFolding(document, chars, line, toAdd);
}
if (!toAdd.isEmpty()) {
doUpdateFolding(toAdd);
doUpdateFolding(toAdd, immediately);
}
}
@@ -878,7 +895,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
}
}
private void doUpdateFolding(final List<FoldRegion> toAdd) {
private void doUpdateFolding(final List<FoldRegion> toAdd, final boolean immediately) {
assertIsDispatchThread();
myPendingFoldRegions.addAll(toAdd);
@@ -887,7 +904,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
public void run() {
assertIsDispatchThread();
final FoldingModel model = myEditor.getFoldingModel();
model.runBatchFoldingOperationDoNotCollapseCaret(new Runnable() {
final Runnable operation = new Runnable() {
public void run() {
assertIsDispatchThread();
for (FoldRegion region : myPendingFoldRegions) {
@@ -896,10 +913,15 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
}
myPendingFoldRegions.clear();
}
});
};
if (immediately) {
model.runBatchFoldingOperation(operation);
} else {
model.runBatchFoldingOperationDoNotCollapseCaret(operation);
}
}
};
if (myPendingFoldRegions.size() > 100) {
if (immediately || myPendingFoldRegions.size() > 100) {
runnable.run();
} else {
myFoldingAlarm.addRequest(runnable, 50);