/* * 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.tool; import com.jidesoft.utils.SystemInfo; import mSearch.daten.DatenFilm; import mSearch.daten.ListeFilme; import mSearch.tool.Listener; import mSearch.tool.Log; import mediathek.config.Daten; import mediathek.config.Icons; import mediathek.config.MVColor; import mediathek.config.MVConfig; import mediathek.controller.MVUsedUrls; import mediathek.controller.starter.Start; import mediathek.daten.DatenDownload; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import java.awt.*; @SuppressWarnings("serial") public class CellRendererFilme extends DefaultTableCellRenderer { private static ImageIcon film_start_tab = null; private static ImageIcon film_start_sw_tab = null; private static ImageIcon film_rec_tab = null; private static ImageIcon film_rec_sw_tab = null; private static ImageIcon film_stop_tab = null; private static ImageIcon film_stop_sw_tab = null; private boolean geoMelden = false; private MVUsedUrls history = null; private final MVSenderIconCache senderIconCache; private static ImageIcon ja_16 = null; private static ImageIcon nein_12 = null; public CellRendererFilme(Daten d) { ja_16 = Icons.ICON_TABELLE_EIN; nein_12 = Icons.ICON_TABELLE_AUS; history = d.history; film_start_tab = Icons.ICON_TABELLE_FILM_START; film_start_sw_tab = Icons.ICON_TABELLE_FILM_START_SW; film_rec_tab = Icons.ICON_TABELLE_FILM_REC; film_rec_sw_tab = Icons.ICON_TABELLE_FILM_REC_SW; film_stop_tab = Icons.ICON_TABELLE_FILM_STOP; film_stop_sw_tab = Icons.ICON_TABELLE_FILM_STOP_SW; geoMelden = Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_GEO_MELDEN)); Listener.addListener(new Listener(Listener.EREIGNIS_GEO, CellRendererFilme.class.getSimpleName()) { @Override public void ping() { geoMelden = Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_GEO_MELDEN)); } }); senderIconCache = new MVSenderIconCache(); } @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { try { setBackground(null); setForeground(null); setIcon(null); setToolTipText(null); setHorizontalAlignment(SwingConstants.LEADING); super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); final int rowModelIndex = table.convertRowIndexToModel(row); final int columnModelIndex = table.convertColumnIndexToModel(column); DatenFilm datenFilm = (DatenFilm) table.getModel().getValueAt(rowModelIndex, DatenFilm.FILM_REF); DatenDownload datenDownload = Daten.getInstance().getListeDownloadsButton().getDownloadUrlFilm(datenFilm.arr[DatenFilm.FILM_URL]); if (((MVTable) table).lineBreak) { JTextArea textArea; switch (columnModelIndex) { case DatenFilm.FILM_BESCHREIBUNG: case DatenFilm.FILM_THEMA: case DatenFilm.FILM_TITEL: case DatenFilm.FILM_URL: textArea = new JTextArea(); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); textArea.setText(value.toString()); textArea.setForeground(getForeground()); textArea.setBackground(getBackground()); if (!SystemInfo.isMacOSX()) { // On OS X do not change fonts as it violates HIG... if (isSelected) { textArea.setFont(new java.awt.Font("Dialog", Font.BOLD, MVFont.fontSize)); } else { textArea.setFont(new java.awt.Font("Dialog", Font.PLAIN, MVFont.fontSize)); } } setColor(textArea, datenFilm, datenDownload, isSelected); return textArea; } } if (!SystemInfo.isMacOSX()) { // On OS X do not change fonts as it violates HIG... if (isSelected) { setFont(new java.awt.Font("Dialog", Font.BOLD, MVFont.fontSize)); } else { setFont(new java.awt.Font("Dialog", Font.PLAIN, MVFont.fontSize)); } } switch (columnModelIndex) { case DatenFilm.FILM_NR: case DatenFilm.FILM_DATUM: case DatenFilm.FILM_ZEIT: case DatenFilm.FILM_DAUER: setHorizontalAlignment(SwingConstants.CENTER); break; case DatenFilm.FILM_GROESSE: setHorizontalAlignment(SwingConstants.RIGHT); break; case DatenFilm.FILM_ABSPIELEN: handleButtonStartColumn(datenDownload, isSelected); break; case DatenFilm.FILM_AUFZEICHNEN: handleButtonDownloadColumn(isSelected); break; case DatenFilm.FILM_SENDER: if (((MVTable) table).iconAnzeigen) { handleSenderColumn((String) value, ((MVTable) table).iconKlein); } break; case DatenFilm.FILM_NEU: setHorizontalAlignment(SwingConstants.CENTER); if (datenFilm.isNew()) { setIcon(ja_16); } else { setIcon(nein_12); } setText(""); break; case DatenFilm.FILM_HD: setHorizontalAlignment(SwingConstants.CENTER); if (datenFilm.isHD()) { setIcon(ja_16); } else { setIcon(nein_12); } setText("");//im Modle brauchen wir den Text zum Sortieren break; case DatenFilm.FILM_UT: setHorizontalAlignment(SwingConstants.CENTER); if (datenFilm.hasUT()) { setIcon(ja_16); } else { setIcon(nein_12); } setText(""); break; } setColor(this, datenFilm, datenDownload, isSelected); } catch (Exception ex) { Log.errorLog(630098552, ex); } return this; } private void setColor(Component c, DatenFilm datenFilm, DatenDownload datenDownload, boolean isSelected) { boolean live = datenFilm.arr[DatenFilm.FILM_THEMA].equals(ListeFilme.THEMA_LIVE); boolean start = false; if (datenDownload != null) { // gestarteter Film if (datenDownload.start != null) { start = true; switch (datenDownload.start.status) { case Start.STATUS_INIT: if (isSelected) { c.setBackground(MVColor.DOWNLOAD_WAIT_SEL.color); } else { c.setBackground(MVColor.DOWNLOAD_WAIT.color); } break; case Start.STATUS_RUN: if (isSelected) { c.setBackground(MVColor.DOWNLOAD_RUN_SEL.color); } else { c.setBackground(MVColor.DOWNLOAD_RUN.color); } break; case Start.STATUS_FERTIG: if (isSelected) { c.setBackground(MVColor.DOWNLOAD_FERTIG_SEL.color); } else { c.setBackground(MVColor.DOWNLOAD_FERTIG.color); } break; case Start.STATUS_ERR: if (isSelected) { c.setBackground(MVColor.DOWNLOAD_FEHLER_SEL.color); } else { c.setBackground(MVColor.DOWNLOAD_FEHLER.color); } break; } } } if (!start) { if (live) { // bei livestreams keine History anzeigen c.setForeground(MVColor.FILM_LIVESTREAM.color); } else if (history.urlPruefen(datenFilm.getUrlHistory())) { if (!isSelected) { c.setBackground(MVColor.FILM_HISTORY.color); } } else if (datenFilm.isNew()) { c.setForeground(MVColor.FILM_NEU.color); } } if (!start && geoMelden) { if (!datenFilm.arr[DatenFilm.FILM_GEO].isEmpty()) { if (!datenFilm.arr[DatenFilm.FILM_GEO].contains(MVConfig.get(MVConfig.Configs.SYSTEM_GEO_STANDORT))) { //setForeground(GuiKonstanten.FARBE_FILM_GEOBLOCK_FORGROUND); if (isSelected) { c.setBackground(MVColor.FILM_GEOBLOCK_BACKGROUND_SEL.color); } else { c.setBackground(MVColor.FILM_GEOBLOCK_BACKGROUND.color); } } } } } private void handleButtonStartColumn(final DatenDownload datenDownload, final boolean isSelected) { // Button Abspielen setHorizontalAlignment(SwingConstants.CENTER); if (datenDownload != null) { if (datenDownload.start != null) { if (datenDownload.start.status == Start.STATUS_RUN) { setToolTipText("Film stoppen"); if (isSelected) { setIcon(film_stop_tab); } else { setIcon(film_stop_sw_tab); } } } } if (getIcon() == null) { setToolTipText("Film abspielen"); if (isSelected) { setIcon(film_start_tab); } else { setIcon(film_start_sw_tab); } } } private void handleButtonDownloadColumn(final boolean isSelected) { // Button Aufzeichnen setHorizontalAlignment(SwingConstants.CENTER); setToolTipText("Film aufzeichnen"); if (isSelected) { setIcon(film_rec_tab); } else { setIcon(film_rec_sw_tab); } } /** * Draws the sender icon in the sender model column. * * @param sender Name of the sender. */ private void handleSenderColumn(String sender, boolean small) { setHorizontalAlignment(SwingConstants.CENTER); ImageIcon icon = senderIconCache.get(sender, small); if (icon != null) { setText(""); setIcon(icon); } } }