/* * 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.dialog; import mSearch.tool.FilenameUtils; import mediathek.config.Daten; import mediathek.config.Icons; import mediathek.config.MVColor; import mediathek.daten.DatenAbo; import mediathek.file.GetFile; import mediathek.tool.EscBeenden; import mediathek.tool.GuiFunktionen; import mediathek.tool.MVMessageDialog; import javax.swing.*; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.JTextComponent; import java.awt.*; import java.util.ArrayList; @SuppressWarnings("serial") public class DialogEditAbo extends JDialog { private final DatenAbo aktAbo; private JTextField[] textfeldListe; private final JComboBox<String> comboboxPSet = new JComboBox<>(); private final JComboBox<String> comboboxSender = new JComboBox<>(); private final JComboBox<String> comboboxPfad = new JComboBox<>(); private final JCheckBox checkBoxEingeschaltet = new JCheckBox(); private final JRadioButton rbMin = new JRadioButton("Mindestdauer"); private final JRadioButton rbMax = new JRadioButton("Maximaldauer"); private final JSlider sliderDauer = new JSlider(0, 100, 0); private final JLabel labelDauer = new JLabel("0"); private final boolean change; public boolean ok = false; public boolean[] ch = new boolean[DatenAbo.MAX_ELEM]; public DialogEditAbo(final JFrame parent, boolean modal, Daten d, DatenAbo aktA, boolean change) { super(parent, modal); initComponents(); Daten daten = Daten.getInstance(); this.change = change; aktAbo = aktA; ButtonGroup gr = new ButtonGroup(); gr.add(rbMin); gr.add(rbMax); for (boolean b : ch) { b = false; } jScrollPane1.getVerticalScrollBar().setUnitIncrement(16); comboboxPSet.setModel(new javax.swing.DefaultComboBoxModel<>(Daten.listePset.getListeAbo().getObjectDataCombo())); comboboxSender.setModel(new javax.swing.DefaultComboBoxModel<>(GuiFunktionen.addLeerListe(daten.getFilmeLaden().getSenderNamen()))); // Zeilpfad ======================== ArrayList<String> pfade = daten.getListeAbo().getPfade(); if (!pfade.contains(aktAbo.arr[DatenAbo.ABO_ZIELPFAD])) { pfade.add(0, aktAbo.arr[DatenAbo.ABO_ZIELPFAD]); } comboboxPfad.setModel(new javax.swing.DefaultComboBoxModel<>(pfade.toArray(new String[pfade.size()]))); comboboxPfad.setEditable(true); checkPfad(); ((JTextComponent) comboboxPfad.getEditor().getEditorComponent()).setOpaque(true); ((JTextComponent) comboboxPfad.getEditor().getEditorComponent()).getDocument().addDocumentListener(new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { checkPfad(); } @Override public void removeUpdate(DocumentEvent e) { checkPfad(); } @Override public void changedUpdate(DocumentEvent e) { checkPfad(); } }); // ===================== jButtonBeenden.addActionListener(e -> { if (check()) { beenden(); } else { MVMessageDialog.showMessageDialog(parent, "Filter angeben!", "Leeres Abo", JOptionPane.ERROR_MESSAGE); } }); jButtonAbbrechen.addActionListener(e -> beenden()); getRootPane().setDefaultButton(jButtonBeenden); new EscBeenden(this) { @Override public void beenden_() { beenden(); } }; jButtonHelp.setIcon(Icons.ICON_BUTTON_HELP); jButtonHelp.addActionListener(e -> new DialogHilfe(parent, true, new GetFile().getHilfeSuchen(GetFile.PFAD_HILFETEXT_DIALOG_ADD_ABO)).setVisible(true)); if (comboboxPSet.getModel().getSize() == 0) { // dann gibts kein Set zum Aufzeichnen new DialogAboNoSet(parent, d).setVisible(true); } else { setExtra(); this.pack(); } } @Override public void setVisible(boolean vis) { if (comboboxPSet.getModel().getSize() == 0) { // dann gibts kein Set zum Aufzeichnen beenden(); } else { super.setVisible(vis); } } private void checkPfad() { String s = ((JTextComponent) comboboxPfad.getEditor().getEditorComponent()).getText(); if (!s.equals(FilenameUtils.checkDateiname(s, false /*pfad*/))) { comboboxPfad.getEditor().getEditorComponent().setBackground(MVColor.DOWNLOAD_FEHLER.color); } else { comboboxPfad.getEditor().getEditorComponent().setBackground(Color.WHITE); } } private void setExtra() { textfeldListe = new JTextField[DatenAbo.MAX_ELEM]; GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(5, 10, 10, 5); jPanelExtra.setLayout(gridbag); int zeile = 1; if (change) { c.gridx = 2; c.weightx = 1; JLabel label = new JLabel("<html><style type=\"text/css\"> p { text-align: center; }</style><p>bei allen<br />ändern</p></html>"); label.setBorder(new CompoundBorder(BorderFactory.createLineBorder(new java.awt.Color(204, 204, 255), 4, true), new EmptyBorder(5, 5, 5, 5))); gridbag.setConstraints(label, c); jPanelExtra.add(label); c.gridy = 1; } else { zeile = 0; c.gridy = 0; } for (int i = 0; i < DatenAbo.MAX_ELEM; ++i) { c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; addExtraFeld(i, gridbag, c, jPanelExtra); ++zeile; c.gridy = zeile; } } private void addExtraFeld(int i, GridBagLayout gridbag, GridBagConstraints c, JPanel panel) { //Label c.gridx = 0; c.weightx = 0; JLabel label; switch (i) { case DatenAbo.ABO_SENDER: case DatenAbo.ABO_THEMA: case DatenAbo.ABO_TITEL: case DatenAbo.ABO_THEMA_TITEL: case DatenAbo.ABO_IRGENDWO: label = new JLabel(" " + DatenAbo.COLUMN_NAMES[i] + ": "); label.setForeground(Color.BLUE); break; case DatenAbo.ABO_MINDESTDAUER: label = new JLabel("Dauer [min]: "); break; default: label = new JLabel(DatenAbo.COLUMN_NAMES[i] + ": "); break; } gridbag.setConstraints(label, c); panel.add(label); //Textfeld c.gridx = 1; c.weightx = 10; JTextField textfeld; switch (i) { case DatenAbo.ABO_NR: textfeld = new JTextField(); textfeldListe[i] = textfeld; textfeld.setEditable(false); textfeld.setText(aktAbo.nr + ""); gridbag.setConstraints(textfeld, c); panel.add(textfeld); break; case DatenAbo.ABO_PSET: comboboxPSet.setSelectedItem(aktAbo.arr[i]); //falls das Feld leer war, wird es jetzt auf den ersten Eintrag gesetzt aktAbo.arr[DatenAbo.ABO_PSET] = comboboxPSet.getSelectedItem().toString(); // damit immer eine Set eingetragen ist! gridbag.setConstraints(comboboxPSet, c); panel.add(comboboxPSet); break; case DatenAbo.ABO_SENDER: comboboxSender.setSelectedItem(aktAbo.arr[i]); gridbag.setConstraints(comboboxSender, c); panel.add(comboboxSender); break; case DatenAbo.ABO_ZIELPFAD: comboboxPfad.setSelectedItem(aktAbo.arr[i]); gridbag.setConstraints(comboboxPfad, c); panel.add(comboboxPfad); break; case DatenAbo.ABO_MINDESTDAUER: sliderDauer.setValue(aktAbo.mindestdauerMinuten); labelDauer.setText(String.valueOf(aktAbo.mindestdauerMinuten == 0 ? " alles " : aktAbo.mindestdauerMinuten)); sliderDauer.addChangeListener(e -> labelDauer.setText(" " + (sliderDauer.getValue() == 0 ? "alles" : sliderDauer.getValue()) + ' ')); JPanel p = new JPanel(new BorderLayout()); p.add(sliderDauer, BorderLayout.CENTER); p.add(labelDauer, BorderLayout.EAST); gridbag.setConstraints(p, c); panel.add(p); break; case DatenAbo.ABO_EINGESCHALTET: checkBoxEingeschaltet.setSelected(Boolean.parseBoolean(aktAbo.arr[i])); gridbag.setConstraints(checkBoxEingeschaltet, c); panel.add(checkBoxEingeschaltet); break; case DatenAbo.ABO_MIN: rbMin.setSelected(aktAbo.min); rbMax.setSelected(!aktAbo.min); p = new JPanel(new BorderLayout()); p.add(rbMin, BorderLayout.NORTH); p.add(rbMax, BorderLayout.CENTER); gridbag.setConstraints(p, c); panel.add(p); break; default: textfeld = new JTextField(); textfeldListe[i] = textfeld; if (i == DatenAbo.ABO_DOWN_DATUM) { textfeld.setEditable(false); } else if (i == DatenAbo.ABO_NAME) { textfeld.getDocument().addDocumentListener(new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { textfeldListe[DatenAbo.ABO_NAME].setBackground(textfeldListe[DatenAbo.ABO_NAME].getText().isEmpty() ? Color.red : Color.white); jButtonBeenden.setEnabled(!textfeldListe[DatenAbo.ABO_NAME].getText().isEmpty()); } @Override public void removeUpdate(DocumentEvent e) { textfeldListe[DatenAbo.ABO_NAME].setBackground(textfeldListe[DatenAbo.ABO_NAME].getText().isEmpty() ? Color.red : Color.white); jButtonBeenden.setEnabled(!textfeldListe[DatenAbo.ABO_NAME].getText().isEmpty()); } @Override public void changedUpdate(DocumentEvent e) { textfeldListe[DatenAbo.ABO_NAME].setBackground(textfeldListe[DatenAbo.ABO_NAME].getText().isEmpty() ? Color.red : Color.white); jButtonBeenden.setEnabled(!textfeldListe[DatenAbo.ABO_NAME].getText().isEmpty()); } }); } textfeld.setText(aktAbo.arr[i]); gridbag.setConstraints(textfeld, c); panel.add(textfeld); break; } if (change) { //Checkbox c.gridx = 2; c.weightx = 0; JCheckBox jcb; switch (i) { case DatenAbo.ABO_EINGESCHALTET: case DatenAbo.ABO_MIN: case DatenAbo.ABO_MINDESTDAUER: case DatenAbo.ABO_PSET: case DatenAbo.ABO_ZIELPFAD: c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.CENTER; jcb = new JCheckBox(); jcb.setBorder(new EmptyBorder(5, 5, 5, 5)); jcb.setHorizontalTextPosition(JCheckBox.CENTER); jcb.addActionListener(l -> ch[i] = jcb.isSelected()); jcb.setBackground(new Color(204, 204, 255)); gridbag.setConstraints(jcb, c); panel.add(jcb); break; } } } private boolean check() { DatenAbo test = aktAbo.getCopy(); get(test); if (test.isEmpty()) { ok = false; } else { get(aktAbo); ok = true; } return ok; } private void get(DatenAbo abo) { for (int i = 0; i < DatenAbo.MAX_ELEM; ++i) { switch (i) { case (DatenAbo.ABO_ZIELPFAD): abo.arr[DatenAbo.ABO_ZIELPFAD] = comboboxPfad.getSelectedItem().toString(); break; case (DatenAbo.ABO_PSET): abo.arr[DatenAbo.ABO_PSET] = comboboxPSet.getSelectedItem().toString(); break; case (DatenAbo.ABO_SENDER): abo.arr[DatenAbo.ABO_SENDER] = comboboxSender.getSelectedItem().toString(); break; case (DatenAbo.ABO_EINGESCHALTET): abo.arr[DatenAbo.ABO_EINGESCHALTET] = Boolean.toString(checkBoxEingeschaltet.isSelected()); break; case (DatenAbo.ABO_MIN): abo.arr[DatenAbo.ABO_MIN] = Boolean.toString(rbMin.isSelected()); abo.min = rbMin.isSelected(); break; case (DatenAbo.ABO_MINDESTDAUER): abo.setMindestDauerMinuten(sliderDauer.getValue()); break; case (DatenAbo.ABO_NR): case (DatenAbo.ABO_DOWN_DATUM): break; default: abo.arr[i] = textfeldListe[i].getText().trim(); break; } } } private void beenden() { this.dispose(); } // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jPanelExtra = new javax.swing.JPanel(); jButtonAbbrechen = new javax.swing.JButton(); jButtonBeenden = new javax.swing.JButton(); jButtonHelp = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); javax.swing.GroupLayout jPanelExtraLayout = new javax.swing.GroupLayout(jPanelExtra); jPanelExtra.setLayout(jPanelExtraLayout); jPanelExtraLayout.setHorizontalGroup( jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 0, Short.MAX_VALUE) ); jPanelExtraLayout.setVerticalGroup( jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 0, Short.MAX_VALUE) ); jScrollPane1.setViewportView(jPanelExtra); jButtonAbbrechen.setText("Abbrechen"); jButtonBeenden.setText("Ok"); jButtonHelp.setIcon(new javax.swing.ImageIcon(getClass().getResource("/mediathek/res/muster/button-help.png"))); // NOI18N jButtonHelp.setToolTipText("Hilfe anzeigen"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().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(jScrollPane1) .addGroup(layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(jButtonBeenden, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonAbbrechen) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonHelp))) .addContainerGap()) ); layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jButtonAbbrechen, jButtonBeenden}); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButtonBeenden) .addComponent(jButtonAbbrechen) .addComponent(jButtonHelp)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButtonAbbrechen; private javax.swing.JButton jButtonBeenden; private javax.swing.JButton jButtonHelp; private javax.swing.JPanel jPanelExtra; private javax.swing.JScrollPane jScrollPane1; // End of variables declaration//GEN-END:variables }