From a228f29a402fdfda7e48891bf54899a447688982 Mon Sep 17 00:00:00 2001 From: Denny Date: Sat, 28 Jan 2017 20:41:46 -0500 Subject: [PATCH] Resolves #154 - add right-click contextual channel menus for Now Playing table. Also disables right-click channel activation from the spectral display as a clean-up action. --- .../metadata/ChannelMetadataPanel.java | 56 +++++++++++++++++++ .../channel/ChannelProcessingManager.java | 8 +++ src/spectrum/SpectralDisplayPanel.java | 30 +++++----- 3 files changed, 79 insertions(+), 15 deletions(-) diff --git a/src/channel/metadata/ChannelMetadataPanel.java b/src/channel/metadata/ChannelMetadataPanel.java index d16161de..e9ecef00 100644 --- a/src/channel/metadata/ChannelMetadataPanel.java +++ b/src/channel/metadata/ChannelMetadataPanel.java @@ -22,9 +22,12 @@ import alias.Alias; import channel.state.State; import controller.channel.Channel; import controller.channel.ChannelProcessingManager; +import controller.channel.ChannelUtils; import icon.IconManager; import module.ProcessingChain; import net.miginfocom.swing.MigLayout; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import properties.SystemProperties; import sample.Broadcaster; import sample.Listener; @@ -34,9 +37,13 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableCellRenderer; import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; public class ChannelMetadataPanel extends JPanel implements ListSelectionListener { + private final static Logger mLog = LoggerFactory.getLogger(ChannelMetadataPanel.class); + private static final String PROPERTY_PREFIX_BACKGROUND = "channel.metadata.panel.state.color."; private static final String PROPERTY_PREFIX_FOREGROUND = "channel.metadata.panel.text.color."; private ChannelProcessingManager mChannelProcessingManager; @@ -68,6 +75,7 @@ public class ChannelMetadataPanel extends JPanel implements ListSelectionListene renderer.setHorizontalAlignment(SwingConstants.CENTER); mTable.getSelectionModel().addListSelectionListener(this); + mTable.addMouseListener(new MouseSupport()); mTable.getColumnModel().getColumn(ChannelMetadataModel.COLUMN_STATE) .setCellRenderer(new ColoredStateCellRenderer()); @@ -223,4 +231,52 @@ public class ChannelMetadataPanel extends JPanel implements ListSelectionListene return label; } } + + public class MouseSupport extends MouseAdapter + { + @Override + public void mouseClicked(MouseEvent e) + { + if(e.getButton() == MouseEvent.BUTTON3) //Right click for context + { + JPopupMenu popupMenu = new JPopupMenu(); + + boolean populated = false; + + int viewRowIndex = mTable.rowAtPoint(e.getPoint()); + + if(viewRowIndex >= 0) + { + int modelRowIndex = mTable.convertRowIndexToModel(viewRowIndex); + + if(modelRowIndex >= 0) + { + Metadata metadata = mChannelProcessingManager.getChannelMetadataModel().getMetadata(modelRowIndex); + + if(metadata != null) + { + Channel channel = mChannelProcessingManager.getChannelMetadataModel() + .getChannelFromMetadata(metadata); + + if(channel != null) + { + popupMenu.add(ChannelUtils.getContextMenu(mChannelProcessingManager.getChannelModel(), + mChannelProcessingManager, channel, mTable)); + + populated = true; + } + } + + } + } + + if(!populated) + { + popupMenu.add(new JMenuItem("No Actions Available")); + } + + popupMenu.show(mTable, e.getX(), e.getY()); + } + } + } } diff --git a/src/controller/channel/ChannelProcessingManager.java b/src/controller/channel/ChannelProcessingManager.java index 04c65e49..93bf1f0c 100644 --- a/src/controller/channel/ChannelProcessingManager.java +++ b/src/controller/channel/ChannelProcessingManager.java @@ -90,6 +90,14 @@ public class ChannelProcessingManager implements ChannelEventListener return mChannelMetadataModel; } + /** + * Channel model + */ + public ChannelModel getChannelModel() + { + return mChannelModel; + } + /** * Indicates if a processing chain is constructed for the channel and that * the processing chain is currently processing. diff --git a/src/spectrum/SpectralDisplayPanel.java b/src/spectrum/SpectralDisplayPanel.java index 93779777..505c17e0 100644 --- a/src/spectrum/SpectralDisplayPanel.java +++ b/src/spectrum/SpectralDisplayPanel.java @@ -636,21 +636,21 @@ public class SpectralDisplayPanel extends JPanel implements Listener