OSDN Git Service

システムコンフィグの型を変更
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / gui / ConfigDialog.java
index d065f9e..44827d0 100644 (file)
@@ -5,10 +5,18 @@
  */
 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;
@@ -29,6 +37,7 @@ import javax.swing.LayoutStyle.ComponentPlacement;
 import javax.swing.UIManager;
 import javax.swing.UnsupportedLookAndFeelException;
 import javax.swing.WindowConstants;
+import org.apache.commons.configuration.ConfigurationException;
 import yukihane.inqubus.Config;
 
 /**
@@ -37,6 +46,7 @@ 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() {
@@ -107,7 +117,6 @@ public class ConfigDialog extends JDialog {
         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();
@@ -273,7 +282,7 @@ public class ConfigDialog extends JDialog {
 
         lblVideoDir.setText("保存フォルダ");
 
-        lblVideoFileNamepattern.setText("ファイル名パターン");
+        lblVideoFileNamepattern.setText("ファイル名規則");
 
         btnVideoDir.setText("...");
 
@@ -319,7 +328,7 @@ public class ConfigDialog extends JDialog {
 
         lblCommentDir.setText("保存フォルダ");
 
-        lblCommentFileNamePattern.setText("ファイル名パターン");
+        lblCommentFileNamePattern.setText("ファイル名規則");
 
         btnCommentDir.setText("...");
 
@@ -365,7 +374,7 @@ public class ConfigDialog extends JDialog {
 
         lblOutputDir.setText("保存フォルダ");
 
-        lblOutputFileNamePattern.setText("ファイル名パターン");
+        lblOutputFileNamePattern.setText("ファイル名規則");
 
         btnOutputDir.setText("...");
 
@@ -419,6 +428,38 @@ public class ConfigDialog extends JDialog {
                 .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(
@@ -428,7 +469,9 @@ public class ConfigDialog extends JDialog {
                 .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(
@@ -440,6 +483,8 @@ public class ConfigDialog extends JDialog {
                 .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())
         );
 
@@ -520,6 +565,9 @@ public class ConfigDialog extends JDialog {
         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);
@@ -538,7 +586,7 @@ public class ConfigDialog extends JDialog {
                         .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))
@@ -559,7 +607,7 @@ public class ConfigDialog extends JDialog {
                 .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)
@@ -1002,6 +1050,14 @@ public class ConfigDialog extends JDialog {
 
         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);
@@ -1014,17 +1070,73 @@ public class ConfigDialog extends JDialog {
             .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();
     }
 
     /**
@@ -1064,72 +1176,103 @@ public class ConfigDialog extends JDialog {
         });
     }
     // 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() {
@@ -1171,6 +1314,12 @@ public class ConfigDialog extends JDialog {
         cbOutputCommentOverlay.setSelected(p.getOutputCommentOverlay());
         cbOutputDisplayProgress.setSelected(p.getOutputDisplayProgress());
 
+        /*
+         * ファイル - 禁則文字
+         */
+        fldReplaceFrom.setText(p.getReplaceFrom());
+        fldReplaceTo.setText(p.getReplaceTo());
+
         /**
          * コメント
          */
@@ -1186,7 +1335,7 @@ public class ConfigDialog extends JDialog {
          */
         fldFontPath.setText(p.getFontPath());
         fldFontIndex.setText(p.getFontIndex());
-        // TODO 影の種類はコンボボックス
+        cmbFontShadow.setSelectedIndex(p.getFontShadow());
         cbFontSizeArrangeDisable.setSelected(p.getFontSizeArrangeDisable());
         cbCommentOpaque.setSelected(p.getCommentOpaque());
 
@@ -1223,7 +1372,16 @@ public class ConfigDialog extends JDialog {
         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;
 
@@ -1264,7 +1422,13 @@ public class ConfigDialog extends JDialog {
         p.setOutputCommentOverlay(cbOutputCommentOverlay.isSelected());
         p.setOutputDisplayProgress(cbOutputDisplayProgress.isSelected());
 
-        /**
+        /*
+         * ファイル - 禁則文字
+         */
+        p.setReplaceFrom(fldReplaceFrom.getText());
+        p.setReplaceTo(fldReplaceTo.getText());
+
+        /*
          * コメント
          */
         p.setCommentSizeAutosize(cbCommentSizeAuto.isSelected());
@@ -1279,7 +1443,7 @@ public class ConfigDialog extends JDialog {
          */
         p.setFontPath(fldFontPath.getText());
         p.setFontIndex(fldFontIndex.getText());
-        // TODO 影の種類はコンボボックス
+        p.setFontShadow(cmbFontShadow.getSelectedIndex());
         p.setFontSizeArrangeDisable(cbFontSizeArrangeDisable.isSelected());
         p.setCommentOpaque(cbCommentOpaque.isSelected());
 
@@ -1307,8 +1471,29 @@ public class ConfigDialog extends JDialog {
         /*
          * 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);
+        }
     }
 }