Skip to content

Commit

Permalink
Merge pull request #9764 from Lionel642/issue_9761
Browse files Browse the repository at this point in the history
When svg files are not loadable, revert to png file for throttles icons.
  • Loading branch information
danielb987 committed May 10, 2021
2 parents db6105c + 4d31afc commit beb95cf
Show file tree
Hide file tree
Showing 48 changed files with 229 additions and 75 deletions.
31 changes: 19 additions & 12 deletions build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -187,18 +187,25 @@
<pathelement location="${libdir}/org-openide-util-lookup-RELEASE113.jar"/>
<pathelement location="${libdir}/org-openide-util-RELEASE113.jar"/>
<pathelement location="${libdir}/apiguardian-api-1.1.0.jar"/>
<pathelement location="${libdir}/batik-transcoder-1.6-1.jar"/>
<pathelement location="${libdir}/batik-svg-dom-1.6-1.jar"/>
<pathelement location="${libdir}/batik-dom-1.6-1.jar"/>
<pathelement location="${libdir}/batik-util-1.6-1.jar"/>
<pathelement location="${libdir}/batik-css-1.6-1.jar"/>
<pathelement location="${libdir}/batik-ext-1.6-1.jar"/>
<pathelement location="${libdir}/batik-xml-1.6-1.jar"/>
<pathelement location="${libdir}/batik-bridge-1.6-1.jar"/>
<pathelement location="${libdir}/batik-gvt-1.6-1.jar"/>
<pathelement location="${libdir}/batik-script-1.6-1.jar"/>
<pathelement location="${libdir}/batik-awt-util-1.6-1.jar"/>
<pathelement location="${libdir}/batik-parser-1.6-1.jar"/>
<pathelement location="${libdir}/batik-transcoder-1.14.jar"/>
<pathelement location="${libdir}/batik-svg-dom-1.14.jar"/>
<pathelement location="${libdir}/batik-dom-1.14.jar"/>
<pathelement location="${libdir}/batik-util-1.14.jar"/>
<pathelement location="${libdir}/batik-css-1.14.jar"/>
<pathelement location="${libdir}/batik-ext-1.14.jar"/>
<pathelement location="${libdir}/batik-xml-1.14.jar"/>
<pathelement location="${libdir}/batik-bridge-1.14.jar"/>
<pathelement location="${libdir}/batik-gvt-1.14.jar"/>
<pathelement location="${libdir}/batik-script-1.14.jar"/>
<pathelement location="${libdir}/batik-awt-util-1.14.jar"/>
<pathelement location="${libdir}/batik-parser-1.14.jar"/>
<pathelement location="${libdir}/batik-anim-1.14.jar"/>
<pathelement location="${libdir}/batik-i18n-1.14.jar"/>
<pathelement location="${libdir}/batik-constants-1.14.jar"/>
<pathelement location="${libdir}/batik-shared-resources-1.14.jar"/>
<pathelement location="${libdir}/batik-svggen-1.14.jar"/>
<pathelement location="${libdir}/xmlgraphics-commons-2.6.jar"/>
<pathelement location="${libdir}/xml-apis-ext-1.3.04.jar"/>
</path>
<pathconvert property="runtime.class.jars" refid="runtime.class.path"/>

Expand Down
219 changes: 177 additions & 42 deletions java/src/jmri/jmrit/throttle/ControlPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import jmri.util.FileUtil;
import jmri.util.MouseInputAdapterInstaller;

import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
import org.apache.batik.anim.dom.SAXSVGDocumentFactory;
import org.apache.batik.transcoder.*;
import org.apache.batik.transcoder.image.ImageTranscoder;
import org.apache.batik.util.XMLResourceDescriptor;
Expand Down Expand Up @@ -46,18 +46,36 @@ public class ControlPanel extends JInternalFrame implements java.beans.PropertyC
private JButton idleButton;
private JPanel buttonPanel;
private JPanel topButtonPanel;
private Document forwardButtonIcon;
private Document forwardSelectedButtonIcon;
private Document forwardRollButtonIcon;
private Document reverseButtonIcon;
private Document reverseSelectedButtonIcon;
private Document reverseRollButtonIcon;
private Document idleButtonIcon;
private Document idleSelectedButtonIcon;
private Document idleRollButtonIcon;
private Document stopButtonIcon;
private Document stopSelectedButtonIcon;
private Document stopRollButtonIcon;

