From e57ffc624c045675879c64f6f2d1ba844cf8e6e9 Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Sun, 15 Sep 2013 19:45:11 +0200 Subject: [PATCH 01/47] Added Internationalization (i18n) --- app/src/processing/app/Base.java | 4 +- app/src/processing/app/Editor.java | 86 +++++++++---------- app/src/processing/app/EditorHeader.java | 15 ++-- app/src/processing/app/Language.java | 81 +++++++++++++++++ app/src/processing/app/Preferences.java | 44 +++++++++- .../processing/app/language/PDE.properties | 85 ++++++++++++++++++ .../processing/app/language/PDE_de.properties | 80 +++++++++++++++++ .../processing/app/language/PDE_en.properties | 5 ++ app/src/processing/app/tools/Archiver.java | 2 +- .../app/tools/InstallCommander.java | 3 +- app/src/processing/app/tools/SerialFixer.java | 3 +- app/src/processing/mode/java/JavaEditor.java | 32 +++---- app/src/processing/mode/java/JavaToolbar.java | 13 +-- build/shared/lib/language.txt | 1 + 14 files changed, 375 insertions(+), 79 deletions(-) create mode 100644 app/src/processing/app/Language.java create mode 100644 app/src/processing/app/language/PDE.properties create mode 100644 app/src/processing/app/language/PDE_de.properties create mode 100644 app/src/processing/app/language/PDE_en.properties create mode 100644 build/shared/lib/language.txt diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index ed3cdfa84..90a690ce1 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -166,7 +166,9 @@ public class Base { // Make sure a full JDK is installed initRequirements(); - + + Language.init(); + // run static initialization that grabs all the prefs Preferences.init(); diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index f0dfe17b2..5fddfdfb3 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -401,7 +401,7 @@ public abstract class Editor extends JFrame implements RunnerListener { } modeMenu.addSeparator(); - JMenuItem addLib = new JMenuItem("Add Mode..."); + JMenuItem addLib = new JMenuItem(Language.text("toolbar.add_mode")); addLib.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { base.handleOpenModeManager(); @@ -560,9 +560,9 @@ public abstract class Editor extends JFrame implements RunnerListener { protected JMenu buildFileMenu(JMenuItem[] exportItems) { JMenuItem item; - JMenu fileMenu = new JMenu("File"); + JMenu fileMenu = new JMenu(Language.text("menu.file")); - item = Toolkit.newJMenuItem("New", 'N'); + item = Toolkit.newJMenuItem(Language.text("menu.file.new"), 'N'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { base.handleNew(); @@ -570,7 +570,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); fileMenu.add(item); - item = Toolkit.newJMenuItem("Open...", 'O'); + item = Toolkit.newJMenuItem(Language.text("menu.file.open"), 'O'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { base.handleOpenPrompt(); @@ -581,7 +581,7 @@ public abstract class Editor extends JFrame implements RunnerListener { fileMenu.add(base.getSketchbookMenu()); // fileMenu.add(mode.getExamplesMenu()); - item = Toolkit.newJMenuItemShift("Examples...", 'O'); + item = Toolkit.newJMenuItemShift(Language.text("menu.file.examples"), 'O'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mode.showExamplesFrame(); @@ -589,7 +589,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); fileMenu.add(item); - item = Toolkit.newJMenuItem("Close", 'W'); + item = Toolkit.newJMenuItem(Language.text("menu.file.close"), 'W'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { base.handleClose(Editor.this, false); @@ -597,7 +597,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); fileMenu.add(item); - item = Toolkit.newJMenuItem("Save", 'S'); + item = Toolkit.newJMenuItem(Language.text("menu.file.save"), 'S'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleSave(false); @@ -606,7 +606,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // saveMenuItem = item; fileMenu.add(item); - item = Toolkit.newJMenuItemShift("Save As...", 'S'); + item = Toolkit.newJMenuItemShift(Language.text("menu.file.save_as"), 'S'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleSaveAs(); @@ -622,7 +622,7 @@ public abstract class Editor extends JFrame implements RunnerListener { } fileMenu.addSeparator(); - item = Toolkit.newJMenuItemShift("Page Setup", 'P'); + item = Toolkit.newJMenuItemShift(Language.text("menu.file.page_setup"), 'P'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handlePageSetup(); @@ -630,7 +630,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); fileMenu.add(item); - item = Toolkit.newJMenuItem("Print", 'P'); + item = Toolkit.newJMenuItem(Language.text("menu.file.print"), 'P'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handlePrint(); @@ -643,7 +643,7 @@ public abstract class Editor extends JFrame implements RunnerListener { if (!Base.isMacOS()) { fileMenu.addSeparator(); - item = Toolkit.newJMenuItem("Preferences", ','); + item = Toolkit.newJMenuItem(Language.text("menu.file.preferences"), ','); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { base.handlePrefs(); @@ -653,7 +653,7 @@ public abstract class Editor extends JFrame implements RunnerListener { fileMenu.addSeparator(); - item = Toolkit.newJMenuItem("Quit", 'Q'); + item = Toolkit.newJMenuItem(Language.text("menu.file.quit"), 'Q'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { base.handleQuit(); @@ -676,19 +676,19 @@ public abstract class Editor extends JFrame implements RunnerListener { protected JMenu buildEditMenu() { - JMenu menu = new JMenu("Edit"); + JMenu menu = new JMenu(Language.text("menu.edit")); JMenuItem item; - undoItem = Toolkit.newJMenuItem("Undo", 'Z'); + undoItem = Toolkit.newJMenuItem(Language.text("menu.edit.undo"), 'Z'); undoItem.addActionListener(undoAction = new UndoAction()); menu.add(undoItem); // Gotta follow them interface guidelines // http://code.google.com/p/processing/issues/detail?id=363 if (Base.isWindows()) { - redoItem = Toolkit.newJMenuItem("Redo", 'Y'); + redoItem = Toolkit.newJMenuItem(Language.text("menu.edit.redo"), 'Y'); } else { // Linux and OS X - redoItem = Toolkit.newJMenuItemShift("Redo", 'Z'); + redoItem = Toolkit.newJMenuItemShift(Language.text("menu.edit.redo"), 'Z'); } redoItem.addActionListener(redoAction = new RedoAction()); menu.add(redoItem); @@ -697,7 +697,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // TODO "cut" and "copy" should really only be enabled // if some text is currently selected - item = Toolkit.newJMenuItem("Cut", 'X'); + item = Toolkit.newJMenuItem(Language.text("menu.edit.cut"), 'X'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleCut(); @@ -705,7 +705,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); menu.add(item); - item = Toolkit.newJMenuItem("Copy", 'C'); + item = Toolkit.newJMenuItem(Language.text("menu.edit.copy"), 'C'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { textarea.copy(); @@ -713,7 +713,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); menu.add(item); - item = Toolkit.newJMenuItemShift("Copy as HTML", 'C'); + item = Toolkit.newJMenuItemShift(Language.text("menu.edit.copy_as_html"), 'C'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleCopyAsHTML(); @@ -721,7 +721,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); menu.add(item); - item = Toolkit.newJMenuItem("Paste", 'V'); + item = Toolkit.newJMenuItem(Language.text("menu.edit.paste"), 'V'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { textarea.paste(); @@ -730,7 +730,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); menu.add(item); - item = Toolkit.newJMenuItem("Select All", 'A'); + item = Toolkit.newJMenuItem(Language.text("menu.edit.select_all"), 'A'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { textarea.selectAll(); @@ -770,7 +770,7 @@ public abstract class Editor extends JFrame implements RunnerListener { menu.addSeparator(); - item = Toolkit.newJMenuItem("Auto Format", 'T'); + item = Toolkit.newJMenuItem(Language.text("menu.edit.auto_format"), 'T'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleAutoFormat(); @@ -778,7 +778,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); menu.add(item); - item = Toolkit.newJMenuItem("Comment/Uncomment", '/'); + item = Toolkit.newJMenuItem(Language.text("menu.edit.comment_uncomment"), '/'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleCommentUncomment(); @@ -786,7 +786,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); menu.add(item); - item = Toolkit.newJMenuItem("Increase Indent", ']'); + item = Toolkit.newJMenuItem(Language.text("menu.edit.increase_indent"), ']'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleIndentOutdent(true); @@ -794,7 +794,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); menu.add(item); - item = Toolkit.newJMenuItem("Decrease Indent", '['); + item = Toolkit.newJMenuItem(Language.text("menu.edit.decrease_indent"), '['); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleIndentOutdent(false); @@ -804,7 +804,7 @@ public abstract class Editor extends JFrame implements RunnerListener { menu.addSeparator(); - item = Toolkit.newJMenuItem("Find...", 'F'); + item = Toolkit.newJMenuItem(Language.text("menu.edit.find"), 'F'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (find == null) { @@ -818,7 +818,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // TODO find next should only be enabled after a // search has actually taken place - item = Toolkit.newJMenuItem("Find Next", 'G'); + item = Toolkit.newJMenuItem(Language.text("menu.edit.find_next"), 'G'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (find != null) { @@ -828,7 +828,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); menu.add(item); - item = Toolkit.newJMenuItemShift("Find Previous", 'G'); + item = Toolkit.newJMenuItemShift(Language.text("menu.edit.find_previous"), 'G'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (find != null) { @@ -839,7 +839,7 @@ public abstract class Editor extends JFrame implements RunnerListener { menu.add(item); // For Arduino and Mac, this should be command-E, but that currently conflicts with Export Applet - item = Toolkit.newJMenuItemAlt("Use Selection for Find", 'F'); + item = Toolkit.newJMenuItemAlt(Language.text("menu.edit.use_selection_for_find"), 'F'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (find == null) { @@ -859,7 +859,7 @@ public abstract class Editor extends JFrame implements RunnerListener { protected JMenu buildSketchMenu(JMenuItem[] runItems) { JMenuItem item; - sketchMenu = new JMenu("Sketch"); + sketchMenu = new JMenu(Language.text("menu.sketch")); for (JMenuItem mi : runItems) { sketchMenu.add(mi); @@ -869,7 +869,7 @@ public abstract class Editor extends JFrame implements RunnerListener { sketchMenu.add(mode.getImportMenu()); - item = Toolkit.newJMenuItem("Show Sketch Folder", 'K'); + item = Toolkit.newJMenuItem(Language.text("menu.sketch.show_sketch_folder"), 'K'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Base.openFolder(sketch.getFolder()); @@ -878,7 +878,7 @@ public abstract class Editor extends JFrame implements RunnerListener { sketchMenu.add(item); item.setEnabled(Base.openFolderAvailable()); - item = new JMenuItem("Add File..."); + item = new JMenuItem(Language.text("menu.sketch.add_file")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { sketch.handleAddFile(); @@ -909,7 +909,7 @@ public abstract class Editor extends JFrame implements RunnerListener { public void rebuildToolMenu() { if (toolsMenu == null) { - toolsMenu = new JMenu("Tools"); + toolsMenu = new JMenu(Language.text("menu.tools")); } else { toolsMenu.removeAll(); } @@ -923,7 +923,7 @@ public abstract class Editor extends JFrame implements RunnerListener { addTools(toolsMenu, contribTools); toolsMenu.addSeparator(); - JMenuItem item = new JMenuItem("Add Tool..."); + JMenuItem item = new JMenuItem(Language.text("menu.tools.add_tool")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { base.handleOpenToolManager(); @@ -2520,7 +2520,7 @@ public abstract class Editor extends JFrame implements RunnerListener { public TextAreaPopup() { JMenuItem item; - cutItem = new JMenuItem("Cut"); + cutItem = new JMenuItem(Language.text("menu.edit.cut")); cutItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleCut(); @@ -2528,7 +2528,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); this.add(cutItem); - copyItem = new JMenuItem("Copy"); + copyItem = new JMenuItem(Language.text("menu.edit.copy")); copyItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleCopy(); @@ -2536,7 +2536,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); this.add(copyItem); - discourseItem = new JMenuItem("Copy as HTML"); + discourseItem = new JMenuItem(Language.text("menu.edit.copy_as_html")); discourseItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleCopyAsHTML(); @@ -2544,7 +2544,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); this.add(discourseItem); - item = new JMenuItem("Paste"); + item = new JMenuItem(Language.text("menu.edit.paste")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handlePaste(); @@ -2552,7 +2552,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); this.add(item); - item = new JMenuItem("Select All"); + item = new JMenuItem(Language.text("menu.edit.select_all")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleSelectAll(); @@ -2562,7 +2562,7 @@ public abstract class Editor extends JFrame implements RunnerListener { this.addSeparator(); - item = new JMenuItem("Comment/Uncomment"); + item = new JMenuItem(Language.text("menu.edit.comment_uncomment")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleCommentUncomment(); @@ -2570,7 +2570,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); this.add(item); - item = new JMenuItem("Increase Indent"); + item = new JMenuItem(Language.text("menu.edit.increase_indent")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleIndentOutdent(true); @@ -2578,7 +2578,7 @@ public abstract class Editor extends JFrame implements RunnerListener { }); this.add(item); - item = new JMenuItem("Decrease Indent"); + item = new JMenuItem(Language.text("menu.edit.decrease_indent")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleIndentOutdent(false); @@ -2588,7 +2588,7 @@ public abstract class Editor extends JFrame implements RunnerListener { this.addSeparator(); - referenceItem = new JMenuItem("Find in Reference"); + referenceItem = new JMenuItem(Language.text("editor.popup.find_in_reference")); referenceItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleFindReference(); diff --git a/app/src/processing/app/EditorHeader.java b/app/src/processing/app/EditorHeader.java index 334d0e91d..671095f14 100644 --- a/app/src/processing/app/EditorHeader.java +++ b/app/src/processing/app/EditorHeader.java @@ -508,7 +508,7 @@ public class EditorHeader extends JComponent { */ //item = new JMenuItem("New Tab"); - item = Toolkit.newJMenuItemShift("New Tab", 'N'); + item = Toolkit.newJMenuItemShift(Language.text("editor.header.new_tab"), 'N'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { editor.getSketch().handleNewCode(); @@ -516,7 +516,7 @@ public class EditorHeader extends JComponent { }); menu.add(item); - item = new JMenuItem("Rename"); + item = new JMenuItem(Language.text("editor.header.rename")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { editor.getSketch().handleRenameCode(); @@ -530,16 +530,15 @@ public class EditorHeader extends JComponent { }); menu.add(item); - item = new JMenuItem("Delete"); + item = new JMenuItem(Language.text("editor.header.delete")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Sketch sketch = editor.getSketch(); if (!Base.isMacOS() && // ok on OS X editor.base.editors.size() == 1 && // mmm! accessor sketch.getCurrentCodeIndex() == 0) { - Base.showWarning("Yeah, no." , - "You can't delete the last tab " + - "of the last open sketch.", null); + Base.showWarning(Language.text("editor.header.delete.warning.title"), + Language.text("editor.header.delete.warning.text"), null); } else { editor.getSketch().handleDeleteCode(); } @@ -551,7 +550,7 @@ public class EditorHeader extends JComponent { // KeyEvent.VK_LEFT and VK_RIGHT will make Windows beep - item = new JMenuItem("Previous Tab"); + item = new JMenuItem(Language.text("editor.header.previous_tab")); KeyStroke ctrlAltLeft = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, Toolkit.SHORTCUT_ALT_KEY_MASK); item.setAccelerator(ctrlAltLeft); @@ -565,7 +564,7 @@ public class EditorHeader extends JComponent { */ menu.add(item); - item = new JMenuItem("Next Tab"); + item = new JMenuItem(Language.text("editor.header.next_tab")); KeyStroke ctrlAltRight = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, Toolkit.SHORTCUT_ALT_KEY_MASK); item.setAccelerator(ctrlAltRight); diff --git a/app/src/processing/app/Language.java b/app/src/processing/app/Language.java new file mode 100644 index 000000000..1772e5bf4 --- /dev/null +++ b/app/src/processing/app/Language.java @@ -0,0 +1,81 @@ +package processing.app; + +import java.io.File; +import java.util.HashMap; +import java.util.Locale; +import java.util.ResourceBundle; +import processing.core.PApplet; + + +/** + * Internationalization (i18n) + * @author Darius Morawiec + */ +public class Language { + + private static Language instance = null; + private String language; + private HashMap languages; + private ResourceBundle bundle; + + private Language() { + + this.language = Locale.getDefault().getLanguage(); + this.languages = new HashMap(); + this.languages.put("en", "English"); + this.languages.put("de", "Deutsch"); + + if(!this.languages.containsKey(this.language)){ + this.language = "en"; + } + + try { + File file = Base.getContentFile("lib/language.txt"); + if (file.exists()) { + String language = PApplet.loadStrings(file)[0]; + language = language.trim().toLowerCase(); + if(!language.equals("")) { + this.language = language; + } + } + Base.saveFile(this.language, file); + } catch (Exception e) { + e.printStackTrace(); + } + + this.bundle = ResourceBundle.getBundle("processing.app.language.PDE", new Locale(this.language)); + } + + /** + * Singleton + * @return + */ + public static synchronized Language init() { + if(instance == null) { + instance = new Language(); + } + return instance; + } + + public static String text(String text) { + return init().bundle.getString(text); + } + + public static HashMap getLanguages() { + return init().languages; + } + + public static String getLanguage() { + return init().language; + } + + public static void setLanguage(String language) { + try { + File file = Base.getContentFile("lib/language.txt"); + Base.saveFile(language, file); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} \ No newline at end of file diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java index 51a4d7127..5563868de 100644 --- a/app/src/processing/app/Preferences.java +++ b/app/src/processing/app/Preferences.java @@ -119,6 +119,7 @@ public class Preferences { JRadioButton bitsThirtyTwoButton; JRadioButton bitsSixtyFourButton; JComboBox displaySelectionBox; + JComboBox languageSelectionBox; int displayCount; @@ -293,6 +294,32 @@ public class Preferences { right = Math.max(right, h + d2.width + GUI_BIG); top += vmax + GUI_BETWEEN; + + // Language: [ English ] (requires restart of Processing) + + Container languageBox = Box.createHorizontalBox(); + JLabel languageLabel = new JLabel("Language "); + languageBox.add(languageLabel); + languageSelectionBox = new JComboBox(); + + HashMap languages = Language.getLanguages(); + String[] languageSelection = new String[languages.size()]; + languageSelection[0] = languages.get(Language.getLanguage()); + int i = 1; + for (Map.Entry lang : languages.entrySet()) { + if(!lang.getKey().equals(Language.getLanguage())){ + languageSelection[i++] = lang.getValue(); + } + } + languageSelectionBox.setModel(new DefaultComboBoxModel(languageSelection)); + languageBox.add(languageSelectionBox); + label = new JLabel(" (requires restart of Processing)"); + languageBox.add(label); + pain.add(languageBox); + d = languageBox.getPreferredSize(); + languageBox.setBounds(left, top, d.width, d.height); + top += d.height + GUI_BETWEEN; + // Editor font size [ ] @@ -438,7 +465,7 @@ public class Preferences { d = displayBox.getPreferredSize(); displayBox.setBounds(left, top, d.width, d.height); top += d.height + GUI_BETWEEN; - + // [ ] Automatically associate .pde files with Processing @@ -640,7 +667,20 @@ public class Preferences { // setBoolean("editor.external", externalEditorBox.isSelected()); setBoolean("update.check", checkUpdatesBox.isSelected()); //$NON-NLS-1$ - + + // Save Language + HashMap languages = Language.getLanguages(); + String language = ""; + for (Map.Entry lang : languages.entrySet()) { + if( lang.getValue().equals( String.valueOf(languageSelectionBox.getSelectedItem()) ) ){ + language = lang.getKey().trim().toLowerCase(); + break; + } + } + if(!language.equals(Language.getLanguage()) && !language.equals("")){ + Language.setLanguage(language); + } + int oldDisplayIndex = getInteger("run.display"); //$NON-NLS-1$ int displayIndex = 0; for (int d = 0; d < displaySelectionBox.getItemCount(); d++) { diff --git a/app/src/processing/app/language/PDE.properties b/app/src/processing/app/language/PDE.properties new file mode 100644 index 000000000..e1706417d --- /dev/null +++ b/app/src/processing/app/language/PDE.properties @@ -0,0 +1,85 @@ + + +# --------------------------------------- +# BASIC +# --------------------------------------- + + +menu.file = File +menu.file.new = New +menu.file.open = Open... +menu.file.sketchbook = Sketchbook +menu.file.recent = Recent +menu.file.examples = Examples... +menu.file.close = Close +menu.file.save = Save +menu.file.save_as = Save As... +menu.file.export_application = Export Application +menu.file.page_setup = Page Setup +menu.file.print = Print +menu.file.preferences = Preferences +menu.file.quit = Quit + +menu.edit = Edit +menu.edit.undo = Undo +menu.edit.redo = Redo +menu.edit.cut = Cut +menu.edit.copy = Copy +menu.edit.copy_as_html = Copy as HTML +menu.edit.paste = Paste +menu.edit.select_all = Select All +menu.edit.auto_format = Auto Format +menu.edit.comment_uncomment = Comment/Uncomment +menu.edit.increase_indent = Increase Indent +menu.edit.decrease_indent = Decrease Indent +menu.edit.find = Find... +menu.edit.find_next = Find Next +menu.edit.find_previous = Find Previous +menu.edit.use_selection_for_find = Use Selection for Find + +menu.sketch = Sketch +menu.sketch.show_sketch_folder = Show Sketch Folder +menu.sketch.add_file = Add File... + +menu.tools = Tools +menu.tools.archive_sketch = Archive Sketch +menu.tools.fix_the_serial_lbrary = Fix the Serial Library +menu.tools.install_processing_java = Install "processing-java" +menu.tools.add_tool = Add Tool... + +menu.help = Help +menu.help.about = About Processing +menu.help.environment = Environment +menu.help.reference = Reference +menu.help.find_in_reference = Find in Reference +menu.help.online = Online +menu.help.getting_started = Getting Started +menu.help.getting_started.url = http://processing.org/learning/gettingstarted/ +menu.help.troubleshooting = Troubleshooting +menu.help.troubleshooting.url = http://wiki.processing.org/w/Troubleshooting +menu.help.faq = Frequently Asked Questions +menu.help.faq.url = http://wiki.processing.org/w/FAQ +menu.help.foundation = The Processing Foundation +menu.help.foundation.url = http://processing.org/foundation/ +menu.help.visit = Visit Processing.org +menu.help.visit.url = http://processing.org/ + +toolbar.run = Run +toolbar.present = Present +toolbar.stop = Stop +toolbar.new = New +toolbar.open = Open +toolbar.save = Save +toolbar.export_application = Export Application +toolbar.add_mode = Add mode... + +editor.header.new_tab = New Tab +editor.header.rename = Rename +editor.header.delete = Delete +editor.header.previous_tab = Previous Tab +editor.header.next_tab = Next Tab + +editor.header.delete.warning.title = Yeah, no. +editor.header.delete.warning.text = You can't delete the last tab of the last open sketch. + +editor.popup.find_in_reference = Find in Reference \ No newline at end of file diff --git a/app/src/processing/app/language/PDE_de.properties b/app/src/processing/app/language/PDE_de.properties new file mode 100644 index 000000000..a67f224bb --- /dev/null +++ b/app/src/processing/app/language/PDE_de.properties @@ -0,0 +1,80 @@ + + +# --------------------------------------- +# DEUTSCH (de) +# --------------------------------------- + + +menu.file = Datei +menu.file.new = Neu... +menu.file.open = Öffnen... +menu.file.sketchbook = Sketchbook +menu.file.recent = Letzte Dateien öffnen +menu.file.examples = Beispiele... +menu.file.close = Schließen +menu.file.save = Speichern +menu.file.save_as = Speichern unter... +menu.file.export_application = Exportieren... +menu.file.page_setup = Eine Kopie drucken +menu.file.print = Drucken... +menu.file.preferences = Einstellungen +menu.file.quit = Beenden + +menu.edit = Bearbeiten +menu.edit.undo = Rückgängig +menu.edit.redo = Wiederholen +menu.edit.cut = Ausschneiden +menu.edit.copy = Kopieren +menu.edit.copy_as_html = Kopieren als HTML +menu.edit.paste = Einfügen +menu.edit.select_all = Alle auswählen +menu.edit.auto_format = Autoformatierung +menu.edit.comment_uncomment = Ein- und Auskommentieren +menu.edit.increase_indent = Einrücken +menu.edit.decrease_indent = Ausrücken +menu.edit.find = Suchen... +menu.edit.find_next = Weiter suchen... +menu.edit.find_previous = Vorher suchen... +menu.edit.use_selection_for_find = Suche in Auswahl + +menu.sketch = Sketch +menu.sketch.show_sketch_folder = Zeige Sketch Verzeichnis +menu.sketch.add_file = Datei hinzufügen... + +menu.tools = Tools +menu.tools.archive_sketch = Sketch archivieren... +menu.tools.fix_the_serial_lbrary = "Serial Library" beheben... +menu.tools.install_processing_java = "processing-java" installieren... +menu.tools.add_tool = Tool hinzufügen... + +menu.help = Hilfe +menu.help.about = Über Processing +menu.help.environment = Entwicklungsumgebung +menu.help.reference = Referenz +menu.help.find_in_reference = Suche in Referenz +menu.help.online = Online +menu.help.getting_started = Erste Schritte +menu.help.troubleshooting = Fehlerbehandlung +menu.help.faq = Häufig gestellte Fragen +menu.help.foundation = "The Processing Foundation" +menu.help.visit = Processing.org besuchen + +toolbar.run = Starten +toolbar.present = Starten in Vollbild +toolbar.stop = Stoppen +toolbar.new = Neu +toolbar.open = Öffnen +toolbar.save = Speichern +toolbar.export_application = Exportieren +toolbar.add_mode = Modus hinzufügen... + +editor.header.new_tab = Neuer Tab +editor.header.rename = Unbenennen +editor.header.delete = Löschen +editor.header.previous_tab = Nächster Tab +editor.header.next_tab = Vorheriger Tab + +editor.header.delete.warning.title = Yeah, nein. +editor.header.delete.warning.text = Du kannst nicht den letzten Tab des letzten Sketches löschen. + +editor.popup.find_in_reference = Suche in Referenz \ No newline at end of file diff --git a/app/src/processing/app/language/PDE_en.properties b/app/src/processing/app/language/PDE_en.properties new file mode 100644 index 000000000..ca9c83242 --- /dev/null +++ b/app/src/processing/app/language/PDE_en.properties @@ -0,0 +1,5 @@ + + +# --------------------------------------- +# ENGLISH (en) +# --------------------------------------- \ No newline at end of file diff --git a/app/src/processing/app/tools/Archiver.java b/app/src/processing/app/tools/Archiver.java index ab2a3e424..1c81e66ce 100644 --- a/app/src/processing/app/tools/Archiver.java +++ b/app/src/processing/app/tools/Archiver.java @@ -44,7 +44,7 @@ public class Archiver implements Tool { public String getMenuTitle() { - return "Archive Sketch"; + return Language.text("menu.tools.archive_sketch"); } diff --git a/app/src/processing/app/tools/InstallCommander.java b/app/src/processing/app/tools/InstallCommander.java index 461a80dba..d3eb69e4e 100644 --- a/app/src/processing/app/tools/InstallCommander.java +++ b/app/src/processing/app/tools/InstallCommander.java @@ -29,6 +29,7 @@ import javax.swing.JOptionPane; import processing.app.Base; import processing.app.Editor; +import processing.app.Language; import processing.core.PApplet; @@ -37,7 +38,7 @@ public class InstallCommander implements Tool { public String getMenuTitle() { - return "Install “processing-javaâ€"; + return Language.text("menu.tools.install_processing_java"); } diff --git a/app/src/processing/app/tools/SerialFixer.java b/app/src/processing/app/tools/SerialFixer.java index 7065b53bc..6e5e1612d 100644 --- a/app/src/processing/app/tools/SerialFixer.java +++ b/app/src/processing/app/tools/SerialFixer.java @@ -27,6 +27,7 @@ import javax.swing.JOptionPane; import processing.app.Base; import processing.app.Editor; +import processing.app.Language; import processing.core.PApplet; @@ -35,7 +36,7 @@ public class SerialFixer implements Tool { public String getMenuTitle() { - return "Fix the Serial Library"; + return Language.text("menu.tools.fix_the_serial_lbrary"); } diff --git a/app/src/processing/mode/java/JavaEditor.java b/app/src/processing/mode/java/JavaEditor.java index 38ef50e99..d51bbf040 100644 --- a/app/src/processing/mode/java/JavaEditor.java +++ b/app/src/processing/mode/java/JavaEditor.java @@ -96,12 +96,12 @@ public class JavaEditor extends Editor { public JMenu buildHelpMenu() { // To deal with a Mac OS X 10.5 bug, add an extra space after the name // so that the OS doesn't try to insert its slow help menu. - JMenu menu = new JMenu("Help "); + JMenu menu = new JMenu(Language.text("menu.help")+" "); JMenuItem item; // macosx already has its own about menu if (!Base.isMacOS()) { - item = new JMenuItem("About Processing"); + item = new JMenuItem(Language.text("menu.help.about")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new About(JavaEditor.this); @@ -110,7 +110,7 @@ public class JavaEditor extends Editor { menu.add(item); } - item = new JMenuItem("Environment"); + item = new JMenuItem(Language.text("menu.help.environment")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showReference("environment" + File.separator + "index.html"); @@ -118,7 +118,7 @@ public class JavaEditor extends Editor { }); menu.add(item); - item = new JMenuItem("Reference"); + item = new JMenuItem(Language.text("menu.help.reference")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showReference("index.html"); @@ -126,7 +126,7 @@ public class JavaEditor extends Editor { }); menu.add(item); - item = Toolkit.newJMenuItemShift("Find in Reference", 'F'); + item = Toolkit.newJMenuItemShift(Language.text("menu.help.find_in_reference"), 'F'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (textarea.isSelectionActive()) { @@ -137,46 +137,46 @@ public class JavaEditor extends Editor { menu.add(item); menu.addSeparator(); - item = new JMenuItem("Online"); + item = new JMenuItem(Language.text("menu.help.online")); item.setEnabled(false); menu.add(item); - item = new JMenuItem("Getting Started"); + item = new JMenuItem(Language.text("menu.help.getting_started")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - Base.openURL("http://processing.org/learning/gettingstarted/"); + Base.openURL(Language.text("menu.help.getting_started.url")); } }); menu.add(item); - item = new JMenuItem("Troubleshooting"); + item = new JMenuItem(Language.text("menu.help.troubleshooting")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - Base.openURL("http://wiki.processing.org/w/Troubleshooting"); + Base.openURL(Language.text("menu.help.troubleshooting.url")); } }); menu.add(item); - item = new JMenuItem("Frequently Asked Questions"); + item = new JMenuItem(Language.text("menu.help.faq")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - Base.openURL("http://wiki.processing.org/w/FAQ"); + Base.openURL(Language.text("menu.help.faq.url")); } }); menu.add(item); - item = new JMenuItem("The Processing Foundation"); + item = new JMenuItem(Language.text("menu.help.foundation")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - Base.openURL("http://processing.org/foundation/"); + Base.openURL(Language.text("menu.help.foundation.url")); } }); menu.add(item); - item = new JMenuItem("Visit Processing.org"); + item = new JMenuItem(Language.text("menu.help.visit")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - Base.openURL("http://processing.org/"); + Base.openURL(Language.text("menu.help.visit.url")); } }); menu.add(item); diff --git a/app/src/processing/mode/java/JavaToolbar.java b/app/src/processing/mode/java/JavaToolbar.java index 182e95c2b..7cf02a68b 100644 --- a/app/src/processing/mode/java/JavaToolbar.java +++ b/app/src/processing/mode/java/JavaToolbar.java @@ -27,6 +27,7 @@ import javax.swing.JPopupMenu; import processing.app.Base; import processing.app.Editor; import processing.app.EditorToolbar; +import processing.app.Language; public class JavaToolbar extends EditorToolbar { @@ -67,13 +68,13 @@ public class JavaToolbar extends EditorToolbar { static public String getTitle(int index, boolean shift) { switch (index) { - case RUN: return !shift ? "Run" : "Present"; - case STOP: return "Stop"; - case NEW: return "New"; - case OPEN: return "Open"; - case SAVE: return "Save"; + case RUN: return !shift ? Language.text("toolbar.run") : Language.text("toolbar.present"); + case STOP: return Language.text("toolbar.stop"); + case NEW: return Language.text("toolbar.new"); + case OPEN: return Language.text("toolbar.open"); + case SAVE: return Language.text("toolbar.save"); // case EXPORT: return !shift ? "Export Application" : "Export Applet"; - case EXPORT: return "Export Application"; + case EXPORT: return Language.text("toolbar.export_application"); } return null; } diff --git a/build/shared/lib/language.txt b/build/shared/lib/language.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/build/shared/lib/language.txt @@ -0,0 +1 @@ + From b6abae0a296849ae4f33ad7578d9a0e24457bc6d Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Mon, 16 Sep 2013 00:01:01 +0200 Subject: [PATCH 02/47] Added prompt words --- app/src/processing/app/Preferences.java | 10 +++++----- app/src/processing/app/language/PDE.properties | 10 +++++++++- app/src/processing/app/language/PDE_de.properties | 10 +++++++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java index 5563868de..5a9632157 100644 --- a/app/src/processing/app/Preferences.java +++ b/app/src/processing/app/Preferences.java @@ -68,11 +68,11 @@ public class Preferences { // prompt text stuff - static final String PROMPT_YES = "Yes"; - static final String PROMPT_NO = "No"; - static final String PROMPT_CANCEL = "Cancel"; - static final String PROMPT_OK = "OK"; - static final String PROMPT_BROWSE = "Browse"; + static final String PROMPT_YES = Language.text("prompt.yes"); + static final String PROMPT_NO = Language.text("prompt.no"); + static final String PROMPT_CANCEL = Language.text("prompt.cancel"); + static final String PROMPT_OK = Language.text("prompt.ok"); + static final String PROMPT_BROWSE = Language.text("prompt.browse"); /** * Standardized width for buttons. Mac OS X 10.3 wants 70 as its default, diff --git a/app/src/processing/app/language/PDE.properties b/app/src/processing/app/language/PDE.properties index e1706417d..f51e4e2ea 100644 --- a/app/src/processing/app/language/PDE.properties +++ b/app/src/processing/app/language/PDE.properties @@ -82,4 +82,12 @@ editor.header.next_tab = Next Tab editor.header.delete.warning.title = Yeah, no. editor.header.delete.warning.text = You can't delete the last tab of the last open sketch. -editor.popup.find_in_reference = Find in Reference \ No newline at end of file +editor.popup.find_in_reference = Find in Reference + +preferences = Preferences + +prompt.yes = Yes +prompt.no = No +prompt.cancel = Cancel +prompt.ok = OK +prompt.browse = Browse \ No newline at end of file diff --git a/app/src/processing/app/language/PDE_de.properties b/app/src/processing/app/language/PDE_de.properties index a67f224bb..72744e760 100644 --- a/app/src/processing/app/language/PDE_de.properties +++ b/app/src/processing/app/language/PDE_de.properties @@ -77,4 +77,12 @@ editor.header.next_tab = Vorheriger Tab editor.header.delete.warning.title = Yeah, nein. editor.header.delete.warning.text = Du kannst nicht den letzten Tab des letzten Sketches löschen. -editor.popup.find_in_reference = Suche in Referenz \ No newline at end of file +editor.popup.find_in_reference = Suche in Referenz + +preferences = Einstellungen + +prompt.yes = Ja +prompt.no = Nein +prompt.cancel = Abbrechen +prompt.ok = Ok +prompt.browse = Durchsuchen \ No newline at end of file From a1a4df8cdcf25d426b271926802883fcdcbcf9a6 Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Mon, 16 Sep 2013 10:22:31 +0200 Subject: [PATCH 03/47] Add comments --- app/src/processing/app/Language.java | 32 ++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/app/src/processing/app/Language.java b/app/src/processing/app/Language.java index 1772e5bf4..449e0e62e 100644 --- a/app/src/processing/app/Language.java +++ b/app/src/processing/app/Language.java @@ -20,15 +20,20 @@ public class Language { private Language() { + // Get system language this.language = Locale.getDefault().getLanguage(); + + // Set available languages this.languages = new HashMap(); this.languages.put("en", "English"); this.languages.put("de", "Deutsch"); + // Set default language if(!this.languages.containsKey(this.language)){ this.language = "en"; } - + + // Get saved language try { File file = Base.getContentFile("lib/language.txt"); if (file.exists()) { @@ -36,18 +41,20 @@ public class Language { language = language.trim().toLowerCase(); if(!language.equals("")) { this.language = language; + } else { + Base.saveFile(this.language, file); } } - Base.saveFile(this.language, file); } catch (Exception e) { e.printStackTrace(); } + // Get bundle with translations (processing.app.language.PDE) this.bundle = ResourceBundle.getBundle("processing.app.language.PDE", new Locale(this.language)); } /** - * Singleton + * Singleton constructor * @return */ public static synchronized Language init() { @@ -57,18 +64,35 @@ public class Language { return instance; } + /** + * Get translation from bundles. + * @param text + * @return + */ public static String text(String text) { return init().bundle.getString(text); } + /** + * Get all available languages + * @return + */ public static HashMap getLanguages() { return init().languages; } + /** + * Get current language + * @return + */ public static String getLanguage() { return init().language; } - + + /** + * Set new language + * @param language + */ public static void setLanguage(String language) { try { File file = Base.getContentFile("lib/language.txt"); From 36ff023a1da8a0784f52aa6cf448e91ca21e4fec Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Mon, 16 Sep 2013 11:04:40 +0200 Subject: [PATCH 04/47] Added library words --- app/src/processing/app/Editor.java | 12 ++++++------ app/src/processing/app/Mode.java | 8 ++++---- app/src/processing/app/Preferences.java | 2 +- app/src/processing/app/language/PDE.properties | 5 +++++ app/src/processing/app/language/PDE_de.properties | 5 +++++ 5 files changed, 21 insertions(+), 11 deletions(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 5fddfdfb3..443f67418 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -1098,7 +1098,7 @@ public abstract class Editor extends JFrame implements RunnerListener { class UndoAction extends AbstractAction { public UndoAction() { - super("Undo"); + super(Language.text("menu.edit.undo")); this.setEnabled(false); } @@ -1137,8 +1137,8 @@ public abstract class Editor extends JFrame implements RunnerListener { } else { this.setEnabled(false); undoItem.setEnabled(false); - undoItem.setText("Undo"); - putValue(Action.NAME, "Undo"); + undoItem.setText(Language.text("menu.edit.undo")); + putValue(Action.NAME, Language.text("menu.edit.undo")); // if (sketch != null) { // sketch.setModified(false); // 0107 // } @@ -1149,7 +1149,7 @@ public abstract class Editor extends JFrame implements RunnerListener { class RedoAction extends AbstractAction { public RedoAction() { - super("Redo"); + super(Language.text("menu.edit.redo")); this.setEnabled(false); } @@ -1183,8 +1183,8 @@ public abstract class Editor extends JFrame implements RunnerListener { } else { this.setEnabled(false); redoItem.setEnabled(false); - redoItem.setText("Redo"); - putValue(Action.NAME, "Redo"); + redoItem.setText(Language.text("menu.edit.redo")); + putValue(Action.NAME, Language.text("menu.edit.redo")); } } } diff --git a/app/src/processing/app/Mode.java b/app/src/processing/app/Mode.java index f45a6523b..f7e6542bd 100644 --- a/app/src/processing/app/Mode.java +++ b/app/src/processing/app/Mode.java @@ -411,13 +411,13 @@ public abstract class Mode { public void rebuildImportMenu() { //JMenu importMenu) { if (importMenu == null) { - importMenu = new JMenu("Import Library..."); + importMenu = new JMenu(Language.text("menu.library")); } else { //System.out.println("rebuilding import menu"); importMenu.removeAll(); } - JMenuItem addLib = new JMenuItem("Add Library..."); + JMenuItem addLib = new JMenuItem(Language.text("menu.library.add_library")); addLib.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { base.handleOpenLibraryManager(); @@ -441,7 +441,7 @@ public abstract class Mode { // } if (coreLibraries.size() == 0) { - JMenuItem item = new JMenuItem(getTitle() + " mode has no core libraries"); + JMenuItem item = new JMenuItem(getTitle() + " " + Language.text("menu.library.no_core_libraries")); item.setEnabled(false); importMenu.add(item); } else { @@ -455,7 +455,7 @@ public abstract class Mode { if (contribLibraries.size() != 0) { importMenu.addSeparator(); - JMenuItem contrib = new JMenuItem("Contributed"); + JMenuItem contrib = new JMenuItem(Language.text("menu.library.contributed")); contrib.setEnabled(false); importMenu.add(contrib); diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java index 5a9632157..5e2998ec8 100644 --- a/app/src/processing/app/Preferences.java +++ b/app/src/processing/app/Preferences.java @@ -236,7 +236,7 @@ public class Preferences { public Preferences(Base base) { this.base = base; //dialog = new JDialog(editor, "Preferences", true); - dialog = new JFrame("Preferences"); + dialog = Language.text("preferences"); dialog.setResizable(false); Container pain = dialog.getContentPane(); diff --git a/app/src/processing/app/language/PDE.properties b/app/src/processing/app/language/PDE.properties index f51e4e2ea..7a3c53379 100644 --- a/app/src/processing/app/language/PDE.properties +++ b/app/src/processing/app/language/PDE.properties @@ -41,6 +41,11 @@ menu.sketch = Sketch menu.sketch.show_sketch_folder = Show Sketch Folder menu.sketch.add_file = Add File... +menu.library = Import Library... +menu.library.add_library = Add Library... +menu.library.contributed = Contributed +menu.library.no_core_libraries = mode has no core libraries + menu.tools = Tools menu.tools.archive_sketch = Archive Sketch menu.tools.fix_the_serial_lbrary = Fix the Serial Library diff --git a/app/src/processing/app/language/PDE_de.properties b/app/src/processing/app/language/PDE_de.properties index 72744e760..d19d0ab54 100644 --- a/app/src/processing/app/language/PDE_de.properties +++ b/app/src/processing/app/language/PDE_de.properties @@ -41,6 +41,11 @@ menu.sketch = Sketch menu.sketch.show_sketch_folder = Zeige Sketch Verzeichnis menu.sketch.add_file = Datei hinzufügen... +menu.library = Library importieren... +menu.library.add_library = Library hinzufügen... +menu.library.contributed = Contributed +menu.library.no_core_libraries = Mode weist keine Kern-Libraries auf + menu.tools = Tools menu.tools.archive_sketch = Sketch archivieren... menu.tools.fix_the_serial_lbrary = "Serial Library" beheben... From 982c39f9ba0ae52a281d5e6b7e8f4879635400d3 Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Mon, 16 Sep 2013 11:09:07 +0200 Subject: [PATCH 05/47] Added library words --- app/src/processing/app/Preferences.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java index 5e2998ec8..ed51e6876 100644 --- a/app/src/processing/app/Preferences.java +++ b/app/src/processing/app/Preferences.java @@ -236,7 +236,7 @@ public class Preferences { public Preferences(Base base) { this.base = base; //dialog = new JDialog(editor, "Preferences", true); - dialog = Language.text("preferences"); + dialog = new JFrame(Language.text("preferences")); dialog.setResizable(false); Container pain = dialog.getContentPane(); From d3718d08b0289e070b5ddcf6dcea90872482e1d3 Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Mon, 16 Sep 2013 23:54:47 +0200 Subject: [PATCH 06/47] Added preferences words --- app/src/processing/app/Preferences.java | 50 +++++++++---------- .../processing/app/language/PDE.properties | 23 +++++++++ .../processing/app/language/PDE_de.properties | 20 +++++++- 3 files changed, 66 insertions(+), 27 deletions(-) diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java index ed51e6876..739b6674c 100644 --- a/app/src/processing/app/Preferences.java +++ b/app/src/processing/app/Preferences.java @@ -256,7 +256,7 @@ public class Preferences { // Sketchbook location: // [...............................] [ Browse ] - label = new JLabel("Sketchbook location:"); + label = new JLabel(Language.text("preferences.sketchbook_location")+":"); pain.add(label); d = label.getPreferredSize(); label.setBounds(left, top, d.width, d.height); @@ -270,7 +270,7 @@ public class Preferences { button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { File dflt = new File(sketchbookLocationField.getText()); - PApplet.selectFolder("Select new sketchbook location", + PApplet.selectFolder(Language.text("preferences.sketchbook_location.popup"), "sketchbookCallback", dflt, Preferences.this, dialog); // File file = @@ -298,7 +298,7 @@ public class Preferences { // Language: [ English ] (requires restart of Processing) Container languageBox = Box.createHorizontalBox(); - JLabel languageLabel = new JLabel("Language "); + JLabel languageLabel = new JLabel(Language.text("preferences.language")+": "); languageBox.add(languageLabel); languageSelectionBox = new JComboBox(); @@ -313,7 +313,7 @@ public class Preferences { } languageSelectionBox.setModel(new DefaultComboBoxModel(languageSelection)); languageBox.add(languageSelectionBox); - label = new JLabel(" (requires restart of Processing)"); + label = new JLabel(" ("+Language.text("preferences.requires_restart")+")"); languageBox.add(label); pain.add(languageBox); d = languageBox.getPreferredSize(); @@ -324,11 +324,11 @@ public class Preferences { // Editor font size [ ] Container box = Box.createHorizontalBox(); - label = new JLabel("Editor font size: "); + label = new JLabel(Language.text("preferences.editor_font_size")+": "); box.add(label); fontSizeField = new JTextField(4); box.add(fontSizeField); - label = new JLabel(" (requires restart of Processing)"); + label = new JLabel(" ("+Language.text("preferences.requires_restart")+")"); box.add(label); pain.add(box); d = box.getPreferredSize(); @@ -357,8 +357,8 @@ public class Preferences { // [ ] Use smooth text in editor window editorAntialiasBox = - new JCheckBox("Use smooth text in editor window " + - "(requires restart of Processing)"); + new JCheckBox(Language.text("preferences.use_smooth_text")+ + " ("+Language.text("preferences.requires_restart")+")"); pain.add(editorAntialiasBox); d = editorAntialiasBox.getPreferredSize(); // adding +10 because ubuntu + jre 1.5 truncating items @@ -370,8 +370,9 @@ public class Preferences { // [ ] Enable complex text input (for Japanese et al, requires restart) inputMethodBox = - new JCheckBox("Enable complex text input " + - "(i.e. Japanese, requires restart of Processing)"); + new JCheckBox(Language.text("preferences.enable_complex_text_input")+ + " ("+Language.text("preferences.enable_complex_text_input_example")+ + ", "+Language.text("preferences.requires_restart")+")"); pain.add(inputMethodBox); d = inputMethodBox.getPreferredSize(); inputMethodBox.setBounds(left, top, d.width + 10, d.height); @@ -382,7 +383,7 @@ public class Preferences { // [ ] Increase maximum available memory to [______] MB Container memoryBox = Box.createHorizontalBox(); - memoryOverrideBox = new JCheckBox("Increase maximum available memory to "); + memoryOverrideBox = new JCheckBox(Language.text("preferences.increase_max_memory")+": "); memoryBox.add(memoryOverrideBox); memoryField = new JTextField(4); memoryBox.add(memoryField); @@ -409,7 +410,7 @@ public class Preferences { // [ ] Delete previous folder on export deletePreviousBox = - new JCheckBox("Delete previous folder on export"); + new JCheckBox(Language.text("preferences.delete_previous_folder_on_export")); pain.add(deletePreviousBox); d = deletePreviousBox.getPreferredSize(); deletePreviousBox.setBounds(left, top, d.width + 10, d.height); @@ -429,7 +430,8 @@ public class Preferences { // [ ] Use external editor - whinyBox = new JCheckBox("Hide tab/toolbar background image (requires restart)"); + whinyBox = new JCheckBox(Language.text("preferences.hide_toolbar_background_image")+ + " ("+Language.text("preferences.requires_restart")+")"); pain.add(whinyBox); d = whinyBox.getPreferredSize(); whinyBox.setBounds(left, top, d.width + 10, d.height); @@ -439,7 +441,7 @@ public class Preferences { // [ ] Check for updates on startup - checkUpdatesBox = new JCheckBox("Check for updates on startup"); + checkUpdatesBox = new JCheckBox(Language.text("preferences.check_for_updates_on_startup")); pain.add(checkUpdatesBox); d = checkUpdatesBox.getPreferredSize(); checkUpdatesBox.setBounds(left, top, d.width + 10, d.height); @@ -450,12 +452,8 @@ public class Preferences { // Run sketches on display [ 1 ] Container displayBox = Box.createHorizontalBox(); - JLabel displayLabel = new JLabel("Run sketches on display "); - final String tip = "" + - "Sets the display where sketches are initially placed.
" + - "As usual, if the sketch window is moved, it will re-open
" + - "at the same location, however when running in present
" + - "(full screen) mode, this display will always be used."; + JLabel displayLabel = new JLabel(Language.text("preferences.run_sketches_on_display")+": "); + final String tip = "" + Language.text("preferences.run_sketches_on_display.tip"); displayLabel.setToolTipText(tip); displayBox.add(displayLabel); displaySelectionBox = new JComboBox(); @@ -471,7 +469,7 @@ public class Preferences { if (Base.isWindows()) { autoAssociateBox = - new JCheckBox("Automatically associate .pde files with Processing"); + new JCheckBox(Language.text("preferences.automatically_associate_pde_files")); pain.add(autoAssociateBox); d = autoAssociateBox.getPreferredSize(); autoAssociateBox.setBounds(left, top, d.width + 10, d.height); @@ -484,11 +482,11 @@ public class Preferences { if (Base.isMacOS()) { box = Box.createHorizontalBox(); - label = new JLabel("Launch programs in "); + label = new JLabel(Language.text("preferences.launch_programs_in")+" "); box.add(label); - bitsThirtyTwoButton = new JRadioButton("32-bit mode "); + bitsThirtyTwoButton = new JRadioButton("32-bit "+Language.text("preferences.launch_programs_in.mode")+" "); box.add(bitsThirtyTwoButton); - bitsSixtyFourButton = new JRadioButton("64-bit mode"); + bitsSixtyFourButton = new JRadioButton("64-bit "+Language.text("preferences.launch_programs_in.mode")); box.add(bitsSixtyFourButton); ButtonGroup bg = new ButtonGroup(); @@ -504,7 +502,7 @@ public class Preferences { // More preferences are in the ... - label = new JLabel("More preferences can be edited directly in the file"); + label = new JLabel(Language.text("preferences.file")+":"); pain.add(label); d = label.getPreferredSize(); label.setForeground(Color.gray); @@ -533,7 +531,7 @@ public class Preferences { right = Math.max(right, left + d.width); top += d.height; - label = new JLabel("(edit only when Processing is not running)"); + label = new JLabel("("+Language.text("preferences.file.hint")+")"); pain.add(label); d = label.getPreferredSize(); label.setForeground(Color.gray); diff --git a/app/src/processing/app/language/PDE.properties b/app/src/processing/app/language/PDE.properties index 7a3c53379..165eb68d3 100644 --- a/app/src/processing/app/language/PDE.properties +++ b/app/src/processing/app/language/PDE.properties @@ -90,6 +90,29 @@ editor.header.delete.warning.text = You can't delete the last tab of the last op editor.popup.find_in_reference = Find in Reference preferences = Preferences +preferences.requires_restart = requires restart of Processing +preferences.sketchbook_location = Sketchook location +preferences.sketchbook_location.popup = Select new sketchbook location +preferences.language = Language +preferences.editor_font_size = Editor font size +preferences.use_smooth_text = Use smooth text in editor window +preferences.enable_complex_text_input = Enable complex text input +preferences.enable_complex_text_input_example = i.e. Japanese +preferences.increase_max_memory = Increase maximum available memory to +preferences.delete_previous_folder_on_export = Delete previous folder on export +preferences.hide_toolbar_background_image = Hide tab/toolbar background image +preferences.check_for_updates_on_startup = Check for updates on startup +preferences.run_sketches_on_display = Run sketches on display +preferences.run_sketches_on_display.tip = \ +Sets the display where sketches are initially placed.
\ +As usual, if the sketch window is moved, it will re-open
\ +at the same location, however when running in present
\ +(full screen) mode, this display will always be used. +preferences.automatically_associate_pde_files = Automatically associate .pde files with Processing +preferences.launch_programs_in = Launch programs in +preferences.launch_programs_in.mode = mode +preferences.file = More preferences can be edited directly in the file +preferences.file.hint = edit only when Processing is not running prompt.yes = Yes prompt.no = No diff --git a/app/src/processing/app/language/PDE_de.properties b/app/src/processing/app/language/PDE_de.properties index d19d0ab54..aa56aa383 100644 --- a/app/src/processing/app/language/PDE_de.properties +++ b/app/src/processing/app/language/PDE_de.properties @@ -84,7 +84,25 @@ editor.header.delete.warning.text = Du kannst nicht den letzten Tab des letzten editor.popup.find_in_reference = Suche in Referenz -preferences = Einstellungen +preferences = Preferences +preferences.requires_restart = nach Neustart von Processing aktiv +preferences.sketchbook_location = Sketchbook Pfad +preferences.sketchbook_location.popup = Neuen Sketchbook Pfad auswählen +preferences.language = Sprache +preferences.editor_font_size = Editor Schriftgröße +preferences.use_smooth_text = Editor Textglättung +preferences.enable_complex_text_input = Komplexe Sprachen erlauben +preferences.enable_complex_text_input_example = z.B. Japanisch +preferences.increase_max_memory = Maximalen Speicher erhöhen auf +preferences.delete_previous_folder_on_export = Leere Verzeichnis beim Exportieren +preferences.hide_toolbar_background_image = Hintergrundgrafik der Toolbar ausblenden +preferences.check_for_updates_on_startup = Prüfung auf Updates bei Programmstart +preferences.run_sketches_on_display = Starte Sketch auf Bildschirm +preferences.automatically_associate_pde_files = Öffne .pde Dateien automatisch mit Processing +preferences.launch_programs_in = Starte Programme im +preferences.launch_programs_in.mode = Modus +preferences.file = Weitere Einstellungen können in der folgenden Datei bearbeitet werden +preferences.file.hint = Processing darf während der Bearbeitung nicht laufen prompt.yes = Ja prompt.no = Nein From bbbe19d141b16ffbaaab3c031d2c624b4b56d984 Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Tue, 17 Sep 2013 05:01:07 +0200 Subject: [PATCH 07/47] Added more words and comments --- app/src/processing/app/Base.java | 2 +- app/src/processing/app/Editor.java | 2 +- app/src/processing/app/FindReplace.java | 22 +-- app/src/processing/app/Language.java | 2 +- app/src/processing/app/Mode.java | 2 +- app/src/processing/app/Preferences.java | 2 +- app/src/processing/app/Sketch.java | 2 +- .../contrib/ContributionManagerDialog.java | 9 +- .../processing/app/language/PDE_en.properties | 5 - .../{language => languages}/PDE.properties | 123 +++++++++++---- .../{language => languages}/PDE_de.properties | 147 +++++++++++++----- .../app/languages/PDE_en.properties | 1 + app/src/processing/mode/java/JavaEditor.java | 16 +- 13 files changed, 233 insertions(+), 102 deletions(-) delete mode 100644 app/src/processing/app/language/PDE_en.properties rename app/src/processing/app/{language => languages}/PDE.properties (64%) rename app/src/processing/app/{language => languages}/PDE_de.properties (54%) create mode 100644 app/src/processing/app/languages/PDE_en.properties diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 90a690ce1..b71c8f671 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -825,7 +825,7 @@ public class Base { extensions.add(mode.getDefaultExtension()); } - final String prompt = "Open a Processing sketch..."; + final String prompt = Language.text("open"); if (Preferences.getBoolean("chooser.files.native")) { // don't use native dialogs on Linux //$NON-NLS-1$ // get the front-most window frame for placing file dialog FileDialog fd = new FileDialog(activeEditor, prompt, FileDialog.LOAD); diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 443f67418..0d61362b1 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -2588,7 +2588,7 @@ public abstract class Editor extends JFrame implements RunnerListener { this.addSeparator(); - referenceItem = new JMenuItem(Language.text("editor.popup.find_in_reference")); + referenceItem = new JMenuItem(Language.text("find_in_reference")); referenceItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleFindReference(); diff --git a/app/src/processing/app/FindReplace.java b/app/src/processing/app/FindReplace.java index 922bcc9ba..736319916 100644 --- a/app/src/processing/app/FindReplace.java +++ b/app/src/processing/app/FindReplace.java @@ -64,15 +64,15 @@ public class FindReplace extends JFrame { public FindReplace(Editor editor) { - super("Find"); + super(Language.text("find")); setResizable(false); this.editor = editor; Container pain = getContentPane(); pain.setLayout(null); - JLabel findLabel = new JLabel("Find:"); - JLabel replaceLabel = new JLabel("Replace with:"); + JLabel findLabel = new JLabel(Language.text("find.find")); + JLabel replaceLabel = new JLabel(Language.text("find.replace_with")); Dimension labelDimension = replaceLabel.getPreferredSize(); pain.add(findLabel); @@ -85,7 +85,7 @@ public class FindReplace extends JFrame { if (findString != null) findField.setText(findString); if (replaceString != null) replaceField.setText(replaceString); - ignoreCaseBox = new JCheckBox("Ignore Case"); + ignoreCaseBox = new JCheckBox(Language.text("find.ignore_case")); ignoreCaseBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ignoreCase = ignoreCaseBox.isSelected(); @@ -94,7 +94,7 @@ public class FindReplace extends JFrame { ignoreCaseBox.setSelected(ignoreCase); pain.add(ignoreCaseBox); - allTabsBox = new JCheckBox("All Tabs"); + allTabsBox = new JCheckBox(Language.text("find.all_tabs")); allTabsBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { allTabs = allTabsBox.isSelected(); @@ -104,7 +104,7 @@ public class FindReplace extends JFrame { allTabsBox.setEnabled(true); pain.add(allTabsBox); - wrapAroundBox = new JCheckBox("Wrap Around"); + wrapAroundBox = new JCheckBox(Language.text("find.wrap_around")); wrapAroundBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { wrapAround = wrapAroundBox.isSelected(); @@ -116,11 +116,11 @@ public class FindReplace extends JFrame { JPanel buttons = new JPanel(); buttons.setLayout(new FlowLayout(FlowLayout.CENTER,BUTTON_GAP, 0)); - replaceAllButton = new JButton("Replace All"); - replaceButton = new JButton("Replace"); - replaceAndFindButton = new JButton("Replace & Find"); - previousButton = new JButton("Previous"); - findButton = new JButton("Find"); + replaceAllButton = new JButton(Language.text("find.btn.replace_all")); + replaceButton = new JButton(Language.text("find.btn.replace")); + replaceAndFindButton = new JButton(Language.text("find.btn.find_and_replace")); + previousButton = new JButton(Language.text("find.btn.previous")); + findButton = new JButton(Language.text("find.btn.find")); // ordering is different on mac versus pc if (Base.isMacOS()) { diff --git a/app/src/processing/app/Language.java b/app/src/processing/app/Language.java index 449e0e62e..88ab88373 100644 --- a/app/src/processing/app/Language.java +++ b/app/src/processing/app/Language.java @@ -50,7 +50,7 @@ public class Language { } // Get bundle with translations (processing.app.language.PDE) - this.bundle = ResourceBundle.getBundle("processing.app.language.PDE", new Locale(this.language)); + this.bundle = ResourceBundle.getBundle("processing.app.languages.PDE", new Locale(this.language)); } /** diff --git a/app/src/processing/app/Mode.java b/app/src/processing/app/Mode.java index f7e6542bd..237f9f650 100644 --- a/app/src/processing/app/Mode.java +++ b/app/src/processing/app/Mode.java @@ -662,7 +662,7 @@ public abstract class Mode { public void showExamplesFrame() { if (examplesFrame == null) { - examplesFrame = new JFrame(getTitle() + " Examples"); + examplesFrame = new JFrame(getTitle() + " "+Language.text("menu.file.examples")); Toolkit.setIcon(examplesFrame); Toolkit.registerWindowCloseKeys(examplesFrame.getRootPane(), new ActionListener() { public void actionPerformed(ActionEvent e) { diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java index 739b6674c..7115d8908 100644 --- a/app/src/processing/app/Preferences.java +++ b/app/src/processing/app/Preferences.java @@ -78,7 +78,7 @@ public class Preferences { * Standardized width for buttons. Mac OS X 10.3 wants 70 as its default, * Windows XP needs 66, and my Ubuntu machine needs 80+, so 80 seems proper. */ - static public int BUTTON_WIDTH = 80; + static public int BUTTON_WIDTH = Integer.valueOf(Language.text("preferences.button.width")); /** * Standardized button height. Mac OS X 10.3 (Java 1.4) wants 29, diff --git a/app/src/processing/app/Sketch.java b/app/src/processing/app/Sketch.java index 669452b8c..91c322525 100644 --- a/app/src/processing/app/Sketch.java +++ b/app/src/processing/app/Sketch.java @@ -714,7 +714,7 @@ public class Sketch { String newParentDir = null; String newName = null; // TODO rewrite this to use shared version from PApplet - final String PROMPT = "Save sketch folder as..."; + final String PROMPT = Language.text("save"); if (Preferences.getBoolean("chooser.files.native")) { // get new name for folder FileDialog fd = new FileDialog(editor, PROMPT, FileDialog.SAVE); diff --git a/app/src/processing/app/contrib/ContributionManagerDialog.java b/app/src/processing/app/contrib/ContributionManagerDialog.java index 52987fe61..1d05ad609 100644 --- a/app/src/processing/app/contrib/ContributionManagerDialog.java +++ b/app/src/processing/app/contrib/ContributionManagerDialog.java @@ -59,7 +59,7 @@ public class ContributionManagerDialog { title = "Update Manager"; filter = ContributionType.createUpdateFilter(); } else { - title = type.getTitle() + " Manager"; + // title = type.getTitle() + " Manager"; filter = type.createFilter(); } contribListing = ContributionListing.getInstance(); @@ -148,7 +148,7 @@ public class ContributionManagerDialog { filterPanel.add(Box.createHorizontalStrut(6)); - JLabel categoryLabel = new JLabel("Category:"); + JLabel categoryLabel = new JLabel(Language.text("library.category")); filterPanel.add(categoryLabel); filterPanel.add(Box.createHorizontalStrut(5)); @@ -370,12 +370,13 @@ public class ContributionManagerDialog { class FilterField extends JTextField { - final static String filterHint = "Filter your search..."; + String filterHint; boolean showingHint; List filters; public FilterField () { - super(filterHint); + super(Language.text("library.filter_your_search")); + filterHint = Language.text("library.filter_your_search"); showingHint = true; filters = new ArrayList(); diff --git a/app/src/processing/app/language/PDE_en.properties b/app/src/processing/app/language/PDE_en.properties deleted file mode 100644 index ca9c83242..000000000 --- a/app/src/processing/app/language/PDE_en.properties +++ /dev/null @@ -1,5 +0,0 @@ - - -# --------------------------------------- -# ENGLISH (en) -# --------------------------------------- \ No newline at end of file diff --git a/app/src/processing/app/language/PDE.properties b/app/src/processing/app/languages/PDE.properties similarity index 64% rename from app/src/processing/app/language/PDE.properties rename to app/src/processing/app/languages/PDE.properties index 165eb68d3..254a4a0b3 100644 --- a/app/src/processing/app/language/PDE.properties +++ b/app/src/processing/app/languages/PDE.properties @@ -1,10 +1,15 @@ # --------------------------------------- -# BASIC +# Language: English (en) (default) # --------------------------------------- +# --------------------------------------- +# Menu + +# | File | Edit | Sketch | Library | Tools | Help | +# | File | menu.file = File menu.file.new = New menu.file.open = Open... @@ -14,12 +19,14 @@ menu.file.examples = Examples... menu.file.close = Close menu.file.save = Save menu.file.save_as = Save As... -menu.file.export_application = Export Application +menu.file.export_application = Export Application... menu.file.page_setup = Page Setup -menu.file.print = Print -menu.file.preferences = Preferences +menu.file.print = Print... +menu.file.preferences = Preferences... menu.file.quit = Quit +# | File | Edit | Sketch | Library | Tools | Help | +# | Edit | menu.edit = Edit menu.edit.undo = Undo menu.edit.redo = Redo @@ -30,28 +37,36 @@ menu.edit.paste = Paste menu.edit.select_all = Select All menu.edit.auto_format = Auto Format menu.edit.comment_uncomment = Comment/Uncomment -menu.edit.increase_indent = Increase Indent -menu.edit.decrease_indent = Decrease Indent +menu.edit.increase_indent = \u2192 Increase Indent +menu.edit.decrease_indent = \u2190 Decrease Indent menu.edit.find = Find... menu.edit.find_next = Find Next menu.edit.find_previous = Find Previous menu.edit.use_selection_for_find = Use Selection for Find +# | File | Edit | Sketch | Library | Tools | Help | +# | Sketch | menu.sketch = Sketch menu.sketch.show_sketch_folder = Show Sketch Folder menu.sketch.add_file = Add File... +# | File | Edit | Sketch | Library | Tools | Help | +# | Library | menu.library = Import Library... menu.library.add_library = Add Library... menu.library.contributed = Contributed menu.library.no_core_libraries = mode has no core libraries +# | File | Edit | Sketch | Library | Tools | Help | +# | Tools | menu.tools = Tools menu.tools.archive_sketch = Archive Sketch menu.tools.fix_the_serial_lbrary = Fix the Serial Library menu.tools.install_processing_java = Install "processing-java" menu.tools.add_tool = Add Tool... +# | File | Edit | Sketch | Library | Tools | Help | +# | Help | menu.help = Help menu.help.about = About Processing menu.help.environment = Environment @@ -69,30 +84,33 @@ menu.help.foundation.url = http://processing.org/foundation/ menu.help.visit = Visit Processing.org menu.help.visit.url = http://processing.org/ -toolbar.run = Run -toolbar.present = Present -toolbar.stop = Stop -toolbar.new = New -toolbar.open = Open -toolbar.save = Save -toolbar.export_application = Export Application -toolbar.add_mode = Add mode... -editor.header.new_tab = New Tab -editor.header.rename = Rename -editor.header.delete = Delete -editor.header.previous_tab = Previous Tab -editor.header.next_tab = Next Tab +# --------------------------------------- +# Basics -editor.header.delete.warning.title = Yeah, no. -editor.header.delete.warning.text = You can't delete the last tab of the last open sketch. +# Buttons +prompt.yes = Yes +prompt.no = No +prompt.cancel = Cancel +prompt.ok = OK +prompt.browse = Browse +prompt.export = Export -editor.popup.find_in_reference = Find in Reference +# --------------------------------------- +# Frames + +# Open (Frame) +open = Open a Processing sketch... + +# Save (Frame) +save = Save sketch folder as... + +# Preferences (Frame) preferences = Preferences +preferences.button.width = 80 preferences.requires_restart = requires restart of Processing preferences.sketchbook_location = Sketchook location -preferences.sketchbook_location.popup = Select new sketchbook location preferences.language = Language preferences.editor_font_size = Editor font size preferences.use_smooth_text = Use smooth text in editor window @@ -114,8 +132,57 @@ preferences.launch_programs_in.mode = mode preferences.file = More preferences can be edited directly in the file preferences.file.hint = edit only when Processing is not running -prompt.yes = Yes -prompt.no = No -prompt.cancel = Cancel -prompt.ok = OK -prompt.browse = Browse \ No newline at end of file +# Sketchbook Location (Frame) +sketchbook_location = Select new sketchbook location + +# Export (Frame) +export = Export Options +export.platforms = Platforms +export.options = Options +export.options.fullscreen = Full Screen (Present mode) +export.options.show_stop_button = Show a Stop button +export.description.line1 = Export to Application creates double-clickable, +export.description.line2 = standalone applications for the selected plaforms. + +# Find (Frame) +find = Find +find.find = Find: +find.replace_with = Replace with: +find.ignore_case = Ignore Case +find.all_tabs = All Tabs +find.wrap_around Wrap Around +find.btn.replace_all = Replace All +find.btn.replace = Replace +find.btn.find_and_replace = Find & Replace +find.btn.previous = Previous +find.btn.find = Find + +# Find in reference (Frame) +find_in_reference = Find in Reference + +# Library Manager (Frame) +library.category = Category: +library.filter_your_search = Filter your search... + + +# --------------------------------------- +# Toolbar + +# [Run/Present] [Stop] [New] [Open] [Save] +toolbar.run = Run +toolbar.present = Present +toolbar.stop = Stop +toolbar.new = New +toolbar.open = Open +toolbar.save = Save +toolbar.export_application = Export Application +toolbar.add_mode = Add mode... + +# [Tab1] [Tab2] [v] +editor.header.new_tab = New Tab +editor.header.rename = Rename +editor.header.delete = Delete +editor.header.previous_tab = Previous Tab +editor.header.next_tab = Next Tab +editor.header.delete.warning.title = Yeah, no. +editor.header.delete.warning.text = You can't delete the last tab of the last open sketch. \ No newline at end of file diff --git a/app/src/processing/app/language/PDE_de.properties b/app/src/processing/app/languages/PDE_de.properties similarity index 54% rename from app/src/processing/app/language/PDE_de.properties rename to app/src/processing/app/languages/PDE_de.properties index aa56aa383..bddc393f4 100644 --- a/app/src/processing/app/language/PDE_de.properties +++ b/app/src/processing/app/languages/PDE_de.properties @@ -1,25 +1,32 @@ # --------------------------------------- -# DEUTSCH (de) +# Language: Deutsch (de) # --------------------------------------- +# --------------------------------------- +# Menu + +# | File | Edit | Sketch | Library | Tools | Help | +# | File | menu.file = Datei -menu.file.new = Neu... -menu.file.open = Öffnen... +menu.file.new = Neu +menu.file.open = Öffnen ... menu.file.sketchbook = Sketchbook menu.file.recent = Letzte Dateien öffnen -menu.file.examples = Beispiele... +menu.file.examples = Beispiele ... menu.file.close = Schließen menu.file.save = Speichern -menu.file.save_as = Speichern unter... -menu.file.export_application = Exportieren... +menu.file.save_as = Speichern unter ... +menu.file.export_application = Exportieren menu.file.page_setup = Eine Kopie drucken -menu.file.print = Drucken... -menu.file.preferences = Einstellungen +menu.file.print = Drucken ... +menu.file.preferences = Einstellungen ... menu.file.quit = Beenden +# | File | Edit | Sketch | Library | Tools | Help | +# | Edit | menu.edit = Bearbeiten menu.edit.undo = Rückgängig menu.edit.redo = Wiederholen @@ -30,28 +37,36 @@ menu.edit.paste = Einf menu.edit.select_all = Alle auswählen menu.edit.auto_format = Autoformatierung menu.edit.comment_uncomment = Ein- und Auskommentieren -menu.edit.increase_indent = Einrücken -menu.edit.decrease_indent = Ausrücken -menu.edit.find = Suchen... -menu.edit.find_next = Weiter suchen... -menu.edit.find_previous = Vorher suchen... +menu.edit.increase_indent = \u2192 Ausrücken +menu.edit.decrease_indent = \u2190 Einrücken +menu.edit.find = Suchen ... +menu.edit.find_next = Weiter suchen +menu.edit.find_previous = Vorher suchen menu.edit.use_selection_for_find = Suche in Auswahl +# | File | Edit | Sketch | Library | Tools | Help | +# | Sketch | menu.sketch = Sketch menu.sketch.show_sketch_folder = Zeige Sketch Verzeichnis -menu.sketch.add_file = Datei hinzufügen... +menu.sketch.add_file = Datei hinzufügen ... +# | File | Edit | Sketch | Library | Tools | Help | +# | Library | menu.library = Library importieren... menu.library.add_library = Library hinzufügen... menu.library.contributed = Contributed menu.library.no_core_libraries = Mode weist keine Kern-Libraries auf +# | File | Edit | Sketch | Library | Tools | Help | +# | Tools | menu.tools = Tools -menu.tools.archive_sketch = Sketch archivieren... -menu.tools.fix_the_serial_lbrary = "Serial Library" beheben... -menu.tools.install_processing_java = "processing-java" installieren... -menu.tools.add_tool = Tool hinzufügen... +menu.tools.archive_sketch = Sketch archivieren ... +menu.tools.fix_the_serial_lbrary = "Serial Library" beheben ... +menu.tools.install_processing_java = "processing-java" installieren ... +menu.tools.add_tool = Tool hinzufügen ... +# | File | Edit | Sketch | Library | Tools | Help | +# | Help | menu.help = Hilfe menu.help.about = Über Processing menu.help.environment = Entwicklungsumgebung @@ -64,30 +79,33 @@ menu.help.faq = H menu.help.foundation = "The Processing Foundation" menu.help.visit = Processing.org besuchen -toolbar.run = Starten -toolbar.present = Starten in Vollbild -toolbar.stop = Stoppen -toolbar.new = Neu -toolbar.open = Öffnen -toolbar.save = Speichern -toolbar.export_application = Exportieren -toolbar.add_mode = Modus hinzufügen... -editor.header.new_tab = Neuer Tab -editor.header.rename = Unbenennen -editor.header.delete = Löschen -editor.header.previous_tab = Nächster Tab -editor.header.next_tab = Vorheriger Tab +# --------------------------------------- +# Basics -editor.header.delete.warning.title = Yeah, nein. -editor.header.delete.warning.text = Du kannst nicht den letzten Tab des letzten Sketches löschen. +# Buttons +prompt.yes = Ja +prompt.no = Nein +prompt.cancel = Abbrechen +prompt.ok = Ok +prompt.browse = Durchsuchen +prompt.export = Exportieren -editor.popup.find_in_reference = Suche in Referenz +# --------------------------------------- +# Frames + +# Open (Frame) +open = Processing Sketch öffnen ... + +# Save (Frame) +save = Sketch speichern unter ... + +# Preferences (Frame) preferences = Preferences +preferences.button.width = 110 preferences.requires_restart = nach Neustart von Processing aktiv preferences.sketchbook_location = Sketchbook Pfad -preferences.sketchbook_location.popup = Neuen Sketchbook Pfad auswählen preferences.language = Sprache preferences.editor_font_size = Editor Schriftgröße preferences.use_smooth_text = Editor Textglättung @@ -104,8 +122,57 @@ preferences.launch_programs_in.mode = Modus preferences.file = Weitere Einstellungen können in der folgenden Datei bearbeitet werden preferences.file.hint = Processing darf während der Bearbeitung nicht laufen -prompt.yes = Ja -prompt.no = Nein -prompt.cancel = Abbrechen -prompt.ok = Ok -prompt.browse = Durchsuchen \ No newline at end of file +# Sketchbook Location (Frame) +sketchbook_location = Neuen Sketchbook Pfad auswählen + +# Export (Frame) +export = Export Optionen +export.platforms = Plattformen +export.options = Optionen +export.options.fullscreen = Bildschirmfüllend (Present Mode) +export.options.show_stop_button = Sichtbarer Stopp Button +export.description.line1 = Exportierte Sketches sind ausführbare An- +export.description.line2 = wendungen für die ausgewählten Plattformen. + +# Find (Frame) +find = Suchen +find.find = Suche: +find.replace_with = Ersetzen durch: +find.ignore_case = Groß-/Kleinschreibung ignorieren +find.all_tabs = Alle Tabs +find.wrap_around = Nächsten Zeilen +find.btn.replace_all = Alle ersetzen +find.btn.replace = Ersetzen +find.btn.find_and_replace = Suchen & Ersetzen +find.btn.previous = Vorherige +find.btn.find = Suchen + +# Find in reference (Frame) +find_in_reference = Suche in Referenz + +# Library Manager (Frame) +library.category = Kategorie: +library.filter_your_search = Suche filtern ... + + +# --------------------------------------- +# Toolbar + +# [Run/Present] [Stop] [New] [Open] [Save] +toolbar.run = Starten +toolbar.present = Starten in Vollbild +toolbar.stop = Stoppen +toolbar.new = Neu +toolbar.open = Öffnen +toolbar.save = Speichern +toolbar.export_application = Exportieren +toolbar.add_mode = Modus hinzufügen ... + +# [Tab1] [Tab2] [v] +editor.header.new_tab = Neuer Tab +editor.header.rename = Unbenennen +editor.header.delete = Löschen +editor.header.previous_tab = Nächster Tab +editor.header.next_tab = Vorheriger Tab +editor.header.delete.warning.title = Yeah, nein. +editor.header.delete.warning.text = Du kannst nicht den letzten Tab des letzten Sketches löschen. \ No newline at end of file diff --git a/app/src/processing/app/languages/PDE_en.properties b/app/src/processing/app/languages/PDE_en.properties new file mode 100644 index 000000000..a657df494 --- /dev/null +++ b/app/src/processing/app/languages/PDE_en.properties @@ -0,0 +1 @@ +# -> PDE.properties \ No newline at end of file diff --git a/app/src/processing/mode/java/JavaEditor.java b/app/src/processing/mode/java/JavaEditor.java index d51bbf040..3bb214a59 100644 --- a/app/src/processing/mode/java/JavaEditor.java +++ b/app/src/processing/mode/java/JavaEditor.java @@ -265,8 +265,8 @@ public class JavaEditor extends Editor { // String msg = "Export to Application creates a standalone, \n" + // "double-clickable application for the selected plaforms."; - String line1 = "Export to Application creates double-clickable,"; - String line2 = "standalone applications for the selected plaforms."; + String line1 = Language.text("export.description.line1"); + String line2 = Language.text("export.description.line2"); JLabel label1 = new JLabel(line1, SwingConstants.CENTER); JLabel label2 = new JLabel(line2, SwingConstants.CENTER); label1.setAlignmentX(Component.LEFT_ALIGNMENT); @@ -312,7 +312,7 @@ public class JavaEditor extends Editor { platformPanel.add(macosxButton); platformPanel.add(Box.createHorizontalStrut(6)); platformPanel.add(linuxButton); - platformPanel.setBorder(new TitledBorder("Platforms")); + platformPanel.setBorder(new TitledBorder(Language.text("export.platforms"))); //Dimension goodIdea = new Dimension(wide, platformPanel.getPreferredSize().height); //platformPanel.setMaximumSize(goodIdea); wide = Math.max(wide, platformPanel.getPreferredSize().width); @@ -321,7 +321,7 @@ public class JavaEditor extends Editor { // Box indentPanel = Box.createHorizontalBox(); // indentPanel.add(Box.createHorizontalStrut(new JCheckBox().getPreferredSize().width)); - final JCheckBox showStopButton = new JCheckBox("Show a Stop button"); + final JCheckBox showStopButton = new JCheckBox(Language.text("export.options.show_stop_button")); //showStopButton.setMnemonic(KeyEvent.VK_S); showStopButton.setSelected(Preferences.getBoolean("export.application.stop")); showStopButton.addItemListener(new ItemListener() { @@ -334,7 +334,7 @@ public class JavaEditor extends Editor { // indentPanel.add(showStopButton); // indentPanel.setAlignmentX(Component.LEFT_ALIGNMENT); - final JCheckBox fullScreenButton = new JCheckBox("Full Screen (Present mode)"); + final JCheckBox fullScreenButton = new JCheckBox(Language.text("export.options.fullscreen")); //fullscreenButton.setMnemonic(KeyEvent.VK_F); fullScreenButton.setSelected(Preferences.getBoolean("export.application.fullscreen")); fullScreenButton.addItemListener(new ItemListener() { @@ -351,7 +351,7 @@ public class JavaEditor extends Editor { optionPanel.add(fullScreenButton); optionPanel.add(showStopButton); // optionPanel.add(indentPanel); - optionPanel.setBorder(new TitledBorder("Options")); + optionPanel.setBorder(new TitledBorder(Language.text("export.options"))); wide = Math.max(wide, platformPanel.getPreferredSize().width); //goodIdea = new Dimension(wide, optionPanel.getPreferredSize().height); optionPanel.setAlignmentX(Component.LEFT_ALIGNMENT); @@ -391,7 +391,7 @@ public class JavaEditor extends Editor { // optionPanel.add(exportButton); // optionPanel.add(cancelButton); // } - String[] options = { "Export", "Cancel" }; + String[] options = { Language.text("prompt.export"), Language.text("prompt.cancel") }; final JOptionPane optionPane = new JOptionPane(panel, JOptionPane.PLAIN_MESSAGE, //JOptionPane.QUESTION_MESSAGE, @@ -400,7 +400,7 @@ public class JavaEditor extends Editor { options, options[0]); - final JDialog dialog = new JDialog(this, "Export Options", true); + final JDialog dialog = new JDialog(this, Language.text("export"), true); dialog.setContentPane(optionPane); optionPane.addPropertyChangeListener(new PropertyChangeListener() { From c99244d336d7904883b68b2bcc7bdbc663259bae Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Tue, 17 Sep 2013 11:49:07 +0200 Subject: [PATCH 08/47] Added words --- app/src/processing/app/Sketch.java | 3 +-- app/src/processing/app/languages/PDE.properties | 14 ++++++++++++++ app/src/processing/app/languages/PDE_de.properties | 14 ++++++++++++++ app/src/processing/app/tools/Archiver.java | 2 +- app/src/processing/app/tools/ColorSelector.java | 4 ++-- app/src/processing/app/tools/CreateFont.java | 4 ++-- 6 files changed, 34 insertions(+), 7 deletions(-) diff --git a/app/src/processing/app/Sketch.java b/app/src/processing/app/Sketch.java index 91c322525..194438a52 100644 --- a/app/src/processing/app/Sketch.java +++ b/app/src/processing/app/Sketch.java @@ -934,8 +934,7 @@ public class Sketch { } // get a dialog, select a file to add to the sketch - String prompt = - "Select an image or other data file to copy to your sketch"; + String prompt = Language.text("file"); //FileDialog fd = new FileDialog(new Frame(), prompt, FileDialog.LOAD); FileDialog fd = new FileDialog(editor, prompt, FileDialog.LOAD); fd.setVisible(true); diff --git a/app/src/processing/app/languages/PDE.properties b/app/src/processing/app/languages/PDE.properties index 254a4a0b3..e405b10bf 100644 --- a/app/src/processing/app/languages/PDE.properties +++ b/app/src/processing/app/languages/PDE.properties @@ -60,6 +60,8 @@ menu.library.no_core_libraries = mode has no core libraries # | File | Edit | Sketch | Library | Tools | Help | # | Tools | menu.tools = Tools +menu.tools.color_selector = Color Selector... +menu.tools.create_font = Create Font... menu.tools.archive_sketch = Archive Sketch menu.tools.fix_the_serial_lbrary = Fix the Serial Library menu.tools.install_processing_java = Install "processing-java" @@ -164,6 +166,18 @@ find_in_reference = Find in Reference library.category = Category: library.filter_your_search = Filter your search... +# File (Frame) +file = Select an image or other data file to copy to your sketch + +# Create Font (Frame) +create_font = Create Font + +# Color Selector (Frame) +color_selector = Color Selector + +# Archive Sketch (Frame) +archive_sketch = Archive sketch as... + # --------------------------------------- # Toolbar diff --git a/app/src/processing/app/languages/PDE_de.properties b/app/src/processing/app/languages/PDE_de.properties index bddc393f4..0423f0940 100644 --- a/app/src/processing/app/languages/PDE_de.properties +++ b/app/src/processing/app/languages/PDE_de.properties @@ -60,6 +60,8 @@ menu.library.no_core_libraries = Mode weist keine Kern-Libraries auf # | File | Edit | Sketch | Library | Tools | Help | # | Tools | menu.tools = Tools +menu.tools.color_selector = Farbauswahl ... +menu.tools.create_font = Schrift erstellen ... menu.tools.archive_sketch = Sketch archivieren ... menu.tools.fix_the_serial_lbrary = "Serial Library" beheben ... menu.tools.install_processing_java = "processing-java" installieren ... @@ -154,6 +156,18 @@ find_in_reference = Suche in Referenz library.category = Kategorie: library.filter_your_search = Suche filtern ... +# File (Frame) +file = Grafik oder andere Datei zum Sketch kopieren + +# Create Font (Frame) +create_font = Schrift erstellen + +# Color Selector (Frame) +color_selector = Farbauswahl + +# Archive Sketch (Frame) +archive_sketch = Sketch archivieren unter ... + # --------------------------------------- # Toolbar diff --git a/app/src/processing/app/tools/Archiver.java b/app/src/processing/app/tools/Archiver.java index 1c81e66ce..e81ad47ee 100644 --- a/app/src/processing/app/tools/Archiver.java +++ b/app/src/processing/app/tools/Archiver.java @@ -95,7 +95,7 @@ public class Archiver implements Tool { } while (newbie.exists()); // open up a prompt for where to save this fella - PApplet.selectOutput("Archive sketch as...", "fileSelected", newbie, this, editor); + PApplet.selectOutput(Language.text("archive_sketch"), "fileSelected", newbie, this, editor); } diff --git a/app/src/processing/app/tools/ColorSelector.java b/app/src/processing/app/tools/ColorSelector.java index ed3de640b..f600128d6 100644 --- a/app/src/processing/app/tools/ColorSelector.java +++ b/app/src/processing/app/tools/ColorSelector.java @@ -70,7 +70,7 @@ public class ColorSelector implements Tool, DocumentListener { public String getMenuTitle() { - return "Color Selector"; + return Language.text("menu.tools.color_selector"); } @@ -83,7 +83,7 @@ public class ColorSelector implements Tool, DocumentListener { void createFrame() { - frame = new JFrame("Color Selector"); + frame = new JFrame(Language.text("color_selector")); frame.getContentPane().setLayout(new BorderLayout()); Box box = Box.createHorizontalBox(); diff --git a/app/src/processing/app/tools/CreateFont.java b/app/src/processing/app/tools/CreateFont.java index 217af0bfa..d3de7bd2c 100644 --- a/app/src/processing/app/tools/CreateFont.java +++ b/app/src/processing/app/tools/CreateFont.java @@ -74,12 +74,12 @@ public class CreateFont extends JFrame implements Tool { public CreateFont() { - super("Create Font"); + super(Language.text("create_font")); } public String getMenuTitle() { - return "Create Font..."; + return Language.text("menu.tools.create_font"); } From 2d149412d2806d8e9a392cc526f68f28ea8c28b3 Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Tue, 17 Sep 2013 13:12:09 +0200 Subject: [PATCH 09/47] Added dynamic ISO639-1 codes --- app/src/processing/app/Base.java | 7 +++---- app/src/processing/app/Editor.java | 7 +++---- app/src/processing/app/Language.java | 11 +++++++++-- app/src/processing/app/languages/PDE.properties | 6 +++++- app/src/processing/app/languages/PDE_de.properties | 4 ++++ 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index b71c8f671..098e6a5db 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -2209,13 +2209,12 @@ public class Base { "b { font: 13pt \"Lucida Grande\" }"+ "p { font: 11pt \"Lucida Grande\"; margin-top: 8px; width: 300px }"+ " " + - "Do you want to save changes to this sketch
" + - " before closing?
" + - "

If you don't save, your changes will be lost.", + "" + Language.text("save.title") + "" + + "

" + Language.text("save.hint") + "

", JOptionPane.QUESTION_MESSAGE); String[] options = new String[] { - "Save", "Cancel", "Don't Save" + Language.text("save.btn.save"), Language.text("prompt.cancel"), Language.text("save.btn.dont_save") }; pane.setOptions(options); diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 0d61362b1..bd824d294 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -2049,13 +2049,12 @@ public abstract class Editor extends JFrame implements RunnerListener { "b { font: 13pt \"Lucida Grande\" }"+ "p { font: 11pt \"Lucida Grande\"; margin-top: 8px }"+ " " + - "Do you want to save changes to this sketch
" + - " before closing?
" + - "

If you don't save, your changes will be lost.", + "" + Language.text("save.title") + "" + + "

" + Language.text("save.hint") + "

", JOptionPane.QUESTION_MESSAGE); String[] options = new String[] { - "Save", "Cancel", "Don't Save" + Language.text("save.btn.save"), Language.text("prompt.cancel"), Language.text("save.btn.dont_save") }; pane.setOptions(options); diff --git a/app/src/processing/app/Language.java b/app/src/processing/app/Language.java index 88ab88373..4240b8210 100644 --- a/app/src/processing/app/Language.java +++ b/app/src/processing/app/Language.java @@ -25,8 +25,15 @@ public class Language { // Set available languages this.languages = new HashMap(); - this.languages.put("en", "English"); - this.languages.put("de", "Deutsch"); + + // Language code: + // http://en.wikipedia.org/wiki/ISO_639-1 + // http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes + + // en, English + this.languages.put(Locale.ENGLISH.getLanguage(), Locale.ENGLISH.getDisplayLanguage(Locale.ENGLISH)); + // de, Deutsch + this.languages.put(Locale.GERMAN.getLanguage(), Locale.GERMAN.getDisplayLanguage(Locale.GERMAN)); // Set default language if(!this.languages.containsKey(this.language)){ diff --git a/app/src/processing/app/languages/PDE.properties b/app/src/processing/app/languages/PDE.properties index e405b10bf..d1982b8aa 100644 --- a/app/src/processing/app/languages/PDE.properties +++ b/app/src/processing/app/languages/PDE.properties @@ -1,7 +1,7 @@ # --------------------------------------- -# Language: English (en) (default) +# Language: English (en) (Default) # --------------------------------------- @@ -107,6 +107,10 @@ open = Open a Processing sketch... # Save (Frame) save = Save sketch folder as... +save.title = Do you want to save changes to this sketch
before closing? +save.hint = If you don't save, your changes will be lost. +save.btn.save = Save +save.btn.dont_save = Don't Save # Preferences (Frame) preferences = Preferences diff --git a/app/src/processing/app/languages/PDE_de.properties b/app/src/processing/app/languages/PDE_de.properties index 0423f0940..4683874ae 100644 --- a/app/src/processing/app/languages/PDE_de.properties +++ b/app/src/processing/app/languages/PDE_de.properties @@ -102,6 +102,10 @@ open = Processing Sketch # Save (Frame) save = Sketch speichern unter ... +save.title = Änderungen speichern? +save.hint = Wenn nicht, gehen alle Änderungen verloren. +save.btn.save = Speichern +save.btn.dont_save = Nicht speichern # Preferences (Frame) preferences = Preferences From be6e26088213b131cf8c325e63884df31dac2238 Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Wed, 18 Sep 2013 19:44:01 +0200 Subject: [PATCH 10/47] Changed preferences title --- app/src/processing/app/languages/PDE_de.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/processing/app/languages/PDE_de.properties b/app/src/processing/app/languages/PDE_de.properties index 4683874ae..cb42a1eee 100644 --- a/app/src/processing/app/languages/PDE_de.properties +++ b/app/src/processing/app/languages/PDE_de.properties @@ -108,7 +108,7 @@ save.btn.save = Speichern save.btn.dont_save = Nicht speichern # Preferences (Frame) -preferences = Preferences +preferences = Einstellungen preferences.button.width = 110 preferences.requires_restart = nach Neustart von Processing aktiv preferences.sketchbook_location = Sketchbook Pfad From db4bed351eaf836c6bd2d9604426c4154be9d33f Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Wed, 18 Sep 2013 19:49:29 +0200 Subject: [PATCH 11/47] Changed translation preferences.run_sketches_on_display --- app/src/processing/app/languages/PDE_de.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/processing/app/languages/PDE_de.properties b/app/src/processing/app/languages/PDE_de.properties index cb42a1eee..b7c357b94 100644 --- a/app/src/processing/app/languages/PDE_de.properties +++ b/app/src/processing/app/languages/PDE_de.properties @@ -123,7 +123,7 @@ preferences.hide_toolbar_background_image = Hintergrundgrafik der Toolbar ausble preferences.check_for_updates_on_startup = Prüfung auf Updates bei Programmstart preferences.run_sketches_on_display = Starte Sketch auf Bildschirm preferences.automatically_associate_pde_files = Öffne .pde Dateien automatisch mit Processing -preferences.launch_programs_in = Starte Programme im +preferences.launch_programs_in = Anwendungen starten im preferences.launch_programs_in.mode = Modus preferences.file = Weitere Einstellungen können in der folgenden Datei bearbeitet werden preferences.file.hint = Processing darf während der Bearbeitung nicht laufen From f9b6a26414f659184df209402a24370c083edfae Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Wed, 21 May 2014 11:05:07 +0200 Subject: [PATCH 12/47] updated from processing branch --- .../mode/experimental/ArrayFieldNode.class | Bin 0 -> 1545 bytes .../mode/experimental/ClassLoadListener.class | Bin 0 -> 199 bytes .../mode/experimental/Compiler$1.class | Bin 0 -> 932 bytes .../mode/experimental/Compiler.class | Bin 0 -> 7441 bytes .../mode/experimental/DebugBuild.class | Bin 0 -> 1261 bytes .../mode/experimental/DebugEditor$1.class | Bin 0 -> 825 bytes .../mode/experimental/DebugEditor$2.class | Bin 0 -> 829 bytes .../mode/experimental/DebugEditor$3.class | Bin 0 -> 826 bytes .../mode/experimental/DebugEditor$4.class | Bin 0 -> 2400 bytes .../mode/experimental/DebugEditor$5.class | Bin 0 -> 1454 bytes .../mode/experimental/DebugEditor$6.class | Bin 0 -> 1135 bytes .../mode/experimental/DebugEditor$7.class | Bin 0 -> 1113 bytes .../mode/experimental/DebugEditor.class | Bin 0 -> 24770 bytes .../mode/experimental/DebugRunner.class | Bin 0 -> 1777 bytes .../mode/experimental/DebugToolbar.class | Bin 0 -> 4524 bytes .../mode/experimental/Debugger$1.class | Bin 0 -> 1176 bytes .../mode/experimental/Debugger$2.class | Bin 0 -> 1176 bytes .../mode/experimental/Debugger$3.class | Bin 0 -> 1823 bytes .../mode/experimental/Debugger.class | Bin 0 -> 30343 bytes .../mode/experimental/ErrorBar$1.class | Bin 0 -> 3015 bytes .../mode/experimental/ErrorBar$2$1.class | Bin 0 -> 2665 bytes .../mode/experimental/ErrorBar$2.class | Bin 0 -> 1657 bytes .../mode/experimental/ErrorBar$3$1.class | Bin 0 -> 3113 bytes .../mode/experimental/ErrorBar$3.class | Bin 0 -> 1784 bytes .../mode/experimental/ErrorBar.class | Bin 0 -> 4987 bytes .../experimental/ErrorCheckerService$1.class | Bin 0 -> 1744 bytes .../experimental/ErrorCheckerService$2.class | Bin 0 -> 1007 bytes .../experimental/ErrorCheckerService.class | Bin 0 -> 23602 bytes .../mode/experimental/ErrorMarker.class | Bin 0 -> 628 bytes .../mode/experimental/ErrorWindow$1.class | Bin 0 -> 1287 bytes .../mode/experimental/ErrorWindow$2.class | Bin 0 -> 1140 bytes .../mode/experimental/ErrorWindow$3.class | Bin 0 -> 1418 bytes .../mode/experimental/ErrorWindow$4.class | Bin 0 -> 1443 bytes .../ErrorWindow$DockTool2Base.class | Bin 0 -> 2869 bytes .../mode/experimental/ErrorWindow.class | Bin 0 -> 4003 bytes .../mode/experimental/ExperimentalMode.class | Bin 0 -> 4802 bytes .../mode/experimental/FieldNode.class | Bin 0 -> 1585 bytes .../mode/experimental/ImportStatement.class | Bin 0 -> 526 bytes .../mode/experimental/LineBreakpoint.class | Bin 0 -> 5768 bytes .../mode/experimental/LineHighlight.class | Bin 0 -> 4258 bytes .../processing/mode/experimental/LineID.class | Bin 0 -> 4977 bytes .../mode/experimental/LineListener.class | Bin 0 -> 201 bytes .../mode/experimental/LocalVariableNode.class | Bin 0 -> 1618 bytes .../mode/experimental/Problem.class | Bin 0 -> 3124 bytes .../experimental/TextArea$MouseHandler.class | Bin 0 -> 2884 bytes .../mode/experimental/TextArea.class | Bin 0 -> 7492 bytes .../mode/experimental/TextAreaPainter.class | Bin 0 -> 7507 bytes .../mode/experimental/VMEventListener.class | Bin 0 -> 192 bytes .../mode/experimental/VMEventReader.class | Bin 0 -> 1701 bytes .../experimental/VariableInspector$1.class | Bin 0 -> 726 bytes .../VariableInspector$ExpansionHandler.class | Bin 0 -> 3252 bytes ...riableInspector$LocalHidesThisFilter.class | Bin 0 -> 2037 bytes .../VariableInspector$OutlineRenderer.class | Bin 0 -> 5228 bytes .../VariableInspector$P5BuiltinsFilter.class | Bin 0 -> 1543 bytes .../VariableInspector$ThisFilter.class | Bin 0 -> 1082 bytes .../VariableInspector$ValueCellEditor.class | Bin 0 -> 1367 bytes .../VariableInspector$ValueCellRenderer.class | Bin 0 -> 2126 bytes ...VariableInspector$VariableNodeFilter.class | Bin 0 -> 333 bytes .../VariableInspector$VariableRowModel.class | Bin 0 -> 4473 bytes .../mode/experimental/VariableInspector.class | Bin 0 -> 11029 bytes .../mode/experimental/VariableInspector.form | 53 ++++++++++++++++++ .../mode/experimental/VariableNode.class | Bin 0 -> 7225 bytes .../mode/experimental/XQConsoleToggle.class | Bin 0 -> 3551 bytes .../mode/experimental/XQErrorTable$1.class | Bin 0 -> 1630 bytes .../mode/experimental/XQErrorTable$2.class | Bin 0 -> 1491 bytes .../mode/experimental/XQErrorTable$3.class | Bin 0 -> 2062 bytes .../mode/experimental/XQErrorTable.class | Bin 0 -> 3005 bytes .../XQPreprocessor$XQASTVisitor.class | Bin 0 -> 2947 bytes .../mode/experimental/XQPreprocessor.class | Bin 0 -> 5212 bytes 69 files changed, 53 insertions(+) create mode 100644 experimental/bin/processing/mode/experimental/ArrayFieldNode.class create mode 100644 experimental/bin/processing/mode/experimental/ClassLoadListener.class create mode 100644 experimental/bin/processing/mode/experimental/Compiler$1.class create mode 100644 experimental/bin/processing/mode/experimental/Compiler.class create mode 100644 experimental/bin/processing/mode/experimental/DebugBuild.class create mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$1.class create mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$2.class create mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$3.class create mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$4.class create mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$5.class create mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$6.class create mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$7.class create mode 100644 experimental/bin/processing/mode/experimental/DebugEditor.class create mode 100644 experimental/bin/processing/mode/experimental/DebugRunner.class create mode 100644 experimental/bin/processing/mode/experimental/DebugToolbar.class create mode 100644 experimental/bin/processing/mode/experimental/Debugger$1.class create mode 100644 experimental/bin/processing/mode/experimental/Debugger$2.class create mode 100644 experimental/bin/processing/mode/experimental/Debugger$3.class create mode 100644 experimental/bin/processing/mode/experimental/Debugger.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorBar$1.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorBar$2$1.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorBar$2.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorBar$3$1.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorBar$3.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorBar.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorCheckerService$1.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorCheckerService$2.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorCheckerService.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorMarker.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow$1.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow$2.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow$3.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow$4.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow$DockTool2Base.class create mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow.class create mode 100644 experimental/bin/processing/mode/experimental/ExperimentalMode.class create mode 100644 experimental/bin/processing/mode/experimental/FieldNode.class create mode 100644 experimental/bin/processing/mode/experimental/ImportStatement.class create mode 100644 experimental/bin/processing/mode/experimental/LineBreakpoint.class create mode 100644 experimental/bin/processing/mode/experimental/LineHighlight.class create mode 100644 experimental/bin/processing/mode/experimental/LineID.class create mode 100644 experimental/bin/processing/mode/experimental/LineListener.class create mode 100644 experimental/bin/processing/mode/experimental/LocalVariableNode.class create mode 100644 experimental/bin/processing/mode/experimental/Problem.class create mode 100644 experimental/bin/processing/mode/experimental/TextArea$MouseHandler.class create mode 100644 experimental/bin/processing/mode/experimental/TextArea.class create mode 100644 experimental/bin/processing/mode/experimental/TextAreaPainter.class create mode 100644 experimental/bin/processing/mode/experimental/VMEventListener.class create mode 100644 experimental/bin/processing/mode/experimental/VMEventReader.class create mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$1.class create mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$ExpansionHandler.class create mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$LocalHidesThisFilter.class create mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$OutlineRenderer.class create mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$P5BuiltinsFilter.class create mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$ThisFilter.class create mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$ValueCellEditor.class create mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$ValueCellRenderer.class create mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$VariableNodeFilter.class create mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$VariableRowModel.class create mode 100644 experimental/bin/processing/mode/experimental/VariableInspector.class create mode 100755 experimental/bin/processing/mode/experimental/VariableInspector.form create mode 100644 experimental/bin/processing/mode/experimental/VariableNode.class create mode 100644 experimental/bin/processing/mode/experimental/XQConsoleToggle.class create mode 100644 experimental/bin/processing/mode/experimental/XQErrorTable$1.class create mode 100644 experimental/bin/processing/mode/experimental/XQErrorTable$2.class create mode 100644 experimental/bin/processing/mode/experimental/XQErrorTable$3.class create mode 100644 experimental/bin/processing/mode/experimental/XQErrorTable.class create mode 100644 experimental/bin/processing/mode/experimental/XQPreprocessor$XQASTVisitor.class create mode 100644 experimental/bin/processing/mode/experimental/XQPreprocessor.class diff --git a/experimental/bin/processing/mode/experimental/ArrayFieldNode.class b/experimental/bin/processing/mode/experimental/ArrayFieldNode.class new file mode 100644 index 0000000000000000000000000000000000000000..d810c99f65f3d4d566f2002137f0bd181f942ee6 GIT binary patch literal 1545 zcmbVM+fEZv6kVqmhL+*hmaC{-1bYE0h$u`!u$H7rX(A={d1#Mia5~dWrwEDv!!ri( zlIREcQO13y729;=!57%G_d4sWz4ku+`Rm&c0ISGI@GvB5mRaKUx@J_8RkO^K{H(?; zt;!8s)swrHrJnC;TrcOTCc(!LyYoO%wKVle=K{{)SH*dTsa(mdChH9&c~aJzqzC*R zx42Q_3c)m^%+DBDmZ2x58JfM#@HUz|QBT#Ru9C8XZIM95CDTq^RP_c|?z$@*D>C@f zBrXUq`eg(#z_9thSH+3}Fbv7?qeny`84`LK26LLh^Ns2ew+@9HRLPkoRsZ8oE9tY3 zwK~I6?oLZPXFzuO47KV|cKJg!`@ANMKNVImggeY=`oqv$=e83wj7D7$v0@({Vn)I= z!(_X`j+EQU$(X_{!&o%y$`QmPEJ&CqJN^ny>uS9&<1wNPQia=jrJAKH*8H$>Sm=PRy9Zexg}!>%M1Y`Y9<(#U1r%LcOg&$c!E_4E7XR|CH$1@GM-|M z_Og&EW)3n86HTR^WCExN!Rs=f;{}74gfgUCVqC!8{kCNek1g|qSRAFfVVg20aZf^u zVY+=DS%c=Rl@Dp=nX?kF*_vrcpvN=Uj&eNDn`Dt%=H*);gGW5N*^c44G1AJ-cYyvu zNVxujt(M;JtF_jK2McDyD)Bu{yn%4%CNB%aF+g+OP?XfCw$i!jF0%QF?{Ku!}K>qC}4#cR?$y`3u6rt%4|2!Vg#e~MJyP@ zI5CT8f+CL-k;jgfh@(U>MI0@DLQdg+OUZY-LnuzguSmcZh7(`$z>5n+_e1Okb6*hq zgd|(M!LtiQx^nTvH8w7t8wW59g_s5~k1gU99Xy~Lfep%SQa1`!QdpqsI$qM(j?+!t r=`wZOO-gJBsS9CrE;6%F=y&|?gc;84+3KF)42$rUl2d{qvW%Pw& literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ClassLoadListener.class b/experimental/bin/processing/mode/experimental/ClassLoadListener.class new file mode 100644 index 0000000000000000000000000000000000000000..7bc9c8c57873c98c599e5ceee26402a076151f12 GIT binary patch literal 199 zcmZXOy$ZrG6ot>N+WNCNIXdgofUBe6R1j3$V{(<0HYrIf`f3h7fDa|MgOkhQ4CmuJ z@6YoEV1-eFh>%v^DGtHdt05nKQHBzJK`&;4Ydj3WS~5L<5;5Dtz6VL_^tEzY)ixrJ~lpQK>Y9%CXQjX-s4uW}}hytaS4jEf{YvH4HmF z*(H?jt5Bs62&?tef`T5wX>%F#AT0QpL&-xCi#}YG3B|e%sB~2*pJkK2G|xp}OG339 z4TSCqqwId>bkea(2toIZ3c13$w^kRytsk~KouKDo87nR>6P8a_<>LyjvN93JG8_^% zrirJ?V+H+eL?|4#*^EYPQim-qLna^TEE)4U&{4ugczaQ12J#8_pRo9I61Qz3+=IuV z4deDcmFYMdy0}T$K9f=(bp)(&Fr6*oR{h^CdL;W9Pf_XNZg4>GJ7FkITZ<%-2{w69 zMZQn8RJGG$%i+((Irh)9bq@u80k6^g$iL6<-}A13iuL6utQZGa;=Ru~)_WdRUI`a) zafb4OQ7x|D_yDiDw*Cp1_W#Cti3PmMaT?Ru8IHwW#afQ-V;vhgtB-4J71_Iq@{FaK tvoiB<=u)0`^hbI0tGw&~PZTF47O}-V1>8W5R|nhJL4z%isjPl}egM$#y*dB@ literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/Compiler.class b/experimental/bin/processing/mode/experimental/Compiler.class new file mode 100644 index 0000000000000000000000000000000000000000..a14e4885af94892f9dc319a4101f05886cfb3ed1 GIT binary patch literal 7441 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 literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/DebugBuild.class b/experimental/bin/processing/mode/experimental/DebugBuild.class new file mode 100644 index 0000000000000000000000000000000000000000..4a663d33e293aebd6b8c11a5749cce392e4a79f6 GIT binary patch literal 1261 zcmah|ZBNr+6g?LTg;79Jz@dP^5Y_<&L{Vn&WrB$re3`+7Z(Vr;m9A~t&Jh2Ji9Z4p zQR4^WXMdA1-sdU8HVm#w*ZcI`d(J)g_UG?!-vKORO-CDHCX50{#Ift|TeVsyGY3$i-R3(YnFD{?iIC4aoxPc$*xZZ5g zImsEQ8-yVP!?;1{jw5F?@b*MR=xgSZun_|{6|Cy|DJ;XMqXxz>&b(nHPW>fJwFv*0 z)C?vtrDKvX-7uGn=9Pk4$jwIva+oIQP8t*Dng)6?@qAN?`CZw-jDcC?dA8{UN}e6Z z+jdROR{7lQWKZnA6R+*aXJZMp%ceMgQ#OOT&jaeMB(`(7Wru1VbXbHdt(92vzDTxs zzvMvwvnd-5t1eTDQukd0E4ar?Dtjahw(gAr>R2VrU+QFQaUNPFs7H>F%f+^w8@3>u z;Q0`L5%Sm0PyAW%UFT>WZF~WpX5kCEKJrr=GJMad(+NgSqKD(56a@pl95Eh!=;s=2 z60Y*Q0Y1|>x~8grV3rO($(e-{44QK%$eM-G&$zXwnO|}HJq$Ceo#0MZJEmjCwJXjs zmAlB9OB}Cq&Bw^%3C8i1Rg{#Dm9*}ej+|U~=4CFq(Mn|wCJJ10fUh~^S=T(j?*je8 qq>cqfFET^g|1$r}>@M>YmVe;BRFgU&9Rgk`RwKonvJxIB)Wbht@G*h_ literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/DebugEditor$1.class b/experimental/bin/processing/mode/experimental/DebugEditor$1.class new file mode 100644 index 0000000000000000000000000000000000000000..bd9e889f20234a3e90d0f531305396c2fb33ee71 GIT binary patch literal 825 zcma)4+iuf95IvKGx-o{hr7gFXatV?XE~Y#o6(LXw638uxqP(x|q1ocBD_`3F77`bU z2R?w0Ld=>xAcRmXt#;>l&diz1kDuSZ19*tr4qAlaQIRKHmf9SI(>&#nPmj3JQ#O^# z!si^<2cuM1dC}i;&>{GT>R5%D68G2fAt#lC1;R#ys*@_@V_}BRl1k?$(q+Yl3&KJ* z(PjUEq>JXww=Jy4+UV*D;a)I5Z7?QucBGOn24U%pBGb337bLm&jyWbv$h9g7ng9w z!DT`)Z+kpkwdHgt%A^^;tqp;sjP?H|BDni`T_pTM+mii1rhDJ&6X_$9WVv02U9Kj1 z>ft7C2^`ltOZPu;l}vWo)P&Vw&}2Fd%M-gguPiLJdoPU)d?!<7$tAAK2-5U9Hz`e+!9= z!~-9|MH79Ll z9=)WbI-F$67G^N^&=LraK@Phbw7AV9kez)ef5I`e-8%Xok+A8!Jt3t9e4^ zolJ5PSdWWT=2K~uvln2?$rgC9boRlRWp`y={XUuZg_%<(uocGtY|z9tYkN5D;2N%b z*c1qtZI6!|uAH@*)LBmZhDr`4Ah?v?|B?xG4vNa8^h&w1gFhzx$Z2Hx6P@OTTZmn< zvm*0x2X`4xDwSskAIPS&UDB1nm2g;RI*ZCvw?1zi%=P=PH4l9!mt{#MZt)nJe9l1x zftv;|UxQB@9Y)Xd>j~Qq>5T4whClj>3m**Fk5V5oo$~v4!wlSe6t2@ETTN; z+eKL&eS-f5SO1D3dhkTQj9X?o3j%}7 Ai~s-t literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/DebugEditor$3.class b/experimental/bin/processing/mode/experimental/DebugEditor$3.class new file mode 100644 index 0000000000000000000000000000000000000000..bdb47ccb88a90f5b7cf0d9ea0a5a2afe588bb5c4 GIT binary patch literal 826 zcma)4+iuf95IviOx-o{B0_E0H+PabxE=KePsR)5ekU(xh3d;N19-1xAIRh805(X_}YqO%#5YD(J3 zJbFP%eKgFJDav5iK}WzpmM1dGCA+^#jwv+`mIT%tRGylMPM8@zPmL;ctSUpAN`WOa zQC0Ae)5VMC+hf)frImRqa6ep})*lOW_PLTS1TJ`Ruarvi2P8SlI&i7S0~*vh1F0s((x6`=XpuCa@94|7_6EHfygxc5xjy z9o!HI7j2J+Teci`B6XJ2$P_aH!F8hcrLr~qe~kBm70B9$I?W5a4F_Z< zMdo1(+YBeQ%Cpf2GU?=ibS-c->^GUtqUzM{&T9*E@!l)V6W`BeRZ)dIJcBl$a}d67 zN5Pxd;?sr8=y`rUX4@j};O=L5gRi*wvGKWNvE~o6#U@tR_LyVQ%ecZfYryI}$}_%g zl;y!EcwcbsuNWeLBX*h?tH1r`F_?ihtTVff+stoagEa#k9>^vFep#J1D}TQLo4m?s literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/DebugEditor$4.class b/experimental/bin/processing/mode/experimental/DebugEditor$4.class new file mode 100644 index 0000000000000000000000000000000000000000..5601253fb5c0d983c6380f1fafb284e6d43370f2 GIT binary patch literal 2400 zcma)7YjYD-7=BJ$y3KNGL%9?XBuatwx)sri;bL1_rKT56ErQoga%i^Q?1sIh355dU z1@#~J#gEL$C!Ml5I^+1+zvPVLdv@27PA}8UWcKWy_q>85r?+4QScPB zG8_-T>dT%cs&rBtDR_o$WewL8mT(way^`T}4^g=6ZsTPbUa0D3w>%kTKyEG=mf>Au zxR&0%pWR#b%rmr%5eNxTa1I4+a+TyrpiMx*)35XmxyP2=2g6i;|h*3 z9NpfI<0YJ6NGu31XZucpl0J~`i5xdHHKX9=xT`hIU6$mS94m>!(x_dV5|)3}6J-@C zoaE@nDF)SWbHXGx$V3U98ws32kAgHqdbbVd=tUpHe&IN_69yAbPB>LVCV6&e^u{-z z$*35BreKg^XvY+`ILk34+q}1;`>vQPIYKWcXkusrUfVDMxjGTN%<($jpt5b>V>lRL zY1rDVV_06!qr+u_^G$}X=c7ZP3DZ&EFpI)b39Gj_GPn>oW=VL362lQ{Ohe{+rK07+ zEh_C2-d1p#!fk25F@jMBg}OYgmpAn|icVgxU_!z8#*)I!INrg#7)3sSN8O!%PC7Ls#$x!>NYmY=3|wj{=b`j5KRg3Zxb>jeO5AwGqeB>rzXp zHh~2N)Q_l)joTb0$=W>yQ|L~D*uTiJBwcgLgY>BEN+)tGh_aS6P5PCh?ujtDEQ zZ{Jh2_x3-f)idn-B{Vz`n#uzt%*?_;T5(#FIS!#K{C*fmB3G;rEur%#eF2XCg;ao7 zeuUS%hW0g_4$%KAUi|~Z*Xct?fb#(^{)VwYwqHg15I7QLn3yh(d;Y((w!B1Ux9T&Qmw0FQ?Fh(Or ze+ULK@q_W3i9gDCZnr3j2y4>x-qZ8?oadaMzrKD0kjA2h7KY@y=UUwNg;PmY-7-({ zt#$5+DtDx5r{;O7R>_rxbiI)&4Pl1Zs<~mNY?IUj8M?UVxn6dKTWj1aaBo9cR80EtgmeGeWFk0= zAq|5JlZU2ofUSXZ7-nb-Qh6qvvb%X?qXRc}-HeVAT-0!Zq3{1F8MuTvL!`oG!L50! z%IBt>HQ`=uk|bKgqg|?-K3YO2y^|Zr~=7 zSn@4N9e%N|$b$5!BtongGX`#fWf?AhOBM+KKC(1!y2OZ7+5T(W|me|3%wEOByFS9G~Ja%PmX?uk^F+_PM~u_$$~#* z&0e9C?grT?X&1WbOF5vY;pH_&QC`x?T^PGKwTpot2=Dy8jqc(6cO>>ehm;b3!c-`| zhm49Af{He*vSV-1&fX%*-l3Om)7-qL8Q3Nge<1FB46^8{M`~oDR_-0#r95T>Pb^CA Y=IGdhEavGOrl#g_pH8Y|RRBG|0bYBEPXGV_ literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/DebugEditor$6.class b/experimental/bin/processing/mode/experimental/DebugEditor$6.class new file mode 100644 index 0000000000000000000000000000000000000000..1020dc4d75a2347f1a621a6cf572c6c6fdbfcc2e GIT binary patch literal 1135 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 literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/DebugRunner.class b/experimental/bin/processing/mode/experimental/DebugRunner.class new file mode 100644 index 0000000000000000000000000000000000000000..44b0e4c33af1c1c48ed2ac1099763778267b723d GIT binary patch literal 1777 zcma)6ZFdtz7`>CU-8L*GlvWUhMg&aK$|@=-fr>2!+9pt&8ijA$?VM&I+0B{ka_YbE ztN%hhlAa^y_yhb=9`4L;ldV+r%kI3~=gxEQJkR{~_aA=(xQ-tzaVNpJ!axBbA6mIRi|^<(kt z3|fx;&TcKc@Ai5rMcwa5l1J7mErG)7z9)N;9|nC3Qvw$=lscsOTt;4d2oe}up^O6Z zux*TELf};059Fh`yCc=MyVH>ZGxgAOJ1tlFdY&$hMQy(?P|fD_R!3?A<2zc0Ko987b*@Y0!N6ZL#{w zPBtUgd){z+##swj1S*+ZGp1$>r@{Jj_hi%WwZlNC`jL$?Dgss-C2*#00y-|sbTg?~ zieJFT78V6gzp-iK8XSS?JsGVk6{;kAfwT0}fc?-}3wm)Xi(HrSsjipn0;}a?A=yj& zHwi1O(zt6XS2KQY;|tsnm|_~+ZTiPjnLW(FXh~LUTJ)DTzQQenrBa9BnT+fdYT@?L zuGIx3_oe3~8n@E>O5l@V9~N7UQW!^6Thcj5rJcKL6%^mKbM!(AG^BH3}fZV`@ViFikUa? znzn>}L2f>wz!*n-VvvKC&L&adXpQ?CVO19v4{+jF4s$rkZ-IZ{3PY}9nxj$z!zmOw zV*pNLhNOCQ2D3!dX}rU)rrk7iV6K`U;Ox&hQLX-t_Xe2Pzh4N*n?t4z=`Bp6M%p{( zAls16r3Zazu%bu-Z1R--CuXISUV4SgPsn(6fNJ#spERnA1AO)pH>$rSMb=kO2?ZMlJUCbW^!zBJUnq@O3|Qe^9H<2$4E g!ce=z9qr3F&oNpPLnq8)Gox`lB@}28p2PRA0aOscRR910 literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/DebugToolbar.class b/experimental/bin/processing/mode/experimental/DebugToolbar.class new file mode 100644 index 0000000000000000000000000000000000000000..0e43e41ccc5a1e1e97565c794aaaa4e23aba7ec4 GIT binary patch literal 4524 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 literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/Debugger$1.class b/experimental/bin/processing/mode/experimental/Debugger$1.class new file mode 100644 index 0000000000000000000000000000000000000000..9fb972059add4f2b00967c8d421e67ece84c944a GIT binary patch literal 1176 zcma)6U31bv6g`_Dku-&f^|RJir8cC{6h9wOUuZkSh(&Fu?;)%-Oh`KUK>wCAEzbDh z5Aa7h-i2W63y_&)_wJs1&)swH=J%hUzW_YLYXuU+)>#-hJc?YuXAOcbxA?a+9=ZeW z$F^tf@lMj~@vu}=kYUjK_RzLGo3QOppF6RFEJN{f^>gC;cE{rk+4$6rO1nhRT8N=e zafY^6^7+?B5{5+Ia(#-kIon-;ntSA&edGFW{Ene*%=VZbsXiN)1}>j4WE!MP4h#hi z3a*RU4GlS{DrDT$u!I!`*$~iza63!}9UdM}bSSn0$M#O_&=q#Nm=WSIlxL?f&9qdb z^T}c2=dg-31rJD-g*4Uh5bGoj@49giGMEeS?T@i_6_4;l!D9wvKGnoWLkXJ<`H08= zRnVAIkbg=G&MgfF$_z>z1YXCcq^rgvG96Fgl=n8O3MwS-{Jc{q4Lh(H)GoK3*d5w2 zwOz(&ih8O?K@vLrz!fdMJT1tMXm~32zVCQ}xH%tqd>V8$yueFJeK^=3QvWin8!aao zSW)6z{jO_qv1*O?j(A)b@wKM!^RVIBQN$x`P-n^XUW26TqSXMsC>o9Kt3>Y-G}>LJ z*;}$@8Vlz31@dO)0=oGF#qVR_E&8fs2ReZC9=FLBjs(XY+@+D>9#+y&4k5)})jUW3 z9QSF^N7zWM5uWN_Mli3KoXkt2A~KZRA@WiiYtlzlq)%4}t0|$3U80asqyG-bV-?Tw Mie@TN3vzn?0!LjnivR!s literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/Debugger$2.class b/experimental/bin/processing/mode/experimental/Debugger$2.class new file mode 100644 index 0000000000000000000000000000000000000000..11bb9aca448cf3cdafa881e7a4d004eb6fc76062 GIT binary patch literal 1176 zcma)6+iuf95It*$n7D3YLb;aG0x5Oeq%Pt15a1;ZQlvm7TJ_y=mej$Q%9p@zA+Ok`ItS#Of8z#j@{ZxqnC~$=Qgc2m3tT;6$hAn90vJjf z6kHdx8yX5wRmixhVFhapvLT=);r220dptUx>QL^6j_sY;kt^(MF(<@fsLoGemT9Fy z=aZu}C}15M3LcOuOKGa%AvQ@G-glEQVlbEBYfrFE6_4;l!D9wvG1b&ZLj~Im#h54m zRnS;akbg=G&K(T~stigJhF;I6r0d2qG96Fhl=m*`3Th9<@9>j(LnN>MWVwYmjtZv>Kq7MWfMumFQi8M!Tyt zdrP)VW69jTK+&vSKsSG&{CxtvMPGH|KnIWpxJ|ZjBslKiE{zQLu$F~#2r2gJ<~fSz zxKD#V##UyH@l^jjhIz&0WL^@Lk)z~>C`wTRIFKuiNPPwr=QO z`Z{oW+KZIi*wA}%x2uEd%^WfU#RD}^4Ofxw!@UD-MLA>zN{8H?*z?q$s|B*rz7tkg zDM0H#MQD=AK)Ka{Bd|K#q@x0dgKT+WpK|a6vOUSRVWh05?Lb)+zt~E$iX+Euw45*^ zodWB)zNOqyV399Y90XKoi+GXadsIqll~lMJ1q8~(HNXxAoN$+pbcRy_)Jj<2@1 zToq`$J*Ahu?RZXfN8m+mc107Io3qu97XEUP$KR*R`TrXAjzDIeMq?fVuS(>Q=Tli? z9tA$VCh-a+pI(<(NKbD_oWv>SU6LrKyf-CIr@Si?CCCB{T$NZvO~9yem{Tps)7x=x zPY3OEj7r=acT)J6nPKb&>a)?BfLgstJv4&Y%cDU;95i@Or**bvA^ewvWLnOgmb z3F)q3Q{q!bK&A+!+2*lD39P#+3@Ph1+?QyvQZZFJTnrX&OFU%Z`Bb=ZWP4cYk;D!U zM>h6cKkZjr;xV&w0liEF7-6;R$AP6c9e#BdCQV;qc&SDAJj?a@aeJVnec#UEYwFU> zZcjW&e2ed>PicZjWwNB^YhNwIX3=UHxfo(>X7bchOV zgF)XD$QO&eMnJK|OO#Mrp@h-`C6v}Dp|m^+rPWC&Ee<{3bM#%r8S-|PPCwFpo*#8{ zd5Cl7wIR-%*N3=ZmNP?KG|MN3STf7mAu47$H^gPLoFAfUKF3?XCcf(QTS$D; bVW2~K&*4jaMKpsa_y*t8sX+B`MfCX_Cf?hS literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/Debugger.class b/experimental/bin/processing/mode/experimental/Debugger.class new file mode 100644 index 0000000000000000000000000000000000000000..37f813aa122b6b056e79d8a30b5c7bd6266f7dcf GIT binary patch literal 30343 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 F{{!9|tH}TW literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ErrorBar$1.class b/experimental/bin/processing/mode/experimental/ErrorBar$1.class new file mode 100644 index 0000000000000000000000000000000000000000..fc02ee6e8f14856284ee24af6b41f74644fefc68 GIT binary patch literal 3015 zcma)8TU1n482Ly?7|t2bIiq0rGP>A3 zyI@votL4hFw54O(TH0!5t+Jka_NB+(dh8|o_L+eO^TMo|v-kP;f7{=Gn_vDpe*wU9 z99G~FSeUTPh;G|4qc=2YM)i)!~{h0pD8QITr#2D*On@-7P8<5tdoJ+mDJ+0V6tszGDF&~$9fg_;y(IH+w06o zQWmp-G@M<(jy~js#*Z8Ga6eiVJU|Gp%cNoh+S0*l)s0?Ugqa05E&RE3Fh)~P|n6zsZL-MHO& zgC;w!bi!8Q$c*r6(Wo@DTg4s>F$R5_-R8!C(b=M4uYl~c*YENh(@i)R!+2c96A1ER zj@A=4qWX{|KBeMmNesp(`d*OaXH`7s+G9ybkb_9zdD$pO1Qy+-HD^pVGDo_C1o}l4 zFG=VXOHXKw6^%J2Cr~B_f{}Cyv9k(z?1;du8`L$&1dBg2P$oA;_Rhedi{MQ=TNc`s zQi!0OR00dKE&qRHj^B(<4D+{MV49nm8?=Nw7ZkiNP=2Gf#JhKxNh_kSkIC6G&2@xB zc!^9PW_ybfiJNj@Z_u4SGpgc4e8jPpOhh$DcbU`aE-)k0A|_{fqnu%C*f4Z!ZCtZ$ z-NqbFJ1_qgcnb^V7z7H7$42o*c zV)`l4Jt*Zf$Q6_*z$j*LC#5NaGR)-a!z`4Oqr%;@S-YASlSguS#7X&d^#okXp)4Jq z2_17#!c+R>`I&yxV^QgC@~*5sjr`M?o5I2r>be^O7wY}qdfzd$mj#M_%iHRTZcpLP zQ8Z-pHP)qY&nOmfY4OU(Iq=`cIkbE64LW=~nvS8gK`B#G=-%fM`+TCQ3Xa^22E2 z`sB#05o3kF)KAu;!h+~X{|dR~Eu-He(Op;S-%st&j6$JlpZ_fOO|o@D@}}^@DWbI) z-PlIFy)L>Vm`kJ&6YC?4$x+P1C*=5)gXlA?!*R6WbF^{o;CmPMo4I!53u^e1E%qz6 z%&*xbkFxkv*o(6`K(r2XJ&yA@jf=QU0Di~!xPl+>CobV{{3v|*N#x*?P;pU|;8#(B z-`wbKN=GmgU5_Zo%giEnNHG)p-F%wIDfkLrrSIFBsjuO6=IH@u)*E<}w98n7x9~Q1 zR}doo9rC=(+nqq(7!yrVAO!PED0mMT!>SBLL4BIWgUY}dg|6ldz?+t()C~C3dxcFG zC9}uqQoyAs7$(gl&v)eDFMdf8V{~BhIp4C*$q<;NlJ1YX$$tT}mNhoA- G@bfRi0S1r& literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ErrorBar$2$1.class b/experimental/bin/processing/mode/experimental/ErrorBar$2$1.class new file mode 100644 index 0000000000000000000000000000000000000000..2e9331c51fd3d9dee26240974572e222fff7d8be GIT binary patch literal 2665 zcma)8S#uOs6#i~z>CEJkWk`S!6IlkxCIbiRa*GUi?8}We4;GkcY8uIDM^^F%G~8F_blHzCl4Rr{~bUN zJ~dD!&@t&cS><__J(`+uaw?@}CY5VVDBCylsR7q@+#{x&>`Cr65EfW})toYCQr@)Y zAJV_)9d}&00#Sd=@{+r$F;k(+K7q)TnNKQ#mW;g9cUM*Q5u0~9Lx3@+@?}&3ci(39d=#wddBknzBoG3ZJ_H( zSeBC|UcgRzXZgxCeTPV0_aw#vV|wAfuLir&V}J-w1kqham3R>w7-3t@_y%4QXn(dB zgQl*GIQHTd11}3SuZVGpePEWuqsqS!z%Cub9vqN3h(iM6I{(tz%fk{!&@W(Ec23Ql zewPtx|36$hD4oQB#4#La@u-{?xZSxrGLNc}!stN2%ZR3N(!guaaKI@zBgcJ^NyaCgUTOsauT257V|Wrr&WL6 zB4n5yf^Ef0@6!`Srfplf{dv>#l!r~6Jt0oys``38ih%lr9z?v+w=u*?ui@?hs)C!k z&aQiqo!$3P+xau$rxo9vjHf9P9-)21>ihqq(ZY zkNP*z6V*3@8Q@JxN7bT^=a3+k=7@i2j5hM`&N;|m&^m{$MRW|_#UI_jA|>zudom=| z7SY=^hy9V<9o#KHUoozHi_e#YyNY=A;NtOU5hs=%ia1rox!!PVZzR+ky^Fnz)Hmnw zc2l$n^8wU8quH3lXjAwbL}w#n;qWym&@vkpP0?jiMO?ize}Cz!DN@7)t-mJl<@|mf z*iaCVDYVkz2nTO9r%a5!JdOjRhTT=-B-f0n!v)d6!b`vs^~m#Vi$>~MhiS0^v!WTF zalI`z;tSD&uS6@p6K(ijtj7=JxzF`Ct`Ed!JQQ2-C*S%@Y!4D}f>>aX7ZT8dITSF( z6l8D<(>O#6ZJ3zhE{toqjO*M*;FErXyC`lm(eL4XYWaYA4#Aj5140Hh7_3>$vj-SF z8Q8ZIYN~J(A8`%ye~phZ%UyzZZCv%I@x<>x1wy)p literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ErrorBar$2.class b/experimental/bin/processing/mode/experimental/ErrorBar$2.class new file mode 100644 index 0000000000000000000000000000000000000000..33292428e831c458bb83dd11c255a787810f18e8 GIT binary patch literal 1657 zcma)6Yf}?f7=8|k9NaFNrlO@(q!=^_gq5^aTdb|nc&Q0$ad7;2*qp&Fo88RWjo>fp zS9KI->Wn|YKh$sPb2ib^DRq*a$+^9k=Y8JGo40?x22jU6i4lSGT@(8{NrGt0>%?vC z>D{h2K}Sca3cZFgu~|{3RF}vLO#PuAD^KmDo_7yViU7*e8 zP)3)jawUj@^r}F$Jfu!#Lm~iIX%x6d9#@ zY01F^zO;c%3fvfy5Tg1d1P4<%E%CL$DT{R1OLlCk*X{p<*lcU#V%jn%^{)1NDS4g2 zti(40g)FpCS@9=Hsyi;uqC}44UMeurcN@gsT@ysuSQPl;ACQe*Uw6|W zj$B;8l7O?N(-uoxZLt7Olq-F}2Mt+A-@5n?-?J1|x2q%Ow04-s|L6`vTDB%Gxwvc{ zj-@eaU<3|+#1#qFOCR39NpkU%jZAheZ($@Lh;Ql>StPifEL8%Nnb;v&q^}%X_hVkN zFh4TF*YWj~^tMztD}IUVH1@x>%UG0e$AWF=--j>7AzO)Xob|Y8e0@Ez-8ueY&MaC) z?B7P@hq0YWEuB7!+Y&8-xuN>V#T{GCu4=cN0gE=$hAr;iinv(~Rg&n01x~U!14W@= z=LdK8Br(SOqugD_2tUB7&cEc}KHO(Kjo`Sw%U%Ta{zidkmpbEU;W#m{@)UV~ zz``p`Jgm;|<5X*54`2O>(`(Oh<`w217SHdaQriQs>wCDkhaa9%*TFGbs}Ym+H%(l? zTR5W1xaLt53z!x)cG3ciXeq-`?fV&EphsNA&zYrJ{DNylT*M?+uu7Z1(%MOkyrXbV zLP#_uCj{5pWMK?9aC3luj;oFANc9Drr`+_zAI&cNp<9Y_xRt&AhTB~8Xkra_xhqoM Ks@va0e|ZmbS*U#g literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ErrorBar$3$1.class b/experimental/bin/processing/mode/experimental/ErrorBar$3$1.class new file mode 100644 index 0000000000000000000000000000000000000000..59f997ae5f8aca0be5c1a742a89388abd12fa835 GIT binary patch literal 3113 zcma)8*>hB77XO`Ia+BsWgqElgK}K54g0v{2CW1-`+L%BjAqWU^)BVx8(CORWdpiUd zW>nOfaT#Zv(GeX7++vk4TE=!OEuJl_e3+N1(yI90o8~!2lzti;&X;07)j5&U44K?=9Q)Q1JK4BM9TCk+w=uO*)gS4LDqtgR! z+1Gt$ORk37ouU(L5Zv89Z{5G4uwz6J>!q(v5L}`VM}yfdRIt#PKopAvKj=xI6RRwAoes;HWQFUon%+5q_UynVQZG9l8DQrY93qt3d(3Q^LM%yMmTF&={yo^#G?zXV`Vy4&0DBOdLpowM;9nwK|j6N`S zb)MU$Qo2f_{(CWCp`TegFN4BXY$M{SthelWtZY+)f~6PIXvm?~`xLfgNT7@;FEhoQ zo)j!Q1Eh17gmN7jgNhvrBiPA^Qj&JHXUhbvjS15}51-{njovY0LUu&qVLU?h<7_x~K5VIHTM(*x zOyMYgPrx(1+Vsck>&-Z=^Bgm3Q3+K%uJ8n&G(mT({AV}WS<6#+O5tf^d9$yBVb?7T zJEdV3d;)*OpDp}}vtYJ_iDBRM6rRO%>^sEQpr>>C07pfxN-~c*jW;vbs<$*Lg%=e5 zf)|+yK4y-&>O~!E$B4nl-xOX7n}hE>tQ+wU0ZgZQMd6=ew#RILD{W*jb+zFLF47f3 zFjRTjbQ0NWHFAv6K4e=~wrrdZToZ^8C` z?PEEIb(F6#k(L%SyMdOZncTcFw@pZpzJR;+h=ex_JG(xH>Rk0Pnma#1%ZEl3m-0Ws z6=Y6G4;FK$xCa)Z6_;_1;c{F-j<#?wxH43_iadrZA|IIlP)~!okqvb^BC|TKLXuRP z6M2%x&`4R*ISutGmQG_u1swxZ5?%Ef(t=Z1+fPz+1?#$|aeF*>65rOJ_gnkl!k4qc zcUG|Jj6(%mDj3`lT^Eb4i%;R`EOA9^ynpT_;&4Q&n6cwp%X>}ie7adcH+pFrOi z(7W0iD#*Wz#^j+X#FOKn!uM-LeIHdEO@juw@(aGKiycAD)rzcu9uv3fJSZ18?y6zKq}_*@-W>KPC6$8`*{b z$Zq_X>vysT-^*V7k2?M@S^OvmBr17H$e1*9T_nA7r4+){-b0izeYMms!4G&9$C=!H zcp0zZ4q9%rRA1*Vh8$kRzqpIDf7y5gdx+ChxC;NqBh+$&egVJUs-IPkwzTncgDz_O^a4(7D}ssMkMkR7S9mBbI+iSCqvl2iMP1M V_^$XirnpNI%FDQ#kAXKozXF(OFy;UN literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ErrorBar$3.class b/experimental/bin/processing/mode/experimental/ErrorBar$3.class new file mode 100644 index 0000000000000000000000000000000000000000..79949bd9af829aa3793ab1f5066c5c3edaea24ac GIT binary patch literal 1784 zcma)6?Q+{h6g?Zekt3AUxE~>u784v|J0GHiK*6OzQnwWBwA3X`e{Sp@SFJ4>NlwD> zK>Vdlac1ZY55PkK=SogWhtRP-_DZ{Z?>T$!x%=l|zyAT?1AJ#;N?~~r25l2Xp5Jx* zLC3h}a9~2OZ~R#I+;-ZL5KLL+GF-mVTkc^^+^g|I?pGU(C<3ETbjG zE&2aG2%nhHK~Z$G%%N!yW2(A{l7)9)GD7P|mbmX=3GY$iU>GZ0NMXIey%&0Z+=@e^ z`!x&YF;eOvP7`Qr==C}#%%MtaBzD`=VKEW1A5h3*%B1K;#i*y-PZ+XpV;QR=#u~B4 zGAE`?Q&L?UF0NXj-OjzRZ2hop2I5MG?%!a!x+ZSY`npRGoG({W*8ffAkF!gU{t;)GY@1u2wC(Ki?X)gD+1Pcz-3#O}aJUYEIKh0$sg1-?6sk=b)N&yi)p#c`Hr%qn?TpJV=Eb>#>P&D9a!`WcsZ ze#JY_vHY-5Il{`?2^=DmoizX_1Bpe)?Bc!h9u7Z`EpTIrvmp&xP0c*;U9C8yy5@= literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ErrorBar.class b/experimental/bin/processing/mode/experimental/ErrorBar.class new file mode 100644 index 0000000000000000000000000000000000000000..1cb4fa38a58280963adce636e79099bb0727a535 GIT binary patch literal 4987 zcmb7I33wD|8Ga|b$t24V(m;V2kfRim4PhaqY6)PMkV0S+0-?ba5huGtGO)X|%+8Xe z+SZn%DfK?vdbD`O1GOO8NYRSoiDyf-)~mH*sR!1(>f>X4|C!m%ZpahjK2P?)zW@KO z_d7P{|NH1;0P65>83huqPnbqnOD6SrcOYg&w1C!^&`dq1#Vs`&XfjR1T&J2cyb{Xy zst44*K(bfRZfaBGT2#WcgsJV(OjC<&)b#EiOM=uap)|X@LyuTJ60RYMVYaB|KF!P! zPHi;eNlT4e9cnbCc_&T zj}RpB?u|l81q-l{&f476xjWdpy*U_a4z@S9Zjdl{lwq00(BCK$?9rpqZB$Z%T-D5vBipMLOvel#f@qYnF5{zoJSkX@CcdCs znyK30pIKGyC~FfoyZa4OumR07HoCza$U9ZA37ZLrxYkD*W@KK-HNT7&2~`uul^qlg zFiQ}^76ol6;;UAFLKC*$reF#bG25!oeFNnPFkTyO}5&y(15ox z)r9o8)|!fSY36pdE6Ttr4;f)K+M$}dSi75Et4C+xEty38Ftagqq;6Vu6sZ}P^Tg9# z$4GKRSY)BhS>1Y`%393MXID)%IVRz?sqGeXR*RZ&MBUB8WbWxXeOt{2HT zsT=VI8GAF1%R3Opj4F^(BxZ31g(&htM?%4VFcTK7*5kUhRze|hB_h6*EL*r2OT`33 zfz6bHZZJ{rs+!ntxoNX`V$!CZO47m^Sn^^5W$_ z+=e>@;hls|6@~U-;$8GMO})KGi)n7!sCUzb9aZg? zNTLm+*mD!f*o|VmhcL8d62iG9&=#*4?~^b)do)@OUEw7>px{AaZ$*tnMDfw$n#uSm z>T&C}SCoATf&bH)%#x`@M71;<-I;PX+f^?=KiOsGrg4w1Qs&xBgOMF$i4$P?FvEIc zC%FB}q7^xJ|=;jCw0qp#2DELJ|710Ng1DTYhb1aY8Rc*4ny=b3O*%lENgvQ zIAt->9mi*7e1=8J2Djtwei}cf;B$C{=r>YKvTkb8jX)cbU=a_R8e^QF%v9SPn5;|b zQC8hzoRYA}Haf8|-|@kGCle*->&f}aDANlCTjs+Fq=gBF$!Hwd3B69^jEqM!RmJAk z)ECwg7W0jQFXBt=$V9SWhp2WFCHYms#jjxWWd&#P6~anQB-kA=TE^q(0Q*X%Sl3VB zoPw_jhQ*fQJnX|a@GTkN%!rq7CI#OXn#l=axoDjC=wtyFf?M8`L3dHF?H>shHt%s< zC-OX--mEk7jlk2H`BjE>%+1_u9Ch;XGHF0FmD^$Kgid1*yBsYdlG~FCek9riZ_>`q z19(coPw+H5OOZ=h5Q9VsBY_1v2iCNEAlc8Zy)Upyw6z&Rn)YY-g^Zs|xNZ{U3Vvw= z+0^X*QONVGf?we|Q4KW#S!UxLH@bZptEevHHuk2^( z686#TzB%EqCm+0`@{8Y5q8H#;fnttqI5{uiIUxjvb24^Ew!Jnz%cniE9NHsWPEuXV zc>!kfJr>%Wwaoc!zAoWqeC!5tEhME`a~72?OHX3%NnDr4k{bUh)TB{c2fYty)Cm3I&~R(Mb2W{HU-)LMHAt=@-GDlTp1r9n&)({^#ckcYR3CyF96Ul6xm zBjLf3b0^5vgV*wV6&rZ4V$9xC-KqTN~CWiM*D2zCzR?jfulogVbp4B@bU&Jbe$np3!E2>1DG%irwy_pRc++VXch zF6OG8tM_t6z;IPV`R^Crb(C-APaxnfO1G9M-bk;uU=g;_0V@5nhnByao;`@IID}3d zreTi|3-{2AN9gAP^y6OK&ha3Qa`(O*j}K%$J|J31+js+bKcl8VSOOow2kG$z_z)iA zjuQ_L3v1zN7xnc5*K5w;Sf{^c&M-dGTARkl2QhDz_ar`j1}8epKR=A23U3-;NaL|I zzM96@PmoU;BWf1wuh(|(LPjcZKi_&3C7n2V)scb=eQD2*;3b&0;tbQU61p2 zWELWT@7Pk8(K6q~_b7D*<@`Q=Kn_3T9S1am{&8{_7@mcK5q^1X3_B|l{|g| zJNYftJj;iKDR$8}2h+H~f#G}MAxz`!a2h{ODb75&v7zv;&`#0tDa$7{w!naIfm2oScprEw->OPX}^W*op{l<#Y{&q*B0}L zgkRg)PUuzw@7(|J|4IG=s?YY<)n+qSB0eez(~F(N`SWS~mh;PE{$d(`8pT{GB?4Z8 t!u&Q{%8i{0mtz6`Mv4Ob9sl6CkWatF|7iTnTY_U;i_b-8U=^`H{{#2CO$Gn} literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ErrorCheckerService$1.class b/experimental/bin/processing/mode/experimental/ErrorCheckerService$1.class new file mode 100644 index 0000000000000000000000000000000000000000..8aa36c4688d99e3d92e68c17858593c3917e6ccf GIT binary patch literal 1744 zcmbtV=}r?-6#gzPOc^c|%IX3lRxM>IAZ~z&lvb-nqYzwvXol$x3=A{Pbc)2phwvRt z{7pi^XyOC-)5N&NS23PDEukh&8)B2&yYzhLobPP?{O7|b025eLP{%Nlb!=Vaa)z}Q z+p;qvCU&yIF}8%|YGy3qIJOgC7y71fmV~oy=psC>z|YXSp>1n1QzO`e)eWJ$3K|$f zN3W0amZhzlf}z1(H*(=IvXwrrv1x{uZOsfz4T+55+73gsx|Rj8nqMo*5;}N@E_qMh z%ovv8&N94-R994i`*d|gx#{YXm2?lTF!UVhToU<)aM4F(zw9aqXmITW%wzXM*DrCK*(Z ze5p=`s(bO|q360MOysZNnu4nggH_{R4&u0uDF&VsZqnBCxnjxsBhLm`B&!*Y8=&@- zzb^@sCW~QP4E2#zN(#(jUcoJf_M=IY*wIB+N^!&`!(i4iEO*J(^vz{Q(`f=RTAk?% z2rBGmPjFGomguWXcHYrN(vYL8r$U-Wr5>`9uyoUwb8}I+>vo3Yo;2Pmr;DMP#w+1r z4=akNEK4|XQ_JN<4*k^5K3etgwYJJm2UQcq=kNt5=*|gE7@Wi@+8IuxyQJ?e*_IaK(LDq|qW3B7 zZM51CaHfC(`T8D_eGJRf9tQR>?%T)Z(z}n&)9(;S5AEaTu4iP5(l$q=q#J!i3HXXG zd?TvgF^V6U!cWZN7ZLgGxz<%QUvh1h$Soj2nv#U1f2P+8=KQ4YHeKs*2PxY9)M|H; Mrjts7k{Nye0?#a%=iDO6OX~eI< zH*~{-AhF;B_$b63*NaqQ6HBA}@SJm>^XKoc-vHV;w2@(G&s5}#IF{kLH;snE6JKUR z$*Bl654djTidhrw9*+QvFVDe=n4dnW@yM+?QU zu17MiwkTF_)nFY$zmcKTZy642tHbN33|5!Q%7bCUg^iqpEVf+aQDDf{%!RF<48_UC zbRg76J_rPr(TjW@oN^_NojNU32E)P1SybDm4DS14rWuO0-g1*V^)m-$?Ao});4c4h zaTgT^`&{S~KBcU-YxOH=()GSpG_y_)_o>AFF;@;A;E|1o*Jg8d%f(|<8FC^V#-F4f zG2BYCSf;9<6F0wOcQ3aW?g1436q84-6RP%#s-_9Oww@gB(W+fH&8(X fO=5qZpx7=!UXYr>K0J~ZTJ)?BNHc|)wCMW>-wgJ@ literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ErrorCheckerService.class b/experimental/bin/processing/mode/experimental/ErrorCheckerService.class new file mode 100644 index 0000000000000000000000000000000000000000..3f6d985ca3fe598f08d18ddea62be683fcac2cfc GIT binary patch literal 23602 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 L{aK{!8dCoO&)O@2 literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ErrorWindow$2.class b/experimental/bin/processing/mode/experimental/ErrorWindow$2.class new file mode 100644 index 0000000000000000000000000000000000000000..debae22694b94dd78ff781a90f9f63147daf5bb3 GIT binary patch literal 1140 zcma)*T~8BH5Qg8=R@N>DT2S$;2x`@(d@Q0DCN(BfDyb>nU~1ysvOB`jc9-m)LjRE$ zdLapF;)OrJA7z}g-4H@lx|{5tuX$$XojJdL|M&@D4UaA41Zw+nP1S;>n1JCsiwMz$l#vN`x54?R%vA~$#Q%QA|x$RNG zb+&q{LZzPxEIXr{Ep!A54Gy^ofpLio7_*VbgoK4jfxKf5l-eq!SN+}&#jm}cE(uJx zBj4+GyjYoewpcJ>3oMQ7y}HI>PaLMoG`f+IPhiez|5cr)QL4VsDPjiKEL;_EMiocm zI&KKqCcb8%bi^8;Bkcz5^mm76>qS&>%fjq=9#7dw%wb;O5=Y4T^oI4_qOjjs=M2*X z2X4Zd@47D=d*pvuj|OJDrKwl9aR*fkcLipR68}6XaS!*oY6XNT1;9@#&P00io zsq#M|1*V3=Z;yBKwzs2x?9&Tn8lilu zxmQfI+%3(}9~N_q^j;K5z9!sC(hGvNN|;D7cZqC;JZN;iB%uWJ+zp?JV&N#&L9tC{KtoBj&Nf V!RFv%mH!3q@rQVnreVCL&mZpd8vg(Q literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ErrorWindow$3.class b/experimental/bin/processing/mode/experimental/ErrorWindow$3.class new file mode 100644 index 0000000000000000000000000000000000000000..e1e0263b40cedd3a2988b5ec4cbb689343b283c3 GIT binary patch literal 1418 zcmb7DT~8B16g@*17Rn$66-AMvRxRaY5&S@FjHZ+XQ+p;I$z8CCd7Hn7yV{gQ^aKujJ$Ze`|;?1X?s6|pU^h9M9X6A^u)G2YE zP>+kL+bB=>=#pQ9T+NhC19VdD%#B5Mi;OUjoowyGOauZfL{WEd_5 zuBfaFt<1WSw2W+q>5jW+7D)EMPTiS8B{23eq_d?H-6aq&PsE1g|c+tO1&!ewsNWWdblT_+^}Hl1h7T2v*8 zpTdldX*zauGRJp0W{nKnQ(-L#$(_O2`V}|u)oUe5>=bTux+)6{sZd76-AMYL^j0Gg zQMr{}F=sjyqn4yP!qKO#23y*d%gRh#s_hod8X457=)3XMJeN^9@HieADO`A7Nrlu! zY8pqr;!{wlh%l5PCTPqPbaPoMWoDhCZu;BkrFskjzcJr^g5IceLulpvl#D z7$FXjqBSRs$qr$d-ZU*Z*I>CzYs11?;GTN%=Q?ntK@o9H8M?jzS~Fbs>zzmT4@+Q(dr yIsWcL^y5bxBX2VDCgYvIGA2%7{7Hr?0|>+f<3hw}(rO|E6L*)H8yT3+ZDs~g|B1iA zwTZ8|@CUedX)WkRQ~UH(bHhmaDiCOo*4(f(NfB#lL(UWGlIy$CWr6WZdf3Q{KyHDO>4ZSR zL>?UmvgkI^iK0NZ!Uwu*uCH!xHda-zELS}x&{Na4^j2ixvfXm#Shm1e>gc5zlHFzR z6kushZ~FqnmD)iiTI7n&vm`+x2L5u6I*@SRR-yY)IR^T1I*(HVm9&*LaRvhd9n$9B zm!<@qf2nW!VqDes#_Z@o5!%gTw0~2eGDc_D3fkCWVdqSX5MAm^Cl|X z+?+!%*ikhx$_^t69`Iora2kfCNZK29*=%)pw@-Dw#dO_Caj(0Mqo{MnlHLq#b zB9ALAXd7LfFvxp|o-QIoU%;r2K7(0(fvzWHWpJ2%@f$|JMGx5~Vc2^FN9kAK7=>bQ$n^0RkN+P5Ur4}LqW?w$zLS6-sRc|V r0uC(V&pl)!$!4dBSy+@$29ubI^XjL+;2C=AAs_dPKSQ+1v&j4g$0JUY literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ErrorWindow$DockTool2Base.class b/experimental/bin/processing/mode/experimental/ErrorWindow$DockTool2Base.class new file mode 100644 index 0000000000000000000000000000000000000000..209f57f8a8a2bcaf5a40664723c2f4e4fe1bcacd GIT binary patch literal 2869 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 CHwW|l6RML5$8(j*Sw*X629%PzAlWHbFAKij0e z%+wF)M>UInRC0InOzlU%$Wq1h9gv1Rq1RYFiqw)pYYHRk2Du#ZRi- z)+^j}R3o*cbEA|ew}b#g{8nsHwRQEt-~!IjbttYf4CgeflB(6sRJo)#`4k4fbx>xQ z^2FX8l)2{Y@k4HNQ{#l{PV1)bY%!E$xw6_&Q-(@a795+3RXTXuGZj^%&J|Arw;8YN zdd_%}A&{X4Lhz$cMi60!jsMLaF9yLdAfpT2!Wxnxp@*SAr<*)quN-iDUnoYAoTaJ8 zrGhPIz&X}y46)p;vR{pe1PhpI#bvvp7R8(oRWX-_5a#+^nrboh)VSl?3?ng*cuhpS z*o*s^kuc3L(JuEjA!STrmKMg#(P03Wv>`k|RKh%o^SAblq1I|L9wNpd9dRe`b{C1o zZ_Yl11QsMD8OGfEbw@W+hIMo#_Buzu+?KJ3C59joH608~9VXi%??9jg@dzstmKjDn zB;gHi$asuZTHHdmnBB`Vj5jOwk_n(93SN`(6wl~2P@xQ&RxusGH~Ve#>>u0Kd$C4J zbKf>(+{J{1G{bcJh+dlw)zC}(v$%Vx)kQ3v9bMz<1yUsCq=Awt`dx%iLGBK>6k7hQERYb_M z)x3*47@-rfU=(A-EUa;|e6B_Ey0t{yN(58Ht)+{QlbC8%@`G}SiqnbD7^F{s@*D2? zaf;aP5WB$KSHwRd#TG8`t}ApFb1IzQyBBuBu>%6J<15IlW&8%Q7Do| zl%i{RPN!|Rn}pkC`l_3>SPZIe2m^%LChn+fy&&r)vGv0LR)SKHusJ}m47q%G^#{x6 BlM(;` literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/ImportStatement.class b/experimental/bin/processing/mode/experimental/ImportStatement.class new file mode 100644 index 0000000000000000000000000000000000000000..b7cd604b5cb064002b607da9ee3d81bac6fc599f GIT binary patch literal 526 zcmb7A%SyvQ6g`u~K4NTZTU#G>;jT@k0r3Tj8$k$^x~OzNiGxnbqoh;uw_Fs#g&*KY ziFcwX=*q=?a_>3k-naLcR{#g-6k#yz&$2WW^SMm!yg0oTo_L&zOvWNnJo5Z_mS$?K zxDvWkgvC&s@(1okoEENwsR$K=E%Uh%j|D@0_%kq883CU$n2HAs%%|B%CStUR1CcQl z&SfIi1w*_0cgy#C69(&&RM{|5abTlLP~G0742E?FD=6r!;h>0;&NdvBQDUeLze#R* z5ap`UkVg}qNnL+6Ep;#F41?i+o)ZN`Bnora>&?4U=EZ~qPkLb{2RB(a@PSK{W c`?-%zY*9r>IWNmI&1~eE<~E6Qn<@i4A8bf&(EtDd literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/LineBreakpoint.class b/experimental/bin/processing/mode/experimental/LineBreakpoint.class new file mode 100644 index 0000000000000000000000000000000000000000..584e0731b6620523ff33523734f94336d64f9a2a GIT binary patch literal 5768 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 dKp$fl{?1nRj}Uzzl=YhlhLaJ?A^$ z`hM>@^VBHUoZz z>vvkat;VQDxeWt5?T}-jNMV`Gjx{Ft$bNe_cQv-fLn+zb6-hdF%uXm24@RPPw>4rb zly*(2>2VU=)vRDd#Y}iiL3Jt=gySKF3N4t??AT*din*g;G@hJM=B{`$;zZ&x%FK#- z4p8zs*KEp(L>qf-M^<|xLov%qCFoR3?rKZdRdbSwt$7Vq6}3cS5oe7;SxtU)owa=m z{#Ir-fC7}8n1_Y*zoxd&z+#2DIvv`t4l6lK-vU^K@>x(=V&XbnFK=%%VW3#vmYSG_ zfW*U$b*DxK>_o3M5Y>r|hpcFym59ioe<6MHt`h`nFAr(ZhLdUoqAZ;;Tfk!$c?U zWLB)vQ9Bk^Xvj8_*^y_&^OGrPL6@jluTWXjnP0YS!60*xbgYEan_wc?atc+hwVB(i zwojn8$wUdv67+&d-K?-EyVG;}(Zm+q&6ruWHha)YMV(FYxYHiBg$2Yv*S#EL-fD9R z`mxQxJqio+^m{TU-jD4H0ji(Wxg-SB%+hnAmy9DF-8n;YnSO;KD7(Q;`!AyVV$}otiiBI4mHcd}^U;CzZV$yApd_h)dA3kZ~5j;wcprZ<{o-;ED z=e1dL)=ckkBECmBmH9I8DY9uEP}f@FF0!wjJMCj3dsJRX`f{o%EY`YmYMKE*nNDO} zsQGN3e=G8ZXHrhCHj_?#G}F+6h$l@vC5R|X*dy`Xc0MTPq(;M8fGfcl@I?drXX@+> z=uCV`8bxZF>5_hY#l!)8m5|}A7fELYW0%^7p&(3b`F%SNJio`vd z2*jgdIm+G3580&d>Lw@e9`u*ppZV17cFj=}%;NKRO?*!uqf|snay`#zl+*BsCeGnJ zJq`_9i91MaQsdSDevF?Oc#Zs%#T%5cLad^RpWfYh4%0F^hTjT^f5$sgc30*So)#9$zG&iUxqbP< z^k->KtIe=Onk*7a+6iZ~ZXD6@riowS*IaNjBP})XPI)tR+`?OC6K>#awW|d;;wFAk zpY}@WH}T6ydj^(!RvS6WT4C@cs$S%a4`QH5Pp;AmO;^BExRk-I;EcGOy}A16w9TzE zY*uo0^fotf6wAfIanz2Ze)|57to_BFaV3{TZ~rTFRr1wQcOHcWN2#T$j{gVcqwXx! zdWq;fX4i8#hqA+%D--fHj(6omE@EcZZDKO zX;@NGeFiOC#mfn-IgPcY?c;baKdb#a#__&!bWg9(NLGrfC+o8Tce#313q$Zz?>?r; zf4q*WHXf3fGd5jmH`P9Ol)+V{~`B9^E{zWd{Hc(Zz>} z=SP^KM=AL@s_<#be}>YZ!)iQ%O?Z-3c#3TcLKng4xq z(Pav%c=3Onx_s2Kl=_O9<^lG@XQ|h%Nd*cEi!Wimf&R-B^077sk6u0=Tg)w=X9-=T z_i=+%s9bV*4y7_M_$PeuV$5KtR44p-cGyAU<`6seNLG=`Js$-REO{9}Nnl>Jnz&Wk zdar9E#bMVu#AHb08UCu}TlMOotm*<*r152`MYYUV9zYw%$~2x;Smi&A`bGXU4lA6+ zvF-+X+z_l3xintzvtV;Xwjqs|eAps_;|lvPUl4+EOVgx@>jjqMIQ=_;C3uNoK1pD+ zq8MjmoMs^>c<)a0_InEV<5eAIP=~+Q3v(f5US>1#w=dh~j3%FrEX%j?3hhV|*1&(6 zeN@QAE1{($z-0=%-v*9(Gl6LmygPFT_bb}{j+;NWq>q1qDX|gbXBpcRWeV|uXI}}< zYfsBu*-6lt+AE=??_W`)WNW&{*QxQsTWZw5D?A?^S`|N*6|@}2ykNyRelUR_k&P;j zKB!a$N$ls(UjCO1Q*`8#{Y7Hq4{Vq>cyL@~ir&n!xeUM12agXG_@&Ob_rz&~j2pG5J$v&>~s%yytlZ&2|ho)!K$ zX=#mTsVGQZ{?qil{fF`VH%n>JWF?9`r3!z(HeCclA<-jL;8t}eU4NO>bsOcR25QPB XecX|hr&RF1;+>yr(w)ERjeq+;2X2K8 literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/LineListener.class b/experimental/bin/processing/mode/experimental/LineListener.class new file mode 100644 index 0000000000000000000000000000000000000000..b61b03aa6b284917f461b6d134afea3506195152 GIT binary patch literal 201 zcmaiuzY4-I7{u?Z+WKeFx3CTdTpbl5P;e03WBXB4(zK*ed^QIkz=smk&CTUFj^lp! z{ybj*Hkc%c2x;q@oV!ljQq)bsf*&nAU9W*FFjfPpPXjQw+HGW#> zj#=e3*RZslT{5hq;h4se#q$(a5MW5$dZruB;BOfY!&I(hSG7j7rk#{cZ&sZl_|7q^ zoMF;~D!4}J{l170q%UpOOm~-|8qb{=Ekm;mB3y7C;;r}abeAg{R+HHNT=($XDp-9Q1J+H2BpH?ylgNUPuy%V zj3ky6q-eY3`KD`Hnq^liV&QZ2&m9%ZSYZfJqPBx>MUNqOlJ`iUhp>uu1#1iwJ&N!a zw^TgF2CZ=+Tg<-AGQ`?Uy~zYn7lgM|Ji$}CJVcZs(;?FXe6!y!&*8CSe-Im`w^wgl z#a&D(NHffIPw91yrf-%HX%n)iC0=(;yQYBd+I%-kYM!@ABBRX9S3m|IKV_KntVOSk zw1^8H&_5CqZcy&cfl=?Qez;&aof6+S#pM|HER9(46`?t1=}P(O!{$Rk+%U2N;(kdF z4HsdG5765u@{4FRnOa)@3N;xETwpjE3tnLKT%yP586lMTNGde9L2O_Qn~0KUw|y3O zFivlj1rwO0%)*M1<&zf4EV)D_6Okz@xdaJ0je8v?KdFXboKAkhDE)?0-*MlMGsF)f z>=N_ekoXLZEnQ;s4AC3DWae+w_j vvnRVr$}ZDa-K52W5W5IQ@SJcyEJ|ySte2E+0RA@$^n!w&5rSpN<-@DL&sm^S literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/Problem.class b/experimental/bin/processing/mode/experimental/Problem.class new file mode 100644 index 0000000000000000000000000000000000000000..647bebe1f6131c82c63b9fe8e0bc52b4ce150076 GIT binary patch literal 3124 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 literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/TextArea.class b/experimental/bin/processing/mode/experimental/TextArea.class new file mode 100644 index 0000000000000000000000000000000000000000..35092f97c9e500e2756af0d80fedfeb1a2a72d08 GIT binary patch literal 7492 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 literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/VMEventListener.class b/experimental/bin/processing/mode/experimental/VMEventListener.class new file mode 100644 index 0000000000000000000000000000000000000000..9c3388a8942a96ead26addf93b20064f1ec590d5 GIT binary patch literal 192 zcmZ8bI}UtBLU?w$@rPK?+HQ^Kmu`i!g02X6OLaz}`I zJ^BcnZJgJd+s<%VD3&43qn3y}?NY)rsXLp?MO8vr{|y|5?vOy3_>Tbjy&1xRA@Uet F{saBvH9PCA3B|!IoW%kGyAkZe}DT9U=kG#F@fAl;8$g%;dskN-LFYQuC2(x zsY@@kUBfDuR=Hb}c1;Evx&`{)*sHeT+Dw1(I$&HNDOJw%rff=q(`MDL8;z!Cys0@x zbYesp(Ro22?mCT7dNL3gHxEK?w)6RJ&y?di;f%myW`COh1I}6k-9;83$6wrpxFn#h)}syzoZ0iD6ie1hB7>ZUEZfy-Y|*tF4IN|1 z6KYw83wE7~2dTJ|({6qeuIRT*plfHw1=vA)&`z9k+0sCYoQETNF6H8P{En$gziT>S+V|45UCn7! zeb1BCP}Mc1V;VGj7whS0-YGCb{kJX3lh<)i$9*NMr&6*?OQkr9^x(hbimRl!<^+oE z&K!tk8!t!2f3IB4JJs-*MQ%5vRerctnXHx8s&XZCd{4s@fq~AQZXNJff`xe@JwjXW z=TiYeYh2usvIiTdW@ww@Ei%RrS38Aozs8{FnMFz_Kt9paioH`j537<^>{eYEQ_ zM$)YpF^myD5h5ZI(N0k*qT@KxCi+1XC1xh~3H@JjQo!VHVC*Z-#<2e9mzffqxcmiI zKH^&H&L#@$Y(^(Gn|d&|iH9E|jA3#OV literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$1.class b/experimental/bin/processing/mode/experimental/VariableInspector$1.class new file mode 100644 index 0000000000000000000000000000000000000000..8a600c79dbb28672ffb5b03d4802a5b5285690d3 GIT binary patch literal 726 zcmb7C%SyvQ6g`tfV`8+mzTXO6)C#TDg@WQn6ojgv(uJTfjf0M)lafh`za{tp7k+>r zCEls^fx9k-nS1U%_i^sLf4sf{SjVypi(##q#G%kys+)2nz7}P1-xP^#2$k}vT;qx4 z^++5l-4tOOC;5sChar2%+q@icBAwLl$m61)A@_@(wv;kNhW<8>@@+|#s=bxkChm?@ zGTmj^DD+BRsWCWvG>`{|p#UxheAvhY@Q`J&3nm~_l}a498g-GJe|4Ly#vzZs$L@ko zdMh=Qi zZINvdzqtB@p!kB}hfd6h!8#sdTNlWY9T3N$qZp%`QNe6C%O*t{pI3ZD;5=jEUlQvQ f1J>1_Bwja(jX9!On8yO$4yn0FO`9UDlaQXDld7&U literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$ExpansionHandler.class b/experimental/bin/processing/mode/experimental/VariableInspector$ExpansionHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..fce996cc7f3ed7e62488828d1b2f72403458eab5 GIT binary patch literal 3252 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 Lp2s@;4dMR+&m}cF literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$P5BuiltinsFilter.class b/experimental/bin/processing/mode/experimental/VariableInspector$P5BuiltinsFilter.class new file mode 100644 index 0000000000000000000000000000000000000000..d33057608fcf54068e2fefa2968e43fd2bfc1a5e GIT binary patch literal 1543 zcmb7EZFdtz6n-X?W;f|l(*Y`iAZV*e3QYk4wFPV|m1;~&w-&abp6zC67n0qa-3`ir z@{8xli=LxDK>w4+XE!e(erZ4KotZm#?tSjP&)vWN`Tb7-m#}3ZCvdYHg`SRMKiI2x z!j`VAlrvXh9I7X%8)z8_D|3(PkT7chOh=m&ms zL*R1du#cY#>3F-#kytU1e1Ii zxgEU{_JYL3Nr7T^-gFaf;$4E=*Z$r3(x6%|ZSukKS)du4? zd!1b!ZKc!@P>s-Y+r#b+l=-wP#X?cN2lR12!oo&_Z>mgwL>OfFAn% z>?MA?z7$37)7Zjwu+}qKuk+e2!=>^*u*Dp zBrtohdS?}4i|w!%dFikb*wnCtqhX&*u?SdeL7=0Rwo59+2JWyC2TFhBhYfi1w?Wnn z!@U}JoFmU9zcJ*HPw57f%jsnChn1s#92Vsfp8n2k0Jk>#3=_2%DA&ppf8eMi)p6U& ztG8`uOub_}1$D}H40YOeO!c1alnd${rJ+8cG}R1cQGG;NQdP=vHA`u!3zSDx-F}9P zzht2=Q?6nXkn1SQJ1Fs+l$)56HcrVcoR!~VMsA}f?_yrw!&T{EQSM+_-p6hE08RNF zw&eHNkw4&L`byIvcwE6%t^(Ka$sn;?Of*N`WbId6e2GtIpX26lxRt}tROXNZDWs2O kD|0l}Hy$|RGklE(?{oMjvu|RZtKwN;1Dlj%TfU-3_q4gdfE literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$ThisFilter.class b/experimental/bin/processing/mode/experimental/VariableInspector$ThisFilter.class new file mode 100644 index 0000000000000000000000000000000000000000..d3eca6f3681c1f4d658a4e4f137db3ecd839392f GIT binary patch literal 1082 zcmb7DO>fgc5PcInabpZMriAa0wgKz}k_xz>AOxy}R4JrFsfyIw#;jTw$F|nnioe1y z;KGFiMdH8@;71|GZqk6bBnR*8STk?ty_x;>`^QfJkI}VIAw0`e8p=G6lKt*DeJ{K6 zV0ly*)bQ5DPWJs|7)) zWd_{9DLA2~xl(h3u+d)(t;e~~qa@NV2v7V)lY?D?xygOhK{)Tg!jcUG%MR*r35H(; zEcc^C4vxknsdfr^2wp!8MLgv(`Dqpu2)zY+_)Fu0iwHxRX+mdCE`^A_V9&-?T(@wI z5X_}tk>=nAZW640sRv@rv{w9}Kb!DSD_)b{5^fW!<#=q|#hQiHe-`01%)vUE1UuJ4 z>HJ-!4+xk2|IvayR`pmYLVG@)N`5?>p%&qXHzJ#eZ4c8U6&CBmeK)3)I9uFKL4)9I zC5cpv84L31Mm@Su522&4bPeX%Nb zyk$d}wJ1~!s8A3i1e2*s6hREh^DtpDS^B?IP9_;B8J1XS*4KrzD%m0omF%i+p0L+8 zh9nJyr{}EWH04anpcD-R++%>|J(_kg0oL_)u>fEAN>zmxn+*+}iYFYJd zPwNE8DVQXr&eW+DW>@kwrD6=@QB2^9imR9=C=%lP26Mq&7Uj)#6$#uR^zee<~A*Dvu3c|SX{Xt+#*1_q*SDlA@s9L*>hN4ZO0LIlnrUs)4F0_!d{F1kyG9B z3E=B38DDm%>)Ymn5H;MgFqs!oBhVV-cI<856k3!FB4OrC4e7*TRr*|Y6@qCV zgCLJS#bR<6co$%cf*$_%@+r@^0bU2wnO#KFhfrVdqkkWRpZ%vJ{Oy+k=nKNM%VV;K zINMZqXD5u}BCjNc&<^;ElPGK}WREfN0R!nwb}Ald6dpbbFy>hSV2e}6B0fhK%qk(&#xG#Bi6|`%+s-tsnE*X#>5Da#cdyF z0W;A2G7Ff+9iNZ_{|)C5l1OoncVVtT!+kv9EDzb*i@@-2Bos~?z&slQc!ULBqa2cu I!()X00>T|&%K!iX literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$ValueCellRenderer.class b/experimental/bin/processing/mode/experimental/VariableInspector$ValueCellRenderer.class new file mode 100644 index 0000000000000000000000000000000000000000..066a623dd6b7d6e0ed29df84eed636979fb20d65 GIT binary patch literal 2126 zcmb7FTW=dx5dOxOY~pOLjZ;DsXqpgg=i)$HE_NtQ+@{!d5=eqeLJMr1(`3{2uC=>P z3cmmmn&`mW8dCgz0KVvY^?zwq}T|>6As$wd~=7W>iE*7{;P7 z*M%)?1tG#&%ic(u!d(-Z=_H*U>CLLRhHi@F1#w-g8191q*?5)E5Cv zzB{Fxx_gdrI(F2{@d6=~;cQz#XjKtLQv^Y@sZh{P2*#vAN1oBoS4wNbUX~mXy7N|1 zGY&baZH8nDgqb5^c#ud=sl^d)mU-8Uj4!qtFDU3Gv~6kIT2k9_le3oTMi}xVD*Es! zLD>+l+#__w;`#f`(h)?_uVMg?`F8VKiBsq~v@b=Ry9VW%af0m~%NDyOvMYQ-CKTDeBz z04L%t8|9I)N@dGrA+kz+Z#Qew%6Ycw20ROETddFY>MA3;M?~ENrx?Vfig8S|u=LL; zI8B&1n&ecR#WP$N*A~pqaQ;6eU(-5AeGVxF&l67lzqN`qrdR{IbJ3J~TlY$^+JbX9 zui!;Od%eIJ%dl(})0kmAmlmg22%U{t^C`zBTu^ZlvrM;F7F%rCR>fq$#~O;``Qqxx zI4`NlN}u7G{B-8Bg3E;XLyWyKY(QqrlI$*pyrM+y%R zMwi1YDi#kVxBPaQ9T1jP97B&hEvUF6wcF0Fe4TnXrO}FtRlLqoIIVh=2gM*27k2&D z?eUKPr5`@tmS|*Wd)#``u1Sdy(VZn>u&iV$nm09P)+$!G)q}RR!!pkD2r61er6e`Y z4eN*S`t+Xe*m_&D38N1;9wd)x1zU`$q1g2{h%8wZyC`OLIgNS`2T^@EPslq2HEWu} z&KR2G2!`9`QPkL2-06&q{{*PBQ_enK1$jq7Ge2ASYYGAW0g=S$kNh}*`U8Ij(814k zd6V8nnBGGR-9jhtseF&E(S>e)hhzzBo^G*s>1pc3E>0$XMsy`n#qlamg#Gv92NX4(VPhKTW-EOml&(!wLazhdIBk?5A-oQ=o9qQE{13i zBlIc8=`)<6&yk`pkfSfTg}%ZfeT^&h4X)9*SflT}B(M6Q>q!b+#WhZe6TusJ)1yG( zElymPS3u)c$Xl(UD9Pi!bzU_wodsTBXBtu%!Ui_E_>!s~H2sAU1v!NP7`2Z^kkup7m1v+x7_C~+c0Tbr3- zxtuez&)59{V2pN%5@DLUM6>s?Jx1r`z!Be4cJY~QrcAU|E>?TP3+q$XS>pP|%Sy8I z*ktTNR0y4ux~j-1p{(~Oi4p>(HK#I+2Ft%BIdU@G5gME1;&hH@La#7>cNpa^LTh0y wyO~kmvk%b}(O;S`htMt9ziR>lp)4N+kla;8AX5q9r`AxH-jIYWiB?d51HScRF#rGn literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$VariableRowModel.class b/experimental/bin/processing/mode/experimental/VariableInspector$VariableRowModel.class new file mode 100644 index 0000000000000000000000000000000000000000..e0fe9c45c7c30f681b939529bcfe1535cbf5be01 GIT binary patch literal 4473 zcmb7GYjhN68GgR(Wj4zYwkZqQhD(aHY!b*OEv1@N3JFAlNmdD_CTMlC88%BdJ8^b4 z+{9XKt@dK8NGsG#3fj9&bPV<2n7K$5VX1nb~CLko1&u z^380%%lka<^S<9Z@5OgsJOkhcyrG~>;MNh-Na^`}CYMeO8-sd6-!`I~nPEL=Y1u@t zW@fa3tlp8!kLW4OFc%kRHW*vGxIL@DFA&+HjcSRkMjOe2E!?OeDDXbROeb=>HK1#` zd?LS9LKp=ro5|^k;&Fi)DI;4L&UI_UdS2k_O`VgrdMuM?S_Ee5gBeTm*tmT}?kd~V zArQ2NGWo@g0*#$l<^v4|Z^`5`)=GgJ<5zmPwpYO4M%T+BaFvP~P{Z)yY85jvTfi5u z?NuMR>ZC^9h2a6++$h}^sO&US zTDB;@JL#7S2&}$B7cPq-1*u5uR+}A&HlvWUY(F~6aXsP+mIyRlnZhb+QAd?WZjvb_ zAo>}@9!pEz(WQ;J7OGoYHa|#jyweN{dH=)C5K$FU3zmbVX zKqaJq;~)&F_+%owgt(C5VD9-wHIlA>Z^BC=UWv0>o^hKU_juSQ zXXU<3zD>_&*SaY$FlS0_`lWBHRkUKUfa3bbtg`5$B9mxFzEt4&R7Ng$v9?zReVvL9 ztf!lU18K(Q-Q8TH4;0dA-E0Y?6Wt2B1g?A602L3YNa7>B%%j81e1;=s3@7r1Tw=>$ zCefQQt%8>A(o#db3N*a|8x{2M#!W`0BWLNvRq-+KPKHJ_GtWZB+>Ms{>V~$qV+KBs zeg%C3*G!M3ViP_=W5XHKG|c2?f%!5@r3YMCJ9kO!c6?gFr#!@34I|5%r$WPkfNB$S z=cXaoFUbu`aHi(`c)u6XJzGRfBcou5Rbo<#_N<{-6&G0C*k$fZ?`Vyi&8O;k=y z!*jjF-!AcYFlh1hUY_z`QIgN%a|(8OfLga(x{5pT`67^`Wrx=;T}8@@MfJL&+1)1V2hsX5@4RTFP+{hZOukVD1!q^ie&l;&~jV ziyhtVNr9MC9lc!Sww4f%3M|UxMzw5au!hfqUc-KgX+K!A*)VH%HtuS!+1a#9R_Lds zZ^u=P;RNd`ed71pV`nr%#A_KhhH{!aYX8OzG_z*`3WPHf9rja)Wf2wZ9{m(@i_&W#1Yp?kl#x zxR%|9k0ZdRU$%j4&Hb_o1R@dHTk?Ol*z7GUxN8>wyNi3v_)gZ{$R2%5J>g~BmALogd(A2UnCgeT11J2`3!}U$1(p1 zO_pIHpB1D6+(Q!gqMB8$hX1JqCnV`E;+w5K7Q1vh_?BxGb;l4nhU@ks;6E5R$QfUW zwFl_XgS7HciM0yXTD`qjNQk9a=9+z)Z$B5B>d&EJFY4;gqM>`<5cyFu-pkhJG1TL6UZ4FolR5{)WkNWtz|FSdCcGaX zpduXL<-C1paU@x8OG4G>_cbeLRs?-30tZkP zQ=)-}6@KcmD(c@aV{vytL<7;_lb8PCn~aL1%^@b(^N8RGmf$EF@d6v=BXsG6O>j9A zjffKjS59cN($yxyfH~SMp`|wJ<+thA!heY-Li9m_kD~#C&o#hRWtR|y&t0H-fwgFN zoGjZ(ZRn)1q-V|kWoHp>4v6Mp%ujEe(2FXbu~p`KImc#>E{^|j+{v+r6$DJM5H!GE54Es;w zyGQZ;$|I}>zCNE6?FANuSfFPN$6~=(urTJ21;=o*bn_{>?aUa?9g#5*OGN?~-0Ndv z9yL70aGmBQc!@cF4(sqT``rudYhS@u>bwI##lyIW-S{~_7_Tz3U*pbS;yhl*oA@=} z!W;NEev7y9rU>KrVkZ6|qWGg&ia(1c{6%cQU&U?so46f+7kT{CPP+|G4iwW)SjDvC zFXu`!Lx_Jfc?Lz!PC!3YF+@H;Vam=DI$2%hS`%&jjLZ}}Dd%J6J6OkDR1j70YE@NL zl%r}vtAY!QYUuuJB<@`07N(d?GKHE~SKlD-u~Qm@+yMN`=IPvDrO1;glAWvpzq0qg QPXAdAI3rkgegpsi0bGi2GXMYp literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/VariableInspector.class b/experimental/bin/processing/mode/experimental/VariableInspector.class new file mode 100644 index 0000000000000000000000000000000000000000..0d6855fbda963eb8fe7aa08d2b0eb48f20db3034 GIT binary patch literal 11029 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 Xv4ecR#q~pcexq;_|M*MfoACc1zh@pb literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/VariableInspector.form b/experimental/bin/processing/mode/experimental/VariableInspector.form new file mode 100755 index 000000000..a5f40f1d3 --- /dev/null +++ b/experimental/bin/processing/mode/experimental/VariableInspector.form @@ -0,0 +1,53 @@ + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/experimental/bin/processing/mode/experimental/VariableNode.class b/experimental/bin/processing/mode/experimental/VariableNode.class new file mode 100644 index 0000000000000000000000000000000000000000..4f9319a7f98e2489e9daf1d4531cfef8f53deed6 GIT binary patch literal 7225 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 WFs06L%d7)R4Lu=A?sJ7(E&VSi%Gmw@ literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/XQConsoleToggle.class b/experimental/bin/processing/mode/experimental/XQConsoleToggle.class new file mode 100644 index 0000000000000000000000000000000000000000..1cb46898d07e7f56922f9dc9c2b671fddb377a09 GIT binary patch literal 3551 zcmbtW`*Rc575>(eyp~wN*cbu{PEta#Bo{TNX&!b6Mi!u0HpUVHhqh)dUF3z;uDZLz zhPJd#+a!Iz(g$tQcjG>i4!Fh4G}BIh?%&iY{qAbDmJMNOs~PF;p67QS_Zl#)qQ@5)kBbFP&G3vtdbTf1Abk??9+Y}|cRx^c)sDi#r`W1aS z<1R^+muGZKm@2vzJSOQGeaXv+E7Z3SvWfMxtOFtxhp9^=4h#Oc3aE8Z!83 zz|xo7ED{>JVR>1*-mopUo%Fx%{)D497LAHKnk=h$k=+;eXqz)K5ywjyS8-Iq?vOhx ztSWDTRXa)Bu7+dCDj1l|&CQo`=SuVA)1~})AwOQsPqRVyt^3=k_td1gIx5ZQG#m#d zcbCTtXL6ft%%7Ux*p#OhE{Tdan!p(H8eYaE)9eawgKY&P9bs-@xxU+u9trHp6ihK+ zVUStdw4KP^w^wc^P{53=!D)8Fkl##2oKaCyup<<2XG}vGXL&;j$+y6)c0ln-Ot-Ar zoQ79$o}w)0S)=ML`j;y&S)bJKDaneHb<)4z2^4WbgN_9%Tr^B`mPz0}V@t@Uh}=yc zelbp*Lc>MW*ek~h<5`)S_3XENOCdwUB`Fl27@wV-KQTK#C#j}}y03cnWWJP>Fl-GC ze41Ve;snSH$NuT*v1**Q$=b)Ec5}uKS3$u9Lz{^slF>T}WQv zNNuFb#=e&~GC}UvqNi6bPw9VO!@vY%o_;$D<%7$1X;QNG{EXVO(d|$=)HjeD8TtIaVZ{i0G*KV@J zLAZvUnc)@pm_MP{S)m`{hKe7zhr~vr*Zn+{F9>*W= zmG0CyzaCxB^*uS`isSqY;BD0B`24kkJz?)`)>Y6dPR{ZKCox;euT^f@@Z?*I$wBS9 z@^!1voE4_f{r5!CZaNil+>m=}=cXxtNIIp7yv049HFcVBRlLhkLNxczALg3F4^Q&$ zMEH%N8++tpXM?jrx>cJfbdB%WI+-G_c^@8sJE<>aR?_BRa7Mf!FZ z=c0XkihstVw@B^6KK^!778u5$PXXT^#}k46b;?K!gQ+`sG8Mgz{qpBPDt#LVQ~Pcs znHs*0^t!DaC1ISEHB^@jMCSb?<3W+h>uW4eg@@!^)U>}txAuQCZm%% z;Q9)%NUIX*w)gS$T<`JJUy!_m!#7FkjN>KWht`q|d?@&MXeC3Av=U3L;n~f~*$(Ac zsQmoHDWABn@(YaIuZ1$rdPeB^R{9?pn;KrlkyT8r;Uoh&a05rv@1ro+H+=`E)-aon zM2PPkzn@sce2Y~HS!$cUiYkRy@N9Y&i~o(pjs*PS_T=DE&pIE{1pUD!#-bf0M4VQP?^P%i&DTYu60w^*?yU|tn0N=m; z-+V9A_f`77_W$^PC-nV{%nHBC`rK&Epz9s>l`u9Xh)rRY+x7lH6R$qdL>GSN`~E%t Qz*GK3`6K^lz88)E2c35qqW}N^ literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/XQErrorTable$1.class b/experimental/bin/processing/mode/experimental/XQErrorTable$1.class new file mode 100644 index 0000000000000000000000000000000000000000..0293992a3ab632183565de6134093913e959dbfb GIT binary patch literal 1630 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 literal 0 HcmV?d00001 diff --git a/experimental/bin/processing/mode/experimental/XQPreprocessor$XQASTVisitor.class b/experimental/bin/processing/mode/experimental/XQPreprocessor$XQASTVisitor.class new file mode 100644 index 0000000000000000000000000000000000000000..14124898af257bd5a09d9c77fd5d777e0fe13631 GIT binary patch literal 2947 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 D@MhQ$ literal 0 HcmV?d00001 From fd33fdfb0a9b9ac8febd08b3e88db7e2b53a475d Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 2 Jul 2014 13:27:56 -0400 Subject: [PATCH 13/47] Added in a listener to detect when a file is modified from outside the program https://github.com/processing/processing/issues/1939 --- app/src/processing/app/Editor.java | 157 ++++++++++++++++++++++++++--- 1 file changed, 142 insertions(+), 15 deletions(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index ae90ba51f..64162cfad 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -22,24 +22,75 @@ package processing.app; -import processing.app.contrib.ToolContribution; -import processing.app.syntax.*; -import processing.app.tools.*; -import processing.core.*; - -import java.awt.*; -import java.awt.datatransfer.*; -import java.awt.event.*; -import java.awt.print.*; -import java.io.*; -import java.util.*; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.Frame; +import java.awt.Point; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.print.PageFormat; +import java.awt.print.PrinterException; +import java.awt.print.PrinterJob; +import java.io.File; +import java.io.IOException; +import java.nio.file.FileSystems; +import java.nio.file.StandardWatchEventKinds; +import java.nio.file.WatchEvent; +import java.nio.file.WatchKey; +import java.nio.file.WatchService; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Stack; import java.util.Timer; +import java.util.TimerTask; -import javax.swing.*; -import javax.swing.event.*; -import javax.swing.text.*; -import javax.swing.undo.*; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.Box; +import javax.swing.ButtonGroup; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JRadioButtonMenuItem; +import javax.swing.JSplitPane; +import javax.swing.TransferHandler; +import javax.swing.WindowConstants; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.event.MenuEvent; +import javax.swing.event.MenuListener; +import javax.swing.event.UndoableEditEvent; +import javax.swing.event.UndoableEditListener; +import javax.swing.text.BadLocationException; +import javax.swing.undo.CannotRedoException; +import javax.swing.undo.CannotUndoException; +import javax.swing.undo.CompoundEdit; +import javax.swing.undo.UndoManager; + +import processing.app.contrib.ToolContribution; +import processing.app.syntax.JEditTextArea; +import processing.app.syntax.PdeTextAreaDefaults; +import processing.app.syntax.SyntaxDocument; +import processing.app.tools.Tool; +import processing.core.PApplet; /** * Main editor panel for the Processing Development Environment. @@ -2330,6 +2381,8 @@ public abstract class Editor extends JFrame implements RunnerListener { Base.showWarning("Error", "Could not create the sketch.", e); return false; } + initFileChangeListener(); + header.rebuild(); updateTitle(); // Disable untitled setting from previous document, if any @@ -2349,6 +2402,79 @@ public abstract class Editor extends JFrame implements RunnerListener { // return false; // } } + + + //true when the file is saved, before the next scan for updates + private boolean saved; + + private void initFileChangeListener() { + WatchKey key = null; + try { + WatchService watchService = FileSystems.getDefault().newWatchService(); + key = sketch.getFolder().toPath() + .register(watchService, +// StandardWatchEventKinds.ENTRY_CREATE, +// StandardWatchEventKinds.ENTRY_DELETE, + StandardWatchEventKinds.ENTRY_MODIFY); + } catch (IOException e) { + //registring the watch failed, ignore it + } + + final WatchKey finKey = key; + + if (key != null) { + //the key can now be polled for changes in the files + Thread th = new Thread(new Runnable() { + @Override + public void run() { + //polls for changes to the directory + while (true) { + try { + //check every 5s if the file has changed + Thread.sleep(5000); + } catch (InterruptedException e) { + } + List> events = finKey.pollEvents(); + processFileEvents(events); + + //if the directory was deleted, then quit the loop + if (!finKey.isValid()) { + break; + } + } + } + }); + th.start(); + } + } + + /** + * called when a file is changed + * + * @param events + * the list of events that have occured in the registered folder + * (sketch.getFolder()) + */ + private void processFileEvents(List> events) { + for (WatchEvent e : events) { + //if the file was saved, don't prompt anything + if (saved) + break; + if (e.kind().equals(StandardWatchEventKinds.ENTRY_MODIFY)) { + int response = Base + .showYesNoQuestion(Editor.this, "File Modified", + "A file has been modified externally", + "Would you like to reload the sketch?"); + if (response == 0) { + //reload the sketch + sketch.reload(); + } + } else { + //for now, do nothing + } + } + saved = false; + } /** @@ -2403,6 +2529,7 @@ public abstract class Editor extends JFrame implements RunnerListener { statusNotice("Saving..."); try { if (sketch.save()) { + saved = true; statusNotice("Done Saving."); } else { statusEmpty(); From 471ed8a2d89e7216e5c8824e7cfc2a8346bf51e7 Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 2 Jul 2014 13:30:56 -0400 Subject: [PATCH 14/47] Modifed imports to match existing style --- app/src/processing/app/Editor.java | 86 +++++++----------------------- 1 file changed, 18 insertions(+), 68 deletions(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 64162cfad..ac02d714c 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -22,75 +22,25 @@ package processing.app; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.EventQueue; -import java.awt.Frame; -import java.awt.Point; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.Transferable; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.print.PageFormat; -import java.awt.print.PrinterException; -import java.awt.print.PrinterJob; -import java.io.File; -import java.io.IOException; -import java.nio.file.FileSystems; -import java.nio.file.StandardWatchEventKinds; -import java.nio.file.WatchEvent; -import java.nio.file.WatchKey; -import java.nio.file.WatchService; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Stack; -import java.util.Timer; -import java.util.TimerTask; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.Box; -import javax.swing.ButtonGroup; -import javax.swing.JCheckBoxMenuItem; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JFrame; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JPopupMenu; -import javax.swing.JRadioButtonMenuItem; -import javax.swing.JSplitPane; -import javax.swing.TransferHandler; -import javax.swing.WindowConstants; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.event.MenuEvent; -import javax.swing.event.MenuListener; -import javax.swing.event.UndoableEditEvent; -import javax.swing.event.UndoableEditListener; -import javax.swing.text.BadLocationException; -import javax.swing.undo.CannotRedoException; -import javax.swing.undo.CannotUndoException; -import javax.swing.undo.CompoundEdit; -import javax.swing.undo.UndoManager; - import processing.app.contrib.ToolContribution; -import processing.app.syntax.JEditTextArea; -import processing.app.syntax.PdeTextAreaDefaults; -import processing.app.syntax.SyntaxDocument; -import processing.app.tools.Tool; -import processing.core.PApplet; +import processing.app.syntax.*; +import processing.app.tools.*; +import processing.core.*; + +import java.awt.*; +import java.awt.datatransfer.*; +import java.awt.event.*; +import java.awt.print.*; +import java.io.*; +import java.nio.file.*; +import java.util.*; +import java.util.List; +import java.util.Timer; + +import javax.swing.*; +import javax.swing.event.*; +import javax.swing.text.*; +import javax.swing.undo.*; /** * Main editor panel for the Processing Development Environment. From 459bf7dcc36f501d1b982970e1dd5461ef7cd70e Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 3 Jul 2014 09:34:06 -0400 Subject: [PATCH 15/47] Reset to the when forked --- app/src/processing/app/Editor.java | 77 ------------------------------ 1 file changed, 77 deletions(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index ac02d714c..ae90ba51f 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -32,7 +32,6 @@ import java.awt.datatransfer.*; import java.awt.event.*; import java.awt.print.*; import java.io.*; -import java.nio.file.*; import java.util.*; import java.util.List; import java.util.Timer; @@ -2331,8 +2330,6 @@ public abstract class Editor extends JFrame implements RunnerListener { Base.showWarning("Error", "Could not create the sketch.", e); return false; } - initFileChangeListener(); - header.rebuild(); updateTitle(); // Disable untitled setting from previous document, if any @@ -2352,79 +2349,6 @@ public abstract class Editor extends JFrame implements RunnerListener { // return false; // } } - - - //true when the file is saved, before the next scan for updates - private boolean saved; - - private void initFileChangeListener() { - WatchKey key = null; - try { - WatchService watchService = FileSystems.getDefault().newWatchService(); - key = sketch.getFolder().toPath() - .register(watchService, -// StandardWatchEventKinds.ENTRY_CREATE, -// StandardWatchEventKinds.ENTRY_DELETE, - StandardWatchEventKinds.ENTRY_MODIFY); - } catch (IOException e) { - //registring the watch failed, ignore it - } - - final WatchKey finKey = key; - - if (key != null) { - //the key can now be polled for changes in the files - Thread th = new Thread(new Runnable() { - @Override - public void run() { - //polls for changes to the directory - while (true) { - try { - //check every 5s if the file has changed - Thread.sleep(5000); - } catch (InterruptedException e) { - } - List> events = finKey.pollEvents(); - processFileEvents(events); - - //if the directory was deleted, then quit the loop - if (!finKey.isValid()) { - break; - } - } - } - }); - th.start(); - } - } - - /** - * called when a file is changed - * - * @param events - * the list of events that have occured in the registered folder - * (sketch.getFolder()) - */ - private void processFileEvents(List> events) { - for (WatchEvent e : events) { - //if the file was saved, don't prompt anything - if (saved) - break; - if (e.kind().equals(StandardWatchEventKinds.ENTRY_MODIFY)) { - int response = Base - .showYesNoQuestion(Editor.this, "File Modified", - "A file has been modified externally", - "Would you like to reload the sketch?"); - if (response == 0) { - //reload the sketch - sketch.reload(); - } - } else { - //for now, do nothing - } - } - saved = false; - } /** @@ -2479,7 +2403,6 @@ public abstract class Editor extends JFrame implements RunnerListener { statusNotice("Saving..."); try { if (sketch.save()) { - saved = true; statusNotice("Done Saving."); } else { statusEmpty(); From 5085f8ec3a11874e7b24a04e5b66ef18c402564b Mon Sep 17 00:00:00 2001 From: patrick Date: Mon, 7 Jul 2014 10:20:27 -0400 Subject: [PATCH 16/47] Re-added in commit for Pull request --- app/src/processing/app/Editor.java | 78 ++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index ae90ba51f..ce66ab953 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -32,6 +32,7 @@ import java.awt.datatransfer.*; import java.awt.event.*; import java.awt.print.*; import java.io.*; +import java.nio.file.*; import java.util.*; import java.util.List; import java.util.Timer; @@ -2330,6 +2331,8 @@ public abstract class Editor extends JFrame implements RunnerListener { Base.showWarning("Error", "Could not create the sketch.", e); return false; } + initFileChangeListener(); + header.rebuild(); updateTitle(); // Disable untitled setting from previous document, if any @@ -2349,6 +2352,80 @@ public abstract class Editor extends JFrame implements RunnerListener { // return false; // } } + + + //true when the file is saved, before the next scan for updates + private boolean saved; + + private void initFileChangeListener() { + WatchKey key = null; + try { + WatchService watchService = FileSystems.getDefault().newWatchService(); + key = sketch.getFolder().toPath() + .register(watchService, +// StandardWatchEventKinds.ENTRY_CREATE, +// StandardWatchEventKinds.ENTRY_DELETE, + StandardWatchEventKinds.ENTRY_MODIFY); + } catch (IOException e) { + //registring the watch failed, ignore it + } + + final WatchKey finKey = key; + + if (key != null) { + //the key can now be polled for changes in the files + Thread th = new Thread(new Runnable() { + @Override + public void run() { + //polls for changes to the directory + while (true) { + try { + //check every 5s if the file has changed + Thread.sleep(5000); + } catch (InterruptedException e) { + } + List> events = finKey.pollEvents(); + processFileEvents(events); + + //if the directory was deleted, then quit the loop + if (!finKey.isValid()) { + break; + } + } + } + }); + th.start(); + } + } + + /** + * called when a file is changed + * + * @param events + * the list of events that have occured in the registered folder + * (sketch.getFolder()) + */ + private void processFileEvents(List> events) { + for (WatchEvent e : events) { + //if the file was saved, don't prompt anything + if (saved) + break; + if (e.kind().equals(StandardWatchEventKinds.ENTRY_MODIFY)) { + int response = Base + .showYesNoQuestion(Editor.this, "File Modified", + "A file has been modified externally", + "Would you like to reload the sketch?"); + if (response == 0) { + //reload the sketch + sketch.reload(); + header.rebuild(); + } + } else { + //for now, do nothing + } + } + saved = false; + } /** @@ -2403,6 +2480,7 @@ public abstract class Editor extends JFrame implements RunnerListener { statusNotice("Saving..."); try { if (sketch.save()) { + saved = true; statusNotice("Done Saving."); } else { statusEmpty(); From 136845ebf772fb082d1e6200ccf29b76a20faffc Mon Sep 17 00:00:00 2001 From: patrick Date: Mon, 7 Jul 2014 14:06:43 -0400 Subject: [PATCH 17/47] Reduced poll-time to 100ms and exported it to a variable Added didReload flag to prevent popping up loads of dialogs if a lot of files were modfied --- app/src/processing/app/Editor.java | 31 ++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index ce66ab953..ed264f78a 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -2356,9 +2356,16 @@ public abstract class Editor extends JFrame implements RunnerListener { //true when the file is saved, before the next scan for updates private boolean saved; + + private boolean didReload; + + //the time between polls in ms + private final long FILE_CHECK_DELAY = 100; + + //the key which is being used to poll the fs for changes + private WatchKey key = null; private void initFileChangeListener() { - WatchKey key = null; try { WatchService watchService = FileSystems.getDefault().newWatchService(); key = sketch.getFolder().toPath() @@ -2372,7 +2379,8 @@ public abstract class Editor extends JFrame implements RunnerListener { final WatchKey finKey = key; - if (key != null) { + //if the key is null for some reason, don't bother attaching a listener to it, they can deal without one + if (finKey != null) { //the key can now be polled for changes in the files Thread th = new Thread(new Runnable() { @Override @@ -2380,8 +2388,8 @@ public abstract class Editor extends JFrame implements RunnerListener { //polls for changes to the directory while (true) { try { - //check every 5s if the file has changed - Thread.sleep(5000); + //check every .1s if the file has changed + Thread.sleep(FILE_CHECK_DELAY); } catch (InterruptedException e) { } List> events = finKey.pollEvents(); @@ -2406,11 +2414,24 @@ public abstract class Editor extends JFrame implements RunnerListener { * (sketch.getFolder()) */ private void processFileEvents(List> events) { + didReload = false; for (WatchEvent e : events) { + //the context is the name of the file inside the path + //due to some weird shit, if a file was editted in gedit, the context is .goutputstream-XXXXX + //this makes things.... complicated + //System.out.println(e.context()); + //if the file was saved, don't prompt anything if (saved) break; + //if we already reloaded in this cycle, then don't reload again + if (didReload){ + break; + } if (e.kind().equals(StandardWatchEventKinds.ENTRY_MODIFY)) { +// Path p = (Path) e.context(); +// Path root = (Path) key.watchable(); +// Path path = root.resolve(p); int response = Base .showYesNoQuestion(Editor.this, "File Modified", "A file has been modified externally", @@ -2419,8 +2440,10 @@ public abstract class Editor extends JFrame implements RunnerListener { //reload the sketch sketch.reload(); header.rebuild(); + didReload = true; } } else { + //called when a file is created or deleted //for now, do nothing } } From a79f6c9b41220abe457a77d4deaf42b1d85a4b90 Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Wed, 30 Jul 2014 23:15:22 +0530 Subject: [PATCH 18/47] fixed highlighting issues with last line number --- .../experimental/ErrorCheckerService.java | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/pdex/src/processing/mode/experimental/ErrorCheckerService.java b/pdex/src/processing/mode/experimental/ErrorCheckerService.java index a68a2ebe8..6b6eeaeff 100644 --- a/pdex/src/processing/mode/experimental/ErrorCheckerService.java +++ b/pdex/src/processing/mode/experimental/ErrorCheckerService.java @@ -728,7 +728,8 @@ public class ErrorCheckerService implements Runnable{ .getElement(javaLineNumber); if (lineElement == null) { log("calcPDEOffsetsForProbList(): Couldn't fetch javalinenum " - + javaLineNumber); + + javaLineNumber + "\nProblem: " + p); + p.setPDEOffsets(-1,-1); continue; } String javaLine = javaSource @@ -739,7 +740,8 @@ public class ErrorCheckerService implements Runnable{ .getDefaultRootElement().getElement(p.getLineNumber()); if (pdeLineElement == null) { log("calcPDEOffsetsForProbList(): Couldn't fetch pdelinenum " - + javaLineNumber); + + javaLineNumber + "\nProblem: " + p); + p.setPDEOffsets(-1,-1); continue; } String pdeLine = pdeTabs[p.getTabIndex()] @@ -1442,17 +1444,32 @@ public class ErrorCheckerService implements Runnable{ if (p == null) return; try { - astGenerator.highlightPDECode(p.getTabIndex(), - p.getLineNumber(), - p.getPDELineStartOffset(), - (p.getPDELineStopOffset() - - p.getPDELineStartOffset() + 1)); - editor.getTextArea().scrollTo(p.getLineNumber(), 0); + if(p.getPDELineStartOffset() == -1 || p.getPDELineStopOffset() == -1){ + // bad offsets, don't highlight, just scroll. + editor.toFront(); + editor.getSketch().setCurrentCode(p.getTabIndex()); + } + else { + astGenerator.highlightPDECode(p.getTabIndex(), + p.getLineNumber(), + p.getPDELineStartOffset(), + (p.getPDELineStopOffset() + - p.getPDELineStartOffset() + 1)); + } + + // scroll, but within boundaries + // 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) { + editor.getTextArea().scrollTo(p.getLineNumber(), 0); + } editor.repaint(); } catch (Exception e) { - System.err.println(e - + " : Error while selecting text in scrollToErrorLine()"); - e.printStackTrace(); + logE(e + + " : Error while selecting text in scrollToErrorLine(), for problem: " + p); } // log("---"); } From 2d22abfe17dd2a51828a48dcd9095503d364b327 Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Thu, 31 Jul 2014 10:05:56 +0530 Subject: [PATCH 19/47] fixes #2664 --- .../mode/experimental/ExperimentalMode.java | 2 +- .../mode/experimental/OffsetMatcher.java | 67 ++++++++++++------- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/pdex/src/processing/mode/experimental/ExperimentalMode.java b/pdex/src/processing/mode/experimental/ExperimentalMode.java index 94d0f9778..63e4f0ad7 100755 --- a/pdex/src/processing/mode/experimental/ExperimentalMode.java +++ b/pdex/src/processing/mode/experimental/ExperimentalMode.java @@ -56,7 +56,7 @@ public class ExperimentalMode extends JavaMode { public static final boolean VERBOSE_LOGGING = true; //public static final boolean VERBOSE_LOGGING = false; public static final int LOG_SIZE = 512 * 1024; // max log file size (in bytes) - public static boolean DEBUG = !true; + public static boolean DEBUG = true; public ExperimentalMode(Base base, File folder) { super(base, folder); diff --git a/pdex/src/processing/mode/experimental/OffsetMatcher.java b/pdex/src/processing/mode/experimental/OffsetMatcher.java index 310e596d4..da62bb5a6 100644 --- a/pdex/src/processing/mode/experimental/OffsetMatcher.java +++ b/pdex/src/processing/mode/experimental/OffsetMatcher.java @@ -51,25 +51,32 @@ public class OffsetMatcher { } // log("PDE <-> Java"); - for (int i = 0; i < offsetMatch.size(); i++) { +// for (int i = 0; i < offsetMatch.size(); i++) { // log(offsetMatch.get(i).pdeOffset + " <-> " // + offsetMatch.get(i).javaOffset + -// ", " + word1.charAt(offsetMatch.get(i).pdeOffset) -// + " <-> " + word2.charAt(offsetMatch.get(i).javaOffset)); - } +// ", " + pdeCodeLine.charAt(offsetMatch.get(i).pdeOffset) +// + " <-> " + javaCodeLine.charAt(offsetMatch.get(i).javaOffset)); +// } // log("Length " + offsetMatch.size()); } public int getPdeOffForJavaOff(int start, int length) { - // log("PDE :" + pdeCodeLine + "\nJAVA:" + javaCodeLine); +// log("PDE :" + pdeCodeLine + "\nJAVA:" + javaCodeLine); +// log("getPdeOffForJavaOff() start:" + start + ", len " + length); if(!matchingNeeded) return start; - int ans = getPdeOffForJavaOff(start); //, end = getPdeOffForJavaOff(start + length - 1); -// log(start + " java start off, pde start off " -// + ans); -// log((start + length - 1) + " java end off, pde end off " -// + end); -// log("J: " + javaCodeLine.substring(start, start + length) + "\nP: " -// + pdeCodeLine.substring(ans, end + 1)); + int ans = getPdeOffForJavaOff(start); + int end = getPdeOffForJavaOff(start + length - 1); + if(ans == -1 || end == -1){ +// log("ans: " + ans + " end: " + end); + } + else { +// log(start + " java start off, pde start off " +// + ans); +// log((start + length - 1) + " java end off, pde end off " +// + end); +// log("J: " + javaCodeLine.substring(start, start + length) + "\nP: " +// + pdeCodeLine.substring(ans, end + 1)); + } return ans; } @@ -84,18 +91,25 @@ public class OffsetMatcher { } public int getPdeOffForJavaOff(int javaOff) { - if(!matchingNeeded) return javaOff; + if (!matchingNeeded) + return javaOff; for (int i = offsetMatch.size() - 1; i >= 0; i--) { if (offsetMatch.get(i).javaOffset < javaOff) { continue; } else if (offsetMatch.get(i).javaOffset == javaOff) { // int j = i; - while (offsetMatch.get(--i).javaOffset == javaOff) { + + // sometimes there are multiple repeated j offsets for a single pde offset + // so go to the last one, with bound check + while (i > 0 && offsetMatch.get(--i).javaOffset == javaOff) { // log("MP " + offsetMatch.get(i).javaOffset + " " // + offsetMatch.get(i).pdeOffset); } - int pdeOff = offsetMatch.get(++i).pdeOffset; - while (i > 0 && offsetMatch.get(--i).pdeOffset == pdeOff); + if (i + 1 < offsetMatch.size()) { // bounds check, see #2664 + int pdeOff = offsetMatch.get(++i).pdeOffset; + while (i > 0 && offsetMatch.get(--i).pdeOffset == pdeOff) { + } + } int j = i + 1; if (j > -1 && j < offsetMatch.size()) return offsetMatch.get(j).pdeOffset; @@ -112,12 +126,15 @@ public class OffsetMatcher { continue; } else if (offsetMatch.get(i).pdeOffset == pdeOff) { // int j = i; - while (offsetMatch.get(--i).pdeOffset == pdeOff) { + while (i > 0 && offsetMatch.get(--i).pdeOffset == pdeOff) { // log("MP " + offsetMatch.get(i).javaOffset + " " // + offsetMatch.get(i).pdeOffset); } - int javaOff = offsetMatch.get(++i).javaOffset; - while (i > 0 && offsetMatch.get(--i).javaOffset == javaOff); + if (i + 1 < offsetMatch.size()) { // bounds check, see #2664 + int javaOff = offsetMatch.get(++i).javaOffset; + while (i > 0 && offsetMatch.get(--i).javaOffset == javaOff) { + } + } int j = i + 1; if (j > -1 && j < offsetMatch.size()) return offsetMatch.get(j).javaOffset; @@ -242,12 +259,14 @@ public class OffsetMatcher { // a.getJavaOffForPdeOff(12, 3); // minDistance("static void main(){;", "public static void main(){;"); // minDistance("#bb00aa", "0xffbb00aa"); - a = new OffsetMatcher("void test(ArrayList boids){", - "public void test(ArrayList boids){"); - a.getJavaOffForPdeOff(20,4); +// a = new OffsetMatcher("void test(ArrayList boids){", +// "public void test(ArrayList boids){"); +// a.getJavaOffForPdeOff(20,4); + a = new OffsetMatcher("}", "\n"); + a.getPdeOffForJavaOff(0,1); log("--"); -// a = new OffsetMatcher("color abc = #qwerty;", "int abc = 0xffqwerty;"); -// a.getPdeOffForJavaOff(4, 3); + a = new OffsetMatcher("color abc = #qwerty;", "int abc = 0xffqwerty;"); + a.getPdeOffForJavaOff(4, 3); // a.getJavaOffForPdeOff(6, 3); // distance("c = #bb00aa;", "c = 0xffbb00aa;"); } From 75223917f40873ac9ace5d3a938b8256260e88d8 Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Thu, 31 Jul 2014 10:06:27 +0530 Subject: [PATCH 20/47] forgot to toggle.. --- pdex/src/processing/mode/experimental/ExperimentalMode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pdex/src/processing/mode/experimental/ExperimentalMode.java b/pdex/src/processing/mode/experimental/ExperimentalMode.java index 63e4f0ad7..94d0f9778 100755 --- a/pdex/src/processing/mode/experimental/ExperimentalMode.java +++ b/pdex/src/processing/mode/experimental/ExperimentalMode.java @@ -56,7 +56,7 @@ public class ExperimentalMode extends JavaMode { public static final boolean VERBOSE_LOGGING = true; //public static final boolean VERBOSE_LOGGING = false; public static final int LOG_SIZE = 512 * 1024; // max log file size (in bytes) - public static boolean DEBUG = true; + public static boolean DEBUG = !true; public ExperimentalMode(Base base, File folder) { super(base, folder); From 37d21068e46f7f9d7f6a900cd0d101951d16b15d Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Thu, 31 Jul 2014 10:47:43 +0530 Subject: [PATCH 21/47] Fixes #2675 --- pdex/src/processing/mode/experimental/DebugEditor.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pdex/src/processing/mode/experimental/DebugEditor.java b/pdex/src/processing/mode/experimental/DebugEditor.java index c278b680c..50642cc9b 100755 --- a/pdex/src/processing/mode/experimental/DebugEditor.java +++ b/pdex/src/processing/mode/experimental/DebugEditor.java @@ -17,6 +17,7 @@ */ package processing.mode.experimental; import static processing.mode.experimental.ExperimentalMode.log; +import static processing.mode.experimental.ExperimentalMode.logE; import galsasson.mode.tweak.ColorControlBox; import galsasson.mode.tweak.Handle; import galsasson.mode.tweak.SketchParser; @@ -882,6 +883,13 @@ public class DebugEditor extends JavaEditor implements ActionListener { */ protected void addBreakpointComments(String tabFilename) { SketchCode tab = getTab(tabFilename); + if(tab == null) { + // this method gets called twice when saving sketch for the first time + // once with new name and another with old(causing NPE). Keep an eye out + // for potential issues. See #2675. TODO: + logE("Illegal tab name to addBreakpointComments() " + tabFilename); + return; + } List bps = dbg.getBreakpoints(tab.getFileName()); // load the source file @@ -907,7 +915,7 @@ public class DebugEditor extends JavaEditor implements ActionListener { public boolean handleSave(boolean immediately) { //System.out.println("handleSave " + immediately); - log("handleSave, viewing autosave? " + viewingAutosaveBackup); + //log("handleSave, viewing autosave? " + viewingAutosaveBackup); /* If user wants to save a backup, the backup sketch should get * copied to the main sketch directory, simply reload the main sketch. */ From 9088214f92cc04c49a9f0e13ab4310d757094105 Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Thu, 31 Jul 2014 12:29:12 +0530 Subject: [PATCH 22/47] fix CC again --- .../mode/experimental/ASTGenerator.java | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/pdex/src/processing/mode/experimental/ASTGenerator.java b/pdex/src/processing/mode/experimental/ASTGenerator.java index 5918e8e4b..ea47a91d3 100644 --- a/pdex/src/processing/mode/experimental/ASTGenerator.java +++ b/pdex/src/processing/mode/experimental/ASTGenerator.java @@ -549,7 +549,7 @@ public class ASTGenerator { ASTNode astNode, boolean noCompare) { log("Resolve 3rdParty expr-- " + getNodeAsString(astNode) + " nearest node " + getNodeAsString(nearestNode)); - + if(astNode == null) return null; ClassMember scopeParent = null; SimpleType stp = null; if(astNode instanceof SimpleName){ @@ -1008,22 +1008,27 @@ public class ASTGenerator { ASTNode childExpr = getChildExpression(testnode); log("Parent expression : " + getParentExpression(testnode)); log("Child expression : " + childExpr); - - if (!noCompare) { - log("Original testnode " - + getNodeAsString(testnode)); - testnode = getParentExpression(testnode); - log("Corrected testnode " - + getNodeAsString(testnode)); + if (childExpr != null) { + if (!noCompare) { + log("Original testnode " + + getNodeAsString(testnode)); + testnode = getParentExpression(testnode); + log("Corrected testnode " + + getNodeAsString(testnode)); + } + ClassMember expr = resolveExpression3rdParty(nearestNode, testnode, + noCompare); + if (expr == null) { + log("Expr is null"); + } else { + log("Expr is " + expr.toString()); + candidates = getMembersForType(expr, childExpr.toString(), + noCompare, false); + } } - ClassMember expr = resolveExpression3rdParty(nearestNode, testnode, - noCompare); - if (expr == null) { - log("Expr is null"); - } else { - log("Expr is " + expr.toString()); - candidates = getMembersForType(expr, childExpr.toString(), - noCompare, false); + else + { + log("ChildExpr is null"); } } From a79bf0301e3e14e2c13de993a146a06cc1255378 Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Thu, 31 Jul 2014 12:33:53 +0530 Subject: [PATCH 23/47] auto ant build for pdex --- pdex/.externalToolBuilders/Ant_Builder.launch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pdex/.externalToolBuilders/Ant_Builder.launch b/pdex/.externalToolBuilders/Ant_Builder.launch index 2f93ff37a..9b95f0090 100644 --- a/pdex/.externalToolBuilders/Ant_Builder.launch +++ b/pdex/.externalToolBuilders/Ant_Builder.launch @@ -12,7 +12,7 @@ - + From c4988c6c6630b9173367a516cbe3291b5046bb9d Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Thu, 31 Jul 2014 12:44:31 +0530 Subject: [PATCH 24/47] Error checking delay increased. --- pdex/src/processing/mode/experimental/ErrorCheckerService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pdex/src/processing/mode/experimental/ErrorCheckerService.java b/pdex/src/processing/mode/experimental/ErrorCheckerService.java index 6b6eeaeff..2f63a752a 100644 --- a/pdex/src/processing/mode/experimental/ErrorCheckerService.java +++ b/pdex/src/processing/mode/experimental/ErrorCheckerService.java @@ -68,7 +68,7 @@ public class ErrorCheckerService implements Runnable{ /** * Error check happens every sleepTime milliseconds */ - public static final int sleepTime = 1000; + public static final int sleepTime = 4000; /** * The amazing eclipse ast parser From 4fa5fc4ab3e6e405866b458d2ae1e72a3971faec Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Thu, 31 Jul 2014 13:31:09 +0530 Subject: [PATCH 25/47] Fixes #2676 --- pdex/src/processing/mode/experimental/DebugEditor.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pdex/src/processing/mode/experimental/DebugEditor.java b/pdex/src/processing/mode/experimental/DebugEditor.java index 50642cc9b..861806ada 100755 --- a/pdex/src/processing/mode/experimental/DebugEditor.java +++ b/pdex/src/processing/mode/experimental/DebugEditor.java @@ -1909,6 +1909,11 @@ public class DebugEditor extends JavaEditor implements ActionListener { public void deactivateRun() { // toolbar.deactivate(TweakToolbar.RUN); + if(toolbar instanceof DebugToolbar){ + toolbar.deactivate(DebugToolbar.RUN); + } else { + super.deactivateRun(); + } } private boolean[] getModifiedTabs(ArrayList handles[]) From 37ff06741ee15052a8511abafff6e53277f4634e Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 31 Jul 2014 07:35:25 -0400 Subject: [PATCH 26/47] add notes re: Manindra fixes --- todo.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/todo.txt b/todo.txt index c7e49d2d7..a2eb233a6 100644 --- a/todo.txt +++ b/todo.txt @@ -54,6 +54,10 @@ X since it may take a long time (i.e. 1000s of screen grabs) X http://code.google.com/p/processing/issues/detail?id=31 X https://github.com/processing/processing/issues/70 X https://github.com/processing/processing/pull/2370 +X NullPointerException in addBreakpointComments() when saving sketch +X https://github.com/processing/processing/issues/2675 +X run button seems to stay highlighted permanently +X https://github.com/processing/processing/issues/2676 pulls X insert tabs properly when prefs set for tabs mode From bd98e770d3ec4b854a9285a1314441ff45ea0bce Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Thu, 31 Jul 2014 14:21:16 +0200 Subject: [PATCH 27/47] fixed utf8 encoding --- .../app/languages/PDE_de.properties | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/app/src/processing/app/languages/PDE_de.properties b/app/src/processing/app/languages/PDE_de.properties index f0630fef4..2b4bdbd84 100644 --- a/app/src/processing/app/languages/PDE_de.properties +++ b/app/src/processing/app/languages/PDE_de.properties @@ -12,11 +12,11 @@ # | File | menu.file = Datei menu.file.new = Neu -menu.file.open = Öffnen ... +menu.file.open = Öffnen ... menu.file.sketchbook = Sketchbook -menu.file.recent = Letzte Dateien öffnen +menu.file.recent = Letzte Dateien öffnen menu.file.examples = Beispiele ... -menu.file.close = Schließen +menu.file.close = Schließen menu.file.save = Speichern menu.file.save_as = Speichern unter ... menu.file.export_application = Exportieren @@ -28,17 +28,17 @@ menu.file.quit = Beenden # | File | Edit | Sketch | Library | Tools | Help | # | Edit | menu.edit = Bearbeiten -menu.edit.undo = Rückgängig +menu.edit.undo = Rückgängig menu.edit.redo = Wiederholen menu.edit.cut = Ausschneiden menu.edit.copy = Kopieren menu.edit.copy_as_html = Kopieren als HTML -menu.edit.paste = Einfügen -menu.edit.select_all = Alle auswählen +menu.edit.paste = Einfügen +menu.edit.select_all = Alle auswählen menu.edit.auto_format = Autoformatierung menu.edit.comment_uncomment = Ein- und Auskommentieren -menu.edit.increase_indent = \u2192 Ausrücken -menu.edit.decrease_indent = \u2190 Einrücken +menu.edit.increase_indent = \u2192 Ausrücken +menu.edit.decrease_indent = \u2190 Einrücken menu.edit.find = Suchen ... menu.edit.find_next = Weiter suchen menu.edit.find_previous = Vorher suchen @@ -48,12 +48,12 @@ menu.edit.use_selection_for_find = Suche in Auswahl # | Sketch | menu.sketch = Sketch menu.sketch.show_sketch_folder = Zeige Sketch Verzeichnis -menu.sketch.add_file = Datei hinzufügen ... +menu.sketch.add_file = Datei hinzufügen ... # | File | Edit | Sketch | Library | Tools | Help | # | Library | menu.library = Library importieren... -menu.library.add_library = Library hinzufügen... +menu.library.add_library = Library hinzufügen... menu.library.contributed = Contributed menu.library.no_core_libraries = Mode weist keine Kern-Libraries auf @@ -65,19 +65,19 @@ menu.tools.create_font = Schrift erstellen ... menu.tools.archive_sketch = Sketch archivieren ... menu.tools.fix_the_serial_lbrary = "Serial Library" beheben ... menu.tools.install_processing_java = "processing-java" installieren ... -menu.tools.add_tool = Tool hinzufügen ... +menu.tools.add_tool = Tool hinzufügen ... # | File | Edit | Sketch | Library | Tools | Help | # | Help | menu.help = Hilfe -menu.help.about = Über Processing +menu.help.about = Über Processing menu.help.environment = Entwicklungsumgebung menu.help.reference = Referenz menu.help.find_in_reference = Suche in Referenz menu.help.online = Online menu.help.getting_started = Erste Schritte menu.help.troubleshooting = Fehlerbehandlung -menu.help.faq = Häufig gestellte Fragen +menu.help.faq = Häufig gestellte Fragen menu.help.foundation = "The Processing Foundation" menu.help.visit = Processing.org besuchen @@ -98,12 +98,12 @@ prompt.export = Exportieren # Frames # Open (Frame) -open = Processing Sketch öffnen ... +open = Processing Sketch öffnen ... # Save (Frame) save = Sketch speichern unter ... -save.title = Änderungen speichern? -save.hint = Wenn nicht, gehen alle Änderungen verloren. +save.title = Änderungen speichern? +save.hint = Wenn nicht, gehen alle Änderungen verloren. save.btn.save = Speichern save.btn.dont_save = Nicht speichern @@ -114,41 +114,41 @@ preferences.requires_restart = nach Neustart von Processing aktiv preferences.sketchbook_location = Sketchbook Pfad preferences.language = Sprache preferences.editor_and_console_font = Editor und Console Schriftart -preferences.editor_font_size = Editor Schriftgröße -preferences.console_font_size = Console Schriftgröße -preferences.use_smooth_text = Editor Textglättung +preferences.editor_font_size = Editor Schriftgröße +preferences.console_font_size = Console Schriftgröße +preferences.use_smooth_text = Editor Textglättung preferences.enable_complex_text_input = Komplexe Sprachen erlauben preferences.enable_complex_text_input_example = z.B. Japanisch -preferences.increase_max_memory = Maximalen Speicher erhöhen auf +preferences.increase_max_memory = Maximalen Speicher erhöhen auf preferences.delete_previous_folder_on_export = Leere Verzeichnis beim Exportieren preferences.hide_toolbar_background_image = Hintergrundgrafik der Toolbar ausblenden -preferences.check_for_updates_on_startup = Prüfung auf Updates bei Programmstart +preferences.check_for_updates_on_startup = Prüfung auf Updates bei Programmstart preferences.run_sketches_on_display = Starte Sketch auf Bildschirm -preferences.automatically_associate_pde_files = Öffne .pde Dateien automatisch mit Processing +preferences.automatically_associate_pde_files = Öffne .pde Dateien automatisch mit Processing preferences.launch_programs_in = Anwendungen starten im preferences.launch_programs_in.mode = Modus -preferences.file = Weitere Einstellungen können in der folgenden Datei bearbeitet werden -preferences.file.hint = Processing darf während der Bearbeitung nicht laufen +preferences.file = Weitere Einstellungen können in der folgenden Datei bearbeitet werden +preferences.file.hint = Processing darf während der Bearbeitung nicht laufen # Sketchbook Location (Frame) -sketchbook_location = Neuen Sketchbook Pfad auswählen +sketchbook_location = Neuen Sketchbook Pfad auswählen # Export (Frame) export = Export Optionen export.platforms = Plattformen export.options = Optionen -export.options.fullscreen = Bildschirmfüllend (Present Mode) +export.options.fullscreen = Bildschirmfüllend (Present Mode) export.options.show_stop_button = Sichtbarer Stopp Button -export.description.line1 = Exportierte Sketches sind ausführbare An- -export.description.line2 = wendungen für die ausgewählten Plattformen. +export.description.line1 = Exportierte Sketches sind ausführbare An- +export.description.line2 = wendungen für die ausgewählten Plattformen. # Find (Frame) find = Suchen find.find = Suche: find.replace_with = Ersetzen durch: -find.ignore_case = Groß-/Kleinschreibung ignorieren +find.ignore_case = Groß-/Kleinschreibung ignorieren find.all_tabs = Alle Tabs -find.wrap_around = Nächsten Zeilen +find.wrap_around = Nächsten Zeilen find.btn.replace_all = Alle ersetzen find.btn.replace = Ersetzen find.btn.find_and_replace = Suchen & Ersetzen @@ -183,16 +183,16 @@ toolbar.run = Starten toolbar.present = Starten in Vollbild toolbar.stop = Stoppen toolbar.new = Neu -toolbar.open = Öffnen +toolbar.open = Öffnen toolbar.save = Speichern toolbar.export_application = Exportieren -toolbar.add_mode = Modus hinzufügen ... +toolbar.add_mode = Modus hinzufügen ... # [Tab1] [Tab2] [v] editor.header.new_tab = Neuer Tab editor.header.rename = Unbenennen -editor.header.delete = Löschen -editor.header.previous_tab = Nächster Tab +editor.header.delete = Löschen +editor.header.previous_tab = Nächster Tab editor.header.next_tab = Vorheriger Tab editor.header.delete.warning.title = Yeah, nein. -editor.header.delete.warning.text = Du kannst nicht den letzten Tab des letzten Sketches löschen. \ No newline at end of file +editor.header.delete.warning.text = Du kannst nicht den letzten Tab des letzten Sketches löschen. \ No newline at end of file From 77d6d683ae321b3b696ae29f9fecfd70b4f7ba3f Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 31 Jul 2014 09:54:59 -0400 Subject: [PATCH 28/47] Increased poll time on reload to 1s Added boolean reloadEnabled which can be set to false to disable reloading (currently always true) Editted checkModified (called if and only if a close is requested) to check if the close will be successful (i.e. if it will return true) Added code in checkModified to trigger the stopping of the reload thread when this editor is closed --- app/src/processing/app/Editor.java | 1173 +++++++++++++--------------- 1 file changed, 526 insertions(+), 647 deletions(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index ed264f78a..410cbfeec 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -1,24 +1,24 @@ /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ /* - Part of the Processing project - http://processing.org + Part of the Processing project - http://processing.org - Copyright (c) 2004-12 Ben Fry and Casey Reas - Copyright (c) 2001-04 Massachusetts Institute of Technology + Copyright (c) 2004-12 Ben Fry and Casey Reas + Copyright (c) 2001-04 Massachusetts Institute of Technology - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 - as published by the Free Software Foundation. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ package processing.app; @@ -47,15 +47,16 @@ import javax.swing.undo.*; */ public abstract class Editor extends JFrame implements RunnerListener { protected Base base; + protected EditorState state; + protected Mode mode; // otherwise, if the window is resized with the message label // set to blank, it's preferredSize() will be fukered - static protected final String EMPTY = - " " + - " " + - " "; + static protected final String EMPTY = " " + + " " + + " "; /** * true if this file has not yet been given a name by the user @@ -63,22 +64,31 @@ public abstract class Editor extends JFrame implements RunnerListener { // private boolean untitled; private PageFormat pageFormat; + private PrinterJob printerJob; // file and sketch menus for re-inserting items private JMenu fileMenu; + // private JMenuItem saveMenuItem; // private JMenuItem saveAsMenuItem; private JMenu sketchMenu; protected EditorHeader header; + protected EditorToolbar toolbar; + protected JEditTextArea textarea; + protected EditorStatus status; + protected JSplitPane splitPane; + protected JPanel consolePanel; + protected EditorConsole console; + protected EditorLineStatus lineStatus; // currently opened program @@ -89,48 +99,60 @@ public abstract class Editor extends JFrame implements RunnerListener { // undo fellers private JMenuItem undoItem, redoItem; + protected UndoAction undoAction; + protected RedoAction redoAction; + /** the currently selected tab's undo manager */ private UndoManager undo; + // used internally for every edit. Groups hotkey-event text manipulations and // groups multi-character inputs into a single undos. private CompoundEdit compoundEdit; + // timer to decide when to group characters into an undo private Timer timer; + private TimerTask endUndoEvent; + // true if inserting text, false if removing text private boolean isInserting; + // maintain caret position during undo operations private final Stack caretUndoStack = new Stack(); + private final Stack caretRedoStack = new Stack(); private FindReplace find; + JMenu toolsMenu; + JMenu modeMenu; ArrayList coreTools; + public ArrayList contribTools; - // protected Editor(final Base base, String path, int[] location, final Mode mode) { - protected Editor(final Base base, String path, EditorState state, final Mode mode) { + protected Editor(final Base base, String path, EditorState state, + final Mode mode) { super("Processing", state.checkConfig()); this.base = base; this.state = state; this.mode = mode; - Toolkit.setIcon(this); // TODO should this be per-mode? + Toolkit.setIcon(this); // TODO should this be per-mode? // Install default actions for Run, Present, etc. // resetHandlers(); // add listener to handle window close box hit event addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - base.handleClose(Editor.this, false); - } - }); + public void windowClosing(WindowEvent e) { + base.handleClose(Editor.this, false); + } + }); // don't close the window when clicked, the app will take care // of that via the handleQuitInternal() methods // http://dev.processing.org/bugs/show_bug.cgi?id=440 @@ -138,29 +160,29 @@ public abstract class Editor extends JFrame implements RunnerListener { // When bringing a window to front, let the Base know addWindowListener(new WindowAdapter() { - public void windowActivated(WindowEvent e) { + public void windowActivated(WindowEvent e) { // EditorConsole.systemOut.println("editor window activated"); - base.handleActivated(Editor.this); + base.handleActivated(Editor.this); // mode.handleActivated(Editor.this); - fileMenu.insert(base.getSketchbookMenu(), 2); - fileMenu.insert(base.getRecentMenu(), 3); + fileMenu.insert(base.getSketchbookMenu(), 2); + fileMenu.insert(base.getRecentMenu(), 3); // fileMenu.insert(mode.getExamplesMenu(), 3); - sketchMenu.insert(mode.getImportMenu(), 4); - mode.insertToolbarRecentMenu(); - } + sketchMenu.insert(mode.getImportMenu(), 4); + mode.insertToolbarRecentMenu(); + } - // added for 1.0.5 - // http://dev.processing.org/bugs/show_bug.cgi?id=1260 - public void windowDeactivated(WindowEvent e) { + // added for 1.0.5 + // http://dev.processing.org/bugs/show_bug.cgi?id=1260 + public void windowDeactivated(WindowEvent e) { // EditorConsole.systemErr.println("editor window deactivated"); // mode.handleDeactivated(Editor.this); - fileMenu.remove(base.getSketchbookMenu()); - fileMenu.remove(base.getRecentMenu()); + fileMenu.remove(base.getSketchbookMenu()); + fileMenu.remove(base.getRecentMenu()); // fileMenu.remove(mode.getExamplesMenu()); - sketchMenu.remove(mode.getImportMenu()); - mode.removeToolbarRecentMenu(); - } - }); + sketchMenu.remove(mode.getImportMenu()); + mode.removeToolbarRecentMenu(); + } + }); timer = new Timer(); @@ -237,6 +259,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // end an undo-chunk any time the caret moves unless it's when text is edited textarea.addCaretListener(new CaretListener() { String lastText = textarea.getText(); + public void caretUpdate(CaretEvent e) { String newText = textarea.getText(); if (lastText.equals(newText) && isDirectEdit()) { @@ -255,8 +278,11 @@ public abstract class Editor extends JFrame implements RunnerListener { state.apply(this); // Set the minimum size for the editor window - setMinimumSize(new Dimension(Preferences.getInteger("editor.window.width.min"), - Preferences.getInteger("editor.window.height.min"))); + setMinimumSize(new Dimension( + Preferences + .getInteger("editor.window.width.min"), + Preferences + .getInteger("editor.window.height.min"))); // Bring back the general options for the editor applyPreferences(); @@ -282,7 +308,6 @@ public abstract class Editor extends JFrame implements RunnerListener { } } - /** * Broken out to get modes working for GSOC, but this needs a longer-term * solution where the listeners are handled properly. @@ -291,22 +316,18 @@ public abstract class Editor extends JFrame implements RunnerListener { return new JEditTextArea(new PdeTextAreaDefaults(mode)); } - public EditorState getEditorState() { return state; } - public void removeRecent() { base.removeRecent(this); } - public void addRecent() { base.handleRecent(this); } - /** * Handles files dragged & dropped from the desktop and into the editor * window. Dragging files into the editor window is the same as using @@ -322,12 +343,12 @@ public abstract class Editor extends JFrame implements RunnerListener { int successful = 0; try { - DataFlavor uriListFlavor = - new DataFlavor("text/uri-list;class=java.lang.String"); + DataFlavor uriListFlavor = new DataFlavor( + "text/uri-list;class=java.lang.String"); if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { - java.util.List list = (java.util.List) - transferable.getTransferData(DataFlavor.javaFileListFlavor); + java.util.List list = (java.util.List) transferable + .getTransferData(DataFlavor.javaFileListFlavor); for (int i = 0; i < list.size(); i++) { File file = (File) list.get(i); if (sketch.addFile(file)) { @@ -337,10 +358,11 @@ public abstract class Editor extends JFrame implements RunnerListener { } else if (transferable.isDataFlavorSupported(uriListFlavor)) { // Some platforms (Mac OS X and Linux, when this began) preferred // this method of moving files. - String data = (String)transferable.getTransferData(uriListFlavor); + String data = (String) transferable.getTransferData(uriListFlavor); String[] pieces = PApplet.splitTokens(data, "\r\n"); for (int i = 0; i < pieces.length; i++) { - if (pieces[i].startsWith("#")) continue; + if (pieces[i].startsWith("#")) + continue; String path = null; if (pieces[i].startsWith("file:///")) { @@ -354,8 +376,10 @@ public abstract class Editor extends JFrame implements RunnerListener { } } } catch (Exception e) { - Base.showWarning("Drag & Drop Problem", - "An error occurred while trying to add files to the sketch.", e); + Base + .showWarning("Drag & Drop Problem", + "An error occurred while trying to add files to the sketch.", + e); return false; } @@ -372,17 +396,14 @@ public abstract class Editor extends JFrame implements RunnerListener { } } - public Base getBase() { return base; } - public Mode getMode() { return mode; } - protected void initModeMenu() { modeMenu = new JMenu(); ButtonGroup modeGroup = new ButtonGroup(); @@ -410,24 +431,18 @@ public abstract class Editor extends JFrame implements RunnerListener { modeMenu.add(addLib); } - public JMenu getModeMenu() { return modeMenu; } - - // public Settings getTheme() { // return mode.getTheme(); // } - abstract public EditorToolbar createToolbar(); - abstract public Formatter createFormatter(); - // protected void setPlacement(int[] location) { // setBounds(location[0], location[1], location[2], location[3]); // if (location[4] != 0) { @@ -452,74 +467,59 @@ public abstract class Editor extends JFrame implements RunnerListener { // return location; // } - protected void setDividerLocation(int pos) { splitPane.setDividerLocation(pos); } - protected int getDividerLocation() { return splitPane.getDividerLocation(); } - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - /** - * Read and apply new values from the preferences, either because - * the app is just starting up, or the user just finished messing - * with things in the Preferences window. + * Read and apply new values from the preferences, either because the app is + * just starting up, or the user just finished messing with things in the + * Preferences window. */ protected void applyPreferences() { // Update fonts and other items controllable from the prefs textarea.getPainter().updateAppearance(); textarea.repaint(); - + console.updateAppearance(); - + // All of this code was specific to using an external editor. /* -// // apply the setting for 'use external editor' -// boolean external = Preferences.getBoolean("editor.external"); -// textarea.setEditable(!external); -// saveMenuItem.setEnabled(!external); -// saveAsMenuItem.setEnabled(!external); - - TextAreaPainter painter = textarea.getPainter(); -// if (external) { -// // disable line highlight and turn off the caret when disabling -// Color color = mode.getColor("editor.external.bgcolor"); -// painter.setBackground(color); -// painter.setLineHighlightEnabled(false); -// textarea.setCaretVisible(false); -// } else { - Color color = mode.getColor("editor.bgcolor"); - painter.setBackground(color); - boolean highlight = Preferences.getBoolean("editor.linehighlight"); - painter.setLineHighlightEnabled(highlight); - textarea.setCaretVisible(true); -// } - - // apply changes to the font size for the editor -// painter.setFont(Preferences.getFont("editor.font")); - - // in case tab expansion stuff has changed - // removing this, just checking prefs directly instead -// listener.applyPreferences(); - - // in case moved to a new location - // For 0125, changing to async version (to be implemented later) - //sketchbook.rebuildMenus(); - // For 0126, moved into Base, which will notify all editors. - //base.rebuildMenusAsync(); + * // // apply the setting for 'use external editor' // boolean external = + * Preferences.getBoolean("editor.external"); // + * textarea.setEditable(!external); // saveMenuItem.setEnabled(!external); + * // saveAsMenuItem.setEnabled(!external); + * + * TextAreaPainter painter = textarea.getPainter(); // if (external) { // // + * disable line highlight and turn off the caret when disabling // Color + * color = mode.getColor("editor.external.bgcolor"); // + * painter.setBackground(color); // painter.setLineHighlightEnabled(false); + * // textarea.setCaretVisible(false); // } else { Color color = + * mode.getColor("editor.bgcolor"); painter.setBackground(color); boolean + * highlight = Preferences.getBoolean("editor.linehighlight"); + * painter.setLineHighlightEnabled(highlight); + * textarea.setCaretVisible(true); // } + * + * // apply changes to the font size for the editor // + * painter.setFont(Preferences.getFont("editor.font")); + * + * // in case tab expansion stuff has changed // removing this, just + * checking prefs directly instead // listener.applyPreferences(); + * + * // in case moved to a new location // For 0125, changing to async version + * (to be implemented later) //sketchbook.rebuildMenus(); // For 0126, moved + * into Base, which will notify all editors. //base.rebuildMenusAsync(); */ } - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - protected void buildMenuBar() { JMenuBar menubar = new JMenuBar(); menubar = new JMenuBar(); @@ -554,10 +554,8 @@ public abstract class Editor extends JFrame implements RunnerListener { setJMenuBar(menubar); } - abstract public JMenu buildFileMenu(); - // public JMenu buildFileMenu(Editor editor) { // return buildFileMenu(editor, null); // } @@ -566,25 +564,24 @@ public abstract class Editor extends JFrame implements RunnerListener { // // most of these items are per-mode // protected JMenu buildFileMenu(Editor editor, JMenuItem[] exportItems) { - protected JMenu buildFileMenu(JMenuItem[] exportItems) { JMenuItem item; JMenu fileMenu = new JMenu("File"); item = Toolkit.newJMenuItem("New", 'N'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - base.handleNew(); - } - }); + public void actionPerformed(ActionEvent e) { + base.handleNew(); + } + }); fileMenu.add(item); item = Toolkit.newJMenuItem("Open...", 'O'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - base.handleOpenPrompt(); - } - }); + public void actionPerformed(ActionEvent e) { + base.handleOpenPrompt(); + } + }); fileMenu.add(item); fileMenu.add(base.getSketchbookMenu()); @@ -673,17 +670,14 @@ public abstract class Editor extends JFrame implements RunnerListener { return fileMenu; } - // public void setSaveItem(JMenuItem item) { // saveMenuItem = item; // } - // public void setSaveAsItem(JMenuItem item) { // saveAsMenuItem = item; // } - protected JMenu buildEditMenu() { JMenu menu = new JMenu("Edit"); JMenuItem item; @@ -696,7 +690,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // http://code.google.com/p/processing/issues/detail?id=363 if (Base.isWindows()) { redoItem = Toolkit.newJMenuItem("Redo", 'Y'); - } else { // Linux and OS X + } else { // Linux and OS X redoItem = Toolkit.newJMenuItemShift("Redo", 'Z'); } redoItem.addActionListener(redoAction = new RedoAction()); @@ -707,107 +701,98 @@ public abstract class Editor extends JFrame implements RunnerListener { // TODO "cut" and "copy" should really only be enabled // if some text is currently selected item = Toolkit.newJMenuItem("Cut", 'X'); - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCut(); - } - }); - menu.add(item); - - item = Toolkit.newJMenuItem("Copy", 'C'); - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - textarea.copy(); - } - }); - menu.add(item); - - item = Toolkit.newJMenuItemShift("Copy as HTML", 'C'); - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCopyAsHTML(); - } - }); - menu.add(item); - - item = Toolkit.newJMenuItem("Paste", 'V'); - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - textarea.paste(); - sketch.setModified(true); - } - }); - menu.add(item); - - item = Toolkit.newJMenuItem("Select All", 'A'); - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - textarea.selectAll(); - } - }); - menu.add(item); - - /* - menu.addSeparator(); - - item = Toolkit.newJMenuItem("Delete Selected Lines", 'D'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - handleDeleteLines(); + handleCut(); } }); menu.add(item); - item = new JMenuItem("Move Selected Lines Up"); - item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, Event.ALT_MASK)); + item = Toolkit.newJMenuItem("Copy", 'C'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleMoveLines(true); - } - }); + public void actionPerformed(ActionEvent e) { + textarea.copy(); + } + }); menu.add(item); - item = new JMenuItem("Move Selected Lines Down"); - item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, Event.ALT_MASK)); + item = Toolkit.newJMenuItemShift("Copy as HTML", 'C'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleMoveLines(false); - } - }); + public void actionPerformed(ActionEvent e) { + handleCopyAsHTML(); + } + }); menu.add(item); + + item = Toolkit.newJMenuItem("Paste", 'V'); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textarea.paste(); + sketch.setModified(true); + } + }); + menu.add(item); + + item = Toolkit.newJMenuItem("Select All", 'A'); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textarea.selectAll(); + } + }); + menu.add(item); + + /* + * menu.addSeparator(); + * + * item = Toolkit.newJMenuItem("Delete Selected Lines", 'D'); + * item.addActionListener(new ActionListener() { public void + * actionPerformed(ActionEvent e) { handleDeleteLines(); } }); + * menu.add(item); + * + * item = new JMenuItem("Move Selected Lines Up"); + * item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, + * Event.ALT_MASK)); item.addActionListener(new ActionListener() { public + * void actionPerformed(ActionEvent e) { handleMoveLines(true); } }); + * menu.add(item); + * + * item = new JMenuItem("Move Selected Lines Down"); + * item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, + * Event.ALT_MASK)); item.addActionListener(new ActionListener() { public + * void actionPerformed(ActionEvent e) { handleMoveLines(false); } }); + * menu.add(item); */ menu.addSeparator(); item = Toolkit.newJMenuItem("Auto Format", 'T'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleAutoFormat(); - } + public void actionPerformed(ActionEvent e) { + handleAutoFormat(); + } }); menu.add(item); item = Toolkit.newJMenuItem("Comment/Uncomment", '/'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCommentUncomment(); - } + public void actionPerformed(ActionEvent e) { + handleCommentUncomment(); + } }); menu.add(item); item = Toolkit.newJMenuItem("Increase Indent", ']'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleIndentOutdent(true); - } + public void actionPerformed(ActionEvent e) { + handleIndentOutdent(true); + } }); menu.add(item); item = Toolkit.newJMenuItem("Decrease Indent", '['); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleIndentOutdent(false); - } + public void actionPerformed(ActionEvent e) { + handleIndentOutdent(false); + } }); menu.add(item); @@ -815,57 +800,55 @@ public abstract class Editor extends JFrame implements RunnerListener { item = Toolkit.newJMenuItem("Find...", 'F'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (find == null) { - find = new FindReplace(Editor.this); - } - //new FindReplace(Editor.this).show(); - find.setVisible(true); + public void actionPerformed(ActionEvent e) { + if (find == null) { + find = new FindReplace(Editor.this); } - }); + //new FindReplace(Editor.this).show(); + find.setVisible(true); + } + }); menu.add(item); // TODO find next should only be enabled after a // search has actually taken place item = Toolkit.newJMenuItem("Find Next", 'G'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (find != null) { - find.findNext(); - } + public void actionPerformed(ActionEvent e) { + if (find != null) { + find.findNext(); } - }); + } + }); menu.add(item); item = Toolkit.newJMenuItemShift("Find Previous", 'G'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (find != null) { - find.findPrevious(); - } + public void actionPerformed(ActionEvent e) { + if (find != null) { + find.findPrevious(); } - }); + } + }); menu.add(item); // For Arduino and Mac, this should be command-E, but that currently conflicts with Export Applet item = Toolkit.newJMenuItemAlt("Use Selection for Find", 'F'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (find == null) { - find = new FindReplace(Editor.this); - } - find.setFindText(getSelectedText()); + public void actionPerformed(ActionEvent e) { + if (find == null) { + find = new FindReplace(Editor.this); } - }); + find.setFindText(getSelectedText()); + } + }); menu.add(item); return menu; } - abstract public JMenu buildSketchMenu(); - protected JMenu buildSketchMenu(JMenuItem[] runItems) { JMenuItem item; sketchMenu = new JMenu("Sketch"); @@ -880,26 +863,26 @@ public abstract class Editor extends JFrame implements RunnerListener { item = Toolkit.newJMenuItem("Show Sketch Folder", 'K'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - Base.openFolder(sketch.getFolder()); - } - }); + public void actionPerformed(ActionEvent e) { + Base.openFolder(sketch.getFolder()); + } + }); sketchMenu.add(item); item.setEnabled(Base.openFolderAvailable()); item = new JMenuItem("Add File..."); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - sketch.handleAddFile(); - } - }); + public void actionPerformed(ActionEvent e) { + sketch.handleAddFile(); + } + }); sketchMenu.add(item); sketchMenu.addSeparator(); // final Editor editorName = this; - - sketchMenu.addMenuListener(new MenuListener() { + + sketchMenu.addMenuListener(new MenuListener() { // Menu Listener that populates the menu only when the menu is opened List menuList = new ArrayList(); @@ -910,17 +893,18 @@ public abstract class Editor extends JFrame implements RunnerListener { JMenuItem item; for (final Editor editor : base.getEditors()) { //if (Editor.this.getSketch().getName().trim().contains(editor2.getSketch().getName().trim())) - if (getSketch().getMainFilePath().equals(editor.getSketch().getMainFilePath())) { + if (getSketch().getMainFilePath().equals(editor.getSketch() + .getMainFilePath())) { item = new JCheckBoxMenuItem(editor.getSketch().getName()); item.setSelected(true); } else { item = new JMenuItem(editor.getSketch().getName()); } - item.setText(editor.getSketch().getName() + - " (" + editor.getMode().getTitle() + ")"); + item.setText(editor.getSketch().getName() + " (" + + editor.getMode().getTitle() + ")"); // Action listener to bring the appropriate sketch in front - item.addActionListener(new ActionListener() { + item.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -953,10 +937,8 @@ public abstract class Editor extends JFrame implements RunnerListener { return sketchMenu; } - abstract public void handleImportLibrary(String jarPath); - public JMenu getToolMenu() { if (toolsMenu == null) { rebuildToolMenu(); @@ -964,13 +946,11 @@ public abstract class Editor extends JFrame implements RunnerListener { return toolsMenu; } - // protected void rebuildToolList() { // coreTools = ToolContribution.list(Base.getToolsFolder(), true); // contribTools = ToolContribution.list(Base.getSketchbookToolsFolder(), true); // } - public void rebuildToolMenu() { if (toolsMenu == null) { toolsMenu = new JMenu("Tools"); @@ -996,7 +976,6 @@ public abstract class Editor extends JFrame implements RunnerListener { toolsMenu.add(item); } - // /** // * Attempt to init or run a Tool from the safety of a try/catch block that // * will report errors to the user. @@ -1028,8 +1007,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // } // return false; // } - - + void addToolItem(final Tool tool, HashMap toolItems) { String title = tool.getMenuTitle(); final JMenuItem item = new JMenuItem(title); @@ -1040,24 +1018,24 @@ public abstract class Editor extends JFrame implements RunnerListener { tool.run(); } catch (NoSuchMethodError nsme) { - statusError("\"" + tool.getMenuTitle() + "\" is not" + - "compatible with this version of Processing"); + statusError("\"" + tool.getMenuTitle() + "\" is not" + + "compatible with this version of Processing"); //nsme.printStackTrace(); Base.log("Incompatible tool found during tool.run()", nsme); item.setEnabled(false); } catch (Exception ex) { - statusError("An error occurred inside \"" + tool.getMenuTitle() + "\""); + statusError("An error occurred inside \"" + tool.getMenuTitle() + + "\""); ex.printStackTrace(); item.setEnabled(false); - } + } } }); //menu.add(item); toolItems.put(title, item); } - protected void addTools(JMenu menu, ArrayList tools) { HashMap toolItems = new HashMap(); @@ -1066,31 +1044,35 @@ public abstract class Editor extends JFrame implements RunnerListener { tool.init(Editor.this); // If init() fails, the item won't be added to the menu addToolItem(tool, toolItems); - + // With the exceptions, we can't call statusError because the window // isn't completely set up yet. Also not gonna pop up a warning because // people may still be running different versions of Processing. // TODO Once the dust settles on 2.x, change this to Base.showError() // and open the Tools folder instead of showing System.err.println(). - + } catch (NoSuchMethodError nsme) { - System.err.println("\"" + tool.getMenuTitle() + "\" is not " + - "compatible with this version of Processing"); - System.err.println("The " + nsme.getMessage() + " method no longer exists."); + System.err.println("\"" + tool.getMenuTitle() + "\" is not " + + "compatible with this version of Processing"); + System.err.println("The " + nsme.getMessage() + + " method no longer exists."); Base.log("Incompatible Tool found during tool.init()", nsme); } catch (NoClassDefFoundError ncdfe) { - System.err.println("\"" + tool.getMenuTitle() + "\" is not " + - "compatible with this version of Processing"); - System.err.println("The " + ncdfe.getMessage() + " class is no longer available."); + System.err.println("\"" + tool.getMenuTitle() + "\" is not " + + "compatible with this version of Processing"); + System.err.println("The " + ncdfe.getMessage() + + " class is no longer available."); Base.log("Incompatible Tool found during tool.init()", ncdfe); } catch (Error err) { - System.err.println("An error occurred inside \"" + tool.getMenuTitle() + "\""); + System.err.println("An error occurred inside \"" + tool.getMenuTitle() + + "\""); err.printStackTrace(); } catch (Exception ex) { - System.err.println("An exception occurred inside \"" + tool.getMenuTitle() + "\""); + System.err.println("An exception occurred inside \"" + + tool.getMenuTitle() + "\""); ex.printStackTrace(); } } @@ -1105,7 +1087,6 @@ public abstract class Editor extends JFrame implements RunnerListener { } } - /** * Override this if you want a special menu for your particular 'mode'. */ @@ -1113,7 +1094,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return null; } - protected void addToolMenuItem(JMenu menu, String className) { try { Class toolClass = Class.forName(className); @@ -1137,7 +1117,6 @@ public abstract class Editor extends JFrame implements RunnerListener { } } - protected JMenu addInternalTools(JMenu menu) { // JMenuItem item; // item = createToolMenuItem("processing.app.tools.AutoFormatTool"); @@ -1175,54 +1154,37 @@ public abstract class Editor extends JFrame implements RunnerListener { return menu; } + /* + * // testing internal web server to serve up docs from a zip file item = new + * JMenuItem("Web Server Test"); item.addActionListener(new ActionListener() { + * public void actionPerformed(ActionEvent e) { //WebServer ws = new + * WebServer(); SwingUtilities.invokeLater(new Runnable() { public void run() + * { try { int port = + * WebServer.launch("/Users/fry/coconut/processing/build/shared/reference.zip" + * ); Base.openURL("http://127.0.0.1:" + port + "/reference/setup_.html"); + * + * } catch (IOException e1) { e1.printStackTrace(); } } }); } }); + * menu.add(item); + */ /* - // testing internal web server to serve up docs from a zip file - item = new JMenuItem("Web Server Test"); - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - //WebServer ws = new WebServer(); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - try { - int port = WebServer.launch("/Users/fry/coconut/processing/build/shared/reference.zip"); - Base.openURL("http://127.0.0.1:" + port + "/reference/setup_.html"); - - } catch (IOException e1) { - e1.printStackTrace(); - } - } - }); - } - }); - menu.add(item); - */ - - /* - item = new JMenuItem("Browser Test"); - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - //Base.openURL("http://processing.org/learning/gettingstarted/"); - //JFrame browserFrame = new JFrame("Browser"); - BrowserStartup bs = new BrowserStartup("jar:file:/Users/fry/coconut/processing/build/shared/reference.zip!/reference/setup_.html"); - bs.initUI(); - bs.launch(); - } - }); - menu.add(item); - */ - + * item = new JMenuItem("Browser Test"); item.addActionListener(new + * ActionListener() { public void actionPerformed(ActionEvent e) { + * //Base.openURL("http://processing.org/learning/gettingstarted/"); //JFrame + * browserFrame = new JFrame("Browser"); BrowserStartup bs = new + * BrowserStartup( + * "jar:file:/Users/fry/coconut/processing/build/shared/reference.zip!/reference/setup_.html" + * ); bs.initUI(); bs.launch(); } }); menu.add(item); + */ abstract public JMenu buildHelpMenu(); - public void showReference(String filename) { File file = new File(mode.getReferenceFolder(), filename); // Prepend with file:// and also encode spaces & other characters Base.openURL(file.toURI().toString()); } - static public void showChanges() { // http://code.google.com/p/processing/issues/detail?id=1520 if (!Base.isCommandLine()) { @@ -1230,10 +1192,8 @@ public abstract class Editor extends JFrame implements RunnerListener { } } - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - class UndoAction extends AbstractAction { public UndoAction() { super("Undo"); @@ -1259,7 +1219,8 @@ public abstract class Editor extends JFrame implements RunnerListener { updateUndoState(); redoAction.updateRedoState(); if (sketch != null) { - sketch.setModified(!getText().equals(sketch.getCurrentCode().getSavedProgram())); + sketch.setModified(!getText().equals(sketch.getCurrentCode() + .getSavedProgram())); } } @@ -1284,7 +1245,6 @@ public abstract class Editor extends JFrame implements RunnerListener { } } - class RedoAction extends AbstractAction { public RedoAction() { super("Redo"); @@ -1309,7 +1269,8 @@ public abstract class Editor extends JFrame implements RunnerListener { updateRedoState(); undoAction.updateUndoState(); if (sketch != null) { - sketch.setModified(!getText().equals(sketch.getCurrentCode().getSavedProgram())); + sketch.setModified(!getText().equals(sketch.getCurrentCode() + .getSavedProgram())); } } @@ -1327,16 +1288,13 @@ public abstract class Editor extends JFrame implements RunnerListener { } } - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - // these will be done in a more generic way soon, more like: // setHandler("action name", Runnable); // but for the time being, working out the kinks of how many things to // abstract from the editor in this fashion. - // public void setHandlers(Runnable runHandler, Runnable presentHandler, // Runnable stopHandler, // Runnable exportHandler, Runnable exportAppHandler) { @@ -1347,7 +1305,6 @@ public abstract class Editor extends JFrame implements RunnerListener { // this.exportAppHandler = exportAppHandler; // } - // public void resetHandlers() { // runHandler = new DefaultRunHandler(); // presentHandler = new DefaultPresentHandler(); @@ -1356,10 +1313,8 @@ public abstract class Editor extends JFrame implements RunnerListener { // exportAppHandler = new DefaultExportAppHandler(); // } - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - /** * Gets the current sketch object. */ @@ -1367,10 +1322,9 @@ public abstract class Editor extends JFrame implements RunnerListener { return sketch; } - /** - * Get the JEditTextArea object for use (not recommended). This should only - * be used in obscure cases that really need to hack the internals of the + * Get the JEditTextArea object for use (not recommended). This should only be + * used in obscure cases that really need to hack the internals of the * JEditTextArea. Most tools should only interface via the get/set functions * found in this class. This will maintain compatibility with future releases, * which will not use JEditTextArea. @@ -1379,7 +1333,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea; } - /** * Get the contents of the current buffer. Used by the Sketch class. */ @@ -1387,7 +1340,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getText(); } - /** * Get a range of text from the current buffer. */ @@ -1395,7 +1347,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getText(start, stop - start); } - /** * Replace the entire contents of the front-most tab. */ @@ -1405,7 +1356,6 @@ public abstract class Editor extends JFrame implements RunnerListener { stopCompoundEdit(); } - public void insertText(String what) { startCompoundEdit(); int caret = getCaretOffset(); @@ -1414,10 +1364,9 @@ public abstract class Editor extends JFrame implements RunnerListener { stopCompoundEdit(); } - /** - * Called to update the text but not switch to a different set of code - * (which would affect the undo manager). + * Called to update the text but not switch to a different set of code (which + * would affect the undo manager). */ // public void setText2(String what, int start, int stop) { // beginCompoundEdit(); @@ -1432,17 +1381,14 @@ public abstract class Editor extends JFrame implements RunnerListener { // textarea.requestFocus(); // get the caret blinking // } - public String getSelectedText() { return textarea.getSelectedText(); } - public void setSelectedText(String what) { textarea.setSelectedText(what); } - public void setSelection(int start, int stop) { // make sure that a tool isn't asking for a bad location start = PApplet.constrain(start, 0, textarea.getDocumentLength()); @@ -1451,18 +1397,16 @@ public abstract class Editor extends JFrame implements RunnerListener { textarea.select(start, stop); } - /** - * Get the position (character offset) of the caret. With text selected, - * this will be the last character actually selected, no matter the direction - * of the selection. That is, if the user clicks and drags to select lines - * 7 up to 4, then the caret position will be somewhere on line four. + * Get the position (character offset) of the caret. With text selected, this + * will be the last character actually selected, no matter the direction of + * the selection. That is, if the user clicks and drags to select lines 7 up + * to 4, then the caret position will be somewhere on line four. */ public int getCaretOffset() { return textarea.getCaretPosition(); } - /** * True if some text is currently selected. */ @@ -1470,7 +1414,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.isSelectionActive(); } - /** * Get the beginning point of the current selection. */ @@ -1478,7 +1421,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getSelectionStart(); } - /** * Get the end point of the current selection. */ @@ -1486,7 +1428,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getSelectionStop(); } - /** * Get text for a specified line. */ @@ -1494,7 +1435,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getLineText(line); } - /** * Replace the text on a specified line. */ @@ -1505,7 +1445,6 @@ public abstract class Editor extends JFrame implements RunnerListener { stopCompoundEdit(); } - /** * Get character offset for the start of a given line of text. */ @@ -1513,7 +1452,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getLineStartOffset(line); } - /** * Get character offset for end of a given line of text. */ @@ -1521,7 +1459,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getLineStopOffset(line); } - /** * Get the number of lines in the currently displayed buffer. */ @@ -1529,7 +1466,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getLineCount(); } - /** * Use before a manipulating text to group editing operations together as a * single undo. Use stopCompoundEdit() once finished. @@ -1539,7 +1475,6 @@ public abstract class Editor extends JFrame implements RunnerListener { compoundEdit = new CompoundEdit(); } - /** * Use with startCompoundEdit() to group edit operations in a single undo. */ @@ -1555,23 +1490,20 @@ public abstract class Editor extends JFrame implements RunnerListener { } } - public int getScrollPosition() { return textarea.getVerticalScrollPosition(); } - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - /** - * Switch between tabs, this swaps out the Document object - * that's currently being manipulated. + * Switch between tabs, this swaps out the Document object that's currently + * being manipulated. */ protected void setCode(SketchCode code) { SyntaxDocument document = (SyntaxDocument) code.getDocument(); - if (document == null) { // this document not yet inited + if (document == null) { // this document not yet inited document = new SyntaxDocument(); code.setDocument(document); @@ -1612,34 +1544,33 @@ public abstract class Editor extends JFrame implements RunnerListener { // connect the undo listener to the editor document.addUndoableEditListener(new UndoableEditListener() { - public void undoableEditHappened(UndoableEditEvent e) { - // if an edit is in progress, reset the timer - if (endUndoEvent != null) { - endUndoEvent.cancel(); - endUndoEvent = null; - startTimerEvent(); - } - - // if this edit is just getting started, create a compound edit - if (compoundEdit == null) { - startCompoundEdit(); - startTimerEvent(); - } - - compoundEdit.addEdit(e.getEdit()); - undoAction.updateUndoState(); - redoAction.updateRedoState(); + public void undoableEditHappened(UndoableEditEvent e) { + // if an edit is in progress, reset the timer + if (endUndoEvent != null) { + endUndoEvent.cancel(); + endUndoEvent = null; + startTimerEvent(); } - }); + + // if this edit is just getting started, create a compound edit + if (compoundEdit == null) { + startCompoundEdit(); + startTimerEvent(); + } + + compoundEdit.addEdit(e.getEdit()); + undoAction.updateUndoState(); + redoAction.updateRedoState(); + } + }); } // update the document object that's in use - textarea.setDocument(document, - code.getSelectionStart(), code.getSelectionStop(), - code.getScrollPosition()); + textarea.setDocument(document, code.getSelectionStart(), + code.getSelectionStop(), code.getScrollPosition()); // textarea.requestFocus(); // get the caret blinking - textarea.requestFocusInWindow(); // required for caret blinking + textarea.requestFocusInWindow(); // required for caret blinking this.undo = code.getUndo(); undoAction.updateUndoState(); @@ -1675,7 +1606,6 @@ public abstract class Editor extends JFrame implements RunnerListener { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - /** * Implements Edit → Cut. */ @@ -1684,7 +1614,6 @@ public abstract class Editor extends JFrame implements RunnerListener { sketch.setModified(true); } - /** * Implements Edit → Copy. */ @@ -1692,13 +1621,11 @@ public abstract class Editor extends JFrame implements RunnerListener { textarea.copy(); } - public void handleCopyAsHTML() { textarea.copyAsHTML(); statusNotice("Code formatted as HTML has been copied to the clipboard."); } - /** * Implements Edit → Paste. */ @@ -1707,7 +1634,6 @@ public abstract class Editor extends JFrame implements RunnerListener { sketch.setModified(true); } - /** * Implements Edit → Select All. */ @@ -1721,88 +1647,69 @@ public abstract class Editor extends JFrame implements RunnerListener { // * with the line beneath // */ /* - public void handleMoveLines(boolean moveUp) { - startCompoundEdit(); - - int startLine = textarea.getSelectionStartLine(); - int stopLine = textarea.getSelectionStopLine(); - - // if more than one line is selected and none of the characters of the end - // line are selected, don't move that line - if (startLine != stopLine - && textarea.getSelectionStop() == textarea.getLineStartOffset(stopLine)) - stopLine--; - - int replacedLine = moveUp ? startLine - 1 : stopLine + 1; - if (replacedLine < 0 || replacedLine >= textarea.getLineCount()) - return; - - final String source = getText(); - - int replaceStart = textarea.getLineStartOffset(replacedLine); - int replaceEnd = textarea.getLineStopOffset(replacedLine); - if (replaceEnd == source.length() + 1) - replaceEnd--; - - int selectionStart = textarea.getLineStartOffset(startLine); - int selectionEnd = textarea.getLineStopOffset(stopLine); - if (selectionEnd == source.length() + 1) - selectionEnd--; - - String replacedText = source.substring(replaceStart, replaceEnd); - String selectedText = source.substring(selectionStart, selectionEnd); - if (replacedLine == textarea.getLineCount() - 1) { - replacedText += "\n"; - selectedText = selectedText.substring(0, selectedText.length() - 1); - } else if (stopLine == textarea.getLineCount() - 1) { - selectedText += "\n"; - replacedText = replacedText.substring(0, replacedText.length() - 1); - } - - int newSelectionStart, newSelectionEnd; - if (moveUp) { - // Change the selection, then change the line above - textarea.select(selectionStart, selectionEnd); - textarea.setSelectedText(replacedText); - - textarea.select(replaceStart, replaceEnd); - textarea.setSelectedText(selectedText); - - newSelectionStart = textarea.getLineStartOffset(startLine - 1); - newSelectionEnd = textarea.getLineStopOffset(stopLine - 1) - 1; - } else { - // Change the line beneath, then change the selection - textarea.select(replaceStart, replaceEnd); - textarea.setSelectedText(selectedText); - - textarea.select(selectionStart, selectionEnd); - textarea.setSelectedText(replacedText); - - newSelectionStart = textarea.getLineStartOffset(startLine + 1); - newSelectionEnd = textarea.getLineStopOffset(stopLine + 1) - 1; - } - - textarea.select(newSelectionStart, newSelectionEnd); - stopCompoundEdit(); - } - */ - + * public void handleMoveLines(boolean moveUp) { startCompoundEdit(); + * + * int startLine = textarea.getSelectionStartLine(); int stopLine = + * textarea.getSelectionStopLine(); + * + * // if more than one line is selected and none of the characters of the end + * // line are selected, don't move that line if (startLine != stopLine && + * textarea.getSelectionStop() == textarea.getLineStartOffset(stopLine)) + * stopLine--; + * + * int replacedLine = moveUp ? startLine - 1 : stopLine + 1; if (replacedLine + * < 0 || replacedLine >= textarea.getLineCount()) return; + * + * final String source = getText(); + * + * int replaceStart = textarea.getLineStartOffset(replacedLine); int + * replaceEnd = textarea.getLineStopOffset(replacedLine); if (replaceEnd == + * source.length() + 1) replaceEnd--; + * + * int selectionStart = textarea.getLineStartOffset(startLine); int + * selectionEnd = textarea.getLineStopOffset(stopLine); if (selectionEnd == + * source.length() + 1) selectionEnd--; + * + * String replacedText = source.substring(replaceStart, replaceEnd); String + * selectedText = source.substring(selectionStart, selectionEnd); if + * (replacedLine == textarea.getLineCount() - 1) { replacedText += "\n"; + * selectedText = selectedText.substring(0, selectedText.length() - 1); } else + * if (stopLine == textarea.getLineCount() - 1) { selectedText += "\n"; + * replacedText = replacedText.substring(0, replacedText.length() - 1); } + * + * int newSelectionStart, newSelectionEnd; if (moveUp) { // Change the + * selection, then change the line above textarea.select(selectionStart, + * selectionEnd); textarea.setSelectedText(replacedText); + * + * textarea.select(replaceStart, replaceEnd); + * textarea.setSelectedText(selectedText); + * + * newSelectionStart = textarea.getLineStartOffset(startLine - 1); + * newSelectionEnd = textarea.getLineStopOffset(stopLine - 1) - 1; } else { // + * Change the line beneath, then change the selection + * textarea.select(replaceStart, replaceEnd); + * textarea.setSelectedText(selectedText); + * + * textarea.select(selectionStart, selectionEnd); + * textarea.setSelectedText(replacedText); + * + * newSelectionStart = textarea.getLineStartOffset(startLine + 1); + * newSelectionEnd = textarea.getLineStopOffset(stopLine + 1) - 1; } + * + * textarea.select(newSelectionStart, newSelectionEnd); stopCompoundEdit(); } + */ /* - public void handleDeleteLines() { - int startLine = textarea.getSelectionStartLine(); - int stopLine = textarea.getSelectionStopLine(); - - int start = textarea.getLineStartOffset(startLine); - int end = textarea.getLineStopOffset(stopLine); - if (end == getText().length() + 1) - end--; - - textarea.select(start, end); - textarea.setSelectedText(""); - } - */ - + * public void handleDeleteLines() { int startLine = + * textarea.getSelectionStartLine(); int stopLine = + * textarea.getSelectionStopLine(); + * + * int start = textarea.getLineStartOffset(startLine); int end = + * textarea.getLineStopOffset(stopLine); if (end == getText().length() + 1) + * end--; + * + * textarea.select(start, end); textarea.setSelectedText(""); } + */ public void handleAutoFormat() { final String source = getText(); @@ -1811,7 +1718,7 @@ public abstract class Editor extends JFrame implements RunnerListener { final String formattedText = createFormatter().format(source); // save current (rough) selection point int selectionEnd = getSelectionStop(); - + // boolean wasVisible = // textarea.getSelectionStopLine() >= textarea.getFirstLine() && // textarea.getSelectionStopLine() < textarea.getLastLine(); @@ -1829,7 +1736,7 @@ public abstract class Editor extends JFrame implements RunnerListener { int scrollPos = textarea.getVerticalScrollPosition(); setText(formattedText); setSelection(selectionEnd, selectionEnd); - + // Put the scrollbar position back, otherwise it jumps on each format. // Since we're not doing a good job of maintaining position anyway, // a more complicated workaround here is fairly pointless. @@ -1854,10 +1761,8 @@ public abstract class Editor extends JFrame implements RunnerListener { } } - abstract public String getCommentPrefix(); - protected void handleCommentUncomment() { startCompoundEdit(); @@ -1917,17 +1822,14 @@ public abstract class Editor extends JFrame implements RunnerListener { sketch.setModified(true); } - public void handleIndent() { handleIndentOutdent(true); } - public void handleOutdent() { handleIndentOutdent(false); } - public void handleIndentOutdent(boolean indent) { int tabSize = Preferences.getInteger("editor.tabs.size"); String tabString = Editor.EMPTY.substring(0, tabSize); @@ -1955,7 +1857,7 @@ public abstract class Editor extends JFrame implements RunnerListener { textarea.select(location, location); textarea.setSelectedText(tabString); - } else { // outdent + } else { // outdent int last = Math.min(location + tabSize, textarea.getDocumentLength()); textarea.select(location, last); // Don't eat code if it's not indented @@ -1972,7 +1874,6 @@ public abstract class Editor extends JFrame implements RunnerListener { sketch.setModified(true); } - static public boolean checkParen(char[] array, int index, int stop) { // boolean paren = false; // int stepper = i + 1; @@ -2009,15 +1910,14 @@ public abstract class Editor extends JFrame implements RunnerListener { return false; } - protected boolean functionable(char c) { return (c == '_') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); } - /** - * Check the current selection for reference. If no selection is active, + * Check the current selection for reference. If no selection is active, * expand the current selection. + * * @return */ protected String referenceCheck(boolean selectIfFound) { @@ -2029,7 +1929,7 @@ public abstract class Editor extends JFrame implements RunnerListener { start = temp; } char[] c = textarea.getText().toCharArray(); - + // System.out.println("checking reference"); if (start == stop) { while (start > 0 && functionable(c[start - 1])) { @@ -2051,8 +1951,7 @@ public abstract class Editor extends JFrame implements RunnerListener { } return ref; } - - + protected void handleFindReference() { String ref = referenceCheck(true); if (ref != null) { @@ -2066,55 +1965,38 @@ public abstract class Editor extends JFrame implements RunnerListener { } } } - - + /* - protected void handleFindReference() { - String text = textarea.getSelectedText().trim(); - - if (text.length() == 0) { - statusNotice("First select a word to find in the reference."); - - } else { - char[] c = textarea.getText().toCharArray(); - int after = Math.max(textarea.getSelectionStart(), textarea.getSelectionStop()); - if (checkParen(c, after, c.length)) { - text += "_"; - System.out.println("looking up ref for " + text); - } - String referenceFile = mode.lookupReference(text); - System.out.println("reference file is " + referenceFile); - if (referenceFile == null) { - statusNotice("No reference available for \"" + text + "\""); - } else { - showReference(referenceFile + ".html"); - } - } - } - - - protected void handleFindReference() { - String text = textarea.getSelectedText().trim(); - - if (text.length() == 0) { - statusNotice("First select a word to find in the reference."); - - } else { - String referenceFile = mode.lookupReference(text); - //System.out.println("reference file is " + referenceFile); - if (referenceFile == null) { - statusNotice("No reference available for \"" + text + "\""); - } else { - showReference(referenceFile + ".html"); - } - } - } - */ - + * protected void handleFindReference() { String text = + * textarea.getSelectedText().trim(); + * + * if (text.length() == 0) { + * statusNotice("First select a word to find in the reference."); + * + * } else { char[] c = textarea.getText().toCharArray(); int after = + * Math.max(textarea.getSelectionStart(), textarea.getSelectionStop()); if + * (checkParen(c, after, c.length)) { text += "_"; + * System.out.println("looking up ref for " + text); } String referenceFile = + * mode.lookupReference(text); System.out.println("reference file is " + + * referenceFile); if (referenceFile == null) { + * statusNotice("No reference available for \"" + text + "\""); } else { + * showReference(referenceFile + ".html"); } } } + * + * + * protected void handleFindReference() { String text = + * textarea.getSelectedText().trim(); + * + * if (text.length() == 0) { + * statusNotice("First select a word to find in the reference."); + * + * } else { String referenceFile = mode.lookupReference(text); + * //System.out.println("reference file is " + referenceFile); if + * (referenceFile == null) { statusNotice("No reference available for \"" + + * text + "\""); } else { showReference(referenceFile + ".html"); } } } + */ // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - /** * Set the location of the sketch run window. Used by Runner to update the * Editor about window drag events while the sketch is running. @@ -2123,7 +2005,6 @@ public abstract class Editor extends JFrame implements RunnerListener { sketchWindowLocation = p; } - /** * Get the last location of the sketch's run window. Used by Runner to make * the window show up in the same location as when it was last closed. @@ -2132,42 +2013,45 @@ public abstract class Editor extends JFrame implements RunnerListener { return sketchWindowLocation; } - // public void internalCloseRunner() { // mode.internalCloseRunner(this); // } - /** * Check if the sketch is modified and ask user to save changes. + * * @return false if canceling the close/quit operation */ protected boolean checkModified() { - if (!sketch.isModified()) return true; + boolean ret; + if (!sketch.isModified()){ + stopReloadThread = true; + return true; + } // As of Processing 1.0.10, this always happens immediately. // http://dev.processing.org/bugs/show_bug.cgi?id=1456 // With Java 7u40 on OS X, need to bring the window forward. toFront(); - + String prompt = "Save changes to " + sketch.getName() + "? "; if (!Base.isMacOS()) { - int result = - JOptionPane.showConfirmDialog(this, prompt, "Close", - JOptionPane.YES_NO_CANCEL_OPTION, - JOptionPane.QUESTION_MESSAGE); + int result = JOptionPane + .showConfirmDialog(this, prompt, "Close", + JOptionPane.YES_NO_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); if (result == JOptionPane.YES_OPTION) { - return handleSave(true); + ret = handleSave(true); } else if (result == JOptionPane.NO_OPTION) { - return true; // ok to continue + ret = true; // ok to continue - } else if (result == JOptionPane.CANCEL_OPTION || - result == JOptionPane.CLOSED_OPTION) { - return false; + } else if (result == JOptionPane.CANCEL_OPTION + || result == JOptionPane.CLOSED_OPTION) { + ret = false; } else { throw new IllegalStateException(); @@ -2184,20 +2068,17 @@ public abstract class Editor extends JFrame implements RunnerListener { // Pane formatting adapted from the quaqua guide // http://www.randelshofer.ch/quaqua/guide/joptionpane.html - JOptionPane pane = - new JOptionPane(" " + - " " + - "Do you want to save changes to this sketch
" + - " before closing?
" + - "

If you don't save, your changes will be lost.", - JOptionPane.QUESTION_MESSAGE); + JOptionPane pane = new JOptionPane(" " + + " " + + "Do you want to save changes to this sketch
" + + " before closing?
" + + "

If you don't save, your changes will be lost.", + JOptionPane.QUESTION_MESSAGE); - String[] options = new String[] { - "Save", "Cancel", "Don't Save" - }; + String[] options = new String[] { "Save", "Cancel", "Don't Save" }; pane.setOptions(options); // highlight the safest option ala apple hig @@ -2212,22 +2093,26 @@ public abstract class Editor extends JFrame implements RunnerListener { dialog.setVisible(true); Object result = pane.getValue(); - if (result == options[0]) { // save (and close/quit) - return handleSave(true); + if (result == options[0]) { // save (and close/quit) + ret = handleSave(true); - } else if (result == options[2]) { // don't save (still close/quit) - return true; + } else if (result == options[2]) { // don't save (still close/quit) + ret = true; - } else { // cancel? - return false; + } else { // cancel? + ret = false; } } + if (ret) { + //the sketch is closing + stopReloadThread = true; + } + return ret; } - /** - * Open a sketch from a particular path, but don't check to save changes. - * Used by Sketch.saveAs() to re-open a sketch after the "Save As" + * Open a sketch from a particular path, but don't check to save changes. Used + * by Sketch.saveAs() to re-open a sketch after the "Save As" */ // protected void handleOpenUnchecked(String path, int codeIndex, // int selStart, int selStop, int scrollPos) { @@ -2242,7 +2127,6 @@ public abstract class Editor extends JFrame implements RunnerListener { // textarea.setScrollPosition(scrollPos); // } - /** * Second stage of open, occurs after having checked to see if the * modifications (if any) to the previous sketch need to be saved. @@ -2271,37 +2155,32 @@ public abstract class Editor extends JFrame implements RunnerListener { + mode.getDefaultExtension(), null); return false; } else { - final String properParent = - file.getName().substring(0, file.getName().lastIndexOf('.')); - - Object[] options = { "OK", "Cancel" }; - String prompt = - "The file \"" + file.getName() + "\" needs to be inside\n" + - "a sketch folder named \"" + properParent + "\".\n" + - "Create this folder, move the file, and continue?"; + final String properParent = file.getName().substring(0, + file.getName() + .lastIndexOf('.')); - int result = JOptionPane.showOptionDialog(this, - prompt, - "Moving", + Object[] options = { "OK", "Cancel" }; + String prompt = "The file \"" + file.getName() + + "\" needs to be inside\n" + "a sketch folder named \"" + properParent + + "\".\n" + "Create this folder, move the file, and continue?"; + + int result = JOptionPane.showOptionDialog(this, prompt, "Moving", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, - null, - options, - options[0]); + null, options, options[0]); if (result == JOptionPane.YES_OPTION) { // create properly named folder File properFolder = new File(file.getParent(), properParent); if (properFolder.exists()) { - Base.showWarning("Error", - "A folder named \"" + properParent + "\" " + - "already exists. Can't open sketch.", null); + Base.showWarning("Error", "A folder named \"" + properParent + "\" " + + "already exists. Can't open sketch.", null); return false; } if (!properFolder.mkdirs()) { //throw new IOException("Couldn't create sketch folder"); - Base.showWarning("Error", - "Could not create the sketch folder.", null); + Base + .showWarning("Error", "Could not create the sketch folder.", null); return false; } // copy the sketch inside @@ -2332,7 +2211,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return false; } initFileChangeListener(); - + header.rebuild(); updateTitle(); // Disable untitled setting from previous document, if any @@ -2352,20 +2231,29 @@ public abstract class Editor extends JFrame implements RunnerListener { // return false; // } } - //true when the file is saved, before the next scan for updates private boolean saved; - + private boolean didReload; - + + //TODO set to appropriate value + private boolean reloadEnabled=true; + //the time between polls in ms - private final long FILE_CHECK_DELAY = 100; - + private final long FILE_CHECK_DELAY = 1000; + + private boolean stopReloadThread = false; + //the key which is being used to poll the fs for changes private WatchKey key = null; private void initFileChangeListener() { + //if it is disabled, don't bother starting one + if (!reloadEnabled) { + return; + } + try { WatchService watchService = FileSystems.getDefault().newWatchService(); key = sketch.getFolder().toPath() @@ -2382,6 +2270,7 @@ public abstract class Editor extends JFrame implements RunnerListener { //if the key is null for some reason, don't bother attaching a listener to it, they can deal without one if (finKey != null) { //the key can now be polled for changes in the files + stopReloadThread = false; Thread th = new Thread(new Runnable() { @Override public void run() { @@ -2393,6 +2282,16 @@ public abstract class Editor extends JFrame implements RunnerListener { } catch (InterruptedException e) { } List> events = finKey.pollEvents(); + + //called when a sketch is closed + if (stopReloadThread) { + break; + } + //if it is disabled after being started, stop it + if (!reloadEnabled) { + break; + } + processFileEvents(events); //if the directory was deleted, then quit the loop @@ -2420,12 +2319,12 @@ public abstract class Editor extends JFrame implements RunnerListener { //due to some weird shit, if a file was editted in gedit, the context is .goutputstream-XXXXX //this makes things.... complicated //System.out.println(e.context()); - + //if the file was saved, don't prompt anything if (saved) break; //if we already reloaded in this cycle, then don't reload again - if (didReload){ + if (didReload) { break; } if (e.kind().equals(StandardWatchEventKinds.ENTRY_MODIFY)) { @@ -2450,10 +2349,9 @@ public abstract class Editor extends JFrame implements RunnerListener { saved = false; } - /** - * Set the title of the PDE window based on the current sketch, i.e. - * something like "sketch_070752a - Processing 0126" + * Set the title of the PDE window based on the current sketch, i.e. something + * like "sketch_070752a - Processing 0126" */ public void updateTitle() { setTitle(sketch.getName() + " | Processing " + Base.getVersionName()); @@ -2468,15 +2366,14 @@ public abstract class Editor extends JFrame implements RunnerListener { } } - /** - * Actually handle the save command. If 'immediately' is set to false, - * this will happen in another thread so that the message area - * will update and the save button will stay highlighted while the - * save is happening. If 'immediately' is true, then it will happen - * immediately. This is used during a quit, because invokeLater() - * won't run properly while a quit is happening. This fixes - * Bug 276. + * Actually handle the save command. If 'immediately' is set to false, this + * will happen in another thread so that the message area will update and the + * save button will stay highlighted while the save is happening. If + * 'immediately' is true, then it will happen immediately. This is used during + * a quit, because invokeLater() won't run properly while a quit is happening. + * This fixes Bug + * 276. */ public boolean handleSave(boolean immediately) { // handleStop(); // 0136 @@ -2490,15 +2387,14 @@ public abstract class Editor extends JFrame implements RunnerListener { } else { EventQueue.invokeLater(new Runnable() { - public void run() { - handleSaveImpl(); - } - }); + public void run() { + handleSaveImpl(); + } + }); } return true; } - protected void handleSaveImpl() { statusNotice("Saving..."); try { @@ -2520,7 +2416,6 @@ public abstract class Editor extends JFrame implements RunnerListener { } } - public boolean handleSaveAs() { statusNotice("Saving..."); try { @@ -2541,7 +2436,6 @@ public abstract class Editor extends JFrame implements RunnerListener { return true; } - /** * Handler for File → Page Setup. */ @@ -2557,7 +2451,6 @@ public abstract class Editor extends JFrame implements RunnerListener { //System.out.println("page format is " + pageFormat); } - /** * Handler for File → Print. */ @@ -2591,17 +2484,17 @@ public abstract class Editor extends JFrame implements RunnerListener { //printerJob = null; // clear this out? } - /** - * Grab current contents of the sketch window, advance the console, - * stop any other running sketches... not in that order. + * Grab current contents of the sketch window, advance the console, stop any + * other running sketches... not in that order. */ public void prepareRun() { internalCloseRunner(); statusEmpty(); // do this to advance/clear the terminal window / dos prompt / etc - for (int i = 0; i < 10; i++) System.out.println(); + for (int i = 0; i < 10; i++) + System.out.println(); // clear the console on each run, unless the user doesn't want to if (Preferences.getBoolean("console.auto_clear")) { @@ -2622,20 +2515,16 @@ public abstract class Editor extends JFrame implements RunnerListener { // } } - /** - * Halt the current runner for whatever reason. Might be the VM dying, - * the window closing, an error... + * Halt the current runner for whatever reason. Might be the VM dying, the + * window closing, an error... */ abstract public void internalCloseRunner(); - abstract public void deactivateRun(); - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - /** * Show an error in the status bar. */ @@ -2645,7 +2534,6 @@ public abstract class Editor extends JFrame implements RunnerListener { // toolbar.deactivate(EditorToolbar.RUN); } - /** * Show an exception in the editor status bar. */ @@ -2700,7 +2588,6 @@ public abstract class Editor extends JFrame implements RunnerListener { // e.printStackTrace(); } - /** * Show a notice message in the editor status bar. */ @@ -2708,29 +2595,25 @@ public abstract class Editor extends JFrame implements RunnerListener { status.notice(msg); } - public void clearNotice(String msg) { if (status.message.equals(msg)) { statusEmpty(); } } - /** * Returns the current notice message in the editor status bar. */ - public String getStatusMessage(){ + public String getStatusMessage() { return status.message; } - - + /** - * Returns the current mode of the editor status bar: NOTICE, ERR or EDIT. + * Returns the current mode of the editor status bar: NOTICE, ERR or EDIT. */ - public int getStatusMode(){ + public int getStatusMode() { return status.mode; } - /** * Clear the status area. @@ -2739,73 +2622,69 @@ public abstract class Editor extends JFrame implements RunnerListener { statusNotice(EMPTY); } - public void startIndeterminate() { status.startIndeterminate(); } - public void stopIndeterminate() { status.stopIndeterminate(); } - public void statusHalt() { // stop called by someone else } - public boolean isHalted() { return false; } - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - /** * Returns the edit popup menu. */ class TextAreaPopup extends JPopupMenu { JMenuItem cutItem; - JMenuItem copyItem; - JMenuItem discourseItem; - JMenuItem referenceItem; + JMenuItem copyItem; + + JMenuItem discourseItem; + + JMenuItem referenceItem; public TextAreaPopup() { JMenuItem item; cutItem = new JMenuItem("Cut"); cutItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCut(); - } + public void actionPerformed(ActionEvent e) { + handleCut(); + } }); this.add(cutItem); copyItem = new JMenuItem("Copy"); copyItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCopy(); - } - }); + public void actionPerformed(ActionEvent e) { + handleCopy(); + } + }); this.add(copyItem); discourseItem = new JMenuItem("Copy as HTML"); discourseItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCopyAsHTML(); - } - }); + public void actionPerformed(ActionEvent e) { + handleCopyAsHTML(); + } + }); this.add(discourseItem); item = new JMenuItem("Paste"); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handlePaste(); - } - }); + public void actionPerformed(ActionEvent e) { + handlePaste(); + } + }); this.add(item); item = new JMenuItem("Select All"); @@ -2820,25 +2699,25 @@ public abstract class Editor extends JFrame implements RunnerListener { item = new JMenuItem("Comment/Uncomment"); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCommentUncomment(); - } + public void actionPerformed(ActionEvent e) { + handleCommentUncomment(); + } }); this.add(item); item = new JMenuItem("Increase Indent"); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleIndentOutdent(true); - } + public void actionPerformed(ActionEvent e) { + handleIndentOutdent(true); + } }); this.add(item); item = new JMenuItem("Decrease Indent"); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleIndentOutdent(false); - } + public void actionPerformed(ActionEvent e) { + handleIndentOutdent(false); + } }); this.add(item); @@ -2846,10 +2725,10 @@ public abstract class Editor extends JFrame implements RunnerListener { referenceItem = new JMenuItem("Find in Reference"); referenceItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleFindReference(); - } - }); + public void actionPerformed(ActionEvent e) { + handleFindReference(); + } + }); this.add(referenceItem); } @@ -2874,7 +2753,7 @@ public abstract class Editor extends JFrame implements RunnerListener { cutItem.setEnabled(active); copyItem.setEnabled(active); discourseItem.setEnabled(active); - + referenceItem.setEnabled(referenceCheck(false) != null); super.show(component, x, y); } From 2ada3d6d945022ccb50859840404d7ae900cf2ec Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 31 Jul 2014 10:13:19 -0400 Subject: [PATCH 29/47] write revisions file for 3.0a2 --- build/shared/revisions.txt | 138 +++++++++++++++++++++++++++++++++++-- todo.txt | 8 +-- 2 files changed, 136 insertions(+), 10 deletions(-) diff --git a/build/shared/revisions.txt b/build/shared/revisions.txt index d76ae25ee..1df71013d 100644 --- a/build/shared/revisions.txt +++ b/build/shared/revisions.txt @@ -1,10 +1,6 @@ -PROCESSING 3.0a2 (REV 0229) - ?? August 2014 +PROCESSING 3.0a2 (REV 0229) - 31 July 2014 - -[ fixes ] - -+ The Examples weren't included in 3.0a1. Oops. - https://github.com/processing/processing/issues/2652 +The 3.0 train gains steam and continues to hurtle down the track. [ changes ] @@ -24,6 +20,136 @@ PROCESSING 3.0a2 (REV 0229) - ?? August 2014 platform application export, that could cause sadness. To use the video library, use the "Add Library..." menu and select it from the list. ++ Added a new preference for the 3.0 sketchbook location, so that a separate + sketchbook (and with it, different Modes, Tools, and Libraries) can be + used with Processing 3.0 versus older versions of 2.x. + ++ Remove default menu bar hack for OS X + http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8022667 + ++ Move to native OS X full screen (supported in 10.7 and later) + https://github.com/processing/processing/issues/2641 + This allows us to remove native code for hiding the menu bar. + But it may introduce more quirks, we'll have to test it out. + + +[ fixes ] + ++ The Examples weren't included in 3.0a1. Oops. + https://github.com/processing/processing/issues/2652 + ++ Fix "No such file or directory" error when exporting on Mac OS X. + This bug actually meant that OS X apps weren't signed + https://github.com/processing/processing/issues/2614 + ++ Prevent opening sketches multiple times + https://github.com/processing/processing/issues/2506 + ++ Disable Mac OS X export button on other platforms + https://github.com/processing/processing/issues/2642 + ++ Removed duplicate 'fonts' folder in the download + ++ Removed welcome message from the sound library + ++ Get the 'modified' indicator working on OS X document windows again + https://github.com/processing/processing/issues/2194 + ++ Do bounds check on setVertex(PVector) + https://github.com/processing/processing/issues/2556 + ++ Using createGraphics() w/o begin/endDraw(), don't attempt drawing w/ image() + https://github.com/processing/processing/issues/2208 + + +[ the data classes ] + ++ Add copy() method to Table + ++ Return null from getString() with float and double values that are NaN. + Fixes how saveTable() works (writes blank entries instead of NaN). + ++ get(5) with an empty Int/Float/StringList was returning 0 + https://github.com/processing/processing/pull/2343 + ++ FloatDict and FloatList should always put NaN values at the end on sort. + ++ Add print() method to the various data types. + + +[ summer of code ] + ++ URL opening problem fixed by use of getCanonicalPath() on Windows + https://github.com/processing/processing/issues/2656 + ++ If Server constructor fails, throw an exception + https://github.com/processing/processing/issues/2604 + ++ Clear status messages in the Contribution Manager + https://github.com/processing/processing/pull/2667 + https://github.com/processing/processing/issues/2599 + ++ Add a progress bar for slow "Save As" (and "Add File") operations + http://code.google.com/p/processing/issues/detail?id=31 + https://github.com/processing/processing/issues/70 + https://github.com/processing/processing/pull/2370 + ++ NullPointerException in addBreakpointComments() when saving sketch + https://github.com/processing/processing/issues/2675 + ++ Run button was staying highlighted permanently + https://github.com/processing/processing/issues/2676 + ++ Dialog box for new tab/rename tab/sketch + https://github.com/processing/processing/issues/2431 + +X Fixed issue where the browser wasn't opening the reference properly + https://github.com/processing/processing/pull/2657 + + +[ you request, we pull ] + ++ Insert tabs properly when prefs set for tabs mode + https://github.com/processing/processing/pull/2607 + ++ Improve the appearance when using the Nimbus LAF + https://github.com/processing/processing/pull/2671 + ++ Implement A and a (elliptical arcs) + https://github.com/processing/processing/issues/169 + http://code.google.com/p/processing/issues/detail?id=130 + https://github.com/processing/processing/pull/2659 + ++ Fix typo in StringList.insert() + https://github.com/processing/processing/pull/2672 + https://github.com/processing/processing/issues/2548 + ++ PImage resize() causes images to not draw + https://github.com/processing/processing/issues/2228 + https://github.com/processing/processing/pull/2324 + + +[ fixed in earlier releases ] + ++ maxHeapSize typo in the build scripts + https://github.com/processing/processing/issues/2603 + ++ for() loop with nothing inside parens crashes Auto Format + https://github.com/processing/processing/issues/2141 + ++ Chinese text is overlapped in Processing 2.1 editor + https://github.com/processing/processing/issues/2173 + ++ Implement Windows menu in the PDE + https://github.com/processing/processing/issues/584 + ++ Default font fixes (merged for 2.2.1 or earlier) + https://github.com/processing/processing/issues/2331 + https://github.com/processing/processing/pull/2338 + ++ image resize() takes oddly long time + https://github.com/processing/processing/issues/5 + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . diff --git a/todo.txt b/todo.txt index a2eb233a6..7d5027332 100644 --- a/todo.txt +++ b/todo.txt @@ -1,8 +1,4 @@ 0229 pde (3.0a2) -X new tab/rename dialog box -X https://github.com/processing/processing/issues/2431 -X fix issue where the browser wasn't opening the reference properly -X https://github.com/processing/processing/pull/2657 X fix "No such file or directory" error when exporting an application on OSX X this also resulted in the application not being signed at all X https://github.com/processing/processing/issues/2614 @@ -58,6 +54,10 @@ X NullPointerException in addBreakpointComments() when saving sketch X https://github.com/processing/processing/issues/2675 X run button seems to stay highlighted permanently X https://github.com/processing/processing/issues/2676 +X new tab/rename dialog box +X https://github.com/processing/processing/issues/2431 +X fix issue where the browser wasn't opening the reference properly +X https://github.com/processing/processing/pull/2657 pulls X insert tabs properly when prefs set for tabs mode From f2388472a44bed9c46d0ae87d8ae1c09e1487638 Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 31 Jul 2014 10:22:53 -0400 Subject: [PATCH 30/47] don't require processing-docs repo to do a build --- build/build.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/build.xml b/build/build.xml index 808195bde..0368af006 100755 --- a/build/build.xml +++ b/build/build.xml @@ -277,8 +277,8 @@ - - + + From 2acea6287c3da360fa3ddb8cf1b9ba74d2de793d Mon Sep 17 00:00:00 2001 From: codeanticode Date: Thu, 31 Jul 2014 10:46:57 -0400 Subject: [PATCH 31/47] set alpha channel to opaque after blitting the multisampled FBO, which fixes #2679 --- core/src/processing/opengl/PGraphicsOpenGL.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/core/src/processing/opengl/PGraphicsOpenGL.java b/core/src/processing/opengl/PGraphicsOpenGL.java index c2bf327e9..bd463b52f 100644 --- a/core/src/processing/opengl/PGraphicsOpenGL.java +++ b/core/src/processing/opengl/PGraphicsOpenGL.java @@ -6440,19 +6440,22 @@ public class PGraphicsOpenGL extends PGraphics { protected void endOffscreenDraw() { + if (offscreenMultisample) { + multisampleFramebuffer.copyColor(offscreenFramebuffer); + } + + popFramebuffer(); + if (backgroundA == 1) { - // Set alpha channel to opaque in order to match behavior of JAVA2D: + // Set alpha channel to opaque in order to match behavior of JAVA2D, not + // on the multisampled FBO because it leads to wrong background color + // on some Macbooks with AMD graphics. pgl.colorMask(false, false, false, true); pgl.clearColor(0, 0, 0, backgroundA); pgl.clear(PGL.COLOR_BUFFER_BIT); pgl.colorMask(true, true, true, true); } - if (offscreenMultisample) { - multisampleFramebuffer.copyColor(offscreenFramebuffer); - } - - popFramebuffer(); texture.updateTexels(); // Mark all texels in screen texture as modified. getPrimaryPG().restoreGL(); From cb6d37b67556d77bf5942d33d655f6b6a1c0ac6c Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 31 Jul 2014 10:58:18 -0400 Subject: [PATCH 32/47] Switched from using a thread-based poll system to one that polls when the window gains focus. Also un-auto-formatted the code --- app/src/processing/app/Editor.java | 1179 +++++++++++++++------------- 1 file changed, 643 insertions(+), 536 deletions(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 410cbfeec..95b1650b9 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -1,24 +1,24 @@ /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ /* - Part of the Processing project - http://processing.org + Part of the Processing project - http://processing.org - Copyright (c) 2004-12 Ben Fry and Casey Reas - Copyright (c) 2001-04 Massachusetts Institute of Technology + Copyright (c) 2004-12 Ben Fry and Casey Reas + Copyright (c) 2001-04 Massachusetts Institute of Technology - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 - as published by the Free Software Foundation. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ package processing.app; @@ -47,16 +47,15 @@ import javax.swing.undo.*; */ public abstract class Editor extends JFrame implements RunnerListener { protected Base base; - protected EditorState state; - protected Mode mode; // otherwise, if the window is resized with the message label // set to blank, it's preferredSize() will be fukered - static protected final String EMPTY = " " - + " " - + " "; + static protected final String EMPTY = + " " + + " " + + " "; /** * true if this file has not yet been given a name by the user @@ -64,31 +63,22 @@ public abstract class Editor extends JFrame implements RunnerListener { // private boolean untitled; private PageFormat pageFormat; - private PrinterJob printerJob; // file and sketch menus for re-inserting items private JMenu fileMenu; - // private JMenuItem saveMenuItem; // private JMenuItem saveAsMenuItem; private JMenu sketchMenu; protected EditorHeader header; - protected EditorToolbar toolbar; - protected JEditTextArea textarea; - protected EditorStatus status; - protected JSplitPane splitPane; - protected JPanel consolePanel; - protected EditorConsole console; - protected EditorLineStatus lineStatus; // currently opened program @@ -99,60 +89,48 @@ public abstract class Editor extends JFrame implements RunnerListener { // undo fellers private JMenuItem undoItem, redoItem; - protected UndoAction undoAction; - protected RedoAction redoAction; - /** the currently selected tab's undo manager */ private UndoManager undo; - // used internally for every edit. Groups hotkey-event text manipulations and // groups multi-character inputs into a single undos. private CompoundEdit compoundEdit; - // timer to decide when to group characters into an undo private Timer timer; - private TimerTask endUndoEvent; - // true if inserting text, false if removing text private boolean isInserting; - // maintain caret position during undo operations private final Stack caretUndoStack = new Stack(); - private final Stack caretRedoStack = new Stack(); private FindReplace find; - JMenu toolsMenu; - JMenu modeMenu; ArrayList coreTools; - public ArrayList contribTools; + // protected Editor(final Base base, String path, int[] location, final Mode mode) { - protected Editor(final Base base, String path, EditorState state, - final Mode mode) { + protected Editor(final Base base, String path, EditorState state, final Mode mode) { super("Processing", state.checkConfig()); this.base = base; this.state = state; this.mode = mode; - Toolkit.setIcon(this); // TODO should this be per-mode? + Toolkit.setIcon(this); // TODO should this be per-mode? // Install default actions for Run, Present, etc. // resetHandlers(); // add listener to handle window close box hit event addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - base.handleClose(Editor.this, false); - } - }); + public void windowClosing(WindowEvent e) { + base.handleClose(Editor.this, false); + } + }); // don't close the window when clicked, the app will take care // of that via the handleQuitInternal() methods // http://dev.processing.org/bugs/show_bug.cgi?id=440 @@ -160,29 +138,29 @@ public abstract class Editor extends JFrame implements RunnerListener { // When bringing a window to front, let the Base know addWindowListener(new WindowAdapter() { - public void windowActivated(WindowEvent e) { + public void windowActivated(WindowEvent e) { // EditorConsole.systemOut.println("editor window activated"); - base.handleActivated(Editor.this); + base.handleActivated(Editor.this); // mode.handleActivated(Editor.this); - fileMenu.insert(base.getSketchbookMenu(), 2); - fileMenu.insert(base.getRecentMenu(), 3); + fileMenu.insert(base.getSketchbookMenu(), 2); + fileMenu.insert(base.getRecentMenu(), 3); // fileMenu.insert(mode.getExamplesMenu(), 3); - sketchMenu.insert(mode.getImportMenu(), 4); - mode.insertToolbarRecentMenu(); - } + sketchMenu.insert(mode.getImportMenu(), 4); + mode.insertToolbarRecentMenu(); + } - // added for 1.0.5 - // http://dev.processing.org/bugs/show_bug.cgi?id=1260 - public void windowDeactivated(WindowEvent e) { + // added for 1.0.5 + // http://dev.processing.org/bugs/show_bug.cgi?id=1260 + public void windowDeactivated(WindowEvent e) { // EditorConsole.systemErr.println("editor window deactivated"); // mode.handleDeactivated(Editor.this); - fileMenu.remove(base.getSketchbookMenu()); - fileMenu.remove(base.getRecentMenu()); + fileMenu.remove(base.getSketchbookMenu()); + fileMenu.remove(base.getRecentMenu()); // fileMenu.remove(mode.getExamplesMenu()); - sketchMenu.remove(mode.getImportMenu()); - mode.removeToolbarRecentMenu(); - } - }); + sketchMenu.remove(mode.getImportMenu()); + mode.removeToolbarRecentMenu(); + } + }); timer = new Timer(); @@ -259,7 +237,6 @@ public abstract class Editor extends JFrame implements RunnerListener { // end an undo-chunk any time the caret moves unless it's when text is edited textarea.addCaretListener(new CaretListener() { String lastText = textarea.getText(); - public void caretUpdate(CaretEvent e) { String newText = textarea.getText(); if (lastText.equals(newText) && isDirectEdit()) { @@ -278,11 +255,8 @@ public abstract class Editor extends JFrame implements RunnerListener { state.apply(this); // Set the minimum size for the editor window - setMinimumSize(new Dimension( - Preferences - .getInteger("editor.window.width.min"), - Preferences - .getInteger("editor.window.height.min"))); + setMinimumSize(new Dimension(Preferences.getInteger("editor.window.width.min"), + Preferences.getInteger("editor.window.height.min"))); // Bring back the general options for the editor applyPreferences(); @@ -308,6 +282,7 @@ public abstract class Editor extends JFrame implements RunnerListener { } } + /** * Broken out to get modes working for GSOC, but this needs a longer-term * solution where the listeners are handled properly. @@ -316,18 +291,22 @@ public abstract class Editor extends JFrame implements RunnerListener { return new JEditTextArea(new PdeTextAreaDefaults(mode)); } + public EditorState getEditorState() { return state; } + public void removeRecent() { base.removeRecent(this); } + public void addRecent() { base.handleRecent(this); } + /** * Handles files dragged & dropped from the desktop and into the editor * window. Dragging files into the editor window is the same as using @@ -343,12 +322,12 @@ public abstract class Editor extends JFrame implements RunnerListener { int successful = 0; try { - DataFlavor uriListFlavor = new DataFlavor( - "text/uri-list;class=java.lang.String"); + DataFlavor uriListFlavor = + new DataFlavor("text/uri-list;class=java.lang.String"); if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { - java.util.List list = (java.util.List) transferable - .getTransferData(DataFlavor.javaFileListFlavor); + java.util.List list = (java.util.List) + transferable.getTransferData(DataFlavor.javaFileListFlavor); for (int i = 0; i < list.size(); i++) { File file = (File) list.get(i); if (sketch.addFile(file)) { @@ -358,11 +337,10 @@ public abstract class Editor extends JFrame implements RunnerListener { } else if (transferable.isDataFlavorSupported(uriListFlavor)) { // Some platforms (Mac OS X and Linux, when this began) preferred // this method of moving files. - String data = (String) transferable.getTransferData(uriListFlavor); + String data = (String)transferable.getTransferData(uriListFlavor); String[] pieces = PApplet.splitTokens(data, "\r\n"); for (int i = 0; i < pieces.length; i++) { - if (pieces[i].startsWith("#")) - continue; + if (pieces[i].startsWith("#")) continue; String path = null; if (pieces[i].startsWith("file:///")) { @@ -376,10 +354,8 @@ public abstract class Editor extends JFrame implements RunnerListener { } } } catch (Exception e) { - Base - .showWarning("Drag & Drop Problem", - "An error occurred while trying to add files to the sketch.", - e); + Base.showWarning("Drag & Drop Problem", + "An error occurred while trying to add files to the sketch.", e); return false; } @@ -396,14 +372,17 @@ public abstract class Editor extends JFrame implements RunnerListener { } } + public Base getBase() { return base; } + public Mode getMode() { return mode; } + protected void initModeMenu() { modeMenu = new JMenu(); ButtonGroup modeGroup = new ButtonGroup(); @@ -431,18 +410,24 @@ public abstract class Editor extends JFrame implements RunnerListener { modeMenu.add(addLib); } + public JMenu getModeMenu() { return modeMenu; } + + // public Settings getTheme() { // return mode.getTheme(); // } + abstract public EditorToolbar createToolbar(); + abstract public Formatter createFormatter(); + // protected void setPlacement(int[] location) { // setBounds(location[0], location[1], location[2], location[3]); // if (location[4] != 0) { @@ -467,59 +452,74 @@ public abstract class Editor extends JFrame implements RunnerListener { // return location; // } + protected void setDividerLocation(int pos) { splitPane.setDividerLocation(pos); } + protected int getDividerLocation() { return splitPane.getDividerLocation(); } + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + /** - * Read and apply new values from the preferences, either because the app is - * just starting up, or the user just finished messing with things in the - * Preferences window. + * Read and apply new values from the preferences, either because + * the app is just starting up, or the user just finished messing + * with things in the Preferences window. */ protected void applyPreferences() { // Update fonts and other items controllable from the prefs textarea.getPainter().updateAppearance(); textarea.repaint(); - + console.updateAppearance(); - + // All of this code was specific to using an external editor. /* - * // // apply the setting for 'use external editor' // boolean external = - * Preferences.getBoolean("editor.external"); // - * textarea.setEditable(!external); // saveMenuItem.setEnabled(!external); - * // saveAsMenuItem.setEnabled(!external); - * - * TextAreaPainter painter = textarea.getPainter(); // if (external) { // // - * disable line highlight and turn off the caret when disabling // Color - * color = mode.getColor("editor.external.bgcolor"); // - * painter.setBackground(color); // painter.setLineHighlightEnabled(false); - * // textarea.setCaretVisible(false); // } else { Color color = - * mode.getColor("editor.bgcolor"); painter.setBackground(color); boolean - * highlight = Preferences.getBoolean("editor.linehighlight"); - * painter.setLineHighlightEnabled(highlight); - * textarea.setCaretVisible(true); // } - * - * // apply changes to the font size for the editor // - * painter.setFont(Preferences.getFont("editor.font")); - * - * // in case tab expansion stuff has changed // removing this, just - * checking prefs directly instead // listener.applyPreferences(); - * - * // in case moved to a new location // For 0125, changing to async version - * (to be implemented later) //sketchbook.rebuildMenus(); // For 0126, moved - * into Base, which will notify all editors. //base.rebuildMenusAsync(); +// // apply the setting for 'use external editor' +// boolean external = Preferences.getBoolean("editor.external"); +// textarea.setEditable(!external); +// saveMenuItem.setEnabled(!external); +// saveAsMenuItem.setEnabled(!external); + + TextAreaPainter painter = textarea.getPainter(); +// if (external) { +// // disable line highlight and turn off the caret when disabling +// Color color = mode.getColor("editor.external.bgcolor"); +// painter.setBackground(color); +// painter.setLineHighlightEnabled(false); +// textarea.setCaretVisible(false); +// } else { + Color color = mode.getColor("editor.bgcolor"); + painter.setBackground(color); + boolean highlight = Preferences.getBoolean("editor.linehighlight"); + painter.setLineHighlightEnabled(highlight); + textarea.setCaretVisible(true); +// } + + // apply changes to the font size for the editor +// painter.setFont(Preferences.getFont("editor.font")); + + // in case tab expansion stuff has changed + // removing this, just checking prefs directly instead +// listener.applyPreferences(); + + // in case moved to a new location + // For 0125, changing to async version (to be implemented later) + //sketchbook.rebuildMenus(); + // For 0126, moved into Base, which will notify all editors. + //base.rebuildMenusAsync(); */ } + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + protected void buildMenuBar() { JMenuBar menubar = new JMenuBar(); menubar = new JMenuBar(); @@ -554,8 +554,10 @@ public abstract class Editor extends JFrame implements RunnerListener { setJMenuBar(menubar); } + abstract public JMenu buildFileMenu(); + // public JMenu buildFileMenu(Editor editor) { // return buildFileMenu(editor, null); // } @@ -564,24 +566,25 @@ public abstract class Editor extends JFrame implements RunnerListener { // // most of these items are per-mode // protected JMenu buildFileMenu(Editor editor, JMenuItem[] exportItems) { + protected JMenu buildFileMenu(JMenuItem[] exportItems) { JMenuItem item; JMenu fileMenu = new JMenu("File"); item = Toolkit.newJMenuItem("New", 'N'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - base.handleNew(); - } - }); + public void actionPerformed(ActionEvent e) { + base.handleNew(); + } + }); fileMenu.add(item); item = Toolkit.newJMenuItem("Open...", 'O'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - base.handleOpenPrompt(); - } - }); + public void actionPerformed(ActionEvent e) { + base.handleOpenPrompt(); + } + }); fileMenu.add(item); fileMenu.add(base.getSketchbookMenu()); @@ -670,14 +673,17 @@ public abstract class Editor extends JFrame implements RunnerListener { return fileMenu; } + // public void setSaveItem(JMenuItem item) { // saveMenuItem = item; // } + // public void setSaveAsItem(JMenuItem item) { // saveAsMenuItem = item; // } + protected JMenu buildEditMenu() { JMenu menu = new JMenu("Edit"); JMenuItem item; @@ -690,7 +696,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // http://code.google.com/p/processing/issues/detail?id=363 if (Base.isWindows()) { redoItem = Toolkit.newJMenuItem("Redo", 'Y'); - } else { // Linux and OS X + } else { // Linux and OS X redoItem = Toolkit.newJMenuItemShift("Redo", 'Z'); } redoItem.addActionListener(redoAction = new RedoAction()); @@ -702,97 +708,106 @@ public abstract class Editor extends JFrame implements RunnerListener { // if some text is currently selected item = Toolkit.newJMenuItem("Cut", 'X'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCut(); - } - }); + public void actionPerformed(ActionEvent e) { + handleCut(); + } + }); menu.add(item); item = Toolkit.newJMenuItem("Copy", 'C'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - textarea.copy(); - } - }); + public void actionPerformed(ActionEvent e) { + textarea.copy(); + } + }); menu.add(item); item = Toolkit.newJMenuItemShift("Copy as HTML", 'C'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCopyAsHTML(); - } - }); + public void actionPerformed(ActionEvent e) { + handleCopyAsHTML(); + } + }); menu.add(item); item = Toolkit.newJMenuItem("Paste", 'V'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - textarea.paste(); - sketch.setModified(true); - } - }); + public void actionPerformed(ActionEvent e) { + textarea.paste(); + sketch.setModified(true); + } + }); menu.add(item); item = Toolkit.newJMenuItem("Select All", 'A'); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textarea.selectAll(); + } + }); + menu.add(item); + + /* + menu.addSeparator(); + + item = Toolkit.newJMenuItem("Delete Selected Lines", 'D'); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - textarea.selectAll(); + handleDeleteLines(); } }); menu.add(item); - /* - * menu.addSeparator(); - * - * item = Toolkit.newJMenuItem("Delete Selected Lines", 'D'); - * item.addActionListener(new ActionListener() { public void - * actionPerformed(ActionEvent e) { handleDeleteLines(); } }); - * menu.add(item); - * - * item = new JMenuItem("Move Selected Lines Up"); - * item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, - * Event.ALT_MASK)); item.addActionListener(new ActionListener() { public - * void actionPerformed(ActionEvent e) { handleMoveLines(true); } }); - * menu.add(item); - * - * item = new JMenuItem("Move Selected Lines Down"); - * item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, - * Event.ALT_MASK)); item.addActionListener(new ActionListener() { public - * void actionPerformed(ActionEvent e) { handleMoveLines(false); } }); - * menu.add(item); + item = new JMenuItem("Move Selected Lines Up"); + item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, Event.ALT_MASK)); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + handleMoveLines(true); + } + }); + menu.add(item); + + item = new JMenuItem("Move Selected Lines Down"); + item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, Event.ALT_MASK)); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + handleMoveLines(false); + } + }); + menu.add(item); */ menu.addSeparator(); item = Toolkit.newJMenuItem("Auto Format", 'T'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleAutoFormat(); - } + public void actionPerformed(ActionEvent e) { + handleAutoFormat(); + } }); menu.add(item); item = Toolkit.newJMenuItem("Comment/Uncomment", '/'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCommentUncomment(); - } + public void actionPerformed(ActionEvent e) { + handleCommentUncomment(); + } }); menu.add(item); item = Toolkit.newJMenuItem("Increase Indent", ']'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleIndentOutdent(true); - } + public void actionPerformed(ActionEvent e) { + handleIndentOutdent(true); + } }); menu.add(item); item = Toolkit.newJMenuItem("Decrease Indent", '['); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleIndentOutdent(false); - } + public void actionPerformed(ActionEvent e) { + handleIndentOutdent(false); + } }); menu.add(item); @@ -800,55 +815,57 @@ public abstract class Editor extends JFrame implements RunnerListener { item = Toolkit.newJMenuItem("Find...", 'F'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (find == null) { - find = new FindReplace(Editor.this); + public void actionPerformed(ActionEvent e) { + if (find == null) { + find = new FindReplace(Editor.this); + } + //new FindReplace(Editor.this).show(); + find.setVisible(true); } - //new FindReplace(Editor.this).show(); - find.setVisible(true); - } - }); + }); menu.add(item); // TODO find next should only be enabled after a // search has actually taken place item = Toolkit.newJMenuItem("Find Next", 'G'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (find != null) { - find.findNext(); + public void actionPerformed(ActionEvent e) { + if (find != null) { + find.findNext(); + } } - } - }); + }); menu.add(item); item = Toolkit.newJMenuItemShift("Find Previous", 'G'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (find != null) { - find.findPrevious(); + public void actionPerformed(ActionEvent e) { + if (find != null) { + find.findPrevious(); + } } - } - }); + }); menu.add(item); // For Arduino and Mac, this should be command-E, but that currently conflicts with Export Applet item = Toolkit.newJMenuItemAlt("Use Selection for Find", 'F'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (find == null) { - find = new FindReplace(Editor.this); + public void actionPerformed(ActionEvent e) { + if (find == null) { + find = new FindReplace(Editor.this); + } + find.setFindText(getSelectedText()); } - find.setFindText(getSelectedText()); - } - }); + }); menu.add(item); return menu; } + abstract public JMenu buildSketchMenu(); + protected JMenu buildSketchMenu(JMenuItem[] runItems) { JMenuItem item; sketchMenu = new JMenu("Sketch"); @@ -863,26 +880,26 @@ public abstract class Editor extends JFrame implements RunnerListener { item = Toolkit.newJMenuItem("Show Sketch Folder", 'K'); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - Base.openFolder(sketch.getFolder()); - } - }); + public void actionPerformed(ActionEvent e) { + Base.openFolder(sketch.getFolder()); + } + }); sketchMenu.add(item); item.setEnabled(Base.openFolderAvailable()); item = new JMenuItem("Add File..."); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - sketch.handleAddFile(); - } - }); + public void actionPerformed(ActionEvent e) { + sketch.handleAddFile(); + } + }); sketchMenu.add(item); sketchMenu.addSeparator(); // final Editor editorName = this; - - sketchMenu.addMenuListener(new MenuListener() { + + sketchMenu.addMenuListener(new MenuListener() { // Menu Listener that populates the menu only when the menu is opened List menuList = new ArrayList(); @@ -893,18 +910,17 @@ public abstract class Editor extends JFrame implements RunnerListener { JMenuItem item; for (final Editor editor : base.getEditors()) { //if (Editor.this.getSketch().getName().trim().contains(editor2.getSketch().getName().trim())) - if (getSketch().getMainFilePath().equals(editor.getSketch() - .getMainFilePath())) { + if (getSketch().getMainFilePath().equals(editor.getSketch().getMainFilePath())) { item = new JCheckBoxMenuItem(editor.getSketch().getName()); item.setSelected(true); } else { item = new JMenuItem(editor.getSketch().getName()); } - item.setText(editor.getSketch().getName() + " (" - + editor.getMode().getTitle() + ")"); + item.setText(editor.getSketch().getName() + + " (" + editor.getMode().getTitle() + ")"); // Action listener to bring the appropriate sketch in front - item.addActionListener(new ActionListener() { + item.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -937,8 +953,10 @@ public abstract class Editor extends JFrame implements RunnerListener { return sketchMenu; } + abstract public void handleImportLibrary(String jarPath); + public JMenu getToolMenu() { if (toolsMenu == null) { rebuildToolMenu(); @@ -946,11 +964,13 @@ public abstract class Editor extends JFrame implements RunnerListener { return toolsMenu; } + // protected void rebuildToolList() { // coreTools = ToolContribution.list(Base.getToolsFolder(), true); // contribTools = ToolContribution.list(Base.getSketchbookToolsFolder(), true); // } + public void rebuildToolMenu() { if (toolsMenu == null) { toolsMenu = new JMenu("Tools"); @@ -976,6 +996,7 @@ public abstract class Editor extends JFrame implements RunnerListener { toolsMenu.add(item); } + // /** // * Attempt to init or run a Tool from the safety of a try/catch block that // * will report errors to the user. @@ -1007,7 +1028,8 @@ public abstract class Editor extends JFrame implements RunnerListener { // } // return false; // } - + + void addToolItem(final Tool tool, HashMap toolItems) { String title = tool.getMenuTitle(); final JMenuItem item = new JMenuItem(title); @@ -1018,24 +1040,24 @@ public abstract class Editor extends JFrame implements RunnerListener { tool.run(); } catch (NoSuchMethodError nsme) { - statusError("\"" + tool.getMenuTitle() + "\" is not" - + "compatible with this version of Processing"); + statusError("\"" + tool.getMenuTitle() + "\" is not" + + "compatible with this version of Processing"); //nsme.printStackTrace(); Base.log("Incompatible tool found during tool.run()", nsme); item.setEnabled(false); } catch (Exception ex) { - statusError("An error occurred inside \"" + tool.getMenuTitle() - + "\""); + statusError("An error occurred inside \"" + tool.getMenuTitle() + "\""); ex.printStackTrace(); item.setEnabled(false); - } + } } }); //menu.add(item); toolItems.put(title, item); } + protected void addTools(JMenu menu, ArrayList tools) { HashMap toolItems = new HashMap(); @@ -1044,35 +1066,31 @@ public abstract class Editor extends JFrame implements RunnerListener { tool.init(Editor.this); // If init() fails, the item won't be added to the menu addToolItem(tool, toolItems); - + // With the exceptions, we can't call statusError because the window // isn't completely set up yet. Also not gonna pop up a warning because // people may still be running different versions of Processing. // TODO Once the dust settles on 2.x, change this to Base.showError() // and open the Tools folder instead of showing System.err.println(). - + } catch (NoSuchMethodError nsme) { - System.err.println("\"" + tool.getMenuTitle() + "\" is not " - + "compatible with this version of Processing"); - System.err.println("The " + nsme.getMessage() - + " method no longer exists."); + System.err.println("\"" + tool.getMenuTitle() + "\" is not " + + "compatible with this version of Processing"); + System.err.println("The " + nsme.getMessage() + " method no longer exists."); Base.log("Incompatible Tool found during tool.init()", nsme); } catch (NoClassDefFoundError ncdfe) { - System.err.println("\"" + tool.getMenuTitle() + "\" is not " - + "compatible with this version of Processing"); - System.err.println("The " + ncdfe.getMessage() - + " class is no longer available."); + System.err.println("\"" + tool.getMenuTitle() + "\" is not " + + "compatible with this version of Processing"); + System.err.println("The " + ncdfe.getMessage() + " class is no longer available."); Base.log("Incompatible Tool found during tool.init()", ncdfe); } catch (Error err) { - System.err.println("An error occurred inside \"" + tool.getMenuTitle() - + "\""); + System.err.println("An error occurred inside \"" + tool.getMenuTitle() + "\""); err.printStackTrace(); } catch (Exception ex) { - System.err.println("An exception occurred inside \"" - + tool.getMenuTitle() + "\""); + System.err.println("An exception occurred inside \"" + tool.getMenuTitle() + "\""); ex.printStackTrace(); } } @@ -1087,6 +1105,7 @@ public abstract class Editor extends JFrame implements RunnerListener { } } + /** * Override this if you want a special menu for your particular 'mode'. */ @@ -1094,6 +1113,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return null; } + protected void addToolMenuItem(JMenu menu, String className) { try { Class toolClass = Class.forName(className); @@ -1117,6 +1137,7 @@ public abstract class Editor extends JFrame implements RunnerListener { } } + protected JMenu addInternalTools(JMenu menu) { // JMenuItem item; // item = createToolMenuItem("processing.app.tools.AutoFormatTool"); @@ -1154,37 +1175,54 @@ public abstract class Editor extends JFrame implements RunnerListener { return menu; } - /* - * // testing internal web server to serve up docs from a zip file item = new - * JMenuItem("Web Server Test"); item.addActionListener(new ActionListener() { - * public void actionPerformed(ActionEvent e) { //WebServer ws = new - * WebServer(); SwingUtilities.invokeLater(new Runnable() { public void run() - * { try { int port = - * WebServer.launch("/Users/fry/coconut/processing/build/shared/reference.zip" - * ); Base.openURL("http://127.0.0.1:" + port + "/reference/setup_.html"); - * - * } catch (IOException e1) { e1.printStackTrace(); } } }); } }); - * menu.add(item); - */ /* - * item = new JMenuItem("Browser Test"); item.addActionListener(new - * ActionListener() { public void actionPerformed(ActionEvent e) { - * //Base.openURL("http://processing.org/learning/gettingstarted/"); //JFrame - * browserFrame = new JFrame("Browser"); BrowserStartup bs = new - * BrowserStartup( - * "jar:file:/Users/fry/coconut/processing/build/shared/reference.zip!/reference/setup_.html" - * ); bs.initUI(); bs.launch(); } }); menu.add(item); - */ + // testing internal web server to serve up docs from a zip file + item = new JMenuItem("Web Server Test"); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + //WebServer ws = new WebServer(); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + try { + int port = WebServer.launch("/Users/fry/coconut/processing/build/shared/reference.zip"); + Base.openURL("http://127.0.0.1:" + port + "/reference/setup_.html"); + + } catch (IOException e1) { + e1.printStackTrace(); + } + } + }); + } + }); + menu.add(item); + */ + + /* + item = new JMenuItem("Browser Test"); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + //Base.openURL("http://processing.org/learning/gettingstarted/"); + //JFrame browserFrame = new JFrame("Browser"); + BrowserStartup bs = new BrowserStartup("jar:file:/Users/fry/coconut/processing/build/shared/reference.zip!/reference/setup_.html"); + bs.initUI(); + bs.launch(); + } + }); + menu.add(item); + */ + abstract public JMenu buildHelpMenu(); + public void showReference(String filename) { File file = new File(mode.getReferenceFolder(), filename); // Prepend with file:// and also encode spaces & other characters Base.openURL(file.toURI().toString()); } + static public void showChanges() { // http://code.google.com/p/processing/issues/detail?id=1520 if (!Base.isCommandLine()) { @@ -1192,8 +1230,10 @@ public abstract class Editor extends JFrame implements RunnerListener { } } + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + class UndoAction extends AbstractAction { public UndoAction() { super("Undo"); @@ -1219,8 +1259,7 @@ public abstract class Editor extends JFrame implements RunnerListener { updateUndoState(); redoAction.updateRedoState(); if (sketch != null) { - sketch.setModified(!getText().equals(sketch.getCurrentCode() - .getSavedProgram())); + sketch.setModified(!getText().equals(sketch.getCurrentCode().getSavedProgram())); } } @@ -1245,6 +1284,7 @@ public abstract class Editor extends JFrame implements RunnerListener { } } + class RedoAction extends AbstractAction { public RedoAction() { super("Redo"); @@ -1269,8 +1309,7 @@ public abstract class Editor extends JFrame implements RunnerListener { updateRedoState(); undoAction.updateUndoState(); if (sketch != null) { - sketch.setModified(!getText().equals(sketch.getCurrentCode() - .getSavedProgram())); + sketch.setModified(!getText().equals(sketch.getCurrentCode().getSavedProgram())); } } @@ -1288,13 +1327,16 @@ public abstract class Editor extends JFrame implements RunnerListener { } } + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + // these will be done in a more generic way soon, more like: // setHandler("action name", Runnable); // but for the time being, working out the kinks of how many things to // abstract from the editor in this fashion. + // public void setHandlers(Runnable runHandler, Runnable presentHandler, // Runnable stopHandler, // Runnable exportHandler, Runnable exportAppHandler) { @@ -1305,6 +1347,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // this.exportAppHandler = exportAppHandler; // } + // public void resetHandlers() { // runHandler = new DefaultRunHandler(); // presentHandler = new DefaultPresentHandler(); @@ -1313,8 +1356,10 @@ public abstract class Editor extends JFrame implements RunnerListener { // exportAppHandler = new DefaultExportAppHandler(); // } + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + /** * Gets the current sketch object. */ @@ -1322,9 +1367,10 @@ public abstract class Editor extends JFrame implements RunnerListener { return sketch; } + /** - * Get the JEditTextArea object for use (not recommended). This should only be - * used in obscure cases that really need to hack the internals of the + * Get the JEditTextArea object for use (not recommended). This should only + * be used in obscure cases that really need to hack the internals of the * JEditTextArea. Most tools should only interface via the get/set functions * found in this class. This will maintain compatibility with future releases, * which will not use JEditTextArea. @@ -1333,6 +1379,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea; } + /** * Get the contents of the current buffer. Used by the Sketch class. */ @@ -1340,6 +1387,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getText(); } + /** * Get a range of text from the current buffer. */ @@ -1347,6 +1395,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getText(start, stop - start); } + /** * Replace the entire contents of the front-most tab. */ @@ -1356,6 +1405,7 @@ public abstract class Editor extends JFrame implements RunnerListener { stopCompoundEdit(); } + public void insertText(String what) { startCompoundEdit(); int caret = getCaretOffset(); @@ -1364,9 +1414,10 @@ public abstract class Editor extends JFrame implements RunnerListener { stopCompoundEdit(); } + /** - * Called to update the text but not switch to a different set of code (which - * would affect the undo manager). + * Called to update the text but not switch to a different set of code + * (which would affect the undo manager). */ // public void setText2(String what, int start, int stop) { // beginCompoundEdit(); @@ -1381,14 +1432,17 @@ public abstract class Editor extends JFrame implements RunnerListener { // textarea.requestFocus(); // get the caret blinking // } + public String getSelectedText() { return textarea.getSelectedText(); } + public void setSelectedText(String what) { textarea.setSelectedText(what); } + public void setSelection(int start, int stop) { // make sure that a tool isn't asking for a bad location start = PApplet.constrain(start, 0, textarea.getDocumentLength()); @@ -1397,16 +1451,18 @@ public abstract class Editor extends JFrame implements RunnerListener { textarea.select(start, stop); } + /** - * Get the position (character offset) of the caret. With text selected, this - * will be the last character actually selected, no matter the direction of - * the selection. That is, if the user clicks and drags to select lines 7 up - * to 4, then the caret position will be somewhere on line four. + * Get the position (character offset) of the caret. With text selected, + * this will be the last character actually selected, no matter the direction + * of the selection. That is, if the user clicks and drags to select lines + * 7 up to 4, then the caret position will be somewhere on line four. */ public int getCaretOffset() { return textarea.getCaretPosition(); } + /** * True if some text is currently selected. */ @@ -1414,6 +1470,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.isSelectionActive(); } + /** * Get the beginning point of the current selection. */ @@ -1421,6 +1478,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getSelectionStart(); } + /** * Get the end point of the current selection. */ @@ -1428,6 +1486,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getSelectionStop(); } + /** * Get text for a specified line. */ @@ -1435,6 +1494,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getLineText(line); } + /** * Replace the text on a specified line. */ @@ -1445,6 +1505,7 @@ public abstract class Editor extends JFrame implements RunnerListener { stopCompoundEdit(); } + /** * Get character offset for the start of a given line of text. */ @@ -1452,6 +1513,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getLineStartOffset(line); } + /** * Get character offset for end of a given line of text. */ @@ -1459,6 +1521,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getLineStopOffset(line); } + /** * Get the number of lines in the currently displayed buffer. */ @@ -1466,6 +1529,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return textarea.getLineCount(); } + /** * Use before a manipulating text to group editing operations together as a * single undo. Use stopCompoundEdit() once finished. @@ -1475,6 +1539,7 @@ public abstract class Editor extends JFrame implements RunnerListener { compoundEdit = new CompoundEdit(); } + /** * Use with startCompoundEdit() to group edit operations in a single undo. */ @@ -1490,20 +1555,23 @@ public abstract class Editor extends JFrame implements RunnerListener { } } + public int getScrollPosition() { return textarea.getVerticalScrollPosition(); } + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + /** - * Switch between tabs, this swaps out the Document object that's currently - * being manipulated. + * Switch between tabs, this swaps out the Document object + * that's currently being manipulated. */ protected void setCode(SketchCode code) { SyntaxDocument document = (SyntaxDocument) code.getDocument(); - if (document == null) { // this document not yet inited + if (document == null) { // this document not yet inited document = new SyntaxDocument(); code.setDocument(document); @@ -1544,33 +1612,34 @@ public abstract class Editor extends JFrame implements RunnerListener { // connect the undo listener to the editor document.addUndoableEditListener(new UndoableEditListener() { - public void undoableEditHappened(UndoableEditEvent e) { - // if an edit is in progress, reset the timer - if (endUndoEvent != null) { - endUndoEvent.cancel(); - endUndoEvent = null; - startTimerEvent(); - } + public void undoableEditHappened(UndoableEditEvent e) { + // if an edit is in progress, reset the timer + if (endUndoEvent != null) { + endUndoEvent.cancel(); + endUndoEvent = null; + startTimerEvent(); + } - // if this edit is just getting started, create a compound edit - if (compoundEdit == null) { - startCompoundEdit(); - startTimerEvent(); - } + // if this edit is just getting started, create a compound edit + if (compoundEdit == null) { + startCompoundEdit(); + startTimerEvent(); + } - compoundEdit.addEdit(e.getEdit()); - undoAction.updateUndoState(); - redoAction.updateRedoState(); - } - }); + compoundEdit.addEdit(e.getEdit()); + undoAction.updateUndoState(); + redoAction.updateRedoState(); + } + }); } // update the document object that's in use - textarea.setDocument(document, code.getSelectionStart(), - code.getSelectionStop(), code.getScrollPosition()); + textarea.setDocument(document, + code.getSelectionStart(), code.getSelectionStop(), + code.getScrollPosition()); // textarea.requestFocus(); // get the caret blinking - textarea.requestFocusInWindow(); // required for caret blinking + textarea.requestFocusInWindow(); // required for caret blinking this.undo = code.getUndo(); undoAction.updateUndoState(); @@ -1606,6 +1675,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + /** * Implements Edit → Cut. */ @@ -1614,6 +1684,7 @@ public abstract class Editor extends JFrame implements RunnerListener { sketch.setModified(true); } + /** * Implements Edit → Copy. */ @@ -1621,11 +1692,13 @@ public abstract class Editor extends JFrame implements RunnerListener { textarea.copy(); } + public void handleCopyAsHTML() { textarea.copyAsHTML(); statusNotice("Code formatted as HTML has been copied to the clipboard."); } + /** * Implements Edit → Paste. */ @@ -1634,6 +1707,7 @@ public abstract class Editor extends JFrame implements RunnerListener { sketch.setModified(true); } + /** * Implements Edit → Select All. */ @@ -1647,69 +1721,88 @@ public abstract class Editor extends JFrame implements RunnerListener { // * with the line beneath // */ /* - * public void handleMoveLines(boolean moveUp) { startCompoundEdit(); - * - * int startLine = textarea.getSelectionStartLine(); int stopLine = - * textarea.getSelectionStopLine(); - * - * // if more than one line is selected and none of the characters of the end - * // line are selected, don't move that line if (startLine != stopLine && - * textarea.getSelectionStop() == textarea.getLineStartOffset(stopLine)) - * stopLine--; - * - * int replacedLine = moveUp ? startLine - 1 : stopLine + 1; if (replacedLine - * < 0 || replacedLine >= textarea.getLineCount()) return; - * - * final String source = getText(); - * - * int replaceStart = textarea.getLineStartOffset(replacedLine); int - * replaceEnd = textarea.getLineStopOffset(replacedLine); if (replaceEnd == - * source.length() + 1) replaceEnd--; - * - * int selectionStart = textarea.getLineStartOffset(startLine); int - * selectionEnd = textarea.getLineStopOffset(stopLine); if (selectionEnd == - * source.length() + 1) selectionEnd--; - * - * String replacedText = source.substring(replaceStart, replaceEnd); String - * selectedText = source.substring(selectionStart, selectionEnd); if - * (replacedLine == textarea.getLineCount() - 1) { replacedText += "\n"; - * selectedText = selectedText.substring(0, selectedText.length() - 1); } else - * if (stopLine == textarea.getLineCount() - 1) { selectedText += "\n"; - * replacedText = replacedText.substring(0, replacedText.length() - 1); } - * - * int newSelectionStart, newSelectionEnd; if (moveUp) { // Change the - * selection, then change the line above textarea.select(selectionStart, - * selectionEnd); textarea.setSelectedText(replacedText); - * - * textarea.select(replaceStart, replaceEnd); - * textarea.setSelectedText(selectedText); - * - * newSelectionStart = textarea.getLineStartOffset(startLine - 1); - * newSelectionEnd = textarea.getLineStopOffset(stopLine - 1) - 1; } else { // - * Change the line beneath, then change the selection - * textarea.select(replaceStart, replaceEnd); - * textarea.setSelectedText(selectedText); - * - * textarea.select(selectionStart, selectionEnd); - * textarea.setSelectedText(replacedText); - * - * newSelectionStart = textarea.getLineStartOffset(startLine + 1); - * newSelectionEnd = textarea.getLineStopOffset(stopLine + 1) - 1; } - * - * textarea.select(newSelectionStart, newSelectionEnd); stopCompoundEdit(); } - */ + public void handleMoveLines(boolean moveUp) { + startCompoundEdit(); + + int startLine = textarea.getSelectionStartLine(); + int stopLine = textarea.getSelectionStopLine(); + + // if more than one line is selected and none of the characters of the end + // line are selected, don't move that line + if (startLine != stopLine + && textarea.getSelectionStop() == textarea.getLineStartOffset(stopLine)) + stopLine--; + + int replacedLine = moveUp ? startLine - 1 : stopLine + 1; + if (replacedLine < 0 || replacedLine >= textarea.getLineCount()) + return; + + final String source = getText(); + + int replaceStart = textarea.getLineStartOffset(replacedLine); + int replaceEnd = textarea.getLineStopOffset(replacedLine); + if (replaceEnd == source.length() + 1) + replaceEnd--; + + int selectionStart = textarea.getLineStartOffset(startLine); + int selectionEnd = textarea.getLineStopOffset(stopLine); + if (selectionEnd == source.length() + 1) + selectionEnd--; + + String replacedText = source.substring(replaceStart, replaceEnd); + String selectedText = source.substring(selectionStart, selectionEnd); + if (replacedLine == textarea.getLineCount() - 1) { + replacedText += "\n"; + selectedText = selectedText.substring(0, selectedText.length() - 1); + } else if (stopLine == textarea.getLineCount() - 1) { + selectedText += "\n"; + replacedText = replacedText.substring(0, replacedText.length() - 1); + } + + int newSelectionStart, newSelectionEnd; + if (moveUp) { + // Change the selection, then change the line above + textarea.select(selectionStart, selectionEnd); + textarea.setSelectedText(replacedText); + + textarea.select(replaceStart, replaceEnd); + textarea.setSelectedText(selectedText); + + newSelectionStart = textarea.getLineStartOffset(startLine - 1); + newSelectionEnd = textarea.getLineStopOffset(stopLine - 1) - 1; + } else { + // Change the line beneath, then change the selection + textarea.select(replaceStart, replaceEnd); + textarea.setSelectedText(selectedText); + + textarea.select(selectionStart, selectionEnd); + textarea.setSelectedText(replacedText); + + newSelectionStart = textarea.getLineStartOffset(startLine + 1); + newSelectionEnd = textarea.getLineStopOffset(stopLine + 1) - 1; + } + + textarea.select(newSelectionStart, newSelectionEnd); + stopCompoundEdit(); + } + */ + /* - * public void handleDeleteLines() { int startLine = - * textarea.getSelectionStartLine(); int stopLine = - * textarea.getSelectionStopLine(); - * - * int start = textarea.getLineStartOffset(startLine); int end = - * textarea.getLineStopOffset(stopLine); if (end == getText().length() + 1) - * end--; - * - * textarea.select(start, end); textarea.setSelectedText(""); } - */ + public void handleDeleteLines() { + int startLine = textarea.getSelectionStartLine(); + int stopLine = textarea.getSelectionStopLine(); + + int start = textarea.getLineStartOffset(startLine); + int end = textarea.getLineStopOffset(stopLine); + if (end == getText().length() + 1) + end--; + + textarea.select(start, end); + textarea.setSelectedText(""); + } + */ + public void handleAutoFormat() { final String source = getText(); @@ -1718,7 +1811,7 @@ public abstract class Editor extends JFrame implements RunnerListener { final String formattedText = createFormatter().format(source); // save current (rough) selection point int selectionEnd = getSelectionStop(); - + // boolean wasVisible = // textarea.getSelectionStopLine() >= textarea.getFirstLine() && // textarea.getSelectionStopLine() < textarea.getLastLine(); @@ -1736,7 +1829,7 @@ public abstract class Editor extends JFrame implements RunnerListener { int scrollPos = textarea.getVerticalScrollPosition(); setText(formattedText); setSelection(selectionEnd, selectionEnd); - + // Put the scrollbar position back, otherwise it jumps on each format. // Since we're not doing a good job of maintaining position anyway, // a more complicated workaround here is fairly pointless. @@ -1761,8 +1854,10 @@ public abstract class Editor extends JFrame implements RunnerListener { } } + abstract public String getCommentPrefix(); + protected void handleCommentUncomment() { startCompoundEdit(); @@ -1822,14 +1917,17 @@ public abstract class Editor extends JFrame implements RunnerListener { sketch.setModified(true); } + public void handleIndent() { handleIndentOutdent(true); } + public void handleOutdent() { handleIndentOutdent(false); } + public void handleIndentOutdent(boolean indent) { int tabSize = Preferences.getInteger("editor.tabs.size"); String tabString = Editor.EMPTY.substring(0, tabSize); @@ -1857,7 +1955,7 @@ public abstract class Editor extends JFrame implements RunnerListener { textarea.select(location, location); textarea.setSelectedText(tabString); - } else { // outdent + } else { // outdent int last = Math.min(location + tabSize, textarea.getDocumentLength()); textarea.select(location, last); // Don't eat code if it's not indented @@ -1874,6 +1972,7 @@ public abstract class Editor extends JFrame implements RunnerListener { sketch.setModified(true); } + static public boolean checkParen(char[] array, int index, int stop) { // boolean paren = false; // int stepper = i + 1; @@ -1910,14 +2009,15 @@ public abstract class Editor extends JFrame implements RunnerListener { return false; } + protected boolean functionable(char c) { return (c == '_') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); } + /** - * Check the current selection for reference. If no selection is active, + * Check the current selection for reference. If no selection is active, * expand the current selection. - * * @return */ protected String referenceCheck(boolean selectIfFound) { @@ -1929,7 +2029,7 @@ public abstract class Editor extends JFrame implements RunnerListener { start = temp; } char[] c = textarea.getText().toCharArray(); - + // System.out.println("checking reference"); if (start == stop) { while (start > 0 && functionable(c[start - 1])) { @@ -1951,7 +2051,8 @@ public abstract class Editor extends JFrame implements RunnerListener { } return ref; } - + + protected void handleFindReference() { String ref = referenceCheck(true); if (ref != null) { @@ -1965,38 +2066,55 @@ public abstract class Editor extends JFrame implements RunnerListener { } } } - + + /* - * protected void handleFindReference() { String text = - * textarea.getSelectedText().trim(); - * - * if (text.length() == 0) { - * statusNotice("First select a word to find in the reference."); - * - * } else { char[] c = textarea.getText().toCharArray(); int after = - * Math.max(textarea.getSelectionStart(), textarea.getSelectionStop()); if - * (checkParen(c, after, c.length)) { text += "_"; - * System.out.println("looking up ref for " + text); } String referenceFile = - * mode.lookupReference(text); System.out.println("reference file is " + - * referenceFile); if (referenceFile == null) { - * statusNotice("No reference available for \"" + text + "\""); } else { - * showReference(referenceFile + ".html"); } } } - * - * - * protected void handleFindReference() { String text = - * textarea.getSelectedText().trim(); - * - * if (text.length() == 0) { - * statusNotice("First select a word to find in the reference."); - * - * } else { String referenceFile = mode.lookupReference(text); - * //System.out.println("reference file is " + referenceFile); if - * (referenceFile == null) { statusNotice("No reference available for \"" + - * text + "\""); } else { showReference(referenceFile + ".html"); } } } - */ + protected void handleFindReference() { + String text = textarea.getSelectedText().trim(); + + if (text.length() == 0) { + statusNotice("First select a word to find in the reference."); + + } else { + char[] c = textarea.getText().toCharArray(); + int after = Math.max(textarea.getSelectionStart(), textarea.getSelectionStop()); + if (checkParen(c, after, c.length)) { + text += "_"; + System.out.println("looking up ref for " + text); + } + String referenceFile = mode.lookupReference(text); + System.out.println("reference file is " + referenceFile); + if (referenceFile == null) { + statusNotice("No reference available for \"" + text + "\""); + } else { + showReference(referenceFile + ".html"); + } + } + } + + + protected void handleFindReference() { + String text = textarea.getSelectedText().trim(); + + if (text.length() == 0) { + statusNotice("First select a word to find in the reference."); + + } else { + String referenceFile = mode.lookupReference(text); + //System.out.println("reference file is " + referenceFile); + if (referenceFile == null) { + statusNotice("No reference available for \"" + text + "\""); + } else { + showReference(referenceFile + ".html"); + } + } + } + */ + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + /** * Set the location of the sketch run window. Used by Runner to update the * Editor about window drag events while the sketch is running. @@ -2005,6 +2123,7 @@ public abstract class Editor extends JFrame implements RunnerListener { sketchWindowLocation = p; } + /** * Get the last location of the sketch's run window. Used by Runner to make * the window show up in the same location as when it was last closed. @@ -2013,45 +2132,42 @@ public abstract class Editor extends JFrame implements RunnerListener { return sketchWindowLocation; } + // public void internalCloseRunner() { // mode.internalCloseRunner(this); // } + /** * Check if the sketch is modified and ask user to save changes. - * * @return false if canceling the close/quit operation */ protected boolean checkModified() { - boolean ret; - if (!sketch.isModified()){ - stopReloadThread = true; - return true; - } + if (!sketch.isModified()) return true; // As of Processing 1.0.10, this always happens immediately. // http://dev.processing.org/bugs/show_bug.cgi?id=1456 // With Java 7u40 on OS X, need to bring the window forward. toFront(); - + String prompt = "Save changes to " + sketch.getName() + "? "; if (!Base.isMacOS()) { - int result = JOptionPane - .showConfirmDialog(this, prompt, "Close", - JOptionPane.YES_NO_CANCEL_OPTION, - JOptionPane.QUESTION_MESSAGE); + int result = + JOptionPane.showConfirmDialog(this, prompt, "Close", + JOptionPane.YES_NO_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); if (result == JOptionPane.YES_OPTION) { - ret = handleSave(true); + return handleSave(true); } else if (result == JOptionPane.NO_OPTION) { - ret = true; // ok to continue + return true; // ok to continue - } else if (result == JOptionPane.CANCEL_OPTION - || result == JOptionPane.CLOSED_OPTION) { - ret = false; + } else if (result == JOptionPane.CANCEL_OPTION || + result == JOptionPane.CLOSED_OPTION) { + return false; } else { throw new IllegalStateException(); @@ -2068,17 +2184,20 @@ public abstract class Editor extends JFrame implements RunnerListener { // Pane formatting adapted from the quaqua guide // http://www.randelshofer.ch/quaqua/guide/joptionpane.html - JOptionPane pane = new JOptionPane(" " - + " " - + "Do you want to save changes to this sketch
" - + " before closing?
" - + "

If you don't save, your changes will be lost.", - JOptionPane.QUESTION_MESSAGE); + JOptionPane pane = + new JOptionPane(" " + + " " + + "Do you want to save changes to this sketch
" + + " before closing?
" + + "

If you don't save, your changes will be lost.", + JOptionPane.QUESTION_MESSAGE); - String[] options = new String[] { "Save", "Cancel", "Don't Save" }; + String[] options = new String[] { + "Save", "Cancel", "Don't Save" + }; pane.setOptions(options); // highlight the safest option ala apple hig @@ -2093,26 +2212,22 @@ public abstract class Editor extends JFrame implements RunnerListener { dialog.setVisible(true); Object result = pane.getValue(); - if (result == options[0]) { // save (and close/quit) - ret = handleSave(true); + if (result == options[0]) { // save (and close/quit) + return handleSave(true); - } else if (result == options[2]) { // don't save (still close/quit) - ret = true; + } else if (result == options[2]) { // don't save (still close/quit) + return true; - } else { // cancel? - ret = false; + } else { // cancel? + return false; } } - if (ret) { - //the sketch is closing - stopReloadThread = true; - } - return ret; } + /** - * Open a sketch from a particular path, but don't check to save changes. Used - * by Sketch.saveAs() to re-open a sketch after the "Save As" + * Open a sketch from a particular path, but don't check to save changes. + * Used by Sketch.saveAs() to re-open a sketch after the "Save As" */ // protected void handleOpenUnchecked(String path, int codeIndex, // int selStart, int selStop, int scrollPos) { @@ -2127,6 +2242,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // textarea.setScrollPosition(scrollPos); // } + /** * Second stage of open, occurs after having checked to see if the * modifications (if any) to the previous sketch need to be saved. @@ -2155,32 +2271,37 @@ public abstract class Editor extends JFrame implements RunnerListener { + mode.getDefaultExtension(), null); return false; } else { - final String properParent = file.getName().substring(0, - file.getName() - .lastIndexOf('.')); - + final String properParent = + file.getName().substring(0, file.getName().lastIndexOf('.')); + Object[] options = { "OK", "Cancel" }; - String prompt = "The file \"" + file.getName() - + "\" needs to be inside\n" + "a sketch folder named \"" + properParent - + "\".\n" + "Create this folder, move the file, and continue?"; + String prompt = + "The file \"" + file.getName() + "\" needs to be inside\n" + + "a sketch folder named \"" + properParent + "\".\n" + + "Create this folder, move the file, and continue?"; - int result = JOptionPane.showOptionDialog(this, prompt, "Moving", + int result = JOptionPane.showOptionDialog(this, + prompt, + "Moving", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, - null, options, options[0]); + null, + options, + options[0]); if (result == JOptionPane.YES_OPTION) { // create properly named folder File properFolder = new File(file.getParent(), properParent); if (properFolder.exists()) { - Base.showWarning("Error", "A folder named \"" + properParent + "\" " - + "already exists. Can't open sketch.", null); + Base.showWarning("Error", + "A folder named \"" + properParent + "\" " + + "already exists. Can't open sketch.", null); return false; } if (!properFolder.mkdirs()) { //throw new IOException("Couldn't create sketch folder"); - Base - .showWarning("Error", "Could not create the sketch folder.", null); + Base.showWarning("Error", + "Could not create the sketch folder.", null); return false; } // copy the sketch inside @@ -2211,7 +2332,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return false; } initFileChangeListener(); - + header.rebuild(); updateTitle(); // Disable untitled setting from previous document, if any @@ -2231,29 +2352,14 @@ public abstract class Editor extends JFrame implements RunnerListener { // return false; // } } - - //true when the file is saved, before the next scan for updates - private boolean saved; + private boolean didReload; - - //TODO set to appropriate value - private boolean reloadEnabled=true; - - //the time between polls in ms - private final long FILE_CHECK_DELAY = 1000; - - private boolean stopReloadThread = false; - + //the key which is being used to poll the fs for changes private WatchKey key = null; private void initFileChangeListener() { - //if it is disabled, don't bother starting one - if (!reloadEnabled) { - return; - } - try { WatchService watchService = FileSystems.getDefault().newWatchService(); key = sketch.getFolder().toPath() @@ -2270,38 +2376,24 @@ public abstract class Editor extends JFrame implements RunnerListener { //if the key is null for some reason, don't bother attaching a listener to it, they can deal without one if (finKey != null) { //the key can now be polled for changes in the files - stopReloadThread = false; - Thread th = new Thread(new Runnable() { + addFocusListener(new FocusListener() { @Override - public void run() { - //polls for changes to the directory - while (true) { - try { - //check every .1s if the file has changed - Thread.sleep(FILE_CHECK_DELAY); - } catch (InterruptedException e) { - } - List> events = finKey.pollEvents(); - - //called when a sketch is closed - if (stopReloadThread) { - break; - } - //if it is disabled after being started, stop it - if (!reloadEnabled) { - break; - } - - processFileEvents(events); - - //if the directory was deleted, then quit the loop - if (!finKey.isValid()) { - break; - } + public void focusLost(FocusEvent e) { + //do nothing + } + + @Override + public void focusGained(FocusEvent e) { + //if the directory was deleted, then don't scan + if (!finKey.isValid()) { + return; } + + List> events = finKey.pollEvents(); + processFileEvents(events); } }); - th.start(); + } } @@ -2319,12 +2411,9 @@ public abstract class Editor extends JFrame implements RunnerListener { //due to some weird shit, if a file was editted in gedit, the context is .goutputstream-XXXXX //this makes things.... complicated //System.out.println(e.context()); - - //if the file was saved, don't prompt anything - if (saved) - break; + //if we already reloaded in this cycle, then don't reload again - if (didReload) { + if (didReload){ break; } if (e.kind().equals(StandardWatchEventKinds.ENTRY_MODIFY)) { @@ -2346,12 +2435,12 @@ public abstract class Editor extends JFrame implements RunnerListener { //for now, do nothing } } - saved = false; } + /** - * Set the title of the PDE window based on the current sketch, i.e. something - * like "sketch_070752a - Processing 0126" + * Set the title of the PDE window based on the current sketch, i.e. + * something like "sketch_070752a - Processing 0126" */ public void updateTitle() { setTitle(sketch.getName() + " | Processing " + Base.getVersionName()); @@ -2366,14 +2455,15 @@ public abstract class Editor extends JFrame implements RunnerListener { } } + /** - * Actually handle the save command. If 'immediately' is set to false, this - * will happen in another thread so that the message area will update and the - * save button will stay highlighted while the save is happening. If - * 'immediately' is true, then it will happen immediately. This is used during - * a quit, because invokeLater() won't run properly while a quit is happening. - * This fixes Bug - * 276. + * Actually handle the save command. If 'immediately' is set to false, + * this will happen in another thread so that the message area + * will update and the save button will stay highlighted while the + * save is happening. If 'immediately' is true, then it will happen + * immediately. This is used during a quit, because invokeLater() + * won't run properly while a quit is happening. This fixes + * Bug 276. */ public boolean handleSave(boolean immediately) { // handleStop(); // 0136 @@ -2387,19 +2477,19 @@ public abstract class Editor extends JFrame implements RunnerListener { } else { EventQueue.invokeLater(new Runnable() { - public void run() { - handleSaveImpl(); - } - }); + public void run() { + handleSaveImpl(); + } + }); } return true; } + protected void handleSaveImpl() { statusNotice("Saving..."); try { if (sketch.save()) { - saved = true; statusNotice("Done Saving."); } else { statusEmpty(); @@ -2416,6 +2506,7 @@ public abstract class Editor extends JFrame implements RunnerListener { } } + public boolean handleSaveAs() { statusNotice("Saving..."); try { @@ -2436,6 +2527,7 @@ public abstract class Editor extends JFrame implements RunnerListener { return true; } + /** * Handler for File → Page Setup. */ @@ -2451,6 +2543,7 @@ public abstract class Editor extends JFrame implements RunnerListener { //System.out.println("page format is " + pageFormat); } + /** * Handler for File → Print. */ @@ -2484,17 +2577,17 @@ public abstract class Editor extends JFrame implements RunnerListener { //printerJob = null; // clear this out? } + /** - * Grab current contents of the sketch window, advance the console, stop any - * other running sketches... not in that order. + * Grab current contents of the sketch window, advance the console, + * stop any other running sketches... not in that order. */ public void prepareRun() { internalCloseRunner(); statusEmpty(); // do this to advance/clear the terminal window / dos prompt / etc - for (int i = 0; i < 10; i++) - System.out.println(); + for (int i = 0; i < 10; i++) System.out.println(); // clear the console on each run, unless the user doesn't want to if (Preferences.getBoolean("console.auto_clear")) { @@ -2515,16 +2608,20 @@ public abstract class Editor extends JFrame implements RunnerListener { // } } + /** - * Halt the current runner for whatever reason. Might be the VM dying, the - * window closing, an error... + * Halt the current runner for whatever reason. Might be the VM dying, + * the window closing, an error... */ abstract public void internalCloseRunner(); + abstract public void deactivateRun(); + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + /** * Show an error in the status bar. */ @@ -2534,6 +2631,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // toolbar.deactivate(EditorToolbar.RUN); } + /** * Show an exception in the editor status bar. */ @@ -2588,6 +2686,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // e.printStackTrace(); } + /** * Show a notice message in the editor status bar. */ @@ -2595,25 +2694,29 @@ public abstract class Editor extends JFrame implements RunnerListener { status.notice(msg); } + public void clearNotice(String msg) { if (status.message.equals(msg)) { statusEmpty(); } } + /** * Returns the current notice message in the editor status bar. */ - public String getStatusMessage() { + public String getStatusMessage(){ return status.message; } - + + /** - * Returns the current mode of the editor status bar: NOTICE, ERR or EDIT. + * Returns the current mode of the editor status bar: NOTICE, ERR or EDIT. */ - public int getStatusMode() { + public int getStatusMode(){ return status.mode; } + /** * Clear the status area. @@ -2622,69 +2725,73 @@ public abstract class Editor extends JFrame implements RunnerListener { statusNotice(EMPTY); } + public void startIndeterminate() { status.startIndeterminate(); } + public void stopIndeterminate() { status.stopIndeterminate(); } + public void statusHalt() { // stop called by someone else } + public boolean isHalted() { return false; } + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + /** * Returns the edit popup menu. */ class TextAreaPopup extends JPopupMenu { JMenuItem cutItem; - JMenuItem copyItem; - JMenuItem discourseItem; - JMenuItem referenceItem; + public TextAreaPopup() { JMenuItem item; cutItem = new JMenuItem("Cut"); cutItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCut(); - } + public void actionPerformed(ActionEvent e) { + handleCut(); + } }); this.add(cutItem); copyItem = new JMenuItem("Copy"); copyItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCopy(); - } - }); + public void actionPerformed(ActionEvent e) { + handleCopy(); + } + }); this.add(copyItem); discourseItem = new JMenuItem("Copy as HTML"); discourseItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCopyAsHTML(); - } - }); + public void actionPerformed(ActionEvent e) { + handleCopyAsHTML(); + } + }); this.add(discourseItem); item = new JMenuItem("Paste"); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handlePaste(); - } - }); + public void actionPerformed(ActionEvent e) { + handlePaste(); + } + }); this.add(item); item = new JMenuItem("Select All"); @@ -2699,25 +2806,25 @@ public abstract class Editor extends JFrame implements RunnerListener { item = new JMenuItem("Comment/Uncomment"); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleCommentUncomment(); - } + public void actionPerformed(ActionEvent e) { + handleCommentUncomment(); + } }); this.add(item); item = new JMenuItem("Increase Indent"); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleIndentOutdent(true); - } + public void actionPerformed(ActionEvent e) { + handleIndentOutdent(true); + } }); this.add(item); item = new JMenuItem("Decrease Indent"); item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleIndentOutdent(false); - } + public void actionPerformed(ActionEvent e) { + handleIndentOutdent(false); + } }); this.add(item); @@ -2725,10 +2832,10 @@ public abstract class Editor extends JFrame implements RunnerListener { referenceItem = new JMenuItem("Find in Reference"); referenceItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - handleFindReference(); - } - }); + public void actionPerformed(ActionEvent e) { + handleFindReference(); + } + }); this.add(referenceItem); } @@ -2753,7 +2860,7 @@ public abstract class Editor extends JFrame implements RunnerListener { cutItem.setEnabled(active); copyItem.setEnabled(active); discourseItem.setEnabled(active); - + referenceItem.setEnabled(referenceCheck(false) != null); super.show(component, x, y); } From 77dc98da54105757148d15cd980c25fb54c59434 Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 31 Jul 2014 11:10:21 -0400 Subject: [PATCH 33/47] Now using the correct listener and added reloadEnabled again --- app/src/processing/app/Editor.java | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 95b1650b9..dd20fa2d7 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -2356,10 +2356,16 @@ public abstract class Editor extends JFrame implements RunnerListener { private boolean didReload; + //TODO set to the appropriate value + private boolean reloadEnabled = true; + //the key which is being used to poll the fs for changes private WatchKey key = null; private void initFileChangeListener() { + if(!reloadEnabled){ + return; + } try { WatchService watchService = FileSystems.getDefault().newWatchService(); key = sketch.getFolder().toPath() @@ -2375,15 +2381,12 @@ public abstract class Editor extends JFrame implements RunnerListener { //if the key is null for some reason, don't bother attaching a listener to it, they can deal without one if (finKey != null) { - //the key can now be polled for changes in the files - addFocusListener(new FocusListener() { + WindowFocusListener fl = new WindowFocusListener() { @Override - public void focusLost(FocusEvent e) { - //do nothing - } - - @Override - public void focusGained(FocusEvent e) { + public void windowGainedFocus(WindowEvent arg0) { + if (!reloadEnabled) { + return; + } //if the directory was deleted, then don't scan if (!finKey.isValid()) { return; @@ -2392,7 +2395,14 @@ public abstract class Editor extends JFrame implements RunnerListener { List> events = finKey.pollEvents(); processFileEvents(events); } - }); + + @Override + public void windowLostFocus(WindowEvent arg0){ + //do nothing + } + }; + //the key can now be polled for changes in the files + this.addWindowFocusListener(fl); } } From 0f370e40d125061900d21bc904bc3b772be96776 Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 31 Jul 2014 11:15:59 -0400 Subject: [PATCH 34/47] Stopped pop-up when the file is saved from within processing --- app/src/processing/app/Editor.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index dd20fa2d7..5c3d384fe 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -2353,6 +2353,8 @@ public abstract class Editor extends JFrame implements RunnerListener { // } } + //set to true when the sketch is saved from inside processing + private boolean saved; private boolean didReload; @@ -2422,6 +2424,10 @@ public abstract class Editor extends JFrame implements RunnerListener { //this makes things.... complicated //System.out.println(e.context()); + //don't ask to reload a file we saved + if(saved){ + break; + } //if we already reloaded in this cycle, then don't reload again if (didReload){ break; @@ -2445,6 +2451,7 @@ public abstract class Editor extends JFrame implements RunnerListener { //for now, do nothing } } + saved = false; } @@ -2478,6 +2485,7 @@ public abstract class Editor extends JFrame implements RunnerListener { public boolean handleSave(boolean immediately) { // handleStop(); // 0136 + saved = true; if (sketch.isUntitled()) { return handleSaveAs(); // need to get the name, user might also cancel here From edf62f3e99d8847b69b5670a1652d8cfee9a2fb3 Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 31 Jul 2014 11:52:59 -0400 Subject: [PATCH 35/47] Added a poll of filesystem event on the loss of focus which will catch if the file has been saved --- app/src/processing/app/Editor.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 5c3d384fe..cd1588ae6 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -2400,7 +2400,12 @@ public abstract class Editor extends JFrame implements RunnerListener { @Override public void windowLostFocus(WindowEvent arg0){ - //do nothing + List> events = finKey.pollEvents(); + //don't ask to reload a file we saved + if(!saved){ + processFileEvents(events); + } + saved = false; } }; //the key can now be polled for changes in the files @@ -2424,10 +2429,7 @@ public abstract class Editor extends JFrame implements RunnerListener { //this makes things.... complicated //System.out.println(e.context()); - //don't ask to reload a file we saved - if(saved){ - break; - } + //if we already reloaded in this cycle, then don't reload again if (didReload){ break; From 9be2b02b76a5485a9f47abc65b626dba3208c37d Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Thu, 31 Jul 2014 18:09:00 +0200 Subject: [PATCH 36/47] extended build script to add and rm property files --- app/build.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/build.xml b/app/build.xml index 1dc84edc3..4122ed0e8 100755 --- a/app/build.xml +++ b/app/build.xml @@ -25,6 +25,7 @@ + @@ -49,6 +50,14 @@ message="Please build the core library first and make sure it sits in ../core/library/core.jar" /> + + + + + + + + From 5c6d7995744f663c6cbdc9835fdee2ffcdcad7eb Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 31 Jul 2014 12:11:18 -0400 Subject: [PATCH 37/47] starting the next revision --- app/src/processing/app/Base.java | 20 +++---- core/done.txt | 48 +++++++++++++++++ core/todo.txt | 48 ++--------------- done.txt | 89 ++++++++++++++++++++++++++++++++ todo.txt | 88 +------------------------------ 5 files changed, 151 insertions(+), 142 deletions(-) diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index db6ed2383..9e1313434 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -46,9 +46,9 @@ import processing.mode.java.JavaMode; public class Base { // Added accessors for 0218 because the UpdateCheck class was not properly // updating the values, due to javac inlining the static final values. - static private final int REVISION = 229; + static private final int REVISION = 230; /** This might be replaced by main() if there's a lib/version.txt file. */ - static private String VERSION_NAME = "0229"; //$NON-NLS-1$ + static private String VERSION_NAME = "0230"; //$NON-NLS-1$ /** Set true if this a proper release rather than a numbered revision. */ // static private boolean RELEASE = false; @@ -602,21 +602,21 @@ public class Base { } - /** - * The call has already checked to make sure this sketch is not modified, - * now change the mode. - */ + /** + * The call has already checked to make sure this sketch is not modified, + * now change the mode. + */ protected void changeMode(Mode mode) { if (activeEditor.getMode() != mode) { Sketch sketch = activeEditor.getSketch(); nextMode = mode; - + if (sketch.isUntitled()) { // If no changes have been made, just close and start fresh. // (Otherwise the editor would lose its 'untitled' status.) handleClose(activeEditor, true); handleNew(); - + } else { // If the current editor contains file extensions that the new mode can handle, then // write a sketch.properties file with the new mode specified, and reopen. @@ -928,7 +928,7 @@ public class Base { // Cycle through open windows to make sure that it's not already open. for (Editor editor : editors) { - // User may have double-clicked any PDE in the sketch folder, + // User may have double-clicked any PDE in the sketch folder, // so we have to check each open tab (not just the main one). // https://github.com/processing/processing/issues/2506 for (SketchCode tab : editor.getSketch().getCode()) { @@ -972,7 +972,7 @@ public class Base { editor = coreModes[0].createEditor(this, path, state); } } - + // Make sure that the sketch actually loaded Sketch sketch = editor.getSketch(); if (sketch == null) { diff --git a/core/done.txt b/core/done.txt index 007c32e8b..3ebd45380 100644 --- a/core/done.txt +++ b/core/done.txt @@ -1,3 +1,51 @@ +0229 core (3.0a2) +X PImage resize() causes images to not draw +X https://github.com/processing/processing/issues/2228 +X https://github.com/processing/processing/pull/2324 +X move to native OS X full screen (gets rid of native code) +X https://github.com/processing/processing/issues/2641 +X do bounds check on setVertex(PVector) +X https://github.com/processing/processing/issues/2556 +X using createGraphics() w/o begin/endDraw(), don't attempt drawing w/ image() +X https://github.com/processing/processing/issues/2208 + +data +X add copy() method to Table +X return null from getString() on NaN float and double values +X affects how saveTable() works (writes blank entries instead of NaN) +X get(5) with an empty Int/Float/StringList was returning 0 +X https://github.com/processing/processing/pull/2343 +o fix for maxValue() and minValue() when all entries are bad +o on FloatDict it was NaN, check across the lists and other dict types +X nothing else to do here +X FloatDict and FloatList should always put NaN values at the end on sort +X same for the other list and dict classes +X (this is part of the point of having these easier versions) +o 'collector' class.. Dict that points to a list +o String as a key, int/float/string list as values +X seems too much like a better place for HashMap +X add print() method to other data types (not just IntList) + +pulls +X implement A and a (elliptical arcs) +X https://github.com/processing/processing/issues/169 +X http://code.google.com/p/processing/issues/detail?id=130 +X https://github.com/processing/processing/pull/2659 +X done with an approximation, if re-saving this will destroy data (docs) +X fix typo in StringList.insert() +X https://github.com/processing/processing/pull/2672 +X StingList.insert() error (should be an easy fix) +X https://github.com/processing/processing/issues/2548 + +earlier +X default font fixes (merged for 2.2.1 or earlier) +X https://github.com/processing/processing/issues/2331 +X https://github.com/processing/processing/pull/2338 +X image resize() takes oddly long time +X https://github.com/processing/processing/issues/5 +X the problem was confirmed to have fixed itself + + 0228 core (3.0a1) X add copy() method to PVector X modify PVector to include better methods for chaining operations diff --git a/core/todo.txt b/core/todo.txt index ee3902ee8..a2cfc1f18 100644 --- a/core/todo.txt +++ b/core/todo.txt @@ -1,49 +1,7 @@ -0229 core (3.0a2) -X PImage resize() causes images to not draw -X https://github.com/processing/processing/issues/2228 -X https://github.com/processing/processing/pull/2324 -X move to native OS X full screen (gets rid of native code) -X https://github.com/processing/processing/issues/2641 -X do bounds check on setVertex(PVector) -X https://github.com/processing/processing/issues/2556 -X using createGraphics() w/o begin/endDraw(), don't attempt drawing w/ image() -X https://github.com/processing/processing/issues/2208 +0230 core (3.0a3) -data -X add copy() method to Table -X return null from getString() on NaN float and double values -X affects how saveTable() works (writes blank entries instead of NaN) -X get(5) with an empty Int/Float/StringList was returning 0 -X https://github.com/processing/processing/pull/2343 -o fix for maxValue() and minValue() when all entries are bad -o on FloatDict it was NaN, check across the lists and other dict types -X nothing else to do here -X FloatDict and FloatList should always put NaN values at the end on sort -X same for the other list and dict classes -X (this is part of the point of having these easier versions) -o 'collector' class.. Dict that points to a list -o String as a key, int/float/string list as values -X seems too much like a better place for HashMap -X add print() method to other data types (not just IntList) - -pulls -X implement A and a (elliptical arcs) -X https://github.com/processing/processing/issues/169 -X http://code.google.com/p/processing/issues/detail?id=130 -X https://github.com/processing/processing/pull/2659 -X done with an approximation, if re-saving this will destroy data (docs) -X fix typo in StringList.insert() -X https://github.com/processing/processing/pull/2672 -X StingList.insert() error (should be an easy fix) -X https://github.com/processing/processing/issues/2548 - -earlier -X default font fixes (merged for 2.2.1 or earlier) -X https://github.com/processing/processing/issues/2331 -X https://github.com/processing/processing/pull/2338 -X image resize() takes oddly long time -X https://github.com/processing/processing/issues/5 -X the problem was confirmed to have fixed itself +X multisampled offscreen PGraphics don't clear the screen properly +X https://github.com/processing/processing/issues/2679 applet/component diff --git a/done.txt b/done.txt index bffe7352c..ba69845aa 100644 --- a/done.txt +++ b/done.txt @@ -1,3 +1,92 @@ +0229 pde (3.0a2) +X fix "No such file or directory" error when exporting an application on OSX +X this also resulted in the application not being signed at all +X https://github.com/processing/processing/issues/2614 +X this is a fairly major issue... +X possible to open a sketch multiple times +X by double-clicking one of its files instead of the main pde file +X user opens non-main pde of already open sketch, it'll open again +X https://github.com/processing/processing/issues/2506 +X remove the prefs for 32/64-bit from Preferences +X also remove the extra OS X cruft inside Runner.java +X OS X export button not disabled on other platforms +X https://github.com/processing/processing/issues/2642 +o try new syntax package +X exclude 'fonts' folder from build (since it's going into the JRE) +X was storing our fonts in both ./lib/fonts and jre/lib/fonts +X now gets the jre folder and loads from there +X make ant fail when trying to delete JRE files that don't exist +X some aren't being removed properly +X fix the build scripts to include the examples +X https://github.com/processing/processing/issues/2652 +X all examples are out of "processing/java" and are now in "processing-docs/content/". The Book examples have been removed entirely from our repositories. +o "Platform is ${platform}" message during 'ant clean' +o on OS X, but not Windows (haven't checked Linux) +X this was in pdex/build.xml +X remove welcome message from the sound library +X URL opening problem fixed by use of getCanonicalPath() on Windows +X https://github.com/processing/processing/issues/2656 +X add a new pref for the 3.0 sketchbook location +X if Server constructor fails, throw an exception +X https://github.com/processing/processing/issues/2604 +o check on why 2x core.jar inside the Java folder +o maybe OS X Java can't look in subfolders? (just auto-adds things) +o https://github.com/processing/processing/issues/2344 +X one is used by the PDE, the other is used as a library +X get 'modified' indicator working on document windows again +X https://github.com/processing/processing/issues/2194 +X remove default menu bar hack when 7u60 arrives +X http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8022667 +X when renaming a tab, include the previous name to be edited +X changing the mode on an untitled, unmodified sketch removes untitled status + +gsoc +X clear status messages in the Contribution Manager +X https://github.com/processing/processing/pull/2667 +X https://github.com/processing/processing/issues/2599 +X may need a progress bar for "save as" +X or just the file copy function in general +X since it may take a long time (i.e. 1000s of screen grabs) +X http://code.google.com/p/processing/issues/detail?id=31 +X https://github.com/processing/processing/issues/70 +X https://github.com/processing/processing/pull/2370 +X NullPointerException in addBreakpointComments() when saving sketch +X https://github.com/processing/processing/issues/2675 +X run button seems to stay highlighted permanently +X https://github.com/processing/processing/issues/2676 +X new tab/rename dialog box +X https://github.com/processing/processing/issues/2431 +X fix issue where the browser wasn't opening the reference properly +X https://github.com/processing/processing/pull/2657 + +pulls +X insert tabs properly when prefs set for tabs mode +X https://github.com/processing/processing/pull/2607 +X improve look of Nimbus LAF +X https://github.com/processing/processing/pull/2671 + +earlier +X maxHeapSize typo in the build scripts +X https://github.com/processing/processing/issues/2603 +X remove minim +X add the new sound library to the build process +X for() loop with nothing inside parens crashes Auto Format +X https://github.com/processing/processing/issues/2141 +o double-clicking a .pde file doesn't open properly on OS X +o https://github.com/processing/processing/issues/2639 +X moving p5 examples to the web repo +X move examples into web repo +o OS X not opening a sketch at all on pde double-click? (though opening the app) +X Chinese text is overlapped in Processing 2.1 editor +X https://github.com/processing/processing/issues/2173 +o type cut off in dialog boxes on OS X retina machines +o https://github.com/processing/processing/issues/2116 +o add spaces to the end of the text? +X seems to have fixed itself in newer Java releases +X implement Windows menu in the PDE +X https://github.com/processing/processing/issues/584 + + 0228 pde (3.0a1) X increase heap size to 256m (-Xmx256) per Manindra request X use a ButtonGroup so that the current Mode cannot be de-selected diff --git a/todo.txt b/todo.txt index 7d5027332..ad47ff5d9 100644 --- a/todo.txt +++ b/todo.txt @@ -1,90 +1,4 @@ -0229 pde (3.0a2) -X fix "No such file or directory" error when exporting an application on OSX -X this also resulted in the application not being signed at all -X https://github.com/processing/processing/issues/2614 -X this is a fairly major issue... -X possible to open a sketch multiple times -X by double-clicking one of its files instead of the main pde file -X user opens non-main pde of already open sketch, it'll open again -X https://github.com/processing/processing/issues/2506 -X remove the prefs for 32/64-bit from Preferences -X also remove the extra OS X cruft inside Runner.java -X OS X export button not disabled on other platforms -X https://github.com/processing/processing/issues/2642 -o try new syntax package -X exclude 'fonts' folder from build (since it's going into the JRE) -X was storing our fonts in both ./lib/fonts and jre/lib/fonts -X now gets the jre folder and loads from there -X make ant fail when trying to delete JRE files that don't exist -X some aren't being removed properly -X fix the build scripts to include the examples -X https://github.com/processing/processing/issues/2652 -X all examples are out of "processing/java" and are now in "processing-docs/content/". The Book examples have been removed entirely from our repositories. -o "Platform is ${platform}" message during 'ant clean' -o on OS X, but not Windows (haven't checked Linux) -X this was in pdex/build.xml -X remove welcome message from the sound library -X URL opening problem fixed by use of getCanonicalPath() on Windows -X https://github.com/processing/processing/issues/2656 -X add a new pref for the 3.0 sketchbook location -X if Server constructor fails, throw an exception -X https://github.com/processing/processing/issues/2604 -o check on why 2x core.jar inside the Java folder -o maybe OS X Java can't look in subfolders? (just auto-adds things) -o https://github.com/processing/processing/issues/2344 -X one is used by the PDE, the other is used as a library -X get 'modified' indicator working on document windows again -X https://github.com/processing/processing/issues/2194 -X remove default menu bar hack when 7u60 arrives -X http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8022667 -X when renaming a tab, include the previous name to be edited -X changing the mode on an untitled, unmodified sketch removes untitled status - -gsoc -X clear status messages in the Contribution Manager -X https://github.com/processing/processing/pull/2667 -X https://github.com/processing/processing/issues/2599 -X may need a progress bar for "save as" -X or just the file copy function in general -X since it may take a long time (i.e. 1000s of screen grabs) -X http://code.google.com/p/processing/issues/detail?id=31 -X https://github.com/processing/processing/issues/70 -X https://github.com/processing/processing/pull/2370 -X NullPointerException in addBreakpointComments() when saving sketch -X https://github.com/processing/processing/issues/2675 -X run button seems to stay highlighted permanently -X https://github.com/processing/processing/issues/2676 -X new tab/rename dialog box -X https://github.com/processing/processing/issues/2431 -X fix issue where the browser wasn't opening the reference properly -X https://github.com/processing/processing/pull/2657 - -pulls -X insert tabs properly when prefs set for tabs mode -X https://github.com/processing/processing/pull/2607 -X improve look of Nimbus LAF -X https://github.com/processing/processing/pull/2671 - -earlier -X maxHeapSize typo in the build scripts -X https://github.com/processing/processing/issues/2603 -X remove minim -X add the new sound library to the build process -X for() loop with nothing inside parens crashes Auto Format -X https://github.com/processing/processing/issues/2141 -o double-clicking a .pde file doesn't open properly on OS X -o https://github.com/processing/processing/issues/2639 -X moving p5 examples to the web repo -X move examples into web repo -o OS X not opening a sketch at all on pde double-click? (though opening the app) -X Chinese text is overlapped in Processing 2.1 editor -X https://github.com/processing/processing/issues/2173 -o type cut off in dialog boxes on OS X retina machines -o https://github.com/processing/processing/issues/2116 -o add spaces to the end of the text? -X seems to have fixed itself in newer Java releases -X implement Windows menu in the PDE -X https://github.com/processing/processing/issues/584 +0230 pde (3.0a3) pending From f675c7277334ff8aa0a06c1c57891b7d4679f239 Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Thu, 31 Jul 2014 18:11:23 +0200 Subject: [PATCH 38/47] fixed encoding java bug --- app/src/processing/app/Base.java | 1 + app/src/processing/app/Language.java | 245 ++++++++++++++++----------- 2 files changed, 148 insertions(+), 98 deletions(-) diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index f8fc94126..4ec79e86f 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -171,6 +171,7 @@ public class Base { // Make sure a full JDK is installed initRequirements(); + // Load the languages Language.init(); // run static initialization that grabs all the prefs diff --git a/app/src/processing/app/Language.java b/app/src/processing/app/Language.java index 4240b8210..e83285ddf 100644 --- a/app/src/processing/app/Language.java +++ b/app/src/processing/app/Language.java @@ -1,112 +1,161 @@ package processing.app; import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; import java.util.HashMap; import java.util.Locale; +import java.util.PropertyResourceBundle; import java.util.ResourceBundle; -import processing.core.PApplet; +import processing.core.PApplet; /** * Internationalization (i18n) + * * @author Darius Morawiec */ public class Language { - - private static Language instance = null; - private String language; - private HashMap languages; - private ResourceBundle bundle; - - private Language() { - - // Get system language - this.language = Locale.getDefault().getLanguage(); - - // Set available languages - this.languages = new HashMap(); - - // Language code: - // http://en.wikipedia.org/wiki/ISO_639-1 - // http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes - - // en, English - this.languages.put(Locale.ENGLISH.getLanguage(), Locale.ENGLISH.getDisplayLanguage(Locale.ENGLISH)); - // de, Deutsch - this.languages.put(Locale.GERMAN.getLanguage(), Locale.GERMAN.getDisplayLanguage(Locale.GERMAN)); - - // Set default language - if(!this.languages.containsKey(this.language)){ - this.language = "en"; - } - - // Get saved language - try { - File file = Base.getContentFile("lib/language.txt"); - if (file.exists()) { - String language = PApplet.loadStrings(file)[0]; - language = language.trim().toLowerCase(); - if(!language.equals("")) { - this.language = language; - } else { - Base.saveFile(this.language, file); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - - // Get bundle with translations (processing.app.language.PDE) - this.bundle = ResourceBundle.getBundle("processing.app.languages.PDE", new Locale(this.language)); - } - - /** - * Singleton constructor - * @return - */ - public static synchronized Language init() { - if(instance == null) { - instance = new Language(); - } - return instance; - } - - /** - * Get translation from bundles. - * @param text - * @return - */ - public static String text(String text) { - return init().bundle.getString(text); - } - - /** - * Get all available languages - * @return - */ - public static HashMap getLanguages() { - return init().languages; - } - - /** - * Get current language - * @return - */ - public static String getLanguage() { - return init().language; - } - - /** - * Set new language - * @param language - */ - public static void setLanguage(String language) { - try { - File file = Base.getContentFile("lib/language.txt"); - Base.saveFile(language, file); - } catch (Exception e) { - e.printStackTrace(); - } - } - + + private static Language instance = null; + private String language; + private HashMap languages; + private ResourceBundle bundle; + private static final String FILE = "processing.app.languages.PDE"; + + private Language() { + + // Get system language + this.language = Locale.getDefault().getLanguage(); + + // Set available languages + this.languages = new HashMap(); + + // Language code: + // http://en.wikipedia.org/wiki/ISO_639-1 + // http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes + + // en, English, English + this.languages.put(Locale.ENGLISH.getLanguage(), Locale.ENGLISH.getDisplayLanguage(Locale.ENGLISH)); + // de, German, Deutsch + this.languages.put(Locale.GERMAN.getLanguage(), Locale.GERMAN.getDisplayLanguage(Locale.GERMAN)); + + // Set default language + if (!this.languages.containsKey(this.language)) { + this.language = "en"; + } + + // Get saved language + try { + File file = Base.getContentFile("lib/language.txt"); + if (file.exists()) { + String language = PApplet.loadStrings(file)[0]; + language = language.trim().toLowerCase(); + if (!language.equals("")) { + this.language = language; + } else { + Base.saveFile(this.language, file); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + // Get bundle with translations (processing.app.language.PDE) + this.bundle = ResourceBundle.getBundle(Language.FILE, new Locale(this.language), new UTF8Control()); + } + + /** + * Singleton constructor + * + * @return + */ + public static synchronized Language init() { + if (instance == null) { + instance = new Language(); + } + return instance; + } + + /** + * Get translation from bundles. + * + * @param text + * @return + */ + public static String text(String text) { + return init().bundle.getString(text); + } + + /** + * Get all available languages + * + * @return + */ + public static HashMap getLanguages() { + return init().languages; + } + + /** + * Get current language + * + * @return + */ + public static String getLanguage() { + return init().language; + } + + /** + * Set new language + * + * @param language + */ + public static void setLanguage(String language) { + try { + File file = Base.getContentFile("lib/language.txt"); + Base.saveFile(language, file); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Custom Control class for consitent encoding. + * http://stackoverflow.com/questions/4659929/how-to-use-utf-8-in-resource-properties-with-resourcebundle + */ + public class UTF8Control extends ResourceBundle.Control { + public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException,IOException { + // The below is a copy of the default implementation. + String bundleName = toBundleName(baseName, locale); + String resourceName = toResourceName(bundleName, "properties"); + ResourceBundle bundle = null; + InputStream stream = null; + if (reload) { + URL url = loader.getResource(resourceName); + if (url != null) { + URLConnection connection = url.openConnection(); + if (connection != null) { + connection.setUseCaches(false); + stream = connection.getInputStream(); + } + } + } else { + stream = loader.getResourceAsStream(resourceName); + } + if (stream != null) { + try { + // Only this line is changed to make it to read properties + // files as UTF-8. + bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8")); + } finally { + stream.close(); + } + } + return bundle; + } + } + } \ No newline at end of file From d9a9fa44c835838c46aefffd7cb1719bf58737dd Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 31 Jul 2014 12:29:32 -0400 Subject: [PATCH 39/47] cleanups for file watching service --- app/src/processing/app/Editor.java | 97 +++++++++++-------------- app/src/processing/app/Preferences.java | 8 +- build/shared/lib/defaults.txt | 5 +- todo.txt | 5 ++ 4 files changed, 57 insertions(+), 58 deletions(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 1b15e824b..6f4e53531 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -2361,7 +2361,9 @@ public abstract class Editor extends JFrame implements RunnerListener { Base.showWarning("Error", "Could not create the sketch.", e); return false; } - initFileChangeListener(); + if (Preferences.getBoolean("editor.watcher")) { + initFileChangeListener(); + } header.rebuild(); updateTitle(); @@ -2370,7 +2372,7 @@ public abstract class Editor extends JFrame implements RunnerListener { // Store information on who's open and running // (in case there's a crash or something that can't be recovered) -// base.storeSketches(); + // TODO this probably need not be here because of the Recent menu, right? Preferences.save(); // opening was successful @@ -2383,107 +2385,94 @@ public abstract class Editor extends JFrame implements RunnerListener { // } } - //set to true when the sketch is saved from inside processing - private boolean saved; - - private boolean didReload; - //TODO set to the appropriate value - private boolean reloadEnabled = true; + //set to true when the sketch is saved from inside processing + private boolean watcherSave; + private boolean watcherReloaded; //the key which is being used to poll the fs for changes - private WatchKey key = null; + private WatchKey watcherKey = null; private void initFileChangeListener() { - if(!reloadEnabled){ - return; - } try { WatchService watchService = FileSystems.getDefault().newWatchService(); - key = sketch.getFolder().toPath() - .register(watchService, -// StandardWatchEventKinds.ENTRY_CREATE, -// StandardWatchEventKinds.ENTRY_DELETE, - StandardWatchEventKinds.ENTRY_MODIFY); + Path folderPath = sketch.getFolder().toPath(); + watcherKey = folderPath.register(watchService, +// StandardWatchEventKinds.ENTRY_CREATE, +// StandardWatchEventKinds.ENTRY_DELETE, + StandardWatchEventKinds.ENTRY_MODIFY); } catch (IOException e) { - //registring the watch failed, ignore it + e.printStackTrace(); } - final WatchKey finKey = key; + final WatchKey finKey = watcherKey; - //if the key is null for some reason, don't bother attaching a listener to it, they can deal without one + // if the key is null for some reason, don't bother attaching + // a listener to it, they can deal without one if (finKey != null) { - WindowFocusListener fl = new WindowFocusListener() { + // the key can now be polled for changes in the files + addWindowFocusListener(new WindowFocusListener() { @Override public void windowGainedFocus(WindowEvent arg0) { - if (!reloadEnabled) { - return; - } + // check preference here for enabled or not? + //if the directory was deleted, then don't scan - if (!finKey.isValid()) { - return; + if (finKey.isValid()) { + List> events = finKey.pollEvents(); + processFileEvents(events); } - - List> events = finKey.pollEvents(); - processFileEvents(events); } @Override public void windowLostFocus(WindowEvent arg0){ List> events = finKey.pollEvents(); //don't ask to reload a file we saved - if(!saved){ + if (!watcherSave) { processFileEvents(events); } - saved = false; + watcherSave = false; } - }; - //the key can now be polled for changes in the files - this.addWindowFocusListener(fl); - + }); } } + /** - * called when a file is changed - * - * @param events - * the list of events that have occured in the registered folder - * (sketch.getFolder()) + * Called when a file is changed. + * @param events the list of events that have occured in the sketch folder */ private void processFileEvents(List> events) { - didReload = false; + watcherReloaded = false; for (WatchEvent e : events) { //the context is the name of the file inside the path //due to some weird shit, if a file was editted in gedit, the context is .goutputstream-XXXXX //this makes things.... complicated - //System.out.println(e.context()); - + //System.out.println(e.context()); //if we already reloaded in this cycle, then don't reload again - if (didReload){ + if (watcherReloaded){ break; } if (e.kind().equals(StandardWatchEventKinds.ENTRY_MODIFY)) { // Path p = (Path) e.context(); // Path root = (Path) key.watchable(); // Path path = root.resolve(p); - int response = Base - .showYesNoQuestion(Editor.this, "File Modified", - "A file has been modified externally", - "Would you like to reload the sketch?"); + int response = + Base.showYesNoQuestion(Editor.this, "File Modified", + "A file has been modified externally", + "Would you like to reload the sketch?"); if (response == 0) { - //reload the sketch + // reload the sketch sketch.reload(); header.rebuild(); - didReload = true; + watcherReloaded = true; } } else { - //called when a file is created or deleted - //for now, do nothing + // called when a file is created or deleted + // for now, do nothing } } - saved = false; + watcherSave = false; } @@ -2517,7 +2506,7 @@ public abstract class Editor extends JFrame implements RunnerListener { public boolean handleSave(boolean immediately) { // handleStop(); // 0136 - saved = true; + watcherSave = true; if (sketch.isUntitled()) { return handleSaveAs(); // need to get the name, user might also cancel here diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java index b03a9b991..3f2dcbc0f 100644 --- a/app/src/processing/app/Preferences.java +++ b/app/src/processing/app/Preferences.java @@ -65,6 +65,8 @@ public class Preferences { static final Integer[] FONT_SIZES = { 10, 12, 14, 18, 24, 36, 48 }; // what to call the feller + // had to rename this file because people were editing it + static final String DEFAULTS_FILE = "defaults.txt"; //$NON-NLS-1$ static final String PREFS_FILE = "preferences.txt"; //$NON-NLS-1$ @@ -142,8 +144,8 @@ public class Preferences { // data model - static HashMap defaults; - static HashMap table = new HashMap(); + static HashMap defaults; + static HashMap table = new HashMap(); static File preferencesFile; @@ -154,7 +156,7 @@ public class Preferences { try { // Name changed for 2.1b2 to avoid problems with users modifying or // replacing the file after doing a search for "preferences.txt". - load(Base.getLibStream("defaults.txt")); //$NON-NLS-1$ + load(Base.getLibStream(DEFAULTS_FILE)); } catch (Exception e) { Base.showError(null, "Could not read default settings.\n" + "You'll need to reinstall Processing.", e); diff --git a/build/shared/lib/defaults.txt b/build/shared/lib/defaults.txt index ea9c388d2..a7e5706a8 100644 --- a/build/shared/lib/defaults.txt +++ b/build/shared/lib/defaults.txt @@ -159,6 +159,9 @@ editor.divider.size = 0 # but keeps it from being annoyingly obtrusive editor.divider.size.windows = 2 +# Whether to automatically reload modified tabs +editor.watcher = true + # Hide the background image. Gross because this is a pref that # really lives over in theme.txt but it's split here. buttons.hide.image = false @@ -349,4 +352,4 @@ pdex.ccEnabled=true pdex.dbgOutput=false pdex.errorCheckEnabled=true pdex.warningsEnabled=true -pdex.writeErrorLogs=false \ No newline at end of file +pdex.writeErrorLogs=false diff --git a/todo.txt b/todo.txt index ad47ff5d9..b0075b6dc 100644 --- a/todo.txt +++ b/todo.txt @@ -1,5 +1,10 @@ 0230 pde (3.0a3) +pulls +X Add polling to detect file system changes +X https://github.com/processing/processing/issues/1939 +X https://github.com/processing/processing/pull/2628 + pending _ huge i18n patch From 654c64794d1a8147a179721a76d9a7d5cf9d10ff Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Thu, 31 Jul 2014 18:36:02 +0200 Subject: [PATCH 40/47] added new translations --- app/src/processing/app/Preferences.java | 11 ++++++----- app/src/processing/app/languages/PDE.properties | 6 ++++++ app/src/processing/app/languages/PDE_de.properties | 10 ++++++++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java index 06f4025a8..4f168aff7 100644 --- a/app/src/processing/app/Preferences.java +++ b/app/src/processing/app/Preferences.java @@ -371,7 +371,7 @@ public class Preferences { Container colorBox = Box.createHorizontalBox(); - label = new JLabel("Background color when Presenting: "); + label = new JLabel(Language.text("preferences.background_color")+": "); colorBox.add(label); final String colorTip = "" @@ -519,7 +519,8 @@ public class Preferences { // [ ] Continuously check for errors - PDE X errorCheckerBox = - new JCheckBox("Continuously check for errors"); + new JCheckBox(Language.text("preferences.continuously_check")); + pain.add(errorCheckerBox); d = errorCheckerBox.getPreferredSize(); errorCheckerBox.setBounds(left, top, d.width + 10, d.height); @@ -531,7 +532,7 @@ public class Preferences { // [ ] Show Warnings - PDE X warningsCheckerBox = - new JCheckBox("Show warnings"); + new JCheckBox(Language.text("preferences.show_warnings")); pain.add(warningsCheckerBox); d = warningsCheckerBox.getPreferredSize(); warningsCheckerBox.setBounds(warningLeft, top, d.width + 10, d.height); @@ -542,7 +543,7 @@ public class Preferences { // [ ] Enable Code Completion - PDE X codeCompletionBox = - new JCheckBox("Enable code completion"); + new JCheckBox(Language.text("preferences.code_completion")); pain.add(codeCompletionBox); d = codeCompletionBox.getPreferredSize(); codeCompletionBox.setBounds(left, top, d.width + 10, d.height); @@ -553,7 +554,7 @@ public class Preferences { final String modifier = Base.isMacOS() ? "\u2318" : "Ctrl"; codeCompletionTriggerBox = - new JCheckBox("Trigger with " + modifier + "-space"); + new JCheckBox(Language.text("preferences.trigger_with")+" " + modifier + "-"+Language.text("preferences.cmd_space")); pain.add(codeCompletionTriggerBox); d = codeCompletionTriggerBox.getPreferredSize(); codeCompletionTriggerBox.setBounds(toggleLeft, top, d.width + 10, d.height); diff --git a/app/src/processing/app/languages/PDE.properties b/app/src/processing/app/languages/PDE.properties index 9903f65a8..09414dada 100644 --- a/app/src/processing/app/languages/PDE.properties +++ b/app/src/processing/app/languages/PDE.properties @@ -121,9 +121,15 @@ preferences.language = Language preferences.editor_and_console_font = Editor and Console font preferences.editor_font_size = Editor font size preferences.console_font_size = Console font size +preferences.background_color = Background color when Presenting preferences.use_smooth_text = Use smooth text in editor window preferences.enable_complex_text_input = Enable complex text input preferences.enable_complex_text_input_example = i.e. Japanese +preferences.continuously_check = Continuously check for errors +preferences.show_warnings = Show warnings +preferences.code_completion = Code completion +preferences.trigger_with = Trigger with +preferences.cmd_space = space preferences.increase_max_memory = Increase maximum available memory to preferences.delete_previous_folder_on_export = Delete previous folder on export preferences.hide_toolbar_background_image = Hide tab/toolbar background image diff --git a/app/src/processing/app/languages/PDE_de.properties b/app/src/processing/app/languages/PDE_de.properties index 2b4bdbd84..ce5aeb197 100644 --- a/app/src/processing/app/languages/PDE_de.properties +++ b/app/src/processing/app/languages/PDE_de.properties @@ -113,12 +113,18 @@ preferences.button.width = 110 preferences.requires_restart = nach Neustart von Processing aktiv preferences.sketchbook_location = Sketchbook Pfad preferences.language = Sprache -preferences.editor_and_console_font = Editor und Console Schriftart +preferences.editor_and_console_font = Editor und Konsolen Schriftart preferences.editor_font_size = Editor Schriftgröße -preferences.console_font_size = Console Schriftgröße +preferences.console_font_size = Konsolen Schriftgröße +preferences.background_color = Hintergrundfarbe im Present Modus preferences.use_smooth_text = Editor Textglättung preferences.enable_complex_text_input = Komplexe Sprachen erlauben preferences.enable_complex_text_input_example = z.B. Japanisch +preferences.continuously_check = Kontinuierliche Fehlererkennung +preferences.show_warnings = Zeige Warnungen +preferences.code_completion = Codevervollständigung +preferences.trigger_with = Trigger mit +preferences.cmd_space = Leerzeichen preferences.increase_max_memory = Maximalen Speicher erhöhen auf preferences.delete_previous_folder_on_export = Leere Verzeichnis beim Exportieren preferences.hide_toolbar_background_image = Hintergrundgrafik der Toolbar ausblenden From 0ceea7d6254eaa74cbb0f5be2320920dbb3b12f9 Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Thu, 31 Jul 2014 18:40:32 +0200 Subject: [PATCH 41/47] removed experimental dir --- .../mode/experimental/ArrayFieldNode.class | Bin 1545 -> 0 bytes .../mode/experimental/ClassLoadListener.class | Bin 199 -> 0 bytes .../mode/experimental/Compiler$1.class | Bin 932 -> 0 bytes .../mode/experimental/Compiler.class | Bin 7441 -> 0 bytes .../mode/experimental/DebugBuild.class | Bin 1261 -> 0 bytes .../mode/experimental/DebugEditor$1.class | Bin 825 -> 0 bytes .../mode/experimental/DebugEditor$2.class | Bin 829 -> 0 bytes .../mode/experimental/DebugEditor$3.class | Bin 826 -> 0 bytes .../mode/experimental/DebugEditor$4.class | Bin 2400 -> 0 bytes .../mode/experimental/DebugEditor$5.class | Bin 1454 -> 0 bytes .../mode/experimental/DebugEditor$6.class | Bin 1135 -> 0 bytes .../mode/experimental/DebugEditor$7.class | Bin 1113 -> 0 bytes .../mode/experimental/DebugEditor.class | Bin 24770 -> 0 bytes .../mode/experimental/DebugRunner.class | Bin 1777 -> 0 bytes .../mode/experimental/DebugToolbar.class | Bin 4524 -> 0 bytes .../mode/experimental/Debugger$1.class | Bin 1176 -> 0 bytes .../mode/experimental/Debugger$2.class | Bin 1176 -> 0 bytes .../mode/experimental/Debugger$3.class | Bin 1823 -> 0 bytes .../mode/experimental/Debugger.class | Bin 30343 -> 0 bytes .../mode/experimental/ErrorBar$1.class | Bin 3015 -> 0 bytes .../mode/experimental/ErrorBar$2$1.class | Bin 2665 -> 0 bytes .../mode/experimental/ErrorBar$2.class | Bin 1657 -> 0 bytes .../mode/experimental/ErrorBar$3$1.class | Bin 3113 -> 0 bytes .../mode/experimental/ErrorBar$3.class | Bin 1784 -> 0 bytes .../mode/experimental/ErrorBar.class | Bin 4987 -> 0 bytes .../experimental/ErrorCheckerService$1.class | Bin 1744 -> 0 bytes .../experimental/ErrorCheckerService$2.class | Bin 1007 -> 0 bytes .../experimental/ErrorCheckerService.class | Bin 23602 -> 0 bytes .../mode/experimental/ErrorMarker.class | Bin 628 -> 0 bytes .../mode/experimental/ErrorWindow$1.class | Bin 1287 -> 0 bytes .../mode/experimental/ErrorWindow$2.class | Bin 1140 -> 0 bytes .../mode/experimental/ErrorWindow$3.class | Bin 1418 -> 0 bytes .../mode/experimental/ErrorWindow$4.class | Bin 1443 -> 0 bytes .../ErrorWindow$DockTool2Base.class | Bin 2869 -> 0 bytes .../mode/experimental/ErrorWindow.class | Bin 4003 -> 0 bytes .../mode/experimental/ExperimentalMode.class | Bin 4802 -> 0 bytes .../mode/experimental/FieldNode.class | Bin 1585 -> 0 bytes .../mode/experimental/ImportStatement.class | Bin 526 -> 0 bytes .../mode/experimental/LineBreakpoint.class | Bin 5768 -> 0 bytes .../mode/experimental/LineHighlight.class | Bin 4258 -> 0 bytes .../processing/mode/experimental/LineID.class | Bin 4977 -> 0 bytes .../mode/experimental/LineListener.class | Bin 201 -> 0 bytes .../mode/experimental/LocalVariableNode.class | Bin 1618 -> 0 bytes .../mode/experimental/Problem.class | Bin 3124 -> 0 bytes .../experimental/TextArea$MouseHandler.class | Bin 2884 -> 0 bytes .../mode/experimental/TextArea.class | Bin 7492 -> 0 bytes .../mode/experimental/TextAreaPainter.class | Bin 7507 -> 0 bytes .../mode/experimental/VMEventListener.class | Bin 192 -> 0 bytes .../mode/experimental/VMEventReader.class | Bin 1701 -> 0 bytes .../experimental/VariableInspector$1.class | Bin 726 -> 0 bytes .../VariableInspector$ExpansionHandler.class | Bin 3252 -> 0 bytes ...riableInspector$LocalHidesThisFilter.class | Bin 2037 -> 0 bytes .../VariableInspector$OutlineRenderer.class | Bin 5228 -> 0 bytes .../VariableInspector$P5BuiltinsFilter.class | Bin 1543 -> 0 bytes .../VariableInspector$ThisFilter.class | Bin 1082 -> 0 bytes .../VariableInspector$ValueCellEditor.class | Bin 1367 -> 0 bytes .../VariableInspector$ValueCellRenderer.class | Bin 2126 -> 0 bytes ...VariableInspector$VariableNodeFilter.class | Bin 333 -> 0 bytes .../VariableInspector$VariableRowModel.class | Bin 4473 -> 0 bytes .../mode/experimental/VariableInspector.class | Bin 11029 -> 0 bytes .../mode/experimental/VariableInspector.form | 53 ------------------ .../mode/experimental/VariableNode.class | Bin 7225 -> 0 bytes .../mode/experimental/XQConsoleToggle.class | Bin 3551 -> 0 bytes .../mode/experimental/XQErrorTable$1.class | Bin 1630 -> 0 bytes .../mode/experimental/XQErrorTable$2.class | Bin 1491 -> 0 bytes .../mode/experimental/XQErrorTable$3.class | Bin 2062 -> 0 bytes .../mode/experimental/XQErrorTable.class | Bin 3005 -> 0 bytes .../XQPreprocessor$XQASTVisitor.class | Bin 2947 -> 0 bytes .../mode/experimental/XQPreprocessor.class | Bin 5212 -> 0 bytes 69 files changed, 53 deletions(-) delete mode 100644 experimental/bin/processing/mode/experimental/ArrayFieldNode.class delete mode 100644 experimental/bin/processing/mode/experimental/ClassLoadListener.class delete mode 100644 experimental/bin/processing/mode/experimental/Compiler$1.class delete mode 100644 experimental/bin/processing/mode/experimental/Compiler.class delete mode 100644 experimental/bin/processing/mode/experimental/DebugBuild.class delete mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$1.class delete mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$2.class delete mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$3.class delete mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$4.class delete mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$5.class delete mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$6.class delete mode 100644 experimental/bin/processing/mode/experimental/DebugEditor$7.class delete mode 100644 experimental/bin/processing/mode/experimental/DebugEditor.class delete mode 100644 experimental/bin/processing/mode/experimental/DebugRunner.class delete mode 100644 experimental/bin/processing/mode/experimental/DebugToolbar.class delete mode 100644 experimental/bin/processing/mode/experimental/Debugger$1.class delete mode 100644 experimental/bin/processing/mode/experimental/Debugger$2.class delete mode 100644 experimental/bin/processing/mode/experimental/Debugger$3.class delete mode 100644 experimental/bin/processing/mode/experimental/Debugger.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorBar$1.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorBar$2$1.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorBar$2.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorBar$3$1.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorBar$3.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorBar.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorCheckerService$1.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorCheckerService$2.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorCheckerService.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorMarker.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow$1.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow$2.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow$3.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow$4.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow$DockTool2Base.class delete mode 100644 experimental/bin/processing/mode/experimental/ErrorWindow.class delete mode 100644 experimental/bin/processing/mode/experimental/ExperimentalMode.class delete mode 100644 experimental/bin/processing/mode/experimental/FieldNode.class delete mode 100644 experimental/bin/processing/mode/experimental/ImportStatement.class delete mode 100644 experimental/bin/processing/mode/experimental/LineBreakpoint.class delete mode 100644 experimental/bin/processing/mode/experimental/LineHighlight.class delete mode 100644 experimental/bin/processing/mode/experimental/LineID.class delete mode 100644 experimental/bin/processing/mode/experimental/LineListener.class delete mode 100644 experimental/bin/processing/mode/experimental/LocalVariableNode.class delete mode 100644 experimental/bin/processing/mode/experimental/Problem.class delete mode 100644 experimental/bin/processing/mode/experimental/TextArea$MouseHandler.class delete mode 100644 experimental/bin/processing/mode/experimental/TextArea.class delete mode 100644 experimental/bin/processing/mode/experimental/TextAreaPainter.class delete mode 100644 experimental/bin/processing/mode/experimental/VMEventListener.class delete mode 100644 experimental/bin/processing/mode/experimental/VMEventReader.class delete mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$1.class delete mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$ExpansionHandler.class delete mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$LocalHidesThisFilter.class delete mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$OutlineRenderer.class delete mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$P5BuiltinsFilter.class delete mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$ThisFilter.class delete mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$ValueCellEditor.class delete mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$ValueCellRenderer.class delete mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$VariableNodeFilter.class delete mode 100644 experimental/bin/processing/mode/experimental/VariableInspector$VariableRowModel.class delete mode 100644 experimental/bin/processing/mode/experimental/VariableInspector.class delete mode 100755 experimental/bin/processing/mode/experimental/VariableInspector.form delete mode 100644 experimental/bin/processing/mode/experimental/VariableNode.class delete mode 100644 experimental/bin/processing/mode/experimental/XQConsoleToggle.class delete mode 100644 experimental/bin/processing/mode/experimental/XQErrorTable$1.class delete mode 100644 experimental/bin/processing/mode/experimental/XQErrorTable$2.class delete mode 100644 experimental/bin/processing/mode/experimental/XQErrorTable$3.class delete mode 100644 experimental/bin/processing/mode/experimental/XQErrorTable.class delete mode 100644 experimental/bin/processing/mode/experimental/XQPreprocessor$XQASTVisitor.class delete mode 100644 experimental/bin/processing/mode/experimental/XQPreprocessor.class diff --git a/experimental/bin/processing/mode/experimental/ArrayFieldNode.class b/experimental/bin/processing/mode/experimental/ArrayFieldNode.class deleted file mode 100644 index d810c99f65f3d4d566f2002137f0bd181f942ee6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1545 zcmbVM+fEZv6kVqmhL+*hmaC{-1bYE0h$u`!u$H7rX(A={d1#Mia5~dWrwEDv!!ri( zlIREcQO13y729;=!57%G_d4sWz4ku+`Rm&c0ISGI@GvB5mRaKUx@J_8RkO^K{H(?; zt;!8s)swrHrJnC;TrcOTCc(!LyYoO%wKVle=K{{)SH*dTsa(mdChH9&c~aJzqzC*R zx42Q_3c)m^%+DBDmZ2x58JfM#@HUz|QBT#Ru9C8XZIM95CDTq^RP_c|?z$@*D>C@f zBrXUq`eg(#z_9thSH+3}Fbv7?qeny`84`LK26LLh^Ns2ew+@9HRLPkoRsZ8oE9tY3 zwK~I6?oLZPXFzuO47KV|cKJg!`@ANMKNVImggeY=`oqv$=e83wj7D7$v0@({Vn)I= z!(_X`j+EQU$(X_{!&o%y$`QmPEJ&CqJN^ny>uS9&<1wNPQia=jrJAKH*8H$>Sm=PRy9Zexg}!>%M1Y`Y9<(#U1r%LcOg&$c!E_4E7XR|CH$1@GM-|M z_Og&EW)3n86HTR^WCExN!Rs=f;{}74gfgUCVqC!8{kCNek1g|qSRAFfVVg20aZf^u zVY+=DS%c=Rl@Dp=nX?kF*_vrcpvN=Uj&eNDn`Dt%=H*);gGW5N*^c44G1AJ-cYyvu zNVxujt(M;JtF_jK2McDyD)Bu{yn%4%CNB%aF+g+OP?XfCw$i!jF0%QF?{Ku!}K>qC}4#cR?$y`3u6rt%4|2!Vg#e~MJyP@ zI5CT8f+CL-k;jgfh@(U>MI0@DLQdg+OUZY-LnuzguSmcZh7(`$z>5n+_e1Okb6*hq zgd|(M!LtiQx^nTvH8w7t8wW59g_s5~k1gU99Xy~Lfep%SQa1`!QdpqsI$qM(j?+!t r=`wZOO-gJBsS9CrE;6%F=y&|?gc;84+3KF)42$rUl2d{qvW%Pw& diff --git a/experimental/bin/processing/mode/experimental/ClassLoadListener.class b/experimental/bin/processing/mode/experimental/ClassLoadListener.class deleted file mode 100644 index 7bc9c8c57873c98c599e5ceee26402a076151f12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmZXOy$ZrG6ot>N+WNCNIXdgofUBe6R1j3$V{(<0HYrIf`f3h7fDa|MgOkhQ4CmuJ z@6YoEV1-eFh>%v^DGtHdt05nKQHBzJK`&;4Ydj3WS~5L<5;5Dtz6VL_^tEzY)ixrJ~lpQK>Y9%CXQjX-s4uW}}hytaS4jEf{YvH4HmF z*(H?jt5Bs62&?tef`T5wX>%F#AT0QpL&-xCi#}YG3B|e%sB~2*pJkK2G|xp}OG339 z4TSCqqwId>bkea(2toIZ3c13$w^kRytsk~KouKDo87nR>6P8a_<>LyjvN93JG8_^% zrirJ?V+H+eL?|4#*^EYPQim-qLna^TEE)4U&{4ugczaQ12J#8_pRo9I61Qz3+=IuV z4deDcmFYMdy0}T$K9f=(bp)(&Fr6*oR{h^CdL;W9Pf_XNZg4>GJ7FkITZ<%-2{w69 zMZQn8RJGG$%i+((Irh)9bq@u80k6^g$iL6<-}A13iuL6utQZGa;=Ru~)_WdRUI`a) zafb4OQ7x|D_yDiDw*Cp1_W#Cti3PmMaT?Ru8IHwW#afQ-V;vhgtB-4J71_Iq@{FaK tvoiB<=u)0`^hbI0tGw&~PZTF47O}-V1>8W5R|nhJL4z%isjPl}egM$#y*dB@ diff --git a/experimental/bin/processing/mode/experimental/Compiler.class b/experimental/bin/processing/mode/experimental/Compiler.class deleted file mode 100644 index a14e4885af94892f9dc319a4101f05886cfb3ed1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7441 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 diff --git a/experimental/bin/processing/mode/experimental/DebugBuild.class b/experimental/bin/processing/mode/experimental/DebugBuild.class deleted file mode 100644 index 4a663d33e293aebd6b8c11a5749cce392e4a79f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1261 zcmah|ZBNr+6g?LTg;79Jz@dP^5Y_<&L{Vn&WrB$re3`+7Z(Vr;m9A~t&Jh2Ji9Z4p zQR4^WXMdA1-sdU8HVm#w*ZcI`d(J)g_UG?!-vKORO-CDHCX50{#Ift|TeVsyGY3$i-R3(YnFD{?iIC4aoxPc$*xZZ5g zImsEQ8-yVP!?;1{jw5F?@b*MR=xgSZun_|{6|Cy|DJ;XMqXxz>&b(nHPW>fJwFv*0 z)C?vtrDKvX-7uGn=9Pk4$jwIva+oIQP8t*Dng)6?@qAN?`CZw-jDcC?dA8{UN}e6Z z+jdROR{7lQWKZnA6R+*aXJZMp%ceMgQ#OOT&jaeMB(`(7Wru1VbXbHdt(92vzDTxs zzvMvwvnd-5t1eTDQukd0E4ar?Dtjahw(gAr>R2VrU+QFQaUNPFs7H>F%f+^w8@3>u z;Q0`L5%Sm0PyAW%UFT>WZF~WpX5kCEKJrr=GJMad(+NgSqKD(56a@pl95Eh!=;s=2 z60Y*Q0Y1|>x~8grV3rO($(e-{44QK%$eM-G&$zXwnO|}HJq$Ceo#0MZJEmjCwJXjs zmAlB9OB}Cq&Bw^%3C8i1Rg{#Dm9*}ej+|U~=4CFq(Mn|wCJJ10fUh~^S=T(j?*je8 qq>cqfFET^g|1$r}>@M>YmVe;BRFgU&9Rgk`RwKonvJxIB)Wbht@G*h_ diff --git a/experimental/bin/processing/mode/experimental/DebugEditor$1.class b/experimental/bin/processing/mode/experimental/DebugEditor$1.class deleted file mode 100644 index bd9e889f20234a3e90d0f531305396c2fb33ee71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 825 zcma)4+iuf95IvKGx-o{hr7gFXatV?XE~Y#o6(LXw638uxqP(x|q1ocBD_`3F77`bU z2R?w0Ld=>xAcRmXt#;>l&diz1kDuSZ19*tr4qAlaQIRKHmf9SI(>&#nPmj3JQ#O^# z!si^<2cuM1dC}i;&>{GT>R5%D68G2fAt#lC1;R#ys*@_@V_}BRl1k?$(q+Yl3&KJ* z(PjUEq>JXww=Jy4+UV*D;a)I5Z7?QucBGOn24U%pBGb337bLm&jyWbv$h9g7ng9w z!DT`)Z+kpkwdHgt%A^^;tqp;sjP?H|BDni`T_pTM+mii1rhDJ&6X_$9WVv02U9Kj1 z>ft7C2^`ltOZPu;l}vWo)P&Vw&}2Fd%M-gguPiLJdoPU)d?!<7$tAAK2-5U9Hz`e+!9= z!~-9|MH79Ll z9=)WbI-F$67G^N^&=LraK@Phbw7AV9kez)ef5I`e-8%Xok+A8!Jt3t9e4^ zolJ5PSdWWT=2K~uvln2?$rgC9boRlRWp`y={XUuZg_%<(uocGtY|z9tYkN5D;2N%b z*c1qtZI6!|uAH@*)LBmZhDr`4Ah?v?|B?xG4vNa8^h&w1gFhzx$Z2Hx6P@OTTZmn< zvm*0x2X`4xDwSskAIPS&UDB1nm2g;RI*ZCvw?1zi%=P=PH4l9!mt{#MZt)nJe9l1x zftv;|UxQB@9Y)Xd>j~Qq>5T4whClj>3m**Fk5V5oo$~v4!wlSe6t2@ETTN; z+eKL&eS-f5SO1D3dhkTQj9X?o3j%}7 Ai~s-t diff --git a/experimental/bin/processing/mode/experimental/DebugEditor$3.class b/experimental/bin/processing/mode/experimental/DebugEditor$3.class deleted file mode 100644 index bdb47ccb88a90f5b7cf0d9ea0a5a2afe588bb5c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcma)4+iuf95IviOx-o{B0_E0H+PabxE=KePsR)5ekU(xh3d;N19-1xAIRh805(X_}YqO%#5YD(J3 zJbFP%eKgFJDav5iK}WzpmM1dGCA+^#jwv+`mIT%tRGylMPM8@zPmL;ctSUpAN`WOa zQC0Ae)5VMC+hf)frImRqa6ep})*lOW_PLTS1TJ`Ruarvi2P8SlI&i7S0~*vh1F0s((x6`=XpuCa@94|7_6EHfygxc5xjy z9o!HI7j2J+Teci`B6XJ2$P_aH!F8hcrLr~qe~kBm70B9$I?W5a4F_Z< zMdo1(+YBeQ%Cpf2GU?=ibS-c->^GUtqUzM{&T9*E@!l)V6W`BeRZ)dIJcBl$a}d67 zN5Pxd;?sr8=y`rUX4@j};O=L5gRi*wvGKWNvE~o6#U@tR_LyVQ%ecZfYryI}$}_%g zl;y!EcwcbsuNWeLBX*h?tH1r`F_?ihtTVff+stoagEa#k9>^vFep#J1D}TQLo4m?s diff --git a/experimental/bin/processing/mode/experimental/DebugEditor$4.class b/experimental/bin/processing/mode/experimental/DebugEditor$4.class deleted file mode 100644 index 5601253fb5c0d983c6380f1fafb284e6d43370f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2400 zcma)7YjYD-7=BJ$y3KNGL%9?XBuatwx)sri;bL1_rKT56ErQoga%i^Q?1sIh355dU z1@#~J#gEL$C!Ml5I^+1+zvPVLdv@27PA}8UWcKWy_q>85r?+4QScPB zG8_-T>dT%cs&rBtDR_o$WewL8mT(way^`T}4^g=6ZsTPbUa0D3w>%kTKyEG=mf>Au zxR&0%pWR#b%rmr%5eNxTa1I4+a+TyrpiMx*)35XmxyP2=2g6i;|h*3 z9NpfI<0YJ6NGu31XZucpl0J~`i5xdHHKX9=xT`hIU6$mS94m>!(x_dV5|)3}6J-@C zoaE@nDF)SWbHXGx$V3U98ws32kAgHqdbbVd=tUpHe&IN_69yAbPB>LVCV6&e^u{-z z$*35BreKg^XvY+`ILk34+q}1;`>vQPIYKWcXkusrUfVDMxjGTN%<($jpt5b>V>lRL zY1rDVV_06!qr+u_^G$}X=c7ZP3DZ&EFpI)b39Gj_GPn>oW=VL362lQ{Ohe{+rK07+ zEh_C2-d1p#!fk25F@jMBg}OYgmpAn|icVgxU_!z8#*)I!INrg#7)3sSN8O!%PC7Ls#$x!>NYmY=3|wj{=b`j5KRg3Zxb>jeO5AwGqeB>rzXp zHh~2N)Q_l)joTb0$=W>yQ|L~D*uTiJBwcgLgY>BEN+)tGh_aS6P5PCh?ujtDEQ zZ{Jh2_x3-f)idn-B{Vz`n#uzt%*?_;T5(#FIS!#K{C*fmB3G;rEur%#eF2XCg;ao7 zeuUS%hW0g_4$%KAUi|~Z*Xct?fb#(^{)VwYwqHg15I7QLn3yh(d;Y((w!B1Ux9T&Qmw0FQ?Fh(Or ze+ULK@q_W3i9gDCZnr3j2y4>x-qZ8?oadaMzrKD0kjA2h7KY@y=UUwNg;PmY-7-({ zt#$5+DtDx5r{;O7R>_rxbiI)&4Pl1Zs<~mNY?IUj8M?UVxn6dKTWj1aaBo9cR80EtgmeGeWFk0= zAq|5JlZU2ofUSXZ7-nb-Qh6qvvb%X?qXRc}-HeVAT-0!Zq3{1F8MuTvL!`oG!L50! z%IBt>HQ`=uk|bKgqg|?-K3YO2y^|Zr~=7 zSn@4N9e%N|$b$5!BtongGX`#fWf?AhOBM+KKC(1!y2OZ7+5T(W|me|3%wEOByFS9G~Ja%PmX?uk^F+_PM~u_$$~#* z&0e9C?grT?X&1WbOF5vY;pH_&QC`x?T^PGKwTpot2=Dy8jqc(6cO>>ehm;b3!c-`| zhm49Af{He*vSV-1&fX%*-l3Om)7-qL8Q3Nge<1FB46^8{M`~oDR_-0#r95T>Pb^CA Y=IGdhEavGOrl#g_pH8Y|RRBG|0bYBEPXGV_ diff --git a/experimental/bin/processing/mode/experimental/DebugEditor$6.class b/experimental/bin/processing/mode/experimental/DebugEditor$6.class deleted file mode 100644 index 1020dc4d75a2347f1a621a6cf572c6c6fdbfcc2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1135 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 diff --git a/experimental/bin/processing/mode/experimental/DebugRunner.class b/experimental/bin/processing/mode/experimental/DebugRunner.class deleted file mode 100644 index 44b0e4c33af1c1c48ed2ac1099763778267b723d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1777 zcma)6ZFdtz7`>CU-8L*GlvWUhMg&aK$|@=-fr>2!+9pt&8ijA$?VM&I+0B{ka_YbE ztN%hhlAa^y_yhb=9`4L;ldV+r%kI3~=gxEQJkR{~_aA=(xQ-tzaVNpJ!axBbA6mIRi|^<(kt z3|fx;&TcKc@Ai5rMcwa5l1J7mErG)7z9)N;9|nC3Qvw$=lscsOTt;4d2oe}up^O6Z zux*TELf};059Fh`yCc=MyVH>ZGxgAOJ1tlFdY&$hMQy(?P|fD_R!3?A<2zc0Ko987b*@Y0!N6ZL#{w zPBtUgd){z+##swj1S*+ZGp1$>r@{Jj_hi%WwZlNC`jL$?Dgss-C2*#00y-|sbTg?~ zieJFT78V6gzp-iK8XSS?JsGVk6{;kAfwT0}fc?-}3wm)Xi(HrSsjipn0;}a?A=yj& zHwi1O(zt6XS2KQY;|tsnm|_~+ZTiPjnLW(FXh~LUTJ)DTzQQenrBa9BnT+fdYT@?L zuGIx3_oe3~8n@E>O5l@V9~N7UQW!^6Thcj5rJcKL6%^mKbM!(AG^BH3}fZV`@ViFikUa? znzn>}L2f>wz!*n-VvvKC&L&adXpQ?CVO19v4{+jF4s$rkZ-IZ{3PY}9nxj$z!zmOw zV*pNLhNOCQ2D3!dX}rU)rrk7iV6K`U;Ox&hQLX-t_Xe2Pzh4N*n?t4z=`Bp6M%p{( zAls16r3Zazu%bu-Z1R--CuXISUV4SgPsn(6fNJ#spERnA1AO)pH>$rSMb=kO2?ZMlJUCbW^!zBJUnq@O3|Qe^9H<2$4E g!ce=z9qr3F&oNpPLnq8)Gox`lB@}28p2PRA0aOscRR910 diff --git a/experimental/bin/processing/mode/experimental/DebugToolbar.class b/experimental/bin/processing/mode/experimental/DebugToolbar.class deleted file mode 100644 index 0e43e41ccc5a1e1e97565c794aaaa4e23aba7ec4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4524 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 diff --git a/experimental/bin/processing/mode/experimental/Debugger$1.class b/experimental/bin/processing/mode/experimental/Debugger$1.class deleted file mode 100644 index 9fb972059add4f2b00967c8d421e67ece84c944a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1176 zcma)6U31bv6g`_Dku-&f^|RJir8cC{6h9wOUuZkSh(&Fu?;)%-Oh`KUK>wCAEzbDh z5Aa7h-i2W63y_&)_wJs1&)swH=J%hUzW_YLYXuU+)>#-hJc?YuXAOcbxA?a+9=ZeW z$F^tf@lMj~@vu}=kYUjK_RzLGo3QOppF6RFEJN{f^>gC;cE{rk+4$6rO1nhRT8N=e zafY^6^7+?B5{5+Ia(#-kIon-;ntSA&edGFW{Ene*%=VZbsXiN)1}>j4WE!MP4h#hi z3a*RU4GlS{DrDT$u!I!`*$~iza63!}9UdM}bSSn0$M#O_&=q#Nm=WSIlxL?f&9qdb z^T}c2=dg-31rJD-g*4Uh5bGoj@49giGMEeS?T@i_6_4;l!D9wvKGnoWLkXJ<`H08= zRnVAIkbg=G&MgfF$_z>z1YXCcq^rgvG96Fgl=n8O3MwS-{Jc{q4Lh(H)GoK3*d5w2 zwOz(&ih8O?K@vLrz!fdMJT1tMXm~32zVCQ}xH%tqd>V8$yueFJeK^=3QvWin8!aao zSW)6z{jO_qv1*O?j(A)b@wKM!^RVIBQN$x`P-n^XUW26TqSXMsC>o9Kt3>Y-G}>LJ z*;}$@8Vlz31@dO)0=oGF#qVR_E&8fs2ReZC9=FLBjs(XY+@+D>9#+y&4k5)})jUW3 z9QSF^N7zWM5uWN_Mli3KoXkt2A~KZRA@WiiYtlzlq)%4}t0|$3U80asqyG-bV-?Tw Mie@TN3vzn?0!LjnivR!s diff --git a/experimental/bin/processing/mode/experimental/Debugger$2.class b/experimental/bin/processing/mode/experimental/Debugger$2.class deleted file mode 100644 index 11bb9aca448cf3cdafa881e7a4d004eb6fc76062..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1176 zcma)6+iuf95It*$n7D3YLb;aG0x5Oeq%Pt15a1;ZQlvm7TJ_y=mej$Q%9p@zA+Ok`ItS#Of8z#j@{ZxqnC~$=Qgc2m3tT;6$hAn90vJjf z6kHdx8yX5wRmixhVFhapvLT=);r220dptUx>QL^6j_sY;kt^(MF(<@fsLoGemT9Fy z=aZu}C}15M3LcOuOKGa%AvQ@G-glEQVlbEBYfrFE6_4;l!D9wvG1b&ZLj~Im#h54m zRnS;akbg=G&K(T~stigJhF;I6r0d2qG96Fhl=m*`3Th9<@9>j(LnN>MWVwYmjtZv>Kq7MWfMumFQi8M!Tyt zdrP)VW69jTK+&vSKsSG&{CxtvMPGH|KnIWpxJ|ZjBslKiE{zQLu$F~#2r2gJ<~fSz zxKD#V##UyH@l^jjhIz&0WL^@Lk)z~>C`wTRIFKuiNPPwr=QO z`Z{oW+KZIi*wA}%x2uEd%^WfU#RD}^4Ofxw!@UD-MLA>zN{8H?*z?q$s|B*rz7tkg zDM0H#MQD=AK)Ka{Bd|K#q@x0dgKT+WpK|a6vOUSRVWh05?Lb)+zt~E$iX+Euw45*^ zodWB)zNOqyV399Y90XKoi+GXadsIqll~lMJ1q8~(HNXxAoN$+pbcRy_)Jj<2@1 zToq`$J*Ahu?RZXfN8m+mc107Io3qu97XEUP$KR*R`TrXAjzDIeMq?fVuS(>Q=Tli? z9tA$VCh-a+pI(<(NKbD_oWv>SU6LrKyf-CIr@Si?CCCB{T$NZvO~9yem{Tps)7x=x zPY3OEj7r=acT)J6nPKb&>a)?BfLgstJv4&Y%cDU;95i@Or**bvA^ewvWLnOgmb z3F)q3Q{q!bK&A+!+2*lD39P#+3@Ph1+?QyvQZZFJTnrX&OFU%Z`Bb=ZWP4cYk;D!U zM>h6cKkZjr;xV&w0liEF7-6;R$AP6c9e#BdCQV;qc&SDAJj?a@aeJVnec#UEYwFU> zZcjW&e2ed>PicZjWwNB^YhNwIX3=UHxfo(>X7bchOV zgF)XD$QO&eMnJK|OO#Mrp@h-`C6v}Dp|m^+rPWC&Ee<{3bM#%r8S-|PPCwFpo*#8{ zd5Cl7wIR-%*N3=ZmNP?KG|MN3STf7mAu47$H^gPLoFAfUKF3?XCcf(QTS$D; bVW2~K&*4jaMKpsa_y*t8sX+B`MfCX_Cf?hS diff --git a/experimental/bin/processing/mode/experimental/Debugger.class b/experimental/bin/processing/mode/experimental/Debugger.class deleted file mode 100644 index 37f813aa122b6b056e79d8a30b5c7bd6266f7dcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30343 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 F{{!9|tH}TW diff --git a/experimental/bin/processing/mode/experimental/ErrorBar$1.class b/experimental/bin/processing/mode/experimental/ErrorBar$1.class deleted file mode 100644 index fc02ee6e8f14856284ee24af6b41f74644fefc68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3015 zcma)8TU1n482Ly?7|t2bIiq0rGP>A3 zyI@votL4hFw54O(TH0!5t+Jka_NB+(dh8|o_L+eO^TMo|v-kP;f7{=Gn_vDpe*wU9 z99G~FSeUTPh;G|4qc=2YM)i)!~{h0pD8QITr#2D*On@-7P8<5tdoJ+mDJ+0V6tszGDF&~$9fg_;y(IH+w06o zQWmp-G@M<(jy~js#*Z8Ga6eiVJU|Gp%cNoh+S0*l)s0?Ugqa05E&RE3Fh)~P|n6zsZL-MHO& zgC;w!bi!8Q$c*r6(Wo@DTg4s>F$R5_-R8!C(b=M4uYl~c*YENh(@i)R!+2c96A1ER zj@A=4qWX{|KBeMmNesp(`d*OaXH`7s+G9ybkb_9zdD$pO1Qy+-HD^pVGDo_C1o}l4 zFG=VXOHXKw6^%J2Cr~B_f{}Cyv9k(z?1;du8`L$&1dBg2P$oA;_Rhedi{MQ=TNc`s zQi!0OR00dKE&qRHj^B(<4D+{MV49nm8?=Nw7ZkiNP=2Gf#JhKxNh_kSkIC6G&2@xB zc!^9PW_ybfiJNj@Z_u4SGpgc4e8jPpOhh$DcbU`aE-)k0A|_{fqnu%C*f4Z!ZCtZ$ z-NqbFJ1_qgcnb^V7z7H7$42o*c zV)`l4Jt*Zf$Q6_*z$j*LC#5NaGR)-a!z`4Oqr%;@S-YASlSguS#7X&d^#okXp)4Jq z2_17#!c+R>`I&yxV^QgC@~*5sjr`M?o5I2r>be^O7wY}qdfzd$mj#M_%iHRTZcpLP zQ8Z-pHP)qY&nOmfY4OU(Iq=`cIkbE64LW=~nvS8gK`B#G=-%fM`+TCQ3Xa^22E2 z`sB#05o3kF)KAu;!h+~X{|dR~Eu-He(Op;S-%st&j6$JlpZ_fOO|o@D@}}^@DWbI) z-PlIFy)L>Vm`kJ&6YC?4$x+P1C*=5)gXlA?!*R6WbF^{o;CmPMo4I!53u^e1E%qz6 z%&*xbkFxkv*o(6`K(r2XJ&yA@jf=QU0Di~!xPl+>CobV{{3v|*N#x*?P;pU|;8#(B z-`wbKN=GmgU5_Zo%giEnNHG)p-F%wIDfkLrrSIFBsjuO6=IH@u)*E<}w98n7x9~Q1 zR}doo9rC=(+nqq(7!yrVAO!PED0mMT!>SBLL4BIWgUY}dg|6ldz?+t()C~C3dxcFG zC9}uqQoyAs7$(gl&v)eDFMdf8V{~BhIp4C*$q<;NlJ1YX$$tT}mNhoA- G@bfRi0S1r& diff --git a/experimental/bin/processing/mode/experimental/ErrorBar$2$1.class b/experimental/bin/processing/mode/experimental/ErrorBar$2$1.class deleted file mode 100644 index 2e9331c51fd3d9dee26240974572e222fff7d8be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcma)8S#uOs6#i~z>CEJkWk`S!6IlkxCIbiRa*GUi?8}We4;GkcY8uIDM^^F%G~8F_blHzCl4Rr{~bUN zJ~dD!&@t&cS><__J(`+uaw?@}CY5VVDBCylsR7q@+#{x&>`Cr65EfW})toYCQr@)Y zAJV_)9d}&00#Sd=@{+r$F;k(+K7q)TnNKQ#mW;g9cUM*Q5u0~9Lx3@+@?}&3ci(39d=#wddBknzBoG3ZJ_H( zSeBC|UcgRzXZgxCeTPV0_aw#vV|wAfuLir&V}J-w1kqham3R>w7-3t@_y%4QXn(dB zgQl*GIQHTd11}3SuZVGpePEWuqsqS!z%Cub9vqN3h(iM6I{(tz%fk{!&@W(Ec23Ql zewPtx|36$hD4oQB#4#La@u-{?xZSxrGLNc}!stN2%ZR3N(!guaaKI@zBgcJ^NyaCgUTOsauT257V|Wrr&WL6 zB4n5yf^Ef0@6!`Srfplf{dv>#l!r~6Jt0oys``38ih%lr9z?v+w=u*?ui@?hs)C!k z&aQiqo!$3P+xau$rxo9vjHf9P9-)21>ihqq(ZY zkNP*z6V*3@8Q@JxN7bT^=a3+k=7@i2j5hM`&N;|m&^m{$MRW|_#UI_jA|>zudom=| z7SY=^hy9V<9o#KHUoozHi_e#YyNY=A;NtOU5hs=%ia1rox!!PVZzR+ky^Fnz)Hmnw zc2l$n^8wU8quH3lXjAwbL}w#n;qWym&@vkpP0?jiMO?ize}Cz!DN@7)t-mJl<@|mf z*iaCVDYVkz2nTO9r%a5!JdOjRhTT=-B-f0n!v)d6!b`vs^~m#Vi$>~MhiS0^v!WTF zalI`z;tSD&uS6@p6K(ijtj7=JxzF`Ct`Ed!JQQ2-C*S%@Y!4D}f>>aX7ZT8dITSF( z6l8D<(>O#6ZJ3zhE{toqjO*M*;FErXyC`lm(eL4XYWaYA4#Aj5140Hh7_3>$vj-SF z8Q8ZIYN~J(A8`%ye~phZ%UyzZZCv%I@x<>x1wy)p diff --git a/experimental/bin/processing/mode/experimental/ErrorBar$2.class b/experimental/bin/processing/mode/experimental/ErrorBar$2.class deleted file mode 100644 index 33292428e831c458bb83dd11c255a787810f18e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1657 zcma)6Yf}?f7=8|k9NaFNrlO@(q!=^_gq5^aTdb|nc&Q0$ad7;2*qp&Fo88RWjo>fp zS9KI->Wn|YKh$sPb2ib^DRq*a$+^9k=Y8JGo40?x22jU6i4lSGT@(8{NrGt0>%?vC z>D{h2K}Sca3cZFgu~|{3RF}vLO#PuAD^KmDo_7yViU7*e8 zP)3)jawUj@^r}F$Jfu!#Lm~iIX%x6d9#@ zY01F^zO;c%3fvfy5Tg1d1P4<%E%CL$DT{R1OLlCk*X{p<*lcU#V%jn%^{)1NDS4g2 zti(40g)FpCS@9=Hsyi;uqC}44UMeurcN@gsT@ysuSQPl;ACQe*Uw6|W zj$B;8l7O?N(-uoxZLt7Olq-F}2Mt+A-@5n?-?J1|x2q%Ow04-s|L6`vTDB%Gxwvc{ zj-@eaU<3|+#1#qFOCR39NpkU%jZAheZ($@Lh;Ql>StPifEL8%Nnb;v&q^}%X_hVkN zFh4TF*YWj~^tMztD}IUVH1@x>%UG0e$AWF=--j>7AzO)Xob|Y8e0@Ez-8ueY&MaC) z?B7P@hq0YWEuB7!+Y&8-xuN>V#T{GCu4=cN0gE=$hAr;iinv(~Rg&n01x~U!14W@= z=LdK8Br(SOqugD_2tUB7&cEc}KHO(Kjo`Sw%U%Ta{zidkmpbEU;W#m{@)UV~ zz``p`Jgm;|<5X*54`2O>(`(Oh<`w217SHdaQriQs>wCDkhaa9%*TFGbs}Ym+H%(l? zTR5W1xaLt53z!x)cG3ciXeq-`?fV&EphsNA&zYrJ{DNylT*M?+uu7Z1(%MOkyrXbV zLP#_uCj{5pWMK?9aC3luj;oFANc9Drr`+_zAI&cNp<9Y_xRt&AhTB~8Xkra_xhqoM Ks@va0e|ZmbS*U#g diff --git a/experimental/bin/processing/mode/experimental/ErrorBar$3$1.class b/experimental/bin/processing/mode/experimental/ErrorBar$3$1.class deleted file mode 100644 index 59f997ae5f8aca0be5c1a742a89388abd12fa835..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3113 zcma)8*>hB77XO`Ia+BsWgqElgK}K54g0v{2CW1-`+L%BjAqWU^)BVx8(CORWdpiUd zW>nOfaT#Zv(GeX7++vk4TE=!OEuJl_e3+N1(yI90o8~!2lzti;&X;07)j5&U44K?=9Q)Q1JK4BM9TCk+w=uO*)gS4LDqtgR! z+1Gt$ORk37ouU(L5Zv89Z{5G4uwz6J>!q(v5L}`VM}yfdRIt#PKopAvKj=xI6RRwAoes;HWQFUon%+5q_UynVQZG9l8DQrY93qt3d(3Q^LM%yMmTF&={yo^#G?zXV`Vy4&0DBOdLpowM;9nwK|j6N`S zb)MU$Qo2f_{(CWCp`TegFN4BXY$M{SthelWtZY+)f~6PIXvm?~`xLfgNT7@;FEhoQ zo)j!Q1Eh17gmN7jgNhvrBiPA^Qj&JHXUhbvjS15}51-{njovY0LUu&qVLU?h<7_x~K5VIHTM(*x zOyMYgPrx(1+Vsck>&-Z=^Bgm3Q3+K%uJ8n&G(mT({AV}WS<6#+O5tf^d9$yBVb?7T zJEdV3d;)*OpDp}}vtYJ_iDBRM6rRO%>^sEQpr>>C07pfxN-~c*jW;vbs<$*Lg%=e5 zf)|+yK4y-&>O~!E$B4nl-xOX7n}hE>tQ+wU0ZgZQMd6=ew#RILD{W*jb+zFLF47f3 zFjRTjbQ0NWHFAv6K4e=~wrrdZToZ^8C` z?PEEIb(F6#k(L%SyMdOZncTcFw@pZpzJR;+h=ex_JG(xH>Rk0Pnma#1%ZEl3m-0Ws z6=Y6G4;FK$xCa)Z6_;_1;c{F-j<#?wxH43_iadrZA|IIlP)~!okqvb^BC|TKLXuRP z6M2%x&`4R*ISutGmQG_u1swxZ5?%Ef(t=Z1+fPz+1?#$|aeF*>65rOJ_gnkl!k4qc zcUG|Jj6(%mDj3`lT^Eb4i%;R`EOA9^ynpT_;&4Q&n6cwp%X>}ie7adcH+pFrOi z(7W0iD#*Wz#^j+X#FOKn!uM-LeIHdEO@juw@(aGKiycAD)rzcu9uv3fJSZ18?y6zKq}_*@-W>KPC6$8`*{b z$Zq_X>vysT-^*V7k2?M@S^OvmBr17H$e1*9T_nA7r4+){-b0izeYMms!4G&9$C=!H zcp0zZ4q9%rRA1*Vh8$kRzqpIDf7y5gdx+ChxC;NqBh+$&egVJUs-IPkwzTncgDz_O^a4(7D}ssMkMkR7S9mBbI+iSCqvl2iMP1M V_^$XirnpNI%FDQ#kAXKozXF(OFy;UN diff --git a/experimental/bin/processing/mode/experimental/ErrorBar$3.class b/experimental/bin/processing/mode/experimental/ErrorBar$3.class deleted file mode 100644 index 79949bd9af829aa3793ab1f5066c5c3edaea24ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1784 zcma)6?Q+{h6g?Zekt3AUxE~>u784v|J0GHiK*6OzQnwWBwA3X`e{Sp@SFJ4>NlwD> zK>Vdlac1ZY55PkK=SogWhtRP-_DZ{Z?>T$!x%=l|zyAT?1AJ#;N?~~r25l2Xp5Jx* zLC3h}a9~2OZ~R#I+;-ZL5KLL+GF-mVTkc^^+^g|I?pGU(C<3ETbjG zE&2aG2%nhHK~Z$G%%N!yW2(A{l7)9)GD7P|mbmX=3GY$iU>GZ0NMXIey%&0Z+=@e^ z`!x&YF;eOvP7`Qr==C}#%%MtaBzD`=VKEW1A5h3*%B1K;#i*y-PZ+XpV;QR=#u~B4 zGAE`?Q&L?UF0NXj-OjzRZ2hop2I5MG?%!a!x+ZSY`npRGoG({W*8ffAkF!gU{t;)GY@1u2wC(Ki?X)gD+1Pcz-3#O}aJUYEIKh0$sg1-?6sk=b)N&yi)p#c`Hr%qn?TpJV=Eb>#>P&D9a!`WcsZ ze#JY_vHY-5Il{`?2^=DmoizX_1Bpe)?Bc!h9u7Z`EpTIrvmp&xP0c*;U9C8yy5@= diff --git a/experimental/bin/processing/mode/experimental/ErrorBar.class b/experimental/bin/processing/mode/experimental/ErrorBar.class deleted file mode 100644 index 1cb4fa38a58280963adce636e79099bb0727a535..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4987 zcmb7I33wD|8Ga|b$t24V(m;V2kfRim4PhaqY6)PMkV0S+0-?ba5huGtGO)X|%+8Xe z+SZn%DfK?vdbD`O1GOO8NYRSoiDyf-)~mH*sR!1(>f>X4|C!m%ZpahjK2P?)zW@KO z_d7P{|NH1;0P65>83huqPnbqnOD6SrcOYg&w1C!^&`dq1#Vs`&XfjR1T&J2cyb{Xy zst44*K(bfRZfaBGT2#WcgsJV(OjC<&)b#EiOM=uap)|X@LyuTJ60RYMVYaB|KF!P! zPHi;eNlT4e9cnbCc_&T zj}RpB?u|l81q-l{&f476xjWdpy*U_a4z@S9Zjdl{lwq00(BCK$?9rpqZB$Z%T-D5vBipMLOvel#f@qYnF5{zoJSkX@CcdCs znyK30pIKGyC~FfoyZa4OumR07HoCza$U9ZA37ZLrxYkD*W@KK-HNT7&2~`uul^qlg zFiQ}^76ol6;;UAFLKC*$reF#bG25!oeFNnPFkTyO}5&y(15ox z)r9o8)|!fSY36pdE6Ttr4;f)K+M$}dSi75Et4C+xEty38Ftagqq;6Vu6sZ}P^Tg9# z$4GKRSY)BhS>1Y`%393MXID)%IVRz?sqGeXR*RZ&MBUB8WbWxXeOt{2HT zsT=VI8GAF1%R3Opj4F^(BxZ31g(&htM?%4VFcTK7*5kUhRze|hB_h6*EL*r2OT`33 zfz6bHZZJ{rs+!ntxoNX`V$!CZO47m^Sn^^5W$_ z+=e>@;hls|6@~U-;$8GMO})KGi)n7!sCUzb9aZg? zNTLm+*mD!f*o|VmhcL8d62iG9&=#*4?~^b)do)@OUEw7>px{AaZ$*tnMDfw$n#uSm z>T&C}SCoATf&bH)%#x`@M71;<-I;PX+f^?=KiOsGrg4w1Qs&xBgOMF$i4$P?FvEIc zC%FB}q7^xJ|=;jCw0qp#2DELJ|710Ng1DTYhb1aY8Rc*4ny=b3O*%lENgvQ zIAt->9mi*7e1=8J2Djtwei}cf;B$C{=r>YKvTkb8jX)cbU=a_R8e^QF%v9SPn5;|b zQC8hzoRYA}Haf8|-|@kGCle*->&f}aDANlCTjs+Fq=gBF$!Hwd3B69^jEqM!RmJAk z)ECwg7W0jQFXBt=$V9SWhp2WFCHYms#jjxWWd&#P6~anQB-kA=TE^q(0Q*X%Sl3VB zoPw_jhQ*fQJnX|a@GTkN%!rq7CI#OXn#l=axoDjC=wtyFf?M8`L3dHF?H>shHt%s< zC-OX--mEk7jlk2H`BjE>%+1_u9Ch;XGHF0FmD^$Kgid1*yBsYdlG~FCek9riZ_>`q z19(coPw+H5OOZ=h5Q9VsBY_1v2iCNEAlc8Zy)Upyw6z&Rn)YY-g^Zs|xNZ{U3Vvw= z+0^X*QONVGf?we|Q4KW#S!UxLH@bZptEevHHuk2^( z686#TzB%EqCm+0`@{8Y5q8H#;fnttqI5{uiIUxjvb24^Ew!Jnz%cniE9NHsWPEuXV zc>!kfJr>%Wwaoc!zAoWqeC!5tEhME`a~72?OHX3%NnDr4k{bUh)TB{c2fYty)Cm3I&~R(Mb2W{HU-)LMHAt=@-GDlTp1r9n&)({^#ckcYR3CyF96Ul6xm zBjLf3b0^5vgV*wV6&rZ4V$9xC-KqTN~CWiM*D2zCzR?jfulogVbp4B@bU&Jbe$np3!E2>1DG%irwy_pRc++VXch zF6OG8tM_t6z;IPV`R^Crb(C-APaxnfO1G9M-bk;uU=g;_0V@5nhnByao;`@IID}3d zreTi|3-{2AN9gAP^y6OK&ha3Qa`(O*j}K%$J|J31+js+bKcl8VSOOow2kG$z_z)iA zjuQ_L3v1zN7xnc5*K5w;Sf{^c&M-dGTARkl2QhDz_ar`j1}8epKR=A23U3-;NaL|I zzM96@PmoU;BWf1wuh(|(LPjcZKi_&3C7n2V)scb=eQD2*;3b&0;tbQU61p2 zWELWT@7Pk8(K6q~_b7D*<@`Q=Kn_3T9S1am{&8{_7@mcK5q^1X3_B|l{|g| zJNYftJj;iKDR$8}2h+H~f#G}MAxz`!a2h{ODb75&v7zv;&`#0tDa$7{w!naIfm2oScprEw->OPX}^W*op{l<#Y{&q*B0}L zgkRg)PUuzw@7(|J|4IG=s?YY<)n+qSB0eez(~F(N`SWS~mh;PE{$d(`8pT{GB?4Z8 t!u&Q{%8i{0mtz6`Mv4Ob9sl6CkWatF|7iTnTY_U;i_b-8U=^`H{{#2CO$Gn} diff --git a/experimental/bin/processing/mode/experimental/ErrorCheckerService$1.class b/experimental/bin/processing/mode/experimental/ErrorCheckerService$1.class deleted file mode 100644 index 8aa36c4688d99e3d92e68c17858593c3917e6ccf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1744 zcmbtV=}r?-6#gzPOc^c|%IX3lRxM>IAZ~z&lvb-nqYzwvXol$x3=A{Pbc)2phwvRt z{7pi^XyOC-)5N&NS23PDEukh&8)B2&yYzhLobPP?{O7|b025eLP{%Nlb!=Vaa)z}Q z+p;qvCU&yIF}8%|YGy3qIJOgC7y71fmV~oy=psC>z|YXSp>1n1QzO`e)eWJ$3K|$f zN3W0amZhzlf}z1(H*(=IvXwrrv1x{uZOsfz4T+55+73gsx|Rj8nqMo*5;}N@E_qMh z%ovv8&N94-R994i`*d|gx#{YXm2?lTF!UVhToU<)aM4F(zw9aqXmITW%wzXM*DrCK*(Z ze5p=`s(bO|q360MOysZNnu4nggH_{R4&u0uDF&VsZqnBCxnjxsBhLm`B&!*Y8=&@- zzb^@sCW~QP4E2#zN(#(jUcoJf_M=IY*wIB+N^!&`!(i4iEO*J(^vz{Q(`f=RTAk?% z2rBGmPjFGomguWXcHYrN(vYL8r$U-Wr5>`9uyoUwb8}I+>vo3Yo;2Pmr;DMP#w+1r z4=akNEK4|XQ_JN<4*k^5K3etgwYJJm2UQcq=kNt5=*|gE7@Wi@+8IuxyQJ?e*_IaK(LDq|qW3B7 zZM51CaHfC(`T8D_eGJRf9tQR>?%T)Z(z}n&)9(;S5AEaTu4iP5(l$q=q#J!i3HXXG zd?TvgF^V6U!cWZN7ZLgGxz<%QUvh1h$Soj2nv#U1f2P+8=KQ4YHeKs*2PxY9)M|H; Mrjts7k{Nye0?#a%=iDO6OX~eI< zH*~{-AhF;B_$b63*NaqQ6HBA}@SJm>^XKoc-vHV;w2@(G&s5}#IF{kLH;snE6JKUR z$*Bl654djTidhrw9*+QvFVDe=n4dnW@yM+?QU zu17MiwkTF_)nFY$zmcKTZy642tHbN33|5!Q%7bCUg^iqpEVf+aQDDf{%!RF<48_UC zbRg76J_rPr(TjW@oN^_NojNU32E)P1SybDm4DS14rWuO0-g1*V^)m-$?Ao});4c4h zaTgT^`&{S~KBcU-YxOH=()GSpG_y_)_o>AFF;@;A;E|1o*Jg8d%f(|<8FC^V#-F4f zG2BYCSf;9<6F0wOcQ3aW?g1436q84-6RP%#s-_9Oww@gB(W+fH&8(X fO=5qZpx7=!UXYr>K0J~ZTJ)?BNHc|)wCMW>-wgJ@ diff --git a/experimental/bin/processing/mode/experimental/ErrorCheckerService.class b/experimental/bin/processing/mode/experimental/ErrorCheckerService.class deleted file mode 100644 index 3f6d985ca3fe598f08d18ddea62be683fcac2cfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23602 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 L{aK{!8dCoO&)O@2 diff --git a/experimental/bin/processing/mode/experimental/ErrorWindow$2.class b/experimental/bin/processing/mode/experimental/ErrorWindow$2.class deleted file mode 100644 index debae22694b94dd78ff781a90f9f63147daf5bb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1140 zcma)*T~8BH5Qg8=R@N>DT2S$;2x`@(d@Q0DCN(BfDyb>nU~1ysvOB`jc9-m)LjRE$ zdLapF;)OrJA7z}g-4H@lx|{5tuX$$XojJdL|M&@D4UaA41Zw+nP1S;>n1JCsiwMz$l#vN`x54?R%vA~$#Q%QA|x$RNG zb+&q{LZzPxEIXr{Ep!A54Gy^ofpLio7_*VbgoK4jfxKf5l-eq!SN+}&#jm}cE(uJx zBj4+GyjYoewpcJ>3oMQ7y}HI>PaLMoG`f+IPhiez|5cr)QL4VsDPjiKEL;_EMiocm zI&KKqCcb8%bi^8;Bkcz5^mm76>qS&>%fjq=9#7dw%wb;O5=Y4T^oI4_qOjjs=M2*X z2X4Zd@47D=d*pvuj|OJDrKwl9aR*fkcLipR68}6XaS!*oY6XNT1;9@#&P00io zsq#M|1*V3=Z;yBKwzs2x?9&Tn8lilu zxmQfI+%3(}9~N_q^j;K5z9!sC(hGvNN|;D7cZqC;JZN;iB%uWJ+zp?JV&N#&L9tC{KtoBj&Nf V!RFv%mH!3q@rQVnreVCL&mZpd8vg(Q diff --git a/experimental/bin/processing/mode/experimental/ErrorWindow$3.class b/experimental/bin/processing/mode/experimental/ErrorWindow$3.class deleted file mode 100644 index e1e0263b40cedd3a2988b5ec4cbb689343b283c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1418 zcmb7DT~8B16g@*17Rn$66-AMvRxRaY5&S@FjHZ+XQ+p;I$z8CCd7Hn7yV{gQ^aKujJ$Ze`|;?1X?s6|pU^h9M9X6A^u)G2YE zP>+kL+bB=>=#pQ9T+NhC19VdD%#B5Mi;OUjoowyGOauZfL{WEd_5 zuBfaFt<1WSw2W+q>5jW+7D)EMPTiS8B{23eq_d?H-6aq&PsE1g|c+tO1&!ewsNWWdblT_+^}Hl1h7T2v*8 zpTdldX*zauGRJp0W{nKnQ(-L#$(_O2`V}|u)oUe5>=bTux+)6{sZd76-AMYL^j0Gg zQMr{}F=sjyqn4yP!qKO#23y*d%gRh#s_hod8X457=)3XMJeN^9@HieADO`A7Nrlu! zY8pqr;!{wlh%l5PCTPqPbaPoMWoDhCZu;BkrFskjzcJr^g5IceLulpvl#D z7$FXjqBSRs$qr$d-ZU*Z*I>CzYs11?;GTN%=Q?ntK@o9H8M?jzS~Fbs>zzmT4@+Q(dr yIsWcL^y5bxBX2VDCgYvIGA2%7{7Hr?0|>+f<3hw}(rO|E6L*)H8yT3+ZDs~g|B1iA zwTZ8|@CUedX)WkRQ~UH(bHhmaDiCOo*4(f(NfB#lL(UWGlIy$CWr6WZdf3Q{KyHDO>4ZSR zL>?UmvgkI^iK0NZ!Uwu*uCH!xHda-zELS}x&{Na4^j2ixvfXm#Shm1e>gc5zlHFzR z6kushZ~FqnmD)iiTI7n&vm`+x2L5u6I*@SRR-yY)IR^T1I*(HVm9&*LaRvhd9n$9B zm!<@qf2nW!VqDes#_Z@o5!%gTw0~2eGDc_D3fkCWVdqSX5MAm^Cl|X z+?+!%*ikhx$_^t69`Iora2kfCNZK29*=%)pw@-Dw#dO_Caj(0Mqo{MnlHLq#b zB9ALAXd7LfFvxp|o-QIoU%;r2K7(0(fvzWHWpJ2%@f$|JMGx5~Vc2^FN9kAK7=>bQ$n^0RkN+P5Ur4}LqW?w$zLS6-sRc|V r0uC(V&pl)!$!4dBSy+@$29ubI^XjL+;2C=AAs_dPKSQ+1v&j4g$0JUY diff --git a/experimental/bin/processing/mode/experimental/ErrorWindow$DockTool2Base.class b/experimental/bin/processing/mode/experimental/ErrorWindow$DockTool2Base.class deleted file mode 100644 index 209f57f8a8a2bcaf5a40664723c2f4e4fe1bcacd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2869 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 CHwW|l6RML5$8(j*Sw*X629%PzAlWHbFAKij0e z%+wF)M>UInRC0InOzlU%$Wq1h9gv1Rq1RYFiqw)pYYHRk2Du#ZRi- z)+^j}R3o*cbEA|ew}b#g{8nsHwRQEt-~!IjbttYf4CgeflB(6sRJo)#`4k4fbx>xQ z^2FX8l)2{Y@k4HNQ{#l{PV1)bY%!E$xw6_&Q-(@a795+3RXTXuGZj^%&J|Arw;8YN zdd_%}A&{X4Lhz$cMi60!jsMLaF9yLdAfpT2!Wxnxp@*SAr<*)quN-iDUnoYAoTaJ8 zrGhPIz&X}y46)p;vR{pe1PhpI#bvvp7R8(oRWX-_5a#+^nrboh)VSl?3?ng*cuhpS z*o*s^kuc3L(JuEjA!STrmKMg#(P03Wv>`k|RKh%o^SAblq1I|L9wNpd9dRe`b{C1o zZ_Yl11QsMD8OGfEbw@W+hIMo#_Buzu+?KJ3C59joH608~9VXi%??9jg@dzstmKjDn zB;gHi$asuZTHHdmnBB`Vj5jOwk_n(93SN`(6wl~2P@xQ&RxusGH~Ve#>>u0Kd$C4J zbKf>(+{J{1G{bcJh+dlw)zC}(v$%Vx)kQ3v9bMz<1yUsCq=Awt`dx%iLGBK>6k7hQERYb_M z)x3*47@-rfU=(A-EUa;|e6B_Ey0t{yN(58Ht)+{QlbC8%@`G}SiqnbD7^F{s@*D2? zaf;aP5WB$KSHwRd#TG8`t}ApFb1IzQyBBuBu>%6J<15IlW&8%Q7Do| zl%i{RPN!|Rn}pkC`l_3>SPZIe2m^%LChn+fy&&r)vGv0LR)SKHusJ}m47q%G^#{x6 BlM(;` diff --git a/experimental/bin/processing/mode/experimental/ImportStatement.class b/experimental/bin/processing/mode/experimental/ImportStatement.class deleted file mode 100644 index b7cd604b5cb064002b607da9ee3d81bac6fc599f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmb7A%SyvQ6g`u~K4NTZTU#G>;jT@k0r3Tj8$k$^x~OzNiGxnbqoh;uw_Fs#g&*KY ziFcwX=*q=?a_>3k-naLcR{#g-6k#yz&$2WW^SMm!yg0oTo_L&zOvWNnJo5Z_mS$?K zxDvWkgvC&s@(1okoEENwsR$K=E%Uh%j|D@0_%kq883CU$n2HAs%%|B%CStUR1CcQl z&SfIi1w*_0cgy#C69(&&RM{|5abTlLP~G0742E?FD=6r!;h>0;&NdvBQDUeLze#R* z5ap`UkVg}qNnL+6Ep;#F41?i+o)ZN`Bnora>&?4U=EZ~qPkLb{2RB(a@PSK{W c`?-%zY*9r>IWNmI&1~eE<~E6Qn<@i4A8bf&(EtDd diff --git a/experimental/bin/processing/mode/experimental/LineBreakpoint.class b/experimental/bin/processing/mode/experimental/LineBreakpoint.class deleted file mode 100644 index 584e0731b6620523ff33523734f94336d64f9a2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5768 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 dKp$fl{?1nRj}Uzzl=YhlhLaJ?A^$ z`hM>@^VBHUoZz z>vvkat;VQDxeWt5?T}-jNMV`Gjx{Ft$bNe_cQv-fLn+zb6-hdF%uXm24@RPPw>4rb zly*(2>2VU=)vRDd#Y}iiL3Jt=gySKF3N4t??AT*din*g;G@hJM=B{`$;zZ&x%FK#- z4p8zs*KEp(L>qf-M^<|xLov%qCFoR3?rKZdRdbSwt$7Vq6}3cS5oe7;SxtU)owa=m z{#Ir-fC7}8n1_Y*zoxd&z+#2DIvv`t4l6lK-vU^K@>x(=V&XbnFK=%%VW3#vmYSG_ zfW*U$b*DxK>_o3M5Y>r|hpcFym59ioe<6MHt`h`nFAr(ZhLdUoqAZ;;Tfk!$c?U zWLB)vQ9Bk^Xvj8_*^y_&^OGrPL6@jluTWXjnP0YS!60*xbgYEan_wc?atc+hwVB(i zwojn8$wUdv67+&d-K?-EyVG;}(Zm+q&6ruWHha)YMV(FYxYHiBg$2Yv*S#EL-fD9R z`mxQxJqio+^m{TU-jD4H0ji(Wxg-SB%+hnAmy9DF-8n;YnSO;KD7(Q;`!AyVV$}otiiBI4mHcd}^U;CzZV$yApd_h)dA3kZ~5j;wcprZ<{o-;ED z=e1dL)=ckkBECmBmH9I8DY9uEP}f@FF0!wjJMCj3dsJRX`f{o%EY`YmYMKE*nNDO} zsQGN3e=G8ZXHrhCHj_?#G}F+6h$l@vC5R|X*dy`Xc0MTPq(;M8fGfcl@I?drXX@+> z=uCV`8bxZF>5_hY#l!)8m5|}A7fELYW0%^7p&(3b`F%SNJio`vd z2*jgdIm+G3580&d>Lw@e9`u*ppZV17cFj=}%;NKRO?*!uqf|snay`#zl+*BsCeGnJ zJq`_9i91MaQsdSDevF?Oc#Zs%#T%5cLad^RpWfYh4%0F^hTjT^f5$sgc30*So)#9$zG&iUxqbP< z^k->KtIe=Onk*7a+6iZ~ZXD6@riowS*IaNjBP})XPI)tR+`?OC6K>#awW|d;;wFAk zpY}@WH}T6ydj^(!RvS6WT4C@cs$S%a4`QH5Pp;AmO;^BExRk-I;EcGOy}A16w9TzE zY*uo0^fotf6wAfIanz2Ze)|57to_BFaV3{TZ~rTFRr1wQcOHcWN2#T$j{gVcqwXx! zdWq;fX4i8#hqA+%D--fHj(6omE@EcZZDKO zX;@NGeFiOC#mfn-IgPcY?c;baKdb#a#__&!bWg9(NLGrfC+o8Tce#313q$Zz?>?r; zf4q*WHXf3fGd5jmH`P9Ol)+V{~`B9^E{zWd{Hc(Zz>} z=SP^KM=AL@s_<#be}>YZ!)iQ%O?Z-3c#3TcLKng4xq z(Pav%c=3Onx_s2Kl=_O9<^lG@XQ|h%Nd*cEi!Wimf&R-B^077sk6u0=Tg)w=X9-=T z_i=+%s9bV*4y7_M_$PeuV$5KtR44p-cGyAU<`6seNLG=`Js$-REO{9}Nnl>Jnz&Wk zdar9E#bMVu#AHb08UCu}TlMOotm*<*r152`MYYUV9zYw%$~2x;Smi&A`bGXU4lA6+ zvF-+X+z_l3xintzvtV;Xwjqs|eAps_;|lvPUl4+EOVgx@>jjqMIQ=_;C3uNoK1pD+ zq8MjmoMs^>c<)a0_InEV<5eAIP=~+Q3v(f5US>1#w=dh~j3%FrEX%j?3hhV|*1&(6 zeN@QAE1{($z-0=%-v*9(Gl6LmygPFT_bb}{j+;NWq>q1qDX|gbXBpcRWeV|uXI}}< zYfsBu*-6lt+AE=??_W`)WNW&{*QxQsTWZw5D?A?^S`|N*6|@}2ykNyRelUR_k&P;j zKB!a$N$ls(UjCO1Q*`8#{Y7Hq4{Vq>cyL@~ir&n!xeUM12agXG_@&Ob_rz&~j2pG5J$v&>~s%yytlZ&2|ho)!K$ zX=#mTsVGQZ{?qil{fF`VH%n>JWF?9`r3!z(HeCclA<-jL;8t}eU4NO>bsOcR25QPB XecX|hr&RF1;+>yr(w)ERjeq+;2X2K8 diff --git a/experimental/bin/processing/mode/experimental/LineListener.class b/experimental/bin/processing/mode/experimental/LineListener.class deleted file mode 100644 index b61b03aa6b284917f461b6d134afea3506195152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmaiuzY4-I7{u?Z+WKeFx3CTdTpbl5P;e03WBXB4(zK*ed^QIkz=smk&CTUFj^lp! z{ybj*Hkc%c2x;q@oV!ljQq)bsf*&nAU9W*FFjfPpPXjQw+HGW#> zj#=e3*RZslT{5hq;h4se#q$(a5MW5$dZruB;BOfY!&I(hSG7j7rk#{cZ&sZl_|7q^ zoMF;~D!4}J{l170q%UpOOm~-|8qb{=Ekm;mB3y7C;;r}abeAg{R+HHNT=($XDp-9Q1J+H2BpH?ylgNUPuy%V zj3ky6q-eY3`KD`Hnq^liV&QZ2&m9%ZSYZfJqPBx>MUNqOlJ`iUhp>uu1#1iwJ&N!a zw^TgF2CZ=+Tg<-AGQ`?Uy~zYn7lgM|Ji$}CJVcZs(;?FXe6!y!&*8CSe-Im`w^wgl z#a&D(NHffIPw91yrf-%HX%n)iC0=(;yQYBd+I%-kYM!@ABBRX9S3m|IKV_KntVOSk zw1^8H&_5CqZcy&cfl=?Qez;&aof6+S#pM|HER9(46`?t1=}P(O!{$Rk+%U2N;(kdF z4HsdG5765u@{4FRnOa)@3N;xETwpjE3tnLKT%yP586lMTNGde9L2O_Qn~0KUw|y3O zFivlj1rwO0%)*M1<&zf4EV)D_6Okz@xdaJ0je8v?KdFXboKAkhDE)?0-*MlMGsF)f z>=N_ekoXLZEnQ;s4AC3DWae+w_j vvnRVr$}ZDa-K52W5W5IQ@SJcyEJ|ySte2E+0RA@$^n!w&5rSpN<-@DL&sm^S diff --git a/experimental/bin/processing/mode/experimental/Problem.class b/experimental/bin/processing/mode/experimental/Problem.class deleted file mode 100644 index 647bebe1f6131c82c63b9fe8e0bc52b4ce150076..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3124 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 diff --git a/experimental/bin/processing/mode/experimental/TextArea.class b/experimental/bin/processing/mode/experimental/TextArea.class deleted file mode 100644 index 35092f97c9e500e2756af0d80fedfeb1a2a72d08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7492 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 diff --git a/experimental/bin/processing/mode/experimental/VMEventListener.class b/experimental/bin/processing/mode/experimental/VMEventListener.class deleted file mode 100644 index 9c3388a8942a96ead26addf93b20064f1ec590d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmZ8bI}UtBLU?w$@rPK?+HQ^Kmu`i!g02X6OLaz}`I zJ^BcnZJgJd+s<%VD3&43qn3y}?NY)rsXLp?MO8vr{|y|5?vOy3_>Tbjy&1xRA@Uet F{saBvH9PCA3B|!IoW%kGyAkZe}DT9U=kG#F@fAl;8$g%;dskN-LFYQuC2(x zsY@@kUBfDuR=Hb}c1;Evx&`{)*sHeT+Dw1(I$&HNDOJw%rff=q(`MDL8;z!Cys0@x zbYesp(Ro22?mCT7dNL3gHxEK?w)6RJ&y?di;f%myW`COh1I}6k-9;83$6wrpxFn#h)}syzoZ0iD6ie1hB7>ZUEZfy-Y|*tF4IN|1 z6KYw83wE7~2dTJ|({6qeuIRT*plfHw1=vA)&`z9k+0sCYoQETNF6H8P{En$gziT>S+V|45UCn7! zeb1BCP}Mc1V;VGj7whS0-YGCb{kJX3lh<)i$9*NMr&6*?OQkr9^x(hbimRl!<^+oE z&K!tk8!t!2f3IB4JJs-*MQ%5vRerctnXHx8s&XZCd{4s@fq~AQZXNJff`xe@JwjXW z=TiYeYh2usvIiTdW@ww@Ei%RrS38Aozs8{FnMFz_Kt9paioH`j537<^>{eYEQ_ zM$)YpF^myD5h5ZI(N0k*qT@KxCi+1XC1xh~3H@JjQo!VHVC*Z-#<2e9mzffqxcmiI zKH^&H&L#@$Y(^(Gn|d&|iH9E|jA3#OV diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$1.class b/experimental/bin/processing/mode/experimental/VariableInspector$1.class deleted file mode 100644 index 8a600c79dbb28672ffb5b03d4802a5b5285690d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmb7C%SyvQ6g`tfV`8+mzTXO6)C#TDg@WQn6ojgv(uJTfjf0M)lafh`za{tp7k+>r zCEls^fx9k-nS1U%_i^sLf4sf{SjVypi(##q#G%kys+)2nz7}P1-xP^#2$k}vT;qx4 z^++5l-4tOOC;5sChar2%+q@icBAwLl$m61)A@_@(wv;kNhW<8>@@+|#s=bxkChm?@ zGTmj^DD+BRsWCWvG>`{|p#UxheAvhY@Q`J&3nm~_l}a498g-GJe|4Ly#vzZs$L@ko zdMh=Qi zZINvdzqtB@p!kB}hfd6h!8#sdTNlWY9T3N$qZp%`QNe6C%O*t{pI3ZD;5=jEUlQvQ f1J>1_Bwja(jX9!On8yO$4yn0FO`9UDlaQXDld7&U diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$ExpansionHandler.class b/experimental/bin/processing/mode/experimental/VariableInspector$ExpansionHandler.class deleted file mode 100644 index fce996cc7f3ed7e62488828d1b2f72403458eab5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3252 zcmb7GS#uOs6#j0{B%Mq;VIYf!O^^vpHU=T6FkrwCB$@=25F~DNW-dvGPWRB$6N2Ij zuKz&(fNxe&g`px<7QXVLmM{8X>4Pu&6D&*oZqJgLOpM9HOy9ou-0z(8ovk1I^Yu3X z_Tw`hnm~WXb5k;#wVbKMtechzIiHc9H7gz8v=if|XPJ|>9CET5netsPHaMR#ovh_L zr%WepOHW5wAUb2tnF-q@#_7o!3hJm8=yScPgd_b)$s396Ri(ns`L^ZA#NfO?=1F

hFOv3;5N3NZ^58Q6iH0{WEn&zSzSz_xg2g@u706>D{zj9?c!bi@SOtBffM8Q6_I z0xg6bHnRcjfIFLU9s0%X0)BaNCUta@nlxzk2jf$jRK)l=R3*9DN23;z@xzx;$>$IVM&s z-AuW&iEPeE%%m;WEw?HBG!E-HB+#*{X+?AcNgNTVC+@fZ=(`K*BfoDgWZ6dbA;&=i@^7?{8-Ou&@ODPcJbPHTajvKf%Eg14VcD^ z4vXY20TxdUTvkmY?8tdy@4~DBM>V3xpb@c(gTA3oG6t?Fb8F?5oM~qjYSw^{9J|)E znH?nneTnCNyJ}!Q5YBf6W=ya!ZRG>iWr7~Jr6M^L0l_p2Ivm}poC()5vJlGNW#Kro z3d}Q1h2~P6)p%B2T9WY7Yn%Yp;45_dU`~XX-peySaB8Is94lwtoR?Dd##?R05-c@= zy((Bt(jkY#e}L7IRka=su*yC&h_lo!bbP{jxz1)&)Vx&u%#`X)?BqlbK|>96h-g%e zc786^BCNU-&l>sG$8(L(NLTk)XzIF)=xx4fXbvO=AReHFYb8%9w4#kqfk*HtrP{d; z^KEm0^<{t!9P3`d)&)F1((^6iw-CPFb06{1-UW2^cHN;8{_dcc?*~HR1w3^RM=z+o zyXarQ@dXSj3qpYf+i5w(cl?n09vj3Dh>9Q4Dt<=0_yzsq*TAwaT0orz%hYNJ&(o$l zj*J&DOeqly0-jbNu4OD6L^tec~WO6 zqaZr+uD+!BSj4!7TWG1+dR4>uC2yN(6T}~A7Ju?X;jc1v9VK-g1$D|3dJv<=H;Q^i zH?`LA;O0GCyl@wjBL!uPNC_Mce}PzgcoCe@_pwXG!_EiF{TvNFy^B!RC;@h+TMvKg zDc#yycB_C$>A7<0-zwZvN6M{m5X3H(c3KE^S{N~{2K%*I9On9jR*wlSf@wZItr0i0 zroiRCybmRpZx&px!*yK4Irt+V5Q3zahBHa)7U__z?CDyHv<-!N(e5{ySS8{yStFf&IyQ|z_HniW~PaytG+Ru&xVXl3QTt9zu!|rbWhoi?N1A26GwGElzb+aEVAv1L*k>=6kzDH zEUTBTJ#8Y66H#b*#l!$!70?pNqSCx(;u!kX>a2;E&?9g>Z#%M3+g_LMiXx6cJYY=o zTpL1N^-5swh{gUd``Et0_88w(Wg||vRVvA-ao5MM;pNoWE{0RXyEyZda*a8F2(;0@MX&Z9 z`nB(ILi+*dC_hU*eeniH_*N^GLnK(K=o-#*Z8ED+7o$$#O}xcl75xQqRrJl&9~gd) zgh1hUTpxdq34wobVR5vM_s96u@!_wyM58lLXs!MP!;iw9_}?d8q!nx;hb(8<9gQ7%+!Ep8`_|$r?dH-o^dRD z)s6|rG_v|GJv*e^x~(8AP(7wiYAI8riXDSvT&JL1pw+TRQd!*@)U|9rl|LjcSe|ss z6W^>k+D_Y=G^k1-Vq~mrUf{d~2YRH!!@f+K)13mbbk~l)Yx>jsy9GpAU_lpGJ6hHm z(98+Fj3HGElsltFe$^U*H9hAR7Y&qOVq^_xgTT6ma}{nJ5D0e>y%+>)R4hPc9A!wV zsKO$FvWCWiD3W@7RQ| zvvD>w;Ffk4~2VXoo=G!S=v$RM)>n&$UpvpzU6((SJ8jH3xH3YrBP=CxTOqoNgUOp_$J zz=aKs^IPjKDT7{$(BvAdRd69QGq1_nf-2VGg#wi$xVPaLEwVe84Ya%<;QGayJ z4HCJXDz21~SJB~(gL%uGaP*y;Gb%&vSFsy=2pvOY3HV{mVdj64Dw*+`U1#HfBh(?`|%L5JZtk%Ff6bvFz#vIG%-BP4nO2N8HbKh z+06_lry-qA%a{+~pb8V?0u{8h)z)&OMuvP$76~TZEKV~_3)d;g2`mgO6&y&RwFestDd%EQPYxUntqe7o({?Lgi;yHBo<-YI>cLCGTeQ|2SN13nA|Bn zdI@s3W?DlLP3~n2`W-EEuvg2uy?dQpFVRk<_wv*&}=AIVbw3O*W7F@PLB*3FmXKR#A}qW6a2RXWdN1a0(A8c(Am? zy8fwn7@wjiTX$__=PoJ6qW2Q--IirKMsBx$*pX+o&!~7S-WJC(JgVZe5>PiOdOl+t zImfWFQ9LHVg=Lc(4>ir_Pz(Wg=Sb%aQb_AxRPiLfs z?kVtlD!z{&uv^G8mdU#QKT<2tR%T}feuSSW__4qR&z)aaM8#9MlT~lzdvt9$il32c zGPX98kFu%7@icy^;1{#1cG_i$(&wZ2HBShxV8*oatXfx8;I}H?g?F=BhJxsqxNT>S z*x8l1_x#E4vBd>mXN~t;6Lv;tqafE86?<9mJ=G=?#PeM`o7HXiyrvW9s##xISRwhu zzX-2kdCKSK&N9Rx(_O)F2x@h;{OsVkf^$`<=5-;TwooF(`*}^x4jlC_+ z1*G~~3s`?MY7?S>&QsWUFSaInIk%&LU1CZu8R!VthWU1Xb+y?ZafjE+VRE&S5@;TauOpQ@!EI+V;vQ>6}91H)Tyo>O~&Mv>au%lm1J~n zGWIZ>t7_vXG1-4(OeAB;^4p$0ePdK4qsho^&)!|DOwsK!$dI=q!75cyA);6)V*EUd zqeWEk8({&~i%J%D6|NA~JS8S@K-54JNmybLCdFdhB$nV-&fURxQ=-m=>v|6oA1;D} zBeYwA$EbEW3oyk}*0Z8L+hO7F5P}DLJlNyKL<=a4uKG`KS{01a74p ze7z?f1iut-rh}3{OYs(tLavKpgsRwWW&iZ;_VX^;S=sz3jvYs|`4JqO60>csh9WM2 zDjHo|i#&d_$>fGj96!utc=6GC9Vc(cM||rS^De`Skok8=D8ok?)r89Knx&(wL`Nvl5ejsC9Cyvu;i6mW$F}Ft@rgjk zKHrZTukP=wl-C3f*33*<74?2P0BwvYNiHUuh}!Ai zmM0KxDd3T*#OJ1sczGJ&znS(TF80yTe%Fx4!$e>x;TtMvaXyYG{5(Y=&Y()+CMx6} z;333(l(G1L$-wTa(l{41(TgvX74YRLcNCT*vg)hH(R~VE@AKAvxA{T*FogDSGJG7B zt%;u&@biwy2~@Nue&r6QRo;wvQ*ESx-%Qm;N;$uYy&K|M#-=g0K`a&-tPnc?*)fW> z;vm|^IJ$*}?IOpndL0{-jjP23#>6D96Nll5qb?TP*gzOffW>5hMb5{f9UJgF{GM@l zvwb{;Kal;q_$0X=(5T>PBB&_%W6eK^X$XJjiV*&Szw$2Y Lp2s@;4dMR+&m}cF diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$P5BuiltinsFilter.class b/experimental/bin/processing/mode/experimental/VariableInspector$P5BuiltinsFilter.class deleted file mode 100644 index d33057608fcf54068e2fefa2968e43fd2bfc1a5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1543 zcmb7EZFdtz6n-X?W;f|l(*Y`iAZV*e3QYk4wFPV|m1;~&w-&abp6zC67n0qa-3`ir z@{8xli=LxDK>w4+XE!e(erZ4KotZm#?tSjP&)vWN`Tb7-m#}3ZCvdYHg`SRMKiI2x z!j`VAlrvXh9I7X%8)z8_D|3(PkT7chOh=m&ms zL*R1du#cY#>3F-#kytU1e1Ii zxgEU{_JYL3Nr7T^-gFaf;$4E=*Z$r3(x6%|ZSukKS)du4? zd!1b!ZKc!@P>s-Y+r#b+l=-wP#X?cN2lR12!oo&_Z>mgwL>OfFAn% z>?MA?z7$37)7Zjwu+}qKuk+e2!=>^*u*Dp zBrtohdS?}4i|w!%dFikb*wnCtqhX&*u?SdeL7=0Rwo59+2JWyC2TFhBhYfi1w?Wnn z!@U}JoFmU9zcJ*HPw57f%jsnChn1s#92Vsfp8n2k0Jk>#3=_2%DA&ppf8eMi)p6U& ztG8`uOub_}1$D}H40YOeO!c1alnd${rJ+8cG}R1cQGG;NQdP=vHA`u!3zSDx-F}9P zzht2=Q?6nXkn1SQJ1Fs+l$)56HcrVcoR!~VMsA}f?_yrw!&T{EQSM+_-p6hE08RNF zw&eHNkw4&L`byIvcwE6%t^(Ka$sn;?Of*N`WbId6e2GtIpX26lxRt}tROXNZDWs2O kD|0l}Hy$|RGklE(?{oMjvu|RZtKwN;1Dlj%TfU-3_q4gdfE diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$ThisFilter.class b/experimental/bin/processing/mode/experimental/VariableInspector$ThisFilter.class deleted file mode 100644 index d3eca6f3681c1f4d658a4e4f137db3ecd839392f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1082 zcmb7DO>fgc5PcInabpZMriAa0wgKz}k_xz>AOxy}R4JrFsfyIw#;jTw$F|nnioe1y z;KGFiMdH8@;71|GZqk6bBnR*8STk?ty_x;>`^QfJkI}VIAw0`e8p=G6lKt*DeJ{K6 zV0ly*)bQ5DPWJs|7)) zWd_{9DLA2~xl(h3u+d)(t;e~~qa@NV2v7V)lY?D?xygOhK{)Tg!jcUG%MR*r35H(; zEcc^C4vxknsdfr^2wp!8MLgv(`Dqpu2)zY+_)Fu0iwHxRX+mdCE`^A_V9&-?T(@wI z5X_}tk>=nAZW640sRv@rv{w9}Kb!DSD_)b{5^fW!<#=q|#hQiHe-`01%)vUE1UuJ4 z>HJ-!4+xk2|IvayR`pmYLVG@)N`5?>p%&qXHzJ#eZ4c8U6&CBmeK)3)I9uFKL4)9I zC5cpv84L31Mm@Su522&4bPeX%Nb zyk$d}wJ1~!s8A3i1e2*s6hREh^DtpDS^B?IP9_;B8J1XS*4KrzD%m0omF%i+p0L+8 zh9nJyr{}EWH04anpcD-R++%>|J(_kg0oL_)u>fEAN>zmxn+*+}iYFYJd zPwNE8DVQXr&eW+DW>@kwrD6=@QB2^9imR9=C=%lP26Mq&7Uj)#6$#uR^zee<~A*Dvu3c|SX{Xt+#*1_q*SDlA@s9L*>hN4ZO0LIlnrUs)4F0_!d{F1kyG9B z3E=B38DDm%>)Ymn5H;MgFqs!oBhVV-cI<856k3!FB4OrC4e7*TRr*|Y6@qCV zgCLJS#bR<6co$%cf*$_%@+r@^0bU2wnO#KFhfrVdqkkWRpZ%vJ{Oy+k=nKNM%VV;K zINMZqXD5u}BCjNc&<^;ElPGK}WREfN0R!nwb}Ald6dpbbFy>hSV2e}6B0fhK%qk(&#xG#Bi6|`%+s-tsnE*X#>5Da#cdyF z0W;A2G7Ff+9iNZ_{|)C5l1OoncVVtT!+kv9EDzb*i@@-2Bos~?z&slQc!ULBqa2cu I!()X00>T|&%K!iX diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$ValueCellRenderer.class b/experimental/bin/processing/mode/experimental/VariableInspector$ValueCellRenderer.class deleted file mode 100644 index 066a623dd6b7d6e0ed29df84eed636979fb20d65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2126 zcmb7FTW=dx5dOxOY~pOLjZ;DsXqpgg=i)$HE_NtQ+@{!d5=eqeLJMr1(`3{2uC=>P z3cmmmn&`mW8dCgz0KVvY^?zwq}T|>6As$wd~=7W>iE*7{;P7 z*M%)?1tG#&%ic(u!d(-Z=_H*U>CLLRhHi@F1#w-g8191q*?5)E5Cv zzB{Fxx_gdrI(F2{@d6=~;cQz#XjKtLQv^Y@sZh{P2*#vAN1oBoS4wNbUX~mXy7N|1 zGY&baZH8nDgqb5^c#ud=sl^d)mU-8Uj4!qtFDU3Gv~6kIT2k9_le3oTMi}xVD*Es! zLD>+l+#__w;`#f`(h)?_uVMg?`F8VKiBsq~v@b=Ry9VW%af0m~%NDyOvMYQ-CKTDeBz z04L%t8|9I)N@dGrA+kz+Z#Qew%6Ycw20ROETddFY>MA3;M?~ENrx?Vfig8S|u=LL; zI8B&1n&ecR#WP$N*A~pqaQ;6eU(-5AeGVxF&l67lzqN`qrdR{IbJ3J~TlY$^+JbX9 zui!;Od%eIJ%dl(})0kmAmlmg22%U{t^C`zBTu^ZlvrM;F7F%rCR>fq$#~O;``Qqxx zI4`NlN}u7G{B-8Bg3E;XLyWyKY(QqrlI$*pyrM+y%R zMwi1YDi#kVxBPaQ9T1jP97B&hEvUF6wcF0Fe4TnXrO}FtRlLqoIIVh=2gM*27k2&D z?eUKPr5`@tmS|*Wd)#``u1Sdy(VZn>u&iV$nm09P)+$!G)q}RR!!pkD2r61er6e`Y z4eN*S`t+Xe*m_&D38N1;9wd)x1zU`$q1g2{h%8wZyC`OLIgNS`2T^@EPslq2HEWu} z&KR2G2!`9`QPkL2-06&q{{*PBQ_enK1$jq7Ge2ASYYGAW0g=S$kNh}*`U8Ij(814k zd6V8nnBGGR-9jhtseF&E(S>e)hhzzBo^G*s>1pc3E>0$XMsy`n#qlamg#Gv92NX4(VPhKTW-EOml&(!wLazhdIBk?5A-oQ=o9qQE{13i zBlIc8=`)<6&yk`pkfSfTg}%ZfeT^&h4X)9*SflT}B(M6Q>q!b+#WhZe6TusJ)1yG( zElymPS3u)c$Xl(UD9Pi!bzU_wodsTBXBtu%!Ui_E_>!s~H2sAU1v!NP7`2Z^kkup7m1v+x7_C~+c0Tbr3- zxtuez&)59{V2pN%5@DLUM6>s?Jx1r`z!Be4cJY~QrcAU|E>?TP3+q$XS>pP|%Sy8I z*ktTNR0y4ux~j-1p{(~Oi4p>(HK#I+2Ft%BIdU@G5gME1;&hH@La#7>cNpa^LTh0y wyO~kmvk%b}(O;S`htMt9ziR>lp)4N+kla;8AX5q9r`AxH-jIYWiB?d51HScRF#rGn diff --git a/experimental/bin/processing/mode/experimental/VariableInspector$VariableRowModel.class b/experimental/bin/processing/mode/experimental/VariableInspector$VariableRowModel.class deleted file mode 100644 index e0fe9c45c7c30f681b939529bcfe1535cbf5be01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4473 zcmb7GYjhN68GgR(Wj4zYwkZqQhD(aHY!b*OEv1@N3JFAlNmdD_CTMlC88%BdJ8^b4 z+{9XKt@dK8NGsG#3fj9&bPV<2n7K$5VX1nb~CLko1&u z^380%%lka<^S<9Z@5OgsJOkhcyrG~>;MNh-Na^`}CYMeO8-sd6-!`I~nPEL=Y1u@t zW@fa3tlp8!kLW4OFc%kRHW*vGxIL@DFA&+HjcSRkMjOe2E!?OeDDXbROeb=>HK1#` zd?LS9LKp=ro5|^k;&Fi)DI;4L&UI_UdS2k_O`VgrdMuM?S_Ee5gBeTm*tmT}?kd~V zArQ2NGWo@g0*#$l<^v4|Z^`5`)=GgJ<5zmPwpYO4M%T+BaFvP~P{Z)yY85jvTfi5u z?NuMR>ZC^9h2a6++$h}^sO&US zTDB;@JL#7S2&}$B7cPq-1*u5uR+}A&HlvWUY(F~6aXsP+mIyRlnZhb+QAd?WZjvb_ zAo>}@9!pEz(WQ;J7OGoYHa|#jyweN{dH=)C5K$FU3zmbVX zKqaJq;~)&F_+%owgt(C5VD9-wHIlA>Z^BC=UWv0>o^hKU_juSQ zXXU<3zD>_&*SaY$FlS0_`lWBHRkUKUfa3bbtg`5$B9mxFzEt4&R7Ng$v9?zReVvL9 ztf!lU18K(Q-Q8TH4;0dA-E0Y?6Wt2B1g?A602L3YNa7>B%%j81e1;=s3@7r1Tw=>$ zCefQQt%8>A(o#db3N*a|8x{2M#!W`0BWLNvRq-+KPKHJ_GtWZB+>Ms{>V~$qV+KBs zeg%C3*G!M3ViP_=W5XHKG|c2?f%!5@r3YMCJ9kO!c6?gFr#!@34I|5%r$WPkfNB$S z=cXaoFUbu`aHi(`c)u6XJzGRfBcou5Rbo<#_N<{-6&G0C*k$fZ?`Vyi&8O;k=y z!*jjF-!AcYFlh1hUY_z`QIgN%a|(8OfLga(x{5pT`67^`Wrx=;T}8@@MfJL&+1)1V2hsX5@4RTFP+{hZOukVD1!q^ie&l;&~jV ziyhtVNr9MC9lc!Sww4f%3M|UxMzw5au!hfqUc-KgX+K!A*)VH%HtuS!+1a#9R_Lds zZ^u=P;RNd`ed71pV`nr%#A_KhhH{!aYX8OzG_z*`3WPHf9rja)Wf2wZ9{m(@i_&W#1Yp?kl#x zxR%|9k0ZdRU$%j4&Hb_o1R@dHTk?Ol*z7GUxN8>wyNi3v_)gZ{$R2%5J>g~BmALogd(A2UnCgeT11J2`3!}U$1(p1 zO_pIHpB1D6+(Q!gqMB8$hX1JqCnV`E;+w5K7Q1vh_?BxGb;l4nhU@ks;6E5R$QfUW zwFl_XgS7HciM0yXTD`qjNQk9a=9+z)Z$B5B>d&EJFY4;gqM>`<5cyFu-pkhJG1TL6UZ4FolR5{)WkNWtz|FSdCcGaX zpduXL<-C1paU@x8OG4G>_cbeLRs?-30tZkP zQ=)-}6@KcmD(c@aV{vytL<7;_lb8PCn~aL1%^@b(^N8RGmf$EF@d6v=BXsG6O>j9A zjffKjS59cN($yxyfH~SMp`|wJ<+thA!heY-Li9m_kD~#C&o#hRWtR|y&t0H-fwgFN zoGjZ(ZRn)1q-V|kWoHp>4v6Mp%ujEe(2FXbu~p`KImc#>E{^|j+{v+r6$DJM5H!GE54Es;w zyGQZ;$|I}>zCNE6?FANuSfFPN$6~=(urTJ21;=o*bn_{>?aUa?9g#5*OGN?~-0Ndv z9yL70aGmBQc!@cF4(sqT``rudYhS@u>bwI##lyIW-S{~_7_Tz3U*pbS;yhl*oA@=} z!W;NEev7y9rU>KrVkZ6|qWGg&ia(1c{6%cQU&U?so46f+7kT{CPP+|G4iwW)SjDvC zFXu`!Lx_Jfc?Lz!PC!3YF+@H;Vam=DI$2%hS`%&jjLZ}}Dd%J6J6OkDR1j70YE@NL zl%r}vtAY!QYUuuJB<@`07N(d?GKHE~SKlD-u~Qm@+yMN`=IPvDrO1;glAWvpzq0qg QPXAdAI3rkgegpsi0bGi2GXMYp diff --git a/experimental/bin/processing/mode/experimental/VariableInspector.class b/experimental/bin/processing/mode/experimental/VariableInspector.class deleted file mode 100644 index 0d6855fbda963eb8fe7aa08d2b0eb48f20db3034..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11029 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 Xv4ecR#q~pcexq;_|M*MfoACc1zh@pb diff --git a/experimental/bin/processing/mode/experimental/VariableInspector.form b/experimental/bin/processing/mode/experimental/VariableInspector.form deleted file mode 100755 index a5f40f1d3..000000000 --- a/experimental/bin/processing/mode/experimental/VariableInspector.form +++ /dev/null @@ -1,53 +0,0 @@ - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/experimental/bin/processing/mode/experimental/VariableNode.class b/experimental/bin/processing/mode/experimental/VariableNode.class deleted file mode 100644 index 4f9319a7f98e2489e9daf1d4531cfef8f53deed6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7225 zcmb7J34D~r75~rfW_Oc(2|2hD5D-Lj08wgd(*PxeAkj@?NeCcX{gQl;rJLP!4~}Z- zU2WCghtS$ut)(s0UJ{J-Qk4S$CC&`3N?G& zy>45=C3pYu9&aQYL0Dml?Cx*N>=P;3wCA<;=CX2ckZZZC;0*4#qWhYyeV6z3Z|hS~ zJqlG_sbnVWCbL6sBIgCq@IQr0&DX!-vhJ?IAnk-gh2HAivZZr}?5Mo3p1#5EOS`wo z9vv}Un_~T)`d%>4wV}U1*4^1BT(rMj%j(+Psjrpg^$iSe>FK*vc<7DciS?U}NS?&S>Ps_q9bGR#Aw<}G7m;bE*np@#p0PPPs<15yOVA< zm*)M8ryZ}+^b=*MV;x0=CtOO;DlGlq{N!E}PsX$B6rRy!)akOYF3qrWwoA=J^t_Ap zQGp;uh1un+wau&tY9W`B;Bv$iBD^uEONpWCiGb}iZ~BD|IaZ37 zj^YaTL0q@lh_@uQYe@xqu|*<1pfG2KyfqIA$5sbJ*v1sQ6BAx?RAJ>ztY?{NwRVVz z9S*LK$qi?8lS!6(dS(c11kX`e;5W%=+~V!>*bO6ICH7!k3Tkr{DQVSQ zBEd4HSYp^f)*X3HuRCEYsnX`AkL?@{pa;;W>ER~i4Kcol1HIF(9xZZeA3ka=$^&RUTA z6aTnk3z${Z9UbiwbW&K=^d#D-d8iU^!mSa!nVnGVcWHG8hs5_FB}?_c#lc%~n`G3> zUSVNsxv9!0#5HL{HNwitTd47~-qv#wK!tDp^xZX2!j*L$#+f@Eyc2gZ)$y#CcC#r~ z$=rNPYjr(#zoQaI@SX_XO;jqno>C=}84_7kt`qiKjrN~DBu{FEa^l>2+PtIvReXIwa`%W6VsLA$NNmBB209}3) z?sYJQ`=ZSKIz~AfyhuM{yf%aIT`Y` za*oZxjPg3<`S_HB68EOZ&J=Xfh-^H1y3N5 z$Vh`b6N%Kmj1DMEHG(fGH2Tp=zlA<In{Q9@T;Ne}3m zMZ)(Z2S3(T8_#r)Ph=0UUR`cOeuLjd@LLvTu^+oqi3I0do@X5V9)BQ`c*Q#kZGOxsGI!XQ zMt4=I5`{lGc&)sR^7e1^G9&5ugeZvOuL=<0|GR^K;GZliJrBxLcfM8Q8@=-?{9{)X z|6*vCtmRXx@NWl~ikdJ7058p6vqDPBdD^7j(W6mJDZ;PfSj|V%_sr+3nOGSdmvRoL zz46puwpxg7ELg50jtb$vN|fO(LRJV#7_T*qEbe?|%W0LPs%7RY8{s1(&ndxuD{VD; z9_PIiK<7K`pQEi^e8r5KP3hFQX?z-@=7q^o>%HR)MCx`uSEj~03LK6*CkIX-$W>3KeSKIsM@ z-AHPIk6uXn93Q=i^kN^qg!H*SdMQFObJLfQOyT-BCvW|m^Ev%&(SEk_oZ!m!Lhh|X z8-HF%>N>_H#NUfsPT-=J`*HD(6L{KjT+-5d9PKSDj-#Vx<#DY2pce8>{%k~;KRbEp z=?u&U%tjYY+K5Hy#(JK#7;)s-K#GF3S!^q=#L$3ViHVYsF5WbTtmBECg+;SZUxnV? z%+&R0`Ew0dL4H_1Xi$ct{!LbvI42s*TJFKx4{#BHm>$-fF)hY13|5SiKIIN0q8jLc z7_v_;pF*-_51k3_gG8EX}DgWBBHaJU{~xo$%>wqq%FFo8Q6hpVs^ zS7R8@hKFmAB3`9Q*G z8s!nVk0Edx0WK&boez^PpnQxwrpI_}#u)R%lZ|l?mC5C!63mBC7C0u0y38bUhfo$W z)PYG{N2<(FFVIxDCSu4JS+d-aFR^5WAzx;$h7EOtJ&YRi73R=VH`znWdy6@=T3&4r zD~|<_(Oi?4U95K?!MuzUL{e<`3AT8e)tzCj=Wr4B@7xUIjdGa!Ty0`(az>T;Wuf(mm35RhD-i24;J$Q{Tghy>IB{S7<%B!lXtE;Q@ zKZcPnnF(u2PTHsE>k_K!qHoR%TTiJkzw1l%8P;f^Yj&rb;)yw<_ zXlyOhdP(aP-Wb5PR`$T*qS$Ii6L<%~_YTzHPM_#nYaFlRZA1|f{dU|=fdlPD1szteC_xl6NZ{KJ%z34e6Gu(^rnNypJ)7N7+($YsE{n zG0O^ym&tb<3oZP6}H~6bK&6!=zmjSm(>xNjw~5n!l`A4@3vUcNpiHvq$9Y>x!RgzAZm~s930x z;1Ps`leU_!UByZRPBBLhv1>oaLE!UD-10qd}wX*1;ej#^NK!DNkp^rOW@p8S8i- zZ5QZqBybB`rerb{gfKILMmtr(uZt_Sd{Y9BmCsw$zfuR@(cQ^+OoeERNlKbhM0TUd zUNEJ?((PrvD^8(eg_=^)fYxLRQe%;tg=$rUI#r7XRqxZ-SkTyLQGmd&bq93OY2O+m ztPJYMZB~E3?I;;5h`Xv>aJQ(~xTuj=&7+I+skp%x#`=QNdh4cQ7@lH<-)x<`NQ7(9 z?LC6oD=g@i#jGN3XxROgW>b#x`8=2QLM_HTwFHa!`vSET7pi4G6E3nQ%tOSQAoX7> zI9r7van^ur4c(r_z?rabwQkq6K7gwZ5u932;wn2unqV8BFQCvS%u+2rg*64AYgDbO zqeM~2*>o0F)EAtWH$d90hF(3$qM6OtNFB$6#mX@%R ztxt-nzl-^y>8U;=!v!P5`NYTC)y{EHAs>nN*EhM5qY0dT>?i`RATa z{yC=$wQ3{k)h5hWm*NuDgLZW}wyR!Tsrvb4>$CVtZ=3ej^xDCKuLtonosjw1r55Oy z)YL*n*g1_ktc5C7Q>7LY2jvr?4aUQ^7GmKwHSU5jas3oQSDaPn@KFd}o8PCavfn;^ zpWey-+DWz8@GmI3W(xQk{=Ms3G%A;W#T&+D%FNvcielFM0QZ;Z=Ua?!NB9hfL{8Df WFs06L%d7)R4Lu=A?sJ7(E&VSi%Gmw@ diff --git a/experimental/bin/processing/mode/experimental/XQConsoleToggle.class b/experimental/bin/processing/mode/experimental/XQConsoleToggle.class deleted file mode 100644 index 1cb46898d07e7f56922f9dc9c2b671fddb377a09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3551 zcmbtW`*Rc575>(eyp~wN*cbu{PEta#Bo{TNX&!b6Mi!u0HpUVHhqh)dUF3z;uDZLz zhPJd#+a!Iz(g$tQcjG>i4!Fh4G}BIh?%&iY{qAbDmJMNOs~PF;p67QS_Zl#)qQ@5)kBbFP&G3vtdbTf1Abk??9+Y}|cRx^c)sDi#r`W1aS z<1R^+muGZKm@2vzJSOQGeaXv+E7Z3SvWfMxtOFtxhp9^=4h#Oc3aE8Z!83 zz|xo7ED{>JVR>1*-mopUo%Fx%{)D497LAHKnk=h$k=+;eXqz)K5ywjyS8-Iq?vOhx ztSWDTRXa)Bu7+dCDj1l|&CQo`=SuVA)1~})AwOQsPqRVyt^3=k_td1gIx5ZQG#m#d zcbCTtXL6ft%%7Ux*p#OhE{Tdan!p(H8eYaE)9eawgKY&P9bs-@xxU+u9trHp6ihK+ zVUStdw4KP^w^wc^P{53=!D)8Fkl##2oKaCyup<<2XG}vGXL&;j$+y6)c0ln-Ot-Ar zoQ79$o}w)0S)=ML`j;y&S)bJKDaneHb<)4z2^4WbgN_9%Tr^B`mPz0}V@t@Uh}=yc zelbp*Lc>MW*ek~h<5`)S_3XENOCdwUB`Fl27@wV-KQTK#C#j}}y03cnWWJP>Fl-GC ze41Ve;snSH$NuT*v1**Q$=b)Ec5}uKS3$u9Lz{^slF>T}WQv zNNuFb#=e&~GC}UvqNi6bPw9VO!@vY%o_;$D<%7$1X;QNG{EXVO(d|$=)HjeD8TtIaVZ{i0G*KV@J zLAZvUnc)@pm_MP{S)m`{hKe7zhr~vr*Zn+{F9>*W= zmG0CyzaCxB^*uS`isSqY;BD0B`24kkJz?)`)>Y6dPR{ZKCox;euT^f@@Z?*I$wBS9 z@^!1voE4_f{r5!CZaNil+>m=}=cXxtNIIp7yv049HFcVBRlLhkLNxczALg3F4^Q&$ zMEH%N8++tpXM?jrx>cJfbdB%WI+-G_c^@8sJE<>aR?_BRa7Mf!FZ z=c0XkihstVw@B^6KK^!778u5$PXXT^#}k46b;?K!gQ+`sG8Mgz{qpBPDt#LVQ~Pcs znHs*0^t!DaC1ISEHB^@jMCSb?<3W+h>uW4eg@@!^)U>}txAuQCZm%% z;Q9)%NUIX*w)gS$T<`JJUy!_m!#7FkjN>KWht`q|d?@&MXeC3Av=U3L;n~f~*$(Ac zsQmoHDWABn@(YaIuZ1$rdPeB^R{9?pn;KrlkyT8r;Uoh&a05rv@1ro+H+=`E)-aon zM2PPkzn@sce2Y~HS!$cUiYkRy@N9Y&i~o(pjs*PS_T=DE&pIE{1pUD!#-bf0M4VQP?^P%i&DTYu60w^*?yU|tn0N=m; z-+V9A_f`77_W$^PC-nV{%nHBC`rK&Epz9s>l`u9Xh)rRY+x7lH6R$qdL>GSN`~E%t Qz*GK3`6K^lz88)E2c35qqW}N^ diff --git a/experimental/bin/processing/mode/experimental/XQErrorTable$1.class b/experimental/bin/processing/mode/experimental/XQErrorTable$1.class deleted file mode 100644 index 0293992a3ab632183565de6134093913e959dbfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1630 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 diff --git a/experimental/bin/processing/mode/experimental/XQPreprocessor$XQASTVisitor.class b/experimental/bin/processing/mode/experimental/XQPreprocessor$XQASTVisitor.class deleted file mode 100644 index 14124898af257bd5a09d9c77fd5d777e0fe13631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2947 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 D@MhQ$ From 3fafd0f04b09c787778d3cdf9f13331b39fb6e90 Mon Sep 17 00:00:00 2001 From: James Gilles Date: Thu, 31 Jul 2014 13:06:25 -0400 Subject: [PATCH 42/47] Use PApplet.exit() instead of System.exit(0) for present mode stop button --- core/src/processing/core/PApplet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/processing/core/PApplet.java b/core/src/processing/core/PApplet.java index 0cb8b3a66..79d4e95df 100755 --- a/core/src/processing/core/PApplet.java +++ b/core/src/processing/core/PApplet.java @@ -10916,7 +10916,7 @@ public class PApplet extends Applet label.addMouseListener(new MouseAdapter() { @Override public void mousePressed(java.awt.event.MouseEvent e) { - System.exit(0); + applet.exit(); } }); frame.add(label); From 083bdbfe0b83d15cb5d235ac276d352cac84ab08 Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 31 Jul 2014 14:30:16 -0400 Subject: [PATCH 43/47] cleaning up after i18n patch --- app/src/processing/app/tools/SerialFixer.java | 90 ------------------- core/todo.txt | 8 ++ todo.txt | 15 +--- 3 files changed, 12 insertions(+), 101 deletions(-) delete mode 100644 app/src/processing/app/tools/SerialFixer.java diff --git a/app/src/processing/app/tools/SerialFixer.java b/app/src/processing/app/tools/SerialFixer.java deleted file mode 100644 index 6e5e1612d..000000000 --- a/app/src/processing/app/tools/SerialFixer.java +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2012 The Processing Foundation - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -package processing.app.tools; - -import java.io.File; - -import javax.swing.JOptionPane; - -import processing.app.Base; -import processing.app.Editor; -import processing.app.Language; -import processing.core.PApplet; - - -public class SerialFixer implements Tool { - Editor editor; - - - public String getMenuTitle() { - return Language.text("menu.tools.fix_the_serial_lbrary"); - } - - - public void init(Editor editor) { - this.editor = editor; - } - - - public void run() { - final String primary = - "Attempt to fix common serial port problems?"; - final String secondary = - "Click “OK†to perform additional installation steps to enable " + - "the Serial library. An administrator password will be required."; - - int result = - JOptionPane.showConfirmDialog(editor, - " " + - " " + - "" + primary + "" + - "

" + secondary + "

", - "Commander", - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.QUESTION_MESSAGE); - - if (result == JOptionPane.OK_OPTION) { - String shellScript = "mkdir -p /var/lock && chmod 777 /var/lock"; - String appleScript = - "do shell script \"" + shellScript + "\" with administrator privileges"; - PApplet.exec(new String[] { "osascript", "-e", appleScript }); - } - editor.statusNotice("Finished."); - } - - - static public boolean isNeeded() { - if (Base.isMacOS()) { - File lockFolder = new File("/var/lock"); - if (!lockFolder.exists() || - !lockFolder.canRead() || - !lockFolder.canWrite() || - !lockFolder.canExecute()) { - return true; - } - } - return false; - } -} \ No newline at end of file diff --git a/core/todo.txt b/core/todo.txt index a2cfc1f18..290d32746 100644 --- a/core/todo.txt +++ b/core/todo.txt @@ -1,7 +1,15 @@ 0230 core (3.0a3) +earlier +X PShape disableStyle() does not work with createShape() +X https://github.com/processing/processing/issues/1523 X multisampled offscreen PGraphics don't clear the screen properly X https://github.com/processing/processing/issues/2679 +X this was done midway through the 3.0a2 release process + +pull requests +X call applet.exit() instead of System.exit() from Present Mode's 'stop' +X https://github.com/processing/processing/pull/2680 applet/component diff --git a/todo.txt b/todo.txt index b0075b6dc..f968399b8 100644 --- a/todo.txt +++ b/todo.txt @@ -4,11 +4,13 @@ pulls X Add polling to detect file system changes X https://github.com/processing/processing/issues/1939 X https://github.com/processing/processing/pull/2628 +X huge i18n patch +X https://github.com/processing/processing/issues/632 +X https://github.com/processing/processing/pull/2084 +X http://code.google.com/p/processing/issues/detail?id=593 pending -_ huge i18n patch -_ https://github.com/processing/processing/pull/2084 _ look at the sound library https://github.com/wirsing/ProcessingSound _ sound is not yet supported on Windows _ glw? lwjgl? retina jogl? @@ -915,15 +917,6 @@ _ add proper copyright and license information for all included projects _ http://code.google.com/p/processing/issues/detail?id=185 _ list of license issues _ http://code.google.com/p/processing/issues/detail?id=575 -_ Internationalization -_ http://code.google.com/p/processing/issues/detail?id=593 -_ l10n, i18n of environment/core -_ http://docs.oracle.com/javase/tutorial/i18n/format/messageintro.html -_ http://docs.oracle.com/javase/tutorial/i18n/format/numberFormat.html -_ http://docs.oracle.com/javase/tutorial/i18n/format/choiceFormat.html -_ http://docs.oracle.com/javase/tutorial/i18n/format/messageFormat.html -_ http://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html -_ http://docs.oracle.com/javase/tutorial/i18n/intro/checklist.html _ write up code guidelines for project _ make proper Eclipse style prefs to reinforce _ write up guidelines for modes From 90358c22caeafb032732e9d2b7b1f58bb98d013b Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 31 Jul 2014 14:31:47 -0400 Subject: [PATCH 44/47] and that --- app/.settings/org.eclipse.jdt.core.prefs | 377 +++++++++++++++++++++ core/.settings/org.eclipse.jdt.core.prefs | 381 ++++++++++++++++++++++ todo.txt | 1 + 3 files changed, 759 insertions(+) create mode 100644 app/.settings/org.eclipse.jdt.core.prefs create mode 100644 core/.settings/org.eclipse.jdt.core.prefs diff --git a/app/.settings/org.eclipse.jdt.core.prefs b/app/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..da7176c57 --- /dev/null +++ b/app/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,377 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=ignore +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=warning +org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error +org.eclipse.jdt.core.compiler.problem.nullReference=ignore +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=18 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=18 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=18 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=36 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=18 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=18 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=1 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=false +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=1 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=1 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=2 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=80 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=true +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=space +org.eclipse.jdt.core.formatter.tabulation.size=2 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true diff --git a/core/.settings/org.eclipse.jdt.core.prefs b/core/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..8e54f4641 --- /dev/null +++ b/core/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,381 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=ignore +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=disabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error +org.eclipse.jdt.core.compiler.problem.nullReference=warning +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=18 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=18 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=18 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=36 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=18 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=18 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=1 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=false +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=1 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=1 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=2 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=80 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=true +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=space +org.eclipse.jdt.core.formatter.tabulation.size=2 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true diff --git a/todo.txt b/todo.txt index f968399b8..bf095a65b 100644 --- a/todo.txt +++ b/todo.txt @@ -8,6 +8,7 @@ X huge i18n patch X https://github.com/processing/processing/issues/632 X https://github.com/processing/processing/pull/2084 X http://code.google.com/p/processing/issues/detail?id=593 +_ need to make sure the .properties files are read properly as UTF-8 pending From d2e0f3727e3a5f3783a6dc315199e237b63cc1ca Mon Sep 17 00:00:00 2001 From: tyfkda Date: Fri, 1 Aug 2014 07:05:30 +0900 Subject: [PATCH 45/47] Add Japanese language --- app/src/processing/app/Language.java | 2 + .../app/languages/PDE_ja.properties | 215 ++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 app/src/processing/app/languages/PDE_ja.properties diff --git a/app/src/processing/app/Language.java b/app/src/processing/app/Language.java index e83285ddf..d98d2eaa4 100644 --- a/app/src/processing/app/Language.java +++ b/app/src/processing/app/Language.java @@ -42,6 +42,8 @@ public class Language { this.languages.put(Locale.ENGLISH.getLanguage(), Locale.ENGLISH.getDisplayLanguage(Locale.ENGLISH)); // de, German, Deutsch this.languages.put(Locale.GERMAN.getLanguage(), Locale.GERMAN.getDisplayLanguage(Locale.GERMAN)); + // ja, Japanese + this.languages.put(Locale.JAPANESE.getLanguage(), Locale.JAPANESE.getDisplayLanguage(Locale.JAPANESE)); // Set default language if (!this.languages.containsKey(this.language)) { diff --git a/app/src/processing/app/languages/PDE_ja.properties b/app/src/processing/app/languages/PDE_ja.properties new file mode 100644 index 000000000..15db2f96a --- /dev/null +++ b/app/src/processing/app/languages/PDE_ja.properties @@ -0,0 +1,215 @@ + + +# --------------------------------------- +# JAPANESE (ja) +# --------------------------------------- + + +# --------------------------------------- +# Menu + +# | File | Edit | Sketch | Library | Tools | Help | +# | File | +menu.file = ファイル +menu.file.new = æ–°è¦ +menu.file.open = é–‹ã... +menu.file.sketchbook = スケッãƒãƒ–ック +menu.file.recent = 最近開ã„ãŸãƒ•ァイル +menu.file.examples = サンプル... +menu.file.close = é–‰ã˜ã‚‹ +menu.file.save = ä¿å­˜ +menu.file.save_as = åå‰ã‚’付ã‘ã¦ä¿å­˜... +menu.file.export_application = エクスãƒãƒ¼ãƒˆ +menu.file.page_setup = ページ設定 +menu.file.print = プリント +menu.file.preferences = 設定 +menu.file.quit = 終了 + +# | File | Edit | Sketch | Library | Tools | Help | +# | Edit | +menu.edit = 編集 +menu.edit.undo = 戻㙠+menu.edit.redo = やり直㗠+menu.edit.cut = 切りå–り +menu.edit.copy = 複製 +menu.edit.copy_as_html = HTMLã¨ã—ã¦ã‚³ãƒ”ー +menu.edit.paste = 貼り付㑠+menu.edit.select_all = ã™ã¹ã¦é¸æŠž +menu.edit.auto_format = 自動フォーマット +menu.edit.comment_uncomment = コメント/アンコメント +menu.edit.increase_indent = インデントを上ã’ã‚‹ +menu.edit.decrease_indent = インデントを下ã’ã‚‹ +menu.edit.find = 検索... +menu.edit.find_next = 次を探㙠+menu.edit.find_previous = å‰ã‚’探㙠+menu.edit.use_selection_for_find = é¸æŠžã‚’æ¤œç´¢ + +# | File | Edit | Sketch | Library | Tools | Help | +# | Sketch | +menu.sketch = スケッム+menu.sketch.show_sketch_folder = スケッãƒãƒ•ォルダを開ã +menu.sketch.add_file = ファイルを追加... + +# | File | Edit | Sketch | Library | Tools | Help | +# | Library | +menu.library = ライブラリã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ... +menu.library.add_library = ライブラリã®è¿½åŠ ... +menu.library.contributed = 貢献 +menu.library.no_core_libraries = モードã«ã‚³ã‚¢ãƒ©ã‚¤ãƒ–ラリãŒã‚りã¾ã›ã‚“ + +# | File | Edit | Sketch | Library | Tools | Help | +# | Tools | +menu.tools = ツール +menu.tools.create_font = フォント作æˆ... +menu.tools.color_selector = è‰²é¸æŠž +menu.tools.archive_sketch = スケッãƒã‚’アーカイブ +menu.tools.fix_the_serial_lbrary = シリアルライブラリを修正 +menu.tools.install_processing_java = "processing-java"をインストール +menu.tools.add_tool = ツールを追加... + +# | File | Edit | Sketch | Library | Tools | Help | +# | Help | +menu.help = ヘルプ +menu.help.about = About Processing +menu.help.environment = 環境 +menu.help.reference = å‚ç…§ +menu.help.find_in_reference = å‚ç…§ã‹ã‚‰æŽ¢ã™ +menu.help.online = オンライン +menu.help.getting_started = ã¯ã˜ã‚ã®ä¸€æ­© +menu.help.getting_started.url = http://processing.org/learning/gettingstarted/ +menu.help.troubleshooting = å•題解決 +menu.help.troubleshooting.url = http://wiki.processing.org/w/Troubleshooting +menu.help.faq = よãã‚ã‚‹è³ªå• +menu.help.faq.url = http://wiki.processing.org/w/FAQ +menu.help.foundation = The Processing Foundation +menu.help.foundation.url = http://processing.org/foundation/ +menu.help.visit = Processing.orgを訪ã­ã‚‹ +menu.help.visit.url = http://processing.org/ + + +# --------------------------------------- +# Basics + +# Buttons +prompt.yes = Yes +prompt.no = No +prompt.cancel = Cancel +prompt.ok = OK +prompt.browse = Browse +prompt.export = Export + + +# --------------------------------------- +# Frames + +# Open (Frame) +open = Open a Processing sketch... + +# Save (Frame) +save = Save sketch folder as... +save.title = Do you want to save changes to this sketch
before closing? +save.hint = If you don't save, your changes will be lost. +save.btn.save = Save +save.btn.dont_save = Don't Save + +# Preferences (Frame) +preferences = 設定 +preferences.button.width = 80 +preferences.requires_restart = Processingã®å†èµ·å‹•ãŒå¿…è¦ã§ã™ +preferences.sketchbook_location = スケッãƒãƒ–ックã®å ´æ‰€ +preferences.language = 言語 +preferences.editor_and_console_font = エディタ・コンソールフォント +preferences.editor_font_size = エディタフォントサイズ +preferences.console_font_size = コンソールフォントサイズ +preferences.background_color = プレゼンテーションã®èƒŒæ™¯è‰² +preferences.use_smooth_text = エディタウィンドウã§ã‚¹ãƒ ãƒ¼ã‚ºãƒ†ã‚­ã‚¹ãƒˆã‚’使ㆠ+preferences.enable_complex_text_input = 複雑ãªãƒ†ã‚­ã‚¹ãƒˆå…¥åŠ›ã‚’æœ‰åŠ¹ã«ã™ã‚‹ +preferences.enable_complex_text_input_example = 例:日本語 +preferences.continuously_check = エラーã®ãŸã‚ã«ç¶™ç¶šçš„ã«ãƒã‚§ãƒƒã‚¯ã™ã‚‹ +preferences.show_warnings = ワーニングを表示ã™ã‚‹ +preferences.code_completion = コード補完 +preferences.trigger_with = èµ·å‹• +preferences.cmd_space = スペース +preferences.increase_max_memory = æœ‰åŠ¹ãªæœ€å¤§ãƒ¡ãƒ¢ãƒªã‚’増や㙠+preferences.delete_previous_folder_on_export = エクスãƒãƒ¼ãƒˆæ™‚ã«ä»¥å‰ã®ãƒ•ォルダを削除ã™ã‚‹ +preferences.hide_toolbar_background_image = タブ/ツールãƒãƒ¼ã®èƒŒæ™¯ç”»åƒã‚’éš ã™ +preferences.check_for_updates_on_startup = 起動時ã«ã‚¢ãƒƒãƒ—デートをãƒã‚§ãƒƒã‚¯ã™ã‚‹ +preferences.run_sketches_on_display = ディスプレイã§ã‚¹ã‚±ãƒƒãƒã‚’実行ã™ã‚‹ +preferences.run_sketches_on_display.tip = \ +スケッãƒãŒæœ€åˆã«ç½®ã‹ã‚Œã‚‹ãƒ‡ã‚£ã‚¹ãƒ—レイをセットã—ã¦ä¸‹ã•ã„
\ +通常ã€ã‚¹ã‚±ãƒƒãƒã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’å‹•ã‹ã™ã¨ã€åŒã˜ä½ç½®ã«
\ +å†ã³é–‹ã‹ã‚Œã¾ã™ãŒã€ãƒ—レゼント(フルスクリーン)モードã§
\ +実行ã—ã¦ã„ã‚‹å ´åˆã€ã“ã®ãƒ‡ã‚£ã‚¹ãƒ—レイãŒå¸¸ã«ä½¿ç”¨ã•れã¾ã™ã€‚ +preferences.automatically_associate_pde_files = 自動的ã«.pdeファイルをProcessingã«é–¢é€£ä»˜ã‘ã‚‹ +preferences.launch_programs_in = プログラムを起動ã™ã‚‹ +preferences.launch_programs_in.mode = モード +preferences.file = ã•らãªã‚‹è¨­å®šã¯æ¬¡ã®ãƒ•ァイルを直接編集ã™ã‚‹ã“ã¨ã§å¯èƒ½ã§ã™ +preferences.file.hint = ProcessingãŒèµ·å‹•ã—ã¦ã„ãªã„時ã®ã¿ç·¨é›†ã§ãã¾ã™ + +# Sketchbook Location (Frame) +preferences.sketchbook_location = スケッãƒãƒ–ックã®å ´æ‰€ + +# Export (Frame) +export = エクスãƒãƒ¼ãƒˆã‚ªãƒ—ション +export.platforms = プラットフォーム +export.options = オプション +export.options.fullscreen = フルスクリーン(プレゼンテーションモード) +export.options.show_stop_button = åœæ­¢ãƒœã‚¿ãƒ³ã‚’表示ã™ã‚‹ +export.description.line1 = é¸æŠžã•れãŸãƒ—ラットフォーム用ã®ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã® +export.description.line2 = アプリケーションã¨ã—ã¦ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ã¾ã™ + +# Find (Frame) +find = 検索 +find.find = 検索: +find.replace_with = ç½®ãæ›ãˆã‚‹: +find.ignore_case = ケースを無視 +find.all_tabs = ã™ã¹ã¦ã®ã‚¿ãƒ– +find.wrap_around = 折り返㗠+find.btn.replace_all = ã™ã¹ã¦ç½®æ› +find.btn.replace = ç½®æ› +find.btn.find_and_replace = æ¤œç´¢ï¼†ç½®æ› +find.btn.previous = å‰ +find.btn.find = 検索 + +# Find in reference (Frame) +find_in_reference = リファレンスã‹ã‚‰æŽ¢ã™ + +# Library Manager (Frame) +library.category = カテゴリ: +library.filter_your_search = 検索をフィルタ... + +# File (Frame) +file = スケッãƒã«ã‚³ãƒ”ーã™ã‚‹ç”»åƒã‚„ãã®ä»–ã®ãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžã—ã¦ä¸‹ã•ã„ + +# Create Font (Frame) +create_font = ãƒ•ã‚©ãƒ³ãƒˆä½œæˆ + +# Color Selector (Frame) +color_selector = è‰²é¸æŠž + +# Archive Sketch (Frame) +archive_sketch = スケッãƒã‚’アーカイブã™ã‚‹... + + +# --------------------------------------- +# Toolbar + +# [Run/Present] [Stop] [New] [Open] [Save] +# スケッãƒã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼éƒ¨åˆ†ã¯æ—¥æœ¬èªžãŒè¡¨ç¤ºã§ããªã„ãŸã‚ã€è‹±èªžã®ã¾ã¾ã«ã™ã‚‹ +toolbar.run = Run +toolbar.present = Present +toolbar.stop = Stop +toolbar.new = New +toolbar.open = Open +toolbar.save = Save +toolbar.export_application = Export Application +toolbar.add_mode = モードã®è¿½åŠ ... + +# [Tab1] [Tab2] [v] +editor.header.new_tab = æ–°è¦ã‚¿ãƒ– +editor.header.rename = リãƒãƒ¼ãƒ  +editor.header.delete = 削除 +editor.header.previous_tab = å‰ã®ã‚¿ãƒ– +editor.header.next_tab = 次ã®ã‚¿ãƒ– +editor.header.delete.warning.title = Yeah, no. +editor.header.delete.warning.text = 最後ã«é–‹ã„ãŸã‚¹ã‚±ãƒƒãƒã®æœ€å¾Œã®ã‚¿ãƒ–ã¯å‰Šé™¤ã§ãã¾ã›ã‚“ From 4abf16acc56d2910f7a85ff3ba6d8602f9f16518 Mon Sep 17 00:00:00 2001 From: AmnonOwed Date: Fri, 1 Aug 2014 00:10:31 +0200 Subject: [PATCH 46/47] Fix #2004 - Indent breaks when hitting enter before spaces --- app/src/processing/mode/java/PdeKeyListener.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/processing/mode/java/PdeKeyListener.java b/app/src/processing/mode/java/PdeKeyListener.java index c1ba6c30d..ec4655507 100644 --- a/app/src/processing/mode/java/PdeKeyListener.java +++ b/app/src/processing/mode/java/PdeKeyListener.java @@ -304,9 +304,11 @@ public class PdeKeyListener { //textarea.setSelectionStart(origIndex + 1); textarea.setSelectionEnd(textarea.getSelectionStop() - spaceCount); textarea.setSelectedText("\n"); + textarea.setCaretPosition(textarea.getCaretPosition() + extraCount + spaceCount); } else { String insertion = "\n" + spaces(spaceCount); textarea.setSelectedText(insertion); + textarea.setCaretPosition(textarea.getCaretPosition() + extraCount); } // not gonna bother handling more than one brace From 728d9df4ec1b5b720122104ac8599e5be1f6b5fb Mon Sep 17 00:00:00 2001 From: tyfkda Date: Fri, 1 Aug 2014 07:15:50 +0900 Subject: [PATCH 47/47] Fix missing "=" in .properties file --- app/src/processing/app/languages/PDE.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/processing/app/languages/PDE.properties b/app/src/processing/app/languages/PDE.properties index 09414dada..cf133b207 100644 --- a/app/src/processing/app/languages/PDE.properties +++ b/app/src/processing/app/languages/PDE.properties @@ -164,7 +164,7 @@ find.find = Find: find.replace_with = Replace with: find.ignore_case = Ignore Case find.all_tabs = All Tabs -find.wrap_around Wrap Around +find.wrap_around = Wrap Around find.btn.replace_all = Replace All find.btn.replace = Replace find.btn.find_and_replace = Find & Replace