OSDN Git Service

バージョン, 更新履歴を更新
[coroid/inqubus.git] / frontend / src / saccubus / MainFrame.java
index 0d53dba..db05802 100644 (file)
@@ -18,6 +18,8 @@ import java.awt.event.KeyEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.io.File;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import javax.swing.BorderFactory;
 import javax.swing.ButtonGroup;
 import javax.swing.GroupLayout;
@@ -38,8 +40,8 @@ import javax.swing.JTabbedPane;
 import javax.swing.JTextField;
 import javax.swing.LayoutStyle.ComponentPlacement;
 import javax.swing.SwingUtilities;
-import javax.swing.border.BevelBorder;
 import nicobrowser.entity.NicoContent;
+import nicobrowser.main.Main;
 import org.apache.commons.lang.StringUtils;
 import saccubus.ConvertStopFlag.State;
 import saccubus.converter.profile.FfmpegOption;
@@ -81,7 +83,7 @@ public class MainFrame extends JFrame {
 
     private static final long serialVersionUID = 2564486741331062989L;
     public static final String PRODUCT_NAME = "いんきゅばす";
-    public static final String VERSION = "1.5.0";
+    public static final String VERSION = "1.7.1 (NicoBrowser" + Main.VERSION + ")";
     public static final Image WinIcon = Toolkit.getDefaultToolkit().createImage(saccubus.MainFrame.class.getResource(
             "icon32.png"));
     // TODO GUIが無いためフィールドに保持.
@@ -115,6 +117,23 @@ public class MainFrame extends JFrame {
     ButtonGroup CommentSaveButtonGroup = new ButtonGroup();
     ButtonGroup ConvSaveButtonGroup = new ButtonGroup();
 
+    private class FfmpegOptionCheckBoxListener implements ActionListener{
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            setFFMpegOptionCheckbox();
+        }
+    }
+    private final FfmpegOptionCheckBoxListener ffmpegOptionCheckBoxListener = new FfmpegOptionCheckBoxListener();
+
+    private void setFFMpegOptionCheckbox() {
+        boolean resizable = (resizeCheckBox.isEnabled() && resizeCheckBox.isSelected());
+        resizeWidthField.setEnabled(resizable);
+        resizeHeigitField.setEnabled(resizable);
+        adjustRatioCheckBox.setEnabled(resizable);
+
+    }
+
     private void setNames() {
         mainTabbedPane.setName("mainTabbedPane");
 
@@ -429,12 +448,18 @@ public class MainFrame extends JFrame {
                         .addComponent(extOptionLabel)
                         .addComponent(mainOptionLabel)
                         .addComponent(inputOptionLabel)
-                        .addComponent(outputOptionLabel))
+                        .addComponent(outputOptionLabel)
+                        .addComponent(avfilterOptionLabel)
+                    )
+                    .addPreferredGap(ComponentPlacement.RELATED)
                     .addGroup(layout.createParallelGroup()
                         .addComponent(extOptionField)
                         .addComponent(mainOptionField)
                         .addComponent(inputOptionField)
-                        .addComponent(outputOptionField)))
+                        .addComponent(outputOptionField)
+                        .addComponent(avfilterOptionField)
+                    )
+                )
                 .addGroup(layout.createParallelGroup()
                     .addGroup(layout.createSequentialGroup()
                         .addComponent(resizeCheckBox)
@@ -445,38 +470,48 @@ public class MainFrame extends JFrame {
                         .addPreferredGap(ComponentPlacement.UNRELATED)
                         .addComponent(resizeHeightLabel)
                         .addPreferredGap(ComponentPlacement.RELATED)
-                        .addComponent(resizeHeigitField)))
-                    .addGroup(layout.createSequentialGroup()
-                        .addGap(10)
-                        .addComponent(adjustRatioCheckBox))
-                    .addGroup(layout.createSequentialGroup()
-                        .addGap(20)
-                    .addComponent(padCheckBox))
-                );
+                        .addComponent(resizeHeigitField)
+                    )
+                )
+                .addGroup(layout.createSequentialGroup()
+                    .addGap(10)
+                    .addComponent(adjustRatioCheckBox))
+                .addGroup(layout.createSequentialGroup()
+                    .addGap(20)
+                )
+            );
 
         layout.setVerticalGroup(layout.createSequentialGroup()
-                .addComponent(getFFmpegOptionComboBoxPanel())
+            .addComponent(getFFmpegOptionComboBoxPanel())
+            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
+                .addComponent(extOptionLabel)
+                .addComponent(extOptionField))
+            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
+                .addComponent(mainOptionLabel)
+                .addComponent(mainOptionField))
+            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
+                .addComponent(inputOptionLabel)
+                .addComponent(inputOptionField))
+            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
+                .addComponent(outputOptionLabel)
+                .addComponent(outputOptionField))
+            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
+                .addComponent(avfilterOptionLabel)
+                .addComponent(avfilterOptionField))
+            .addGroup(layout.createSequentialGroup()
                 .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(extOptionLabel)
-                    .addComponent(extOptionField))
-                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(mainOptionLabel)
-                    .addComponent(mainOptionField))
-                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(inputOptionLabel)
-                    .addComponent(inputOptionField))
-                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(outputOptionLabel)
-                    .addComponent(outputOptionField))
-                .addGroup(layout.createSequentialGroup()
-                    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                        .addComponent(resizeCheckBox)
-                        .addComponent(resizeWidthLabel)
-                        .addComponent(resizeWidthField)
-                        .addComponent(resizeHeightLabel)
-                        .addComponent(resizeHeigitField))
-                    .addComponent(adjustRatioCheckBox)
-                    .addComponent(padCheckBox)));
+                    .addComponent(resizeCheckBox)
+                    .addComponent(resizeWidthLabel)
+                    .addComponent(resizeWidthField)
+                    .addComponent(resizeHeightLabel)
+                    .addComponent(resizeHeigitField))
+                .addComponent(adjustRatioCheckBox)
+                )
+            );
+
+        resizeCheckBox.addActionListener(ffmpegOptionCheckBoxListener);
+        adjustRatioCheckBox.addActionListener(ffmpegOptionCheckBoxListener);
+        setFFMpegOptionCheckbox();
 
 
         VideoInfoPanel.add(DoButton, gridBagConstraints71);
