diff options
author | Cristian Maglie <c.maglie@arduino.cc> | 2020-06-29 17:58:25 +0300 |
---|---|---|
committer | Cristian Maglie <c.maglie@arduino.cc> | 2020-07-23 17:02:59 +0300 |
commit | d2e4d76afc432e077eb73d62af686fdf9088df52 (patch) | |
tree | d8a2948e2dfaf64ce3a289b45c3d51d142f3cd71 | |
parent | 5adf408270851e3739dab1b316dea62faaddd3c3 (diff) |
Cumulative patch for MSFT Store hot-fix release1.8.13-ms-store-1
The following commits have been added here:
- 42865229c2fbad7447ea430b08c69e507a606d72: Library manager: update filters combo box only if there are changes
- 326396789389b99f4728fe8e9f80ed2796760b19: Removed unused include and clueless whitespaces
- b66ed5e5d738e0e83c2ced183914cef3bd5f72fc: LibraryManager: correctly apply "type" and "category" filters together
- 1361bce6bc703602499c0bc7d4ac154063de4ade: Board manager: Update filters UI only if categories changes
- a81772afc68fb1497b6374ad58d197ef84bcba4c: Boards Manager: update UI after an install/remove
- 851b5b14b1dc48572649e9a291d34415f018447f: Lib manager GUI is updated after installing/upgrading library
- 10bee204e62a1339c803285d8ac9463bc2278f6a: Lib manager: added getContribModel() as in Boards manager
4 files changed, 69 insertions, 50 deletions
diff --git a/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java b/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java index 66ad0e44b..69ab10006 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java +++ b/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java @@ -35,12 +35,12 @@ import java.awt.Dialog; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Optional; -import java.util.function.Predicate; import javax.swing.Box; import javax.swing.JComboBox; @@ -66,13 +66,16 @@ public class LibraryManagerUI extends InstallerJDialog<ContributedLibraryRelease private final JComboBox typeChooser; private final LibraryInstaller installer; - private Predicate<ContributedLibraryReleases> typeFilter; @Override protected FilteredAbstractTableModel createContribModel() { return new LibrariesIndexTableModel(); } + private LibrariesIndexTableModel getContribModel() { + return (LibrariesIndexTableModel) contribModel; + } + @Override protected TableCellRenderer createCellRenderer() { return new ContributedLibraryTableCellRenderer(); @@ -115,63 +118,60 @@ public class LibraryManagerUI extends InstallerJDialog<ContributedLibraryRelease } protected final ActionListener typeChooserActionListener = new ActionListener() { - @Override public void actionPerformed(ActionEvent event) { DropdownItem<ContributedLibraryReleases> selected = (DropdownItem<ContributedLibraryReleases>) typeChooser.getSelectedItem(); previousRowAtPoint = -1; - if (selected != null && typeFilter != selected.getFilterPredicate()) { - typeFilter = selected.getFilterPredicate(); + if (selected != null && extraFilter != selected.getFilterPredicate()) { + extraFilter = selected.getFilterPredicate(); if (contribTable.getCellEditor() != null) { contribTable.getCellEditor().stopCellEditing(); } - updateIndexFilter(filters, categoryFilter.and(typeFilter)); + updateIndexFilter(filters, categoryFilter.and(extraFilter)); } } }; + private Collection<String> oldCategories = new ArrayList<>(); + private Collection<String> oldTypes = new ArrayList<>(); + public void updateUI() { - DropdownItem<ContributedLibraryReleases> previouslySelectedCategory = (DropdownItem<ContributedLibraryReleases>) categoryChooser.getSelectedItem(); - DropdownItem<ContributedLibraryReleases> previouslySelectedType = (DropdownItem<ContributedLibraryReleases>) typeChooser.getSelectedItem(); + // Check if categories or types have changed + Collection<String> categories = BaseNoGui.librariesIndexer.getIndex().getCategories(); + List<String> types = new LinkedList<>(BaseNoGui.librariesIndexer.getIndex().getTypes()); + Collections.sort(types, new LibraryTypeComparator()); - categoryChooser.removeActionListener(categoryChooserActionListener); - typeChooser.removeActionListener(typeChooserActionListener); + if (categories.equals(oldCategories) && types.equals(oldTypes)) { + return; + } + oldCategories = categories; + oldTypes = types; // Load categories categoryFilter = x -> true; + categoryChooser.removeActionListener(categoryChooserActionListener); categoryChooser.removeAllItems(); categoryChooser.addItem(new DropdownAllLibraries()); - Collection<String> categories = BaseNoGui.librariesIndexer.getIndex().getCategories(); for (String category : categories) { categoryChooser.addItem(new DropdownLibraryOfCategoryItem(category)); } - categoryChooser.setEnabled(categoryChooser.getItemCount() > 1); - categoryChooser.addActionListener(categoryChooserActionListener); - if (previouslySelectedCategory != null) { - categoryChooser.setSelectedItem(previouslySelectedCategory); - } else { - categoryChooser.setSelectedIndex(0); - } + categoryChooser.setSelectedIndex(0); - typeFilter = x -> true; + // Load types + extraFilter = x -> true; + typeChooser.removeActionListener(typeChooserActionListener); typeChooser.removeAllItems(); typeChooser.addItem(new DropdownAllLibraries()); typeChooser.addItem(new DropdownUpdatableLibrariesItem()); typeChooser.addItem(new DropdownInstalledLibraryItem()); - List<String> types = new LinkedList<>(BaseNoGui.librariesIndexer.getIndex().getTypes()); - Collections.sort(types, new LibraryTypeComparator()); for (String type : types) { typeChooser.addItem(new DropdownLibraryOfTypeItem(type)); } typeChooser.setEnabled(typeChooser.getItemCount() > 1); typeChooser.addActionListener(typeChooserActionListener); - if (previouslySelectedType != null) { - typeChooser.setSelectedItem(previouslySelectedType); - } else { - typeChooser.setSelectedIndex(0); - } + typeChooser.setSelectedIndex(0); filterField.setEnabled(contribModel.getRowCount() > 0); } @@ -201,8 +201,11 @@ public class LibraryManagerUI extends InstallerJDialog<ContributedLibraryRelease try { setProgressVisible(true, ""); installer.updateIndex(this::setProgress); - ((LibrariesIndexTableModel) contribModel).update(); onIndexesUpdated(); + if (contribTable.getCellEditor() != null) { + contribTable.getCellEditor().stopCellEditing(); + } + getContribModel().update(); } catch (Exception e) { throw new RuntimeException(e); } finally { @@ -238,12 +241,11 @@ public class LibraryManagerUI extends InstallerJDialog<ContributedLibraryRelease } else { installer.install(lib, this::setProgress); } - // TODO: Do a better job in refreshing only the needed element + onIndexesUpdated(); if (contribTable.getCellEditor() != null) { contribTable.getCellEditor().stopCellEditing(); } - ((LibrariesIndexTableModel) contribModel).update(); - onIndexesUpdated(); + getContribModel().update(); } catch (Exception e) { throw new RuntimeException(e); } finally { @@ -270,12 +272,11 @@ public class LibraryManagerUI extends InstallerJDialog<ContributedLibraryRelease try { setProgressVisible(true, tr("Removing...")); installer.remove(lib, this::setProgress); - // TODO: Do a better job in refreshing only the needed element + onIndexesUpdated(); if (contribTable.getCellEditor() != null) { contribTable.getCellEditor().stopCellEditing(); } - ((LibrariesIndexTableModel) contribModel).update(); - onIndexesUpdated(); + getContribModel().update(); } catch (Exception e) { throw new RuntimeException(e); } finally { diff --git a/app/src/cc/arduino/contributions/packages/ui/ContributionIndexTableModel.java b/app/src/cc/arduino/contributions/packages/ui/ContributionIndexTableModel.java index f143e3317..7472c6247 100644 --- a/app/src/cc/arduino/contributions/packages/ui/ContributionIndexTableModel.java +++ b/app/src/cc/arduino/contributions/packages/ui/ContributionIndexTableModel.java @@ -47,9 +47,17 @@ public class ContributionIndexTableModel private final List<ContributedPlatformReleases> contributions = new ArrayList<>(); private final String[] columnNames = { "Description" }; private final Class<?>[] columnTypes = { ContributedPlatform.class }; + private Predicate<ContributedPlatform> filter; + private String[] filters; public void updateIndexFilter(String[] filters, Predicate<ContributedPlatform> filter) { + this.filter = filter; + this.filters = filters; + updateContributions(); + } + + private void updateContributions() { contributions.clear(); for (ContributedPackage pack : BaseNoGui.indexer.getPackages()) { for (ContributedPlatform platform : pack.getPlatforms()) { @@ -146,6 +154,7 @@ public class ContributionIndexTableModel } public void update() { + updateContributions(); fireTableDataChanged(); } diff --git a/app/src/cc/arduino/contributions/packages/ui/ContributionManagerUI.java b/app/src/cc/arduino/contributions/packages/ui/ContributionManagerUI.java index 6f9c903c3..0c949fe1c 100644 --- a/app/src/cc/arduino/contributions/packages/ui/ContributionManagerUI.java +++ b/app/src/cc/arduino/contributions/packages/ui/ContributionManagerUI.java @@ -29,7 +29,6 @@ package cc.arduino.contributions.packages.ui; -import cc.arduino.contributions.DownloadableContribution; import cc.arduino.contributions.packages.ContributedPlatform; import cc.arduino.contributions.packages.ContributionInstaller; import cc.arduino.contributions.ui.*; @@ -41,6 +40,7 @@ import javax.swing.*; import javax.swing.table.TableCellRenderer; import java.awt.*; +import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -92,30 +92,28 @@ public class ContributionManagerUI extends InstallerJDialog { this.installer = installer; } + private Collection<String> oldCategories = new ArrayList<>(); + public void updateUI() { - DropdownItem<DownloadableContribution> previouslySelectedCategory = (DropdownItem<DownloadableContribution>) categoryChooser - .getSelectedItem(); + // Check if categories have changed + Collection<String> categories = BaseNoGui.indexer.getCategories(); + if (categories.equals(oldCategories)) { + return; + } + oldCategories = categories; categoryChooser.removeActionListener(categoryChooserActionListener); - - filterField.setEnabled(getContribModel().getRowCount() > 0); - - categoryChooser.addActionListener(categoryChooserActionListener); - // Enable categories combo only if there are two or more choices + filterField.setEnabled(getContribModel().getRowCount() > 0); categoryFilter = x -> true; categoryChooser.removeAllItems(); categoryChooser.addItem(new DropdownAllCoresItem()); categoryChooser.addItem(new DropdownUpdatableCoresItem()); - Collection<String> categories = BaseNoGui.indexer.getCategories(); for (String s : categories) { categoryChooser.addItem(new DropdownCoreOfCategoryItem(s)); } - if (previouslySelectedCategory != null) { - categoryChooser.setSelectedItem(previouslySelectedCategory); - } else { - categoryChooser.setSelectedIndex(0); - } + categoryChooser.addActionListener(categoryChooserActionListener); + categoryChooser.setSelectedIndex(0); } public void setProgress(Progress progress) { @@ -146,6 +144,10 @@ public class ContributionManagerUI extends InstallerJDialog { .updateIndex(this::setProgress); installer.deleteUnknownFiles(downloadedPackageIndexFiles); onIndexesUpdated(); + if (contribTable.getCellEditor() != null) { + contribTable.getCellEditor().stopCellEditing(); + } + getContribModel().update(); } catch (Exception e) { throw new RuntimeException(e); } finally { @@ -171,6 +173,10 @@ public class ContributionManagerUI extends InstallerJDialog { } errors.addAll(installer.install(platformToInstall, this::setProgress)); onIndexesUpdated(); + if (contribTable.getCellEditor() != null) { + contribTable.getCellEditor().stopCellEditing(); + } + getContribModel().update(); } catch (Exception e) { throw new RuntimeException(e); } finally { @@ -209,6 +215,10 @@ public class ContributionManagerUI extends InstallerJDialog { setProgressVisible(true, tr("Removing...")); installer.remove(platform); onIndexesUpdated(); + if (contribTable.getCellEditor() != null) { + contribTable.getCellEditor().stopCellEditing(); + } + getContribModel().update(); } catch (Exception e) { throw new RuntimeException(e); } finally { diff --git a/app/src/cc/arduino/contributions/ui/InstallerJDialog.java b/app/src/cc/arduino/contributions/ui/InstallerJDialog.java index 2888cd688..8abff8f34 100644 --- a/app/src/cc/arduino/contributions/ui/InstallerJDialog.java +++ b/app/src/cc/arduino/contributions/ui/InstallerJDialog.java @@ -71,7 +71,6 @@ import javax.swing.text.DefaultEditorKit; import cc.arduino.contributions.ui.listeners.AbstractKeyListener; import processing.app.Base; -import processing.app.Theme; public abstract class InstallerJDialog<T> extends JDialog { @@ -82,6 +81,7 @@ public abstract class InstallerJDialog<T> extends JDialog { protected final FilterJTextField filterField; protected final JPanel filtersContainer; // Currently selected category and filters + protected Predicate<T> extraFilter = x -> true; protected Predicate<T> categoryFilter; protected String[] filters; protected final String noConnectionErrorMessage; @@ -329,7 +329,6 @@ public abstract class InstallerJDialog<T> extends JDialog { } protected final ActionListener categoryChooserActionListener = new ActionListener() { - @Override public void actionPerformed(ActionEvent event) { DropdownItem<T> selected = (DropdownItem<T>) categoryChooser.getSelectedItem(); @@ -339,7 +338,7 @@ public abstract class InstallerJDialog<T> extends JDialog { if (contribTable.getCellEditor() != null) { contribTable.getCellEditor().stopCellEditing(); } - updateIndexFilter(filters, categoryFilter); + updateIndexFilter(filters, categoryFilter.and(extraFilter)); } } }; |