diff --git a/java/src/processing/mode/java/DebugToolbar.java b/java/src/processing/mode/java/DebugToolbar.java index bf7f8162d..3229c4e0f 100644 --- a/java/src/processing/mode/java/DebugToolbar.java +++ b/java/src/processing/mode/java/DebugToolbar.java @@ -226,24 +226,24 @@ public class DebugToolbar extends JavaToolbar { deditor.handleRun(); } else { Logger.getLogger(DebugToolbar.class.getName()).log(Level.INFO, "Invoked 'Debug' toolbar button"); - deditor.dbg.startDebug(); + deditor.debugger.startDebug(); } break; case CONTINUE: Logger.getLogger(DebugToolbar.class.getName()).log(Level.INFO, "Invoked 'Continue' toolbar button"); - deditor.dbg.continueDebug(); + deditor.debugger.continueDebug(); break; case TOGGLE_BREAKPOINT: Logger.getLogger(DebugToolbar.class.getName()).log(Level.INFO, "Invoked 'Toggle Breakpoint' toolbar button"); - deditor.dbg.toggleBreakpoint(); + deditor.debugger.toggleBreakpoint(); break; case STEP: if (shift) { Logger.getLogger(DebugToolbar.class.getName()).log(Level.INFO, "Invoked 'Step Into' toolbar button"); - deditor.dbg.stepInto(); + deditor.debugger.stepInto(); } else { Logger.getLogger(DebugToolbar.class.getName()).log(Level.INFO, "Invoked 'Step' toolbar button"); - deditor.dbg.stepOver(); + deditor.debugger.stepOver(); } break; // case STEP_INTO: diff --git a/java/src/processing/mode/java/JavaEditor.java b/java/src/processing/mode/java/JavaEditor.java index db10afa4a..c4b2c3aef 100644 --- a/java/src/processing/mode/java/JavaEditor.java +++ b/java/src/processing/mode/java/JavaEditor.java @@ -50,16 +50,68 @@ public class JavaEditor extends Editor { // Runner associated with this editor window private Runner runtime; + // Need to sort through the rest of these additions... + + protected Color breakpointColor; // = new Color(240, 240, 240); // the background color for highlighting lines + protected Color currentLineColor; // = new Color(255, 255, 150); // the background color for highlighting lines + protected Color breakpointMarkerColor; // = new Color(74, 84, 94); // the color of breakpoint gutter markers + protected Color currentLineMarkerColor; // = new Color(226, 117, 0); // the color of current line gutter markers + protected List breakpointedLines = new ArrayList(); // breakpointed lines + protected LineHighlight currentLine; // line the debugger is currently suspended at + protected final String breakpointMarkerComment = " //<>//"; // breakpoint marker comment + + protected JMenu debugMenu; // the debug menu + +// protected JMenuItem debugMenuItem; + protected JMenuItem continueMenuItem; + protected JMenuItem stopMenuItem; + +// protected JMenuItem toggleBreakpointMenuItem; + protected JMenuItem listBreakpointsMenuItem; + + protected JMenuItem stepOverMenuItem; + protected JMenuItem stepIntoMenuItem; + protected JMenuItem stepOutMenuItem; + + protected JMenuItem printStackTraceMenuItem; + protected JMenuItem printLocalsMenuItem; + protected JMenuItem printThisMenuItem; + protected JMenuItem printSourceMenuItem; + protected JMenuItem printThreads; + + protected JMenuItem toggleVariableInspectorMenuItem; + + protected Debugger debugger; // the debugger + protected DebugTray tray; // the variable inspector frame + +// public JavaTextArea ta; // the text area + public ErrorBar errorBar; + + protected XQConsoleToggle btnShowConsole; + protected XQConsoleToggle btnShowErrors; + protected JScrollPane errorTableScrollPane; + protected JPanel consoleProblemsPane; + protected XQErrorTable errorTable; + + public boolean compilationCheckEnabled = true; + + protected JCheckBoxMenuItem showWarnings; + public JCheckBoxMenuItem problemWindowMenuCB; + protected JCheckBoxMenuItem debugMessagesEnabled; + protected JMenuItem showOutline, showTabOutline; + protected JCheckBoxMenuItem writeErrorLog; + protected JCheckBoxMenuItem completionsEnabled; + + // TODO no way should this be public; make an accessor or protected + public boolean hasJavaTabs; + protected JavaEditor(Base base, String path, EditorState state, Mode mode) { super(base, path, state, mode); jmode = (JavaMode) mode; - dbg = new Debugger(this); - vi = new DebugTray(this); - - // access to customized (i.e. subclassed) text area - ta = (JavaTextArea) textarea; + debugger = new Debugger(this); + tray = new DebugTray(this); // Add show usage option JMenuItem showUsageItem = new JMenuItem("Show Usage..."); @@ -68,7 +120,7 @@ public class JavaEditor extends Editor { handleShowUsage(); } }); - ta.getRightClickPopup().add(showUsageItem); + getTextArea().getRightClickPopup().add(showUsageItem); // add refactor option JMenuItem renameItem = new JMenuItem("Rename..."); @@ -84,7 +136,7 @@ public class JavaEditor extends Editor { // System.out.println(evt); // } // }); - ta.getRightClickPopup().add(renameItem); + textarea.getRightClickPopup().add(renameItem); // set action on frame close // addWindowListener(new WindowAdapter() { // @Override @@ -93,7 +145,7 @@ public class JavaEditor extends Editor { // } // }); - Toolkit.setMenuMnemonics(ta.getRightClickPopup()); + Toolkit.setMenuMnemonics(textarea.getRightClickPopup()); // load settings from theme.txt breakpointColor = mode.getColor("breakpoint.bgcolor"); //, breakpointColor); @@ -104,14 +156,14 @@ public class JavaEditor extends Editor { // set breakpoints from marker comments for (LineID lineID : stripBreakpointComments()) { //System.out.println("setting: " + lineID); - dbg.setBreakpoint(lineID); + debugger.setBreakpoint(lineID); } getSketch().setModified(false); // setting breakpoints will flag sketch as modified, so override this here checkForJavaTabs(); initializeErrorChecker(); - ta.setECSandThemeforTextArea(errorCheckerService, jmode); + getJavaTextArea().setECSandThemeforTextArea(errorCheckerService, jmode); addXQModeUI(); debugToolbarEnabled = new AtomicBoolean(false); @@ -1011,8 +1063,8 @@ public class JavaEditor extends Editor { * session or performs standard stop action if not currently debugging. */ public void handleStop() { - if (dbg.isStarted()) { - dbg.stopDebug(); + if (debugger.isStarted()) { + debugger.stopDebug(); } else { toolbar.activate(JavaToolbar.STOP); @@ -1052,14 +1104,14 @@ public class JavaEditor extends Editor { boolean saved = super.handleSaveAs(); if (saved) { // re-set breakpoints in first tab (name has changed) - List bps = dbg.getBreakpoints(oldName); - dbg.clearBreakpoints(oldName); + List bps = debugger.getBreakpoints(oldName); + debugger.clearBreakpoints(oldName); String newName = getSketch().getCode(0).getFileName(); //System.out.println("new name: " + newName); for (LineBreakpoint bp : bps) { LineID line = new LineID(newName, bp.lineID().lineIdx()); //System.out.println("setting: " + line); - dbg.setBreakpoint(line); + debugger.setBreakpoint(line); } // add breakpoint marker comments to source file for (int i = 0; i < getSketch().getCodeCount(); i++) { @@ -1067,7 +1119,7 @@ public class JavaEditor extends Editor { } // set new name of variable inspector - vi.setTitle(getSketch().getName()); + tray.setTitle(getSketch().getName()); } // if file location has changed, update autosaver // autosaver.reloadAutosaveDir(); @@ -1160,61 +1212,8 @@ public class JavaEditor extends Editor { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . // Additions from PDE X, Debug Mode, Twerk Mode... + - protected Color breakpointColor; // = new Color(240, 240, 240); // the background color for highlighting lines - protected Color currentLineColor; // = new Color(255, 255, 150); // the background color for highlighting lines - protected Color breakpointMarkerColor; // = new Color(74, 84, 94); // the color of breakpoint gutter markers - protected Color currentLineMarkerColor; // = new Color(226, 117, 0); // the color of current line gutter markers - protected List breakpointedLines = new ArrayList(); // breakpointed lines - protected LineHighlight currentLine; // line the debugger is currently suspended at - protected final String breakpointMarkerComment = " //<>//"; // breakpoint marker comment - - protected JMenu debugMenu; // the debug menu - - protected JMenuItem debugMenuItem; - protected JMenuItem continueMenuItem; - protected JMenuItem stopMenuItem; - - protected JMenuItem toggleBreakpointMenuItem; - protected JMenuItem listBreakpointsMenuItem; - - protected JMenuItem stepOverMenuItem; - protected JMenuItem stepIntoMenuItem; - protected JMenuItem stepOutMenuItem; - - protected JMenuItem printStackTraceMenuItem; - protected JMenuItem printLocalsMenuItem; - protected JMenuItem printThisMenuItem; - protected JMenuItem printSourceMenuItem; - protected JMenuItem printThreads; - - protected JMenuItem toggleVariableInspectorMenuItem; - - protected Debugger dbg; // the debugger - protected DebugTray vi; // the variable inspector frame - - public JavaTextArea ta; // the text area - public ErrorBar errorBar; - - protected XQConsoleToggle btnShowConsole; - protected XQConsoleToggle btnShowErrors; - protected JScrollPane errorTableScrollPane; - protected JPanel consoleProblemsPane; - protected XQErrorTable errorTable; - - public boolean compilationCheckEnabled = true; - - protected JCheckBoxMenuItem showWarnings; - public JCheckBoxMenuItem problemWindowMenuCB; - protected JCheckBoxMenuItem debugMessagesEnabled; - protected JMenuItem showOutline, showTabOutline; - protected JCheckBoxMenuItem writeErrorLog; - protected JCheckBoxMenuItem completionsEnabled; - - // TODO no way should this be public; make an accessor or protected - public boolean hasJavaTabs; - - private void addXQModeUI(){ // Adding ErrorBar @@ -1269,7 +1268,7 @@ public class JavaEditor extends Editor { // ensure completion gets hidden on editor losing focus addWindowFocusListener(new WindowFocusListener() { public void windowLostFocus(WindowEvent e) { - ta.hideSuggestion(); + getJavaTextArea().hideSuggestion(); } public void windowGainedFocus(WindowEvent e) { @@ -1298,9 +1297,9 @@ public class JavaEditor extends Editor { public void dispose() { //System.out.println("window dispose"); // quit running debug session - dbg.stopDebug(); + debugger.stopDebug(); // remove var.inspector - vi.dispose(); + tray.dispose(); errorCheckerService.stopThread(); // original dispose super.dispose(); @@ -1401,7 +1400,7 @@ public class JavaEditor extends Editor { break; } } - ta.repaint(); + textarea.repaint(); } }); } @@ -1414,6 +1413,7 @@ public class JavaEditor extends Editor { */ protected JMenu buildDebugMenu() { debugMenu = new JMenu(Language.text("menu.debug")); + JMenuItem item; JCheckBoxMenuItem toggleDebugger = new JCheckBoxMenuItem(Language.text("menu.debug.show_debug_toolbar")); @@ -1425,20 +1425,20 @@ public class JavaEditor extends Editor { }); debugMenu.add(toggleDebugger); - debugMenuItem = Toolkit.newJMenuItemAlt(Language.text("menu.debug.debug"), KeyEvent.VK_R); - debugMenuItem.addActionListener(new ActionListener() { + item = Toolkit.newJMenuItemAlt(Language.text("menu.debug.debug"), KeyEvent.VK_R); + item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Debug' menu item"); - dbg.startDebug(); + debugger.startDebug(); } }); - debugMenu.add(debugMenuItem); + debugMenu.add(item); continueMenuItem = Toolkit.newJMenuItem(Language.text("menu.debug.continue"), KeyEvent.VK_U); continueMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Continue' menu item"); - dbg.continueDebug(); + debugger.continueDebug(); } }); debugMenu.add(continueMenuItem); @@ -1447,27 +1447,28 @@ public class JavaEditor extends Editor { stopMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Stop' menu item"); - dbg.stopDebug(); + debugger.stopDebug(); } }); debugMenu.add(stopMenuItem); debugMenu.addSeparator(); - toggleBreakpointMenuItem = + item = Toolkit.newJMenuItem(Language.text("menu.debug.toggle_breakpoint"), KeyEvent.VK_B); - toggleBreakpointMenuItem.addActionListener(new ActionListener() { + item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Toggle Breakpoint' menu item"); - dbg.toggleBreakpoint(); + debugger.toggleBreakpoint(); } }); - debugMenu.add(toggleBreakpointMenuItem); + debugMenu.add(item); + listBreakpointsMenuItem = new JMenuItem(Language.text("menu.debug.list_breakpoints")); listBreakpointsMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'List Breakpoints' menu item"); - dbg.listBreakpoints(); + debugger.listBreakpoints(); } }); debugMenu.add(listBreakpointsMenuItem); @@ -1478,7 +1479,7 @@ public class JavaEditor extends Editor { stepOverMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Step Over' menu item"); - dbg.stepOver(); + debugger.stepOver(); } }); debugMenu.add(stepOverMenuItem); @@ -1487,7 +1488,7 @@ public class JavaEditor extends Editor { stepIntoMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Step Into' menu item"); - dbg.stepInto(); + debugger.stepInto(); } }); debugMenu.add(stepIntoMenuItem); @@ -1496,7 +1497,7 @@ public class JavaEditor extends Editor { stepOutMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Step Out' menu item"); - dbg.stepOut(); + debugger.stepOut(); } }); debugMenu.add(stepOutMenuItem); @@ -1507,7 +1508,7 @@ public class JavaEditor extends Editor { printStackTraceMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Print Stack Trace' menu item"); - dbg.printStackTrace(); + debugger.printStackTrace(); } }); debugMenu.add(printStackTraceMenuItem); @@ -1516,7 +1517,7 @@ public class JavaEditor extends Editor { printLocalsMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Print Locals' menu item"); - dbg.printLocals(); + debugger.printLocals(); } }); debugMenu.add(printLocalsMenuItem); @@ -1525,7 +1526,7 @@ public class JavaEditor extends Editor { printThisMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Print This' menu item"); - dbg.printThis(); + debugger.printThis(); } }); debugMenu.add(printThisMenuItem); @@ -1534,7 +1535,7 @@ public class JavaEditor extends Editor { printSourceMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Print Source' menu item"); - dbg.printSource(); + debugger.printSource(); } }); debugMenu.add(printSourceMenuItem); @@ -1543,7 +1544,7 @@ public class JavaEditor extends Editor { printThreads.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Logger.getLogger(JavaEditor.class.getName()).log(Level.INFO, "Invoked 'Print Threads' menu item"); - dbg.printThreads(); + debugger.printThreads(); } }); debugMenu.add(printThreads); @@ -1599,9 +1600,9 @@ public class JavaEditor extends Editor { protected boolean handleOpenInternal(String path) { // log("handleOpenInternal, path: " + path); boolean didOpen = super.handleOpenInternal(path); - if (didOpen && dbg != null) { + if (didOpen && debugger != null) { // should already been stopped (open calls handleStop) - dbg.clearBreakpoints(); + debugger.clearBreakpoints(); clearBreakpointedLines(); // force clear breakpoint highlights variableInspector().reset(); // clear contents of variable inspector } @@ -1673,7 +1674,7 @@ public class JavaEditor extends Editor { Base.loge("Illegal tab name to addBreakpointComments() " + tabFilename); return; } - List bps = dbg.getBreakpoints(tab.getFileName()); + List bps = debugger.getBreakpoints(tab.getFileName()); // load the source file File sourceFile = new File(sketch.getFolder(), tab.getFileName()); @@ -1774,7 +1775,7 @@ public class JavaEditor extends Editor { */ protected void setTabContents(String tabFilename, String code) { // remove all breakpoints of this tab - dbg.clearBreakpoints(tabFilename); + debugger.clearBreakpoints(tabFilename); SketchCode currentTab = getCurrentTab(); @@ -1861,7 +1862,7 @@ public class JavaEditor extends Editor { * @return the debugger controller object */ public Debugger getDebugger() { - return dbg; + return debugger; } @@ -1869,8 +1870,8 @@ public class JavaEditor extends Editor { * Access the custom text area object. * @return the text area object */ - public JavaTextArea textArea() { - return ta; + public JavaTextArea getJavaTextArea() { + return (JavaTextArea) textarea; } @@ -1991,7 +1992,7 @@ public class JavaEditor extends Editor { * @return the variable inspector object */ public DebugTray variableInspector() { - return vi; + return tray; } @@ -2006,7 +2007,7 @@ public class JavaEditor extends Editor { * Show the variable inspector window. */ public void showVariableInspector() { - vi.setVisible(true); + tray.setVisible(true); } /** @@ -2016,23 +2017,23 @@ public class JavaEditor extends Editor { * invisible. */ public void showVariableInspector(boolean visible) { - vi.setVisible(visible); + tray.setVisible(visible); } /** * Hide the variable inspector window. */ public void hideVariableInspector() { - vi.setVisible(true); + tray.setVisible(true); } /** * Toggle visibility of the variable inspector window. */ public void toggleVariableInspector() { - vi.setFocusableWindowState(false); // to not get focus when set visible - vi.setVisible(!vi.isVisible()); - vi.setFocusableWindowState(true); // allow to get focus again + tray.setFocusableWindowState(false); // to not get focus when set visible + tray.setVisible(!tray.isVisible()); + tray.setFocusableWindowState(true); // allow to get focus again } @@ -2053,7 +2054,7 @@ public class JavaEditor extends Editor { cursorToLineStart(line.lineIdx()); // highlight line currentLine = new LineHighlight(line.lineIdx(), currentLineColor, this); - currentLine.setMarker(ta.currentLineMarker, currentLineMarkerColor); + currentLine.setMarker(getJavaTextArea().currentLineMarker, currentLineMarkerColor); currentLine.setPriority(10); // fixes current line being hidden by the breakpoint when moved down } @@ -2083,7 +2084,7 @@ public class JavaEditor extends Editor { */ public void addBreakpointedLine(LineID lineID) { LineHighlight hl = new LineHighlight(lineID, breakpointColor, this); - hl.setMarker(ta.breakpointMarker, breakpointMarkerColor); + hl.setMarker(getJavaTextArea().breakpointMarker, breakpointMarkerColor); breakpointedLines.add(hl); // repaint current line if it's on this line if (currentLine != null && currentLine.getLineID().equals(lineID)) { @@ -2140,8 +2141,8 @@ public class JavaEditor extends Editor { } breakpointedLines.clear(); // remove all breakpoints // fix highlights not being removed when tab names have changed due to opening a new sketch in same editor - ta.clearLineBgColors(); // force clear all highlights - ta.clearGutterText(); + getJavaTextArea().clearLineBgColors(); // force clear all highlights + getJavaTextArea().clearGutterText(); // repaint current line if (currentLine != null) { @@ -2193,6 +2194,7 @@ public class JavaEditor extends Editor { super.setCode(code); // set the new document in the textarea, etc. need to do this first // set line background colors for tab + final JavaTextArea ta = getJavaTextArea(); if (ta != null) { // can be null when setCode is called the first time (in constructor) // clear all line backgrounds ta.clearLineBgColors(); @@ -2270,8 +2272,8 @@ public class JavaEditor extends Editor { * @param lineIdx the line (0-based) that was double clicked */ public void gutterDblClicked(int lineIdx) { - if (dbg != null) { - dbg.toggleBreakpoint(lineIdx); + if (debugger != null) { + debugger.toggleBreakpoint(lineIdx); } } @@ -2399,7 +2401,7 @@ public class JavaEditor extends Editor { * Handle refactor operation */ private void handleRefactor() { - Base.log("Caret at:" + ta.getLineText(ta.getCaretLine())); + Base.log("Caret at:" + textarea.getLineText(textarea.getCaretLine())); errorCheckerService.getASTGenerator().handleRefactor(); } @@ -2408,7 +2410,7 @@ public class JavaEditor extends Editor { * Handle show usage operation */ private void handleShowUsage() { - Base.log("Caret at:" + ta.getLineText(ta.getCaretLine())); + Base.log("Caret at:" + textarea.getLineText(textarea.getCaretLine())); errorCheckerService.getASTGenerator().handleShowUsage(); } @@ -2460,15 +2462,16 @@ public class JavaEditor extends Editor { UDPTweakClient tweakClient; - public void startInteractiveMode() - { - ta.startInteractiveMode(); + + public void startInteractiveMode() { + getJavaTextArea().startInteractiveMode(); } + //public void stopInteractiveMode(ArrayList handles[]) { public void stopInteractiveMode(List> handles) { tweakClient.shutdown(); - ta.stopInteractiveMode(); + getJavaTextArea().stopInteractiveMode(); // remove space from the code (before and after) removeSpacesFromCode(); @@ -2492,9 +2495,9 @@ public class JavaEditor extends Editor { // NO! don't keep changes loadSavedCode(); // update the painter to draw the saved (old) code - ta.invalidate(); - } - else { + textarea.invalidate(); + + } else { // YES! keep changes // the new values are already present, just make sure the user can save the modified tabs for (int i=0; i> handles, List> colorBoxes) { - // set OSC port of handles -// for (int i=0; i> handles, + List> colorBoxes) { + getJavaTextArea().updateInterface(handles, colorBoxes); } - //private boolean[] getModifiedTabs(ArrayList handles[]) { private boolean[] getModifiedTabs(List> handles) { boolean[] modifiedTabs = new boolean[handles.size()]; diff --git a/java/src/processing/mode/java/debug/LineHighlight.java b/java/src/processing/mode/java/debug/LineHighlight.java index 905887257..5320f1822 100644 --- a/java/src/processing/mode/java/debug/LineHighlight.java +++ b/java/src/processing/mode/java/debug/LineHighlight.java @@ -158,8 +158,8 @@ public class LineHighlight implements LineListener { public void lineChanged(LineID line, int oldLineIdx, int newLineIdx) { // clear old line if (editor.isInCurrentTab(new LineID(line.fileName(), oldLineIdx))) { - editor.textArea().clearLineBgColor(oldLineIdx); - editor.textArea().clearGutterText(oldLineIdx); + editor.getJavaTextArea().clearLineBgColor(oldLineIdx); + editor.getJavaTextArea().clearGutterText(oldLineIdx); } // paint new line @@ -185,12 +185,12 @@ public class LineHighlight implements LineListener { */ public void paint() { if (editor.isInCurrentTab(lineID)) { - editor.textArea().setLineBgColor(lineID.lineIdx(), bgColor); + editor.getJavaTextArea().setLineBgColor(lineID.lineIdx(), bgColor); if (marker != null) { if (markerColor != null) { - editor.textArea().setGutterText(lineID.lineIdx(), marker, markerColor); + editor.getJavaTextArea().setGutterText(lineID.lineIdx(), marker, markerColor); } else { - editor.textArea().setGutterText(lineID.lineIdx(), marker); + editor.getJavaTextArea().setGutterText(lineID.lineIdx(), marker); } } } @@ -201,8 +201,8 @@ public class LineHighlight implements LineListener { */ public void clear() { if (editor.isInCurrentTab(lineID)) { - editor.textArea().clearLineBgColor(lineID.lineIdx()); - editor.textArea().clearGutterText(lineID.lineIdx()); + editor.getJavaTextArea().clearLineBgColor(lineID.lineIdx()); + editor.getJavaTextArea().clearGutterText(lineID.lineIdx()); } } } diff --git a/java/src/processing/mode/java/pdex/ASTGenerator.java b/java/src/processing/mode/java/pdex/ASTGenerator.java index 37b40f442..3bcdf2d8f 100644 --- a/java/src/processing/mode/java/pdex/ASTGenerator.java +++ b/java/src/processing/mode/java/pdex/ASTGenerator.java @@ -111,6 +111,7 @@ import processing.app.Base; import processing.app.Library; import processing.app.SketchCode; import processing.app.Toolkit; +import processing.app.syntax.JEditTextArea; import processing.mode.java.JavaEditor; import processing.mode.java.JavaMode; import processing.mode.java.preproc.PdePreprocessor; @@ -1077,8 +1078,7 @@ public class ASTGenerator { // tableAuto.validate(); // tableAuto.repaint(); // } - errorCheckerService.getEditor().textArea() - .showSuggestion(defListModel, word); + errorCheckerService.getEditor().getJavaTextArea().showSuggestion(defListModel, word); } private DefaultListModel filterPredictions(){ @@ -2030,7 +2030,7 @@ public class ASTGenerator { protected void refactorIt(){ String newName = txtRenameField.getText().trim(); - String selText = lastClickedWord == null ? editor.ta.getSelectedText() + String selText = lastClickedWord == null ? getSelectedText() : lastClickedWord; // Find all occurrences of last clicked word DefaultMutableTreeNode defCU = findAllOccurrences(); //TODO: Repetition here @@ -2098,7 +2098,7 @@ public class ASTGenerator { + off, awrap.getNode() .toString().length()); //int k = JOptionPane.showConfirmDialog(new JFrame(), "Rename?","", JOptionPane.INFORMATION_MESSAGE); - editor.ta.setSelectedText(newName); + editor.getTextArea().setSelectedText(newName); } editor.stopCompoundEdit(); errorCheckerService.resumeThread(); @@ -2123,14 +2123,15 @@ public class ASTGenerator { // + lineStartWSOffset + ",Len: " + length); editor.toFront(); editor.getSketch().setCurrentCode(tab); - lineStartWSOffset += editor.ta.getLineStartOffset(lineNumber); - editor.ta.select(lineStartWSOffset, lineStartWSOffset + length); + lineStartWSOffset += editor.getTextArea().getLineStartOffset(lineNumber); + editor.getTextArea().select(lineStartWSOffset, lineStartWSOffset + length); } public void handleShowUsage(){ if(editor.hasJavaTabs) return; // show usage disabled if java tabs log("Last clicked word:" + lastClickedWord); - if(lastClickedWord == null && editor.ta.getSelectedText() == null){ + if (lastClickedWord == null && + getSelectedText() == null) { editor.statusMessage("Highlight the class/function/variable name first" , JavaEditor.STATUS_INFO); return; @@ -2142,9 +2143,9 @@ public class ASTGenerator { return; } DefaultMutableTreeNode defCU = findAllOccurrences(); - String selText = lastClickedWord == null ? editor.ta.getSelectedText() - : lastClickedWord; - if(defCU == null){ + String selText = lastClickedWord == null ? + getSelectedText() : lastClickedWord; + if (defCU == null) { editor.statusMessage("Can't locate definition of " + selText, JavaEditor.STATUS_ERR); return; @@ -2176,25 +2177,24 @@ public class ASTGenerator { } protected DefaultMutableTreeNode findAllOccurrences(){ + final JEditTextArea ta = editor.getTextArea(); + log("Last clicked word:" + lastClickedWord); - String selText = lastClickedWord == null ? editor.ta.getSelectedText() - : lastClickedWord; - int line = editor.ta.getSelectionStartLine(); + String selText = lastClickedWord == null ? ta.getSelectedText() : + lastClickedWord; + int line = ta.getSelectionStartLine(); log(selText + "<- offsets " + (line) + ", " - + (editor.ta.getSelectionStart() - editor.ta - .getLineStartOffset(line)) + + (ta.getSelectionStart() - ta.getLineStartOffset(line)) + ", " - + (editor.ta.getSelectionStop() - editor.ta - .getLineStartOffset(line))); - int offwhitespace = editor.ta - .getLineStartNonWhiteSpaceOffset(line); + + (ta.getSelectionStop() - ta.getLineStartOffset(line))); + int offwhitespace = ta.getLineStartNonWhiteSpaceOffset(line); ASTNodeWrapper wnode; if (lastClickedWord == null || lastClickedWordNode.getNode() == null) { wnode = getASTNodeAt(line + errorCheckerService.mainClassOffset, selText, - editor.ta.getSelectionStart() - offwhitespace, false); + ta.getSelectionStart() - offwhitespace, false); } else{ wnode = lastClickedWordNode; @@ -2471,26 +2471,26 @@ public class ASTGenerator { return false; } - public void handleRefactor(){ + public void handleRefactor() { if(editor.hasJavaTabs) return; // refactoring disabled if java tabs log("Last clicked word:" + lastClickedWord); - if(lastClickedWord == null && editor.ta.getSelectedText() == null){ + if (lastClickedWord == null && + getSelectedText() == null) { editor.statusMessage("Highlight the class/function/variable name first", JavaEditor.STATUS_INFO); return; } - if(errorCheckerService.hasSyntaxErrors()){ - editor - .statusMessage("Can't perform action until syntax errors are fixed :(", - JavaEditor.STATUS_WARNING); + if (errorCheckerService.hasSyntaxErrors()) { + editor.statusMessage("Can't perform action until syntax errors are fixed :(", + JavaEditor.STATUS_WARNING); return; } DefaultMutableTreeNode defCU = findAllOccurrences(); - String selText = lastClickedWord == null ? editor.ta.getSelectedText() - : lastClickedWord; - if(defCU == null){ + String selText = lastClickedWord == null ? + getSelectedText() : lastClickedWord; + if (defCU == null) { editor.statusMessage(selText + " isn't defined in this sketch, so it can't" + " be renamed", JavaEditor.STATUS_ERR); return; @@ -2505,7 +2505,7 @@ public class ASTGenerator { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - String selText = lastClickedWord == null ? editor.ta.getSelectedText() + String selText = lastClickedWord == null ? getSelectedText() : lastClickedWord; frmOccurenceList.setTitle("All occurrences of " + selText); @@ -3057,22 +3057,19 @@ public class ASTGenerator { return commentList; } - protected boolean caretWithinLineComment(){ - String pdeLine = editor.getLineText(editor.textArea().getCaretLine()).trim(); - int caretPos = editor.textArea().getCaretPosition() - - editor.textArea() - .getLineStartNonWhiteSpaceOffset(editor.textArea().getCaretLine()); + + protected boolean caretWithinLineComment() { + final JEditTextArea ta = editor.getTextArea(); + String pdeLine = editor.getLineText(ta.getCaretLine()).trim(); + int caretPos = ta.getCaretPosition() - ta.getLineStartNonWhiteSpaceOffset(ta.getCaretLine()); int x = pdeLine.indexOf("//"); -// log(x + " , " + caretPos + ", Checking line for comment " + pdeLine); - //lineStartOffset = editor.textArea(). if (x >= 0 && caretPos > x) { -// log("INSIDE a comment"); return true; } -// log("not within comment"); return false; } + /** * A wrapper for java.lang.reflect types. @@ -3480,7 +3477,7 @@ public class ASTGenerator { + ";\n"; int ct = editor.getSketch().getCurrentCodeIndex(); editor.getSketch().setCurrentCode(0); - editor.textArea().getDocument().insertString(0, impString, null); + editor.getTextArea().getDocument().insertString(0, impString, null); editor.getSketch().setCurrentCode(ct); errorCheckerService.runManualErrorCheck(); frmImportSuggest.setVisible(false); @@ -3539,7 +3536,7 @@ public class ASTGenerator { editor.getY() + (editor.getHeight() - frmImportSuggest.getHeight()) / 2); - editor.ta.hideSuggestion(); + hideSuggestion(); classList.setSelectedIndex(0); frmImportSuggest.setVisible(true); } @@ -3766,4 +3763,14 @@ public class ASTGenerator { static private void log(Object object) { Base.log(object == null ? "null" : object.toString()); } + + + private String getSelectedText() { + return editor.getTextArea().getSelectedText(); + } + + + private void hideSuggestion() { + ((JavaTextArea) editor.getTextArea()).hideSuggestion(); + } } diff --git a/java/src/processing/mode/java/pdex/ASTNodeWrapper.java b/java/src/processing/mode/java/pdex/ASTNodeWrapper.java index 90226c110..c5fb22845 100644 --- a/java/src/processing/mode/java/pdex/ASTNodeWrapper.java +++ b/java/src/processing/mode/java/pdex/ASTNodeWrapper.java @@ -583,7 +583,7 @@ public class ASTNodeWrapper { "Please file a bug report."); return false; } - int lso = astGenerator.editor.ta.getLineStartOffset(pdeOffs[1]); + int lso = astGenerator.editor.getTextArea().getLineStartOffset(pdeOffs[1]); highlightStart += lso; astGenerator.editor.setSelection(highlightStart, highlightStart + nodeName.getLength()); diff --git a/java/src/processing/mode/java/pdex/CompletionPanel.java b/java/src/processing/mode/java/pdex/CompletionPanel.java index 92da93943..a5e7cd61e 100644 --- a/java/src/processing/mode/java/pdex/CompletionPanel.java +++ b/java/src/processing/mode/java/pdex/CompletionPanel.java @@ -380,7 +380,7 @@ public class CompletionPanel { // See #2755 SwingWorker worker = new SwingWorker() { protected Object doInBackground() throws Exception { - editor.ta.fetchPhrase(null); + ((JavaTextArea) editor.getTextArea()).fetchPhrase(null); return null; } }; @@ -400,7 +400,7 @@ public class CompletionPanel { private String fetchCurrentSubword() { //log("Entering fetchCurrentSubword"); - JavaTextArea ta = editor.ta; + JEditTextArea ta = editor.getTextArea(); int off = ta.getCaretPosition(); //log2("off " + off); if (off < 0) diff --git a/java/src/processing/mode/java/pdex/ErrorCheckerService.java b/java/src/processing/mode/java/pdex/ErrorCheckerService.java index 26632bb7d..461fc9bb8 100644 --- a/java/src/processing/mode/java/pdex/ErrorCheckerService.java +++ b/java/src/processing/mode/java/pdex/ErrorCheckerService.java @@ -36,6 +36,7 @@ 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; import javax.swing.text.PlainDocument; @@ -1210,7 +1211,7 @@ public class ErrorCheckerService implements Runnable { public String getPDECodeAtLine(int tab, int linenumber){ if(linenumber < 0) return null; editor.getSketch().setCurrentCode(tab); - return editor.ta.getLineText(linenumber); + return editor.getTextArea().getLineText(linenumber); } /** @@ -1526,15 +1527,15 @@ public class ErrorCheckerService implements Runnable { // It's also a bit silly that if parameters to scrollTo() are out of range, // a BadLocation Exception is thrown internally and caught in JTextArea AND // even the stack trace gets printed! W/o letting me catch it later! SMH - if (p.getLineNumber() < Base.countLines(editor.textArea().getDocument() - .getText(0, editor.textArea().getDocument().getLength())) - && p.getLineNumber() >= 0) { + final Document doc = editor.getTextArea().getDocument(); + final int lineCount = Base.countLines(doc.getText(0, doc.getLength())); + if (p.getLineNumber() < lineCount && p.getLineNumber() >= 0) { editor.getTextArea().scrollTo(p.getLineNumber(), 0); } editor.repaint(); + } catch (Exception e) { - Base.loge(e - + " : Error while selecting text in scrollToErrorLine(), for problem: " + p); + Base.loge("Error while selecting text in scrollToErrorLine(), for problem: " + p, e); } // log("---"); } diff --git a/java/src/processing/mode/java/pdex/SketchOutline.java b/java/src/processing/mode/java/pdex/SketchOutline.java index 60dc2c9ed..4f2f1f4f0 100644 --- a/java/src/processing/mode/java/pdex/SketchOutline.java +++ b/java/src/processing/mode/java/pdex/SketchOutline.java @@ -95,7 +95,7 @@ public class SketchOutline { frmOutlineView = new JFrame(); frmOutlineView.setAlwaysOnTop(true); frmOutlineView.setUndecorated(true); - Point tp = errorCheckerService.getEditor().ta.getLocationOnScreen(); + Point tp = errorCheckerService.getEditor().getTextArea().getLocationOnScreen(); int minWidth = (int) (editor.getMinimumSize().width * 0.7f); int maxWidth = (int) (editor.getMinimumSize().width * 0.9f); @@ -122,19 +122,19 @@ public class SketchOutline { jsp.setViewportView(soTree); jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); - jsp.setMinimumSize(new Dimension(minWidth, editor.ta.getHeight() - 10)); - jsp.setMaximumSize(new Dimension(maxWidth, editor.ta.getHeight() - 10)); + jsp.setMinimumSize(new Dimension(minWidth, editor.getTextArea().getHeight() - 10)); + jsp.setMaximumSize(new Dimension(maxWidth, editor.getTextArea().getHeight() - 10)); panelBottom.add(jsp); frmOutlineView.add(panelTop); frmOutlineView.add(panelBottom); frmOutlineView.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frmOutlineView.pack(); - frmOutlineView.setBounds(tp.x + errorCheckerService.getEditor().ta.getWidth() - minWidth, tp.y, minWidth, - Math.min(editor.ta.getHeight(), frmOutlineView.getHeight())); - frmOutlineView.setMinimumSize(new Dimension(minWidth, Math.min(errorCheckerService.getEditor().ta.getHeight(), frmOutlineView.getHeight()))); - frmOutlineView.setLocation(tp.x + errorCheckerService.getEditor().ta.getWidth()/2 - frmOutlineView.getWidth()/2, - frmOutlineView.getY() + (editor.ta.getHeight() - frmOutlineView.getHeight()) / 2); + frmOutlineView.setBounds(tp.x + errorCheckerService.getEditor().getTextArea().getWidth() - minWidth, tp.y, minWidth, + Math.min(editor.getTextArea().getHeight(), frmOutlineView.getHeight())); + frmOutlineView.setMinimumSize(new Dimension(minWidth, Math.min(errorCheckerService.getEditor().getTextArea().getHeight(), frmOutlineView.getHeight()))); + frmOutlineView.setLocation(tp.x + errorCheckerService.getEditor().getTextArea().getWidth()/2 - frmOutlineView.getWidth()/2, + frmOutlineView.getY() + (editor.getTextArea().getHeight() - frmOutlineView.getHeight()) / 2); addListeners(); } diff --git a/java/src/processing/mode/java/pdex/TabOutline.java b/java/src/processing/mode/java/pdex/TabOutline.java index b4e51738f..360e2e3a7 100644 --- a/java/src/processing/mode/java/pdex/TabOutline.java +++ b/java/src/processing/mode/java/pdex/TabOutline.java @@ -83,7 +83,7 @@ public class TabOutline { frmOutlineView = new JFrame(); frmOutlineView.setAlwaysOnTop(true); frmOutlineView.setUndecorated(true); - Point tp = errorCheckerService.getEditor().ta.getLocationOnScreen(); + Point tp = errorCheckerService.getEditor().getTextArea().getLocationOnScreen(); lblCaption = new JLabel("Tabs List (type to filter)"); int minWidth = estimateFrameWidth(); int maxWidth = (int) (editor.getMinimumSize().width * 0.9f); @@ -104,8 +104,8 @@ public class TabOutline { jsp.setViewportView(tabTree); jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); - jsp.setMinimumSize(new Dimension(minWidth, editor.ta.getHeight() - 10)); - jsp.setMaximumSize(new Dimension(maxWidth, editor.ta.getHeight() - 10)); + jsp.setMinimumSize(new Dimension(minWidth, editor.getTextArea().getHeight() - 10)); + jsp.setMaximumSize(new Dimension(maxWidth, editor.getTextArea().getHeight() - 10)); panelBottom.add(jsp); frmOutlineView.add(panelTop); @@ -113,20 +113,18 @@ public class TabOutline { frmOutlineView.add(panelBottom); frmOutlineView.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frmOutlineView.pack(); - frmOutlineView.setBounds(tp.x - + errorCheckerService.getEditor().ta - .getWidth() - minWidth, + frmOutlineView.setBounds(tp.x + errorCheckerService.getEditor().getTextArea().getWidth() - minWidth, tp.y, minWidth, estimateFrameHeight()); frmOutlineView.setMinimumSize(new Dimension(minWidth, Math - .min(errorCheckerService.getEditor().ta.getHeight(), + .min(errorCheckerService.getEditor().getTextArea().getHeight(), frmOutlineView.getHeight()))); frmOutlineView.setLocation(tp.x - + errorCheckerService.getEditor().ta + + errorCheckerService.getEditor().getTextArea() .getWidth()/2 - frmOutlineView.getWidth()/2, frmOutlineView.getY() - + (editor.ta.getHeight() - frmOutlineView + + (editor.getTextArea().getHeight() - frmOutlineView .getHeight()) / 2); DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tabTree.getCellRenderer(); renderer.setLeafIcon(null); @@ -330,11 +328,10 @@ public class TabOutline { } private int estimateFrameWidth() { - FontMetrics fm = editor.ta.getGraphics().getFontMetrics(); + FontMetrics fm = editor.getTextArea().getGraphics().getFontMetrics(); int w = fm.stringWidth(lblCaption.getText()) + 10; for (int i = 0; i < editor.getSketch().getCodeCount(); i++) { - w = Math.max(w, fm.stringWidth(editor.getSketch().getCode(i) - .getPrettyName()) + 10); + w = Math.max(w, fm.stringWidth(editor.getSketch().getCode(i).getPrettyName()) + 10); } return w; } diff --git a/java/src/processing/mode/java/pdex/XQErrorTable.java b/java/src/processing/mode/java/pdex/XQErrorTable.java index dbfdb5ee9..39ff51eae 100644 --- a/java/src/processing/mode/java/pdex/XQErrorTable.java +++ b/java/src/processing/mode/java/pdex/XQErrorTable.java @@ -230,7 +230,7 @@ public class XQErrorTable extends JTable { String impString = "import " + t.substring(x + 1, t.indexOf(')')) + ";\n"; int ct = editor.getSketch().getCurrentCodeIndex(); editor.getSketch().setCurrentCode(0); - editor.textArea().getDocument().insertString(0, impString, null); + editor.getTextArea().getDocument().insertString(0, impString, null); editor.getSketch().setCurrentCode(ct); } catch (BadLocationException ble) { Base.log("Failed to insert import"); diff --git a/todo.txt b/todo.txt index 3edf949f2..ce7bed5a1 100644 --- a/todo.txt +++ b/todo.txt @@ -94,6 +94,12 @@ _ remove public 'ta' object in DebugEditor, also dmode _ crashed on startup w/ JavaScript mode as default b/c PdeKeyListener not found _ because it's in the other ClassLoader, can no longer rely on it +gui +_ need 'actively pressed' version of 'play' and 'stop' +_ could do rollover as well, but do other apps use them? +_ iTunes has no rollover state but has a 'down' state +_ swaps to stop after release + jre download/install _ update build scripts for Windows and Linux to use JRE downloader Ant Task _ https://github.com/processing/processing/issues/3059