/* * MediathekView * Copyright (C) 2014 W. Xaver * W.Xaver[at]googlemail.com * http://zdfmediathk.sourceforge.net/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package mediathek.gui.filmInformation; import mSearch.daten.DatenFilm; import mediathek.config.Icons; import mediathek.config.MVConfig; import mediathek.gui.actions.UrlHyperlinkAction; import mediathek.tool.BeobMausUrl; import mediathek.tool.EscBeenden; import mediathek.tool.GuiFunktionen; import org.jdesktop.swingx.JXHyperlink; import javax.swing.*; import javax.swing.event.ChangeEvent; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.net.URISyntaxException; @SuppressWarnings("serial") public class MVFilmInformationLWin extends JDialog implements IFilmInformation { private JXHyperlink lblUrlThemaField; private JXHyperlink lblUrlSubtitle; private JTextArea textAreaBeschreibung; private JLabel jLabelFilmNeu; private JLabel jLabelFilmHD; private JLabel jLabelFilmUT; private final JLabel[] labelArrNames = new JLabel[DatenFilm.MAX_ELEM]; private final JTextField[] txtArrCont = new JTextField[DatenFilm.MAX_ELEM]; private DatenFilm aktFilm = new DatenFilm(); private final JFrame parent; private static final ImageIcon ja_sw_16 = Icons.ICON_DIALOG_EIN_SW; static Point mouseDownCompCoords; private final JDialog dialog; public MVFilmInformationLWin(JFrame owner) { super(MVConfig.getBool(MVConfig.Configs.SYSTEM_FILM_INFO_TOP) ? owner : null, false); initComponents(); dialog = this; parent = owner; setTitle("Filminformation"); for (int i = 0; i < DatenFilm.MAX_ELEM; ++i) { labelArrNames[i] = new JLabel(DatenFilm.COLUMN_NAMES[i] + ':'); labelArrNames[i].setHorizontalAlignment(SwingConstants.RIGHT); labelArrNames[i].setDoubleBuffered(true); txtArrCont[i] = new JTextField(""); txtArrCont[i].setEditable(false); txtArrCont[i].setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); txtArrCont[i].setDoubleBuffered(true); } Dimension size = new Dimension(500, 600);//w,h this.setSize(size); setExtra(jPanelExtra); jPanelExtra.addMouseListener(new BeobMaus()); new EscBeenden(this) { @Override public void beenden_(JDialog d) { d.dispose(); } }; mouseDownCompCoords = null; jPanelExtra.addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent e) { mouseDownCompCoords = null; } @Override public void mousePressed(MouseEvent e) { mouseDownCompCoords = e.getPoint(); } @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } }); jPanelExtra.addMouseMotionListener(new MouseMotionListener() { @Override public void mouseMoved(MouseEvent e) { } @Override public void mouseDragged(MouseEvent e) { Point currCoords = e.getLocationOnScreen(); setLocation(currCoords.x - mouseDownCompCoords.x, currCoords.y - mouseDownCompCoords.y); } }); GuiFunktionen.setDialogDecorated(dialog, jPanelOut, MVConfig.getBool(MVConfig.Configs.SYSTEM_FILM_INFO_DECORATED)); } private void setExtra(JPanel jPanel) { GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); lblUrlThemaField = new JXHyperlink(); lblUrlThemaField.setDoubleBuffered(true); lblUrlThemaField.setMinimumSize(new Dimension(10, 10)); try { lblUrlThemaField.setAction(new UrlHyperlinkAction(parent, "")); } catch (URISyntaxException ignored) { } lblUrlThemaField.addMouseListener(new BeobMausUrl(lblUrlThemaField)); lblUrlSubtitle = new JXHyperlink(); lblUrlSubtitle.setDoubleBuffered(true); lblUrlSubtitle.setMinimumSize(new Dimension(10, 10)); try { lblUrlSubtitle.setAction(new UrlHyperlinkAction(parent, "")); } catch (URISyntaxException ignored) { } lblUrlSubtitle.addMouseListener(new BeobMausUrl(lblUrlSubtitle)); jLabelFilmNeu = new JLabel(); jLabelFilmNeu.setOpaque(false); jLabelFilmNeu.setVisible(false); jLabelFilmNeu.setIcon(ja_sw_16); jLabelFilmHD = new JLabel(); jLabelFilmHD.setOpaque(false); jLabelFilmHD.setVisible(false); jLabelFilmHD.setIcon(ja_sw_16); jLabelFilmUT = new JLabel(); jLabelFilmUT.setOpaque(false); jLabelFilmUT.setVisible(false); jLabelFilmUT.setIcon(ja_sw_16); textAreaBeschreibung = new JTextArea(); textAreaBeschreibung.setDoubleBuffered(true); textAreaBeschreibung.setLineWrap(true); textAreaBeschreibung.setWrapStyleWord(true); textAreaBeschreibung.setRows(4); textAreaBeschreibung.setOpaque(false); c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(4, 10, 4, 10); c.weighty = 0; jPanel.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; addLable(i, gridbag, c, jPanel); ++zeile; } // zum zusammenschieben c.weightx = 0; c.gridx = 0; c.weighty = 1; c.gridy = zeile; JLabel label = new JLabel(""); gridbag.setConstraints(label, c); jPanel.add(label); } private void addLable(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 = 1; 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: JScrollPane sp = new JScrollPane(); sp.setMinimumSize(new Dimension(10, 100)); sp.setViewportView(textAreaBeschreibung); gridbag.setConstraints(sp, c); panel.add(sp); 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; } } @Override public void showInfo() { setAktFilm(); super.setVisible(true); } @Override public void updateCurrentFilm(DatenFilm film) { aktFilm = film; if (this.isVisible()) { setAktFilm(); } } private void setAktFilm() { if (aktFilm == null) { for (JTextField aTxtArrCont : txtArrCont) { aTxtArrCont.setText(""); } textAreaBeschreibung.setText(" "); lblUrlThemaField.setText(""); lblUrlSubtitle.setText(""); jLabelFilmNeu.setVisible(false); jLabelFilmHD.setVisible(false); jLabelFilmUT.setVisible(false); } 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()); } this.repaint(); } @Override public void stateChanged(ChangeEvent changeEvent) { //Whenever there is a change event, reset HUD info to nothing DatenFilm emptyFilm = new DatenFilm(); updateCurrentFilm(emptyFilm); } private class BeobMaus extends MouseAdapter { JCheckBox cbkTop = new JCheckBox("Immer im Vordergrund"); JCheckBox cbkBorder = new JCheckBox("Rand anzeigen"); JMenuItem itemClose = new JMenuItem("Ausblenden"); public BeobMaus() { cbkTop.setSelected(MVConfig.getBool(MVConfig.Configs.SYSTEM_FILM_INFO_TOP)); cbkTop.addActionListener(l -> { MVConfig.add(MVConfig.Configs.SYSTEM_FILM_INFO_TOP, Boolean.toString(cbkTop.isSelected())); GuiFunktionen.setParent(dialog, MVConfig.getBool(MVConfig.Configs.SYSTEM_FILM_INFO_TOP) ? parent : null); }); cbkBorder.setSelected(MVConfig.getBool(MVConfig.Configs.SYSTEM_FILM_INFO_DECORATED)); cbkBorder.addActionListener(l -> { MVConfig.add(MVConfig.Configs.SYSTEM_FILM_INFO_DECORATED, Boolean.toString(cbkBorder.isSelected())); GuiFunktionen.setDialogDecorated(dialog, jPanelOut, MVConfig.getBool(MVConfig.Configs.SYSTEM_FILM_INFO_DECORATED)); //setDialogBorder(); }); itemClose.addActionListener(l -> dispose()); } @Override public void mousePressed(MouseEvent arg0) { if (arg0.isPopupTrigger()) { showMenu(arg0); } } @Override public void mouseReleased(MouseEvent arg0) { if (arg0.isPopupTrigger()) { showMenu(arg0); } } private void showMenu(MouseEvent evt) { JPopupMenu jPopupMenu = new JPopupMenu(); jPopupMenu.add(cbkTop); jPopupMenu.add(cbkBorder); jPopupMenu.addSeparator(); jPopupMenu.add(itemClose); //anzeigen jPopupMenu.show(evt.getComponent(), evt.getX(), evt.getY()); } } // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jPanelOut = new javax.swing.JPanel(); jPanelExtra = new javax.swing.JPanel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); jPanelExtra.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); javax.swing.GroupLayout jPanelExtraLayout = new javax.swing.GroupLayout(jPanelExtra); jPanelExtra.setLayout(jPanelExtraLayout); jPanelExtraLayout.setHorizontalGroup( jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 477, Short.MAX_VALUE) ); jPanelExtraLayout.setVerticalGroup( jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 650, Short.MAX_VALUE) ); javax.swing.GroupLayout jPanelOutLayout = new javax.swing.GroupLayout(jPanelOut); jPanelOut.setLayout(jPanelOutLayout); jPanelOutLayout.setHorizontalGroup( jPanelOutLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelOutLayout.createSequentialGroup() .addContainerGap() .addComponent(jPanelExtra, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); jPanelOutLayout.setVerticalGroup( jPanelOutLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelOutLayout.createSequentialGroup() .addContainerGap() .addComponent(jPanelExtra, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanelOut, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanelOut, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); pack(); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel jPanelExtra; private javax.swing.JPanel jPanelOut; // End of variables declaration//GEN-END:variables }