OSDN Git Service

Worker実装クラスのパッケージ移動
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / gui / ConfigDialog.java
index 56bfdae..a521b95 100644 (file)
@@ -5,10 +5,15 @@
  */
 package yukihane.inqubus.gui;
 
-import java.util.Arrays;
+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 +34,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 +43,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() {
@@ -418,6 +425,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(
@@ -427,7 +466,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(
@@ -439,6 +480,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())
         );
 
@@ -519,6 +562,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);
@@ -1001,6 +1047,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);
@@ -1087,6 +1141,9 @@ public class ConfigDialog extends JDialog {
     private final JCheckBox cbOutputEnable;
     private final JCheckBox cbOutputCommentOverlay;
     private final JCheckBox cbOutputDisplayProgress;
+    // ファイル - 禁則文字
+    private final JTextField fldReplaceFrom = new JTextField();
+    private final JTextField fldReplaceTo = new JTextField();
     // コメント
     // コメント
     private final JCheckBox cbCommentSizeAuto;
@@ -1190,6 +1247,12 @@ public class ConfigDialog extends JDialog {
         cbOutputCommentOverlay.setSelected(p.getOutputCommentOverlay());
         cbOutputDisplayProgress.setSelected(p.getOutputDisplayProgress());
 
+        /*
+         * ファイル - 禁則文字
+         */
+        fldReplaceFrom.setText(p.getReplaceFrom());
+        fldReplaceTo.setText(p.getReplaceTo());
+
         /**
          * コメント
          */
@@ -1205,7 +1268,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());
 
@@ -1283,7 +1346,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());
@@ -1298,7 +1367,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());
 
@@ -1326,8 +1395,21 @@ 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);
 
+        try {
+            p.save();
+        } catch (ConfigurationException ex) {
+            logger.log(Level.SEVERE, "コンフィグファイル保存に失敗", ex);
+        }
     }
 }