private Document forwardButtonSvgIcon;
private Document forwardSelectedButtonSvgIcon;
private Document forwardRollButtonSvgIcon;
private ImageIcon forwardButtonImageIcon;
private ImageIcon forwardSelectedButtonImageIcon;
private ImageIcon forwardRollButtonImageIcon;

private Document reverseButtonSvgIcon;
private Document reverseSelectedButtonSvgIcon;
private Document reverseRollButtonSvgIcon;
private ImageIcon reverseButtonImageIcon;
private ImageIcon reverseSelectedButtonImageIcon;
private ImageIcon reverseRollButtonImageIcon;

private Document idleButtonSvgIcon;
private Document idleSelectedButtonSvgIcon;
private Document idleRollButtonSvgIcon;
private ImageIcon idleButtonImageIcon;
private ImageIcon idleSelectedButtonImageIcon;
private ImageIcon idleRollButtonImageIcon;

private Document stopButtonSvgIcon;
private Document stopSelectedButtonSvgIcon;
private Document stopRollButtonSvgIcon;
private ImageIcon stopButtonImageIcon;
private ImageIcon stopSelectedButtonImageIcon;
private ImageIcon stopRollButtonImageIcon;


private boolean internalAdjust = false; // protecting the speed slider, continuous slider and spinner when doing internal adjust

private JPopupMenu popupMenu;
Expand Down Expand Up @@ -509,19 +527,72 @@ private void resizeButtons() {
h = DEFAULT_BUTTON_SIZE * 2;
}
float f = Math.min( Math.floorDiv(w*2,5), h );
forwardButton.setIcon(scaleTo(forwardButtonIcon, f));
forwardButton.setSelectedIcon(scaleTo(forwardSelectedButtonIcon, f));
forwardButton.setRolloverIcon(scaleTo(forwardRollButtonIcon, f));
reverseButton.setIcon(scaleTo(reverseButtonIcon, f));
reverseButton.setSelectedIcon(scaleTo(reverseSelectedButtonIcon, f));
reverseButton.setRolloverIcon(scaleTo(reverseRollButtonIcon, f));
if (forwardButtonSvgIcon != null ) {
forwardButton.setIcon(scaleTo(forwardButtonSvgIcon, f));
} else {
forwardButton.setIcon(scaleTo(forwardButtonImageIcon, (int)f));
}
if (forwardSelectedButtonSvgIcon != null) {
forwardButton.setSelectedIcon(scaleTo(forwardSelectedButtonSvgIcon, f));
} else {
forwardButton.setSelectedIcon(scaleTo(forwardSelectedButtonImageIcon, (int)f));
}
if (forwardRollButtonSvgIcon!=null) {
forwardButton.setRolloverIcon(scaleTo(forwardRollButtonSvgIcon, f));
} else {
forwardButton.setRolloverIcon(scaleTo(forwardRollButtonImageIcon, (int)f));
}
if (reverseButtonSvgIcon!=null) {
reverseButton.setIcon(scaleTo(reverseButtonSvgIcon, f));
} else {
reverseButton.setIcon(scaleTo(reverseButtonImageIcon, (int)f));
}
if (reverseSelectedButtonSvgIcon != null) {
reverseButton.setSelectedIcon(scaleTo(reverseSelectedButtonSvgIcon, f));
} else {
reverseButton.setSelectedIcon(scaleTo(reverseSelectedButtonImageIcon, (int)f));
}
if (reverseRollButtonSvgIcon!=null) {
reverseButton.setRolloverIcon(scaleTo(reverseRollButtonSvgIcon, f));
} else {
reverseButton.setRolloverIcon(scaleTo(reverseRollButtonImageIcon, (int)f));
}

