Skip to content

Commit 3fb3774

Browse files
author
Federico Fissore
committed
lib/core installer: scrolling with arrow keys almost works
1 parent 8922541 commit 3fb3774

File tree

5 files changed

+100
-14
lines changed

5 files changed

+100
-14
lines changed

app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCell.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import cc.arduino.contributions.libraries.filters.BuiltInPredicate;
3636
import cc.arduino.contributions.libraries.filters.OnlyUpstreamReleasePredicate;
3737
import cc.arduino.contributions.ui.InstallerTableCell;
38+
import cc.arduino.contributions.ui.listeners.DelegatingKeyListener;
3839
import cc.arduino.utils.ReverseComparator;
3940
import com.google.common.base.Function;
4041
import com.google.common.base.Predicates;
@@ -73,7 +74,6 @@ public class ContributedLibraryTableCell extends InstallerTableCell {
7374
private JComboBox versionToInstallChooser;
7475
private JButton downgradeButton;
7576
private JPanel buttonsPanel;
76-
private Component removeButtonStrut;
7777
private JPanel inactiveButtonsPanel;
7878
private JLabel statusLabel;
7979

@@ -155,8 +155,7 @@ public void itemStateChanged(ItemEvent e) {
155155
buttonsPanel.add(installButton);
156156
buttonsPanel.add(Box.createHorizontalStrut(5));
157157
buttonsPanel.add(removeButton);
158-
removeButtonStrut = Box.createHorizontalStrut(5);
159-
buttonsPanel.add(removeButtonStrut);
158+
buttonsPanel.add(Box.createHorizontalStrut(5));
160159
buttonsPanel.add(Box.createHorizontalStrut(15));
161160

162161
panel.add(buttonsPanel);
@@ -211,6 +210,7 @@ public void hyperlinkUpdate(HyperlinkEvent e) {
211210
}
212211
}
213212
});
213+
description.addKeyListener(new DelegatingKeyListener(parentTable));
214214
panel.add(description, 0);
215215
return description;
216216
}

app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCell.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import cc.arduino.contributions.packages.ContributedPlatform;
3535
import cc.arduino.contributions.packages.ContributedPlatformComparator;
3636
import cc.arduino.contributions.ui.InstallerTableCell;
37+
import cc.arduino.contributions.ui.listeners.DelegatingKeyListener;
3738
import cc.arduino.utils.ReverseComparator;
3839
import com.google.common.base.Function;
3940
import com.google.common.base.Predicates;
@@ -71,7 +72,6 @@ public class ContributedPlatformTableCell extends InstallerTableCell {
7172
private JComboBox versionToInstallChooser;
7273
private JButton downgradeButton;
7374
private JPanel buttonsPanel;
74-
private Component removeButtonStrut;
7575
private JPanel inactiveButtonsPanel;
7676
private JLabel statusLabel;
7777

@@ -153,8 +153,7 @@ public void itemStateChanged(ItemEvent e) {
153153
buttonsPanel.add(installButton);
154154
buttonsPanel.add(Box.createHorizontalStrut(5));
155155
buttonsPanel.add(removeButton);
156-
removeButtonStrut = Box.createHorizontalStrut(5);
157-
buttonsPanel.add(removeButtonStrut);
156+
buttonsPanel.add(Box.createHorizontalStrut(5));
158157
buttonsPanel.add(Box.createHorizontalStrut(15));
159158

160159
panel.add(buttonsPanel);
@@ -209,6 +208,7 @@ public void hyperlinkUpdate(HyperlinkEvent e) {
209208
}
210209
}
211210
});
211+
description.addKeyListener(new DelegatingKeyListener(parentTable));
212212
panel.add(description, 0);
213213
return description;
214214
}

app/src/cc/arduino/contributions/ui/InstallerJDialog.java

+24-8
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
*/
2929
package cc.arduino.contributions.ui;
3030

31+
import cc.arduino.contributions.ui.listeners.AbstractKeyListener;
3132
import com.google.common.base.Predicate;
3233
import processing.app.Base;
3334
import processing.app.Theme;
@@ -39,6 +40,7 @@
3940
import java.awt.*;
4041
import java.awt.event.ActionEvent;
4142
import java.awt.event.ActionListener;
43+
import java.awt.event.KeyEvent;
4244
import java.awt.event.WindowEvent;
4345

