*/
package yukihane.inqubus.gui;
-import java.util.Arrays;
+import static javax.swing.GroupLayout.DEFAULT_SIZE;
+import static javax.swing.GroupLayout.PREFERRED_SIZE;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+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.ButtonGroup;
+import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.GroupLayout;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;
+import org.apache.commons.configuration.ConfigurationException;
import yukihane.inqubus.Config;
/**
*/
public class ConfigDialog extends JDialog {
private static final long serialVersionUID = 1L;
+ private static final Logger logger = Logger.getLogger(ConfigDialog.class.getName());
/** Creates new form Properties */
public ConfigDialog() {
final JLabel lblFontIndex = new JLabel();
final JLabel lblFontShadow = new JLabel();
fldFontIndex = new JTextField();
- fldFontShadow = new JTextField();
final JPanel pnlFfmpeg = new JPanel();
final JPanel jPanel10 = new JPanel();
final JLabel lblFfmpegPath = new JLabel();
lblVideoDir.setText("保存フォルダ");
- lblVideoFileNamepattern.setText("ファイル名パターン");
+ lblVideoFileNamepattern.setText("ファイル名規則");
btnVideoDir.setText("...");
lblCommentDir.setText("保存フォルダ");
- lblCommentFileNamePattern.setText("ファイル名パターン");
+ lblCommentFileNamePattern.setText("ファイル名規則");
btnCommentDir.setText("...");
lblOutputDir.setText("保存フォルダ");
- lblOutputFileNamePattern.setText("ファイル名パターン");
+ lblOutputFileNamePattern.setText("ファイル名規則");
btnOutputDir.setText("...");
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
+ final JPanel pnlFileProhibit = new JPanel();
+ pnlFileProhibit.setBorder(BorderFactory.createTitledBorder("禁則文字"));
+ final JLabel lblReplaceFrom = new JLabel("置換対象文字");
+ final JLabel lblReplaceTo = new JLabel("置換後文字");
+
+ final GroupLayout glProhibit = new GroupLayout(pnlFileProhibit);
+ glProhibit.setAutoCreateContainerGaps(true);
+ glProhibit.setAutoCreateGaps(true);
+ pnlFileProhibit.setLayout(glProhibit);
+
+ glProhibit.setHorizontalGroup(glProhibit.createSequentialGroup()
+ .addGroup(glProhibit.createParallelGroup()
+ .addComponent(lblReplaceFrom)
+ .addComponent(lblReplaceTo)
+ )
+ .addGroup(glProhibit.createParallelGroup()
+ .addComponent(fldReplaceFrom)
+ .addComponent(fldReplaceTo)
+ )
+ );
+
+ glProhibit.setVerticalGroup(glProhibit.createSequentialGroup()
+ .addGroup(glProhibit.createParallelGroup(Alignment.BASELINE)
+ .addComponent(lblReplaceFrom)
+ .addComponent(fldReplaceFrom)
+ )
+ .addGroup(glProhibit.createParallelGroup(Alignment.BASELINE)
+ .addComponent(lblReplaceTo)
+ .addComponent(fldReplaceTo)
+ )
+ );
+
GroupLayout gl_pnlFile = new GroupLayout(pnlFile);
pnlFile.setLayout(gl_pnlFile);
gl_pnlFile.setHorizontalGroup(
.addGroup(gl_pnlFile.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addComponent(pnlFileOutput, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(pnlFileVideo, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(pnlFileComment, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addComponent(pnlFileComment, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(pnlFileProhibit, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ )
.addContainerGap())
);
gl_pnlFile.setVerticalGroup(
.addComponent(pnlFileComment, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(pnlFileOutput, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(ComponentPlacement.RELATED)
+ .addComponent(pnlFileProhibit, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
lblFontIndex.setText("フォント番号");
lblFontShadow.setText("影の種類");
+ final ComboBoxModel<String> cbmFontShadow
+ = new DefaultComboBoxModel<>(new String[]{"0:なし", "1:ニコニコ動画風", "2:右下", "3:囲い込み"});
+ cmbFontShadow.setModel(cbmFontShadow);
GroupLayout gl_pnlCommentAdvanced = new GroupLayout(pnlCommentAdvanced);
pnlCommentAdvanced.setLayout(gl_pnlCommentAdvanced);
.addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(fldFontPath, GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE)
.addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.TRAILING, false)
- .addComponent(fldFontShadow, GroupLayout.Alignment.LEADING)
+ .addComponent(cmbFontShadow, GroupLayout.Alignment.LEADING)
.addComponent(fldFontIndex, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 48, Short.MAX_VALUE)))
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnFontPath))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblFontShadow)
- .addComponent(fldFontShadow, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
+ .addComponent(cmbFontShadow, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(cbFontSizeArrangeDisable)
.addPreferredGap(ComponentPlacement.RELATED)
final JPanel pnlButton = new JPanel();
final JButton btnOk = new JButton("OK");
+ btnOk.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ saveConfig();
+ dispose();
+ }
+ });
final JButton btnCancel = new JButton("Cancel");
pnlButton.add(btnOk);
pnlButton.add(btnCancel);
.addComponent(pnlButton)
);
layout.setVerticalGroup(
-// layout.createParallelGroup(GroupLayout.Alignment.LEADING)
-// .addGroup(layout.createSequentialGroup()
-// .addComponent(jTabbedPane1, GroupLayout.DEFAULT_SIZE, 451, GroupLayout.PREFERRED_SIZE)
-// .addContainerGap(23, Short.MAX_VALUE))
layout.createSequentialGroup()
.addComponent(tabbedPane,GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(pnlButton)
);
+ final JLabel lblSystemThreadDownload = new JLabel("ダウンロードスレッド数");
+ final JLabel lblSystemWaitDownload = new JLabel("ダウンロード開始最小間隔(秒)");
+ final JLabel lblSystemThreadConvert = new JLabel("変換スレッド数");
+ final JLabel lblSystemTempDir = new JLabel("作業フォルダ");
+
+ final JPanel pnlSystemGeneral = new JPanel();
+ pnlSystemGeneral.setBorder(BorderFactory.createTitledBorder("システム"));
+ final GroupLayout glSystemGenegal = new GroupLayout(pnlSystemGeneral);
+ glSystemGenegal.setAutoCreateGaps(true);
+ glSystemGenegal.setAutoCreateContainerGaps(true);
+ pnlSystemGeneral.setLayout(glSystemGenegal);
+
+ glSystemGenegal.setHorizontalGroup(glSystemGenegal.createParallelGroup()
+ .addGroup(glSystemGenegal.createSequentialGroup()
+ .addGroup(glSystemGenegal.createParallelGroup()
+ .addComponent(lblSystemThreadDownload)
+ .addComponent(lblSystemWaitDownload)
+ .addComponent(lblSystemThreadConvert))
+ .addGroup(glSystemGenegal.createParallelGroup()
+ .addComponent(fldSystemThreadDownload, PREFERRED_SIZE, 40, PREFERRED_SIZE)
+ .addComponent(fldSystemWaitDownload, PREFERRED_SIZE, 40, PREFERRED_SIZE)
+ .addComponent(fldSystemThreadConvert, PREFERRED_SIZE, 40, PREFERRED_SIZE)
+ )
+ )
+ .addGroup(glSystemGenegal.createSequentialGroup()
+ .addComponent(lblSystemTempDir)
+ .addComponent(fldSystemTempDir, DEFAULT_SIZE, 400, Short.MAX_VALUE)
+ )
+ );
+
+ glSystemGenegal.setVerticalGroup(glSystemGenegal.createSequentialGroup()
+ .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
+ .addComponent(lblSystemThreadDownload)
+ .addComponent(fldSystemThreadDownload, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE))
+ .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
+ .addComponent(lblSystemWaitDownload)
+ .addComponent(fldSystemWaitDownload, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE))
+ .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
+ .addComponent(lblSystemThreadConvert)
+ .addComponent(fldSystemThreadConvert, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE))
+ .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
+ .addComponent(lblSystemTempDir)
+ .addComponent(fldSystemTempDir, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE)));
+
+ final JPanel pnlSystem = new JPanel();
+ pnlSystem.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
+ final GroupLayout glSystem = new GroupLayout(pnlSystem);
+ glSystem.setAutoCreateGaps(true);
+ glSystem.setAutoCreateContainerGaps(true);
+ pnlSystem.setLayout(glSystem);
+
+ glSystem.setHorizontalGroup(glSystem.createParallelGroup()
+ .addComponent(pnlSystemGeneral));
+
+ glSystem.setVerticalGroup(glSystem.createSequentialGroup()
+ .addComponent(pnlSystemGeneral));
+
+ tabbedPane.add("システム", pnlSystem);
+
pack();
- setResizable(false); loadConfig();
+ setResizable(false);
+ loadConfig();
}
/**
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
- private final JButton btnVideoDir;
- private final JButton btnNgWordDel;
- private final JButton btnNgIdAdd;
- private final JButton btnNgIdDel;
- private final JButton btnSearchCommentAdd;
- private final JButton btnSearchCommentDel;
- private final JButton btnCommentDir;
- private final JButton btnOutputDir;
- private final JButton btnFfmpegPath;
- private final JButton btnFfmpegDllPath;
- private final JButton btnFontPath;
- private final JButton btnSearchVideoAdd;
- private final JButton btnSearchVideoDel;
- private final JButton btnNgWordAdd;
+
+ // ネットワーク
+ // ネットワーク - アカウント
+ private final JTextField fldMail;
+ private final JTextField fldPassword;
+ // ネットワーク - プロキシ
private final JCheckBox cbProxyUse;
- private final JCheckBox cbCommentDisplaySizeDefault;
- private final JCheckBox cbOutputDisplayProgress;
- private final JCheckBox cbFontSizeArrangeDisable;
- private final JCheckBox cbCommentOpaque;
+ private final JTextField fldProxyHost;
+ private final JTextField fldProxyPort;
+ // ファイル
+ // ファイル - 動画
+ private final JTextField fldVideoDir;
+ private final JButton btnVideoDir;
+ private final JTextField fldVideoFileNamePattern;
private final JCheckBox cbVideoLocal;
+ // ファイル - コメント
+ private final JTextField fldCommentDir;
+ private final JButton btnCommentDir;
+ private final JTextField fldCommentFileNamePattern;
private final JCheckBox cbCommentLocal;
+ // ファイル - 変換動画
+ private final JTextField fldOutputDir;
+ private final JTextField fldOutputFileNamePattern;
+ private final JButton btnOutputDir;
private final JCheckBox cbOutputEnable;
- private final JCheckBox cbCommentSizeAuto;
- private final JCheckBox cbCommentMinSizeAuto;
private final JCheckBox cbOutputCommentOverlay;
- private final JCheckBox cbFfmpegOptionResize;
- private final JCheckBox cbFfmpegOptionKeepAspect;
- private final JComboBox cmbFfmpegOptionFile;
- private final JList<String> lstSearchVideo;
- private final DefaultListModel<String> mdlSearchVideo = new DefaultListModel<>();
- private final JList<String> lstSearchComment;
- private final DefaultListModel<String> mdlSearchComment = new DefaultListModel<>();
- private final JList<String> lstNgWord;
- private final DefaultListModel<String> mdlNgWord = new DefaultListModel<>();
- private final JList<String> lstNgId;
- private final DefaultListModel<String> mdlNgId = new DefaultListModel<>();
- private final JRadioButton rbFfmpegOptionFile;
- private final JRadioButton rbFfmpegOptionDirectInput;
- private final JTextField fldMail;
- private final JTextField fldOutputFileNamePattern;
+ private final JCheckBox cbOutputDisplayProgress;
+ // ファイル - 禁則文字
+ private final JTextField fldReplaceFrom = new JTextField();
+ private final JTextField fldReplaceTo = new JTextField();
+ // コメント
+ // コメント
+ private final JCheckBox cbCommentSizeAuto;
private final JTextField fldCommentSizeManual;
+ private final JCheckBox cbCommentMinSizeAuto;
private final JTextField fldCommentMinSizeManual;
+ private final JCheckBox cbCommentDisplaySizeDefault;
+ private final JTextField fldCommentDisplaySizeManual;
+ // コメント - 高度な設定
+ private final JTextField fldFontPath;
+ private final JButton btnFontPath;
+ private final JTextField fldFontIndex;
+ private final JComboBox<String> cmbFontShadow = new JComboBox<>();
+ private final JCheckBox cbFontSizeArrangeDisable;
+ private final JCheckBox cbCommentOpaque;
+ // ffmpeg
+ // ffmpeg - ファイルパス
private final JTextField fldFfmpegPath;
+ private final JButton btnFfmpegPath;
private final JTextField fldFfmpegDllPath;
- private final JTextField fldFfmpegOptionResizeWidth;
- private final JTextField fldFfmpegOptionResizeHeight;
+ private final JButton btnFfmpegDllPath;
+ // ffmpeg - ffmpegパラメータ
+ private final JRadioButton rbFfmpegOptionFile;
+ private final JRadioButton rbFfmpegOptionDirectInput;
+ private final JComboBox cmbFfmpegOptionFile;
private final JTextField fldFfmpegOptionExtension;
private final JTextField fldFfmpegOptionMain;
private final JTextField fldFfmpegOptionIn;
- private final JTextField fldPassword;
private final JTextField fldFfmpegOptionOut;
private final JTextField fldFfmpegOptionAv;
- private final JTextField fldCommentDisplaySizeManual;
- private final JTextField fldFontPath;
- private final JTextField fldFontIndex;
- private final JTextField fldFontShadow;
+ private final JCheckBox cbFfmpegOptionResize;
+ private final JTextField fldFfmpegOptionResizeWidth;
+ private final JTextField fldFfmpegOptionResizeHeight;
+ private final JCheckBox cbFfmpegOptionKeepAspect;
+ // NG設定
+ // NG設定 - NGワード
+ private final JList<String> lstNgWord;
+ private final DefaultListModel<String> mdlNgWord = new DefaultListModel<>();
private final JTextField fldNgWord;
+ private final JButton btnNgWordAdd;
+ private final JButton btnNgWordDel;
+ // NG設定 - NGID
+ private final JList<String> lstNgId;
+ private final DefaultListModel<String> mdlNgId = new DefaultListModel<>();
private final JTextField fldNgId;
+ private final JButton btnNgIdAdd;
+ private final JButton btnNgIdDel;
+ // 検索
+ // 検索 - 動画検索対象フォルダ
+ private final JList<String> lstSearchVideo;
+ private final DefaultListModel<String> mdlSearchVideo = new DefaultListModel<>();
+ private final JButton btnSearchVideoAdd;
+ private final JButton btnSearchVideoDel;
+ // 検索 - コメント検索対象フォルダ
+ private final JList<String> lstSearchComment;
+ private final DefaultListModel<String> mdlSearchComment = new DefaultListModel<>();
+ private final JButton btnSearchCommentAdd;
+ private final JButton btnSearchCommentDel;
+ // 検索 - キャッシュ更新(秒)
private final JTextField fldSearchCache;
- private final JTextField fldProxyHost;
- private final JTextField fldProxyPort;
- private final JTextField fldVideoDir;
- private final JTextField fldVideoFileNamePattern;
- private final JTextField fldCommentDir;
- private final JTextField fldCommentFileNamePattern;
- private final JTextField fldOutputDir;
+ // システム
+ private final JTextField fldSystemThreadDownload = new JTextField();
+ private final JTextField fldSystemWaitDownload = new JTextField();
+ private final JTextField fldSystemThreadConvert = new JTextField();
+ private final JTextField fldSystemTempDir = new JTextField();
+
+
// End of variables declaration//GEN-END:variables
private void loadConfig() {
cbOutputCommentOverlay.setSelected(p.getOutputCommentOverlay());
cbOutputDisplayProgress.setSelected(p.getOutputDisplayProgress());
+ /*
+ * ファイル - 禁則文字
+ */
+ fldReplaceFrom.setText(p.getReplaceFrom());
+ fldReplaceTo.setText(p.getReplaceTo());
+
/**
* コメント
*/
*/
fldFontPath.setText(p.getFontPath());
fldFontIndex.setText(p.getFontIndex());
- // TODO 影の種類はコンボボックス
+ cmbFontShadow.setSelectedIndex(p.getFontShadow());
cbFontSizeArrangeDisable.setSelected(p.getFontSizeArrangeDisable());
cbCommentOpaque.setSelected(p.getCommentOpaque());
for (String s : ngIds) {
mdlNgId.addElement(s);
}
+
+ /*
+ * システム
+ */
+ fldSystemThreadDownload.setText(Integer.toString(p.getSystemDownloadThread()));
+ fldSystemWaitDownload.setText(Integer.toString(p.getSystemDownloadWait()));
+ fldSystemThreadConvert.setText(Integer.toString(p.getSystemConvertThread()));
+ fldSystemTempDir.setText(p.getSystemTempDir());
}
+
private void saveConfig() {
final Config p = Config.INSTANCE;
p.setOutputCommentOverlay(cbOutputCommentOverlay.isSelected());
p.setOutputDisplayProgress(cbOutputDisplayProgress.isSelected());
- /**
+ /*
+ * ファイル - 禁則文字
+ */
+ p.setReplaceFrom(fldReplaceFrom.getText());
+ p.setReplaceTo(fldReplaceTo.getText());
+
+ /*
* コメント
*/
p.setCommentSizeAutosize(cbCommentSizeAuto.isSelected());
*/
p.setFontPath(fldFontPath.getText());
p.setFontIndex(fldFontIndex.getText());
- // TODO 影の種類はコンボボックス
+ p.setFontShadow(cmbFontShadow.getSelectedIndex());
p.setFontSizeArrangeDisable(cbFontSizeArrangeDisable.isSelected());
p.setCommentOpaque(cbCommentOpaque.isSelected());
/*
* NG 設定
*/
- p.setNgWords(Arrays.asList((String[]) mdlNgWord.toArray()));
- p.setNgIds(Arrays.asList((String[])mdlNgId.toArray()));
+ final List<String> ngWords = new ArrayList<>(mdlNgId.getSize());
+ for (int i = 0; i < mdlNgId.getSize(); i++) {
+ ngWords.add(mdlNgId.get(i));
+ }
+ p.setNgWords(ngWords);
+ final List<String> ngIds = new ArrayList<>(mdlNgWord.getSize());
+ for(int i = 0; i<mdlNgWord.getSize();i++) {
+ ngIds.add(mdlNgWord.get(i));
+ }
+ p.setNgIds(ngIds);
+
+ /*
+ * システム
+ */
+ p.setSystemDownloadThread(Integer.parseInt(fldSystemThreadDownload.getText()));
+ p.setSystemDownloadWait(Integer.parseInt(fldSystemWaitDownload.getText()));
+ p.setSystemConvertThread(Integer.parseInt(fldSystemThreadConvert.getText()));
+ p.setSystemTempDir(fldSystemTempDir.getText());
+ try {
+ p.save();
+ } catch (ConfigurationException ex) {
+ logger.log(Level.SEVERE, "コンフィグファイル保存に失敗", ex);
+ }
}
}