f = Math.min( Math.floorDiv(w,5), h/2 );
idleButton.setIcon(scaleTo(idleButtonIcon, f));
idleButton.setSelectedIcon(scaleTo(idleSelectedButtonIcon, f));
idleButton.setRolloverIcon(scaleTo(idleRollButtonIcon, f));
stopButton.setIcon(scaleTo(stopButtonIcon, f));
stopButton.setSelectedIcon(scaleTo(stopSelectedButtonIcon, f));
stopButton.setRolloverIcon(scaleTo(stopRollButtonIcon, f));
if (idleButtonSvgIcon!=null) {
idleButton.setIcon(scaleTo(idleButtonSvgIcon, f));
} else {
idleButton.setIcon(scaleTo(idleButtonImageIcon, (int)f));
}
if (idleSelectedButtonSvgIcon!=null) {
idleButton.setSelectedIcon(scaleTo(idleSelectedButtonSvgIcon, f));
} else {
idleButton.setSelectedIcon(scaleTo(idleSelectedButtonImageIcon, (int)f));
}
if (idleRollButtonSvgIcon != null) {
idleButton.setRolloverIcon(scaleTo(idleRollButtonSvgIcon, f));
} else {
idleButton.setRolloverIcon(scaleTo(idleRollButtonImageIcon, (int)f));
}
if (stopButtonSvgIcon!=null) {
stopButton.setIcon(scaleTo(stopButtonSvgIcon, f));
} else {
stopButton.setIcon(scaleTo(stopButtonImageIcon, (int)f));
}
if (stopSelectedButtonSvgIcon!=null) {
stopButton.setSelectedIcon(scaleTo(stopSelectedButtonSvgIcon, f));
} else {
stopButton.setSelectedIcon(scaleTo(stopSelectedButtonImageIcon, (int)f));
}
if (stopRollButtonSvgIcon!=null) {
stopButton.setRolloverIcon(scaleTo(stopRollButtonSvgIcon, f));
} else {
stopButton.setRolloverIcon(scaleTo(stopRollButtonImageIcon, (int)f));
}
}

private ImageIcon scaleTo(ImageIcon imic, int s ) {
return new ImageIcon(imic.getImage().getScaledInstance(s, s, Image.SCALE_SMOOTH));
}

