package comeon.ui.media; import comeon.model.Media; import comeon.model.Media.State; import comeon.ui.UI; import javax.swing.*; import javax.swing.border.Border; import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.EnumMap; import java.util.Map; final class MediaPreviewPanel extends JComponent implements PropertyChangeListener { private static final long serialVersionUID = 1L; private static final int INNER_BORDER_WIDTH = 1; private final Map<Media.State, Border> borders; private final MediaPanels mediaPanels; private final int horizontalBordersWidth; private final int verticalBordersWidth; public MediaPreviewPanel(final MediaPanels mediaPanels, final Dimension componentSize, final int horizontalBordersWidth, final int verticalBordersWidth) { super.setMinimumSize(componentSize); super.setPreferredSize(componentSize); super.setMaximumSize(componentSize); this.setToolTipText(UI.BUNDLE.getString("media.preview.tooltip")); this.setBackground(Color.LIGHT_GRAY); this.mediaPanels = mediaPanels; this.horizontalBordersWidth = horizontalBordersWidth; this.verticalBordersWidth = verticalBordersWidth; this.borders = new EnumMap<>(State.class); final Border outerBorder = BorderFactory.createEmptyBorder(verticalBordersWidth, horizontalBordersWidth, verticalBordersWidth, horizontalBordersWidth); borders.put(State.ToBeUploaded, BorderFactory.createCompoundBorder(outerBorder, BorderFactory.createLineBorder(Color.WHITE, INNER_BORDER_WIDTH))); borders.put(State.UploadedSuccessfully, BorderFactory.createCompoundBorder(outerBorder, BorderFactory.createLineBorder(Color.GREEN, INNER_BORDER_WIDTH))); borders.put(State.FailedUpload, BorderFactory.createCompoundBorder(outerBorder, BorderFactory.createLineBorder(Color.RED, INNER_BORDER_WIDTH))); this.setBorder(borders.get(mediaPanels.getMedia().getState())); mediaPanels.getMedia().addPropertyChangeListener(this); } @Override protected void paintComponent(final Graphics g) { final Dimension size = this.getSize(); final Graphics2D g2 = (Graphics2D) g; final int componentWidth = (int) size.getWidth(); final int componentHeight = (int) size.getHeight(); g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.drawImage(this.mediaPanels.getThumbnail(), horizontalBordersWidth + INNER_BORDER_WIDTH, verticalBordersWidth + INNER_BORDER_WIDTH, componentWidth - (horizontalBordersWidth + INNER_BORDER_WIDTH), componentHeight - (verticalBordersWidth + INNER_BORDER_WIDTH), 0, 0, this.mediaPanels.getThumbnail().getWidth(), this.mediaPanels .getThumbnail().getHeight(), getBackground(), null); } @Override public void propertyChange(final PropertyChangeEvent evt) { if (evt.getSource() instanceof Media && "state".equals(evt.getPropertyName())) { final State newState = (State) evt.getNewValue(); this.setBorder(borders.get(newState)); this.repaint(); } } }