mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-227295 replaced KeyListener for project actions list with ActionMap using ListActions
GitOrigin-RevId: 99e33e1e59b01f06078d1cf1ba31eaea259bf05d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
507b13c25a
commit
bbad2b53e8
+39
-36
@@ -9,10 +9,7 @@ import com.intellij.openapi.actionSystem.ActionPlaces;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.util.io.UniqueNameBuilder;
|
||||
import com.intellij.openapi.wm.IdeFocusManager;
|
||||
import com.intellij.ui.ColorUtil;
|
||||
import com.intellij.ui.ComponentUtil;
|
||||
import com.intellij.ui.JBColor;
|
||||
import com.intellij.ui.PopupHandler;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.ui.components.JBList;
|
||||
import com.intellij.ui.components.panels.NonOpaquePanel;
|
||||
import com.intellij.ui.scale.JBUIScale;
|
||||
@@ -27,6 +24,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.util.Arrays;
|
||||
@@ -74,47 +72,52 @@ public class NewRecentProjectPanel extends RecentProjectPanel {
|
||||
final JBList list = super.createList(recentProjectActions, size);
|
||||
|
||||
list.setBackground(FlatWelcomeFrame.getProjectsBackground());
|
||||
list.addKeyListener(new KeyAdapter() {
|
||||
list.getActionMap().put(ListActions.Right.ID, new AbstractAction() {
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Object selected = list.getSelectedValue();
|
||||
final ProjectGroup group;
|
||||
ProjectGroup group = null;
|
||||
if (selected instanceof ProjectGroupActionGroup) {
|
||||
group = ((ProjectGroupActionGroup)selected).getGroup();
|
||||
} else {
|
||||
group = null;
|
||||
}
|
||||
|
||||
int keyCode = e.getKeyCode();
|
||||
if (keyCode == KeyEvent.VK_RIGHT) {
|
||||
if (group != null) {
|
||||
if (!group.isExpanded()) {
|
||||
group.setExpanded(true);
|
||||
ListModel model = ((NameFilteringListModel)list.getModel()).getOriginalModel();
|
||||
int index = list.getSelectedIndex();
|
||||
RecentProjectsWelcomeScreenActionBase.rebuildRecentProjectDataModel((DefaultListModel)model);
|
||||
list.setSelectedIndex(group.getProjects().isEmpty() ? index : index + 1);
|
||||
}
|
||||
} else {
|
||||
FlatWelcomeFrame frame = ComponentUtil.getParentOfType((Class<? extends FlatWelcomeFrame>)FlatWelcomeFrame.class, list);
|
||||
if (frame != null) {
|
||||
FocusTraversalPolicy policy = frame.getFocusTraversalPolicy();
|
||||
if (policy != null) {
|
||||
Component next = policy.getComponentAfter(frame, list);
|
||||
if (next != null) {
|
||||
IdeFocusManager.getGlobalInstance().doWhenFocusSettlesDown(() -> IdeFocusManager.getGlobalInstance().requestFocus(next, true));
|
||||
}
|
||||
if (group != null) {
|
||||
if (!group.isExpanded()) {
|
||||
group.setExpanded(true);
|
||||
ListModel model = ((NameFilteringListModel)list.getModel()).getOriginalModel();
|
||||
int index = list.getSelectedIndex();
|
||||
RecentProjectsWelcomeScreenActionBase.rebuildRecentProjectDataModel((DefaultListModel)model);
|
||||
list.setSelectedIndex(group.getProjects().isEmpty() ? index : index + 1);
|
||||
}
|
||||
} else {
|
||||
FlatWelcomeFrame frame = ComponentUtil.getParentOfType((Class<? extends FlatWelcomeFrame>)FlatWelcomeFrame.class, list);
|
||||
if (frame != null) {
|
||||
FocusTraversalPolicy policy = frame.getFocusTraversalPolicy();
|
||||
if (policy != null) {
|
||||
Component next = policy.getComponentAfter(frame, list);
|
||||
if (next != null) {
|
||||
IdeFocusManager.getGlobalInstance().doWhenFocusSettlesDown(() -> IdeFocusManager.getGlobalInstance().requestFocus(next, true));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (keyCode == KeyEvent.VK_LEFT ) {
|
||||
if (group != null && group.isExpanded()) {
|
||||
group.setExpanded(false);
|
||||
int index = list.getSelectedIndex();
|
||||
ListModel model = ((NameFilteringListModel)list.getModel()).getOriginalModel();
|
||||
RecentProjectsWelcomeScreenActionBase.rebuildRecentProjectDataModel((DefaultListModel)model);
|
||||
list.setSelectedIndex(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
list.getActionMap().put(ListActions.Left.ID, new AbstractAction() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Object selected = list.getSelectedValue();
|
||||
ProjectGroup group = null;
|
||||
if (selected instanceof ProjectGroupActionGroup) {
|
||||
group = ((ProjectGroupActionGroup)selected).getGroup();
|
||||
}
|
||||
|
||||
if (group != null && group.isExpanded()) {
|
||||
group.setExpanded(false);
|
||||
int index = list.getSelectedIndex();
|
||||
ListModel model = ((NameFilteringListModel)list.getModel()).getOriginalModel();
|
||||
RecentProjectsWelcomeScreenActionBase.rebuildRecentProjectDataModel((DefaultListModel)model);
|
||||
list.setSelectedIndex(index);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user