more refactoring and cleanup

This commit is contained in:
Ben Fry
2015-01-25 12:44:53 -05:00
parent e22aa85ff8
commit bbd49e538b
7 changed files with 178 additions and 159 deletions

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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) {

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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();
// }
}