mirror of
https://github.com/processing/processing4.git
synced 2026-01-30 03:41:15 +01:00
removing Java Mode dependencies from ErrorTable
This commit is contained in:
@@ -14,9 +14,11 @@ import java.util.logging.Logger;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.*;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
import javax.swing.event.MenuEvent;
|
||||
import javax.swing.event.MenuListener;
|
||||
import javax.swing.table.TableModel;
|
||||
import javax.swing.text.BadLocationException;
|
||||
import javax.swing.text.Document;
|
||||
|
||||
import org.eclipse.jdt.core.compiler.IProblem;
|
||||
@@ -2559,12 +2561,120 @@ public class JavaEditor extends Editor {
|
||||
// }
|
||||
|
||||
|
||||
/** Updates the error table */
|
||||
synchronized public boolean updateTable(final TableModel tableModel) {
|
||||
return errorTable.updateTable(tableModel);
|
||||
public XQErrorTable getErrorTable() {
|
||||
return errorTable;
|
||||
}
|
||||
|
||||
|
||||
public void errorTableClick(Object item) {
|
||||
Problem p = (Problem) item;
|
||||
errorCheckerService.scrollToErrorLine(p);
|
||||
}
|
||||
|
||||
|
||||
public void errorTableDoubleClick(Object item) {
|
||||
Problem p = (Problem) item;
|
||||
|
||||
// MouseEvent evt = null;
|
||||
String[] suggs = p.getImportSuggestions();
|
||||
if (suggs != null && suggs.length > 0) {
|
||||
// String t = p.getMessage() + "(Import Suggestions available)";
|
||||
// FontMetrics fm = getFontMetrics(getFont());
|
||||
// int x1 = fm.stringWidth(p.getMessage());
|
||||
// int x2 = fm.stringWidth(t);
|
||||
// if (evt.getX() > x1 && evt.getX() < x2) {
|
||||
String[] list = p.getImportSuggestions();
|
||||
String className = list[0].substring(list[0].lastIndexOf('.') + 1);
|
||||
String[] temp = new String[list.length];
|
||||
for (int i = 0; i < list.length; i++) {
|
||||
temp[i] = "<html>Import '" + className + "' <font color=#777777>(" + list[i] + ")</font></html>";
|
||||
}
|
||||
// showImportSuggestion(temp, evt.getXOnScreen(), evt.getYOnScreen() - 3 * getFont().getSize());
|
||||
Point mouse = MouseInfo.getPointerInfo().getLocation();
|
||||
showImportSuggestion(temp, mouse.x, mouse.y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
JFrame frmImportSuggest;
|
||||
|
||||
private void showImportSuggestion(String[] list, int x, int y) {
|
||||
if (frmImportSuggest != null) {
|
||||
// frmImportSuggest.setVisible(false);
|
||||
// frmImportSuggest = null;
|
||||
return;
|
||||
}
|
||||
final JList<String> classList = new JList<String>(list);
|
||||
classList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
frmImportSuggest = new JFrame();
|
||||
|
||||
frmImportSuggest.setUndecorated(true);
|
||||
frmImportSuggest.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
JPanel panel = new JPanel();
|
||||
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
||||
panel.setBackground(Color.WHITE);
|
||||
frmImportSuggest.setBackground(Color.WHITE);
|
||||
panel.add(classList);
|
||||
JLabel label = new JLabel("<html><div alight = \"left\"><font size = \"2\"><br>(Click to insert)</font></div></html>");
|
||||
label.setBackground(Color.WHITE);
|
||||
label.setHorizontalTextPosition(SwingConstants.LEFT);
|
||||
panel.add(label);
|
||||
panel.validate();
|
||||
frmImportSuggest.getContentPane().add(panel);
|
||||
frmImportSuggest.pack();
|
||||
|
||||
classList.addListSelectionListener(new ListSelectionListener() {
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
if (classList.getSelectedValue() != null) {
|
||||
try {
|
||||
String t = classList.getSelectedValue().trim();
|
||||
Messages.log(t);
|
||||
int x = t.indexOf('(');
|
||||
String impString = "import " + t.substring(x + 1, t.indexOf(')')) + ";\n";
|
||||
int ct = getSketch().getCurrentCodeIndex();
|
||||
getSketch().setCurrentCode(0);
|
||||
getTextArea().getDocument().insertString(0, impString, null);
|
||||
getSketch().setCurrentCode(ct);
|
||||
} catch (BadLocationException ble) {
|
||||
Messages.log("Failed to insert import");
|
||||
ble.printStackTrace();
|
||||
}
|
||||
}
|
||||
frmImportSuggest.setVisible(false);
|
||||
frmImportSuggest.dispose();
|
||||
frmImportSuggest = null;
|
||||
}
|
||||
});
|
||||
|
||||
frmImportSuggest.addWindowFocusListener(new WindowFocusListener() {
|
||||
|
||||
@Override
|
||||
public void windowLostFocus(WindowEvent e) {
|
||||
if (frmImportSuggest != null) {
|
||||
frmImportSuggest.dispose();
|
||||
frmImportSuggest = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowGainedFocus(WindowEvent e) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
frmImportSuggest.setLocation(x, y);
|
||||
frmImportSuggest.setBounds(x, y, 250, 100);
|
||||
frmImportSuggest.pack();
|
||||
frmImportSuggest.setVisible(true);
|
||||
}
|
||||
|
||||
|
||||
// /** Updates the error table */
|
||||
// synchronized public boolean updateTable(final TableModel tableModel) {
|
||||
// return errorTable.updateTable(tableModel);
|
||||
// }
|
||||
|
||||
|
||||
/**
|
||||
* Handle whether the tiny red error indicator is shown near
|
||||
* the error button at the bottom of the PDE
|
||||
|
||||
@@ -35,7 +35,6 @@ import java.util.regex.Pattern;
|
||||
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import javax.swing.event.DocumentListener;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.text.BadLocationException;
|
||||
import javax.swing.text.Document;
|
||||
import javax.swing.text.Element;
|
||||
@@ -919,20 +918,15 @@ public class ErrorCheckerService implements Runnable {
|
||||
*/
|
||||
public void updateErrorTable() {
|
||||
try {
|
||||
String[][] errorData = new String[problemsList.size()][3];
|
||||
int index = 0;
|
||||
XQErrorTable table = editor.getErrorTable();
|
||||
table.clear();
|
||||
|
||||
// String[][] errorData = new String[problemsList.size()][3];
|
||||
// int index = 0;
|
||||
// for (int i = 0; i < problemsList.size(); i++) {
|
||||
Sketch sketch = editor.getSketch();
|
||||
for (Problem p : problemsList) {
|
||||
errorData[index][0] = p.getMessage();
|
||||
errorData[index][1] = editor.getSketch().getCode(p.getTabIndex()).getPrettyName();
|
||||
errorData[index][2] = Integer.toString(p.getLineNumber() + 1);
|
||||
// Added +1 because lineNumbers internally are 0-indexed
|
||||
|
||||
// //TODO: This is temporary
|
||||
// if (tempErrorLog.size() < 200) {
|
||||
// tempErrorLog.put(p.getMessage(), p.getIProblem());
|
||||
// }
|
||||
|
||||
String message = p.getMessage();
|
||||
if (JavaMode.importSuggestEnabled) {
|
||||
if (p.getIProblem().getID() == IProblem.UndefinedType) {
|
||||
String[] args = p.getIProblem().getArguments();
|
||||
@@ -941,18 +935,29 @@ public class ErrorCheckerService implements Runnable {
|
||||
String[] si = astGenerator.getSuggestImports(missingClass);
|
||||
if (si != null && si.length > 0) {
|
||||
p.setImportSuggestions(si);
|
||||
errorData[index][0] = "<html>" + p.getMessage() +
|
||||
" (<font color=#0000ff><u>Import Suggestions available</u></font>)</html>";
|
||||
// errorData[index][0] = "<html>" + p.getMessage() +
|
||||
// " (<font color=#0000ff><u>Import Suggestions available</u></font>)</html>";
|
||||
message += " (click for suggested libraries)";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
index++;
|
||||
|
||||
table.append(p, message,
|
||||
sketch.getCode(p.getTabIndex()).getPrettyName(),
|
||||
Integer.toString(p.getLineNumber() + 1));
|
||||
// Added +1 because lineNumbers internally are 0-indexed
|
||||
|
||||
// //TODO: This is temporary
|
||||
// if (tempErrorLog.size() < 200) {
|
||||
// tempErrorLog.put(p.getMessage(), p.getIProblem());
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
DefaultTableModel tm =
|
||||
new DefaultTableModel(errorData, XQErrorTable.columnNames);
|
||||
editor.updateTable(tm);
|
||||
// DefaultTableModel tm =
|
||||
// new DefaultTableModel(errorData, XQErrorTable.columnNames);
|
||||
// editor.updateTable(tm);
|
||||
|
||||
} catch (Exception e) {
|
||||
Messages.loge("Exception at updateErrorTable()", e);
|
||||
|
||||
@@ -24,36 +24,36 @@ import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Font;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.event.*;
|
||||
import java.util.List;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.SwingWorker;
|
||||
import javax.swing.ToolTipManager;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.JTableHeader;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import javax.swing.table.TableColumnModel;
|
||||
import javax.swing.table.TableModel;
|
||||
import javax.swing.text.BadLocationException;
|
||||
|
||||
import processing.app.Language;
|
||||
import processing.app.Messages;
|
||||
import processing.app.Mode;
|
||||
import processing.app.ui.Editor;
|
||||
import processing.mode.java.JavaEditor;
|
||||
|
||||
|
||||
public class XQErrorTable extends JTable {
|
||||
Editor editor;
|
||||
|
||||
static final String[] columnNames = {
|
||||
"",
|
||||
Language.text("editor.footer.errors.problem"),
|
||||
Language.text("editor.footer.errors.tab"),
|
||||
Language.text("editor.footer.errors.line")
|
||||
};
|
||||
|
||||
int[] columnWidths = { 400, 100, 50 };
|
||||
int[] columnWidths = { Editor.LEFT_GUTTER, 400, 100, 50 };
|
||||
|
||||
/** Is the column being resized? */
|
||||
private boolean columnResizing = false;
|
||||
@@ -67,7 +67,30 @@ public class XQErrorTable extends JTable {
|
||||
Color rowBgColor;
|
||||
|
||||
|
||||
public XQErrorTable(final JavaEditor editor) {
|
||||
/*
|
||||
class Item {
|
||||
String message;
|
||||
String filename;
|
||||
int line;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
public void clear() {
|
||||
DefaultTableModel dtm = (DefaultTableModel) getModel();
|
||||
dtm.setRowCount(0);
|
||||
}
|
||||
|
||||
|
||||
public void append(Object data, String message, String filename, String line) {
|
||||
DefaultTableModel dtm = (DefaultTableModel) getModel();
|
||||
dtm.addRow(new Object[] { data, message, filename, line });
|
||||
}
|
||||
|
||||
|
||||
public XQErrorTable(final Editor editor) {
|
||||
super(new DefaultTableModel(columnNames, 0));
|
||||
|
||||
this.editor = editor;
|
||||
JTableHeader header = getTableHeader();
|
||||
|
||||
@@ -85,19 +108,28 @@ public class XQErrorTable extends JTable {
|
||||
//System.out.println("class is " + columnModel.getColumn(i).getClass());
|
||||
}
|
||||
*/
|
||||
// DefaultTableModel tm = new DefaultTableModel(columnNames, 0);
|
||||
|
||||
addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
synchronized public void mouseClicked(MouseEvent e) {
|
||||
try {
|
||||
int row = ((XQErrorTable) e.getSource()).getSelectedRow();
|
||||
editor.getErrorChecker().scrollToErrorLine(row);
|
||||
Object data = getModel().getValueAt(row, 0);
|
||||
int clickCount = e.getClickCount();
|
||||
if (clickCount == 1) {
|
||||
editor.errorTableClick(data);
|
||||
} else if (clickCount > 1) {
|
||||
editor.errorTableDoubleClick(data);
|
||||
}
|
||||
// editor.getErrorChecker().scrollToErrorLine(row);
|
||||
} catch (Exception e1) {
|
||||
Messages.log("Exception XQErrorTable mouseReleased " + e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
addMouseMotionListener(new MouseMotionAdapter() {
|
||||
@Override
|
||||
public void mouseMoved(MouseEvent evt) {
|
||||
@@ -128,6 +160,7 @@ public class XQErrorTable extends JTable {
|
||||
}
|
||||
}
|
||||
});
|
||||
*/
|
||||
|
||||
header.setReorderingAllowed(false);
|
||||
|
||||
@@ -207,79 +240,6 @@ public class XQErrorTable extends JTable {
|
||||
}
|
||||
|
||||
|
||||
JFrame frmImportSuggest;
|
||||
|
||||
private void showImportSuggestion(String[] list, int x, int y) {
|
||||
if (frmImportSuggest != null) {
|
||||
// frmImportSuggest.setVisible(false);
|
||||
// frmImportSuggest = null;
|
||||
return;
|
||||
}
|
||||
final JList<String> classList = new JList<String>(list);
|
||||
classList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
frmImportSuggest = new JFrame();
|
||||
|
||||
frmImportSuggest.setUndecorated(true);
|
||||
frmImportSuggest.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
JPanel panel = new JPanel();
|
||||
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
||||
panel.setBackground(Color.WHITE);
|
||||
frmImportSuggest.setBackground(Color.WHITE);
|
||||
panel.add(classList);
|
||||
JLabel label = new JLabel("<html><div alight = \"left\"><font size = \"2\"><br>(Click to insert)</font></div></html>");
|
||||
label.setBackground(Color.WHITE);
|
||||
label.setHorizontalTextPosition(SwingConstants.LEFT);
|
||||
panel.add(label);
|
||||
panel.validate();
|
||||
frmImportSuggest.getContentPane().add(panel);
|
||||
frmImportSuggest.pack();
|
||||
|
||||
classList.addListSelectionListener(new ListSelectionListener() {
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
if (classList.getSelectedValue() != null) {
|
||||
try {
|
||||
String t = classList.getSelectedValue().trim();
|
||||
Messages.log(t);
|
||||
int x = t.indexOf('(');
|
||||
String impString = "import " + t.substring(x + 1, t.indexOf(')')) + ";\n";
|
||||
int ct = editor.getSketch().getCurrentCodeIndex();
|
||||
editor.getSketch().setCurrentCode(0);
|
||||
editor.getTextArea().getDocument().insertString(0, impString, null);
|
||||
editor.getSketch().setCurrentCode(ct);
|
||||
} catch (BadLocationException ble) {
|
||||
Messages.log("Failed to insert import");
|
||||
ble.printStackTrace();
|
||||
}
|
||||
}
|
||||
frmImportSuggest.setVisible(false);
|
||||
frmImportSuggest.dispose();
|
||||
frmImportSuggest = null;
|
||||
}
|
||||
});
|
||||
|
||||
frmImportSuggest.addWindowFocusListener(new WindowFocusListener() {
|
||||
|
||||
@Override
|
||||
public void windowLostFocus(WindowEvent e) {
|
||||
if (frmImportSuggest != null) {
|
||||
frmImportSuggest.dispose();
|
||||
frmImportSuggest = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowGainedFocus(WindowEvent e) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
frmImportSuggest.setLocation(x, y);
|
||||
frmImportSuggest.setBounds(x, y, 250, 100);
|
||||
frmImportSuggest.pack();
|
||||
frmImportSuggest.setVisible(true);
|
||||
}
|
||||
|
||||
|
||||
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
||||
|
||||
|
||||
@@ -338,7 +298,11 @@ public class XQErrorTable extends JTable {
|
||||
setForeground(textColor);
|
||||
setBackground(bgColor);
|
||||
}
|
||||
setText(value == null ? "" : value.toString());
|
||||
if (column == 0 || value == null) {
|
||||
setText("");
|
||||
} else {
|
||||
setText(value.toString());
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user