diff --git a/app/.settings/org.eclipse.jdt.core.prefs b/app/.settings/org.eclipse.jdt.core.prefs index da7176c57..aee82626e 100644 --- a/app/.settings/org.eclipse.jdt.core.prefs +++ b/app/.settings/org.eclipse.jdt.core.prefs @@ -5,9 +5,10 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota 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.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -92,7 +93,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa 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.compiler.source=1.7 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 diff --git a/app/src/processing/app/EditorButton.java b/app/src/processing/app/EditorButton.java new file mode 100644 index 000000000..71a205545 --- /dev/null +++ b/app/src/processing/app/EditorButton.java @@ -0,0 +1,268 @@ +/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Part of the Processing project - http://processing.org + Copyright (c) 2015 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 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. + + 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. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +package processing.app; + +import java.awt.*; +import java.awt.event.*; + +import javax.swing.*; + + +abstract public class EditorButton extends JComponent +implements MouseListener, MouseMotionListener, ActionListener { + static public final int DIM = 46; + + /** Button's description. */ + String title; + /** Description of alternate behavior when shift is down. */ + String titleShift; + + boolean pressed; + boolean selected; + boolean rollover; + JLabel rolloverLabel; + boolean shift; + +// boolean enabled; +// State state; +// Map imageMap = new HashMap<>(); + + Image enabledImage; + Image disabledImage; + Image selectedImage; + Image rolloverImage; + Image pressedImage; + + + public EditorButton(Mode mode, String name, String title) { + this(mode, name, title, title); + } + + + public EditorButton(Mode mode, String name, String title, String titleShift) { + this.title = title; + this.titleShift = titleShift; + + final int res = Toolkit.highResDisplay() ? 2 : 1; + + disabledImage = mode.loadImage(name + "-enabled-" + res + "x.png"); + enabledImage = mode.loadImage(name + "-enabled-" + res + "x.png"); + selectedImage = mode.loadImage(name + "-enabled-" + res + "x.png"); + pressedImage = mode.loadImage(name + "-enabled-" + res + "x.png"); + rolloverImage = mode.loadImage(name + "-enabled-" + res + "x.png"); + + if (disabledImage == null) { + disabledImage = enabledImage; + } + if (selectedImage == null) { + selectedImage = enabledImage; + } + if (pressedImage == null) { + pressedImage = enabledImage; // could be selected image + } + if (rolloverImage == null) { + rolloverImage = enabledImage; // could be pressed image + } + } + + + @Override + public void paintComponent(Graphics g) { + Image image = enabledImage; + if (!isEnabled()) { + image = disabledImage; + } else if (selected) { + image = selectedImage; + } else if (pressed) { + image = pressedImage; + } else if (rollover) { + image = rolloverImage; + } + g.drawImage(image, 0, 0, DIM, DIM, this); + } + + +// public String toString() { +// switch (this) { +// case DISABLED: return "disabled"; +// case ENABLED: return "enabled"; +// case SELECTED: return "selected"; +// case ROLLOVER: return "rollover"; +// case PRESSED: return "pressed"; +// +//// for (State bs : State.values()) { +//// Image image = mode.loadImage(bs.getFilename(name)); +//// if (image != null) { +//// imageMap.put(bs, image); +//// } +//// } +//// +//// enabled = true; +//// //updateState(); +//// setState(State.ENABLED); +// } + + + public void setRolloverLabel(JLabel label) { + rolloverLabel = label; + } + + + @Override + public void mouseClicked(MouseEvent e) { + if (isEnabled()) { + shift = e.isShiftDown(); + actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, + null, e.getModifiers())); + } + } + + + public boolean isShiftDown() { + return shift; + } + + + @Override + public void mousePressed(MouseEvent e) { + if (isEnabled()) { + pressed = true; + repaint(); + } + } + + + @Override + public void mouseReleased(MouseEvent e) { + if (isEnabled()) { + pressed = false; + repaint(); + } + } + + + @Override + public void mouseEntered(MouseEvent e) { + rollover = true; + if (rolloverLabel != null) { + rolloverLabel.setText(e.isShiftDown() ? titleShift : title); + } + repaint(); + } + + + @Override + public void mouseExited(MouseEvent e) { + rollover = false; + if (rolloverLabel != null) { + rolloverLabel.setText(""); + } + repaint(); + } + + + @Override + public void mouseDragged(MouseEvent e) { } + + + @Override + public void mouseMoved(MouseEvent e) { } + + + abstract public void actionPerformed(ActionEvent e); + +// @Override +// public void actionPerformed(ActionEvent e) { +// // To be overridden by all subclasses +// } + + + @Override + public Dimension getPreferredSize() { + return new Dimension(DIM, DIM); + } + + + @Override + public Dimension getMinimumSize() { + return getPreferredSize(); + } + + + @Override + public Dimension getMaximumSize() { + return getPreferredSize(); + } + + +// public Image getImage() { +// return imageMap.get(state); +// } +// +// +//// protected void updateState() { +//// state = ButtonState.ENABLED; +//// } +// +// +// public void setEnabled(boolean enabled) { +// this.enabled = enabled; +// if (enabled) { +// if (state == State.DISABLED) { +// setState(State.ENABLED); +// } +// } else { +// if (state == State.ENABLED) { +// setState(State.DISABLED); +// } +// } +// } +// +// +// public void setState(State state) { +// this.state = state; +// } + + +// public enum State { +// DISABLED, ENABLED, SELECTED, ROLLOVER, PRESSED; +// +// /** +// * @param name the root name +// * @return +// */ +// public String getFilename(String name) { +// final int res = Toolkit.highResDisplay() ? 2 : 1; +// return name + "-" + toString() + "-" + res + "x.png"; +// } +// +// public String toString() { +// switch (this) { +// case DISABLED: return "disabled"; +// case ENABLED: return "enabled"; +// case SELECTED: return "selected"; +// case ROLLOVER: return "rollover"; +// case PRESSED: return "pressed"; +// } +// return null; +// } +// } +} \ No newline at end of file diff --git a/app/src/processing/app/EditorToolbar.java b/app/src/processing/app/EditorToolbar.java index 39ee8fe86..2a8fa264e 100644 --- a/app/src/processing/app/EditorToolbar.java +++ b/app/src/processing/app/EditorToolbar.java @@ -32,7 +32,7 @@ import javax.swing.event.*; /** - * run/stop/etc buttons for the ide + * Run/Stop button plus Mode selection */ public abstract class EditorToolbar extends JComponent implements MouseInputListener, KeyListener { diff --git a/app/src/processing/app/Mode.java b/app/src/processing/app/Mode.java index a014ec5a1..46b3e4492 100644 --- a/app/src/processing/app/Mode.java +++ b/app/src/processing/app/Mode.java @@ -1194,8 +1194,17 @@ public abstract class Mode { * Get an image object from the mode folder. */ public Image loadImage(String filename) { - return loadIcon(filename).getImage(); + ImageIcon icon = loadIcon(filename); + if (icon != null) { + return icon.getImage(); + } + return null; } + + +// public EditorButton loadButton(String name) { +// return new EditorButton(this, name); +// } //public Settings getTheme() { diff --git a/java/.settings/org.eclipse.jdt.core.prefs b/java/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..d17b6724d --- /dev/null +++ b/java/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +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.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/java/src/processing/mode/java/DebugToolbar.java b/java/src/processing/mode/java/DebugToolbar.java index 192d8075c..f43e52257 100644 --- a/java/src/processing/mode/java/DebugToolbar.java +++ b/java/src/processing/mode/java/DebugToolbar.java @@ -20,293 +20,920 @@ along with this program; if not, write to the Free Software Foundation, Inc. package processing.mode.java; -import java.awt.Graphics; -import java.awt.Image; -import java.awt.event.MouseEvent; -import java.awt.image.BufferedImage; +import java.awt.event.ActionEvent; import java.util.logging.Level; import java.util.logging.Logger; +import javax.swing.Box; +import javax.swing.JLabel; +import javax.swing.JPanel; + import processing.app.Base; -import processing.app.Editor; +import processing.app.EditorButton; import processing.app.Language; -import processing.app.Toolkit; - -import processing.mode.java.pdex.XQConsoleToggle; +import processing.app.Mode; -/** - * Custom toolbar for the editor window. Preserves original button numbers - * ({@link JavaToolbar#RUN}, {@link JavaToolbar#STOP}, {@link JavaToolbar#NEW}, - * {@link JavaToolbar#OPEN}, {@link JavaToolbar#SAVE}, {@link JavaToolbar#EXPORT}) - * which can be used e.g. in {@link #activate} and - * {@link #deactivate}. - * - * @author Martin Leopold - */ -public class DebugToolbar extends JavaToolbar { +/** Toolbar for the top of the DebugTray */ +public class DebugToolbar extends JPanel { //Component implements MouseInputListener, KeyListener { + static public final int GAP = 13; + // preserve original button id's, but re-define so they are accessible // (they are used by DebugEditor, so they want to be public) - static protected final int RUN = 100; // change this, to be able to get it's name via getTitle() - static protected final int DEBUG = JavaToolbar.RUN; +// static final int BUTTON_GAP = 13; +// static final int BUTTON_DIM = 46; + +// static protected final int RUN = 100; // change this, to be able to get it's name via getTitle() +// static protected final int DEBUG = JavaToolbar.RUN; - static protected final int CONTINUE = 101; - static protected final int STEP = 102; - static protected final int TOGGLE_BREAKPOINT = 103; - static protected final int TOGGLE_VAR_INSPECTOR = 104; - - static protected final int STOP = JavaToolbar.STOP; +// static protected final int CONTINUE = 101; +// static protected final int STEP = 102; +// static protected final int BREAKPOINT = 103; +// static protected final int TOGGLE_VAR_INSPECTOR = 104; +// static protected final int STOP = JavaToolbar.STOP; // static protected final int NEW = JavaToolbar.NEW; // static protected final int OPEN = JavaToolbar.OPEN; // static protected final int SAVE = JavaToolbar.SAVE; // static protected final int EXPORT = JavaToolbar.EXPORT; - - // the sequence of button ids. (this maps button position = index to button ids) - static protected final int[] buttonSequence = { - DEBUG, CONTINUE, STEP, STOP, TOGGLE_BREAKPOINT, TOGGLE_VAR_INSPECTOR -// NEW, OPEN, SAVE, EXPORT - }; +// enum DebugButton { +// CONTINUE, STEP, BREAKPOINT; +// +// String getTitle(boolean shift) { +// if (this == CONTINUE) { +// return Language.text("toolbar.debug.continue"); +// } else if (this == BREAKPOINT) { +// return Language.text("toolbar.debug.toggle_breakpoints"); +// } else if (this == STEP) { +// if (shift) { +// return Language.text("toolbar.debug.step_into"); +// } else { +// return Language.text("toolbar.debug.step"); +// } +// } +// } +// +// String getFilename() { +// if (this == CONTINUE) { +// return "debug-continue"; +// } else if (this == STEP) { +// return "debug-step"; +// } else if (this == BREAKPOINT) { +// return "debug-breakpoint"; +// } +// throw new IllegalStateException("How did you get here?"); +// } +// } + +// // the sequence of button ids. (this maps button position = index to button ids) +// static protected final int[] buttonSequence = { +// CONTINUE, STEP, BREAKPOINT +//// DEBUG, CONTINUE, STEP, STOP, TOGGLE_BREAKPOINT, TOGGLE_VAR_INSPECTOR +//// NEW, OPEN, SAVE, EXPORT +// }; - public DebugToolbar(Editor editor, Base base) { - super(editor, base); - } +// /** Width of each toolbar button. */ +// static final int BUTTON_WIDTH = 27; +// /** Height of each toolbar button. */ +//// static final int BUTTON_HEIGHT = 32; +// /** The amount of space between groups of buttons on the toolbar. */ +// static final int BUTTON_GAP = 5; +// /** Size (both width and height) of the buttons in the source image. */ +// static final int BUTTON_IMAGE_SIZE = 33; + + // DISABLED, ENABLED, SELECTED, ROLLOVER, PRESSED + // if no selected available, defaults to pressed (or vice versa?) + +// static final int INACTIVE = 0; +// static final int ROLLOVER = 1; +// static final int ACTIVE = 2; +// protected Base base; +// protected Editor editor; +// protected Mode mode; +// +// Image offscreen; +// int width, height; +// +// Color bgColor; +// +// protected Button rollover; +// +// Font statusFont; +// int statusAscent; +// Color statusColor; +// +// boolean shiftPressed; + +// // what the mode indicator looks like +// Color modeButtonColor; +// Font modeTextFont; +// int modeTextAscent; +// Color modeTextColor; +// String modeTitle; +// int modeX1, modeY1; +// int modeX2, modeY2; +// JMenu modeMenu; - public Image[][] loadDebugImages() { - int res = Toolkit.highResDisplay() ? 2 : 1; +// protected List