4446
import static cc.arduino.contributions.packages.ui.ContributionIndexTableModel.DESCRIPTION_COL;
@@ -78,8 +80,6 @@ public abstract class InstallerJDialog<T> extends JDialog {
7880
protected Box errorMessageBox;
7981
private final JLabel errorMessage;
8082

81-
protected InstallerTableCell cellEditor;
82-
8383
public InstallerJDialog(Frame parent, String title, ModalityType applicationModal, String noConnectionErrorMessage) {
8484
super(parent, title, applicationModal);
8585
this.noConnectionErrorMessage = noConnectionErrorMessage;
@@ -104,7 +104,9 @@ public InstallerJDialog(Frame parent, String title, ModalityType applicationModa
104104
@Override
105105
protected void onFilter(String[] _filters) {
106106
filters = _filters;
107-
cellEditor.stopCellEditing();
107+
if (contribTable.getCellEditor() != null) {
108+
contribTable.getCellEditor().stopCellEditing();
109+
}
108110
contribModel.updateIndexFilter(categoryFilter, filters);
109111
}
110112
};
@@ -130,13 +132,23 @@ protected void onFilter(String[] _filters) {
130132
contribTable.setIntercellSpacing(new Dimension(0, 1));
131133
contribTable.setShowVerticalLines(false);
132134
contribTable.setSelectionBackground(Theme.getColor("status.notice.bgcolor"));
135+
contribTable.addKeyListener(new AbstractKeyListener() {
136+
137+
@Override
138+
public void keyReleased(KeyEvent keyEvent) {
139+
if (keyEvent.getKeyCode() != keyEvent.VK_DOWN && keyEvent.getKeyCode() != KeyEvent.VK_UP) {
140+
return;
141+
}
142+
143+
contribTable.editCellAt(contribTable.getSelectedRow(), contribTable.getSelectedColumn());
144+
}
145+
});
133146

134147
{
135148
TableColumnModel tcm = contribTable.getColumnModel();
136149
TableColumn col = tcm.getColumn(DESCRIPTION_COL);
137150
col.setCellRenderer(createCellRenderer());
138-
cellEditor = createCellEditor();
139-
col.setCellEditor(cellEditor);
151+
col.setCellEditor(createCellEditor());
140152
col.setResizable(true);
141153
}
142154

@@ -241,8 +253,10 @@ public void setProgressVisible(boolean visible, String status) {
241253
categoryChooser.setEnabled(!visible);
242254
contribTable.setEnabled(!visible);
243255
errorMessageBox.setVisible(false);
244-
cellEditor.setEnabled(!visible);
245-
cellEditor.setStatus(status);
256+
if (contribTable.getCellEditor() != null) {
257+
((InstallerTableCell) contribTable.getCellEditor()).setEnabled(!visible);
258+
((InstallerTableCell) contribTable.getCellEditor()).setStatus(status);
259+
}
246260
}
247261

248262
protected ActionListener categoryChooserActionListener = new ActionListener() {
@@ -252,7 +266,9 @@ public void actionPerformed(ActionEvent event) {
252266
DropdownItem<T> selected = (DropdownItem<T>) categoryChooser.getSelectedItem();
253267
if (categoryFilter == null || !categoryFilter.equals(selected)) {
254268
categoryFilter = selected.getFilterPredicate();
255-
cellEditor.stopCellEditing();
269+
if (contribTable.getCellEditor() != null) {
270+
contribTable.getCellEditor().stopCellEditing();
271+
}
256272
contribModel.updateIndexFilter(categoryFilter, filters);
257273
}
258274
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package cc.arduino.contributions.ui.listeners;
2+
3+
import java.awt.event.KeyEvent;
4+
import java.awt.event.KeyListener;
5+
6+
public abstract class AbstractKeyListener implements KeyListener {
7+
8+
@Override
9+
public void keyTyped(KeyEvent keyEvent) {
10+
11+
}
12+
13+
@Override
14+
public void keyPressed(KeyEvent keyEvent) {
15+
16+
}
17+
18+
@Override
19+
public void keyReleased(KeyEvent keyEvent) {
20+
21+
}
22+
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package cc.arduino.contributions.ui.listeners;
2+
3+
import java.awt.*;
4+
import java.awt.event.KeyEvent;
5+
import java.awt.event.KeyListener;
6+
7+
public class DelegatingKeyListener implements KeyListener {
8+
9+
private final Component delegate;
10+
11+
public DelegatingKeyListener(Component delegate) {
12+
this.delegate = delegate;
13+
}
14+
15+
@Override
16+
public void keyTyped(final KeyEvent keyEvent) {
17+
if (delegate.getKeyListeners() == null) {
18+
return;
19+
}
20+
21+
for (KeyListener listener : delegate.getKeyListeners()) {
22+
listener.keyTyped(keyEvent);
23+
}
24+
}
25+
26+
@Override
27+
public void keyPressed(KeyEvent keyEvent) {
28+
if (delegate.getKeyListeners() == null) {
29+
return;
30+
}
31+
32+
for (KeyListener listener : delegate.getKeyListeners()) {
33+
listener.keyPressed(keyEvent);
34+
}
35+
}
36+
37+
@Override
38+
public void keyReleased(KeyEvent keyEvent) {
39+
if (delegate.getKeyListeners() == null) {
40+
return;
41+
}
42+
43+
for (KeyListener listener : delegate.getKeyListeners()) {
44+
listener.keyReleased(keyEvent);
45+
}
46+
}
47+
}

0 commit comments

Comments
 (0)