Skip to content

Commit a3522a2

Browse files
committed
Context menu on data set list on creation dialog.
1 parent 55efc40 commit a3522a2

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/creation/MasterDetailDialogPage.java

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
import java.awt.dnd.DropTargetDropEvent;
1414
import java.awt.dnd.DropTargetEvent;
1515
import java.awt.dnd.DropTargetListener;
16+
import java.awt.event.MouseAdapter;
17+
import java.awt.event.MouseEvent;
18+
import java.awt.event.MouseListener;
1619
import java.io.File;
1720
import java.io.IOException;
1821
import java.util.ArrayList;
@@ -34,8 +37,10 @@
3437
import javax.swing.JFrame;
3538
import javax.swing.JLabel;
3639
import javax.swing.JList;
40+
import javax.swing.JMenuItem;
3741
import javax.swing.JOptionPane;
3842
import javax.swing.JPanel;
43+
import javax.swing.JPopupMenu;
3944
import javax.swing.JScrollPane;
4045
import javax.swing.JSplitPane;
4146
import javax.swing.LayoutStyle;
@@ -294,6 +299,31 @@ private void deleteSelectedItems() {
294299
}
295300
}
296301

302+
private void moveItemUp() {
303+
int index = dataSetList.getSelectedIndex();
304+
// can't move "common files" or top data set
305+
if(index >= 2) {
306+
swap(index, index - 1);
307+
}
308+
}
309+
310+
private void moveItemDown() {
311+
int index = dataSetList.getSelectedIndex();
312+
if(index != 0 && index != dataSetListModel.getSize() - 1) {
313+
swap(index, index + 1);
314+
}
315+
}
316+
317+
private void swap(int a, int b) {
318+
DataSetListItem itemA = dataSetListModel.getElementAt(a);
319+
DataSetListItem itemB = dataSetListModel.getElementAt(b);
320+
dataSetListModel.set(a, itemB);
321+
dataSetListModel.set(b, itemA);
322+
dataSetList.setSelectedIndex(b);
323+
dataSetList.ensureIndexIsVisible(b);
324+
}
325+
326+
297327
private void selectItem(DataSetListItem params) {
298328
cardLayout.show(dataSetDetailPanel, params == null ? "nothing" : params.id);
299329
dataSetDetailPanel.revalidate();
@@ -499,6 +529,7 @@ public DataSetList(ListModel<DataSetListItem> model) {
499529
setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
500530
setDropMode(DropMode.ON);
501531
setTransferHandler(new ResolverTaskTransferHandler());
532+
addMouseListener(getContextMenuMouseListener());
502533
try {
503534
getDropTarget().addDropTargetListener(getDropTargetListener());
504535
} catch (TooManyListenersException e) { /* do nothing */ }
@@ -535,6 +566,45 @@ public Component getListCellRendererComponent(JList<? extends DataSetListItem> l
535566
}
536567
}
537568

569+
570+
private MouseListener getContextMenuMouseListener() {
571+
return new MouseAdapter() {
572+
@Override public void mousePressed(MouseEvent e) {
573+
showContextMenu(e);
574+
}
575+
@Override public void mouseReleased(MouseEvent e) {
576+
showContextMenu(e);
577+
}
578+
private void showContextMenu(MouseEvent e) {
579+
if(!e.isPopupTrigger())
580+
return;
581+
582+
int index = locationToIndex(e.getPoint());
583+
if(index != -1 && getCellBounds(index,index).contains(e.getPoint())) {
584+
setSelectedIndex(index);
585+
586+
JMenuItem deleteItem = new JMenuItem("Delete");
587+
deleteItem.addActionListener(ae -> deleteSelectedItems());
588+
JMenuItem upItem = new JMenuItem("Move Up");
589+
upItem.addActionListener(ae -> moveItemUp());
590+
JMenuItem downItem = new JMenuItem("Move Down");
591+
downItem.addActionListener(ae -> moveItemDown());
592+
593+
deleteItem.setEnabled(index > 0);
594+
upItem.setEnabled(index > 1);
595+
downItem.setEnabled(index != 0 && index != getModel().getSize()-1);
596+
597+
JPopupMenu menu = new JPopupMenu();
598+
menu.add(upItem);
599+
menu.add(downItem);
600+
menu.addSeparator();
601+
menu.add(deleteItem);
602+
menu.show(DataSetList.this, e.getX(), e.getY());
603+
}
604+
}
605+
};
606+
}
607+
538608
private DropTargetListener getDropTargetListener() {
539609
return new DropTargetAdapter() {
540610
Color normalColor = getBackground();
@@ -554,6 +624,7 @@ public void drop(DropTargetDropEvent e) {
554624
}
555625
};
556626
}
627+
557628
}
558629

559630

0 commit comments

Comments
 (0)