@@ -757,6 +792,10 @@ public class MainFrame extends JFrame {
         inputOptionField.setText(movie.getFfmpegOption().getInOption());
         outputOptionField.setText(movie.getFfmpegOption().getOutOption());
         avfilterOptionField.setText(movie.getFfmpegOption().getAvfilterOption());
+        resizeCheckBox.setSelected(movie.getFfmpegOption().isResize());
+        resizeWidthField.setText(Integer.toString(movie.getFfmpegOption().getResizeWidth()));
+        resizeHeigitField.setText(Integer.toString(movie.getFfmpegOption().getResizeHeight()));
+        adjustRatioCheckBox.setSelected(movie.getFfmpegOption().isAdjustRatio());
         FFmpegOptionModel.reload(movie.getOptionFile());
 
         // 変換設定
@@ -780,8 +819,12 @@ public class MainFrame extends JFrame {
      *            ActionEvent
      */
     void jMenuFileExit_actionPerformed(ActionEvent actionEvent) {
-        SProperties setting = getSetting();
-        SProperties.saveSetting(setting);
+        try {
+            SProperties setting = getSetting();
+            SProperties.saveSetting(setting);
+        } catch (Throwable t) {
+            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, "設定保存に失敗", t);
+        }
         System.exit(0);
     }
 
@@ -811,13 +854,12 @@ public class MainFrame extends JFrame {
     private JTextField outputOptionField = new JTextField();
     private final JLabel avfilterOptionLabel = new JLabel();
     private final JTextField avfilterOptionField = new JTextField();
-    private final JCheckBox resizeCheckBox = new JCheckBox("次のサイズに収まるようリサイズ");
+    private final JCheckBox resizeCheckBox = new JCheckBox("次のサイズに収まるよう縮小(-s)");
     private final JLabel resizeWidthLabel = new JLabel("横");
-    private final JTextField resizeWidthField = new JTextField();
+    private final JTextField resizeWidthField = new NumberFormattedTextField();
     private final JLabel resizeHeightLabel = new JLabel("縦");
-    private final JTextField resizeHeigitField = new JTextField();
+    private final JTextField resizeHeigitField = new NumberFormattedTextField();
     private final JCheckBox adjustRatioCheckBox = new JCheckBox("アスペクト比を維持");
-    private final JCheckBox padCheckBox = new JCheckBox("黒幕を付与");
     // FFmpegの設定 ここまで
     private JLabel FontIndexLabel = new JLabel();
     private JTextField fontIndexField = new JTextField();
@@ -830,7 +872,7 @@ public class MainFrame extends JFrame {
     private GridBagLayout gridBagLayout12 = new GridBagLayout();
     private JPanel ConvertingSettingPanel = null;
     private JPanel NGWordSettingPanel = null;
-    private JLabel NGWordLavel = null;
+    private JLabel NGWordLabel = null;
     private JTextField ngWordTextField = null;
     private JLabel NGIDLabel = null;
     private JTextField ngIdTextField = null;
@@ -1007,13 +1049,13 @@ public class MainFrame extends JFrame {
             gridBagConstraints2.gridx = 0;
             gridBagConstraints2.insets = new Insets(0, 5, 5, 0);
             gridBagConstraints2.gridy = 0;
-            NGWordLavel = new JLabel();
-            NGWordLavel.setText("NGワード");
+            NGWordLabel = new JLabel();
+            NGWordLabel.setText("NGワード");
             NGWordSettingPanel = new JPanel();
             NGWordSettingPanel.setLayout(new GridBagLayout());
             NGWordSettingPanel.setBorder(BorderFactory.createTitledBorder(null,
-                    "NGワード・ID設定"));
-            NGWordSettingPanel.add(NGWordLavel, gridBagConstraints2);
+                    "NGワード・ID設定(半角スペース区切りで複数入力)"));
+            NGWordSettingPanel.add(NGWordLabel, gridBagConstraints2);
             NGWordSettingPanel.add(getNGWordTextField(), gridBagConstraints3);
             NGWordSettingPanel.add(NGIDLabel, gridBagConstraints4);
             NGWordSettingPanel.add(getNGIDTextField(), gridBagConstraints5);
@@ -1186,19 +1228,24 @@ public class MainFrame extends JFrame {
 
                 public void actionPerformed(java.awt.event.ActionEvent e) {
                     if (FFmpegOptionModel.isFile()) {// ファイル
-                        extOptionField.setEnabled(false);
-                        mainOptionField.setEnabled(false);
-                        inputOptionField.setEnabled(false);
-                        outputOptionField.setEnabled(false);
-                        avfilterOptionField.setEnabled(false);
+                        setFFMpegOptionEnabled(false);
                     } else {// ファイルでない
-                        extOptionField.setEnabled(true);
-                        mainOptionField.setEnabled(true);
-                        inputOptionField.setEnabled(true);
-                        outputOptionField.setEnabled(true);
-                        avfilterOptionField.setEditable(true);
+                        setFFMpegOptionEnabled(true);
+                        setFFMpegOptionCheckbox();
                     }
                 }
+
+                private void setFFMpegOptionEnabled(boolean enable) {
+                    extOptionField.setEnabled(enable);
+                    mainOptionField.setEnabled(enable);
+                    inputOptionField.setEnabled(enable);
+                    outputOptionField.setEnabled(enable);
+                    avfilterOptionField.setEnabled(enable);
+                    resizeCheckBox.setEnabled(enable);
+                    resizeWidthField.setEnabled(enable);
+                    resizeHeigitField.setEditable(enable);
+                    adjustRatioCheckBox.setEnabled(enable);
+                }
             });
         }
         return FFmpegOptionComboBox;
@@ -1377,9 +1424,13 @@ public class MainFrame extends JFrame {
         String in = inputOptionField.getText();
         String out = outputOptionField.getText();
         String avfilter = avfilterOptionField.getText();
+        boolean resize = resizeCheckBox.isSelected();
+        String width = resizeWidthField.getText();
+        String height = resizeHeigitField.getText();
+        boolean adjust = adjustRatioCheckBox.isSelected();
         File optionFile = FFmpegOptionModel.getSelectedFile();
 
-        FfmpegOption opt = new FfmpegOption(ext, main, in, out, avfilter);
+        FfmpegOption opt = new FfmpegOption(ext, main, in, out, avfilter, resize, width, height, adjust);
         return new MovieSetting(new File(ffmpeg), new File(vhook), optionFile, opt);
     }