/*
* 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 com.jidesoft.utils.SystemInfo;
import mSearch.tool.FilenameUtils;
import mSearch.tool.Log;
import mediathek.config.Icons;
import mediathek.config.MVColor;
import mediathek.config.MVConfig;
import mediathek.daten.DatenPset;
import mediathek.tool.EscBeenden;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.JTextComponent;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
@SuppressWarnings("serial")
public class DialogAddMoreDownload extends JDialog {
public boolean addAll = false;
public boolean cancel = false;
public boolean info;
public boolean subtitle;
private JFrame parent = null;
private final DatenPset pSet;
private String orgPfad = "";
public DialogAddMoreDownload(JFrame parent, DatenPset pSet) {
super(parent, true);
this.parent = parent;
this.pSet = pSet;
initComponents();
setTitle("Alle Downloads starten");
chkSubtitle.setSelected(Boolean.parseBoolean(pSet.arr[DatenPset.PROGRAMMSET_SUBTITLE]));
subtitle = chkSubtitle.isSelected();
chkSubtitle.addActionListener(l -> subtitle = chkSubtitle.isSelected());
chkInfo.setSelected(Boolean.parseBoolean(pSet.arr[DatenPset.PROGRAMMSET_INFODATEI]));
info = chkInfo.isSelected();
chkInfo.addActionListener(l -> info = chkInfo.isSelected());
chkStart.setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_DIALOG_DOWNLOAD_D_STARTEN)));
chkStart.addActionListener(e -> MVConfig.add(MVConfig.Configs.SYSTEM_DIALOG_DOWNLOAD_D_STARTEN, String.valueOf(chkStart.isSelected())));
jCheckBoxPfadSpeichern.setSelected(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_DIALOG_DOWNLOAD__LETZTEN_PFAD_ANZEIGEN)));
jCheckBoxPfadSpeichern.addActionListener(e -> MVConfig.add(MVConfig.Configs.SYSTEM_DIALOG_DOWNLOAD__LETZTEN_PFAD_ANZEIGEN, Boolean.toString(jCheckBoxPfadSpeichern.isSelected())));
btnChange.addActionListener(l -> beenden());
btnOk.addActionListener(e -> {
addAll = true;
beenden();
});
btnCancel.addActionListener(l -> {
cancel = true;
beenden();
});
jButtonPath.setIcon(Icons.ICON_BUTTON_FILE_OPEN);
jButtonDelPath.setIcon(Icons.ICON_BUTTON_DEL);
jButtonPath.addActionListener(new ZielBeobachter());
jButtonDelPath.addActionListener(e -> {
MVConfig.add(MVConfig.Configs.SYSTEM_DIALOG_DOWNLOAD__PFADE_ZUM_SPEICHERN, "");
jComboBoxPath.setModel(new DefaultComboBoxModel<>(new String[]{pSet.getZielPfad()}));
});
DialogAddDownload.setModelPfad(pSet.getZielPfad(), jComboBoxPath);
orgPfad = pSet.getZielPfad();
((JTextComponent) jComboBoxPath.getEditor().getEditorComponent()).setOpaque(true);
((JTextComponent) jComboBoxPath.getEditor().getEditorComponent()).getDocument().addDocumentListener(new 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() {
String s = ((JTextComponent) jComboBoxPath.getEditor().getEditorComponent()).getText();
if (!s.equals(FilenameUtils.checkDateiname(s, true /*pfad*/))) {
jComboBoxPath.getEditor().getEditorComponent().setBackground(MVColor.DOWNLOAD_FEHLER.color);
} else {
jComboBoxPath.getEditor().getEditorComponent().setBackground(Color.WHITE);
}
}
});
new EscBeenden(this) {
@Override
public void beenden_() {
beenden();
}
};
this.pack();
}
public String getPath() {
String path = jComboBoxPath.getModel().getSelectedItem().toString();
if (path.isEmpty()) {
path = pSet.getZielPfad();
}
return path;
}
private void beenden() {
DialogAddDownload.saveComboPfad(jComboBoxPath, orgPfad);
this.dispose();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
javax.swing.JPanel jPanelExtra = new javax.swing.JPanel();
javax.swing.JLabel jLabel1 = new javax.swing.JLabel();
chkInfo = new javax.swing.JCheckBox();
chkSubtitle = new javax.swing.JCheckBox();
jComboBoxPath = new javax.swing.JComboBox<>();
jButtonDelPath = new javax.swing.JButton();
jButtonPath = new javax.swing.JButton();
jCheckBoxPfadSpeichern = new javax.swing.JCheckBox();
btnOk = new javax.swing.JButton();
btnChange = new javax.swing.JButton();
chkStart = new javax.swing.JCheckBox();
btnCancel = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jPanelExtra.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jLabel1.setText("Speicherpfad:");
chkInfo.setText("Infodatei anlegen: \"Filmname.txt\"");
chkSubtitle.setText("Untertitel speichern: \"Filmname.xxx\"");
jComboBoxPath.setEditable(true);
jComboBoxPath.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
jButtonDelPath.setIcon(new javax.swing.ImageIcon(getClass().getResource("/mediathek/res/muster/button-del.png"))); // NOI18N
jButtonPath.setIcon(new javax.swing.ImageIcon(getClass().getResource("/mediathek/res/muster/button-file-open.png"))); // NOI18N
jCheckBoxPfadSpeichern.setText("Zielpfad speichern");
javax.swing.GroupLayout jPanelExtraLayout = new javax.swing.GroupLayout(jPanelExtra);
jPanelExtra.setLayout(jPanelExtraLayout);
jPanelExtraLayout.setHorizontalGroup(
jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelExtraLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelExtraLayout.createSequentialGroup()
.addComponent(chkSubtitle)
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelExtraLayout.createSequentialGroup()
.addGroup(jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(jPanelExtraLayout.createSequentialGroup()
.addComponent(chkInfo)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jCheckBoxPfadSpeichern))
.addGroup(jPanelExtraLayout.createSequentialGroup()
.addComponent(jComboBoxPath, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonPath)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonDelPath)))
.addContainerGap())))
);
jPanelExtraLayout.setVerticalGroup(
jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelExtraLayout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jComboBoxPath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButtonDelPath)
.addComponent(jButtonPath))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanelExtraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(chkInfo)
.addComponent(jCheckBoxPfadSpeichern))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(chkSubtitle)
.addContainerGap(49, Short.MAX_VALUE))
);
btnOk.setText("OK");
btnChange.setText("Ändern");
chkStart.setText("Download sofort starten");
btnCancel.setText("Abbrechen");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanelExtra, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(chkStart)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 104, Short.MAX_VALUE)
.addComponent(btnChange)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnOk)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnCancel)))
.addContainerGap())
);
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btnCancel, btnChange, btnOk});
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanelExtra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnOk)
.addComponent(btnChange)
.addComponent(chkStart)
.addComponent(btnCancel))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnCancel;
private javax.swing.JButton btnChange;
private javax.swing.JButton btnOk;
private javax.swing.JCheckBox chkInfo;
private javax.swing.JCheckBox chkStart;
private javax.swing.JCheckBox chkSubtitle;
private javax.swing.JButton jButtonDelPath;
private javax.swing.JButton jButtonPath;
private javax.swing.JCheckBox jCheckBoxPfadSpeichern;
private javax.swing.JComboBox<String> jComboBoxPath;
// End of variables declaration//GEN-END:variables
private class ZielBeobachter implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//we can use native directory chooser on Mac...
if (SystemInfo.isMacOSX()) {
//we want to select a directory only, so temporarily change properties
System.setProperty("apple.awt.fileDialogForDirectories", "true");
FileDialog chooser = new FileDialog(parent, "Film speichern");
chooser.setVisible(true);
if (chooser.getFile() != null) {
//A directory was selected, that means Cancel was not pressed
try {
final String path = chooser.getDirectory() + chooser.getFile();
jComboBoxPath.addItem(path);
jComboBoxPath.setSelectedItem(path);
} catch (Exception ex) {
Log.errorLog(356871087, ex);
}
}
System.setProperty("apple.awt.fileDialogForDirectories", "false");
} else {
//use the cross-platform swing chooser
int returnVal;
JFileChooser chooser = new JFileChooser();
if (!jComboBoxPath.getSelectedItem().toString().equals("")) {
chooser.setCurrentDirectory(new File(jComboBoxPath.getSelectedItem().toString()));
}
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
returnVal = chooser.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
try {
final String absolutePath = chooser.getSelectedFile().getAbsolutePath();
jComboBoxPath.addItem(absolutePath);
jComboBoxPath.setSelectedItem(absolutePath);
} catch (Exception ex) {
Log.errorLog(356871087, ex);
}
}
}
}
}
}