cleaning up and re-coloring

This commit is contained in:
Ben Fry
2015-08-21 12:57:13 -04:00
parent 61d3b74276
commit 47d8405809
7 changed files with 132 additions and 166 deletions

View File

@@ -24,8 +24,6 @@ import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
@@ -36,110 +34,84 @@ import java.util.List;
import javax.swing.JPanel;
import javax.swing.SwingWorker;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import processing.app.Mode;
import processing.app.Sketch;
import processing.app.SketchCode;
import processing.app.Util;
import processing.mode.java.pdex.ErrorCheckerService;
import processing.mode.java.pdex.ErrorMarker;
import processing.mode.java.pdex.LineMarker;
import processing.mode.java.pdex.Problem;
import processing.app.Language;
/**
* The bar on the left of the text area which displays all errors as rectangles. <br>
* Implements the column to the right of the editor window that displays ticks
* for errors and warnings.
* <br>
* All errors and warnings of a sketch are drawn on the bar, clicking on one,
* scrolls to the tab and location. Error messages displayed on hover. Markers
* are not in sync with the error line. Similar to eclipse's right error bar
* which displays the overall errors in a document
*
* @author Manindra Moharana &lt;me@mkmoharana.com&gt;
*
*/
public class ErrorColumn extends JPanel {
/**
* Preferred height of the component
*/
protected int preferredHeight;
protected JavaEditor editor;
protected ErrorCheckerService errorCheckerService;
/**
* Preferred height of the component
*/
protected int preferredWidth = 12;
static final int WIDE = 12;
// protected int preferredHeight;
// protected int preferredWidth = 12;
/**
* Height of marker
*/
public static final int errorMarkerHeight = 4;
// static final int errorMarkerHeight = 4;
/**
* Color of Error Marker
*/
public Color errorColor; // = new Color(0xED2630);
private Color errorColor;
private Color warningColor;
private Color backgroundColor;
/**
* Color of Warning Marker
*/
public Color warningColor; // = new Color(0xFFC30E);
/** Stores error markers displayed PER TAB along the error bar. */
private List<LineMarker> errorPoints =
Collections.synchronizedList(new ArrayList<LineMarker>());
/**
* Background color of the component
*/
public Color backgroundColor; // = new Color(0x2C343D);
/** Stores previous list of error markers. */
private List<LineMarker> errorPointsOld = new ArrayList<LineMarker>();
/**
* JavaEditor instance
*/
protected JavaEditor editor;
/**
* ErrorCheckerService instance
*/
protected ErrorCheckerService errorCheckerService;
/**
* Stores error markers displayed PER TAB along the error bar.
*/
protected List<ErrorMarker> errorPoints =
Collections.synchronizedList(new ArrayList<ErrorMarker>());
/**
* Stores previous list of error markers.
*/
protected ArrayList<ErrorMarker> errorPointsOld = new ArrayList<ErrorMarker>();
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// Graphics2D g2d = (Graphics2D) g;
// g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
// RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(backgroundColor);
g.fillRect(0, 0, getWidth(), getHeight());
for (ErrorMarker emarker : errorPoints) {
if (emarker.getType() == ErrorMarker.Error) {
for (LineMarker m : errorPoints) {
if (m.getType() == LineMarker.ERROR) {
g.setColor(errorColor);
} else {
g.setColor(warningColor);
}
g.fillRect(2, emarker.getY(), (getWidth() - 3), errorMarkerHeight);
//g.fillRect(2, emarker.getY(), (getWidth() - 3), errorMarkerHeight);
g.drawLine(2, m.getY(), getWidth() - 2, m.getY());
}
}
public Dimension getPreferredSize() {
return new Dimension(preferredWidth, preferredHeight);
}
// public Dimension getPreferredSize() {
// return new Dimension(preferredWidth, preferredHeight);
// }
public Dimension getMinimumSize() {
return getPreferredSize();
}
// public Dimension getMinimumSize() {
// return getPreferredSize();
// }
public ErrorColumn(JavaEditor editor, int height, JavaMode mode) {
public ErrorColumn(JavaEditor editor, int height) {
this.editor = editor;
this.preferredHeight = height;
// this.preferredHeight = height;
this.errorCheckerService = editor.errorCheckerService;
Mode mode = editor.getMode();
errorColor = mode.getColor("editor.column.error.color");
warningColor = mode.getColor("editor.column.warning.color");
backgroundColor = mode.getColor("editor.gutter.bgcolor");
@@ -147,12 +119,12 @@ public class ErrorColumn extends JPanel {
addListeners();
}
/**
* Update error markers in the error bar.
*
* @param problems
* - List of problems.
*/
public List<LineMarker> getErrorPoints() {
return errorPoints;
}
synchronized public void updateErrorPoints(final List<Problem> problems) {
// NOTE TO SELF: ErrorMarkers are calculated for the present tab only
// Error Marker index in the arraylist is LOCALIZED for current tab.
@@ -162,43 +134,45 @@ public class ErrorColumn extends JPanel {
SwingWorker<Object, Object> worker = new SwingWorker<Object, Object>() {
protected Object doInBackground() throws Exception {
SketchCode sc = editor.getSketch().getCurrentCode();
int totalLines = 0, currentTab = editor.getSketch()
.getCurrentCodeIndex();
Sketch sketch = editor.getSketch();
SketchCode sc = sketch.getCurrentCode();
int totalLines = 0;
int currentTab = sketch.getCurrentCodeIndex();
try {
totalLines = Util.countLines(sc.getDocument()
.getText(0, sc.getDocument().getLength())) + 1;
Document doc = sc.getDocument();
totalLines = Util.countLines(doc.getText(0, doc.getLength())) + 1;
} catch (BadLocationException e) {
e.printStackTrace();
}
// System.out.println("Total lines: " + totalLines);
synchronized (errorPoints) {
errorPointsOld.clear();
for (ErrorMarker marker : errorPoints) {
errorPointsOld.add(marker);
}
errorPoints.clear();
// synchronized (errorPoints) {
errorPointsOld = errorPoints;
errorPoints = new ArrayList<>();
// errorPointsOld.clear();
// for (ErrorMarker marker : errorPoints) {
// errorPointsOld.add(marker);
// }
// errorPoints.clear();
// Each problem.getSourceLine() will have an extra line added
// because of
// class declaration in the beginning as well as default imports
synchronized (problems) {
for (Problem problem : problems) {
if (problem.getTabIndex() == currentTab) {
// Ratio of error line to total lines
float y = (problem.getLineNumber() + 1)
/ ((float) totalLines);
// Ratio multiplied by height of the error bar
y *= fheight - 15; // -15 is just a vertical offset
errorPoints
.add(new ErrorMarker(problem, (int) y,
problem.isError() ? ErrorMarker.Error
: ErrorMarker.Warning));
synchronized (problems) {
for (Problem problem : problems) {
if (problem.getTabIndex() == currentTab) {
// Ratio of error line to total lines
float y = (problem.getLineNumber() + 1) / ((float) totalLines);
// Ratio multiplied by height of the error bar
y *= fheight - 15; // -15 is just a vertical offset
errorPoints.add(new LineMarker(problem, (int) y,
problem.isError() ?
LineMarker.ERROR
: LineMarker.WARNING));
// System.out.println("Y: " + y);
}
}
}
}
// }
return null;
}
@@ -255,11 +229,11 @@ public class ErrorColumn extends JPanel {
SwingWorker<Object, Object> worker = new SwingWorker<Object, Object>() {
protected Object doInBackground() throws Exception {
for (ErrorMarker eMarker : errorPoints) {
for (LineMarker eMarker : errorPoints) {
// -2 and +2 are extra allowance, clicks in the
// vicinity of the markers register that way
if (e.getY() >= eMarker.getY() - 2
&& e.getY() <= eMarker.getY() + 2 + errorMarkerHeight) {
&& e.getY() <= eMarker.getY() + 2) {
errorCheckerService.scrollToErrorLine(eMarker.getProblem());
return null;
}
@@ -285,9 +259,9 @@ public class ErrorColumn extends JPanel {
SwingWorker<Object, Object> worker = new SwingWorker<Object, Object>() {
protected Object doInBackground() throws Exception {
for (ErrorMarker eMarker : errorPoints) {
for (LineMarker eMarker : errorPoints) {
if (evt.getY() >= eMarker.getY() - 2 &&
evt.getY() <= eMarker.getY() + 2 + errorMarkerHeight) {
evt.getY() <= eMarker.getY() + 2) {
Problem p = eMarker.getProblem();
String msg = ((p.isError()
? Language.text("editor.status.error")
@@ -314,4 +288,14 @@ public class ErrorColumn extends JPanel {
}
});
}
public Dimension getPreferredSize() {
return new Dimension(WIDE, super.getPreferredSize().height);
}
public Dimension getMinimumSize() {
return new Dimension(WIDE, super.getMinimumSize().height);
}
}

View File

@@ -45,7 +45,7 @@ import processing.mode.java.debug.LineBreakpoint;
import processing.mode.java.debug.LineHighlight;
import processing.mode.java.debug.LineID;
import processing.mode.java.pdex.ErrorCheckerService;
import processing.mode.java.pdex.ErrorMarker;
import processing.mode.java.pdex.LineMarker;
import processing.mode.java.pdex.ErrorMessageSimplifier;
import processing.mode.java.pdex.JavaTextArea;
import processing.mode.java.pdex.Problem;
@@ -164,7 +164,7 @@ public class JavaEditor extends Editor {
// remove the text area temporarily
box.remove(2);
textAndError.setLayout(new BorderLayout());
errorColumn = new ErrorColumn(this, textarea.getMinimumSize().height, jmode);
errorColumn = new ErrorColumn(this, textarea.getMinimumSize().height);
textAndError.add(errorColumn, BorderLayout.EAST);
textarea.setBounds(0, 0, errorColumn.getX() - 1, textarea.getHeight());
textAndError.add(textarea);
@@ -2547,8 +2547,8 @@ public class JavaEditor extends Editor {
}
public List<ErrorMarker> getErrorPoints() {
return errorColumn.errorPoints;
public List<LineMarker> getErrorPoints() {
return errorColumn.getErrorPoints();
}

View File

@@ -988,9 +988,9 @@ public class ErrorCheckerService implements Runnable {
// editor.getTextArea().getCaretLine());
if (JavaMode.errorCheckEnabled) {
synchronized (editor.getErrorPoints()) {
for (ErrorMarker emarker : editor.getErrorPoints()) {
for (LineMarker emarker : editor.getErrorPoints()) {
if (emarker.getProblem().getLineNumber() == editor.getTextArea().getCaretLine()) {
if (emarker.getType() == ErrorMarker.Warning) {
if (emarker.getType() == LineMarker.WARNING) {
editor.statusMessage(emarker.getProblem().getMessage(),
JavaEditor.STATUS_INFO);
} else {
@@ -1579,12 +1579,9 @@ public class ErrorCheckerService implements Runnable {
return new String(p2, 0, index);
}
public void handleErrorCheckingToggle(){
public void handleErrorCheckingToggle() {
if (!JavaMode.errorCheckEnabled) {
// unticked Menu Item
// pauseThread();
Messages.log(editor.getSketch().getName()
+ " - Error Checker paused.");
Messages.log(editor.getSketch().getName() + " Error Checker paused.");
editor.getErrorPoints().clear();
problemsList.clear();
updateErrorTable();
@@ -1592,9 +1589,7 @@ public class ErrorCheckerService implements Runnable {
editor.getTextArea().repaint();
editor.repaintErrorBar();
} else {
//resumeThread();
Messages.log(editor.getSketch().getName()
+ " - Error Checker resumed.");
Messages.log(editor.getSketch().getName() + " Error Checker resumed.");
runManualErrorCheck();
}
}

View File

@@ -132,12 +132,12 @@ public class JavaTextArea extends JEditTextArea {
// load settings from theme.txt
Mode mode = editor.getMode();
gutterBgColor = mode.getColor("gutter.bgcolor"); //, gutterBgColor);
gutterLineColor = mode.getColor("gutter.linecolor"); //, gutterLineColor);
gutterPadding = mode.getInteger("gutter.padding");
breakpointMarker = mode.getString("breakpoint.marker"); //, breakpointMarker);
gutterBgColor = mode.getColor("editor.gutter.bgcolor"); //, gutterBgColor);
gutterLineColor = mode.getColor("editor.gutter.linecolor"); //, gutterLineColor);
gutterPadding = mode.getInteger("editor.gutter.padding");
breakpointMarker = mode.getString("editor.gutter.breakpoint.marker"); //, breakpointMarker);
// breakpointMarker = "\u2666";
currentLineMarker = mode.getString("currentline.marker"); //, currentLineMarker);
currentLineMarker = mode.getString("editor.gutter.currentline.marker"); //, currentLineMarker);
// TweakMode code
prevCompListeners = painter.getComponentListeners();

View File

@@ -57,11 +57,12 @@ import processing.app.syntax.TokenMarker;
import processing.app.ui.Editor;
// TODO Most of this needs to be merged into the main TextAreaPainter,
// since it's not specific to Java. [fry 150821]
/**
* Customized line painter. Adds support for background colors,
* left hand gutter area with background color and text.
* TODO Most of this needs to be merged into the main TextAreaPainter,
* since it has nothing to do with Java. [fry]
*/
public class JavaTextAreaPainter extends TextAreaPainter
implements MouseListener, MouseMotionListener {
@@ -314,17 +315,12 @@ public class JavaTextAreaPainter extends TextAreaPainter
y += fm.getLeading() + fm.getMaxDescent();
int height = fm.getHeight();
// get the color
Color col = getTextArea().getLineBgColor(line);
//System.out.print("bg line " + line + ": ");
// no need to paint anything
if (col == null) {
//log("none");
return;
if (col != null) {
// paint line background
gfx.setColor(col);
gfx.fillRect(0, y, getWidth(), height);
}
// paint line background
gfx.setColor(col);
gfx.fillRect(0, y, getWidth(), height);
}
@@ -351,10 +347,10 @@ public class JavaTextAreaPainter extends TextAreaPainter
errorLineCoords.clear();
// Check if current line contains an error. If it does, find if it's an
// error or warning
for (ErrorMarker emarker : getEditor().getErrorPoints()) {
for (LineMarker emarker : getEditor().getErrorPoints()) {
if (emarker.getProblem().getLineNumber() == line) {
notFound = false;
if (emarker.getType() == ErrorMarker.Warning) {
if (emarker.getType() == LineMarker.WARNING) {
isWarning = true;
}
problem = emarker.getProblem();
@@ -463,9 +459,6 @@ public class JavaTextAreaPainter extends TextAreaPainter
/**
* Sets ErrorCheckerService and loads theme for TextAreaPainter(XQMode)
*
* @param ecs
* @param mode
*/
public void setMode(JavaMode mode) {
errorUnderlineColor = mode.getColor("editor.error.underline.color");

View File

@@ -20,13 +20,11 @@ along with this program; if not, write to the Free Software Foundation, Inc.
package processing.mode.java.pdex;
/**
* Error markers displayed on the Error Bar.
*
* @author Manindra Moharana &lt;me@mkmoharana.com&gt;
*
* Line markers displayed on the Error Column.
*/
public class ErrorMarker {
public class LineMarker {
/**
* y co-ordinate of the marker
*/
@@ -38,25 +36,25 @@ public class ErrorMarker {
/**
* Error Type constant
*/
public static final int Error = 1;
public static final int ERROR = 1;
/**
* Warning Type constant
*/
public static final int Warning = 2;
public static final int WARNING = 2;
/**
* Problem that the error marker represents
* @see Problem
*/
private Problem problem;
public ErrorMarker(Problem problem, int y, int type) {
public LineMarker(Problem problem, int y, int type) {
this.problem = problem;
this.y = y;
this.type = type;
}
/**
* y co-ordinate of the marker
*/
@@ -64,7 +62,7 @@ public class ErrorMarker {
return y;
}
/**
* Type of marker: ErrorMarker.Error or ErrorMarker.Warning?
*/
@@ -72,7 +70,7 @@ public class ErrorMarker {
return type;
}
/**
* Problem that the error marker represents
* @see Problem