mirror of
https://github.com/arduino/Arduino.git
synced 2025-02-11 05:54:16 +01:00
lib/core installer: scrolling with arrow keys almost works
This commit is contained in:
parent
8922541898
commit
3fb3774627
@ -35,6 +35,7 @@ import cc.arduino.contributions.libraries.ContributedLibraryComparator;
|
|||||||
import cc.arduino.contributions.libraries.filters.BuiltInPredicate;
|
import cc.arduino.contributions.libraries.filters.BuiltInPredicate;
|
||||||
import cc.arduino.contributions.libraries.filters.OnlyUpstreamReleasePredicate;
|
import cc.arduino.contributions.libraries.filters.OnlyUpstreamReleasePredicate;
|
||||||
import cc.arduino.contributions.ui.InstallerTableCell;
|
import cc.arduino.contributions.ui.InstallerTableCell;
|
||||||
|
import cc.arduino.contributions.ui.listeners.DelegatingKeyListener;
|
||||||
import cc.arduino.utils.ReverseComparator;
|
import cc.arduino.utils.ReverseComparator;
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
@ -73,7 +74,6 @@ public class ContributedLibraryTableCell extends InstallerTableCell {
|
|||||||
private JComboBox versionToInstallChooser;
|
private JComboBox versionToInstallChooser;
|
||||||
private JButton downgradeButton;
|
private JButton downgradeButton;
|
||||||
private JPanel buttonsPanel;
|
private JPanel buttonsPanel;
|
||||||
private Component removeButtonStrut;
|
|
||||||
private JPanel inactiveButtonsPanel;
|
private JPanel inactiveButtonsPanel;
|
||||||
private JLabel statusLabel;
|
private JLabel statusLabel;
|
||||||
|
|
||||||
@ -155,8 +155,7 @@ public class ContributedLibraryTableCell extends InstallerTableCell {
|
|||||||
buttonsPanel.add(installButton);
|
buttonsPanel.add(installButton);
|
||||||
buttonsPanel.add(Box.createHorizontalStrut(5));
|
buttonsPanel.add(Box.createHorizontalStrut(5));
|
||||||
buttonsPanel.add(removeButton);
|
buttonsPanel.add(removeButton);
|
||||||
removeButtonStrut = Box.createHorizontalStrut(5);
|
buttonsPanel.add(Box.createHorizontalStrut(5));
|
||||||
buttonsPanel.add(removeButtonStrut);
|
|
||||||
buttonsPanel.add(Box.createHorizontalStrut(15));
|
buttonsPanel.add(Box.createHorizontalStrut(15));
|
||||||
|
|
||||||
panel.add(buttonsPanel);
|
panel.add(buttonsPanel);
|
||||||
@ -211,6 +210,7 @@ public class ContributedLibraryTableCell extends InstallerTableCell {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
description.addKeyListener(new DelegatingKeyListener(parentTable));
|
||||||
panel.add(description, 0);
|
panel.add(description, 0);
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ import cc.arduino.contributions.packages.ContributedBoard;
|
|||||||
import cc.arduino.contributions.packages.ContributedPlatform;
|
import cc.arduino.contributions.packages.ContributedPlatform;
|
||||||
import cc.arduino.contributions.packages.ContributedPlatformComparator;
|
import cc.arduino.contributions.packages.ContributedPlatformComparator;
|
||||||
import cc.arduino.contributions.ui.InstallerTableCell;
|
import cc.arduino.contributions.ui.InstallerTableCell;
|
||||||
|
import cc.arduino.contributions.ui.listeners.DelegatingKeyListener;
|
||||||
import cc.arduino.utils.ReverseComparator;
|
import cc.arduino.utils.ReverseComparator;
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
@ -71,7 +72,6 @@ public class ContributedPlatformTableCell extends InstallerTableCell {
|
|||||||
private JComboBox versionToInstallChooser;
|
private JComboBox versionToInstallChooser;
|
||||||
private JButton downgradeButton;
|
private JButton downgradeButton;
|
||||||
private JPanel buttonsPanel;
|
private JPanel buttonsPanel;
|
||||||
private Component removeButtonStrut;
|
|
||||||
private JPanel inactiveButtonsPanel;
|
private JPanel inactiveButtonsPanel;
|
||||||
private JLabel statusLabel;
|
private JLabel statusLabel;
|
||||||
|
|
||||||
@ -153,8 +153,7 @@ public class ContributedPlatformTableCell extends InstallerTableCell {
|
|||||||
buttonsPanel.add(installButton);
|
buttonsPanel.add(installButton);
|
||||||
buttonsPanel.add(Box.createHorizontalStrut(5));
|
buttonsPanel.add(Box.createHorizontalStrut(5));
|
||||||
buttonsPanel.add(removeButton);
|
buttonsPanel.add(removeButton);
|
||||||
removeButtonStrut = Box.createHorizontalStrut(5);
|
buttonsPanel.add(Box.createHorizontalStrut(5));
|
||||||
buttonsPanel.add(removeButtonStrut);
|
|
||||||
buttonsPanel.add(Box.createHorizontalStrut(15));
|
buttonsPanel.add(Box.createHorizontalStrut(15));
|
||||||
|
|
||||||
panel.add(buttonsPanel);
|
panel.add(buttonsPanel);
|
||||||
@ -209,6 +208,7 @@ public class ContributedPlatformTableCell extends InstallerTableCell {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
description.addKeyListener(new DelegatingKeyListener(parentTable));
|
||||||
panel.add(description, 0);
|
panel.add(description, 0);
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
*/
|
*/
|
||||||
package cc.arduino.contributions.ui;
|
package cc.arduino.contributions.ui;
|
||||||
|
|
||||||
|
import cc.arduino.contributions.ui.listeners.AbstractKeyListener;
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import processing.app.Base;
|
import processing.app.Base;
|
||||||
import processing.app.Theme;
|
import processing.app.Theme;
|
||||||
@ -39,6 +40,7 @@ import javax.swing.table.TableColumnModel;
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.WindowEvent;
|
import java.awt.event.WindowEvent;
|
||||||
|
|
||||||
import static cc.arduino.contributions.packages.ui.ContributionIndexTableModel.DESCRIPTION_COL;
|
import static cc.arduino.contributions.packages.ui.ContributionIndexTableModel.DESCRIPTION_COL;
|
||||||
@ -78,8 +80,6 @@ public abstract class InstallerJDialog<T> extends JDialog {
|
|||||||
protected Box errorMessageBox;
|
protected Box errorMessageBox;
|
||||||
private final JLabel errorMessage;
|
private final JLabel errorMessage;
|
||||||
|
|
||||||
protected InstallerTableCell cellEditor;
|
|
||||||
|
|
||||||
public InstallerJDialog(Frame parent, String title, ModalityType applicationModal, String noConnectionErrorMessage) {
|
public InstallerJDialog(Frame parent, String title, ModalityType applicationModal, String noConnectionErrorMessage) {
|
||||||
super(parent, title, applicationModal);
|
super(parent, title, applicationModal);
|
||||||
this.noConnectionErrorMessage = noConnectionErrorMessage;
|
this.noConnectionErrorMessage = noConnectionErrorMessage;
|
||||||
@ -104,7 +104,9 @@ public abstract class InstallerJDialog<T> extends JDialog {
|
|||||||
@Override
|
@Override
|
||||||
protected void onFilter(String[] _filters) {
|
protected void onFilter(String[] _filters) {
|
||||||
filters = _filters;
|
filters = _filters;
|
||||||
cellEditor.stopCellEditing();
|
if (contribTable.getCellEditor() != null) {
|
||||||
|
contribTable.getCellEditor().stopCellEditing();
|
||||||
|
}
|
||||||
contribModel.updateIndexFilter(categoryFilter, filters);
|
contribModel.updateIndexFilter(categoryFilter, filters);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -130,13 +132,23 @@ public abstract class InstallerJDialog<T> extends JDialog {
|
|||||||
contribTable.setIntercellSpacing(new Dimension(0, 1));
|
contribTable.setIntercellSpacing(new Dimension(0, 1));
|
||||||
contribTable.setShowVerticalLines(false);
|
contribTable.setShowVerticalLines(false);
|
||||||
contribTable.setSelectionBackground(Theme.getColor("status.notice.bgcolor"));
|
contribTable.setSelectionBackground(Theme.getColor("status.notice.bgcolor"));
|
||||||
|
contribTable.addKeyListener(new AbstractKeyListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void keyReleased(KeyEvent keyEvent) {
|
||||||
|
if (keyEvent.getKeyCode() != keyEvent.VK_DOWN && keyEvent.getKeyCode() != KeyEvent.VK_UP) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
contribTable.editCellAt(contribTable.getSelectedRow(), contribTable.getSelectedColumn());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
{
|
{
|
||||||
TableColumnModel tcm = contribTable.getColumnModel();
|
TableColumnModel tcm = contribTable.getColumnModel();
|
||||||
TableColumn col = tcm.getColumn(DESCRIPTION_COL);
|
TableColumn col = tcm.getColumn(DESCRIPTION_COL);
|
||||||
col.setCellRenderer(createCellRenderer());
|
col.setCellRenderer(createCellRenderer());
|
||||||
cellEditor = createCellEditor();
|
col.setCellEditor(createCellEditor());
|
||||||
col.setCellEditor(cellEditor);
|
|
||||||
col.setResizable(true);
|
col.setResizable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,8 +253,10 @@ public abstract class InstallerJDialog<T> extends JDialog {
|
|||||||
categoryChooser.setEnabled(!visible);
|
categoryChooser.setEnabled(!visible);
|
||||||
contribTable.setEnabled(!visible);
|
contribTable.setEnabled(!visible);
|
||||||
errorMessageBox.setVisible(false);
|
errorMessageBox.setVisible(false);
|
||||||
cellEditor.setEnabled(!visible);
|
if (contribTable.getCellEditor() != null) {
|
||||||
cellEditor.setStatus(status);
|
((InstallerTableCell) contribTable.getCellEditor()).setEnabled(!visible);
|
||||||
|
((InstallerTableCell) contribTable.getCellEditor()).setStatus(status);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ActionListener categoryChooserActionListener = new ActionListener() {
|
protected ActionListener categoryChooserActionListener = new ActionListener() {
|
||||||
@ -252,7 +266,9 @@ public abstract class InstallerJDialog<T> extends JDialog {
|
|||||||
DropdownItem<T> selected = (DropdownItem<T>) categoryChooser.getSelectedItem();
|
DropdownItem<T> selected = (DropdownItem<T>) categoryChooser.getSelectedItem();
|
||||||
if (categoryFilter == null || !categoryFilter.equals(selected)) {
|
if (categoryFilter == null || !categoryFilter.equals(selected)) {
|
||||||
categoryFilter = selected.getFilterPredicate();
|
categoryFilter = selected.getFilterPredicate();
|
||||||
cellEditor.stopCellEditing();
|
if (contribTable.getCellEditor() != null) {
|
||||||
|
contribTable.getCellEditor().stopCellEditing();
|
||||||
|
}
|
||||||
contribModel.updateIndexFilter(categoryFilter, filters);
|
contribModel.updateIndexFilter(categoryFilter, filters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package cc.arduino.contributions.ui.listeners;
|
||||||
|
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.awt.event.KeyListener;
|
||||||
|
|
||||||
|
public abstract class AbstractKeyListener implements KeyListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void keyTyped(KeyEvent keyEvent) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void keyPressed(KeyEvent keyEvent) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void keyReleased(KeyEvent keyEvent) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package cc.arduino.contributions.ui.listeners;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.awt.event.KeyListener;
|
||||||
|
|
||||||
|
public class DelegatingKeyListener implements KeyListener {
|
||||||
|
|
||||||
|
private final Component delegate;
|
||||||
|
|
||||||
|
public DelegatingKeyListener(Component delegate) {
|
||||||
|
this.delegate = delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void keyTyped(final KeyEvent keyEvent) {
|
||||||
|
if (delegate.getKeyListeners() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (KeyListener listener : delegate.getKeyListeners()) {
|
||||||
|
listener.keyTyped(keyEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void keyPressed(KeyEvent keyEvent) {
|
||||||
|
if (delegate.getKeyListeners() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (KeyListener listener : delegate.getKeyListeners()) {
|
||||||
|
listener.keyPressed(keyEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void keyReleased(KeyEvent keyEvent) {
|
||||||
|
if (delegate.getKeyListeners() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (KeyListener listener : delegate.getKeyListeners()) {
|
||||||
|
listener.keyReleased(keyEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user