package mediathek.gui.filmInformation;
import mSearch.daten.DatenFilm;
import mediathek.config.Icons;
import mediathek.gui.actions.UrlHyperlinkAction;
import mediathek.tool.BeobMausUrl;
import org.jdesktop.swingx.JXHyperlink;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import java.awt.*;
import java.net.URISyntaxException;
/**
* Display the current film information as a utility window.
*/
public class MVFilmInformationOSX implements IFilmInformation {
private JDialog hudDialog = null;
private JXHyperlink lblUrlThemaField;
private JXHyperlink lblUrlSubtitle;
private JTextArea textAreaBeschreibung;
private JLabel jLabelFilmNeu;
private JLabel jLabelFilmHD;
private JLabel jLabelFilmUT;
private JFrame parent = null;
private final JLabel[] labelArrNames = new JLabel[DatenFilm.MAX_ELEM];
private final JTextField[] txtArrCont = new JTextField[DatenFilm.MAX_ELEM];
private DatenFilm aktFilm = new DatenFilm();
private static final ImageIcon ja_sw_16 = Icons.ICON_DIALOG_EIN_SW;
private void createDialog(JFrame parent) {
hudDialog = new JDialog(parent);
hudDialog.setTitle("Filminformation");
hudDialog.setResizable(true);
hudDialog.setType(Window.Type.UTILITY);
hudDialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public MVFilmInformationOSX(JFrame owner) {
parent = owner;
createDialog(owner);
final Border emptyBorder = BorderFactory.createEmptyBorder(0, 0, 0, 0);
for (int i = 0; i < DatenFilm.MAX_ELEM; ++i) {
final JLabel lbl = new JLabel(DatenFilm.COLUMN_NAMES[i] + ':');
lbl.setHorizontalAlignment(SwingConstants.RIGHT);
labelArrNames[i] = lbl;
final JTextField tf = new JTextField("");
tf.setEditable(false);
tf.setBorder(emptyBorder);
txtArrCont[i] = tf;
}
hudDialog.setContentPane(buildLayout());
hudDialog.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
calculateHudPosition();
}
final private static int DEFAULT_WIDTH = 600;
final private static int DEFAULT_HEIGHT = 450;
private JComponent buildLayout() {
JPanel panel = new JPanel();
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
lblUrlThemaField = new JXHyperlink();
try {
lblUrlThemaField.setAction(new UrlHyperlinkAction(parent, ""));
} catch (URISyntaxException ignored) {
}
lblUrlThemaField.addMouseListener(new BeobMausUrl(lblUrlThemaField));
lblUrlSubtitle = new JXHyperlink();
try {
lblUrlSubtitle.setAction(new UrlHyperlinkAction(parent, ""));
} catch (URISyntaxException ignored) {
}
lblUrlSubtitle.addMouseListener(new BeobMausUrl(lblUrlSubtitle));
textAreaBeschreibung = new JTextArea();
textAreaBeschreibung.setLineWrap(true);
textAreaBeschreibung.setWrapStyleWord(true);
textAreaBeschreibung.setRows(4);
jLabelFilmNeu = new JLabel();
jLabelFilmNeu.setVisible(false);
jLabelFilmNeu.setIcon(ja_sw_16);
jLabelFilmHD = new JLabel();
jLabelFilmHD.setVisible(false);
jLabelFilmHD.setIcon(ja_sw_16);
jLabelFilmUT = new JLabel();
jLabelFilmUT.setVisible(false);
jLabelFilmUT.setIcon(ja_sw_16);
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(4, 10, 4, 10);
c.weighty = 0;
panel.setLayout(gridbag);
int zeile = 0;
for (int i = 0; i < labelArrNames.length; ++i) {
if (i == DatenFilm.FILM_URL_RTMP
|| i == DatenFilm.FILM_URL_AUTH
|| i == DatenFilm.FILM_URL_HD
|| i == DatenFilm.FILM_URL_RTMP_HD
|| i == DatenFilm.FILM_URL_KLEIN
|| i == DatenFilm.FILM_URL_RTMP_KLEIN
|| i == DatenFilm.FILM_ABSPIELEN
|| i == DatenFilm.FILM_AUFZEICHNEN
|| i == DatenFilm.FILM_DATUM_LONG
|| i == DatenFilm.FILM_URL_HISTORY
|| i == DatenFilm.FILM_REF) {
continue;
}
c.gridy = zeile;
addComponentWithLayoutConstraints(i, gridbag, c, panel);
++zeile;
}
// zum zusammenschieben
c.weightx = 0;
c.gridx = 0;
c.weighty = 2;
c.gridy = zeile;
JLabel label = new JLabel();
gridbag.setConstraints(label, c);
panel.add(label);
return panel;
}
private void addComponentWithLayoutConstraints(int i, GridBagLayout gridbag, GridBagConstraints c, JPanel panel) {
c.gridx = 0;
c.weightx = 0;
gridbag.setConstraints(labelArrNames[i], c);
panel.add(labelArrNames[i]);
c.gridx = 1;
c.weightx = 10;
switch (i) {
case DatenFilm.FILM_WEBSEITE:
gridbag.setConstraints(lblUrlThemaField, c);
panel.add(lblUrlThemaField);
break;
case DatenFilm.FILM_URL_SUBTITLE:
gridbag.setConstraints(lblUrlSubtitle, c);
panel.add(lblUrlSubtitle);
break;
case DatenFilm.FILM_BESCHREIBUNG:
gridbag.setConstraints(textAreaBeschreibung, c);
panel.add(textAreaBeschreibung);
break;
case DatenFilm.FILM_NEU:
gridbag.setConstraints(jLabelFilmNeu, c);
panel.add(jLabelFilmNeu);
break;
case DatenFilm.FILM_HD:
gridbag.setConstraints(jLabelFilmHD, c);
panel.add(jLabelFilmHD);
break;
case DatenFilm.FILM_UT:
gridbag.setConstraints(jLabelFilmUT, c);
panel.add(jLabelFilmUT);
break;
default:
gridbag.setConstraints(txtArrCont[i], c);
panel.add(txtArrCont[i]);
break;
}
}
private void calculateHudPosition() {
final GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
final DisplayMode dm = gd.getDisplayMode();
hudDialog.setLocation(dm.getWidth() - DEFAULT_WIDTH, 0);
}
@Override
public void showInfo() {
updateTextFields();
hudDialog.setVisible(true);
}
@Override
public boolean isVisible() {
return hudDialog.isVisible();
}
@Override
public void updateCurrentFilm(DatenFilm film) {
aktFilm = film;
if (isVisible()) {
updateTextFields();
}
}
private void clearAllFields() {
for (JTextField aTxtArrCont : txtArrCont) {
aTxtArrCont.setText("");
}
textAreaBeschreibung.setText(" ");
lblUrlThemaField.setText("");
lblUrlSubtitle.setText("");
jLabelFilmNeu.setVisible(false);
jLabelFilmHD.setVisible(false);
jLabelFilmUT.setVisible(false);
}
private void updateTextFields() {
if (aktFilm == null) {
clearAllFields();
} else {
for (int i = 0; i < txtArrCont.length; ++i) {
txtArrCont[i].setText(aktFilm.arr[i]);
}
if (aktFilm.arr[DatenFilm.FILM_BESCHREIBUNG].isEmpty()) {
// sonst müsste die Größe gesetzt werden
textAreaBeschreibung.setText(" ");
} else {
textAreaBeschreibung.setText(aktFilm.arr[DatenFilm.FILM_BESCHREIBUNG]);
}
lblUrlThemaField.setText(aktFilm.arr[DatenFilm.FILM_WEBSEITE]);
lblUrlSubtitle.setText(aktFilm.getUrlSubtitle());
jLabelFilmNeu.setVisible(aktFilm.isNew());
jLabelFilmHD.setVisible(aktFilm.isHD());
jLabelFilmUT.setVisible(aktFilm.hasUT());
}
hudDialog.repaint();
}
@Override
public void stateChanged(ChangeEvent changeEvent) {
//Whenever there is a change event, reset HUD info to nothing
DatenFilm emptyFilm = new DatenFilm();
updateCurrentFilm(emptyFilm);
}
}