diff options
author | Hannah Chu <hanchu@google.com> | 2022-03-22 17:36:38 -0700 |
---|---|---|
committer | Juan C Nuno <juancnuno@google.com> | 2022-03-28 16:10:08 -0700 |
commit | 01945e02522b99debe277597c1cc1d974e19ddb5 (patch) | |
tree | 2a61c3243e85376599a66afa4b075707f347dded /device-manager | |
parent | f5a8153d368450241bcd011485f43db19791ea97 (diff) | |
download | idea-01945e02522b99debe277597c1cc1d974e19ddb5.tar.gz |
[DM] Scroll selected row into view
When the scroll pane is resized, which can occur when the user opens the
details panel, obscuring the selected row.
Bug: 203725228
Test: visual inspection
Change-Id: Ib107679b2685e0db8ad1b2d0d329a61ddb419159
Diffstat (limited to 'device-manager')
3 files changed, 21 insertions, 5 deletions
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/DevicePanel.java b/device-manager/src/com/android/tools/idea/devicemanager/DevicePanel.java index a3a64d47b53..9cb1e8ad9e6 100644 --- a/device-manager/src/com/android/tools/idea/devicemanager/DevicePanel.java +++ b/device-manager/src/com/android/tools/idea/devicemanager/DevicePanel.java @@ -19,6 +19,9 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.ui.components.JBPanel; +import com.intellij.ui.components.JBScrollPane; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; import javax.swing.JComponent; import javax.swing.JTable; import org.jetbrains.annotations.NotNull; @@ -28,7 +31,7 @@ public abstract class DevicePanel extends JBPanel<DevicePanel> implements Dispos protected final @Nullable Project myProject; protected JTable myTable; - protected JComponent myScrollPane; + private JComponent myScrollPane; protected DetailsPanelPanel myDetailsPanelPanel; private boolean isDisposed; @@ -44,6 +47,21 @@ public abstract class DevicePanel extends JBPanel<DevicePanel> implements Dispos protected abstract @NotNull JTable newTable(); + protected final void initScrollPane() { + myScrollPane = new JBScrollPane(myTable); + + myScrollPane.addComponentListener(new ComponentAdapter() { + @Override + public void componentResized(@NotNull ComponentEvent event) { + int viewRowIndex = myTable.getSelectedRow(); + + if (viewRowIndex != -1) { + myTable.scrollRectToVisible(myTable.getCellRect(viewRowIndex, 0, true)); + } + } + }); + } + protected final void initDetailsPanelPanel() { myDetailsPanelPanel = new DetailsPanelPanel(myScrollPane); Disposer.register(this, myDetailsPanelPanel); diff --git a/device-manager/src/com/android/tools/idea/devicemanager/physicaltab/PhysicalDevicePanel.java b/device-manager/src/com/android/tools/idea/devicemanager/physicaltab/PhysicalDevicePanel.java index 2897404eaba..15e0800fe8e 100644 --- a/device-manager/src/com/android/tools/idea/devicemanager/physicaltab/PhysicalDevicePanel.java +++ b/device-manager/src/com/android/tools/idea/devicemanager/physicaltab/PhysicalDevicePanel.java @@ -28,7 +28,6 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; -import com.intellij.ui.components.JBScrollPane; import com.intellij.ui.scale.JBUIScale; import com.intellij.util.concurrency.EdtExecutorService; import com.intellij.util.ui.JBDimension; @@ -119,7 +118,7 @@ public final class PhysicalDevicePanel extends DevicePanel { initSeparator(); initHelpButton(); initTable(); - myScrollPane = new JBScrollPane(myTable); + initScrollPane(); initDetailsPanelPanel(); layOut(); diff --git a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevicePanel.java b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevicePanel.java index 0ec0aa6985c..b6ced0db733 100644 --- a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevicePanel.java +++ b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevicePanel.java @@ -23,7 +23,6 @@ import com.intellij.ide.BrowserUtil; import com.intellij.openapi.Disposable; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; -import com.intellij.ui.components.JBScrollPane; import com.intellij.ui.scale.JBUIScale; import com.intellij.util.ui.JBDimension; import java.awt.Dimension; @@ -49,7 +48,7 @@ public final class VirtualDevicePanel extends DevicePanel { myProject = project; initTable(); - myScrollPane = new JBScrollPane(myTable); + initScrollPane(); myCreateButton = new JButton("Create device"); myCreateButton.addActionListener(new BuildVirtualDeviceConfigurationWizardActionListener(myCreateButton, |