/*
* MediathekView
* Copyright (C) 2008 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;
import com.jidesoft.utils.SystemInfo;
import mSearch.daten.DatenFilm;
import mSearch.daten.ListeFilme;
import mSearch.filmeSuchen.ListenerFilmeLaden;
import mSearch.filmeSuchen.ListenerFilmeLadenEvent;
import mSearch.tool.Datum;
import mSearch.tool.Listener;
import mSearch.tool.Log;
import mediathek.MediathekGui;
import mediathek.config.Daten;
import mediathek.config.Icons;
import mediathek.config.MVConfig;
import mediathek.controller.starter.Start;
import mediathek.daten.*;
import mediathek.filmlisten.GetModelTabFilme;
import mediathek.gui.dialog.DialogAboNoSet;
import mediathek.gui.dialog.DialogAddDownload;
import mediathek.gui.dialog.DialogAddMoreDownload;
import mediathek.gui.dialog.DialogEditAbo;
import mediathek.tool.*;
import mediathek.tool.MVTable;
import javax.swing.*;
import javax.swing.RowSorter.SortKey;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import java.awt.event.*;
import java.awt.print.PrinterException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Optional;
import static mediathek.tool.MVTable.*;
@SuppressWarnings("serial")
public class GuiFilme extends PanelVorlage {
private JButton buttonArray[];
private MVFilter mVFilter;
public MVFilterFrame mVFilterFrame;
private final MVFilterPanel mVFilterPanel;
ToolBar toolBar;
public GuiFilme(Daten aDaten, MediathekGui aMediathekGui) {
super(aDaten, aMediathekGui);
initComponents();
tabelle = new MVTable(MVTable.TableType.FILME);
jScrollPane1.setViewportView(tabelle);
jScrollPaneFilter.getVerticalScrollBar().setUnitIncrement(16);
jPanelFilter.setLayout(new BorderLayout());
mVFilterPanel = new MVFilterPanel(parentComponent, daten,aMediathekGui) {
@Override
public void mvFfilter(int i) {
setFilterProfile(i);
}
@Override
public void mvFdeleteFilter(int i) {
delFilterProfile(i);
}
@Override
public void mvFsaveFilter(int i) {
saveFilterProfile(i);
}
};
mVFilterFrame = new MVFilterFrame(aDaten,aMediathekGui) {
@Override
public void mvFfilter(int i) {
setFilterProfile(i);
}
@Override
public void mvFdeleteFilter(int i) {
delFilterProfile(i);
}
@Override
public void mvFsaveFilter(int i) {
saveFilterProfile(i);
}
};
panelVideoplayerSetzen();
setupDescriptionPanel();
toolBar = new ToolBar(daten, MediathekGui.TABS.TAB_FILME);
jPanelToolBar.setLayout(new BorderLayout());
jPanelToolBar.add(toolBar, BorderLayout.CENTER);
setToolbarVisible();
start_init();
start_addListener();
}
private void setupDescriptionPanel() {
PanelFilmBeschreibung panelBeschreibung = new PanelFilmBeschreibung(daten, tabelle, true /*film*/);
jPanelBeschreibung.setLayout(new BorderLayout());
jPanelBeschreibung.add(panelBeschreibung, BorderLayout.CENTER);
}
/**
* Show description panel based on settings.
*/
private void showDescriptionPanel() {
jPanelBeschreibung.setVisible(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_FILME_BESCHREIBUNG_ANZEIGEN)));
}
@Override
public void isShown() {
super.isShown();
daten.getMediathekGui().getStatusBar().setIndexForLeftDisplay(MVStatusBar.StatusbarIndex.FILME);
updateFilmData();
setInfoStatusbar();
Listener.notify(Listener.EREIGNIS_FILM_BESCHREIBUNG_ANZEIGEN, PanelFilmBeschreibung.class.getSimpleName());
}
public String getFilterTextFromSearchField() {
return toolBar.jTextFieldFilter.getText();
}
public void guiFilmeFilmAbspielen() {
playFilm();
}
public void guiFilmeFilmSpeichern() {
saveFilm();
}
public void guiFilmMediensammlung() {
mediensammlung();
}
public void guiFilmeFilterLoeschen() {
delFilter();
}
public void guiFilmeFiltern() {
loadTable();
}
public void searchUrl(String url) {
searchFilmWithUrl_(url);
}
public void filmGesehen() {
daten.history.setGesehen(true, getSelFilme(), daten.getListeFilmeHistory());
}
public void filmUngesehen() {
daten.history.setGesehen(false, getSelFilme(), daten.getListeFilmeHistory());
}
public void invertSelection() {
tabelle.invertSelection();
}
public ArrayList<DatenFilm> selFilme() {
return getSelFilme();
}
public int getTableRowCount() {
if (tabelle != null) {
return tabelle.getModel().getRowCount();
} else {
return 0;
}
}
private void start_init() {
showDescriptionPanel();
daten.getFilmeLaden().addAdListener(new ListenerFilmeLaden() {
@Override
public void start(ListenerFilmeLadenEvent event) {
GuiFunktionen.enableComponents(mVFilterFrame, false);
GuiFunktionen.enableComponents(mVFilterPanel, false);
//mVFilter.enableFilter(false);
loadTable();
}
@Override
public void fertig(ListenerFilmeLadenEvent event) {
loadTable();
GuiFunktionen.enableComponents(mVFilterFrame, true);
GuiFunktionen.enableComponents(mVFilterPanel, true);
//mVFilter.enableFilter(true);
}
});
daten.getMediathekGui().getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "sender");
daten.getMediathekGui().getRootPane().getActionMap().put("sender", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
SortKey sk = new SortKey(DatenFilm.FILM_SENDER, SortOrder.ASCENDING);
LinkedList<SortKey> listSortKeys = new LinkedList<>();
listSortKeys.add(sk);
tabelle.getRowSorter().setSortKeys(listSortKeys);
tabelle.requestFocusSelelct(jScrollPane1, 0);
}
});
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_P, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "abspielen");
this.getActionMap().put("abspielen", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
playFilm();
}
});
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_D, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "download");
this.getActionMap().put("download", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
saveFilm();
}
});
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_T, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "tabelle");
this.getActionMap().put("tabelle", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
tabelle.requestFocusSelelct(jScrollPane1);
}
});
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_I, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "info");
this.getActionMap().put("info", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (!Daten.filmInfo.isVisible()) {
Daten.filmInfo.showInfo();
}
}
});
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_U, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "url-copy");
this.getActionMap().put("url-copy", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Optional<DatenFilm> filmSelection = getCurrentlySelectedFilm();
if (filmSelection.isPresent()) {
final DatenFilm film = filmSelection.get();
GuiFunktionen.copyToClipboard(film.getUrlFuerAufloesung(DatenFilm.AUFLOESUNG_NORMAL));
}
}
});
if (SystemInfo.isMacOSX()) {
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.SHIFT_MASK + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "url-hd-copy");
} else {
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_H, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "url-hd-copy");
}
this.getActionMap().put("url-hd-copy", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Optional<DatenFilm> filmSelection = getCurrentlySelectedFilm();
if (filmSelection.isPresent()) {
final DatenFilm film = filmSelection.get();
GuiFunktionen.copyToClipboard(film.getUrlFuerAufloesung(DatenFilm.AUFLOESUNG_HD));
}
}
});
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_K, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "url-k-copy");
this.getActionMap().put("url-k-copy", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Optional<DatenFilm> filmSelection = getCurrentlySelectedFilm();
if (filmSelection.isPresent()) {
final DatenFilm film = filmSelection.get();
GuiFunktionen.copyToClipboard(film.getUrlFuerAufloesung(DatenFilm.AUFLOESUNG_KLEIN));
}
}
});
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_M, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "mediensammlung");
this.getActionMap().put("mediensammlung", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Optional<DatenFilm> filmSelection = getCurrentlySelectedFilm();
if (filmSelection.isPresent()) {
final DatenFilm film = filmSelection.get();
MVConfig.add(MVConfig.Configs.SYSTEM_MEDIA_DB_DIALOG_ANZEIGEN, Boolean.TRUE.toString());
daten.getDialogMediaDB().setVis();
daten.getDialogMediaDB().setFilter(film.arr[DatenFilm.FILM_TITEL]);
}
}
});
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_G, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "gesehen");
this.getActionMap().put("gesehen", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
filmGesehen();
}
});
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "ungesehen");
this.getActionMap().put("ungesehen", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
filmUngesehen();
}
});
//Tabelle einrichten
ActionMap am = tabelle.getActionMap();
InputMap im = tabelle.getInputMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "film_starten");
am.put("film_starten", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
playFilm();
}
});
tabelle.setModel(new TModelFilm(new Object[][]{}, DatenFilm.COLUMN_NAMES));
BeobMausTabelle beobMausTabelle = new BeobMausTabelle();
tabelle.addMouseListener(beobMausTabelle);
tabelle.getSelectionModel().addListSelectionListener(event -> {
final ListSelectionModel m = (ListSelectionModel) event.getSource();
if (!m.isSelectionEmpty() && !m.getValueIsAdjusting() && !stopBeob) {
updateFilmData();
}
});
final CellRendererFilme cellRenderer = new CellRendererFilme(daten);
tabelle.setDefaultRenderer(Object.class, cellRenderer);
tabelle.setDefaultRenderer(Datum.class, cellRenderer);
tabelle.setDefaultRenderer(Integer.class, cellRenderer);
tabelle.lineBreak = MVConfig.getBool(MVConfig.Configs.SYSTEM_TAB_FILME_LINEBREAK);
tabelle.getTableHeader().addMouseListener(new BeobTableHeader(tabelle, DatenFilm.COLUMN_NAMES, DatenFilm.spaltenAnzeigen,
new int[]{DatenFilm.FILM_ABSPIELEN, DatenFilm.FILM_AUFZEICHNEN, DatenFilm.FILM_DATUM_LONG, DatenFilm.FILM_REF},
new int[]{DatenFilm.FILM_ABSPIELEN, DatenFilm.FILM_AUFZEICHNEN},
true /*Icon*/, MVConfig.Configs.SYSTEM_TAB_FILME_LINEBREAK));
jCheckBoxProgamme.setIcon(Icons.ICON_CHECKBOX_CLOSE);
jCheckBoxProgamme.addActionListener(e -> {
MVConfig.add(MVConfig.Configs.SYSTEM_PANEL_VIDEOPLAYER_ANZEIGEN, Boolean.FALSE.toString());
Listener.notify(Listener.EREIGNIS_LISTE_PSET, GuiFilme.class.getSimpleName());
panelVideoplayerSetzen();
});
jSplitPane1.setDividerLocation(MVConfig.getInt(MVConfig.Configs.SYSTEM_PANEL_FILME_DIVIDER));
jSplitPane1.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, pce -> {
if (jScrollPaneFilter.isVisible()) {
MVConfig.add(MVConfig.Configs.SYSTEM_PANEL_FILME_DIVIDER, String.valueOf(jSplitPane1.getDividerLocation()));
}
});
setVisFilterPanelAndLoad();
tabelle.initTabelle();
if (tabelle.getRowCount() > 0) {
tabelle.setRowSelectionInterval(0, 0);
}
}
private void setToolbarVisible() {
toolBar.setVisible(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_TOOLBAR_ALLES_ANZEIGEN)));
if (!Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_TOOLBAR_ALLES_ANZEIGEN))) {
MVConfig.add(MVConfig.Configs.SYSTEM_VIS_FILTER, Boolean.toString(true));
Listener.notify(Listener.EREIGNIS_PANEL_FILTER_ANZEIGEN, GuiFilme.class.getSimpleName());
setVisFilterPanelAndLoad();
}
}
private void start_addListener() {
Listener.addListener(new Listener(Listener.EREIGNIS_TOOLBAR_VIS, GuiFilme.class.getSimpleName()) {
@Override
public void ping() {
setToolbarVisible();
}
});
Listener.addListener(new Listener(Listener.EREIGNIS_LISTE_PSET, GuiFilme.class.getSimpleName()) {
@Override
public void ping() {
panelVideoplayerSetzen();
}
});
Listener.addListener(new Listener(Listener.EREIGNIS_LISTE_HISTORY_GEAENDERT, GuiFilme.class.getSimpleName()) {
@Override
public void ping() {
if (mVFilter.get_jCheckBoxKeineGesehenen().isSelected() || mVFilter.get_jToggleButtonHistory().isSelected()) {
loadTable();
} else {
tabelle.fireTableDataChanged(true);
}
}
});
Listener.addListener(new Listener(Listener.EREIGNIS_LISTE_ABOS, GuiFilme.class.getSimpleName()) {
@Override
public void ping() {
loadTable();
}
});
Listener.addListener(new Listener(Listener.EREIGNIS_BESCHREIBUNG, GuiFilme.class.getSimpleName()) {
@Override
public void ping() {
loadTable();
}
});
Listener.addListener(new Listener(Listener.EREIGNIS_BLACKLIST_GEAENDERT, GuiFilme.class.getSimpleName()) {
@Override
public void ping() {
loadTable();
}
});
Listener.addListener(new Listener(Listener.EREIGNIS_START_EVENT_BUTTON, GuiFilme.class.getSimpleName()) {
@Override
public void ping() {
tabelle.fireTableDataChanged(true /*setSpalten*/);
setInfoStatusbar();
}
});
Listener.addListener(new Listener(new int[]{/*ListenerMediathekView.EREIGNIS_ART_DOWNLOAD_PROZENT,*/
Listener.EREIGNIS_START_EVENT, Listener.EREIGNIS_LISTE_DOWNLOADS}, GuiFilme.class.getSimpleName()) {
@Override
public void ping() {
setInfoStatusbar();
}
});
Listener.addListener(new Listener(Listener.EREIGNIS_PANEL_FILTER_ANZEIGEN, GuiFilme.class.getSimpleName()) {
@Override
public void ping() {
// Panel anzeigen und die Filmliste anpassen
setVisFilterPanelAndLoad();
}
});
Listener.addListener(new Listener(Listener.EREIGNIS_FILM_BESCHREIBUNG_ANZEIGEN, GuiFilme.class.getSimpleName()) {
@Override
public void ping() {
showDescriptionPanel();
}
});
Listener.addListener(new Listener(Listener.EREIGNIS_SUCHFELD_FOCUS_SETZEN, GuiFilme.class.getSimpleName()) {
@Override
public void ping() {
if (Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_VIS_FILTER))) {
mVFilter.get_jTextFieldFilterThemaTitel().requestFocus();
mVFilter.get_jTextFieldFilterThemaTitel().setCaretPosition(0);
}
}
});
}
private synchronized void playFilm() {
DatenPset pset = Daten.listePset.getPsetAbspielen();
if (pset != null) {
playerStarten(pset);
} else {
MVMessageDialog.showMessageDialog(parentComponent, "Im Menü unter \"Datei->Einstellungen->Set bearbeiten\" ein Programm zum Abspielen festlegen.",
"kein Videoplayer!", JOptionPane.INFORMATION_MESSAGE);
}
}
private synchronized void saveFilm() {
saveFilm(null);
}
private synchronized void saveFilm(DatenPset pSet) {
if (Daten.listePset.getListeSpeichern().isEmpty()) {
new DialogAboNoSet(parentComponent, daten).setVisible(true);
// Satz mit x, war wohl nix
return;
}
ArrayList<DatenFilm> liste = getSelFilme();
boolean standard = false;
String pfad = "";
boolean info = false;
boolean subtitle = false;
if (liste.size() > 1) {
if (pSet == null) {
pSet = Daten.listePset.getListeSpeichern().getFirst();
}
DialogAddMoreDownload damd = new DialogAddMoreDownload(daten.getMediathekGui(), pSet);
damd.setVisible(true);
standard = damd.addAll;
pfad = damd.getPath();
info = damd.info;
subtitle = damd.subtitle;
if (damd.cancel) {
return;
}
}
for (DatenFilm datenFilm : liste) {
// erst mal schauen obs den schon gibt
DatenDownload datenDownload = daten.getListeDownloads().getDownloadUrlFilm(datenFilm.arr[DatenFilm.FILM_URL]);
if (datenDownload != null) {
int ret = JOptionPane.showConfirmDialog(parentComponent, "Download für den Film existiert bereits.\n"
+ "Nochmal anlegen?", "Anlegen?", JOptionPane.YES_NO_OPTION);
if (ret != JOptionPane.OK_OPTION) {
continue;
}
}
if (standard) {
if (pSet == null) {
pSet = Daten.listePset.getListeSpeichern().getFirst();
}
datenDownload = new DatenDownload(pSet, datenFilm, DatenDownload.QUELLE_DOWNLOAD, null, "", pfad, ""/*Auflösung*/);
datenDownload.arr[DatenDownload.DOWNLOAD_INFODATEI] = Boolean.toString(info);
datenDownload.arr[DatenDownload.DOWNLOAD_SUBTITLE] = Boolean.toString(subtitle);
daten.getListeDownloads().addMitNummer(datenDownload);
Listener.notify(Listener.EREIGNIS_LISTE_DOWNLOADS, this.getClass().getSimpleName());
if (Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_DIALOG_DOWNLOAD_D_STARTEN))) {
// und evtl. auch gleich starten
datenDownload.startDownload(daten);
}
} else {
//dann alle Downloads im Dialog abfragen
String aufloesung = "";
if (mVFilter.get_jCheckBoxNurHd().isSelected()) {
aufloesung = DatenFilm.AUFLOESUNG_HD;
}
DialogAddDownload dialog = new DialogAddDownload(daten.getMediathekGui(), daten, datenFilm, pSet, aufloesung);
dialog.setVisible(true);
}
}
}
private void playerStarten(DatenPset pSet) {
// Url mit Prognr. starten
if (tabelle.getSelectedRow() == -1) {
new HinweisKeineAuswahl().zeigen(parentComponent);
} else if (pSet.istSpeichern()) {
// wenn das pSet zum Speichern (über die Button) gewählt wurde,
// weiter mit dem Dialog "Speichern"
saveFilm(pSet);
} else {
// mit dem flvstreamer immer nur einen Filme starten
String aufloesung = "";
if (mVFilter.get_jCheckBoxNurHd().isSelected()) {
aufloesung = DatenFilm.AUFLOESUNG_HD;
}
Optional<DatenFilm> filmSelection = getCurrentlySelectedFilm();
if (filmSelection.isPresent()) {
daten.starterClass.urlMitProgrammStarten(pSet, filmSelection.get(), aufloesung);
}
}
}
private void mediensammlung() {
final Optional<DatenFilm> filmSelection = getCurrentlySelectedFilm();
if (filmSelection.isPresent()) {
MVConfig.add(MVConfig.Configs.SYSTEM_MEDIA_DB_DIALOG_ANZEIGEN, Boolean.TRUE.toString());
daten.getDialogMediaDB().setVis();
daten.getDialogMediaDB().setFilter(filmSelection.get().arr[DatenFilm.FILM_TITEL]);
}
}
/**
* Return the film object from a table row.
* As this can also be null we will return an Optional to prevent NPEs inside the caller.
*
* @param zeileTabelle table row.
* @return Optional object to a film object.
*/
private Optional<DatenFilm> getFilm(final int zeileTabelle) {
if (zeileTabelle >= 0 && zeileTabelle < tabelle.getRowCount()) {
return Optional.of((DatenFilm) tabelle.getModel().getValueAt(tabelle.convertRowIndexToModel(zeileTabelle), DatenFilm.FILM_REF));
} else {
return Optional.empty();
}
}
private Optional<DatenFilm> getCurrentlySelectedFilm() {
final int selectedTableRow = tabelle.getSelectedRow();
if (selectedTableRow >= 0) {
return Optional.of((DatenFilm) tabelle.getModel().getValueAt(tabelle.convertRowIndexToModel(selectedTableRow), DatenFilm.FILM_REF));
} else {
return Optional.empty();
}
}
private ArrayList<DatenFilm> getSelFilme() {
ArrayList<DatenFilm> arrayFilme = new ArrayList<>();
int rows[] = tabelle.getSelectedRows();
if (rows.length > 0) {
for (int row : rows) {
DatenFilm datenFilm = (DatenFilm) tabelle.getModel().getValueAt(tabelle.convertRowIndexToModel(row), DatenFilm.FILM_REF);
arrayFilme.add(datenFilm);
}
} else {
new HinweisKeineAuswahl().zeigen(parentComponent);
}
return arrayFilme;
}
/**
* Update Film Information and description panel with updated film...
*/
private void updateFilmData() {
final Optional<DatenFilm> filmSelection = getCurrentlySelectedFilm();
filmSelection.ifPresent(Daten.filmInfo::updateCurrentFilm);
}
private void setInfoStatusbar() {
// Infopanel setzen
daten.getMediathekGui().getStatusBar().setTextForLeftDisplay();
}
// ############################################
// Panel mit den Extra-Videoprogrammen
// ############################################
private void panelVideoplayerSetzen() {
// erst sauber machen
// zum Anlegen der Button:
// Programmgruppe ohne Namen: Leerfeld
// Programmgruppe ohen Programme: Label
// sonst ein Button
jPanelExtraInnen.removeAll();
jPanelExtraInnen.updateUI();
jPanelExtraInnen.addMouseListener(new BeobMausButton());
ListePset listeButton = Daten.listePset.getListeButton();
int maxSpalten = MVConfig.getInt(MVConfig.Configs.SYSTEM_TAB_FILME_ANZAHL_BUTTON); //Anzahl der Spalten der Schalter
buttonArray = new JButton[listeButton.size()];
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
c.weightx = 0;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(4, 10, 4, 10);
jPanelExtraInnen.setLayout(gridbag);
int spalte = 0;
int zeile = 0;
for (int i = 0; i < listeButton.size(); ++i) {
if (!listeButton.get(i).isFreeLine()) {
addExtraFeld(i, spalte, zeile, gridbag, c, jPanelExtraInnen, listeButton);
}
++spalte;
if (spalte > maxSpalten - 1) {
spalte = 0;
++zeile;
}
}
// zum zusammenschieben
c.weightx = 10;
c.gridx = maxSpalten + 1;
c.gridy = 0;
JLabel label = new JLabel();
gridbag.setConstraints(label, c);
jPanelExtraInnen.add(label);
// und jetzt noch anzeigen
jPanelExtra.setVisible(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_PANEL_VIDEOPLAYER_ANZEIGEN)));
}
private class BeobMausButton extends MouseAdapter {
JSpinner jSpinner = new JSpinner(new SpinnerNumberModel(4, 4, 10, 1));
public BeobMausButton() {
int start = MVConfig.getInt(MVConfig.Configs.SYSTEM_TAB_FILME_ANZAHL_BUTTON);
jSpinner.setValue(start);
jSpinner.setToolTipText("Damit kann die Anzahl der Button verändert werden");
}
@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();
jSpinner.addChangeListener(e -> {
MVConfig.add(MVConfig.Configs.SYSTEM_TAB_FILME_ANZAHL_BUTTON, String.valueOf(((Number) jSpinner.getModel().getValue()).intValue()));
panelVideoplayerSetzen();
});
JPanel jPanelAnzahl = new JPanel();
jPanelAnzahl.setLayout(new BorderLayout());
jPanelAnzahl.setBorder(new EmptyBorder(3, 5, 3, 5));
jPanelAnzahl.add(new JLabel("Anzahl Button je Zeile: "), BorderLayout.WEST);
jPanelAnzahl.add(jSpinner, BorderLayout.EAST);
jPopupMenu.add(jPanelAnzahl);
//anzeigen
jPopupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
}
}
private Component addExtraFeld(int i, int spalte, int zeile, GridBagLayout gridbag, GridBagConstraints c, JPanel panel, ListePset liste) {
Component ret;
JButton button;
c.gridx = spalte;
c.gridy = zeile;
if (liste.get(i).isLable()) {
JLabel label = new JLabel(liste.get(i).arr[DatenPset.PROGRAMMSET_NAME]);
Color col = liste.get(i).getFarbe();
if (col != null) {
label.setForeground(col);
}
gridbag.setConstraints(label, c);
panel.add(label);
ret = label;
} else {
button = new JButton(liste.get(i).arr[DatenPset.PROGRAMMSET_NAME]);
button.addActionListener(new BeobOpen(liste.get(i)));
Color col = liste.get(i).getFarbe();
if (col != null) {
button.setBackground(col);
}
buttonArray[i] = button;
gridbag.setConstraints(button, c);
panel.add(button);
ret = button;
}
return ret;
}
// ############################################
// Filter
// ############################################
private void searchFilmWithUrl_(String url) {
// nur für Tests
url = url.trim();
TModelFilm m = (TModelFilm) tabelle.getModel();
for (int i = 0; i < m.getRowCount(); ++i) {
if (!url.equals(m.getValueAt(i, DatenFilm.FILM_URL).toString())) {
m.removeRow(i);
--i;
}
}
}
private void setVisFilterPanelAndLoad() {
boolean history = false;
if (mVFilter != null) {
mVFilter.removeAllListener();
history = mVFilter.get_jToggleButtonHistory().isSelected();
}
if (Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_FENSTER_FILTER))) {
jPanelFilter.removeAll();
jScrollPaneFilter.setVisible(false);
mVFilter = mVFilterFrame;
mVFilterFrame.setVisible(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_VIS_FILTER)));
} else {
mVFilterFrame.setVisible(false);
mVFilter = mVFilterPanel;
jPanelFilter.add(mVFilterPanel, BorderLayout.CENTER);
jScrollPaneFilter.setVisible(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_VIS_FILTER)));
if (jScrollPaneFilter.isVisible()) {
jSplitPane1.setDividerLocation(MVConfig.getInt(MVConfig.Configs.SYSTEM_PANEL_FILME_DIVIDER));
}
}
// einrichten
mVFilter.setVisible(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_VIS_FILTER)));
mVFilter.get_jComboBoxFilterSender().setModel(new javax.swing.DefaultComboBoxModel<>(daten.getListeFilmeNachBlackList().sender));
mVFilter.get_jComboBoxFilterThema().setModel(new javax.swing.DefaultComboBoxModel<>(getThemen("")));
mVFilter.get_jToggleButtonHistory().setSelected(history);
//===========
// Slider
mVFilter.get_jSliderTage().setValue(MVConfig.getInt(MVConfig.Configs.SYSTEM_FILTER_TAGE));
mVFilter.get_jSliderMinuten().setValue(MVConfig.getInt(MVConfig.Configs.SYSTEM_FILTER_DAUER));
mVFilter.get_rbMin().setSelected(MVConfig.getBool(MVConfig.Configs.SYSTEM_FILTER_DAUER_MIN));
mVFilter.get_rbMax().setSelected(!MVConfig.getBool(MVConfig.Configs.SYSTEM_FILTER_DAUER_MIN));
setTextSlider();
//==========================
// listener anhängen
mVFilter.get_jSliderTage().addChangeListener(e -> {
if (!stopBeob) {
setTextSlider();
if (!mVFilter.get_jSliderTage().getValueIsAdjusting()) {
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_TAGE, String.valueOf(mVFilter.get_jSliderTage().getValue()));
daten.getListeBlacklist().filterListe();
loadTable();
}
}
});
mVFilter.get_jSliderMinuten().addChangeListener(e -> {
if (!stopBeob) {
setTextSlider();
if (!mVFilter.get_jSliderMinuten().getValueIsAdjusting()) {
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_DAUER, String.valueOf(mVFilter.get_jSliderMinuten().getValue()));
loadTable();
}
}
});
mVFilter.get_rbMin().addActionListener(l -> {
if (!stopBeob) {
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_DAUER_MIN, String.valueOf(mVFilter.get_rbMin().isSelected()));
loadTable();
}
});
mVFilter.get_rbMax().addActionListener(l -> {
if (!stopBeob) {
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_DAUER_MIN, String.valueOf(mVFilter.get_rbMin().isSelected()));
loadTable();
}
});
mVFilter.get_jToggleButtonLivestram().addActionListener(e -> {
if (!stopBeob && mVFilter.get_jToggleButtonLivestram().isSelected()) {
stopBeob = true;
delAlles();
mVFilter.get_jToggleButtonLivestram().setSelected(true);
stopBeob = false;
}
daten.getListeBlacklist().filterListe();
loadTable();
});
mVFilter.get_jToggleButtonHistory().addActionListener(e -> {
if (!stopBeob && mVFilter.get_jToggleButtonHistory().isSelected()) {
stopBeob = true;
delAlles();
mVFilter.get_jToggleButtonHistory().setSelected(true);
stopBeob = false;
}
daten.getListeBlacklist().filterListe();
loadTable();
});
mVFilter.get_jButtonFilterLoeschen().addActionListener(l -> delFilter());
mVFilter.get_jButtonClearAll().addActionListener(l -> delFilterAlles());
mVFilter.get_jComboBoxFilterSender().addActionListener(new BeobFilter());
mVFilter.get_jComboBoxFilterThema().addActionListener(new BeobFilter());
mVFilter.get_jTextFieldFilterTitel().addActionListener(new BeobFilter());
mVFilter.get_jTextFieldFilterTitel().getDocument().addDocumentListener(new BeobFilterTitelDoc());
mVFilter.get_jTextFieldFilterThemaTitel().addActionListener(new BeobFilter());
mVFilter.get_jTextFieldFilterThemaTitel().getDocument().addDocumentListener(new BeobFilterTitelDoc());
mVFilter.get_jCheckBoxKeineAbos().addActionListener(new BeobFilter());
mVFilter.get_jCheckBoxKeineGesehenen().addActionListener(new BeobFilter());
mVFilter.get_jCheckBoxNurHd().addActionListener(new BeobFilter());
mVFilter.get_jCheckBoxNurUt().addActionListener(new BeobFilter());
mVFilter.get_jCheckBoxNeue().addActionListener(new BeobFilter());
mVFilter.get_jRadioButtonTT().addActionListener(new BeobFilter());
mVFilter.get_JRadioButtonIrgendwo().addActionListener(new BeobFilter());
//=======================================
// und jezt die Anzeige
this.updateUI();
loadTable();
}
private void setTextSlider() {
mVFilter.get_jTextFieldFilterTage().setText(String.valueOf(mVFilter.get_jSliderTage().getValue()));
if (mVFilter.get_jSliderTage().getValue() == 0) {
mVFilter.get_jTextFieldFilterTage().setText("alles");
}
mVFilter.get_jTextFieldFilterMinuten().setText(String.valueOf(mVFilter.get_jSliderMinuten().getValue()));
if (mVFilter.get_jSliderMinuten().getValue() == 0) {
mVFilter.get_jTextFieldFilterMinuten().setText("alles");
}
}
private void delFilter() {
stopBeob = true;
delOben();
stopBeob = false;
// und jetzt wieder laden
loadTable();
}
private void delFilterAlles() {
stopBeob = true;
delAlles();
stopBeob = false;
// und jetzt wieder laden
daten.getListeBlacklist().filterListe();
loadTable();
}
private void delOben() {
mVFilter.get_jComboBoxFilterSender().setModel(new javax.swing.DefaultComboBoxModel<>(daten.getListeFilmeNachBlackList().sender));
mVFilter.get_jComboBoxFilterThema().setModel(new javax.swing.DefaultComboBoxModel<>(getThemen("")));
mVFilter.get_jTextFieldFilterTitel().setText("");
mVFilter.get_jTextFieldFilterThemaTitel().setText("");
mVFilter.setThemaTitel(true);
}
private void delAlles() {
mVFilter.get_jComboBoxFilterSender().setModel(new javax.swing.DefaultComboBoxModel<>(daten.getListeFilmeNachBlackList().sender));
mVFilter.get_jComboBoxFilterThema().setModel(new javax.swing.DefaultComboBoxModel<>(getThemen("")));
mVFilter.get_jTextFieldFilterTitel().setText("");
mVFilter.get_jTextFieldFilterThemaTitel().setText("");
mVFilter.setThemaTitel(true);
//untere Hälfte
mVFilter.get_jCheckBoxKeineAbos().setSelected(false);
mVFilter.get_jCheckBoxKeineGesehenen().setSelected(false);
mVFilter.get_jCheckBoxNurHd().setSelected(false);
mVFilter.get_jCheckBoxNurUt().setSelected(false);
mVFilter.get_jCheckBoxNeue().setSelected(false);
mVFilter.get_jToggleButtonHistory().setSelected(false);
mVFilter.get_jToggleButtonLivestram().setSelected(false);
mVFilter.get_jSliderMinuten().setValue(0);
mVFilter.get_jSliderTage().setValue(0);
mVFilter.get_rbMin().setSelected(true);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_TAGE, String.valueOf(mVFilter.get_jSliderTage().getValue()));
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_DAUER, String.valueOf(mVFilter.get_jSliderMinuten().getValue()));
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_DAUER_MIN, String.valueOf(mVFilter.get_rbMin().isSelected()));
setTextSlider();
}
public int getFilterTage() {
return mVFilter.get_jSliderTage().getValue();
}
private String[] getThemen(String ssender) {
for (int i = 1; i < daten.getListeFilmeNachBlackList().themenPerSender.length; ++i) {
if (daten.getListeFilmeNachBlackList().sender[i].equals(ssender)) {
return daten.getListeFilmeNachBlackList().themenPerSender[i];
}
}
return daten.getListeFilmeNachBlackList().themenPerSender[0];
//return alleThemen;
}
// ############################################
// Filterprofile
// ############################################
private void setFilterProfile(int filter) {
stopBeob = true;
boolean geändert = false;
mVFilter.get_jToggleButtonHistory().setSelected(false);
mVFilter.get_jToggleButtonLivestram().setSelected(false);
mVFilter.get_jTextFieldFilterTitel().setText(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__TITEL, filter));
mVFilter.get_jTextFieldFilterThemaTitel().setText(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__THEMA_TITEL, filter));
mVFilter.setThemaTitel(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__TT, filter)));
mVFilter.get_jCheckBoxKeineAbos().setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__KEINE_ABO, filter)));
mVFilter.get_jCheckBoxKeineGesehenen().setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__KEINE_GESEHENE, filter)));
mVFilter.get_jCheckBoxNurHd().setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__NUR_HD, filter)));
mVFilter.get_jCheckBoxNurUt().setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__NUR_UT, filter)));
mVFilter.get_jCheckBoxNeue().setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__NUR_NEUE, filter)));
mVFilter.get_jSliderTage().setValue(MVConfig.getInt(MVConfig.Configs.SYSTEM_FILTER_PROFILE__TAGE, filter));
// Blackliste
if (Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__BLACKLIST_ON, filter))
!= Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_BLACKLIST_ON))) {
geändert = true;
MVConfig.add(MVConfig.Configs.SYSTEM_BLACKLIST_ON, MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__BLACKLIST_ON, filter));
}
mVFilter.get_jSliderMinuten().setValue(MVConfig.getInt(MVConfig.Configs.SYSTEM_FILTER_PROFILE__DAUER, filter));
mVFilter.get_rbMin().setSelected(MVConfig.getBool(MVConfig.Configs.SYSTEM_FILTER_PROFILE__DAUER_MIN, filter));
mVFilter.get_rbMax().setSelected(!MVConfig.getBool(MVConfig.Configs.SYSTEM_FILTER_PROFILE__DAUER_MIN, filter));
setTextSlider();
// und jetzt wieder laden
daten.getListeBlacklist().filterListe();
// erst jetzt da Sender/Thema evtl. in der Blacklist
mVFilter.get_jComboBoxFilterSender().setModel(new javax.swing.DefaultComboBoxModel<>(daten.getListeFilmeNachBlackList().sender));
mVFilter.get_jComboBoxFilterThema().setModel(new javax.swing.DefaultComboBoxModel<>(getThemen("")));
mVFilter.get_jComboBoxFilterSender().setSelectedItem(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__SENDER, filter));
mVFilter.get_jComboBoxFilterThema().setSelectedItem(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__THEMA, filter));
SortKey sk = sortKeyLesen(MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__SORT_KEY, filter),
MVConfig.get(MVConfig.Configs.SYSTEM_FILTER_PROFILE__SORT_KEY_UPDOWN, filter));
if (sk != null) {
LinkedList<SortKey> lst = new LinkedList<>();
lst.add(sk);
tabelle.getRowSorter().setSortKeys(lst);
}
stopBeob = false;
if (geändert) {
Listener.notify(Listener.EREIGNIS_BLACKLIST_GEAENDERT, GuiFilme.class.getSimpleName());
}
//dann laden
loadTable();
//beim Filter umschalten immer auf die erste Zeile setzen
tabelle.setSelRow(0);
}
private void delFilterProfile(int filter) {
// jetzt noch speichern
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__SENDER, String.valueOf(""), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__THEMA, String.valueOf(""), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__TITEL, String.valueOf(""), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__THEMA_TITEL, String.valueOf(""), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__TT, Boolean.toString(true), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__KEINE_ABO, String.valueOf(false), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__KEINE_GESEHENE, String.valueOf(false), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__NUR_HD, String.valueOf(false), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__NUR_NEUE, String.valueOf(false), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__TAGE, MVConfig.Configs.SYSTEM_FILTER_PROFILE__TAGE.initValue, filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__DAUER, MVConfig.Configs.SYSTEM_FILTER_PROFILE__DAUER.initValue, filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__DAUER_MIN, MVConfig.Configs.SYSTEM_FILTER_PROFILE__DAUER_MIN.initValue, filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__BLACKLIST_ON, Boolean.FALSE.toString(), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__SORT_KEY, "", filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__SORT_KEY_UPDOWN, "", filter);
}
private void saveFilterProfile(int filter) {
// jetzt noch speichern
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__SENDER, String.valueOf(mVFilter.get_jComboBoxFilterSender().getSelectedItem()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__THEMA, String.valueOf(mVFilter.get_jComboBoxFilterThema().getSelectedItem()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__TITEL, String.valueOf(mVFilter.get_jTextFieldFilterTitel().getText()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__THEMA_TITEL, String.valueOf(mVFilter.get_jTextFieldFilterThemaTitel().getText()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__TT, Boolean.toString(mVFilter.getThemaTitel()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__KEINE_ABO, String.valueOf(mVFilter.get_jCheckBoxKeineAbos().isSelected()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__KEINE_GESEHENE, String.valueOf(mVFilter.get_jCheckBoxKeineGesehenen().isSelected()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__NUR_HD, String.valueOf(mVFilter.get_jCheckBoxNurHd().isSelected()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__NUR_UT, String.valueOf(mVFilter.get_jCheckBoxNurUt().isSelected()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__NUR_NEUE, String.valueOf(mVFilter.get_jCheckBoxNeue().isSelected()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__TAGE, String.valueOf(mVFilter.get_jSliderTage().getValue()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__DAUER, String.valueOf(mVFilter.get_jSliderMinuten().getValue()), filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__DAUER_MIN, String.valueOf(mVFilter.get_rbMin().isSelected()), filter);
java.util.List<? extends RowSorter.SortKey> listeSortKeys = null;
listeSortKeys = tabelle.getRowSorter().getSortKeys();
String key = "";
String upDown = "";
if (listeSortKeys != null) {
if (!listeSortKeys.isEmpty()) {
SortKey sk = listeSortKeys.get(0);
key = String.valueOf(sk.getColumn());
upDown = sk.getSortOrder().equals(SortOrder.ASCENDING) ? SORT_ASCENDING : SORT_DESCENDING;
}
}
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__SORT_KEY, key, filter);
MVConfig.add(MVConfig.Configs.SYSTEM_FILTER_PROFILE__SORT_KEY_UPDOWN, upDown, filter);
}
// ####################################
// Tabelle laden
// ####################################
private synchronized void loadTable() {
boolean themaNichtDa = false;
try {
stopBeob = true;
tabelle.getSpalten();
if (daten.getListeFilmeNachBlackList().isEmpty()) {
// die Liste in leer
delOben();
listeInModellLaden(); // zum löschen der Tabelle
} else if (!Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_VIS_FILTER))) {
// Filtern mit dem Filter in der Toolbar
listeInModellLaden();
} else {
String filterThema = mVFilter.get_jComboBoxFilterThema().getSelectedItem().toString();
String filterSender = mVFilter.get_jComboBoxFilterSender().getSelectedItem().toString();
boolean themaOpen = mVFilter.get_jComboBoxFilterThema().isPopupVisible();
boolean senderOpen = mVFilter.get_jComboBoxFilterSender().isPopupVisible();
//Filme neu laden
listeInModellLaden();
//Filter Sender
mVFilter.get_jComboBoxFilterSender().setModel(new javax.swing.DefaultComboBoxModel<>(daten.getListeFilmeNachBlackList().sender));
mVFilter.get_jComboBoxFilterSender().setSelectedIndex(0);
if (!filterSender.equals("")) {
mVFilter.get_jComboBoxFilterSender().setSelectedItem(filterSender);
if (mVFilter.get_jComboBoxFilterSender().getSelectedIndex() == 0) {
// war wohl nix, der gewählte Sender wurde in die Blacklist eingetragen
filterSender = "";
listeInModellLaden();
}
}
mVFilter.get_jComboBoxFilterSender().setPopupVisible(senderOpen);
// Filter Thema
if (filterSender.equals("")) {
mVFilter.get_jComboBoxFilterThema().setModel(new javax.swing.DefaultComboBoxModel<>(getThemen("")));
} else {
mVFilter.get_jComboBoxFilterThema().setModel(new javax.swing.DefaultComboBoxModel<>(getThemen(filterSender)));
}
// wenn Thema bei dem Sender vorhanden, dann wieder setzen
mVFilter.get_jComboBoxFilterThema().setSelectedItem(filterThema);
if (!filterThema.equals("") && mVFilter.get_jComboBoxFilterThema().getSelectedIndex() == 0) {
// war wohl nix
themaNichtDa = true;
}
mVFilter.get_jComboBoxFilterThema().setPopupVisible(themaOpen);
}
setInfoStatusbar();
tabelle.setSpalten();
updateFilmData();
stopBeob = false;
if (themaNichtDa) {
// Thema gibts beim Sender nicht, nochmal filtern anschieben
loadTable();
}
} catch (Exception ex) {
Log.errorLog(558965421, ex);
}
tabelle.scrollToSelection();
}
private synchronized void listeInModellLaden() {
ListeFilme lf;
if (mVFilter.get_jToggleButtonHistory().isSelected()) {
lf = daten.getListeFilmeHistory();
} else {
lf = daten.getListeFilmeNachBlackList();
}
if (Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_VIS_FILTER))) {
// normal mit den Filtern aus dem Filterpanel suchen
GetModelTabFilme.getModelTabFilme(lf, daten, tabelle,
mVFilter.get_jComboBoxFilterSender().getSelectedItem().toString(),
mVFilter.get_jComboBoxFilterThema().getSelectedItem().toString(), mVFilter.get_jTextFieldFilterTitel().getText(),
mVFilter.getThemaTitel() ? mVFilter.get_jTextFieldFilterThemaTitel().getText() : "",
mVFilter.getThemaTitel() ? "" : mVFilter.get_jTextFieldFilterThemaTitel().getText(),
mVFilter.get_jSliderMinuten().getValue(),
mVFilter.get_rbMin().isSelected(),
mVFilter.get_jCheckBoxKeineAbos().isSelected(), mVFilter.get_jCheckBoxKeineGesehenen().isSelected(),
mVFilter.get_jCheckBoxNurHd().isSelected(), mVFilter.get_jCheckBoxNurUt().isSelected(),
mVFilter.get_jToggleButtonLivestram().isSelected(), mVFilter.get_jCheckBoxNeue().isSelected());
} else {
// jetzt nur den Filter aus der Toolbar
GetModelTabFilme.getModelTabFilme(lf, daten, tabelle,
"", "", "",
getFilterTextFromSearchField(),
"",
mVFilter.get_jSliderMinuten().getValue(),
mVFilter.get_rbMin().isSelected(),
mVFilter.get_jCheckBoxKeineAbos().isSelected(), mVFilter.get_jCheckBoxKeineGesehenen().isSelected(),
mVFilter.get_jCheckBoxNurHd().isSelected(), mVFilter.get_jCheckBoxNurUt().isSelected(),
mVFilter.get_jToggleButtonLivestram().isSelected(), mVFilter.get_jCheckBoxNeue().isSelected());
}
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jSplitPane1 = new javax.swing.JSplitPane();
javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
javax.swing.JTable jTable1 = new javax.swing.JTable();
jPanelBeschreibung = new javax.swing.JPanel();
jPanelExtra = new javax.swing.JPanel();
jCheckBoxProgamme = new javax.swing.JCheckBox();
jPanelExtraInnen = new javax.swing.JPanel();
jScrollPaneFilter = new javax.swing.JScrollPane();
jPanelFilter = new javax.swing.JPanel();
jPanelToolBar = new javax.swing.JPanel();
jSplitPane1.setDividerLocation(240);
jTable1.setAutoCreateRowSorter(true);
jTable1.setModel(new TModel());
jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
jScrollPane1.setViewportView(jTable1);
jPanelBeschreibung.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153)));
javax.swing.GroupLayout jPanelBeschreibungLayout = new javax.swing.GroupLayout(jPanelBeschreibung);
jPanelBeschreibung.setLayout(jPanelBeschreibungLayout);
jPanelBeschreibungLayout.setHorizontalGroup(
jPanelBeschreibungLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
jPanelBeschreibungLayout.setVerticalGroup(
jPanelBeschreibungLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 155, Short.MAX_VALUE)
);
jPanelExtra.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153)));
jCheckBoxProgamme.setFont(new java.awt.Font("Dialog", 1, 10)); // NOI18N
jCheckBoxProgamme.setToolTipText("Buttons ausblenden");
javax.swing.GroupLayout jPanelExtraInnenLayout = new javax.swing.GroupLayout(jPanelExtraInnen);
jPanelExtraInnen.setLayout(jPanelExtraInnenLayout);
jPanelExtraInnenLayout.setHorizontalGroup(
jPanelExtraInnenLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 587, Short.MAX_VALUE)
);
jPanelExtraInnenLayout.setVerticalGroup(
jPanelExtraInnenLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
javax.swing.GroupLayout jPanelExtraLayout = new javax.swing.GroupLayout(jPanelExtra);
jPanelExtra.setLayout(jPanelExtraLayout);
jPanelExtraLayout.setHorizontalGroup(
jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelExtraLayout.createSequentialGroup()
.addComponent(jCheckBoxProgamme)
.addGap(5, 5, 5)
.addComponent(jPanelExtraInnen, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(5, 5, 5))
);
jPanelExtraLayout.setVerticalGroup(
jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelExtraLayout.createSequentialGroup()
.addGroup(jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelExtraLayout.createSequentialGroup()
.addComponent(jCheckBoxProgamme)
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(jPanelExtraLayout.createSequentialGroup()
.addGap(5, 5, 5)
.addComponent(jPanelExtraInnen, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGap(5, 5, 5))
);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanelExtra, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanelBeschreibung, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jScrollPane1)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 321, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanelBeschreibung, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanelExtra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
jSplitPane1.setRightComponent(jPanel1);
javax.swing.GroupLayout jPanelFilterLayout = new javax.swing.GroupLayout(jPanelFilter);
jPanelFilter.setLayout(jPanelFilterLayout);
jPanelFilterLayout.setHorizontalGroup(
jPanelFilterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 236, Short.MAX_VALUE)
);
jPanelFilterLayout.setVerticalGroup(
jPanelFilterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 515, Short.MAX_VALUE)
);
jScrollPaneFilter.setViewportView(jPanelFilter);
jSplitPane1.setLeftComponent(jScrollPaneFilter);
javax.swing.GroupLayout jPanelToolBarLayout = new javax.swing.GroupLayout(jPanelToolBar);
jPanelToolBar.setLayout(jPanelToolBarLayout);
jPanelToolBarLayout.setHorizontalGroup(
jPanelToolBarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
jPanelToolBarLayout.setVerticalGroup(
jPanelToolBarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 17, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSplitPane1)
.addComponent(jPanelToolBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jPanelToolBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 520, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JCheckBox jCheckBoxProgamme;
private javax.swing.JPanel jPanelBeschreibung;
private javax.swing.JPanel jPanelExtra;
private javax.swing.JPanel jPanelExtraInnen;
private javax.swing.JPanel jPanelFilter;
private javax.swing.JPanel jPanelToolBar;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPaneFilter;
private javax.swing.JSplitPane jSplitPane1;
// End of variables declaration//GEN-END:variables
private class BeobOpen implements ActionListener {
//ext. Programme starten
DatenPset pset;
public BeobOpen(DatenPset p) {
pset = p;
}
@Override
public void actionPerformed(ActionEvent e) {
playerStarten(pset);
}
}
private class BeobFilter implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (!stopBeob) {
loadTable();
}
}
}
private class BeobFilterTitelDoc implements DocumentListener {
@Override
public void insertUpdate(DocumentEvent e) {
tus();
}
@Override
public void removeUpdate(DocumentEvent e) {
tus();
}
@Override
public void changedUpdate(DocumentEvent e) {
tus();
}
private void tus() {
Filter.checkPattern1(mVFilter.get_jTextFieldFilterThemaTitel());
Filter.checkPattern1(mVFilter.get_jTextFieldFilterTitel());
if (Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_ECHTZEITSUCHE))) {
loadTable();
}
}
}
public class BeobMausTabelle extends MouseAdapter {
//rechhte Maustaste in der Tabelle
private final BeobPrint beobPrint = new BeobPrint();
private final BeobFilterLoeschen beobLoeschen = new BeobFilterLoeschen();
private final BeobAbo beobAbo = new BeobAbo(false /* mit Titel */);
private final BeobAbo beobAboMitTitel = new BeobAbo(true /* mit Titel */);
private final BeobAboFilter beobAboFilter = new BeobAboFilter();
private final BeobFilterThema beobThema = new BeobFilterThema();
private final BeobFilterSender beobSender = new BeobFilterSender();
private final BeobFilterSenderThema beobSenderThema = new BeobFilterSenderThema();
private final BeobFilterSenderThemaTitel beobSenderThemaTitel = new BeobFilterSenderThemaTitel();
private final BeobBlacklist beobBlacklistSender = new BeobBlacklist(true, false);
private final BeobBlacklist beobBlacklistSenderThema = new BeobBlacklist(true, true);
private final BeobBlacklist beobBlacklistThema = new BeobBlacklist(false, true);
private Point p;
public BeobMausTabelle() {
}
@Override
public void mouseClicked(MouseEvent arg0) {
if (arg0.getButton() == MouseEvent.BUTTON1) {
if (arg0.getClickCount() == 1) {
p = arg0.getPoint();
int row = tabelle.rowAtPoint(p);
int column = tabelle.columnAtPoint(p);
if (row >= 0) {
buttonTable(row, column);
}
} else if (arg0.getClickCount() > 1) {
//filmAbspielen_();
if (!Daten.filmInfo.isVisible()) {
Daten.filmInfo.showInfo();
}
}
}
}
@Override
public void mousePressed(MouseEvent arg0) {
if (arg0.isPopupTrigger()) {
showMenu(arg0);
}
}
@Override
public void mouseReleased(MouseEvent arg0) {
if (arg0.isPopupTrigger()) {
showMenu(arg0);
}
}
private void buttonTable(int row, int column) {
if (row != -1) {
if (tabelle.convertColumnIndexToModel(column) == DatenFilm.FILM_ABSPIELEN) {
Optional<DatenFilm> filmSelection = getCurrentlySelectedFilm();
filmSelection.ifPresent(datenFilm -> {
boolean stop = false;
final DatenDownload datenDownload = daten.getListeDownloadsButton().getDownloadUrlFilm(datenFilm.arr[DatenFilm.FILM_URL]);
if (datenDownload != null) {
if (datenDownload.start != null) {
if (datenDownload.start.status == Start.STATUS_RUN) {
stop = true;
daten.getListeDownloadsButton().delDownloadButton(datenFilm.arr[DatenFilm.FILM_URL]);
}
}
}
if (!stop) {
playFilm();
}
});
} else if (tabelle.convertColumnIndexToModel(column) == DatenFilm.FILM_AUFZEICHNEN) {
saveFilm();
}
}
}
private void showMenu(MouseEvent evt) {
p = evt.getPoint();
final int nr = tabelle.rowAtPoint(p);
if (nr >= 0) {
tabelle.setRowSelectionInterval(nr, nr);
}
Optional<DatenFilm> res = getFilm(nr);
JPopupMenu jPopupMenu = new JPopupMenu();
//Thema laden
JMenuItem item = new JMenuItem("Film abspielen");
item.setIcon(Icons.ICON_MENUE_FILM_START);
item.addActionListener(e -> playFilm());
jPopupMenu.add(item);
//Url
item = new JMenuItem("Film aufzeichnen");
item.setIcon(Icons.ICON_MENUE_FILM_REC);
item.addActionListener(e -> saveFilm());
jPopupMenu.add(item);
//##Trenner##
jPopupMenu.addSeparator();
//##Trenner##
if (Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_VIS_FILTER))) {
// nur dann ist das Filterpanel sichtbar
JMenu submenueFilter = new JMenu("Filter");
jPopupMenu.add(submenueFilter);
//Filter löschen
item = new JMenuItem("Filter löschen");
item.addActionListener(beobLoeschen);
submenueFilter.add(item);
//Sender
item = new JMenuItem("nach Sender filtern");
item.addActionListener(beobSender);
submenueFilter.add(item);
//Thema
item = new JMenuItem("nach Thema filtern");
item.addActionListener(beobThema);
submenueFilter.add(item);
//Thema+Sender
item = new JMenuItem("nach Sender und Thema filtern");
item.addActionListener(beobSenderThema);
submenueFilter.add(item);
//Thema+Sender+Titel
item = new JMenuItem("nach Sender, Thema und Titel filtern");
item.addActionListener(beobSenderThemaTitel);
submenueFilter.add(item);
}
JMenu submenueAbo = new JMenu("Abo");
jPopupMenu.add(submenueAbo);
//Abo anlegen
JMenuItem itemAboLoeschen = new JMenuItem("Abo Löschen");
JMenuItem itemAbo = new JMenuItem("Abo mit Sender und Thema anlegen");
JMenuItem itemAboMitTitel = new JMenuItem("Abo mit Sender und Thema und Titel anlegen");
JMenuItem itemAboFilter = new JMenuItem("Abo aus Filter anlegen");
JMenuItem itemChangeAboFilter = new JMenuItem("Abo ändern");
res.ifPresent(film -> {
if ((daten.getListeAbo().getAboFuerFilm_schnell(film, false /*die Länge nicht prüfen*/)) != null) {
//gibts schon, dann löschen
itemAbo.setEnabled(false);
itemAboMitTitel.setEnabled(false);
itemAboFilter.setEnabled(false);
itemAboLoeschen.addActionListener(beobAbo);
// dann können wir auch ändern
itemChangeAboFilter.addActionListener(new BeobChangeAbo());
} else {
itemAboLoeschen.setEnabled(false);
itemChangeAboFilter.setEnabled(false);
//neues Abo anlegen
itemAbo.addActionListener(beobAbo);
itemAboMitTitel.addActionListener(beobAboMitTitel);
itemAboFilter.addActionListener(beobAboFilter);
}
});
submenueAbo.add(itemAboLoeschen);
submenueAbo.add(itemChangeAboFilter);
submenueAbo.add(itemAbo);
submenueAbo.add(itemAboMitTitel);
submenueAbo.add(itemAboFilter);
//Programme einblenden
JMenu submenue = new JMenu("Film mit Set starten");
jPopupMenu.add(submenue);
ListePset liste = Daten.listePset.getListeButton();
for (DatenPset pset : liste) {
if (pset.getListeProg().isEmpty() && pset.arr[DatenPset.PROGRAMMSET_NAME].equals("")) {
// ein "leeres" Pset, Platzhalter
continue;
}
Color col = pset.getFarbe();
item = new JMenuItem(pset.arr[DatenPset.PROGRAMMSET_NAME]);
if (pset.getListeProg().isEmpty()) {
if (col != null) {
item.setForeground(col);
}
} else {
item.addActionListener(new BeobOpen(pset));
if (col != null) {
item.setBackground(col);
}
}
submenue.add(item);
}
JMenu submenueBlack = new JMenu("Blacklist");
jPopupMenu.add(submenueBlack);
//anlegen
JMenuItem itemBlackSender;
JMenuItem itemBlackSenderThema;
JMenuItem itemBlackThema;
itemBlackSender = new JMenuItem("Sender in die Blacklist einfügen");
itemBlackThema = new JMenuItem("Thema in die Blacklist einfügen");
itemBlackSenderThema = new JMenuItem("Sender und Thema in die Blacklist einfügen");
itemBlackSender.addActionListener(beobBlacklistSender);
itemBlackThema.addActionListener(beobBlacklistThema);
itemBlackSenderThema.addActionListener(beobBlacklistSenderThema);
submenueBlack.add(itemBlackSender);
submenueBlack.add(itemBlackThema);
submenueBlack.add(itemBlackSenderThema);
//##Trenner##
submenueBlack.addSeparator();
//##Trenner##
final JCheckBoxMenuItem jCheckBoxBlackBoxOn = new JCheckBoxMenuItem("Blacklist ist eingeschaltet");
jCheckBoxBlackBoxOn.setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_BLACKLIST_ON)));
jCheckBoxBlackBoxOn.addActionListener(e -> {
MVConfig.add(MVConfig.Configs.SYSTEM_BLACKLIST_ON, Boolean.toString(jCheckBoxBlackBoxOn.isSelected()));
daten.getListeBlacklist().filterListe();
Listener.notify(Listener.EREIGNIS_BLACKLIST_GEAENDERT, GuiFilme.class.getName());
});
submenueBlack.add(jCheckBoxBlackBoxOn);
final JCheckBoxMenuItem jCheckBoxBlackBoxStart = new JCheckBoxMenuItem("Blacklist ist beim Programmstart eingeschaltet");
jCheckBoxBlackBoxStart.setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_BLACKLIST_START_ON)));
jCheckBoxBlackBoxStart.addActionListener(e -> {
MVConfig.add(MVConfig.Configs.SYSTEM_BLACKLIST_START_ON, Boolean.toString(jCheckBoxBlackBoxStart.isSelected()));
Listener.notify(Listener.EREIGNIS_BLACKLIST_START_GEAENDERT, GuiFilme.class.getName());
});
submenueBlack.add(jCheckBoxBlackBoxStart);
//Url
if (res.isPresent()) {
final DatenFilm film = res.get();
String uNormal = film.getUrlFuerAufloesung(DatenFilm.AUFLOESUNG_NORMAL);
String uHd = film.getUrlFuerAufloesung(DatenFilm.AUFLOESUNG_HD);
String uLow = film.getUrlFuerAufloesung(DatenFilm.AUFLOESUNG_KLEIN);
if (uHd.equals(uNormal)) {
uHd = ""; // dann gibts keine
}
if (uLow.equals(uNormal)) {
uLow = ""; // dann gibts keine
}
if (!uNormal.isEmpty()) {
//##Trenner##
jPopupMenu.addSeparator();
//##Trenner##
if (!uHd.isEmpty() || !uLow.isEmpty()) {
JMenu submenueURL = new JMenu("Film-URL kopieren");
// HD
if (!uHd.isEmpty()) {
item = new JMenuItem("in HD-Auflösung");
KeyStroke ctrlH;
if (SystemInfo.isMacOSX()) {
ctrlH = KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.SHIFT_MASK + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
} else {
ctrlH = KeyStroke.getKeyStroke(KeyEvent.VK_H, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
}
item.setAccelerator(ctrlH);
item.addActionListener(e -> GuiFunktionen.copyToClipboard(film.getUrlFuerAufloesung(DatenFilm.AUFLOESUNG_HD)));
submenueURL.add(item);
}
// normale Auflösung, gibts immer
item = new JMenuItem("in hoher Auflösung");
KeyStroke ctrlU = KeyStroke.getKeyStroke(KeyEvent.VK_U, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
item.setAccelerator(ctrlU);
item.addActionListener(e -> GuiFunktionen.copyToClipboard(film.getUrlFuerAufloesung(DatenFilm.AUFLOESUNG_NORMAL)));
submenueURL.add(item);
// kleine Auflösung
if (!uLow.isEmpty()) {
item = new JMenuItem("in geringer Auflösung");
KeyStroke ctrlK = KeyStroke.getKeyStroke(KeyEvent.VK_K, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
item.setAccelerator(ctrlK);
item.addActionListener(e -> GuiFunktionen.copyToClipboard(film.getUrlFuerAufloesung(DatenFilm.AUFLOESUNG_KLEIN)));
submenueURL.add(item);
}
jPopupMenu.add(submenueURL);
} else {
item = new JMenuItem("Film-URL kopieren");
item.addActionListener(e -> GuiFunktionen.copyToClipboard(film.getUrlFuerAufloesung(DatenFilm.AUFLOESUNG_NORMAL)));
jPopupMenu.add(item);
}
}
if (!film.getUrlSubtitle().isEmpty()) {
item = new JMenuItem("Untertitel-URL kopieren");
item.addActionListener(e -> GuiFunktionen.copyToClipboard(film.getUrlSubtitle()));
jPopupMenu.add(item);
}
}
//##Trenner##
jPopupMenu.addSeparator();
//##Trenner##
// Film in der MediaDB suchen
if (res.isPresent()) {
JMenuItem itemDb = new JMenuItem("Titel in der Mediensammlung suchen");
itemDb.addActionListener(e -> mediensammlung());
jPopupMenu.add(itemDb);
}
//Drucken
item = new JMenuItem("Tabelle drucken");
item.addActionListener(beobPrint);
jPopupMenu.add(item);
//Infos
item = new JMenuItem("Filminformation anzeigen");
item.addActionListener(e -> {
if (!Daten.filmInfo.isVisible()) {
Daten.filmInfo.showInfo();
}
});
jPopupMenu.add(item);
//History
if (res.isPresent()) {
final DatenFilm film = res.get();
if (daten.history.urlPruefen(film.getUrlHistory())) {
item = new JMenuItem("Film als ungesehen markieren");
item.addActionListener(new BeobHistory(false));
} else {
item = new JMenuItem("Film als gesehen markieren");
item.addActionListener(new BeobHistory(true));
}
jPopupMenu.add(item);
}
//anzeigen
jPopupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
}
private class BeobHistory implements ActionListener {
private final boolean eintragen;
public BeobHistory(boolean eeintragen) {
eintragen = eeintragen;
}
private void updateHistory(DatenFilm film) {
if (eintragen) {
daten.history.zeileSchreiben(film.arr[DatenFilm.FILM_THEMA], film.arr[DatenFilm.FILM_TITEL], film.getUrlHistory());
daten.getListeFilmeHistory().add(film);
} else {
daten.history.urlAusLogfileLoeschen(film.getUrlHistory());
daten.getListeFilmeHistory().remove(film);
}
}
@Override
public void actionPerformed(ActionEvent e) {
final int nr = tabelle.rowAtPoint(p);
if (nr >= 0) {
Optional<DatenFilm> res = getFilm(nr);
res.ifPresent(this::updateHistory);
}
}
}
private class BeobPrint implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
try {
tabelle.print();
} catch (PrinterException ex) {
Log.errorLog(688542239, ex);
}
}
}
private class BeobFilterThema implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
final int nr = tabelle.rowAtPoint(p);
if (nr >= 0) {
stopBeob = true;
Optional<DatenFilm> res = getFilm(nr);
res.ifPresent(film -> {
final String thema = film.arr[DatenFilm.FILM_THEMA];
mVFilter.get_jComboBoxFilterThema().setSelectedIndex(0);
mVFilter.get_jComboBoxFilterThema().setSelectedItem(thema);
});
stopBeob = false;
loadTable();
}
}
}
private class BeobFilterSender implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
final int nr = tabelle.rowAtPoint(p);
if (nr >= 0) {
stopBeob = true;
Optional<DatenFilm> res = getFilm(nr);
res.ifPresent(film -> {
final String sen = film.arr[DatenFilm.FILM_SENDER];
mVFilter.get_jComboBoxFilterSender().setSelectedIndex(0);
mVFilter.get_jComboBoxFilterSender().setSelectedItem(sen);
});
stopBeob = false;
loadTable();
}
}
}
private class BeobFilterSenderThema implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
final int nr = tabelle.rowAtPoint(p);
if (nr >= 0) {
stopBeob = true;
Optional<DatenFilm> res = getFilm(nr);
res.ifPresent(film -> {
final String sen = film.arr[DatenFilm.FILM_SENDER];
mVFilter.get_jComboBoxFilterSender().setSelectedIndex(0);
mVFilter.get_jComboBoxFilterSender().setSelectedItem(sen);
final String thema = film.arr[DatenFilm.FILM_THEMA];
mVFilter.get_jComboBoxFilterThema().setSelectedIndex(0);
mVFilter.get_jComboBoxFilterThema().setSelectedItem(thema);
if (mVFilter.get_jComboBoxFilterThema().getSelectedIndex() == 0) {
final String themaFilter = getThemaFilter(sen, thema);
mVFilter.get_jComboBoxFilterThema().setSelectedItem(themaFilter);
}
});
stopBeob = false;
loadTable();
}
}
}
private class BeobFilterSenderThemaTitel implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
final int nr = tabelle.rowAtPoint(p);
if (nr >= 0) {
stopBeob = true;
Optional<DatenFilm> res = getFilm(nr);
res.ifPresent(film -> {
final String sen = film.arr[DatenFilm.FILM_SENDER];
mVFilter.get_jComboBoxFilterSender().setSelectedIndex(0);
mVFilter.get_jComboBoxFilterSender().setSelectedItem(sen);
final String thema = film.arr[DatenFilm.FILM_THEMA];
mVFilter.get_jComboBoxFilterThema().setSelectedIndex(0);
mVFilter.get_jComboBoxFilterThema().setSelectedItem(thema);
if (mVFilter.get_jComboBoxFilterThema().getSelectedIndex() == 0) {
final String themaFilter = getThemaFilter(sen, thema);
mVFilter.get_jComboBoxFilterThema().setSelectedItem(themaFilter);
}
final String tit = film.arr[DatenFilm.FILM_TITEL];
mVFilter.get_jTextFieldFilterTitel().setText(tit);
});
stopBeob = false;
loadTable();
}
}
}
private String getThemaFilter(String sender, String thema) {
// Thema für den Filter suchen bei zB: "Hallo" und "hallo" steht nur eines im FilterThema
String ret = "";
for (int i = 1; i < daten.getListeFilmeNachBlackList().themenPerSender.length; ++i) {
if (daten.getListeFilmeNachBlackList().sender[i].equals(sender)) {
for (int k = 1; k < daten.getListeFilmeNachBlackList().themenPerSender[i].length; ++k) {
if (daten.getListeFilmeNachBlackList().themenPerSender[i][k].equalsIgnoreCase(thema)) {
ret = daten.getListeFilmeNachBlackList().themenPerSender[i][k];
}
}
}
}
return ret;
}
private class BeobFilterLoeschen implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
guiFilmeFilterLoeschen();
}
}
private class BeobChangeAbo implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (Daten.listePset.getListeAbo().isEmpty()) {
new DialogAboNoSet(parentComponent, daten).setVisible(true);
} else {
final int nr = tabelle.rowAtPoint(p);
if (nr >= 0) {
stopBeob = true;
Optional<DatenFilm> res = getFilm(nr);
res.ifPresent(film -> {
DatenAbo datenAbo;
if ((datenAbo = daten.getListeAbo().getAboFuerFilm_schnell(film, false /*ohne Länge*/)) != null) {
//gibts schon, dann löschen
DialogEditAbo dialog = new DialogEditAbo(daten.getMediathekGui(), true, daten, datenAbo, false/*onlyOne*/);
dialog.setVisible(true);
if (dialog.ok) {
daten.getListeAbo().aenderungMelden();
}
}
});
stopBeob = false;
}
}
}
}
private class BeobAbo implements ActionListener {
private boolean mitTitel = false;
public BeobAbo(boolean mmitTitel) {
mitTitel = mmitTitel;
}
@Override
public void actionPerformed(ActionEvent e) {
if (Daten.listePset.getListeAbo().isEmpty()) {
new DialogAboNoSet(parentComponent, daten).setVisible(true);
} else {
final int nr = tabelle.rowAtPoint(p);
if (nr >= 0) {
stopBeob = true;
Optional<DatenFilm> res = getFilm(nr);
res.ifPresent(film -> {
DatenAbo datenAbo;
if ((datenAbo = daten.getListeAbo().getAboFuerFilm_schnell(film, false /*ohne Länge*/)) != null) {
//gibts schon, dann löschen
daten.getListeAbo().aboLoeschen(datenAbo);
} else //neues Abo anlegen
{
if (mitTitel) {
daten.getListeAbo().addAbo(film.arr[DatenFilm.FILM_THEMA]/*aboname*/,
film.arr[DatenFilm.FILM_SENDER], film.arr[DatenFilm.FILM_THEMA], film.arr[DatenFilm.FILM_TITEL]);
} else {
daten.getListeAbo().addAbo(film.arr[DatenFilm.FILM_THEMA]/*aboname*/,
film.arr[DatenFilm.FILM_SENDER], film.arr[DatenFilm.FILM_THEMA], "");
}
}
});
stopBeob = false;
}
}
}
}
private class BeobAboFilter implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (Daten.listePset.getListeAbo().isEmpty()) {
new DialogAboNoSet(parentComponent, daten).setVisible(true);
} else {
final int nr = tabelle.rowAtPoint(p);
if (nr >= 0) {
stopBeob = true;
Optional<DatenFilm> res = getFilm(nr);
res.ifPresent(film -> {
final String thema = film.arr[DatenFilm.FILM_THEMA];
//neues Abo anlegen
daten.getListeAbo().addAbo(mVFilter.get_jComboBoxFilterSender().getSelectedItem().toString(),
mVFilter.get_jComboBoxFilterThema().getSelectedItem().toString(),
mVFilter.get_jTextFieldFilterTitel().getText(),
mVFilter.getThemaTitel() ? mVFilter.get_jTextFieldFilterThemaTitel().getText() : "",
mVFilter.getThemaTitel() ? "" : mVFilter.get_jTextFieldFilterThemaTitel().getText(),
mVFilter.get_jSliderMinuten().getValue(),
mVFilter.get_rbMin().isSelected(),
thema);
});
stopBeob = false;
}
}
}
}
private class BeobBlacklist implements ActionListener {
private final boolean sender;
private final boolean thema;
public BeobBlacklist(boolean ssender, boolean tthema) {
sender = ssender;
thema = tthema;
}
@Override
public void actionPerformed(ActionEvent e) {
final int nr = tabelle.rowAtPoint(p);
if (nr >= 0) {
Optional<DatenFilm> res = getFilm(nr);
res.ifPresent(film -> {
final String th = film.arr[DatenFilm.FILM_THEMA];
final String se = film.arr[DatenFilm.FILM_SENDER];
// Blackliste für alle Fälle einschalten, notify kommt beim add()
MVConfig.add(MVConfig.Configs.SYSTEM_BLACKLIST_ON, Boolean.TRUE.toString());
if (!sender) {
daten.getListeBlacklist().add(new DatenBlacklist("", th, "" /*Titel*/, "" /*Thema-Titel*/));
} else if (!thema) {
daten.getListeBlacklist().add(new DatenBlacklist(se, "", "" /*Titel*/, "" /*Thema-Titel*/));
} else {
daten.getListeBlacklist().add(new DatenBlacklist(se, th, "" /*Titel*/, "" /*Thema-Titel*/));
}
});
}
}
}
}
}