diff --git a/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java b/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java index ec5c09181e0..865de577630 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java +++ b/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java @@ -28,10 +28,12 @@ import cc.arduino.contributions.libraries.ContributedLibraryReleases; import cc.arduino.contributions.ui.InstallerTableCell; import processing.app.Base; +import processing.app.PreferencesData; import processing.app.Theme; public class ContributedLibraryTableCellJPanel extends JPanel { + final JButton moreInfoButton; final JButton installButton; final Component installButtonPlaceholder; final JComboBox downgradeChooser; @@ -40,12 +42,15 @@ public class ContributedLibraryTableCellJPanel extends JPanel { final JPanel buttonsPanel; final JPanel inactiveButtonsPanel; final JLabel statusLabel; + private final String moreInfoLbl = tr("More info"); public ContributedLibraryTableCellJPanel(JTable parentTable, Object value, boolean isSelected) { super(); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + moreInfoButton = new JButton(moreInfoLbl); + moreInfoButton.setVisible(false); installButton = new JButton(tr("Install")); int width = installButton.getPreferredSize().width; installButtonPlaceholder = Box.createRigidArea(new Dimension(width, 1)); @@ -79,6 +84,11 @@ public ContributedLibraryTableCellJPanel(JTable parentTable, Object value, buttonsPanel.setOpaque(false); buttonsPanel.add(Box.createHorizontalStrut(7)); + if (PreferencesData.getBoolean("ide.accessible")) { + buttonsPanel.add(moreInfoButton); + buttonsPanel.add(Box.createHorizontalStrut(5)); + buttonsPanel.add(Box.createHorizontalStrut(15)); + } buttonsPanel.add(downgradeChooser); buttonsPanel.add(Box.createHorizontalStrut(5)); buttonsPanel.add(downgradeButton); @@ -141,7 +151,7 @@ public ContributedLibraryTableCellJPanel(JTable parentTable, Object value, String name = selected.getName(); String author = selected.getAuthor(); // String maintainer = selectedLib.getMaintainer(); - String website = selected.getWebsite(); + final String website = selected.getWebsite(); String sentence = selected.getSentence(); String paragraph = selected.getParagraph(); // String availableVer = selectedLib.getVersion(); @@ -188,7 +198,7 @@ public ContributedLibraryTableCellJPanel(JTable parentTable, Object value, desc += "
"; } if (author != null && !author.isEmpty()) { - desc += format("More info", website); + desc = setButtonOrLink(moreInfoButton, desc, moreInfoLbl, website); } desc += ""; @@ -215,6 +225,25 @@ public ContributedLibraryTableCellJPanel(JTable parentTable, Object value, } } + // same function as in ContributedPlatformTableCellJPanel - is there a utils file this can move to? + private String setButtonOrLink(JButton button, String desc, String label, String url) { + boolean accessibleIDE = PreferencesData.getBoolean("ide.accessible"); + String retString = desc; + + if (accessibleIDE) { + button.setVisible(true); + button.addActionListener(e -> { + Base.openURL(url); + }); + } + else { + // if not accessible IDE, keep link the same EXCEPT that now the link text is translated! + retString += format("{1}
", url, label); + } + + return retString; + } + // TODO Make this a method of Theme private JTextPane makeNewDescription() { if (getComponentCount() > 0) { diff --git a/app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCellJPanel.java b/app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCellJPanel.java index 7a2750a7eb9..d59538823f7 100644 --- a/app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCellJPanel.java +++ b/app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCellJPanel.java @@ -57,11 +57,14 @@ import cc.arduino.contributions.packages.ContributedPlatform; import cc.arduino.contributions.ui.InstallerTableCell; import processing.app.Base; +import processing.app.PreferencesData; import processing.app.Theme; @SuppressWarnings("serial") public class ContributedPlatformTableCellJPanel extends JPanel { + final JButton moreInfoButton; + final JButton onlineHelpButton; final JButton installButton; final JButton removeButton; final Component removeButtonPlaceholder; @@ -72,6 +75,8 @@ public class ContributedPlatformTableCellJPanel extends JPanel { final JPanel buttonsPanel; final JPanel inactiveButtonsPanel; final JLabel statusLabel; + private final String moreInfoLbl = tr("More Info"); + private final String onlineHelpLbl = tr("Online Help"); public ContributedPlatformTableCellJPanel() { super(); @@ -79,6 +84,10 @@ public ContributedPlatformTableCellJPanel() { { installButton = new JButton(tr("Install")); + moreInfoButton = new JButton(moreInfoLbl); + moreInfoButton.setVisible(false); + onlineHelpButton = new JButton(onlineHelpLbl); + onlineHelpButton.setVisible(false); int width = installButton.getPreferredSize().width; installButtonPlaceholder = Box.createRigidArea(new Dimension(width, 1)); } @@ -115,6 +124,13 @@ public ContributedPlatformTableCellJPanel() { buttonsPanel.setOpaque(false); buttonsPanel.add(Box.createHorizontalStrut(7)); + if (PreferencesData.getBoolean("ide.accessible")) { // only add the buttons if needed + buttonsPanel.add(onlineHelpButton); + buttonsPanel.add(Box.createHorizontalStrut(5)); + buttonsPanel.add(moreInfoButton); + buttonsPanel.add(Box.createHorizontalStrut(5)); + buttonsPanel.add(Box.createHorizontalStrut(15)); + } buttonsPanel.add(downgradeChooser); buttonsPanel.add(Box.createHorizontalStrut(5)); buttonsPanel.add(downgradeButton); @@ -149,6 +165,25 @@ public ContributedPlatformTableCellJPanel() { add(Box.createVerticalStrut(15)); } + // same function as in ContributedLibraryTableCellJPanel - is there a utils file this can move to? + private String setButtonOrLink(JButton button, String desc, String label, String url) { + boolean accessibleIDE = PreferencesData.getBoolean("ide.accessible"); + String retString = desc; + + if (accessibleIDE) { + button.setVisible(true); + button.addActionListener(e -> { + Base.openURL(url); + }); + } + else { + // if not accessible IDE, keep link the same EXCEPT that now the link text is translated! + retString += " " + format("{1}
", url, label); + } + + return retString; + } + void update(JTable parentTable, Object value, boolean isSelected, boolean hasBuiltInRelease) { ContributedPlatformReleases releases = (ContributedPlatformReleases) value; @@ -216,16 +251,17 @@ void update(JTable parentTable, Object value, boolean isSelected, } else if (selected.getParentPackage().getHelp() != null) { help = selected.getParentPackage().getHelp(); } + if (help != null) { String url = help.getOnline(); if (url != null && !url.isEmpty()) { - desc += " " + format("Online help
", url); + desc = setButtonOrLink(onlineHelpButton, desc, onlineHelpLbl, url); } } String url = selected.getParentPackage().getWebsiteURL(); if (url != null && !url.isEmpty()) { - desc += " " + format("More info", url); + desc = setButtonOrLink(moreInfoButton, desc, moreInfoLbl, url); } desc += ""; diff --git a/app/src/cc/arduino/contributions/ui/InstallerJDialog.java b/app/src/cc/arduino/contributions/ui/InstallerJDialog.java index 9aa0cd70e2f..dd2998bc441 100644 --- a/app/src/cc/arduino/contributions/ui/InstallerJDialog.java +++ b/app/src/cc/arduino/contributions/ui/InstallerJDialog.java @@ -133,6 +133,7 @@ protected void onFilter(String[] _filters) { updateIndexFilter(filters, categoryFilter); } }; + filterField.getAccessibleContext().setAccessibleDescription(tr("Search Filter")); // Add cut/copy/paste contextual menu to the search filter input field. JPopupMenu menu = new JPopupMenu();