package com.quiltplayer.view.swing.panels.controlpanels; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.LinearGradientPaint; import java.awt.RenderingHints; import java.awt.geom.Point2D; import javax.annotation.PostConstruct; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.SwingConstants; import net.miginfocom.swing.MigLayout; import org.neo4j.graphdb.GraphDatabaseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.quiltplayer.controller.ControlPanelController; import com.quiltplayer.properties.Configuration; import com.quiltplayer.utils.ClassPathUtils; import com.quiltplayer.view.swing.buttons.QControlPanelButton; import com.quiltplayer.view.swing.handlers.ExitHandler; import com.quiltplayer.view.swing.listeners.ControlPanelListener; import com.quiltplayer.view.swing.panels.MainTabs; /** * GUI for the control panel. * * @author Vlado Palczynski */ /** * @author Vlado Palczynski */ @Component public class ControlPanel extends JPanel { private static final long serialVersionUID = 1L; public static final String EVENT_QUILT = "album.quilt"; public static final String EVENT_VIEW_SEARCH = "view.search"; public static final String EVENT_VIEW_ABOUT = "view.about"; private Color[] gradient = { new Color(80, 80, 80), new Color(50, 50, 50), new Color(20, 20, 20), new Color(00, 00, 00) }; private float[] dist = { 0.0f, 0.48f, 0.52f, 1.0f }; // private Color[] gradient = { new Color(30, 30, 30), new Color(10, 10, 10) }; // private float[] dist = { 0.0f, 1.0f }; @Autowired private ControlPanelListener controlPanelListener; private QControlPanelButton quiltButton; private QControlPanelButton artistsButton; private QControlPanelButton searchButton; private QControlPanelButton configButton; private QControlPanelButton keyboardButton; @Autowired private GraphDatabaseService graphDatabaseService; private JButton exitButton; @Autowired private PlayerControlPanel playerControlPanel; @PostConstruct public void init() { setDefaults(); } public void setDefaults() { setLayout(new MigLayout("insets 0, fill, flowy, center")); setOpaque(false); setupQuiltCollectionButton(); setupAlfabeticArtistsButton(); setupSearchButton(); setupConfigurationButton(); setupExitButton(); setupKeyboardTab(); final String s = "h 100%, w 3cm"; final JPanel applicationButtons = new JPanel(new MigLayout("insets 0.5cm 0 0.5cm 0, alignx center, flowy")); applicationButtons.setOpaque(false); applicationButtons.add(quiltButton, s); applicationButtons.add(artistsButton, s); applicationButtons.add(searchButton, s); applicationButtons.add(configButton, s); applicationButtons.add(keyboardButton, s); applicationButtons.add(exitButton, s); add(applicationButtons, "h 100% - 2cm, west"); updateUI(); } private void setupQuiltCollectionButton() { quiltButton = new QControlPanelButton("Quilt", ClassPathUtils.getIconFromClasspath("white/small-tiles.png"), SwingConstants.BOTTOM, SwingConstants.RIGHT); quiltButton.addActionListener(controlPanelListener); quiltButton.setActionCommand(EVENT_QUILT); } private void setupAlfabeticArtistsButton() { artistsButton = new QControlPanelButton("Artists", ClassPathUtils.getIconFromClasspath("white/large-tiles.png"), SwingConstants.BOTTOM, SwingConstants.RIGHT); artistsButton.addActionListener(controlPanelListener); artistsButton.setActionCommand(ControlPanelController.EVENT_VIEW_ARTIST); } private void setupSearchButton() { searchButton = new QControlPanelButton("Spotify", ClassPathUtils.getIconFromClasspath("white/Search.png"), SwingConstants.BOTTOM, SwingConstants.RIGHT); searchButton.addActionListener(controlPanelListener); searchButton.setActionCommand(EVENT_VIEW_SEARCH); if (!Configuration.getInstance().getSpotifyProperties().isUseSpotify()) enableSearchTab(false); } private void setupConfigurationButton() { configButton = new QControlPanelButton("Config", ClassPathUtils.getIconFromClasspath("white/Settings.png"), SwingConstants.BOTTOM, SwingConstants.RIGHT); configButton.addActionListener(controlPanelListener); configButton.setActionCommand(ControlPanelController.EVENT_VIEW_CONFIGURATION); } private void setupKeyboardTab() { keyboardButton = new QControlPanelButton("Keys", ClassPathUtils.getIconFromClasspath("white/Keyboard.png"), SwingConstants.BOTTOM, SwingConstants.RIGHT); keyboardButton.addActionListener(controlPanelListener); keyboardButton.setActionCommand(ControlPanelController.EVENT_VIEW_KEYBOARD); } private void setupExitButton() { exitButton = new QControlPanelButton("End", ClassPathUtils.getIconFromClasspath("white/Power.png"), SwingConstants.BOTTOM, SwingConstants.RIGHT); exitButton.addActionListener(new ExitHandler(graphDatabaseService)); } public void updateTab(MainTabs tab) { quiltButton.inactivate(); artistsButton.inactivate(); configButton.inactivate(); searchButton.inactivate(); if (tab == null) { // Nada } else if (tab == MainTabs.QUILT) { quiltButton.activate(); } else if (tab == MainTabs.ARTISTS) { artistsButton.activate(); } else if (tab == MainTabs.CONFIGURATION) { configButton.activate(); } else if (tab == MainTabs.SEARCH) { searchButton.activate(); } repaint(); updateUI(); } /* * (non-Javadoc) * * @see javax.swing.JComponent#paintBorder(java.awt.Graphics) */ @Override protected void paintBorder(Graphics g) { } public void enableSearchTab(boolean b) { if (b) searchButton.setEnabled(true); else searchButton.setEnabled(false); } public PlayerControlPanel getPlayerControlPanel() { return playerControlPanel; } public void flashKeyboard() { System.out.println("Flash here"); } @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.80f)); /* Horizontal */ // Point2D start = new Point2D.Float(0, 0); // Point2D end = new Point2D.Float(0, getHeight()); /* Vertical */ Point2D start = new Point2D.Float(0, getHeight()); Point2D end = new Point2D.Float(getWidth(), getHeight()); LinearGradientPaint p = new LinearGradientPaint(start, end, dist, gradient); g2d.setPaint(p); g2d.fillRect(0, 0, getWidth(), getHeight()); } }