Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 60f2677

Browse files
committed
Add on-hover selection on Board/Library manager
User testing on skilled devs showed that "buttons appear on click" behaviour is far from being understood. Accessibility features (like moving with Arrow keys) should be untouched.
1 parent a47e626 commit 60f2677

File tree

7 files changed

+56
-8
lines changed

7 files changed

+56
-8
lines changed

‎app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellEditor.java‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,12 @@ public Component getTableCellEditorComponent(JTable table, Object value,
7676
ContributedLibrary lib = (ContributedLibrary) chooser.getSelectedItem();
7777
onInstall(lib, editorValue.getInstalled());
7878
});
79-
editorCell.versionToInstallChooser.addItemListener(e -> editorValue
80-
.select((ContributedLibrary) editorCell.versionToInstallChooser
81-
.getSelectedItem()));
79+
editorCell.versionToInstallChooser.addActionListener(e -> {
80+
editorValue.select((ContributedLibrary) editorCell.versionToInstallChooser.getSelectedItem());
81+
if (editorCell.versionToInstallChooser.getSelectedIndex() != 0) {
82+
InstallerTableCell.dropdownSelected(true);
83+
}
84+
});
8285

8386
setEnabled(true);
8487

‎app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,13 @@ public ContributedLibraryTableCellJPanel(JTable parentTable, Object value,
5454
downgradeChooser.addItem("-");
5555
downgradeChooser.setMaximumSize(new Dimension((int)downgradeChooser.getPreferredSize().getWidth() + 50, (int)downgradeChooser.getPreferredSize().getHeight()));
5656
downgradeChooser.setMinimumSize(new Dimension((int)downgradeChooser.getPreferredSize().getWidth() + 50, (int)downgradeChooser.getPreferredSize().getHeight()));
57-
downgradeChooser.addItemListener(e -> {
57+
downgradeChooser.addActionListener(e -> {
5858
Object selectVersionItem = downgradeChooser.getItemAt(0);
59-
boolean disableDowngrade = (e.getItem() == selectVersionItem);
59+
boolean disableDowngrade = (downgradeChooser.getSelectedItem() == selectVersionItem);
6060
downgradeButton.setEnabled(!disableDowngrade);
61+
if (!disableDowngrade) {
62+
InstallerTableCell.dropdownSelected(true);
63+
}
6164
});
6265

6366
versionToInstallChooser = new JComboBox();

‎app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ public LibraryManagerUI(Frame parent, LibraryInstaller installer) {
117117
@Override
118118
public void actionPerformed(ActionEvent event) {
119119
DropdownItem<ContributedLibrary> selected = (DropdownItem<ContributedLibrary>) typeChooser.getSelectedItem();
120+
previousRowAtPoint = -1;
120121
if (typeFilter == null || !typeFilter.equals(selected)) {
121122
typeFilter = selected.getFilterPredicate();
122123
if (contribTable.getCellEditor() != null) {

‎app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCellEditor.java‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,12 @@ public Component getTableCellEditorComponent(JTable table, Object _value,
7474
.getSelectedItem();
7575
onInstall(selected, value.getInstalled());
7676
});
77-
cell.versionToInstallChooser.addItemListener(e -> value
78-
.select((ContributedPlatform) cell.versionToInstallChooser
79-
.getSelectedItem()));
77+
cell.versionToInstallChooser.addActionListener(e -> {
78+
value.select((ContributedPlatform) cell.versionToInstallChooser.getSelectedItem());
79+
if (cell.versionToInstallChooser.getSelectedIndex() != 0) {
80+
InstallerTableCell.dropdownSelected(true);
81+
}
82+
});
8083

8184
setEnabled(true);
8285

‎app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCellJPanel.java‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ public ContributedPlatformTableCellJPanel() {
9898
Object selectVersionItem = downgradeChooser.getItemAt(0);
9999
boolean disableDowngrade = (e.getItem() == selectVersionItem);
100100
downgradeButton.setEnabled(!disableDowngrade);
101+
if (!disableDowngrade) {
102+
InstallerTableCell.dropdownSelected(true);
103+
}
101104
});
102105

103106
versionToInstallChooser = new JComboBox();

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
import java.awt.event.FocusListener;
4444
import java.awt.event.KeyEvent;
4545
import java.awt.event.WindowEvent;
46+
import java.awt.event.MouseEvent;
47+
import java.awt.event.MouseMotionListener;
4648
import java.util.function.Predicate;
4749
import java.util.stream.Stream;
4850

@@ -88,6 +90,8 @@ public abstract class InstallerJDialog<T> extends JDialog {
8890
private final JButton closeButton;
8991
private final JButton dismissErrorMessageButton;
9092

93+
protected int previousRowAtPoint = -1;
94+
9195
abstract protected FilteredAbstractTableModel<T> createContribModel();
9296

9397
abstract protected TableCellRenderer createCellRenderer();
@@ -118,6 +122,7 @@ public InstallerJDialog(Frame parent, String title, ModalityType applicationModa
118122
filterField = new FilterJTextField(tr("Filter your search...")) {
119123
@Override
120124
protected void onFilter(String[] _filters) {
125+
previousRowAtPoint = -1;
121126
filters = _filters;
122127
if (contribTable.getCellEditor() != null) {
123128
contribTable.getCellEditor().stopCellEditing();
@@ -167,6 +172,25 @@ public void keyReleased(KeyEvent keyEvent) {
167172
}
168173
});
169174

175+
contribTable.addMouseMotionListener(new MouseMotionListener() {
176+
177+
public void mouseDragged(MouseEvent e) {}
178+
179+
public void mouseMoved(MouseEvent e) {
180+
// avoid firing edits events until the mouse changes cell or the user is back on the cell after selecting a dropdown
181+
int rowAtPoint = contribTable.rowAtPoint(e.getPoint());
182+
if (!InstallerTableCell.isDropdownSelected() && rowAtPoint != previousRowAtPoint) {
183+
contribTable.editCellAt(rowAtPoint, 0);
184+
previousRowAtPoint = rowAtPoint;
185+
InstallerTableCell.dropdownSelected(false);
186+
}
187+
if (InstallerTableCell.isDropdownSelected() && rowAtPoint == previousRowAtPoint) {
188+
// back to the original cell, can drop dropdown selector lock
189+
InstallerTableCell.dropdownSelected(false);
190+
}
191+
}
192+
});
193+
170194
{
171195
TableColumnModel tcm = contribTable.getColumnModel();
172196
TableColumn col = tcm.getColumn(0);
@@ -286,6 +310,7 @@ private void setErrorMessageVisible(boolean visible) {
286310
@Override
287311
public void actionPerformed(ActionEvent event) {
288312
DropdownItem<T> selected = (DropdownItem<T>) categoryChooser.getSelectedItem();
313+
previousRowAtPoint = -1;
289314
if (categoryFilter == null || !categoryFilter.equals(selected)) {
290315
categoryFilter = selected.getFilterPredicate();
291316
if (contribTable.getCellEditor() != null) {

‎app/src/cc/arduino/contributions/ui/InstallerTableCell.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ public abstract class InstallerTableCell extends AbstractCellEditor implements T
4141

4242
abstract public void setEnabled(boolean b);
4343

44+
private static boolean dropdownSelected = false;
45+
46+
public static boolean isDropdownSelected( ) {
47+
return dropdownSelected;
48+
}
49+
50+
public static void dropdownSelected(boolean b) {
51+
dropdownSelected = b;
52+
}
53+
4454
abstract public void setStatus(String s);
4555

4656
public static void setJTextPaneDimensionToFitContainedText(JTextPane jTextPane, int width) {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /