mirror of
https://github.com/processing/processing4.git
synced 2026-02-02 13:21:07 +01:00
more refactoring and cleanup
This commit is contained in:
@@ -74,6 +74,8 @@ public class DebugToolbar extends JavaToolbar {
|
||||
public DebugToolbar(Editor editor, Base base) {
|
||||
super(editor, base);
|
||||
}
|
||||
|
||||
|
||||
public Image[][] loadDebugImages() {
|
||||
int res = Toolkit.highResDisplay() ? 2 : 1;
|
||||
|
||||
|
||||
@@ -92,19 +92,19 @@ public class JavaEditor extends Editor {
|
||||
protected JScrollPane errorTableScrollPane;
|
||||
protected JPanel consoleProblemsPane;
|
||||
protected XQErrorTable errorTable;
|
||||
|
||||
|
||||
// TODO how is this different from hasJavaTabs?
|
||||
public boolean compilationCheckEnabled = true;
|
||||
|
||||
// protected JCheckBoxMenuItem showWarnings;
|
||||
public JCheckBoxMenuItem problemWindowMenuCB;
|
||||
// public JCheckBoxMenuItem problemWindowMenuCB;
|
||||
// protected JCheckBoxMenuItem debugMessagesEnabled;
|
||||
// protected JMenuItem showOutline;
|
||||
// protected JMenuItem showTabOutline;
|
||||
// protected JCheckBoxMenuItem writeErrorLog;
|
||||
// protected JCheckBoxMenuItem completionsEnabled;
|
||||
|
||||
// TODO no way should this be public; make an accessor or protected
|
||||
public boolean hasJavaTabs;
|
||||
private boolean hasJavaTabs;
|
||||
|
||||
|
||||
protected JavaEditor(Base base, String path, EditorState state, Mode mode) {
|
||||
@@ -161,7 +161,7 @@ public class JavaEditor extends Editor {
|
||||
}
|
||||
getSketch().setModified(false); // setting breakpoints will flag sketch as modified, so override this here
|
||||
|
||||
checkForJavaTabs();
|
||||
hasJavaTabs = checkForJavaTabs();
|
||||
initializeErrorChecker();
|
||||
|
||||
getJavaTextArea().setECSandThemeforTextArea(errorCheckerService, jmode);
|
||||
@@ -2415,24 +2415,28 @@ public class JavaEditor extends Editor {
|
||||
}
|
||||
|
||||
|
||||
public boolean hasJavaTabs() {
|
||||
return hasJavaTabs;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks if the sketch contains java tabs. If it does, the editor ain't built
|
||||
* for it, yet. Also, user should really start looking at more powerful IDEs
|
||||
* likeEclipse. Disable compilation check and some more features.
|
||||
* Checks if the sketch contains java tabs. If it does, the editor ain't
|
||||
* built for it, yet. Also, user should really start looking at a full IDE
|
||||
* like Eclipse. Disable compilation check and some more features.
|
||||
*/
|
||||
private void checkForJavaTabs() {
|
||||
hasJavaTabs = false;
|
||||
for (int i = 0; i < this.getSketch().getCodeCount(); i++) {
|
||||
if (this.getSketch().getCode(i).getExtension().equals("java")) {
|
||||
private boolean checkForJavaTabs() {
|
||||
for (SketchCode code : getSketch().getCode()) {
|
||||
if (code.getExtension().equals("java")) {
|
||||
compilationCheckEnabled = false;
|
||||
hasJavaTabs = true;
|
||||
JOptionPane.showMessageDialog(new Frame(), this
|
||||
.getSketch().getName()
|
||||
+ " contains .java tabs. Some editor features are not supported " +
|
||||
"for .java tabs and will be disabled.");
|
||||
break;
|
||||
final String msg =
|
||||
getSketch().getName() + " contains .java tabs. Some editor " +
|
||||
"features are not supported for .java tabs and will be disabled.";
|
||||
Base.showWarning("Cannot debug advanced sketches", msg);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2127,8 +2127,9 @@ public class ASTGenerator {
|
||||
editor.getTextArea().select(lineStartWSOffset, lineStartWSOffset + length);
|
||||
}
|
||||
|
||||
public void handleShowUsage(){
|
||||
if(editor.hasJavaTabs) return; // show usage disabled if java tabs
|
||||
public void handleShowUsage() {
|
||||
if (editor.hasJavaTabs()) return; // show usage disabled if java tabs
|
||||
|
||||
log("Last clicked word:" + lastClickedWord);
|
||||
if (lastClickedWord == null &&
|
||||
getSelectedText() == null) {
|
||||
@@ -2383,8 +2384,9 @@ public class ASTGenerator {
|
||||
|
||||
protected SketchOutline sketchOutline;
|
||||
|
||||
public void showSketchOutline(){
|
||||
if(editor.hasJavaTabs) return; // sketch outline disabled if java tabs
|
||||
public void showSketchOutline() {
|
||||
if (editor.hasJavaTabs()) return;
|
||||
|
||||
sketchOutline = new SketchOutline(codeTree, errorCheckerService);
|
||||
sketchOutline.show();
|
||||
}
|
||||
@@ -2472,7 +2474,8 @@ public class ASTGenerator {
|
||||
}
|
||||
|
||||
public void handleRefactor() {
|
||||
if(editor.hasJavaTabs) return; // refactoring disabled if java tabs
|
||||
if (editor.hasJavaTabs()) return; // refactoring disabled w/ java tabs
|
||||
|
||||
log("Last clicked word:" + lastClickedWord);
|
||||
if (lastClickedWord == null &&
|
||||
getSelectedText() == null) {
|
||||
|
||||
@@ -167,7 +167,8 @@ public class ErrorWindow extends JFrame {
|
||||
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
thisEditor.problemWindowMenuCB.setSelected(false);
|
||||
// removing b/c this was the only use of problemWindowMenuCB [fry 150125]
|
||||
// thisEditor.problemWindowMenuCB.setSelected(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -163,22 +163,21 @@ public class JavaTextArea extends JEditTextArea {
|
||||
|
||||
|
||||
/**
|
||||
* Handles KeyEvents for TextArea
|
||||
* Code completion begins from here.
|
||||
* Handles KeyEvents for TextArea (code completion begins from here).
|
||||
*/
|
||||
public void processKeyEvent(KeyEvent evt) {
|
||||
//if(Base.isMacOS() && evt.isControlDown()) System.out.println("Ctrl down: " + evt);
|
||||
if(evt.getKeyCode() == KeyEvent.VK_ESCAPE){
|
||||
if(suggestion != null){
|
||||
if(suggestion.isVisible()){
|
||||
if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
|
||||
if (suggestion != null){
|
||||
if (suggestion.isVisible()){
|
||||
Base.log("esc key");
|
||||
hideSuggestion();
|
||||
evt.consume();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(evt.getKeyCode() == KeyEvent.VK_ENTER && evt.getID() == KeyEvent.KEY_PRESSED){
|
||||
|
||||
} else if (evt.getKeyCode() == KeyEvent.VK_ENTER &&
|
||||
evt.getID() == KeyEvent.KEY_PRESSED) {
|
||||
if (suggestion != null) {
|
||||
if (suggestion.isVisible()) {
|
||||
if (suggestion.insertSelection(CompletionPanel.KEYBOARD_COMPLETION)) {
|
||||
@@ -228,62 +227,27 @@ public class JavaTextArea extends JEditTextArea {
|
||||
}
|
||||
super.processKeyEvent(evt);
|
||||
|
||||
if (editor.hasJavaTabs) return; // code completion disabled if java tabs
|
||||
|
||||
if (evt.getID() == KeyEvent.KEY_TYPED) {
|
||||
char keyChar = evt.getKeyChar();
|
||||
if (keyChar == KeyEvent.VK_ENTER ||
|
||||
keyChar == KeyEvent.VK_ESCAPE ||
|
||||
keyChar == KeyEvent.VK_TAB ||
|
||||
keyChar == KeyEvent.CHAR_UNDEFINED) {
|
||||
return;
|
||||
}
|
||||
else if (keyChar == ')') {
|
||||
hideSuggestion(); // See #2741
|
||||
return;
|
||||
}
|
||||
|
||||
final KeyEvent evt2 = evt;
|
||||
// code completion disabled if java tabs
|
||||
if (!editor.hasJavaTabs()) {
|
||||
if (evt.getID() == KeyEvent.KEY_TYPED) {
|
||||
processCompletionKeys(evt);
|
||||
|
||||
if (keyChar == '.') {
|
||||
if (JavaMode.codeCompletionsEnabled) {
|
||||
Base.log("[KeyEvent]" + KeyEvent.getKeyText(evt2.getKeyCode()) + " |Prediction started");
|
||||
Base.log("Typing: " + fetchPhrase(evt2));
|
||||
}
|
||||
} else if (keyChar == ' ') { // Trigger on Ctrl-Space
|
||||
if (!Base.isMacOS() && JavaMode.codeCompletionsEnabled &&
|
||||
(evt.isControlDown() || evt.isMetaDown())) {
|
||||
SwingWorker<Object, Object> worker = new SwingWorker<Object, Object>() {
|
||||
protected Object doInBackground() throws Exception {
|
||||
// Provide completions only if it's enabled
|
||||
if (JavaMode.codeCompletionsEnabled) {
|
||||
getDocument().remove(getCaretPosition() - 1, 1); // Remove the typed space
|
||||
Base.log("[KeyEvent]" + evt2.getKeyChar() + " |Prediction started");
|
||||
Base.log("Typing: " + fetchPhrase(evt2));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
worker.execute();
|
||||
} else {
|
||||
hideSuggestion(); // hide on spacebar
|
||||
}
|
||||
} else {
|
||||
if (JavaMode.codeCompletionsEnabled) {
|
||||
prepareSuggestions(evt2);
|
||||
}
|
||||
} else if (Base.isMacOS() && evt.getID() == KeyEvent.KEY_RELEASED) {
|
||||
processControlSpace(evt);
|
||||
}
|
||||
}
|
||||
// #2699 - Special case for OS X, where Ctrl-Space is not detected as Key_Typed -_-
|
||||
else if (Base.isMacOS() && evt.getID() == KeyEvent.KEY_RELEASED
|
||||
&& evt.getKeyCode() == KeyEvent.VK_SPACE && evt.isControlDown()) {
|
||||
final KeyEvent evt2 = evt;
|
||||
}
|
||||
|
||||
|
||||
// #2699 - Special case for OS X, where Ctrl-Space is not detected as Key_Typed -_-
|
||||
private void processControlSpace(final KeyEvent event) {
|
||||
if (event.getKeyCode() == KeyEvent.VK_SPACE && event.isControlDown()) {
|
||||
SwingWorker<Object, Object> worker = new SwingWorker<Object, Object>() {
|
||||
protected Object doInBackground() throws Exception {
|
||||
// Provide completions only if it's enabled
|
||||
if (JavaMode.codeCompletionsEnabled) {
|
||||
Base.log("[KeyEvent]" + KeyEvent.getKeyText(evt2.getKeyCode()) + " |Prediction started");
|
||||
Base.log("Typing: " + fetchPhrase(evt2));
|
||||
Base.log("[KeyEvent]" + KeyEvent.getKeyText(event.getKeyCode()) + " |Prediction started");
|
||||
Base.log("Typing: " + fetchPhrase(event));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -292,10 +256,52 @@ public class JavaTextArea extends JEditTextArea {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void processCompletionKeys(final KeyEvent event) {
|
||||
char keyChar = event.getKeyChar();
|
||||
if (keyChar == KeyEvent.VK_ENTER ||
|
||||
keyChar == KeyEvent.VK_ESCAPE ||
|
||||
keyChar == KeyEvent.VK_TAB ||
|
||||
keyChar == KeyEvent.CHAR_UNDEFINED) {
|
||||
return;
|
||||
|
||||
} else if (keyChar == ')') {
|
||||
hideSuggestion(); // See #2741
|
||||
return;
|
||||
}
|
||||
|
||||
if (keyChar == '.') {
|
||||
if (JavaMode.codeCompletionsEnabled) {
|
||||
Base.log("[KeyEvent]" + KeyEvent.getKeyText(event.getKeyCode()) + " |Prediction started");
|
||||
Base.log("Typing: " + fetchPhrase(event));
|
||||
}
|
||||
} else if (keyChar == ' ') { // Trigger on Ctrl-Space
|
||||
if (!Base.isMacOS() && JavaMode.codeCompletionsEnabled &&
|
||||
(event.isControlDown() || event.isMetaDown())) {
|
||||
SwingWorker<Object, Object> worker = new SwingWorker<Object, Object>() {
|
||||
protected Object doInBackground() throws Exception {
|
||||
// Provide completions only if it's enabled
|
||||
if (JavaMode.codeCompletionsEnabled) {
|
||||
getDocument().remove(getCaretPosition() - 1, 1); // Remove the typed space
|
||||
Base.log("[KeyEvent]" + event.getKeyChar() + " |Prediction started");
|
||||
Base.log("Typing: " + fetchPhrase(event));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
worker.execute();
|
||||
} else {
|
||||
hideSuggestion(); // hide on spacebar
|
||||
}
|
||||
} else {
|
||||
if (JavaMode.codeCompletionsEnabled) {
|
||||
prepareSuggestions(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Kickstart auto-complete suggestions
|
||||
*/
|
||||
/** Kickstart auto-complete suggestions */
|
||||
private void prepareSuggestions(final KeyEvent evt){
|
||||
SwingWorker<Object, Object> worker = new SwingWorker<Object, Object>() {
|
||||
protected Object doInBackground() throws Exception {
|
||||
@@ -315,7 +321,6 @@ public class JavaTextArea extends JEditTextArea {
|
||||
/**
|
||||
* Retrieves the word on which the mouse pointer is present
|
||||
* @param evt - the MouseEvent which triggered this method
|
||||
* @return
|
||||
*/
|
||||
private String fetchPhrase(MouseEvent evt) {
|
||||
Base.log("--handle Mouse Right Click--");
|
||||
@@ -726,7 +731,7 @@ public class JavaTextArea extends JEditTextArea {
|
||||
}
|
||||
|
||||
if (me.getButton() == MouseEvent.BUTTON3) {
|
||||
if(!editor.hasJavaTabs){ // tooltips, etc disabled for java tabs
|
||||
if (!editor.hasJavaTabs()) { // tooltips, etc disabled for java tabs
|
||||
fetchPhrase(me);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,11 +75,10 @@ public class JavaTextAreaPainter extends TextAreaPainter
|
||||
|
||||
public JavaTextAreaPainter(JavaTextArea textArea, TextAreaDefaults defaults) {
|
||||
super(textArea, defaults);
|
||||
// ta = textArea;
|
||||
|
||||
addMouseListener(new MouseAdapter() {
|
||||
public void mouseClicked(MouseEvent evt) {
|
||||
if (!hasJavaTabs()) { // Ctrl + Click disabled for java tabs
|
||||
if (!getEditor().hasJavaTabs()) { // Ctrl + Click disabled for java tabs
|
||||
if (evt.getButton() == MouseEvent.BUTTON1) {
|
||||
if (evt.isControlDown() || evt.isMetaDown()) {
|
||||
handleCtrlClick(evt);
|
||||
@@ -453,87 +452,89 @@ public class JavaTextAreaPainter extends TextAreaPainter
|
||||
}
|
||||
|
||||
|
||||
public String getToolTipText(java.awt.event.MouseEvent evt) {
|
||||
if (hasJavaTabs()) { // disabled for java tabs
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(evt);
|
||||
}
|
||||
int off = textArea.xyToOffset(evt.getX(), evt.getY());
|
||||
if (off < 0) {
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(evt);
|
||||
}
|
||||
int line = textArea.getLineOfOffset(off);
|
||||
if (line < 0) {
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(evt);
|
||||
}
|
||||
String s = textArea.getLineText(line);
|
||||
if (s == "")
|
||||
return evt.toString();
|
||||
else if (s.length() == 0) {
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(evt);
|
||||
} else {
|
||||
int x = textArea.xToOffset(line, evt.getX()), x2 = x + 1, x1 = x - 1;
|
||||
int xLS = off - textArea.getLineStartNonWhiteSpaceOffset(line);
|
||||
if (x < 0 || x >= s.length()) {
|
||||
public String getToolTipText(MouseEvent event) {
|
||||
if (!getEditor().hasJavaTabs()) {
|
||||
int off = textArea.xyToOffset(event.getX(), event.getY());
|
||||
if (off < 0) {
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(evt);
|
||||
return super.getToolTipText(event);
|
||||
}
|
||||
String word = s.charAt(x) + "";
|
||||
if (s.charAt(x) == ' ') {
|
||||
int line = textArea.getLineOfOffset(off);
|
||||
if (line < 0) {
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(evt);
|
||||
return super.getToolTipText(event);
|
||||
}
|
||||
if (!(Character.isLetterOrDigit(s.charAt(x)) || s.charAt(x) == '_' || s
|
||||
.charAt(x) == '$')) {
|
||||
String s = textArea.getLineText(line);
|
||||
if (s == "") {
|
||||
return event.toString();
|
||||
|
||||
} else if (s.length() == 0) {
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(evt);
|
||||
}
|
||||
int i = 0;
|
||||
while (true) {
|
||||
i++;
|
||||
if (x1 >= 0 && x1 < s.length()) {
|
||||
if (Character.isLetter(s.charAt(x1)) || s.charAt(x1) == '_') {
|
||||
word = s.charAt(x1--) + word;
|
||||
xLS--;
|
||||
return super.getToolTipText(event);
|
||||
|
||||
} else {
|
||||
int x = textArea.xToOffset(line, event.getX()), x2 = x + 1, x1 = x - 1;
|
||||
int xLS = off - textArea.getLineStartNonWhiteSpaceOffset(line);
|
||||
if (x < 0 || x >= s.length()) {
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(event);
|
||||
}
|
||||
String word = s.charAt(x) + "";
|
||||
if (s.charAt(x) == ' ') {
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(event);
|
||||
}
|
||||
if (!(Character.isLetterOrDigit(s.charAt(x)) ||
|
||||
s.charAt(x) == '_' || s.charAt(x) == '$')) {
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(event);
|
||||
}
|
||||
int i = 0;
|
||||
while (true) {
|
||||
i++;
|
||||
if (x1 >= 0 && x1 < s.length()) {
|
||||
if (Character.isLetter(s.charAt(x1)) || s.charAt(x1) == '_') {
|
||||
word = s.charAt(x1--) + word;
|
||||
xLS--;
|
||||
} else
|
||||
x1 = -1;
|
||||
} else
|
||||
x1 = -1;
|
||||
} else
|
||||
x1 = -1;
|
||||
|
||||
if (x2 >= 0 && x2 < s.length()) {
|
||||
if (Character.isLetterOrDigit(s.charAt(x2)) || s.charAt(x2) == '_'
|
||||
|| s.charAt(x2) == '$')
|
||||
word = word + s.charAt(x2++);
|
||||
else
|
||||
if (x2 >= 0 && x2 < s.length()) {
|
||||
if (Character.isLetterOrDigit(s.charAt(x2)) || s.charAt(x2) == '_'
|
||||
|| s.charAt(x2) == '$')
|
||||
word = word + s.charAt(x2++);
|
||||
else
|
||||
x2 = -1;
|
||||
} else
|
||||
x2 = -1;
|
||||
} else
|
||||
x2 = -1;
|
||||
|
||||
if (x1 < 0 && x2 < 0)
|
||||
break;
|
||||
if (i > 200) {
|
||||
// time out!
|
||||
// System.err.println("Whoopsy! :P");
|
||||
break;
|
||||
if (x1 < 0 && x2 < 0)
|
||||
break;
|
||||
if (i > 200) {
|
||||
// time out!
|
||||
// System.err.println("Whoopsy! :P");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (Character.isDigit(word.charAt(0))) {
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(event);
|
||||
}
|
||||
String tooltipText = errorCheckerService.getASTGenerator()
|
||||
.getLabelForASTNode(line, word, xLS);
|
||||
|
||||
// log(errorCheckerService.mainClassOffset + " MCO "
|
||||
// + "|" + line + "| offset " + xLS + word + " <= offf: "+off+ "\n");
|
||||
if (tooltipText != null) {
|
||||
return tooltipText;
|
||||
}
|
||||
}
|
||||
if (Character.isDigit(word.charAt(0))) {
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(evt);
|
||||
}
|
||||
String tooltipText = errorCheckerService.getASTGenerator()
|
||||
.getLabelForASTNode(line, word, xLS);
|
||||
|
||||
// log(errorCheckerService.mainClassOffset + " MCO "
|
||||
// + "|" + line + "| offset " + xLS + word + " <= offf: "+off+ "\n");
|
||||
if (tooltipText != null)
|
||||
return tooltipText;
|
||||
}
|
||||
// Used when there are Java tabs, but also the fall-through case from above
|
||||
setToolTipText(null);
|
||||
return super.getToolTipText(evt);
|
||||
return super.getToolTipText(event);
|
||||
}
|
||||
|
||||
|
||||
@@ -881,7 +882,7 @@ public class JavaTextAreaPainter extends TextAreaPainter
|
||||
// }
|
||||
|
||||
|
||||
private boolean hasJavaTabs() {
|
||||
return getEditor().hasJavaTabs;
|
||||
}
|
||||
// private boolean hasJavaTabs() {
|
||||
// return getEditor().hasJavaTabs();
|
||||
// }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user