import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
-import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListModel;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
+import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
-import javax.swing.JList;
import javax.swing.JPanel;
-import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;
import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.lang.StringUtils;
-import saccubus.FFmpegSelectedItem;
-import saccubus.OptionComboBoxModel;
import yukihane.inqubus.Config;
/**
fldProxyHost = new JTextField();
fldProxyPort = new JTextField();
final JPanel pnlFile = new JPanel();
- final JPanel pnlFileVideo = new JPanel();
- final JLabel lblVideoDir = new JLabel();
- final JLabel lblVideoFileNamepattern = new JLabel();
- fldVideoDir = new JTextField();
- fldVideoFileNamePattern = new JTextField();
- btnVideoDir = new JButton();
- cbVideoLocal = new JCheckBox();
- final JPanel pnlFileComment = new JPanel();
- final JLabel lblCommentDir = new JLabel();
- final JLabel lblCommentFileNamePattern = new JLabel();
- fldCommentDir = new JTextField();
- fldCommentFileNamePattern = new JTextField();
- btnCommentDir = new JButton();
- cbCommentLocal = new JCheckBox();
final JPanel pnlFileOutput = new JPanel();
final JLabel lblOutputDir = new JLabel();
final JLabel lblOutputFileNamePattern = new JLabel();
fldOutputDir = new JTextField();
fldOutputFileNamePattern = new JTextField();
- btnOutputDir = new JButton();
cbOutputEnable = new JCheckBox();
cbOutputCommentOverlay = new JCheckBox();
cbOutputDisplayProgress = new JCheckBox();
btnFfmpegDllPath = new JButton();
final JPanel pnlNgSetting = new JPanel();
final JPanel pnlSearch = new JPanel();
- final JPanel pnlSearchVideo = new JPanel();
- final JScrollPane srcSearchVideo = new JScrollPane();
- lstSearchVideo = new JList<>();
- btnSearchVideoAdd = new JButton();
- btnSearchVideoDel = new JButton();
- final JPanel pnlSearchComment = new JPanel();
- final JScrollPane srcSearchComment = new JScrollPane();
- lstSearchComment = new JList<>();
- btnSearchCommentAdd = new JButton();
- btnSearchCommentDel = new JButton();
final JPanel pnlSearchCache = new JPanel();
final JLabel lblSearchCache = new JLabel();
fldSearchCache = new JTextField();
pnlFileVideo.setBorder(BorderFactory.createTitledBorder("動画"));
- lblVideoDir.setText("保存フォルダ");
-
- lblVideoFileNamepattern.setText("ファイル名規則");
-
- btnVideoDir.setText("...");
-
- cbVideoLocal.setText("local");
-
- GroupLayout gl_pnlFileVideo = new GroupLayout(pnlFileVideo);
- pnlFileVideo.setLayout(gl_pnlFileVideo);
- gl_pnlFileVideo.setHorizontalGroup(
- gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFileVideo.createSequentialGroup()
- .addContainerGap()
- .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(lblVideoFileNamepattern)
- .addComponent(lblVideoDir))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(gl_pnlFileVideo.createSequentialGroup()
- .addComponent(fldVideoDir, GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(btnVideoDir))
- .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFileVideo.createSequentialGroup()
- .addComponent(fldVideoFileNamePattern, GroupLayout.PREFERRED_SIZE, 165, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(ComponentPlacement.RELATED, 94, Short.MAX_VALUE)
- .addComponent(cbVideoLocal)))
- .addContainerGap())
- );
- gl_pnlFileVideo.setVerticalGroup(
- gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(gl_pnlFileVideo.createSequentialGroup()
- .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(lblVideoDir)
- .addComponent(fldVideoDir, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(btnVideoDir))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(lblVideoFileNamepattern)
- .addComponent(fldVideoFileNamePattern, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(cbVideoLocal))
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- );
-
pnlFileComment.setBorder(BorderFactory.createTitledBorder("コメント"));
- lblCommentDir.setText("保存フォルダ");
-
- lblCommentFileNamePattern.setText("ファイル名規則");
-
- btnCommentDir.setText("...");
-
- cbCommentLocal.setText("local");
-
- GroupLayout gl_pnlFileComment = new GroupLayout(pnlFileComment);
- pnlFileComment.setLayout(gl_pnlFileComment);
- gl_pnlFileComment.setHorizontalGroup(
- gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(gl_pnlFileComment.createSequentialGroup()
- .addContainerGap()
- .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(lblCommentFileNamePattern)
- .addComponent(lblCommentDir))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(gl_pnlFileComment.createSequentialGroup()
- .addComponent(fldCommentFileNamePattern, GroupLayout.PREFERRED_SIZE, 166, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(ComponentPlacement.RELATED, 93, Short.MAX_VALUE)
- .addComponent(cbCommentLocal))
- .addGroup(gl_pnlFileComment.createSequentialGroup()
- .addComponent(fldCommentDir, GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(btnCommentDir)))
- .addContainerGap())
- );
- gl_pnlFileComment.setVerticalGroup(
- gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(gl_pnlFileComment.createSequentialGroup()
- .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(lblCommentDir)
- .addComponent(fldCommentDir, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(btnCommentDir))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(lblCommentFileNamePattern)
- .addComponent(fldCommentFileNamePattern, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(cbCommentLocal))
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- );
-
pnlFileOutput.setBorder(BorderFactory.createTitledBorder("変換動画"));
lblOutputDir.setText("保存フォルダ");
lblOutputFileNamePattern.setText("ファイル名規則");
- btnOutputDir.setText("...");
+ btnOutputDir.addActionListener(
+ new FileChooseAction(ConfigDialog.this, JFileChooser.DIRECTORIES_ONLY, fldOutputDir));
cbOutputEnable.setText("変換");
tabbedPane.addTab("NG設定", pnlNgSetting);
pnlSearchVideo.setBorder(BorderFactory.createTitledBorder("動画検索対象フォルダ"));
-
- lstSearchVideo.setModel(mdlSearchVideo);
- srcSearchVideo.setViewportView(lstSearchVideo);
-
- btnSearchVideoAdd.setText("追加...");
-
- btnSearchVideoDel.setText("削除");
-
- GroupLayout gl_pnlSearchVideo = new GroupLayout(pnlSearchVideo);
- pnlSearchVideo.setLayout(gl_pnlSearchVideo);
- gl_pnlSearchVideo.setHorizontalGroup(
- gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(srcSearchVideo, GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
- .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlSearchVideo.createSequentialGroup()
- .addContainerGap(269, Short.MAX_VALUE)
- .addComponent(btnSearchVideoAdd)
- .addGap(18, 18, 18)
- .addComponent(btnSearchVideoDel)
- .addContainerGap())
- );
- gl_pnlSearchVideo.setVerticalGroup(
- gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(gl_pnlSearchVideo.createSequentialGroup()
- .addComponent(srcSearchVideo, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(btnSearchVideoDel)
- .addComponent(btnSearchVideoAdd))
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- );
-
pnlSearchComment.setBorder(BorderFactory.createTitledBorder("コメント検索対象フォルダ"));
- lstSearchComment.setModel(mdlSearchComment);
- srcSearchComment.setViewportView(lstSearchComment);
-
- btnSearchCommentAdd.setText("追加...");
-
- btnSearchCommentDel.setText("削除");
-
- GroupLayout gl_pnlSearchComment = new GroupLayout(pnlSearchComment);
- pnlSearchComment.setLayout(gl_pnlSearchComment);
- gl_pnlSearchComment.setHorizontalGroup(
- gl_pnlSearchComment.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(srcSearchComment, GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
- .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlSearchComment.createSequentialGroup()
- .addContainerGap(269, Short.MAX_VALUE)
- .addComponent(btnSearchCommentAdd)
- .addGap(18, 18, 18)
- .addComponent(btnSearchCommentDel)
- .addContainerGap())
- );
- gl_pnlSearchComment.setVerticalGroup(
- gl_pnlSearchComment.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(gl_pnlSearchComment.createSequentialGroup()
- .addComponent(srcSearchComment, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_pnlSearchComment.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(btnSearchCommentDel)
- .addComponent(btnSearchCommentAdd))
- .addContainerGap(16, Short.MAX_VALUE))
- );
-
pnlSearchCache.setBorder(BorderFactory.createEtchedBorder());
lblSearchCache.setText("キャッシュ更新(秒)");
}
});
final JButton btnCancel = new JButton("Cancel");
+ btnCancel.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ dispose();
+ }
+ });
pnlButton.add(btnOk);
pnlButton.add(btnCancel);
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
- //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
break;
}
}
- } catch (ClassNotFoundException ex) {
- java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
- } catch (InstantiationException ex) {
- java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
- } catch (IllegalAccessException ex) {
- java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
- } catch (UnsupportedLookAndFeelException ex) {
+ } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
- //</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
private final JTextField fldProxyPort;
// ファイル
// ファイル - 動画
- private final JTextField fldVideoDir;
- private final JButton btnVideoDir;
- private final JTextField fldVideoFileNamePattern;
- private final JCheckBox cbVideoLocal;
+ private final DownloadLocationPanel pnlFileVideo = new DownloadLocationPanel();
// ファイル - コメント
- private final JTextField fldCommentDir;
- private final JButton btnCommentDir;
- private final JTextField fldCommentFileNamePattern;
- private final JCheckBox cbCommentLocal;
+ private final DownloadLocationPanel pnlFileComment = new DownloadLocationPanel();
// ファイル - 変換動画
private final JTextField fldOutputDir;
private final JTextField fldOutputFileNamePattern;
- private final JButton btnOutputDir;
+ private final JButton btnOutputDir = new JButton("...");
private final JCheckBox cbOutputEnable;
private final JCheckBox cbOutputCommentOverlay;
private final JCheckBox cbOutputDisplayProgress;
private final NgRegisterPanel pnlNgId = new NgRegisterPanel();
// 検索
// 検索 - 動画検索対象フォルダ
- private final JList<String> lstSearchVideo;
- private final DefaultListModel<String> mdlSearchVideo = new DefaultListModel<>();
- private final JButton btnSearchVideoAdd;
- private final JButton btnSearchVideoDel;
+ private final DirectoryRegisterPanel pnlSearchVideo = new DirectoryRegisterPanel();
// 検索 - コメント検索対象フォルダ
- private final JList<String> lstSearchComment;
- private final DefaultListModel<String> mdlSearchComment = new DefaultListModel<>();
- private final JButton btnSearchCommentAdd;
- private final JButton btnSearchCommentDel;
+ private final DirectoryRegisterPanel pnlSearchComment = new DirectoryRegisterPanel();
// 検索 - キャッシュ更新(秒)
private final JTextField fldSearchCache;
// システム
/*
* ファイル - 動画
*/
- fldVideoDir.setText(p.getVideoDir());
- fldVideoFileNamePattern.setText(p.getVideoFileNamePattern());
- cbVideoLocal.setSelected(p.getVideoUseLocal());
+ pnlFileVideo.fldDir.setText(p.getVideoDir());
+ pnlFileVideo.fldFileNamePattern.setText(p.getVideoFileNamePattern());
+ pnlFileVideo.cbLocal.setSelected(p.getVideoUseLocal());
/*
* ファイル - コメント
*/
- fldCommentDir.setText(p.getCommentDir());
- fldCommentFileNamePattern.setText(p.getCommentFileNamePattern());
- cbCommentLocal.setSelected(p.getCommentUseLocal());
+ pnlFileComment.fldDir.setText(p.getCommentDir());
+ pnlFileComment.fldFileNamePattern.setText(p.getCommentFileNamePattern());
+ pnlFileComment.cbLocal.setSelected(p.getCommentUseLocal());
/*
* ファイル - 変換動画
pnlNgId.init(ngIds);
/*
+ * 検索
+ */
+ pnlSearchVideo.init(p.getSearchVideoDirs());
+ pnlSearchComment.init(p.getSearchCommentDirs());
+
+ /*
* システム
*/
fldSystemThreadDownload.setText(Integer.toString(p.getSystemDownloadThread()));
/*
* ファイル - 動画
*/
- p.setVideoDir(fldVideoDir.getText());
- p.setVideoFileNamePattern(fldVideoFileNamePattern.getText());
- p.setVideoUseLocal(cbVideoLocal.isSelected());
+ p.setVideoDir(pnlFileVideo.fldDir.getText());
+ p.setVideoFileNamePattern(pnlFileVideo.fldFileNamePattern.getText());
+ p.setVideoUseLocal(pnlFileVideo.cbLocal.isSelected());
/*
* ファイル - コメント
*/
- p.setCommentDir(fldCommentDir.getText());
- p.setCommentFileNamePattern(fldCommentFileNamePattern.getText());
- p.setCommentUseLocal(cbCommentLocal.isSelected());
+ p.setCommentDir(pnlFileComment.fldDir.getText());
+ p.setCommentFileNamePattern(pnlFileComment.fldFileNamePattern.getText());
+ p.setCommentUseLocal(pnlFileComment.cbLocal.isSelected());
/*
* ファイル - 変換動画
p.setNgIds(pnlNgId.getAllElements());
/*
+ * 検索
+ */
+ p.setSearchVideoDirs(pnlSearchVideo.getAllElements());
+ p.setSearchCommentDirs(pnlSearchComment.getAllElements());
+
+ /*
* システム
*/
p.setSystemDownloadThread(Integer.parseInt(fldSystemThreadDownload.getText()));
}
}
}
+
+class DownloadLocationPanel extends JPanel {
+ final JTextField fldDir = new JTextField();
+ final JTextField fldFileNamePattern = new JTextField();
+ final JCheckBox cbLocal = new JCheckBox("local");
+
+ DownloadLocationPanel(){
+ super();
+
+ final JLabel lblVideoDir = new JLabel("保存フォルダ");
+ final JLabel lblVideoFileNamepattern = new JLabel("ファイル名規則");
+
+ final JButton btnDir = new JButton("...");
+ btnDir.addActionListener(
+ new FileChooseAction(DownloadLocationPanel.this, JFileChooser.DIRECTORIES_ONLY, fldDir));
+
+ final GroupLayout gl = new GroupLayout(this);
+ setLayout(gl);
+ gl.setHorizontalGroup(
+ gl.createParallelGroup(GroupLayout.Alignment.LEADING)
+ .addGroup(GroupLayout.Alignment.TRAILING, gl.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(gl.createParallelGroup(GroupLayout.Alignment.LEADING)
+ .addComponent(lblVideoFileNamepattern)
+ .addComponent(lblVideoDir))
+ .addPreferredGap(ComponentPlacement.RELATED)
+ .addGroup(gl.createParallelGroup(GroupLayout.Alignment.LEADING)
+ .addGroup(gl.createSequentialGroup()
+ .addComponent(fldDir, GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
+ .addPreferredGap(ComponentPlacement.RELATED)
+ .addComponent(btnDir))
+ .addGroup(GroupLayout.Alignment.TRAILING, gl.createSequentialGroup()
+ .addComponent(fldFileNamePattern, GroupLayout.PREFERRED_SIZE, 165, GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(ComponentPlacement.RELATED, 94, Short.MAX_VALUE)
+ .addComponent(cbLocal)))
+ .addContainerGap())
+ );
+ gl.setVerticalGroup(
+ gl.createParallelGroup(GroupLayout.Alignment.LEADING)
+ .addGroup(gl.createSequentialGroup()
+ .addGroup(gl.createParallelGroup(GroupLayout.Alignment.BASELINE)
+ .addComponent(lblVideoDir)
+ .addComponent(fldDir, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+ .addComponent(btnDir))
+ .addPreferredGap(ComponentPlacement.RELATED)
+ .addGroup(gl.createParallelGroup(GroupLayout.Alignment.BASELINE)
+ .addComponent(lblVideoFileNamepattern)
+ .addComponent(fldFileNamePattern, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+ .addComponent(cbLocal))
+ .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ );
+
+ }
+}