/* * 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 mSearch.filmeSuchen.ListenerFilmeLaden; import mSearch.filmeSuchen.ListenerFilmeLadenEvent; import mSearch.tool.Listener; import mediathek.MediathekGui; import mediathek.config.Daten; import mediathek.config.Icons; import mediathek.config.MVConfig; import mediathek.tool.Filter; import org.jdesktop.swingx.JXSearchField; import javax.swing.Box.Filler; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.LinkedList; @SuppressWarnings("serial") public final class ToolBar extends JToolBar { Filler filler__5 = new Filler(new Dimension(5, 20), new Dimension(5, 20), new Dimension(5, 32767)); Filler filler__10 = new Filler(new Dimension(10, 20), new Dimension(10, 20), new Dimension(10, 32767)); Filler filler__trenner = new Filler(new Dimension(1, 5), new Dimension(1, 5), new Dimension(32767, 5)); MVButton jButtonAboAendern = null; MVButton jButtonAbosAusschalten = null; MVButton jButtonAbosEinschalten = null; MVButton jButtonAbosLoeschen = null; MVButton jButtonDownloadAktualisieren = null; MVButton jButtonDownloadAlleStarten = null; MVButton jButtonDownloadAufraeumen = null; MVButton jButtonDownloadFilmStarten = null; MVButton jButtonDownloadLoeschen = null; MVButton jButtonDownloadZurueckstellen = null; MVButton jButtonFilmAbspielen = null; MVButton jButtonFilmSpeichern = null; MVButton jButtonFilmlisteLaden = null; JButton jButtonFilterPanel = null; MVButton jButtonInfo = null; public JXSearchField jTextFieldFilter; private MVConfig.Configs nrToolbar = null; private MVConfig.Configs nrIconKlein = MVConfig.Configs.SYSTEM_ICON_KLEIN; private final Daten daten; BeobMausToolBar beobMausToolBar = new BeobMausToolBar(); boolean extern = false; MediathekGui.TABS state; LinkedList<MVButton> buttonList = new LinkedList<>(); public ToolBar(Daten ddaten, MediathekGui.TABS state) { // für die Toolbar der Externen Fenster extern = true; daten = ddaten; this.state = state; switch (state) { case TAB_FILME: nrToolbar = MVConfig.Configs.SYSTEM_TOOLBAR_FILME; break; case TAB_DOWNLOADS: nrToolbar = MVConfig.Configs.SYSTEM_TOOLBAR_DOWNLOAD; break; case TAB_ABOS: nrToolbar = MVConfig.Configs.SYSTEM_TOOLBAR_ABO; break; default: nrToolbar = null; nrIconKlein = null; } startup(); setToolbar(); Listener.addListener(new Listener(Listener.EREIGNIS_TOOLBAR_BUTTON_KLEIN, ToolBar.class.getSimpleName() + state) { @Override public void ping() { setIcon(Boolean.parseBoolean(MVConfig.get(nrIconKlein))); } }); } private void startup() { // init this.setBackground(new java.awt.Color(204, 204, 204)); this.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153))); this.setFloatable(false); switch (state) { case TAB_FILME: startupFilme(); break; case TAB_DOWNLOADS: startupDownload(); break; case TAB_ABOS: startupAbo(); break; default: } this.add(filler__10); // Icons setIcon(Boolean.parseBoolean(MVConfig.get(nrIconKlein))); loadVisible(); Listener.addListener(new Listener(Listener.EREIGNIS_PANEL_FILTER_ANZEIGEN, ToolBar.class.getSimpleName()) { @Override public void ping() { filterAnzeigen(); } }); addMouseListener(beobMausToolBar); } private void startupFilme() { // init setFilmlisteLaden(); jButtonInfo = new MVButton("Filminformation anzeigen", "Filminformation anzeigen", Icons.ICON_TOOLBAR_FILME_INFO_GR, Icons.ICON_TOOLBAR_FILME_INFO_KL); jButtonFilmAbspielen = new MVButton("Film abspielen", "Film abspielen", Icons.ICON_TOOLBAR_FILME_FILM_START_GR, Icons.ICON_TOOLBAR_FILME_FILM_START_KL); jButtonFilmSpeichern = new MVButton("Film aufzeichnen", "Film aufzeichnen", Icons.ICON_TOOLBAR_FILME_REC_GR, Icons.ICON_TOOLBAR_FILME_REC_KL); this.add(filler__10); this.add(jButtonInfo); this.add(filler__10); this.add(jButtonFilmAbspielen); this.add(jButtonFilmSpeichern); this.add(filler__10); this.add(filler__trenner); // Searchfield jButtonFilterPanel = new JButton(); jTextFieldFilter = new org.jdesktop.swingx.JXSearchField(); jTextFieldFilter.setBackground(new java.awt.Color(230, 230, 230)); jTextFieldFilter.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); jTextFieldFilter.setToolTipText("Thema/Titel suchen"); jTextFieldFilter.setDisabledTextColor(new java.awt.Color(102, 102, 102)); jTextFieldFilter.setMaximumSize(new java.awt.Dimension(300, 35)); jTextFieldFilter.setName("Thema/Titel"); jTextFieldFilter.setPreferredSize(new java.awt.Dimension(300, 25)); jTextFieldFilter.setPrompt("Thema/Titel"); jTextFieldFilter.setLayoutStyle(JXSearchField.LayoutStyle.MAC); jTextFieldFilter.setSearchMode(JXSearchField.SearchMode.INSTANT); jTextFieldFilter.setUseNativeSearchFieldIfPossible(true); jTextFieldFilter.getFindButton().setIcon(Icons.ICON_SUCHEN); jTextFieldFilter.addActionListener(actionEvent -> { Filter.checkPattern2(jTextFieldFilter); Daten.guiFilme.guiFilmeFiltern(); }); //looks like you need to explicitly set this on Linux... jTextFieldFilter.setInstantSearchDelay(150); this.add(jTextFieldFilter); // Button Filter jButtonFilterPanel.setToolTipText("Erweiterte Suche (Filter) anzeigen/ausblenden"); jButtonFilterPanel.setBorder(null); jButtonFilterPanel.setBorderPainted(false); jButtonFilterPanel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButtonFilterPanel.setMaximumSize(new java.awt.Dimension(40, 40)); jButtonFilterPanel.setMinimumSize(new java.awt.Dimension(40, 40)); jButtonFilterPanel.setOpaque(false); jButtonFilterPanel.setPreferredSize(new java.awt.Dimension(40, 40)); jButtonFilterPanel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButtonFilterPanel.setIcon(Icons.ICON_BUTTON_FILTER_ANZEIGEN); this.add(jButtonFilterPanel); jButtonFilmSpeichern.addActionListener(e -> Daten.guiFilme.guiFilmeFilmSpeichern()); jButtonFilmAbspielen.addActionListener(e -> Daten.guiFilme.guiFilmeFilmAbspielen()); jButtonInfo.addActionListener(e -> Daten.filmInfo.showInfo()); jButtonFilterPanel.addActionListener(e -> { boolean b = !Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_VIS_FILTER)); MVConfig.add(MVConfig.Configs.SYSTEM_VIS_FILTER, Boolean.toString(b)); filterAnzeigen(); Listener.notify(Listener.EREIGNIS_PANEL_FILTER_ANZEIGEN, ToolBar.class.getName()); }); } private void startupDownload() { // init setFilmlisteLaden(); jButtonInfo = new MVButton("Filminformation anzeigen", "Filminformation anzeigen", Icons.ICON_TOOLBAR_DOWNLOAD_FILM_INFO_GR, Icons.ICON_TOOLBAR_DOWNLOAD_FILM_INFO_KL); jButtonDownloadAktualisieren = new MVButton("Liste der Downloads aktualisieren", "Liste der Downloads aktualisieren", Icons.ICON_TOOLBAR_DOWNLOAD_REFRESH_GR, Icons.ICON_TOOLBAR_DOWNLOAD_REFRESH_KL); jButtonDownloadAlleStarten = new MVButton("alle Downloads starten", "alle Downloads starten", Icons.ICON_TOOLBAR_DOWNLOAD_ALLE_STARTEN_GR, Icons.ICON_TOOLBAR_DOWNLOAD_ALLE_STARTEN_KL); jButtonDownloadFilmStarten = new MVButton("Film Starten", "gespeicherten Film abspielen", Icons.ICON_TOOLBAR_DOWNLOAD_FILM_START_GR, Icons.ICON_TOOLBAR_DOWNLOAD_FILM_START_KL); jButtonDownloadZurueckstellen = new MVButton("Downloads zurückstellen", "Downloads zurückstellen", Icons.ICON_TOOLBAR_DOWNLOAD_UNDO_GR, Icons.ICON_TOOLBAR_DOWNLOAD_UNDO_KL); jButtonDownloadLoeschen = new MVButton("Downloads aus Liste entfernen", "Downloads aus Liste entfernen", Icons.ICON_TOOLBAR_DOWNLOAD_DEL_GR, Icons.ICON_TOOLBAR_DOWNLOAD_DEL_KL); jButtonDownloadAufraeumen = new MVButton("Liste der Downloads aufräumen", "Liste der Downloads aufräumen", Icons.ICON_TOOLBAR_DOWNLOAD_CLEAR_GR, Icons.ICON_TOOLBAR_DOWNLOAD_CLEAR_KL); this.add(filler__10); this.add(jButtonInfo); this.add(filler__10); this.add(jButtonDownloadAktualisieren); this.add(jButtonDownloadAlleStarten); this.add(jButtonDownloadFilmStarten); this.add(jButtonDownloadZurueckstellen); this.add(jButtonDownloadLoeschen); this.add(jButtonDownloadAufraeumen); jButtonInfo.addActionListener(e -> Daten.filmInfo.showInfo()); jButtonDownloadAktualisieren.addActionListener(e -> Daten.guiDownloads.aktualisieren()); jButtonDownloadAufraeumen.addActionListener(e -> Daten.guiDownloads.aufraeumen()); jButtonDownloadLoeschen.addActionListener(e -> Daten.guiDownloads.loeschen()); jButtonDownloadAlleStarten.addActionListener(e -> Daten.guiDownloads.starten(true)); jButtonDownloadFilmStarten.addActionListener(e -> Daten.guiDownloads.filmAbspielen()); jButtonDownloadZurueckstellen.addActionListener(e -> Daten.guiDownloads.zurueckstellen()); this.add(filler__trenner); // Button Filter jButtonFilterPanel = new JButton(); jButtonFilterPanel.setToolTipText("Filter anzeigen/ausblenden"); jButtonFilterPanel.setBorder(null); jButtonFilterPanel.setBorderPainted(false); jButtonFilterPanel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButtonFilterPanel.setMaximumSize(new java.awt.Dimension(40, 40)); jButtonFilterPanel.setMinimumSize(new java.awt.Dimension(40, 40)); jButtonFilterPanel.setOpaque(false); jButtonFilterPanel.setPreferredSize(new java.awt.Dimension(40, 40)); jButtonFilterPanel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButtonFilterPanel.setIcon(Icons.ICON_BUTTON_FILTER_ANZEIGEN); this.add(jButtonFilterPanel); jButtonFilterPanel.addActionListener(e -> { boolean b = !Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_TAB_DOWNLOAD_FILTER_VIS)); MVConfig.add(MVConfig.Configs.SYSTEM_TAB_DOWNLOAD_FILTER_VIS, Boolean.toString(b)); Listener.notify(Listener.EREIGNIS_PANEL_DOWNLOAD_FILTER_ANZEIGEN, ToolBar.class.getName()); }); } private void startupAbo() { // init jButtonAbosEinschalten = new MVButton("Abos einschalten", "Abos einschalten", Icons.ICON_TOOLBAR_ABO_EIN_GR, Icons.ICON_TOOLBAR_ABO_EIN_KL); jButtonAbosAusschalten = new MVButton("Abos ausschalten", "Abos ausschalten", Icons.ICON_TOOLBAR_ABO_AUS_GR, Icons.ICON_TOOLBAR_ABO_AUS_KL); jButtonAbosLoeschen = new MVButton("Abos löschen", "Abos löschen", Icons.ICON_TOOLBAR_ABO_DEL_GR, Icons.ICON_TOOLBAR_ABO_DEL_KL); jButtonAboAendern = new MVButton("Abos ändern", "Abos ändern", Icons.ICON_TOOLBAR_ABO_CONFIG_GR, Icons.ICON_TOOLBAR_ABO_CONFIG_KL); this.add(filler__10); this.add(jButtonAbosEinschalten); this.add(jButtonAbosAusschalten); this.add(jButtonAbosLoeschen); this.add(jButtonAboAendern); jButtonAbosEinschalten.addActionListener(e -> Daten.guiAbo.einAus(true)); jButtonAbosAusschalten.addActionListener(e -> Daten.guiAbo.einAus(false)); jButtonAbosLoeschen.addActionListener(e -> Daten.guiAbo.loeschen()); jButtonAboAendern.addActionListener(e -> Daten.guiAbo.aendern()); this.add(filler__trenner); // Button Filter jButtonFilterPanel = new JButton(); jButtonFilterPanel.setToolTipText("Filter anzeigen/ausblenden"); jButtonFilterPanel.setBorder(null); jButtonFilterPanel.setBorderPainted(false); jButtonFilterPanel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButtonFilterPanel.setMaximumSize(new java.awt.Dimension(40, 40)); jButtonFilterPanel.setMinimumSize(new java.awt.Dimension(40, 40)); jButtonFilterPanel.setOpaque(false); jButtonFilterPanel.setPreferredSize(new java.awt.Dimension(40, 40)); jButtonFilterPanel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButtonFilterPanel.setIcon(Icons.ICON_BUTTON_FILTER_ANZEIGEN); this.add(jButtonFilterPanel); jButtonFilterPanel.addActionListener(e -> { boolean b = !Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_TAB_ABO_FILTER_VIS)); MVConfig.add(MVConfig.Configs.SYSTEM_TAB_ABO_FILTER_VIS, Boolean.toString(b)); Listener.notify(Listener.EREIGNIS_PANEL_ABO_FILTER_ANZEIGEN, ToolBar.class.getName()); }); } private void setFilmlisteLaden() { jButtonFilmlisteLaden = new MVButton("Filmliste laden", "neue Filmliste laden", Icons.ICON_TOOLBAR_FILME_FILMLISTE_LADEN_GR, Icons.ICON_TOOLBAR_FILME_FILMLISTE_LADEN_KL); this.add(filler__5); this.add(jButtonFilmlisteLaden); daten.getFilmeLaden().addAdListener(new ListenerFilmeLaden() { @Override public void start(ListenerFilmeLadenEvent event) { //ddaten.infoPanel.setProgress(); jButtonFilmlisteLaden.setEnabled(false); if (jButtonDownloadAktualisieren != null) { jButtonDownloadAktualisieren.setEnabled(false); } } @Override public void progress(ListenerFilmeLadenEvent event) { } @Override public void fertig(ListenerFilmeLadenEvent event) { jButtonFilmlisteLaden.setEnabled(true); if (jButtonDownloadAktualisieren != null) { jButtonDownloadAktualisieren.setEnabled(true); } } }); jButtonFilmlisteLaden.addActionListener(e -> daten.getFilmeLaden().loadFilmlistDialog(daten, false)); jButtonFilmlisteLaden.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent arg0) { if (arg0.isPopupTrigger()) { if (jButtonFilmlisteLaden.isEnabled()) { daten.getFilmeLaden().loadFilmlistDialog(daten, true); } } } @Override public void mouseReleased(MouseEvent arg0) { if (arg0.isPopupTrigger()) { if (jButtonFilmlisteLaden.isEnabled()) { daten.getFilmeLaden().loadFilmlistDialog(daten, true); } } } }); } private void setIcon(boolean klein) { MVConfig.add(nrIconKlein, Boolean.toString(klein)); beobMausToolBar.itemKlein.setSelected(klein); for (MVButton b : buttonList) { b.setIcon(); } this.repaint(); } private void setToolbar() { filterAnzeigen(); for (MVButton b : buttonList) { b.setVisible(b.anzeigen); } } private void filterAnzeigen() { if (state.equals(MediathekGui.TABS.TAB_FILME)) { jTextFieldFilter.setVisible(!Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_VIS_FILTER))); } } private void loadVisible() { if (nrToolbar != null) { String[] b = MVConfig.get(nrToolbar).split(":"); if (buttonList.size() == b.length) { // ansonsten gibt es neue Button: dann alle anzeigen for (int i = 0; i < b.length; ++i) { buttonList.get(i).anzeigen = Boolean.parseBoolean(b[i]); buttonList.get(i).setVisible(Boolean.parseBoolean(b[i])); } } } setToolbar(); if (nrIconKlein != null) { setIcon(Boolean.parseBoolean(MVConfig.get(nrIconKlein))); } } private void storeVisible() { if (nrToolbar != null) { MVConfig.add(nrToolbar, ""); for (MVButton b : buttonList) { if (!MVConfig.get(nrToolbar).isEmpty()) { MVConfig.add(nrToolbar, MVConfig.get(nrToolbar) + ':'); } MVConfig.add(nrToolbar, MVConfig.get(nrToolbar) + Boolean.toString(b.anzeigen)); } } } private class MVButton extends JButton { boolean anzeigen = true; private String name = ""; private final ImageIcon imageIconKlein; private final ImageIcon imageIconNormal; public MVButton(String nname, String ttoolTip, ImageIcon iimageIconNormal, ImageIcon iimageIconKlein) { setToolTipText(ttoolTip); name = nname; imageIconKlein = iimageIconKlein; imageIconNormal = iimageIconNormal; setOpaque(false); setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 8, 8, 8)); setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); buttonList.add(this); } void setIcon() { if (nrIconKlein != null) { if (Boolean.parseBoolean(MVConfig.get(nrIconKlein))) { this.setIcon(imageIconKlein); } else { this.setIcon(imageIconNormal); } } } } private class BeobMausToolBar extends MouseAdapter { JCheckBoxMenuItem itemKlein = new JCheckBoxMenuItem("kleine Icons"); JMenuItem itemReset = new JMenuItem("zurücksetzen"); JCheckBoxMenuItem[] checkBoxMenuItems; public BeobMausToolBar() { if (nrIconKlein != null) { itemKlein.setSelected(Boolean.parseBoolean(MVConfig.get(nrIconKlein))); } } @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(); itemKlein.addActionListener(e -> { setIcon(itemKlein.isSelected()); Listener.notify(Listener.EREIGNIS_TOOLBAR_BUTTON_KLEIN, ToolBar.class.getSimpleName() + state); }); jPopupMenu.add(itemKlein); //##Trenner## jPopupMenu.addSeparator(); //##Trenner## // Spalten ein-ausschalten checkBoxMenuItems = new JCheckBoxMenuItem[buttonList.size()]; for (int i = 0; i < checkBoxMenuItems.length; ++i) { checkBoxMenuItems[i] = null; checkBoxMenuItems[i] = new JCheckBoxMenuItem(buttonList.get(i).name); if (checkBoxMenuItems[i] != null) { checkBoxMenuItems[i] = new JCheckBoxMenuItem(buttonList.get(i).name); checkBoxMenuItems[i].setIcon(buttonList.get(i).imageIconKlein); checkBoxMenuItems[i].setSelected(buttonList.get(i).anzeigen); checkBoxMenuItems[i].addActionListener(e -> { setButtonList(); storeVisible(); }); jPopupMenu.add(checkBoxMenuItems[i]); } } //##Trenner## jPopupMenu.addSeparator(); //##Trenner## itemReset.addActionListener(e -> { resetToolbar(); storeVisible(); Listener.notify(Listener.EREIGNIS_TOOLBAR_BUTTON_KLEIN, ToolBar.class.getSimpleName() + state); }); jPopupMenu.add(itemReset); //anzeigen jPopupMenu.show(evt.getComponent(), evt.getX(), evt.getY()); } private void setButtonList() { if (checkBoxMenuItems == null) { return; } for (int i = 0; i < checkBoxMenuItems.length; ++i) { if (checkBoxMenuItems[i] == null) { continue; } buttonList.get(i).anzeigen = checkBoxMenuItems[i].isSelected(); buttonList.get(i).setVisible(checkBoxMenuItems[i].isSelected()); } setToolbar(); } private void resetToolbar() { if (checkBoxMenuItems == null) { return; } for (int i = 0; i < checkBoxMenuItems.length; ++i) { if (checkBoxMenuItems[i] == null) { continue; } buttonList.get(i).anzeigen = true; buttonList.get(i).setVisible(true); } setToolbar(); setIcon(false); } } }