X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fgui%2FPipelinePanel.java;h=d47003d223d01c5058969eaac568f29f7962c1bd;hb=cad21ef42edbedab7193b68a0d927097bb956ec0;hp=42ddf9e735c7eb9863f6bb5b9d3b3e28d0518c8d;hpb=4cf400fa9e6a9c6c8b1d058a3fa508155ae29d3e;p=sonitus.git diff --git a/src/main/java/net/pterodactylus/sonitus/gui/PipelinePanel.java b/src/main/java/net/pterodactylus/sonitus/gui/PipelinePanel.java index 42ddf9e..d47003d 100644 --- a/src/main/java/net/pterodactylus/sonitus/gui/PipelinePanel.java +++ b/src/main/java/net/pterodactylus/sonitus/gui/PipelinePanel.java @@ -22,6 +22,8 @@ import static javax.swing.BorderFactory.createEmptyBorder; import static javax.swing.BorderFactory.createEtchedBorder; import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; @@ -30,8 +32,10 @@ import java.awt.event.MouseEvent; import java.util.Collection; import java.util.EventListener; import java.util.logging.Logger; +import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.UIManager; import javax.swing.event.EventListenerList; import net.pterodactylus.sonitus.data.ControlledComponent; @@ -55,7 +59,10 @@ public class PipelinePanel extends JPanel { private final Pipeline pipeline; /** The component hover listeners. */ - private final EventListenerList componentHoverListeners = new EventListenerList(); + private final EventListenerList componentSelectionListeners = new EventListenerList(); + + /** The currently selected component. */ + private JComponent selectedComponent; /** * Creates a new pipeline panel displaying the given pipeline. @@ -74,13 +81,13 @@ public class PipelinePanel extends JPanel { // /** - * Adds the given component hover listener to this panel. + * Adds the given component selection listener to this panel. * - * @param componentHoverListener - * The component hover listener to add + * @param componentSelectionListener + * The component selection listener to add */ - public void addComponentHoverListener(ComponentHoverListener componentHoverListener) { - componentHoverListeners.add(ComponentHoverListener.class, componentHoverListener); + public void addComponentHoverListener(ComponentSelectionListener componentSelectionListener) { + componentSelectionListeners.add(ComponentSelectionListener.class, componentSelectionListener); } // @@ -106,7 +113,6 @@ public class PipelinePanel extends JPanel { sinkCount++; } } - System.out.println(sinkCount); /* get number of maximum horizontal grid cells. */ int gridCellCount = 1; @@ -132,13 +138,32 @@ public class PipelinePanel extends JPanel { */ private void addControlled(final ControlledComponent controlledComponent, int level, int position, int width, ControlledComponent parentComponent) { /* create a GUI component that displays the component. */ - JPanel componentPanel = createComponentPanel(controlledComponent, parentComponent); + final JPanel componentPanel = createComponentPanel(controlledComponent, parentComponent); componentPanel.addMouseListener(new MouseAdapter() { @Override + public void mouseClicked(MouseEvent e) { + for (Component component : getComponents()) { + component.setBackground(UIManager.getColor("Panel.background")); + } + for (ComponentSelectionListener componentSelectionListener : componentSelectionListeners.getListeners(ComponentSelectionListener.class)) { + componentPanel.setBackground(Color.LIGHT_GRAY); + componentSelectionListener.componentSelected(controlledComponent); + } + selectedComponent = componentPanel; + } + + @Override public void mouseEntered(MouseEvent mouseEvent) { - for (ComponentHoverListener componentHoverListener : componentHoverListeners.getListeners(ComponentHoverListener.class)) { - componentHoverListener.componentEntered(controlledComponent); + if (componentPanel != selectedComponent) { + componentPanel.setBackground(Color.white); + } + } + + @Override + public void mouseExited(MouseEvent mouseEvent) { + if (componentPanel != selectedComponent) { + componentPanel.setBackground(UIManager.getColor("Panel.background")); } } }); @@ -176,26 +201,18 @@ public class PipelinePanel extends JPanel { JPanel componentPanel = new JPanel(new BorderLayout(12, 12)); componentPanel.setBorder(createCompoundBorder(createEtchedBorder(), createEmptyBorder(0, 4, 0, 3))); componentPanel.add(new JLabel(controlledComponent.name()), BorderLayout.WEST); - final JLabel titleLabel = new JLabel(controlledComponent.metadata().title()); + final JLabel titleLabel = new JLabel(controlledComponent.metadata().fullTitle()); titleLabel.setFont(titleLabel.getFont().deriveFont(titleLabel.getFont().getSize2D() * 0.8f)); componentPanel.add(titleLabel, BorderLayout.EAST); if (parentComponent != null) { - titleLabel.setVisible(!parentComponent.metadata().title().equals(controlledComponent.metadata().title())); - parentComponent.addMetadataListener(new MetadataListener() { - - @Override - public void metadataUpdated(ControlledComponent component, Metadata metadata) { - titleLabel.setText(metadata.title()); - titleLabel.setVisible(!controlledComponent.metadata().title().equals(metadata.title())); - } - }); + titleLabel.setVisible(!parentComponent.metadata().fullTitle().equals(controlledComponent.metadata().fullTitle())); } controlledComponent.addMetadataListener(new MetadataListener() { @Override public void metadataUpdated(ControlledComponent component, Metadata metadata) { - titleLabel.setText(metadata.title()); - titleLabel.setVisible((parentComponent == null) || !parentComponent.metadata().title().equals(metadata.title())); + titleLabel.setText(metadata.fullTitle()); + titleLabel.setVisible((parentComponent == null) || !parentComponent.metadata().fullTitle().equals(metadata.fullTitle())); } }); return componentPanel; @@ -207,7 +224,7 @@ public class PipelinePanel extends JPanel { * * @author David ‘Bombe’ Roden */ - public static interface ComponentHoverListener extends EventListener { + public static interface ComponentSelectionListener extends EventListener { /** * Notifies the listener that the mouse is now over the given controlled @@ -216,7 +233,7 @@ public class PipelinePanel extends JPanel { * @param controlledComponent * The controlled component now under the mouse */ - void componentEntered(ControlledComponent controlledComponent); + void componentSelected(ControlledComponent controlledComponent); }