/* * 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.dialogEinstellungen; import com.jidesoft.utils.SystemInfo; import java.awt.Frame; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.ArrayList; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import mSearch.tool.Listener; import mSearch.tool.Log; import mediathek.config.Daten; import mediathek.config.Icons; import mediathek.config.MVConfig; import mediathek.update.ProgrammUpdateSuchen; import mediathek.gui.PanelVorlage; import mediathek.gui.dialog.DialogHilfe; import mediathek.tool.MVFunctionSys; import mediathek.tool.MVMessageDialog; @SuppressWarnings("serial") public class PanelEinstellungen extends PanelVorlage { private final static String ICONSET_STANDARD = "Standard"; private final String ALLE = " Alle "; public PanelEinstellungen(Daten d, JFrame parent) { super(d, parent); initComponents(); jButtonInfos.setIcon(Icons.ICON_BUTTON_AKTUALISIEREN); daten = d; SpinnerListModel lm = new SpinnerListModel(new Object[]{ALLE, "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "12", "14", "16", "18", "20", "25", "30"}); jSpinnerDays.setModel(lm); ((JSpinner.DefaultEditor) jSpinnerDays.getEditor()).getTextField().setEditable(false); initSpinner(); jSpinnerDays.addChangeListener(new BeobSpinnerDays()); jButtonLoad.addActionListener(ae -> { daten.getListeFilme().clear(); // sonst wird evtl. nur eine Diff geladen daten.getFilmeLaden().loadFilmlist(""); }); setupLookAndFeelComboBox(); jButtonHelpDays.setIcon(Icons.ICON_BUTTON_HELP); jButtonHelpDays.addActionListener(e -> new DialogHilfe(parentComponent, true, "\n" + "Es werden nur Filme der letzten\n" + "xx Tage geladen." + "\n" + "Bei \"Alle\" werden alle Filme geladen.\n" + "\n" + "(Eine kleinere Filmliste\n" + "kann bei Rechnern mit wenig\n" + "Speicher hilfreich sein.)" + "\n\n" + "Auswirkung hat das erst nach dem\n" + "Neuladen der kompletten Filmliste.").setVisible(true)); Listener.addListener(new Listener(Listener.EREIGNIS_ANZAHL_DOWNLOADS, PanelEinstellungen.class.getSimpleName()) { @Override public void ping() { initSpinner(); } }); Listener.addListener(new Listener(Listener.EREIGNIS_TRAYICON, PanelEinstellungen.class.getSimpleName()) { @Override public void ping() { jCheckBoxTray.setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_USE_TRAY))); } }); jCheckBoxEchtzeit.setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_ECHTZEITSUCHE))); jCheckBoxEchtzeit.addActionListener(ae -> MVConfig.add(MVConfig.Configs.SYSTEM_ECHTZEITSUCHE, Boolean.toString(jCheckBoxEchtzeit.isSelected()))); jCheckBoxTabsTop.setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_TABS_TOP))); jCheckBoxTabsTop.addActionListener(ae -> { MVConfig.add(MVConfig.Configs.SYSTEM_TABS_TOP, Boolean.toString(jCheckBoxTabsTop.isSelected())); Listener.notify(Listener.EREIGNIS_TABS_TOP, PanelEinstellungen.class.getSimpleName()); }); jCheckBoxTabIcon.setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_TABS_ICON))); jCheckBoxTabIcon.addActionListener(ae -> { MVConfig.add(MVConfig.Configs.SYSTEM_TABS_ICON, Boolean.toString(jCheckBoxTabIcon.isSelected())); Listener.notify(Listener.EREIGNIS_TABS_TOP, PanelEinstellungen.class.getSimpleName()); }); if (SystemInfo.isMacOSX()) { jCheckBoxTray.setSelected(false); jCheckBoxTray.setEnabled(false); } else { jCheckBoxTray.setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_USE_TRAY))); jCheckBoxTray.addActionListener(ae -> { MVConfig.add(MVConfig.Configs.SYSTEM_USE_TRAY, Boolean.toString(jCheckBoxTray.isSelected())); daten.getMediathekGui().setTray(); }); } jCheckBoxSuchen.setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_UPDATE_SUCHEN))); jCheckBoxSuchen.addActionListener(ae -> MVConfig.add(MVConfig.Configs.SYSTEM_UPDATE_SUCHEN, Boolean.toString(jCheckBoxSuchen.isSelected()))); jButtonSuchen.addActionListener(new BeobSuchen(false)); jButtonInfos.addActionListener(new BeobSuchen(true)); jButtonRefresh.addActionListener(e -> fillIconList()); fillIconList(); jComboBoxIcons.addItemListener(evt -> { if (evt.getStateChange() == 1) { cbxIconPackagesItemStateChanged(evt); } }); } private void cbxIconPackagesItemStateChanged(java.awt.event.ItemEvent evt) { MVMessageDialog.showMessageDialog(this, "Sie müssen die Applikation neu starten damit die Icons genutzt werden können.", "MediathekView", JOptionPane.WARNING_MESSAGE); String iconName = jComboBoxIcons.getModel().getElementAt(jComboBoxIcons.getSelectedIndex()); if (iconName.equals(ICONSET_STANDARD)) { MVConfig.add(MVConfig.Configs.SYSTEM_ICON_STANDARD, Boolean.TRUE.toString()); MVConfig.add(MVConfig.Configs.SYSTEM_ICON_PFAD, ""); } else { MVConfig.add(MVConfig.Configs.SYSTEM_ICON_STANDARD, Boolean.FALSE.toString()); } try { File[] files = new File(MVFunctionSys.pathProgramIcons()).listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory() && file.getName().equals(iconName)) { MVConfig.add(MVConfig.Configs.SYSTEM_ICON_PFAD, file.getAbsolutePath()); break; } } } } catch (Exception ex) { MVConfig.add(MVConfig.Configs.SYSTEM_ICON_STANDARD, Boolean.TRUE.toString()); MVConfig.add(MVConfig.Configs.SYSTEM_ICON_PFAD, ""); Log.errorLog(829304789, ex); } } private void initSpinner() { if (MVConfig.get(MVConfig.Configs.SYSTEM_ANZ_TAGE_FILMLISTE).equals("")) { MVConfig.add(MVConfig.Configs.SYSTEM_ANZ_TAGE_FILMLISTE, "0"); } String s = MVConfig.get(MVConfig.Configs.SYSTEM_ANZ_TAGE_FILMLISTE); if (s.equals("0")) { s = ALLE; } jSpinnerDays.setValue(s); } private void setupLookAndFeelComboBox() { try { //query all installed LAFs final UIManager.LookAndFeelInfo info[]; info = UIManager.getInstalledLookAndFeels(); LookAndFeel aktLaf = UIManager.getLookAndFeel(); String classNameAktLaf = aktLaf.getClass().getName(); int idx = 0; //fill in the combobox model ArrayList<String> themeList = new ArrayList<>(); // list of "UIManager.LookAndFeelInfo" names for (int i = 0; i < info.length; ++i) { themeList.add(info[i].getName()); // LookAndFeelInfo.getName und LookAndFeel.getName sind beim GTK LF nicht gleich?? if (info[i].getClassName().equals(classNameAktLaf)) { idx = i; } } DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>(themeList.toArray(new String[0])); jComboBoxLookAndFeel.setModel(model); jComboBoxLookAndFeel.setSelectedIndex(idx); ActionListener lst = actionEvent -> { String lafName = jComboBoxLookAndFeel.getModel().getElementAt(jComboBoxLookAndFeel.getSelectedIndex()); String lafClass = ""; //retrieve class name for selected LAF for (UIManager.LookAndFeelInfo i : info) { if (i.getName().equals(lafName)) { lafClass = i.getClassName(); break; } } //and now switch it... try { UIManager.setLookAndFeel(lafClass); SwingUtilities.updateComponentTreeUI(daten.getMediathekGui()); for (Frame f : Frame.getFrames()) { SwingUtilities.updateComponentTreeUI(f); for (Window w : f.getOwnedWindows()) { SwingUtilities.updateComponentTreeUI(w); } } } catch (Exception ex) { ex.printStackTrace(); } MVConfig.add(MVConfig.Configs.SYSTEM_LOOK, lafClass); // }; jComboBoxLookAndFeel.addActionListener(lst); } catch (Exception ex) { ex.printStackTrace(); } } private void fillIconList() { final DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>(); model.addElement(ICONSET_STANDARD); try { File[] files = new File(MVFunctionSys.pathProgramIcons()).listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { model.addElement(file.getName()); } } } } catch (Exception ex) { Log.errorLog(636875409, ex); } jComboBoxIcons.setModel(model); if (!Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_ICON_STANDARD))) { if (!MVConfig.get(MVConfig.Configs.SYSTEM_ICON_PFAD).equals("")) { File f = new File(MVConfig.get(MVConfig.Configs.SYSTEM_ICON_PFAD)); jComboBoxIcons.setSelectedItem(f.getName()); } } } // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { javax.swing.JPanel pnlProgramUpdate = new javax.swing.JPanel(); jCheckBoxSuchen = new javax.swing.JCheckBox(); jButtonSuchen = new javax.swing.JButton(); jButtonInfos = new javax.swing.JButton(); javax.swing.JPanel jPanel1 = new javax.swing.JPanel(); javax.swing.JLabel jLabel2 = new javax.swing.JLabel(); jComboBoxLookAndFeel = new javax.swing.JComboBox<>(); javax.swing.JLabel jLabel1 = new javax.swing.JLabel(); jComboBoxIcons = new javax.swing.JComboBox<>(); jButtonRefresh = new javax.swing.JButton(); javax.swing.JPanel jPanel2 = new javax.swing.JPanel(); jCheckBoxEchtzeit = new javax.swing.JCheckBox(); javax.swing.JLabel jLabel6 = new javax.swing.JLabel(); jSpinnerDays = new javax.swing.JSpinner(); jButtonHelpDays = new javax.swing.JButton(); jButtonLoad = new javax.swing.JButton(); jCheckBoxTray = new javax.swing.JCheckBox(); jCheckBoxTabsTop = new javax.swing.JCheckBox(); jCheckBoxTabIcon = new javax.swing.JCheckBox(); setMinimumSize(getPreferredSize()); pnlProgramUpdate.setBorder(javax.swing.BorderFactory.createTitledBorder("Programmupdate")); jCheckBoxSuchen.setText("einmal am Tag nach einer neuen Programmversion suchen"); jButtonSuchen.setText("Jetzt suchen"); jButtonInfos.setText("Programminfos anzeigen"); javax.swing.GroupLayout pnlProgramUpdateLayout = new javax.swing.GroupLayout(pnlProgramUpdate); pnlProgramUpdate.setLayout(pnlProgramUpdateLayout); pnlProgramUpdateLayout.setHorizontalGroup( pnlProgramUpdateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnlProgramUpdateLayout.createSequentialGroup() .addContainerGap() .addGroup(pnlProgramUpdateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jCheckBoxSuchen) .addGroup(pnlProgramUpdateLayout.createSequentialGroup() .addComponent(jButtonSuchen, javax.swing.GroupLayout.PREFERRED_SIZE, 173, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonInfos))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pnlProgramUpdateLayout.setVerticalGroup( pnlProgramUpdateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnlProgramUpdateLayout.createSequentialGroup() .addComponent(jCheckBoxSuchen) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(pnlProgramUpdateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButtonSuchen) .addComponent(jButtonInfos)) .addContainerGap(20, Short.MAX_VALUE)) ); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("")); jLabel2.setText("Look&Feel:"); jLabel1.setText("Icon-Pack:"); jButtonRefresh.setIcon(new javax.swing.ImageIcon(getClass().getResource("/mediathek/res/muster/button-aktualisieren.png"))); // NOI18N jButtonRefresh.setToolTipText("neue Icons suchen"); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel2) .addComponent(jLabel1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jComboBoxIcons, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jComboBoxLookAndFeel, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonRefresh) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jComboBoxLookAndFeel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jComboBoxIcons, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1)) .addComponent(jButtonRefresh)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("")); jCheckBoxEchtzeit.setText("Echtzeitsuche im Filter"); jLabel6.setText("nur die Filme der letzten Tage laden:"); jSpinnerDays.setModel(new javax.swing.SpinnerListModel(new String[] {"Alles", "1", "2", "10", "15"})); jButtonHelpDays.setIcon(new javax.swing.ImageIcon(getClass().getResource("/mediathek/res/muster/button-help.png"))); // NOI18N jButtonHelpDays.setToolTipText("Hilfe anzeigen"); jButtonLoad.setText("Filmliste jetzt neu laden"); jCheckBoxTray.setText("Programm ins Tray minimieren"); jCheckBoxTabsTop.setText("Tabs oben anzeigen"); jCheckBoxTabIcon.setText("Icons im Tab anzeigen"); jCheckBoxTabIcon.setToolTipText("Im Tab keine Icons anzeigen"); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jCheckBoxEchtzeit, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(177, 177, 177)) .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jCheckBoxTabsTop) .addGap(18, 18, 18) .addComponent(jCheckBoxTabIcon)) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jSpinnerDays, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonHelpDays) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonLoad)) .addComponent(jCheckBoxTray)) .addGap(0, 42, Short.MAX_VALUE)))) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jCheckBoxTabsTop) .addComponent(jCheckBoxTabIcon)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jCheckBoxEchtzeit) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jCheckBoxTray) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(jLabel6) .addComponent(jSpinnerDays, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButtonHelpDays) .addComponent(jButtonLoad)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(pnlProgramUpdate, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(pnlProgramUpdate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(126, Short.MAX_VALUE)) ); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButtonHelpDays; private javax.swing.JButton jButtonInfos; private javax.swing.JButton jButtonLoad; private javax.swing.JButton jButtonRefresh; private javax.swing.JButton jButtonSuchen; private javax.swing.JCheckBox jCheckBoxEchtzeit; private javax.swing.JCheckBox jCheckBoxSuchen; private javax.swing.JCheckBox jCheckBoxTabIcon; private javax.swing.JCheckBox jCheckBoxTabsTop; private javax.swing.JCheckBox jCheckBoxTray; private javax.swing.JComboBox<String> jComboBoxIcons; private javax.swing.JComboBox<String> jComboBoxLookAndFeel; private javax.swing.JSpinner jSpinnerDays; // End of variables declaration//GEN-END:variables private class BeobSpinnerDays implements ChangeListener { @Override public void stateChanged(ChangeEvent arg0) { String s = jSpinnerDays.getModel().getValue().toString(); if (s.equals(ALLE)) { s = "0"; } MVConfig.add(MVConfig.Configs.SYSTEM_ANZ_TAGE_FILMLISTE, s); } } private class BeobSuchen implements ActionListener { private boolean infos = false; public BeobSuchen(boolean iinfos) { infos = iinfos; } @Override public void actionPerformed(ActionEvent e) { new ProgrammUpdateSuchen().checkVersion(!infos /* bei aktuell anzeigen */, infos /* Hinweis */, true /* hinweiseAlleAnzeigen */); } } }