From b32dc935064f0546d47ca30f7069905c05bd4342 Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Tue, 17 Mar 2015 17:47:07 +0100 Subject: [PATCH] Ported UX of library manager to core manager --- .../filters/InstalledPredicate.java | 17 ++ .../libraries/filters/InstalledPredicate.java | 17 -- .../ui/ContributedLibraryTableCell.java | 82 ++++---- .../ui/DropdownInstalledLibrariesItem.java | 20 -- .../libraries/ui/LibraryManagerUI.java | 8 +- .../ui/ContributedPlatformTableCell.java | 189 +++++++++++++----- .../DropdownAllItem.java} | 9 +- .../ui/DropdownInstalledContributionItem.java | 20 ++ .../ContributedPlatformComparator.java | 15 ++ 9 files changed, 237 insertions(+), 140 deletions(-) create mode 100644 app/src/cc/arduino/contributions/filters/InstalledPredicate.java delete mode 100644 app/src/cc/arduino/contributions/libraries/filters/InstalledPredicate.java delete mode 100644 app/src/cc/arduino/contributions/libraries/ui/DropdownInstalledLibrariesItem.java rename app/src/cc/arduino/contributions/{libraries/ui/DropdownAllLibrariesItem.java => ui/DropdownAllItem.java} (50%) create mode 100644 app/src/cc/arduino/contributions/ui/DropdownInstalledContributionItem.java create mode 100644 arduino-core/src/cc/arduino/contributions/packages/ContributedPlatformComparator.java diff --git a/app/src/cc/arduino/contributions/filters/InstalledPredicate.java b/app/src/cc/arduino/contributions/filters/InstalledPredicate.java new file mode 100644 index 000000000..81770fa98 --- /dev/null +++ b/app/src/cc/arduino/contributions/filters/InstalledPredicate.java @@ -0,0 +1,17 @@ +package cc.arduino.contributions.filters; + +import cc.arduino.contributions.packages.DownloadableContribution; +import com.google.common.base.Predicate; + +public class InstalledPredicate implements Predicate { + @Override + public boolean apply(DownloadableContribution input) { + return input.isInstalled(); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof DownloadableContribution; + } + +} diff --git a/app/src/cc/arduino/contributions/libraries/filters/InstalledPredicate.java b/app/src/cc/arduino/contributions/libraries/filters/InstalledPredicate.java deleted file mode 100644 index 86e03d140..000000000 --- a/app/src/cc/arduino/contributions/libraries/filters/InstalledPredicate.java +++ /dev/null @@ -1,17 +0,0 @@ -package cc.arduino.contributions.libraries.filters; - -import cc.arduino.contributions.libraries.ContributedLibrary; -import com.google.common.base.Predicate; - -public class InstalledPredicate implements Predicate { - @Override - public boolean apply(ContributedLibrary input) { - return input.isInstalled(); - } - - @Override - public boolean equals(Object obj) { - return obj instanceof InstalledPredicate; - } - -} diff --git a/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCell.java b/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCell.java index 5fb3def28..56e5114c9 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCell.java +++ b/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCell.java @@ -31,7 +31,7 @@ package cc.arduino.contributions.libraries.ui; import cc.arduino.contributions.libraries.ContributedLibrary; import cc.arduino.contributions.libraries.ContributedLibraryComparator; import cc.arduino.contributions.libraries.filters.BuiltInPredicate; -import cc.arduino.contributions.libraries.filters.InstalledPredicate; +import cc.arduino.contributions.filters.InstalledPredicate; import cc.arduino.contributions.libraries.filters.OnlyUpstreamReleasePredicate; import cc.arduino.contributions.VersionComparator; import cc.arduino.contributions.ui.InstallerTableCell; @@ -201,9 +201,7 @@ public class ContributedLibraryTableCell extends InstallerTableCell { statusLabel = new JLabel(" "); inactiveButtonsPanel.add(statusLabel); - - inactiveButtonsPanel.add(Box.createGlue()); - inactiveButtonsPanel.add(Box.createVerticalStrut(height)); + inactiveButtonsPanel.add(Box.createHorizontalStrut(15)); panel.add(inactiveButtonsPanel); } @@ -211,11 +209,11 @@ public class ContributedLibraryTableCell extends InstallerTableCell { panel.add(Box.createVerticalStrut(15)); } - protected void onRemove(ContributedLibrary selectedLib) { + protected void onRemove(ContributedLibrary selected) { // Empty } - protected void onInstall(ContributedLibrary selectedLib, ContributedLibrary installedLib) { + protected void onInstall(ContributedLibrary selected, ContributedLibrary installed) { // Empty } @@ -251,52 +249,52 @@ public class ContributedLibraryTableCell extends InstallerTableCell { editorValue = (LibrariesIndexTableModel.ContributedLibraryReleases) value; setEnabled(true); - final ContributedLibrary installedLibrary = editorValue.getInstalled(); + final ContributedLibrary installed = editorValue.getInstalled(); - List libraries = new LinkedList(Collections2.filter(editorValue.releases, new OnlyUpstreamReleasePredicate())); - List uninstalledLibraries = new LinkedList(Collections2.filter(libraries, Predicates.not(new InstalledPredicate()))); + List releases = new LinkedList(Collections2.filter(editorValue.releases, new OnlyUpstreamReleasePredicate())); + List uninstalledReleases = new LinkedList(Collections2.filter(releases, Predicates.not(new InstalledPredicate()))); - List installedBuiltIn = new LinkedList(Collections2.filter(libraries, Predicates.and(new InstalledPredicate(), new BuiltInPredicate()))); + List installedBuiltIn = new LinkedList(Collections2.filter(releases, Predicates.and(new InstalledPredicate(), new BuiltInPredicate()))); - if (installedLibrary != null && !installedBuiltIn.contains(installedLibrary)) { - uninstalledLibraries.addAll(installedBuiltIn); + if (installed != null && !installedBuiltIn.contains(installed)) { + uninstalledReleases.addAll(installedBuiltIn); } - Collections.sort(uninstalledLibraries, new ReverseComparator(new ContributedLibraryComparator())); + Collections.sort(uninstalledReleases, new ReverseComparator(new ContributedLibraryComparator())); downgradeChooser.removeAllItems(); downgradeChooser.addItem(_("Select version")); - final List uninstalledPreviousLibraries = Lists.newLinkedList(); - final List uninstalledNewerLibraries = Lists.newLinkedList(); + final List uninstalledPreviousReleases = Lists.newLinkedList(); + final List uninstalledNewerReleases = Lists.newLinkedList(); - Lists.newLinkedList(Lists.transform(uninstalledLibraries, new Function() { + Lists.newLinkedList(Lists.transform(uninstalledReleases, new Function() { @Override public ContributedLibrary apply(ContributedLibrary input) { - if (installedLibrary == null || VersionComparator.VERSION_COMPARATOR.greaterThan(installedLibrary.getVersion(), input.getVersion())) { - uninstalledPreviousLibraries.add(input); + if (installed == null || VersionComparator.VERSION_COMPARATOR.greaterThan(installed.getVersion(), input.getVersion())) { + uninstalledPreviousReleases.add(input); } else { - uninstalledNewerLibraries.add(input); + uninstalledNewerReleases.add(input); } return input; } })); - for (ContributedLibrary release : uninstalledNewerLibraries) { + for (ContributedLibrary release : uninstalledNewerReleases) { downgradeChooser.addItem(release); } - for (ContributedLibrary release : uninstalledPreviousLibraries) { + for (ContributedLibrary release : uninstalledPreviousReleases) { downgradeChooser.addItem(release); } - downgradeChooser.setVisible(installedLibrary != null && (!uninstalledPreviousLibraries.isEmpty() || uninstalledNewerLibraries.size() > 1)); - downgradeButton.setVisible(installedLibrary != null && (!uninstalledPreviousLibraries.isEmpty() || uninstalledNewerLibraries.size() > 1)); + downgradeChooser.setVisible(installed != null && (!uninstalledPreviousReleases.isEmpty() || uninstalledNewerReleases.size() > 1)); + downgradeButton.setVisible(installed != null && (!uninstalledPreviousReleases.isEmpty() || uninstalledNewerReleases.size() > 1)); versionToInstallChooser.removeAllItems(); - for (ContributedLibrary release : uninstalledLibraries) { + for (ContributedLibrary release : uninstalledReleases) { versionToInstallChooser.addItem(release); } - versionToInstallChooser.setVisible(installedLibrary == null && uninstalledLibraries.size() > 1); + versionToInstallChooser.setVisible(installed == null && uninstalledReleases.size() > 1); Component component = getUpdatedCellComponent(value, true, row, !installedBuiltIn.isEmpty()); component.setBackground(new Color(218, 227, 227)); //#dae3e3 @@ -311,18 +309,18 @@ public class ContributedLibraryTableCell extends InstallerTableCell { return panel; } - ContributedLibrary selectedLib = releases.getSelected(); - ContributedLibrary installedLib = releases.getInstalled(); + ContributedLibrary selected = releases.getSelected(); + ContributedLibrary installed = releases.getInstalled(); boolean removable, installable, upgradable; - if (installedLib == null) { + if (installed == null) { installable = true; removable = false; upgradable = false; } else { installable = false; - removable = !installedLib.isReadOnly() && !hasBuiltInRelease; - upgradable = new ContributedLibraryComparator().compare(selectedLib, installedLib) > 0; + removable = !installed.isReadOnly() && !hasBuiltInRelease; + upgradable = new ContributedLibraryComparator().compare(selected, installed) > 0; } if (installable) { installButton.setText(_("Install")); @@ -335,14 +333,14 @@ public class ContributedLibraryTableCell extends InstallerTableCell { removeButton.setVisible(removable); removeButtonPlaceholder.setVisible(!removable); - String name = selectedLib.getName(); - String author = selectedLib.getAuthor(); + String name = selected.getName(); + String author = selected.getAuthor(); // String maintainer = selectedLib.getMaintainer(); - String website = selectedLib.getWebsite(); - String sentence = selectedLib.getSentence(); - String paragraph = selectedLib.getParagraph(); + String website = selected.getWebsite(); + String sentence = selected.getSentence(); + String paragraph = selected.getParagraph(); // String availableVer = selectedLib.getVersion(); - String url = selectedLib.getUrl(); + String url = selected.getUrl(); String midcolor = isSelected ? "#000000" : "#888888"; @@ -350,7 +348,7 @@ public class ContributedLibraryTableCell extends InstallerTableCell { // Library name... desc += format("{0} ", name); - if (installedLib != null && installedLib.isReadOnly()) { + if (installed != null && installed.isReadOnly()) { desc += "Built-In "; } @@ -361,8 +359,8 @@ public class ContributedLibraryTableCell extends InstallerTableCell { } // ...version. - if (installedLib != null) { - String installedVer = installedLib.getVersion(); + if (installed != null) { + String installedVer = installed.getVersion(); if (installedVer == null) { desc += " " + _("Version unknown"); } else { @@ -373,7 +371,7 @@ public class ContributedLibraryTableCell extends InstallerTableCell { } desc += ""; - if (installedLib != null) { + if (installed != null) { desc += " INSTALLED"; } @@ -438,6 +436,10 @@ public class ContributedLibraryTableCell extends InstallerTableCell { removeButton.setEnabled(enabled); } + public void setStatus(String status) { + statusLabel.setText(status); + } + public void invalidate() { panel.invalidate(); } diff --git a/app/src/cc/arduino/contributions/libraries/ui/DropdownInstalledLibrariesItem.java b/app/src/cc/arduino/contributions/libraries/ui/DropdownInstalledLibrariesItem.java deleted file mode 100644 index d68d59c50..000000000 --- a/app/src/cc/arduino/contributions/libraries/ui/DropdownInstalledLibrariesItem.java +++ /dev/null @@ -1,20 +0,0 @@ -package cc.arduino.contributions.libraries.ui; - -import cc.arduino.contributions.libraries.ContributedLibrary; -import cc.arduino.contributions.libraries.filters.InstalledPredicate; -import cc.arduino.contributions.ui.DropdownItem; -import com.google.common.base.Predicate; - -import static processing.app.I18n._; - -public class DropdownInstalledLibrariesItem implements DropdownItem { - - public String toString() { - return _("Installed"); - } - - @Override - public Predicate getFilterPredicate() { - return new InstalledPredicate(); - } -} diff --git a/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java b/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java index 1b0b4c0a9..0b4e7ae9b 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java +++ b/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java @@ -31,9 +31,7 @@ package cc.arduino.contributions.libraries.ui; import cc.arduino.contributions.libraries.ContributedLibrary; import cc.arduino.contributions.libraries.LibrariesIndexer; import cc.arduino.contributions.packages.ui.InstallerJDialogUncaughtExceptionHandler; -import cc.arduino.contributions.ui.FilteredAbstractTableModel; -import cc.arduino.contributions.ui.InstallerJDialog; -import cc.arduino.contributions.ui.InstallerTableCell; +import cc.arduino.contributions.ui.*; import cc.arduino.utils.Progress; import javax.swing.*; @@ -100,8 +98,8 @@ public class LibraryManagerUI extends InstallerJDialog { categoryChooser.addActionListener(categoryChooserActionListener); // Load categories - categoryChooser.addItem(new DropdownAllLibrariesItem()); - categoryChooser.addItem(new DropdownInstalledLibrariesItem()); + categoryChooser.addItem(new DropdownAllItem()); + categoryChooser.addItem(new DropdownInstalledContributionItem()); categoryChooser.addItem(new DropdownBuiltInLibrariesItem()); Collection categories = indexer.getIndex().getCategories(); for (String category : categories) { diff --git a/app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCell.java b/app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCell.java index cc92d5625..da1c38708 100644 --- a/app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCell.java +++ b/app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCell.java @@ -28,12 +28,21 @@ */ package cc.arduino.contributions.packages.ui; +import cc.arduino.contributions.VersionComparator; +import cc.arduino.contributions.filters.InstalledPredicate; import cc.arduino.contributions.packages.ContributedBoard; import cc.arduino.contributions.packages.ContributedPlatform; +import cc.arduino.contributions.packages.ContributedPlatformComparator; import cc.arduino.contributions.ui.InstallerTableCell; +import cc.arduino.utils.ReverseComparator; +import com.google.common.base.Function; +import com.google.common.base.Predicates; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; import processing.app.Base; import javax.swing.*; +import javax.swing.Timer; import javax.swing.border.EmptyBorder; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; @@ -41,10 +50,12 @@ import javax.swing.text.Document; import javax.swing.text.html.HTMLDocument; import javax.swing.text.html.StyleSheet; import java.awt.*; +import java.awt.List; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; +import java.util.*; import static processing.app.I18n._; import static processing.app.I18n.format; @@ -54,14 +65,15 @@ public class ContributedPlatformTableCell extends InstallerTableCell { private JPanel panel; private JTextPane description; - - private JPanel buttonsPanel; private JButton installButton; - private JComboBox downgradeChooser; - private JButton downgradeButton; private JButton removeButton; + private Component removeButtonPlaceholder; + private Component installButtonPlaceholder; + private JComboBox downgradeChooser; + private JComboBox versionToInstallChooser; + private JButton downgradeButton; + private JPanel buttonsPanel; private Component removeButtonStrut; - private JPanel inactiveButtonsPanel; private JLabel statusLabel; @@ -93,28 +105,35 @@ public class ContributedPlatformTableCell extends InstallerTableCell { } }); - installButton = new JButton(_("Install")); - installButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - onInstall(editorValue.getSelected(), editorValue.getInstalled()); - } - }); + { + installButton = new JButton(_("Install")); + installButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + onInstall(editorValue.getSelected(), editorValue.getInstalled()); + } + }); + int width = installButton.getPreferredSize().width; + installButtonPlaceholder = Box.createRigidArea(new Dimension(width, 1)); + } - removeButton = new JButton(_("Remove")); - removeButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - onRemove(editorValue.getInstalled()); - } - }); + { + removeButton = new JButton(_("Remove")); + removeButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + onRemove(editorValue.getInstalled()); + } + }); + int width = removeButton.getPreferredSize().width; + removeButtonPlaceholder = Box.createRigidArea(new Dimension(width, 1)); + } downgradeButton = new JButton(_("Install")); downgradeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - ContributedPlatform selected; - selected = (ContributedPlatform) downgradeChooser.getSelectedItem(); + ContributedPlatform selected = (ContributedPlatform) downgradeChooser.getSelectedItem(); onInstall(selected, editorValue.getInstalled()); } }); @@ -131,6 +150,16 @@ public class ContributedPlatformTableCell extends InstallerTableCell { } }); + versionToInstallChooser = new JComboBox(); + versionToInstallChooser.addItem("-"); + versionToInstallChooser.setMaximumSize(versionToInstallChooser.getPreferredSize()); + versionToInstallChooser.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + editorValue.select((ContributedPlatform) versionToInstallChooser.getSelectedItem()); + } + }); + panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); @@ -141,12 +170,15 @@ public class ContributedPlatformTableCell extends InstallerTableCell { buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.X_AXIS)); buttonsPanel.setOpaque(false); - buttonsPanel.add(Box.createHorizontalStrut(20)); + buttonsPanel.add(Box.createHorizontalStrut(7)); buttonsPanel.add(downgradeChooser); buttonsPanel.add(Box.createHorizontalStrut(5)); buttonsPanel.add(downgradeButton); + buttonsPanel.add(Box.createHorizontalGlue()); + buttonsPanel.add(versionToInstallChooser); + buttonsPanel.add(Box.createHorizontalStrut(5)); buttonsPanel.add(installButton); buttonsPanel.add(Box.createHorizontalStrut(5)); buttonsPanel.add(removeButton); @@ -173,7 +205,7 @@ public class ContributedPlatformTableCell extends InstallerTableCell { panel.add(inactiveButtonsPanel); } - panel.add(Box.createVerticalStrut(10)); + panel.add(Box.createVerticalStrut(15)); } protected void onRemove(ContributedPlatform contributedPlatform) { @@ -190,13 +222,13 @@ public class ContributedPlatformTableCell extends InstallerTableCell { int column) { parentTable = table; setEnabled(false); - - Component component = getUpdatedCellComponent(value, isSelected, row); + Component component = getUpdatedCellComponent(value, isSelected, row, false); if (row % 2 == 0) { component.setBackground(new Color(236, 241, 241)); //#ecf1f1 } else { component.setBackground(new Color(255, 255, 255)); } + return component; } @@ -216,63 +248,105 @@ public class ContributedPlatformTableCell extends InstallerTableCell { editorValue = (ContributionIndexTableModel.ContributedPlatformReleases) value; setEnabled(true); + final ContributedPlatform installed = editorValue.getInstalled(); + + java.util.List releases = new LinkedList(editorValue.releases); + java.util.List uninstalledReleases = new LinkedList(Collections2.filter(releases, Predicates.not(new InstalledPredicate()))); + + java.util.List installedBuiltIn = new LinkedList(); + + if (installed != null && !installedBuiltIn.contains(installed)) { + uninstalledReleases.addAll(installedBuiltIn); + } + + Collections.sort(uninstalledReleases, new ReverseComparator(new ContributedPlatformComparator())); + downgradeChooser.removeAllItems(); downgradeChooser.addItem(_("Select version")); - boolean visible = false; - for (ContributedPlatform release : editorValue.releases) { - if (release.isInstalled()) - continue; - downgradeChooser.addItem(release); - visible = true; - } - downgradeChooser.setVisible(visible && editorValue.releases.size() > 1); - downgradeButton.setVisible(visible && editorValue.releases.size() > 1); - Component component = getUpdatedCellComponent(value, true, row); + final java.util.List uninstalledPreviousReleases = Lists.newLinkedList(); + final java.util.List uninstalledNewerReleases = Lists.newLinkedList(); + + Lists.newLinkedList(Lists.transform(uninstalledReleases, new Function() { + @Override + public ContributedPlatform apply(ContributedPlatform input) { + if (installed == null || VersionComparator.VERSION_COMPARATOR.greaterThan(installed.getVersion(), input.getVersion())) { + uninstalledPreviousReleases.add(input); + } else { + uninstalledNewerReleases.add(input); + } + + return input; + } + })); + for (ContributedPlatform release : uninstalledNewerReleases) { + downgradeChooser.addItem(release); + } + for (ContributedPlatform release : uninstalledPreviousReleases) { + downgradeChooser.addItem(release); + } + + downgradeChooser.setVisible(installed != null && (!uninstalledPreviousReleases.isEmpty() || uninstalledNewerReleases.size() > 1)); + downgradeButton.setVisible(installed != null && (!uninstalledPreviousReleases.isEmpty() || uninstalledNewerReleases.size() > 1)); + + versionToInstallChooser.removeAllItems(); + for (ContributedPlatform release : uninstalledReleases) { + versionToInstallChooser.addItem(release); + } + versionToInstallChooser.setVisible(installed == null && uninstalledReleases.size() > 1); + + Component component = getUpdatedCellComponent(value, true, row, !installedBuiltIn.isEmpty()); component.setBackground(new Color(218, 227, 227)); //#dae3e3 return component; } - private Component getUpdatedCellComponent(Object value, boolean isSelected, - int row) { + private Component getUpdatedCellComponent(Object value, boolean isSelected, int row, boolean hasBuiltInRelease) { ContributionIndexTableModel.ContributedPlatformReleases releases = (ContributionIndexTableModel.ContributedPlatformReleases) value; - ContributedPlatform selectedPlatform = releases.getSelected(); - ContributedPlatform installedPlatform = releases.getInstalled(); + + //FIXME: happens on macosx, don't know why + if (releases == null) { + return panel; + } + + ContributedPlatform selected = releases.getSelected(); + ContributedPlatform installed = releases.getInstalled(); boolean removable, installable, upgradable; - if (installedPlatform == null) { + if (installed == null) { installable = true; removable = false; upgradable = false; } else { installable = false; - removable = true; - upgradable = (selectedPlatform != installedPlatform); + //removable = !installed.isReadOnly() && !hasBuiltInRelease; + removable = !hasBuiltInRelease; + upgradable = new ContributedPlatformComparator().compare(selected, installed) > 0; } - - if (installable) + if (installable) { installButton.setText(_("Install")); - if (upgradable) + } + if (upgradable) { installButton.setText(_("Update")); + } installButton.setVisible(installable || upgradable); - + installButtonPlaceholder.setVisible(!(installable || upgradable)); removeButton.setVisible(removable); - removeButtonStrut.setVisible(removable); + removeButtonPlaceholder.setVisible(!removable); String desc = ""; - desc += "" + selectedPlatform.getName() + ""; - String author = selectedPlatform.getParentPackage().getMaintainer(); - String url = selectedPlatform.getParentPackage().getWebsiteURL(); + desc += "" + selected.getName() + ""; + String author = selected.getParentPackage().getMaintainer(); + String url = selected.getParentPackage().getWebsiteURL(); if (author != null && !author.isEmpty()) { desc += " " + format("by {0}", author); } if (removable) { - desc += " " + format(_("version {0}"), installedPlatform.getVersion()) + " INSTALLED"; + desc += " " + format(_("version {0}"), installed.getVersion()) + " INSTALLED"; } desc += "
"; desc += _("Boards included in this package:") + "
"; - for (ContributedBoard board : selectedPlatform.getBoards()) + for (ContributedBoard board : selected.getBoards()) desc += format("{0}, ", board.getName()); desc = desc.substring(0, desc.lastIndexOf(',')) + ".
"; @@ -282,8 +356,13 @@ public class ContributedPlatformTableCell extends InstallerTableCell { desc += ""; description.setText(desc); - //description.setBackground(Color.WHITE); + description.setBackground(Color.WHITE); + // for modelToView to work, the text area has to be sized. It doesn't + // matter if it's visible or not. + + // See: + // http://stackoverflow.com/questions/3081210/how-to-set-jtextarea-to-have-height-that-matches-the-size-of-a-text-it-contains int width = parentTable.getBounds().width; setJTextPaneDimensionToFitContainedText(description, width); @@ -311,12 +390,14 @@ public class ContributedPlatformTableCell extends InstallerTableCell { enable(false); if (enabled) { enabler.start(); + } else { + enabler.stop(); } buttonsPanel.setVisible(enabled); inactiveButtonsPanel.setVisible(!enabled); } - private void enable(boolean enabled) { + public void enable(boolean enabled) { installButton.setEnabled(enabled); removeButton.setEnabled(enabled); } diff --git a/app/src/cc/arduino/contributions/libraries/ui/DropdownAllLibrariesItem.java b/app/src/cc/arduino/contributions/ui/DropdownAllItem.java similarity index 50% rename from app/src/cc/arduino/contributions/libraries/ui/DropdownAllLibrariesItem.java rename to app/src/cc/arduino/contributions/ui/DropdownAllItem.java index 2a5a37747..5ad3c2d93 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/DropdownAllLibrariesItem.java +++ b/app/src/cc/arduino/contributions/ui/DropdownAllItem.java @@ -1,20 +1,21 @@ -package cc.arduino.contributions.libraries.ui; +package cc.arduino.contributions.ui; import cc.arduino.contributions.libraries.ContributedLibrary; import cc.arduino.contributions.filters.NoopPredicate; +import cc.arduino.contributions.packages.DownloadableContribution; import cc.arduino.contributions.ui.DropdownItem; import com.google.common.base.Predicate; import static processing.app.I18n._; -public class DropdownAllLibrariesItem implements DropdownItem { +public class DropdownAllItem implements DropdownItem { public String toString() { return _("All"); } @Override - public Predicate getFilterPredicate() { - return new NoopPredicate(); + public Predicate getFilterPredicate() { + return new NoopPredicate(); } } diff --git a/app/src/cc/arduino/contributions/ui/DropdownInstalledContributionItem.java b/app/src/cc/arduino/contributions/ui/DropdownInstalledContributionItem.java new file mode 100644 index 000000000..625c191bc --- /dev/null +++ b/app/src/cc/arduino/contributions/ui/DropdownInstalledContributionItem.java @@ -0,0 +1,20 @@ +package cc.arduino.contributions.ui; + +import cc.arduino.contributions.filters.InstalledPredicate; +import cc.arduino.contributions.packages.DownloadableContribution; +import cc.arduino.contributions.ui.DropdownItem; +import com.google.common.base.Predicate; + +import static processing.app.I18n._; + +public class DropdownInstalledContributionItem implements DropdownItem { + + public String toString() { + return _("Installed"); + } + + @Override + public Predicate getFilterPredicate() { + return new InstalledPredicate(); + } +} diff --git a/arduino-core/src/cc/arduino/contributions/packages/ContributedPlatformComparator.java b/arduino-core/src/cc/arduino/contributions/packages/ContributedPlatformComparator.java new file mode 100644 index 000000000..872439ffa --- /dev/null +++ b/arduino-core/src/cc/arduino/contributions/packages/ContributedPlatformComparator.java @@ -0,0 +1,15 @@ +package cc.arduino.contributions.packages; + +import cc.arduino.contributions.VersionComparator; + +import java.util.Comparator; + +public class ContributedPlatformComparator implements Comparator { + + @Override + public int compare(ContributedPlatform lib1, ContributedPlatform lib2) { + return VersionComparator.VERSION_COMPARATOR.compare(lib1.getVersion(), lib2.getVersion()); + } + + +}