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;
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;
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.
//
/**
- * 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);
}
//
*/
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"));
}
}
});
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;
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
- public static interface ComponentHoverListener extends EventListener {
+ public static interface ComponentSelectionListener extends EventListener {
/**
* Notifies the listener that the mouse is now over the given controlled
* @param controlledComponent
* The controlled component now under the mouse
*/
- void componentEntered(ControlledComponent controlledComponent);
+ void componentSelected(ControlledComponent controlledComponent);
}