private ImageIcon scaleTo(Document svgImage, Float f ) {
Expand Down Expand Up @@ -626,14 +697,46 @@ private void initGUI() {
forwardButton = new JRadioButton();
reverseButton = new JRadioButton();
try {
forwardButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirFwdOff.svg").toString());
forwardSelectedButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirFwdOn.svg").toString());
forwardRollButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirFwdRoll.svg").toString());
reverseButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirBckOff.svg").toString());
reverseSelectedButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirBckOn.svg").toString());
reverseRollButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirBckRoll.svg").toString());
} catch (IOException ex) {
log.debug("while loading directions buttons svg: {}", ex.getMessage());
forwardButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirFwdOff.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
forwardButtonSvgIcon = null;
forwardButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/dirFwdOff64.png"));
}
try {
forwardSelectedButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirFwdOn.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
forwardSelectedButtonSvgIcon = null;
forwardSelectedButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/dirFwdOn64.png"));
}
try {
forwardRollButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirFwdRoll.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
forwardRollButtonSvgIcon = null;
forwardRollButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/dirFwdRoll64.png"));
}
try {
reverseButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirBckOff.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
reverseButtonSvgIcon = null;
reverseButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/dirBckOff64.png"));
}
try {
reverseSelectedButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirBckOn.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
reverseSelectedButtonSvgIcon = null;
reverseSelectedButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/dirBckOn64.png"));
}
try {
reverseRollButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/dirBckRoll.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
reverseRollButtonSvgIcon = null;
reverseRollButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/dirBckRoll64.png"));
}

layoutSliderPanel();
Expand Down Expand Up @@ -793,14 +896,46 @@ private void initGUI() {
stopButton = new JButton();
idleButton = new JButton();
try {
stopButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/estop.svg").toString());
stopSelectedButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/estopOn.svg").toString());
stopRollButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/estopRoll.svg").toString());
idleButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/stop.svg").toString());
idleSelectedButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/stopOn.svg").toString());
idleRollButtonIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/stopRoll.svg").toString());
} catch (IOException ex) {
log.debug("while loading stop/idle buttons svg: {}", ex.getMessage());
stopButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/estop.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
stopButtonSvgIcon = null;
stopButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/estop64.png"));
}
try {
stopSelectedButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/estopOn.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
stopSelectedButtonSvgIcon = null;
stopSelectedButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/estopOn64.png"));
}
try {
stopRollButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/estopRoll.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
stopRollButtonSvgIcon = null;
stopRollButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/estopRoll64.png"));
}
try {
idleButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/stop.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
idleButtonSvgIcon = null;
idleButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/stop64.png"));
}
try {
idleSelectedButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/stopOn.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
idleSelectedButtonSvgIcon = null;
idleSelectedButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/stopOn64.png"));
}
try {
idleRollButtonSvgIcon = createSVGDocument(FileUtil.findURI("resources/icons/throttles/stopRoll.svg").toString());
} catch (Exception ex) {
log.debug("Issue loading svg icon, reverting to png : {}", ex.getMessage());
idleRollButtonSvgIcon = null;
idleRollButtonImageIcon = new ImageIcon(FileUtil.findURL("resources/icons/throttles/stopRoll64.png"));
}

stopButton.addActionListener((ActionEvent e) -> {
Expand Down Expand Up @@ -1286,7 +1421,7 @@ public BufferedImage getImage() {
}
@Override
public void writeImage(BufferedImage bi, TranscoderOutput to) throws TranscoderException {
throw new UnsupportedOperationException("Not supported yet.");
//not required here, do nothing
}
}

Expand Down
28 changes: 24 additions & 4 deletions java/src/jmri/jmrit/throttle/FunctionPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -189,8 +189,18 @@ public void applyPreferences() {
}
for (int i = 0; i < functionButtons.length; i++) {
if ((i == 0) && preferences.isUsingExThrottle() && preferences.isUsingFunctionIcon()) {
functionButtons[i].setIconPath("resources/icons/functionicons/svg/lightsOff.svg");
functionButtons[i].setSelectedIconPath("resources/icons/functionicons/svg/lightsOn.svg");
try {
functionButtons[i].setIconPath("resources/icons/functionicons/svg/lightsOff.svg");
functionButtons[i].setSelectedIconPath("resources/icons/functionicons/svg/lightsOn.svg");
} catch (Exception e) {
log.debug("Exception loading svg icon : "+e.getMessage() );
} finally {
if ((functionButtons[i].getIcon() == null) || (functionButtons[i].getSelectedIcon() == null)) {
log.debug("Issue loading svg icon, reverting to png" );
functionButtons[i].setIconPath("resources/icons/functionicons/transparent_background/lights_off.png");
functionButtons[i].setSelectedIconPath("resources/icons/functionicons/transparent_background/lights_on.png");
}
}
} else {
functionButtons[i].setIconPath(null);
functionButtons[i].setSelectedIconPath(null);
Expand Down Expand Up @@ -254,8 +264,18 @@ public void resetFnButtons() {
: Throttle.getFunctionString(i) );
functionButtons[i].setDisplay(true);
if ((i == 0) && preferences.isUsingExThrottle() && preferences.isUsingFunctionIcon()) {
functionButtons[i].setIconPath("resources/icons/functionicons/svg/lightsOff.svg");
functionButtons[i].setSelectedIconPath("resources/icons/functionicons/svg/lightsOn.svg");
try {
functionButtons[i].setIconPath("resources/icons/functionicons/svg/lightsOff.svg");
functionButtons[i].setSelectedIconPath("resources/icons/functionicons/svg/lightsOn.svg");
} catch (Exception e) {
log.debug("Exception loading svg icon : "+e.getMessage() );
} finally {
if ((functionButtons[i].getIcon() == null) || (functionButtons[i].getSelectedIcon() == null)) {
log.debug("Issue loading svg icon, reverting to png" );
functionButtons[i].setIconPath("resources/icons/functionicons/transparent_background/lights_off.png");
functionButtons[i].setSelectedIconPath("resources/icons/functionicons/transparent_background/lights_on.png");
}
}
} else {
functionButtons[i].setIconPath(null);
functionButtons[i].setSelectedIconPath(null);
Expand Down
Loading

0 comments on commit beb95cf

Please sign in to comment.