OSDN Git Service

コンフィグダイアログクローズ処理
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / gui / ConfigDialog.java
1 /*
2  * Properties.java
3  *
4  * Created on 2011/08/20, 16:33:03
5  */
6 package yukihane.inqubus.gui;
7
8 import java.awt.event.ActionEvent;
9 import java.awt.event.ActionListener;
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.List;
13 import javax.swing.BorderFactory;
14 import javax.swing.ButtonGroup;
15 import javax.swing.ComboBoxModel;
16 import javax.swing.DefaultComboBoxModel;
17 import javax.swing.DefaultListModel;
18 import javax.swing.GroupLayout;
19 import javax.swing.GroupLayout.Alignment;
20 import javax.swing.JButton;
21 import javax.swing.JCheckBox;
22 import javax.swing.JComboBox;
23 import javax.swing.JDialog;
24 import javax.swing.JFrame;
25 import javax.swing.JLabel;
26 import javax.swing.JList;
27 import javax.swing.JPanel;
28 import javax.swing.JRadioButton;
29 import javax.swing.JScrollPane;
30 import javax.swing.JTabbedPane;
31 import javax.swing.JTextField;
32 import javax.swing.LayoutStyle.ComponentPlacement;
33 import javax.swing.UIManager;
34 import javax.swing.UnsupportedLookAndFeelException;
35 import javax.swing.WindowConstants;
36 import yukihane.inqubus.Config;
37
38 /**
39  *
40  * @author yuki
41  */
42 public class ConfigDialog extends JDialog {
43     private static final long serialVersionUID = 1L;
44
45     /** Creates new form Properties */
46     public ConfigDialog() {
47         this(null);
48     }
49
50     public ConfigDialog(JFrame owner){
51         super(owner);
52
53         final ButtonGroup buttonGroup1 = new ButtonGroup();
54         final JTabbedPane tabbedPane = new JTabbedPane();
55         final JPanel pnlNetwork = new JPanel();
56         final JPanel pnlAccount = new JPanel();
57         final JLabel lblMail = new JLabel();
58         fldMail = new JTextField();
59         final JLabel lblPassword = new JLabel();
60         fldPassword = new JTextField();
61         final JPanel pnlProxy = new JPanel();
62         cbProxyUse = new JCheckBox();
63         final JLabel lblProxyHost = new JLabel();
64         final JLabel lblProxyPort = new JLabel();
65         fldProxyHost = new JTextField();
66         fldProxyPort = new JTextField();
67         final JPanel pnlFile = new JPanel();
68         final JPanel pnlFileVideo = new JPanel();
69         final JLabel lblVideoDir = new JLabel();
70         final JLabel lblVideoFileNamepattern = new JLabel();
71         fldVideoDir = new JTextField();
72         fldVideoFileNamePattern = new JTextField();
73         btnVideoDir = new JButton();
74         cbVideoLocal = new JCheckBox();
75         final JPanel pnlFileComment = new JPanel();
76         final JLabel lblCommentDir = new JLabel();
77         final JLabel lblCommentFileNamePattern = new JLabel();
78         fldCommentDir = new JTextField();
79         fldCommentFileNamePattern = new JTextField();
80         btnCommentDir = new JButton();
81         cbCommentLocal = new JCheckBox();
82         final JPanel pnlFileOutput = new JPanel();
83         final JLabel lblOutputDir = new JLabel();
84         final JLabel lblOutputFileNamePattern = new JLabel();
85         fldOutputDir = new JTextField();
86         fldOutputFileNamePattern = new JTextField();
87         btnOutputDir = new JButton();
88         cbOutputEnable = new JCheckBox();
89         cbOutputCommentOverlay = new JCheckBox();
90         cbOutputDisplayProgress = new JCheckBox();
91         final JPanel pnlComment = new JPanel();
92         final JPanel pnlCommentStandard = new JPanel();
93         final JLabel lblCommentSize = new JLabel();
94         cbCommentSizeAuto = new JCheckBox();
95         final JLabel lblCommentSizeManual = new JLabel();
96         fldCommentSizeManual = new JTextField();
97         final JLabel lblCommentMinSize = new JLabel();
98         cbCommentMinSizeAuto = new JCheckBox();
99         fldCommentMinSizeManual = new JTextField();
100         final JLabel lblCommentMinSizeManual = new JLabel();
101         final JLabel lblCommentDisplayMax = new JLabel();
102         cbCommentDisplaySizeDefault = new JCheckBox();
103         final JLabel lblCommentDisplayMaxManual = new JLabel();
104         fldCommentDisplaySizeManual = new JTextField();
105         final JPanel pnlCommentAdvanced = new JPanel();
106         final JLabel lblFontPath = new JLabel();
107         cbFontSizeArrangeDisable = new JCheckBox();
108         cbCommentOpaque = new JCheckBox();
109         fldFontPath = new JTextField();
110         btnFontPath = new JButton();
111         final JLabel lblFontIndex = new JLabel();
112         final JLabel lblFontShadow = new JLabel();
113         fldFontIndex = new JTextField();
114         final JPanel pnlFfmpeg = new JPanel();
115         final JPanel jPanel10 = new JPanel();
116         final JLabel lblFfmpegPath = new JLabel();
117         final JLabel lblFfmpegDllPath = new JLabel();
118         fldFfmpegPath = new JTextField();
119         fldFfmpegDllPath = new JTextField();
120         btnFfmpegPath = new JButton();
121         btnFfmpegDllPath = new JButton();
122         final JPanel pnlFfmpegParam = new JPanel();
123         rbFfmpegOptionFile = new JRadioButton();
124         rbFfmpegOptionDirectInput = new JRadioButton();
125         cmbFfmpegOptionFile = new JComboBox();
126         final JPanel pnlFfmpegParamOption = new JPanel();
127         final JLabel lblFfmpegOptionExtension = new JLabel();
128         final JLabel lblFfmpegOptionMain = new JLabel();
129         final JLabel lblFfmpegOptionIn = new JLabel();
130         final JLabel lblFfmpegOptionOut = new JLabel();
131         final JLabel lblFfmpegOptionAvfilter = new JLabel();
132         cbFfmpegOptionResize = new JCheckBox();
133         final JLabel lblFfmpegOptionResizeWidth = new JLabel();
134         fldFfmpegOptionResizeWidth = new JTextField();
135         final JLabel lblFfmpegOptionResizeHeight = new JLabel();
136         fldFfmpegOptionResizeHeight = new JTextField();
137         cbFfmpegOptionKeepAspect = new JCheckBox();
138         fldFfmpegOptionExtension = new JTextField();
139         fldFfmpegOptionMain = new JTextField();
140         fldFfmpegOptionIn = new JTextField();
141         fldFfmpegOptionOut = new JTextField();
142         fldFfmpegOptionAv = new JTextField();
143         final JPanel pnlNgSetting = new JPanel();
144         final JPanel pnlNgWord = new JPanel();
145         final JScrollPane scrNgWord = new JScrollPane();
146         lstNgWord = new JList<>();
147         fldNgWord = new JTextField();
148         btnNgWordAdd = new JButton();
149         btnNgWordDel = new JButton();
150         final JPanel pnlNgId = new JPanel();
151         final JScrollPane scrNgId = new JScrollPane();
152         lstNgId = new JList<>();
153         fldNgId = new JTextField();
154         btnNgIdAdd = new JButton();
155         btnNgIdDel = new JButton();
156         final JPanel pnlSearch = new JPanel();
157         final JPanel pnlSearchVideo = new JPanel();
158         final JScrollPane srcSearchVideo = new JScrollPane();
159         lstSearchVideo = new JList<>();
160         btnSearchVideoAdd = new JButton();
161         btnSearchVideoDel = new JButton();
162         final JPanel pnlSearchComment = new JPanel();
163         final JScrollPane srcSearchComment = new JScrollPane();
164         lstSearchComment = new JList<>();
165         btnSearchCommentAdd = new JButton();
166         btnSearchCommentDel = new JButton();
167         final JPanel pnlSearchCache = new JPanel();
168         final JLabel lblSearchCache = new JLabel();
169         fldSearchCache = new JTextField();
170
171         setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
172
173         pnlNetwork.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
174
175         pnlAccount.setBorder(BorderFactory.createTitledBorder("アカウント"));
176
177         lblMail.setText("ID(メールアドレス)");
178
179         lblPassword.setText("パスワード");
180
181         GroupLayout gl_pnlAccount = new GroupLayout(pnlAccount);
182         pnlAccount.setLayout(gl_pnlAccount);
183         gl_pnlAccount.setHorizontalGroup(
184             gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.LEADING)
185             .addGroup(gl_pnlAccount.createSequentialGroup()
186                 .addContainerGap()
187                 .addGroup(gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.LEADING)
188                     .addComponent(lblMail)
189                     .addComponent(lblPassword))
190                 .addPreferredGap(ComponentPlacement.RELATED)
191                 .addGroup(gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.LEADING)
192                     .addComponent(fldPassword, GroupLayout.DEFAULT_SIZE, 306, Short.MAX_VALUE)
193                     .addComponent(fldMail, GroupLayout.DEFAULT_SIZE, 306, Short.MAX_VALUE))
194                 .addContainerGap())
195         );
196         gl_pnlAccount.setVerticalGroup(
197             gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.LEADING)
198             .addGroup(gl_pnlAccount.createSequentialGroup()
199                 .addContainerGap()
200                 .addGroup(gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.BASELINE)
201                     .addComponent(lblMail)
202                     .addComponent(fldMail, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
203                 .addPreferredGap(ComponentPlacement.RELATED)
204                 .addGroup(gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.BASELINE)
205                     .addComponent(lblPassword)
206                     .addComponent(fldPassword, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
207                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
208         );
209
210         pnlProxy.setBorder(BorderFactory.createTitledBorder("プロキシ"));
211
212         cbProxyUse.setText("プロキシを使用する");
213
214         lblProxyHost.setText("ホスト名");
215
216         lblProxyPort.setText("ポート番号");
217
218         GroupLayout gl_pnlProxy = new GroupLayout(pnlProxy);
219         pnlProxy.setLayout(gl_pnlProxy);
220         gl_pnlProxy.setHorizontalGroup(
221             gl_pnlProxy.createParallelGroup(GroupLayout.Alignment.LEADING)
222             .addGroup(gl_pnlProxy.createSequentialGroup()
223                 .addContainerGap()
224                 .addGroup(gl_pnlProxy.createParallelGroup(GroupLayout.Alignment.LEADING)
225                     .addComponent(cbProxyUse)
226                     .addGroup(gl_pnlProxy.createSequentialGroup()
227                         .addComponent(lblProxyHost)
228                         .addGap(18, 18, 18)
229                         .addComponent(fldProxyHost, GroupLayout.PREFERRED_SIZE, 168, GroupLayout.PREFERRED_SIZE))
230                     .addGroup(gl_pnlProxy.createSequentialGroup()
231                         .addComponent(lblProxyPort)
232                         .addPreferredGap(ComponentPlacement.RELATED)
233                         .addComponent(fldProxyPort, GroupLayout.PREFERRED_SIZE, 76, GroupLayout.PREFERRED_SIZE)))
234                 .addContainerGap(181, Short.MAX_VALUE))
235         );
236         gl_pnlProxy.setVerticalGroup(
237             gl_pnlProxy.createParallelGroup(GroupLayout.Alignment.LEADING)
238             .addGroup(gl_pnlProxy.createSequentialGroup()
239                 .addContainerGap()
240                 .addComponent(cbProxyUse)
241                 .addPreferredGap(ComponentPlacement.RELATED)
242                 .addGroup(gl_pnlProxy.createParallelGroup(GroupLayout.Alignment.BASELINE)
243                     .addComponent(lblProxyHost)
244                     .addComponent(fldProxyHost, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
245                 .addPreferredGap(ComponentPlacement.RELATED)
246                 .addGroup(gl_pnlProxy.createParallelGroup(GroupLayout.Alignment.BASELINE)
247                     .addComponent(lblProxyPort)
248                     .addComponent(fldProxyPort, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
249                 .addContainerGap(39, Short.MAX_VALUE))
250         );
251
252         GroupLayout gl_pnlNetwork = new GroupLayout(pnlNetwork);
253         pnlNetwork.setLayout(gl_pnlNetwork);
254         gl_pnlNetwork.setHorizontalGroup(
255             gl_pnlNetwork.createParallelGroup(GroupLayout.Alignment.LEADING)
256             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlNetwork.createSequentialGroup()
257                 .addContainerGap()
258                 .addGroup(gl_pnlNetwork.createParallelGroup(GroupLayout.Alignment.TRAILING)
259                     .addComponent(pnlProxy, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
260                     .addComponent(pnlAccount, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
261                 .addContainerGap())
262         );
263         gl_pnlNetwork.setVerticalGroup(
264             gl_pnlNetwork.createParallelGroup(GroupLayout.Alignment.LEADING)
265             .addGroup(gl_pnlNetwork.createSequentialGroup()
266                 .addContainerGap()
267                 .addComponent(pnlAccount, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
268                 .addPreferredGap(ComponentPlacement.RELATED)
269                 .addComponent(pnlProxy, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
270                 .addContainerGap(178, Short.MAX_VALUE))
271         );
272
273         tabbedPane.addTab("ネットワーク", pnlNetwork);
274
275         pnlFileVideo.setBorder(BorderFactory.createTitledBorder("動画"));
276
277         lblVideoDir.setText("保存フォルダ");
278
279         lblVideoFileNamepattern.setText("ファイル名規則");
280
281         btnVideoDir.setText("...");
282
283         cbVideoLocal.setText("local");
284
285         GroupLayout gl_pnlFileVideo = new GroupLayout(pnlFileVideo);
286         pnlFileVideo.setLayout(gl_pnlFileVideo);
287         gl_pnlFileVideo.setHorizontalGroup(
288             gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
289             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFileVideo.createSequentialGroup()
290                 .addContainerGap()
291                 .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
292                     .addComponent(lblVideoFileNamepattern)
293                     .addComponent(lblVideoDir))
294                 .addPreferredGap(ComponentPlacement.RELATED)
295                 .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
296                     .addGroup(gl_pnlFileVideo.createSequentialGroup()
297                         .addComponent(fldVideoDir, GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
298                         .addPreferredGap(ComponentPlacement.RELATED)
299                         .addComponent(btnVideoDir))
300                     .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFileVideo.createSequentialGroup()
301                         .addComponent(fldVideoFileNamePattern, GroupLayout.PREFERRED_SIZE, 165, GroupLayout.PREFERRED_SIZE)
302                         .addPreferredGap(ComponentPlacement.RELATED, 94, Short.MAX_VALUE)
303                         .addComponent(cbVideoLocal)))
304                 .addContainerGap())
305         );
306         gl_pnlFileVideo.setVerticalGroup(
307             gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
308             .addGroup(gl_pnlFileVideo.createSequentialGroup()
309                 .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
310                     .addComponent(lblVideoDir)
311                     .addComponent(fldVideoDir, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
312                     .addComponent(btnVideoDir))
313                 .addPreferredGap(ComponentPlacement.RELATED)
314                 .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
315                     .addComponent(lblVideoFileNamepattern)
316                     .addComponent(fldVideoFileNamePattern, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
317                     .addComponent(cbVideoLocal))
318                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
319         );
320
321         pnlFileComment.setBorder(BorderFactory.createTitledBorder("コメント"));
322
323         lblCommentDir.setText("保存フォルダ");
324
325         lblCommentFileNamePattern.setText("ファイル名規則");
326
327         btnCommentDir.setText("...");
328
329         cbCommentLocal.setText("local");
330
331         GroupLayout gl_pnlFileComment = new GroupLayout(pnlFileComment);
332         pnlFileComment.setLayout(gl_pnlFileComment);
333         gl_pnlFileComment.setHorizontalGroup(
334             gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
335             .addGroup(gl_pnlFileComment.createSequentialGroup()
336                 .addContainerGap()
337                 .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
338                     .addComponent(lblCommentFileNamePattern)
339                     .addComponent(lblCommentDir))
340                 .addPreferredGap(ComponentPlacement.RELATED)
341                 .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
342                     .addGroup(gl_pnlFileComment.createSequentialGroup()
343                         .addComponent(fldCommentFileNamePattern, GroupLayout.PREFERRED_SIZE, 166, GroupLayout.PREFERRED_SIZE)
344                         .addPreferredGap(ComponentPlacement.RELATED, 93, Short.MAX_VALUE)
345                         .addComponent(cbCommentLocal))
346                     .addGroup(gl_pnlFileComment.createSequentialGroup()
347                         .addComponent(fldCommentDir, GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
348                         .addPreferredGap(ComponentPlacement.RELATED)
349                         .addComponent(btnCommentDir)))
350                 .addContainerGap())
351         );
352         gl_pnlFileComment.setVerticalGroup(
353             gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
354             .addGroup(gl_pnlFileComment.createSequentialGroup()
355                 .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.BASELINE)
356                     .addComponent(lblCommentDir)
357                     .addComponent(fldCommentDir, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
358                     .addComponent(btnCommentDir))
359                 .addPreferredGap(ComponentPlacement.RELATED)
360                 .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.BASELINE)
361                     .addComponent(lblCommentFileNamePattern)
362                     .addComponent(fldCommentFileNamePattern, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
363                     .addComponent(cbCommentLocal))
364                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
365         );
366
367         pnlFileOutput.setBorder(BorderFactory.createTitledBorder("変換動画"));
368
369         lblOutputDir.setText("保存フォルダ");
370
371         lblOutputFileNamePattern.setText("ファイル名規則");
372
373         btnOutputDir.setText("...");
374
375         cbOutputEnable.setText("変換");
376
377         cbOutputCommentOverlay.setText("コメント付与");
378
379         cbOutputDisplayProgress.setText("変換中動画表示");
380
381         GroupLayout gl_pnlFileOutput = new GroupLayout(pnlFileOutput);
382         pnlFileOutput.setLayout(gl_pnlFileOutput);
383         gl_pnlFileOutput.setHorizontalGroup(
384             gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.LEADING)
385             .addGroup(gl_pnlFileOutput.createSequentialGroup()
386                 .addContainerGap()
387                 .addGroup(gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.LEADING)
388                     .addComponent(lblOutputFileNamePattern)
389                     .addComponent(lblOutputDir))
390                 .addPreferredGap(ComponentPlacement.RELATED)
391                 .addGroup(gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.LEADING)
392                     .addGroup(gl_pnlFileOutput.createSequentialGroup()
393                         .addComponent(fldOutputDir, GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
394                         .addPreferredGap(ComponentPlacement.RELATED)
395                         .addComponent(btnOutputDir)
396                         .addContainerGap())
397                     .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFileOutput.createSequentialGroup()
398                         .addComponent(fldOutputFileNamePattern, GroupLayout.PREFERRED_SIZE, 167, GroupLayout.PREFERRED_SIZE)
399                         .addPreferredGap(ComponentPlacement.RELATED, 23, Short.MAX_VALUE)
400                         .addGroup(gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.LEADING)
401                             .addComponent(cbOutputDisplayProgress)
402                             .addGroup(gl_pnlFileOutput.createSequentialGroup()
403                                 .addComponent(cbOutputEnable)
404                                 .addPreferredGap(ComponentPlacement.RELATED)
405                                 .addComponent(cbOutputCommentOverlay))))))
406         );
407         gl_pnlFileOutput.setVerticalGroup(
408             gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.LEADING)
409             .addGroup(gl_pnlFileOutput.createSequentialGroup()
410                 .addGroup(gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.BASELINE)
411                     .addComponent(lblOutputDir)
412                     .addComponent(fldOutputDir, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
413                     .addComponent(btnOutputDir))
414                 .addPreferredGap(ComponentPlacement.RELATED)
415                 .addGroup(gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.BASELINE)
416                     .addComponent(lblOutputFileNamePattern)
417                     .addComponent(fldOutputFileNamePattern, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
418                     .addComponent(cbOutputCommentOverlay)
419                     .addComponent(cbOutputEnable))
420                 .addPreferredGap(ComponentPlacement.RELATED)
421                 .addComponent(cbOutputDisplayProgress)
422                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
423         );
424
425         final JPanel pnlFileProhibit = new JPanel();
426         pnlFileProhibit.setBorder(BorderFactory.createTitledBorder("禁則文字"));
427         final JLabel lblReplaceFrom = new JLabel("置換対象文字");
428         final JLabel lblReplaceTo = new JLabel("置換後文字");
429
430         final GroupLayout glProhibit = new GroupLayout(pnlFileProhibit);
431         glProhibit.setAutoCreateContainerGaps(true);
432         glProhibit.setAutoCreateGaps(true);
433         pnlFileProhibit.setLayout(glProhibit);
434
435         glProhibit.setHorizontalGroup(glProhibit.createSequentialGroup()
436             .addGroup(glProhibit.createParallelGroup()
437                 .addComponent(lblReplaceFrom)
438                 .addComponent(lblReplaceTo)
439             )
440             .addGroup(glProhibit.createParallelGroup()
441                 .addComponent(fldReplaceFrom)
442                 .addComponent(fldReplaceTo)
443             )
444         );
445
446         glProhibit.setVerticalGroup(glProhibit.createSequentialGroup()
447             .addGroup(glProhibit.createParallelGroup(Alignment.BASELINE)
448                 .addComponent(lblReplaceFrom)
449                 .addComponent(fldReplaceFrom)
450             )
451             .addGroup(glProhibit.createParallelGroup(Alignment.BASELINE)
452                 .addComponent(lblReplaceTo)
453                 .addComponent(fldReplaceTo)
454             )
455         );
456
457         GroupLayout gl_pnlFile = new GroupLayout(pnlFile);
458         pnlFile.setLayout(gl_pnlFile);
459         gl_pnlFile.setHorizontalGroup(
460             gl_pnlFile.createParallelGroup(GroupLayout.Alignment.LEADING)
461             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFile.createSequentialGroup()
462                 .addContainerGap()
463                 .addGroup(gl_pnlFile.createParallelGroup(GroupLayout.Alignment.TRAILING)
464                     .addComponent(pnlFileOutput, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
465                     .addComponent(pnlFileVideo, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
466                     .addComponent(pnlFileComment, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
467                     .addComponent(pnlFileProhibit, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
468                 )
469                 .addContainerGap())
470         );
471         gl_pnlFile.setVerticalGroup(
472             gl_pnlFile.createParallelGroup(GroupLayout.Alignment.LEADING)
473             .addGroup(gl_pnlFile.createSequentialGroup()
474                 .addContainerGap()
475                 .addComponent(pnlFileVideo, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
476                 .addPreferredGap(ComponentPlacement.RELATED)
477                 .addComponent(pnlFileComment, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
478                 .addPreferredGap(ComponentPlacement.RELATED)
479                 .addComponent(pnlFileOutput, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
480                 .addPreferredGap(ComponentPlacement.RELATED)
481                 .addComponent(pnlFileProhibit, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
482                 .addContainerGap())
483         );
484
485         tabbedPane.addTab("ファイル", pnlFile);
486
487         pnlCommentStandard.setBorder(BorderFactory.createTitledBorder(""));
488
489         lblCommentSize.setText("再生時間に応じたコメントの取得数");
490
491         cbCommentSizeAuto.setText("自動調整");
492
493         lblCommentSizeManual.setText("手動取得");
494
495         lblCommentMinSize.setText("1分当たりのコメント取得数");
496
497         cbCommentMinSizeAuto.setText("自動調整");
498
499         lblCommentMinSizeManual.setText("手動取得");
500
501         lblCommentDisplayMax.setText("1画面に表示する最大コメント数");
502
503         cbCommentDisplaySizeDefault.setText("標準(30)");
504
505         lblCommentDisplayMaxManual.setText("手動設定");
506
507         GroupLayout gl_pnlCommentStandard = new GroupLayout(pnlCommentStandard);
508         pnlCommentStandard.setLayout(gl_pnlCommentStandard);
509         gl_pnlCommentStandard.setAutoCreateContainerGaps(true);
510         gl_pnlCommentStandard.setAutoCreateGaps(true);
511         gl_pnlCommentStandard.setHorizontalGroup(
512             gl_pnlCommentStandard.createSequentialGroup()
513                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
514                     .addComponent(lblCommentSize)
515                     .addComponent(lblCommentMinSize)
516                     .addComponent(lblCommentDisplayMax))
517                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
518                     .addComponent(cbCommentSizeAuto)
519                     .addComponent(cbCommentMinSizeAuto)
520                     .addComponent(cbCommentDisplaySizeDefault))
521                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
522                     .addComponent(lblCommentSizeManual)
523                     .addComponent(lblCommentMinSizeManual)
524                     .addComponent(lblCommentDisplayMaxManual))
525                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
526                     .addComponent(fldCommentSizeManual, 48, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
527                     .addComponent(fldCommentMinSizeManual, 48, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
528                     .addComponent(fldCommentDisplaySizeManual, 48, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
529         );
530         gl_pnlCommentStandard.setVerticalGroup(
531             gl_pnlCommentStandard.createSequentialGroup()
532                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.BASELINE)
533                     .addComponent(lblCommentSize)
534                     .addComponent(cbCommentSizeAuto)
535                     .addComponent(lblCommentSizeManual)
536                     .addComponent(fldCommentSizeManual))
537                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.BASELINE)
538                     .addComponent(lblCommentMinSize)
539                     .addComponent(cbCommentMinSizeAuto)
540                     .addComponent(lblCommentMinSizeManual)
541                     .addComponent(fldCommentMinSizeManual))
542                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.BASELINE)
543                     .addComponent(lblCommentDisplayMax)
544                     .addComponent(cbCommentDisplaySizeDefault)
545                     .addComponent(lblCommentDisplayMaxManual)
546                     .addComponent(fldCommentDisplaySizeManual))
547         );
548
549         pnlCommentAdvanced.setBorder(BorderFactory.createTitledBorder("高度な設定"));
550
551         lblFontPath.setText("フォントパス");
552
553         cbFontSizeArrangeDisable.setText("フォントサイズ調整を行わない");
554
555         cbCommentOpaque.setText("コメント透明化を行わない");
556
557         btnFontPath.setText("...");
558
559         lblFontIndex.setText("フォント番号");
560
561         lblFontShadow.setText("影の種類");
562         final ComboBoxModel<String> cbmFontShadow
563                 = new DefaultComboBoxModel<>(new String[]{"0:なし", "1:ニコニコ動画風", "2:右下", "3:囲い込み"});
564         cmbFontShadow.setModel(cbmFontShadow);
565
566         GroupLayout gl_pnlCommentAdvanced = new GroupLayout(pnlCommentAdvanced);
567         pnlCommentAdvanced.setLayout(gl_pnlCommentAdvanced);
568         gl_pnlCommentAdvanced.setHorizontalGroup(
569             gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
570             .addGroup(gl_pnlCommentAdvanced.createSequentialGroup()
571                 .addContainerGap()
572                 .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
573                     .addComponent(cbCommentOpaque)
574                     .addGroup(gl_pnlCommentAdvanced.createSequentialGroup()
575                         .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
576                             .addComponent(lblFontPath)
577                             .addComponent(lblFontIndex)
578                             .addComponent(lblFontShadow))
579                         .addGap(18, 18, 18)
580                         .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
581                             .addComponent(fldFontPath, GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE)
582                             .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.TRAILING, false)
583                                 .addComponent(cmbFontShadow, GroupLayout.Alignment.LEADING)
584                                 .addComponent(fldFontIndex, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 48, Short.MAX_VALUE)))
585                         .addPreferredGap(ComponentPlacement.RELATED)
586                         .addComponent(btnFontPath))
587                     .addComponent(cbFontSizeArrangeDisable))
588                 .addContainerGap())
589         );
590         gl_pnlCommentAdvanced.setVerticalGroup(
591             gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
592             .addGroup(gl_pnlCommentAdvanced.createSequentialGroup()
593                 .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.BASELINE)
594                     .addComponent(lblFontPath)
595                     .addComponent(fldFontPath, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
596                     .addComponent(btnFontPath))
597                 .addPreferredGap(ComponentPlacement.RELATED)
598                 .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.BASELINE)
599                     .addComponent(lblFontIndex)
600                     .addComponent(fldFontIndex, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
601                 .addPreferredGap(ComponentPlacement.RELATED)
602                 .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.BASELINE)
603                     .addComponent(lblFontShadow)
604                     .addComponent(cmbFontShadow, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
605                 .addPreferredGap(ComponentPlacement.RELATED)
606                 .addComponent(cbFontSizeArrangeDisable)
607                 .addPreferredGap(ComponentPlacement.RELATED)
608                 .addComponent(cbCommentOpaque)
609                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
610         );
611
612         GroupLayout gl_pnlComment = new GroupLayout(pnlComment);
613         pnlComment.setLayout(gl_pnlComment);
614         gl_pnlComment.setHorizontalGroup(
615             gl_pnlComment.createParallelGroup(GroupLayout.Alignment.LEADING)
616             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlComment.createSequentialGroup()
617                 .addContainerGap()
618                 .addGroup(gl_pnlComment.createParallelGroup(GroupLayout.Alignment.TRAILING)
619                     .addComponent(pnlCommentAdvanced, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
620                     .addComponent(pnlCommentStandard, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
621                 .addContainerGap())
622         );
623         gl_pnlComment.setVerticalGroup(
624             gl_pnlComment.createParallelGroup(GroupLayout.Alignment.LEADING)
625             .addGroup(gl_pnlComment.createSequentialGroup()
626                 .addContainerGap()
627                 .addComponent(pnlCommentStandard, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
628                 .addPreferredGap(ComponentPlacement.RELATED)
629                 .addComponent(pnlCommentAdvanced, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
630                 .addContainerGap(168, Short.MAX_VALUE))
631         );
632
633         tabbedPane.addTab("コメント", pnlComment);
634
635         jPanel10.setBorder(BorderFactory.createTitledBorder("ファイルパス"));
636
637         lblFfmpegPath.setText("ffmpeg");
638
639         lblFfmpegDllPath.setText("拡張ライブラリ");
640
641         btnFfmpegPath.setText("...");
642
643         btnFfmpegDllPath.setText("...");
644
645         GroupLayout gl_jPanel10 = new GroupLayout(jPanel10);
646         jPanel10.setLayout(gl_jPanel10);
647         gl_jPanel10.setHorizontalGroup(
648             gl_jPanel10.createParallelGroup(GroupLayout.Alignment.LEADING)
649             .addGroup(gl_jPanel10.createSequentialGroup()
650                 .addContainerGap()
651                 .addGroup(gl_jPanel10.createParallelGroup(GroupLayout.Alignment.LEADING)
652                     .addComponent(lblFfmpegDllPath)
653                     .addComponent(lblFfmpegPath))
654                 .addPreferredGap(ComponentPlacement.RELATED)
655                 .addGroup(gl_jPanel10.createParallelGroup(GroupLayout.Alignment.LEADING)
656                     .addComponent(fldFfmpegDllPath, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 280, Short.MAX_VALUE)
657                     .addComponent(fldFfmpegPath, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 280, Short.MAX_VALUE))
658                 .addPreferredGap(ComponentPlacement.RELATED)
659                 .addGroup(gl_jPanel10.createParallelGroup(GroupLayout.Alignment.LEADING)
660                     .addComponent(btnFfmpegPath, GroupLayout.Alignment.TRAILING)
661                     .addComponent(btnFfmpegDllPath, GroupLayout.Alignment.TRAILING))
662                 .addContainerGap())
663         );
664         gl_jPanel10.setVerticalGroup(
665             gl_jPanel10.createParallelGroup(GroupLayout.Alignment.LEADING)
666             .addGroup(gl_jPanel10.createSequentialGroup()
667                 .addGroup(gl_jPanel10.createParallelGroup(GroupLayout.Alignment.BASELINE)
668                     .addComponent(lblFfmpegPath)
669                     .addComponent(fldFfmpegPath, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
670                     .addComponent(btnFfmpegPath))
671                 .addPreferredGap(ComponentPlacement.RELATED)
672                 .addGroup(gl_jPanel10.createParallelGroup(GroupLayout.Alignment.BASELINE)
673                     .addComponent(lblFfmpegDllPath)
674                     .addComponent(fldFfmpegDllPath, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
675                     .addComponent(btnFfmpegDllPath))
676                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
677         );
678
679         pnlFfmpegParam.setBorder(BorderFactory.createTitledBorder("ffmpegパラメータ"));
680
681         buttonGroup1.add(rbFfmpegOptionFile);
682         rbFfmpegOptionFile.setText("オプションファイル");
683
684         buttonGroup1.add(rbFfmpegOptionDirectInput);
685         rbFfmpegOptionDirectInput.setText("直接入力");
686
687         cmbFfmpegOptionFile.setModel(new DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
688
689         pnlFfmpegParamOption.setBorder(BorderFactory.createEtchedBorder());
690
691         lblFfmpegOptionExtension.setText("出力動画の拡張子");
692
693         lblFfmpegOptionMain.setText("メインオプション");
694
695         lblFfmpegOptionIn.setText("入力オプション");
696
697         lblFfmpegOptionOut.setText("出力オプション");
698
699         lblFfmpegOptionAvfilter.setText("avfilterオプション");
700
701         cbFfmpegOptionResize.setText("次のサイズに収まるよう縮小(-s)");
702
703         lblFfmpegOptionResizeWidth.setText("横");
704
705         lblFfmpegOptionResizeHeight.setText("縦");
706
707         cbFfmpegOptionKeepAspect.setText("アスペクト比を維持");
708
709         GroupLayout gl_pnlFfmpegParamOption = new GroupLayout(pnlFfmpegParamOption);
710         pnlFfmpegParamOption.setLayout(gl_pnlFfmpegParamOption);
711         gl_pnlFfmpegParamOption.setHorizontalGroup(
712             gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.LEADING)
713             .addGroup(gl_pnlFfmpegParamOption.createSequentialGroup()
714                 .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.LEADING)
715                     .addGroup(gl_pnlFfmpegParamOption.createSequentialGroup()
716                         .addContainerGap()
717                         .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.LEADING)
718                             .addComponent(lblFfmpegOptionAvfilter)
719                             .addComponent(lblFfmpegOptionExtension)
720                             .addComponent(lblFfmpegOptionMain)
721                             .addComponent(lblFfmpegOptionIn)
722                             .addComponent(lblFfmpegOptionOut))
723                         .addPreferredGap(ComponentPlacement.RELATED)
724                         .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.LEADING)
725                             .addComponent(fldFfmpegOptionExtension, GroupLayout.PREFERRED_SIZE, 51, GroupLayout.PREFERRED_SIZE)
726                             .addComponent(fldFfmpegOptionMain, GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE)
727                             .addComponent(fldFfmpegOptionIn, GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE)
728                             .addComponent(fldFfmpegOptionOut, GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE)
729                             .addComponent(fldFfmpegOptionAv, GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE)))
730                     .addGroup(gl_pnlFfmpegParamOption.createSequentialGroup()
731                         .addGap(12, 12, 12)
732                         .addComponent(cbFfmpegOptionResize)
733                         .addPreferredGap(ComponentPlacement.UNRELATED)
734                         .addComponent(lblFfmpegOptionResizeWidth)
735                         .addPreferredGap(ComponentPlacement.RELATED)
736                         .addComponent(fldFfmpegOptionResizeWidth, GroupLayout.PREFERRED_SIZE, 48, GroupLayout.PREFERRED_SIZE)
737                         .addGap(12, 12, 12)
738                         .addComponent(lblFfmpegOptionResizeHeight)
739                         .addPreferredGap(ComponentPlacement.RELATED)
740                         .addComponent(fldFfmpegOptionResizeHeight, GroupLayout.PREFERRED_SIZE, 48, GroupLayout.PREFERRED_SIZE))
741                     .addGroup(gl_pnlFfmpegParamOption.createSequentialGroup()
742                         .addGap(33, 33, 33)
743                         .addComponent(cbFfmpegOptionKeepAspect)))
744                 .addContainerGap())
745         );
746         gl_pnlFfmpegParamOption.setVerticalGroup(
747             gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.LEADING)
748             .addGroup(gl_pnlFfmpegParamOption.createSequentialGroup()
749                 .addContainerGap()
750                 .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
751                     .addComponent(lblFfmpegOptionExtension)
752                     .addComponent(fldFfmpegOptionExtension, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
753                 .addPreferredGap(ComponentPlacement.RELATED)
754                 .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
755                     .addComponent(lblFfmpegOptionMain)
756                     .addComponent(fldFfmpegOptionMain, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
757                 .addPreferredGap(ComponentPlacement.RELATED)
758                 .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
759                     .addComponent(lblFfmpegOptionIn)
760                     .addComponent(fldFfmpegOptionIn, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
761                 .addPreferredGap(ComponentPlacement.RELATED)
762                 .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
763                     .addComponent(lblFfmpegOptionOut)
764                     .addComponent(fldFfmpegOptionOut, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
765                 .addPreferredGap(ComponentPlacement.RELATED)
766                 .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
767                     .addComponent(lblFfmpegOptionAvfilter)
768                     .addComponent(fldFfmpegOptionAv, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
769                 .addPreferredGap(ComponentPlacement.RELATED)
770                 .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
771                     .addComponent(cbFfmpegOptionResize)
772                     .addComponent(lblFfmpegOptionResizeWidth)
773                     .addComponent(fldFfmpegOptionResizeWidth, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
774                     .addComponent(lblFfmpegOptionResizeHeight)
775                     .addComponent(fldFfmpegOptionResizeHeight, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
776                 .addPreferredGap(ComponentPlacement.RELATED)
777                 .addComponent(cbFfmpegOptionKeepAspect)
778                 .addContainerGap())
779         );
780
781         GroupLayout gl_pnlFfmpegParam = new GroupLayout(pnlFfmpegParam);
782         pnlFfmpegParam.setLayout(gl_pnlFfmpegParam);
783         gl_pnlFfmpegParam.setHorizontalGroup(
784             gl_pnlFfmpegParam.createParallelGroup(Alignment.LEADING)
785             .addGroup(gl_pnlFfmpegParam.createSequentialGroup()
786                 .addContainerGap()
787                 .addGroup(gl_pnlFfmpegParam.createParallelGroup(Alignment.LEADING)
788                     .addComponent(pnlFfmpegParamOption, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
789                     .addGroup(gl_pnlFfmpegParam.createSequentialGroup()
790                         .addComponent(rbFfmpegOptionFile)
791                         .addPreferredGap(ComponentPlacement.RELATED)
792                         .addComponent(cmbFfmpegOptionFile, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
793                     .addComponent(rbFfmpegOptionDirectInput))
794                 .addContainerGap())
795         );
796         gl_pnlFfmpegParam.setVerticalGroup(
797             gl_pnlFfmpegParam.createParallelGroup(Alignment.LEADING)
798             .addGroup(gl_pnlFfmpegParam.createSequentialGroup()
799                 .addContainerGap()
800                 .addGroup(gl_pnlFfmpegParam.createParallelGroup(Alignment.BASELINE)
801                     .addComponent(rbFfmpegOptionFile)
802                     .addComponent(cmbFfmpegOptionFile, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
803                 .addPreferredGap(ComponentPlacement.RELATED)
804                 .addComponent(rbFfmpegOptionDirectInput)
805                 .addPreferredGap(ComponentPlacement.RELATED)
806                 .addComponent(pnlFfmpegParamOption, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
807                 .addContainerGap())
808         );
809
810         GroupLayout gl_pnlFfmpeg = new GroupLayout(pnlFfmpeg);
811         pnlFfmpeg.setLayout(gl_pnlFfmpeg);
812         gl_pnlFfmpeg.setHorizontalGroup(
813             gl_pnlFfmpeg.createParallelGroup(GroupLayout.Alignment.LEADING)
814             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFfmpeg.createSequentialGroup()
815                 .addContainerGap()
816                 .addGroup(gl_pnlFfmpeg.createParallelGroup(GroupLayout.Alignment.TRAILING)
817                     .addComponent(pnlFfmpegParam, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
818                     .addComponent(jPanel10, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
819                 .addContainerGap())
820         );
821         gl_pnlFfmpeg.setVerticalGroup(
822             gl_pnlFfmpeg.createParallelGroup(GroupLayout.Alignment.LEADING)
823             .addGroup(gl_pnlFfmpeg.createSequentialGroup()
824                 .addContainerGap()
825                 .addComponent(jPanel10, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
826                 .addPreferredGap(ComponentPlacement.RELATED)
827                 .addComponent(pnlFfmpegParam, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
828                 .addContainerGap())
829         );
830
831         tabbedPane.addTab("ffmpeg", pnlFfmpeg);
832
833         pnlNgWord.setBorder(BorderFactory.createTitledBorder("NGワード"));
834
835         lstNgWord.setModel(mdlNgWord);
836         scrNgWord.setViewportView(lstNgWord);
837
838         btnNgWordAdd.setText("追加");
839
840         btnNgWordDel.setText("削除");
841
842         GroupLayout gl_pnlNgWord = new GroupLayout(pnlNgWord);
843         pnlNgWord.setLayout(gl_pnlNgWord);
844         gl_pnlNgWord.setHorizontalGroup(
845             gl_pnlNgWord.createParallelGroup(GroupLayout.Alignment.LEADING)
846             .addGroup(gl_pnlNgWord.createSequentialGroup()
847                 .addContainerGap()
848                 .addGroup(gl_pnlNgWord.createParallelGroup(GroupLayout.Alignment.LEADING)
849                     .addComponent(scrNgWord, GroupLayout.DEFAULT_SIZE, 395, Short.MAX_VALUE)
850                     .addGroup(gl_pnlNgWord.createSequentialGroup()
851                         .addComponent(fldNgWord, GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE)
852                         .addPreferredGap(ComponentPlacement.RELATED)
853                         .addComponent(btnNgWordAdd)
854                         .addGap(18, 18, 18)
855                         .addComponent(btnNgWordDel)))
856                 .addContainerGap())
857         );
858         gl_pnlNgWord.setVerticalGroup(
859             gl_pnlNgWord.createParallelGroup(GroupLayout.Alignment.LEADING)
860             .addGroup(gl_pnlNgWord.createSequentialGroup()
861                 .addComponent(scrNgWord, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
862                 .addPreferredGap(ComponentPlacement.RELATED)
863                 .addGroup(gl_pnlNgWord.createParallelGroup(GroupLayout.Alignment.BASELINE)
864                     .addComponent(fldNgWord, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
865                     .addComponent(btnNgWordDel)
866                     .addComponent(btnNgWordAdd))
867                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
868         );
869
870         pnlNgId.setBorder(BorderFactory.createTitledBorder("NGID"));
871
872         lstNgId.setModel(mdlNgId);
873         scrNgId.setViewportView(lstNgId);
874
875         btnNgIdAdd.setText("追加");
876
877         btnNgIdDel.setText("削除");
878
879         GroupLayout gl_pnlNgId = new GroupLayout(pnlNgId);
880         pnlNgId.setLayout(gl_pnlNgId);
881         gl_pnlNgId.setHorizontalGroup(
882             gl_pnlNgId.createParallelGroup(GroupLayout.Alignment.LEADING)
883             .addGroup(gl_pnlNgId.createSequentialGroup()
884                 .addContainerGap()
885                 .addGroup(gl_pnlNgId.createParallelGroup(GroupLayout.Alignment.LEADING)
886                     .addComponent(scrNgId, GroupLayout.DEFAULT_SIZE, 395, Short.MAX_VALUE)
887                     .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlNgId.createSequentialGroup()
888                         .addComponent(fldNgId, GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE)
889                         .addPreferredGap(ComponentPlacement.RELATED)
890                         .addComponent(btnNgIdAdd)
891                         .addGap(18, 18, 18)
892                         .addComponent(btnNgIdDel)))
893                 .addContainerGap())
894         );
895         gl_pnlNgId.setVerticalGroup(
896             gl_pnlNgId.createParallelGroup(GroupLayout.Alignment.LEADING)
897             .addGroup(gl_pnlNgId.createSequentialGroup()
898                 .addComponent(scrNgId, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
899                 .addPreferredGap(ComponentPlacement.RELATED)
900                 .addGroup(gl_pnlNgId.createParallelGroup(GroupLayout.Alignment.BASELINE)
901                     .addComponent(fldNgId, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
902                     .addComponent(btnNgIdDel)
903                     .addComponent(btnNgIdAdd))
904                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
905         );
906
907         GroupLayout gl_pnlNgSetting = new GroupLayout(pnlNgSetting);
908         pnlNgSetting.setLayout(gl_pnlNgSetting);
909         gl_pnlNgSetting.setHorizontalGroup(
910             gl_pnlNgSetting.createParallelGroup(GroupLayout.Alignment.LEADING)
911             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlNgSetting.createSequentialGroup()
912                 .addContainerGap()
913                 .addGroup(gl_pnlNgSetting.createParallelGroup(GroupLayout.Alignment.TRAILING)
914                     .addComponent(pnlNgId, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
915                     .addComponent(pnlNgWord, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
916                 .addContainerGap())
917         );
918         gl_pnlNgSetting.setVerticalGroup(
919             gl_pnlNgSetting.createParallelGroup(GroupLayout.Alignment.LEADING)
920             .addGroup(gl_pnlNgSetting.createSequentialGroup()
921                 .addContainerGap()
922                 .addComponent(pnlNgWord, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
923                 .addPreferredGap(ComponentPlacement.RELATED)
924                 .addComponent(pnlNgId, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
925                 .addContainerGap(82, Short.MAX_VALUE))
926         );
927
928         tabbedPane.addTab("NG設定", pnlNgSetting);
929
930         pnlSearchVideo.setBorder(BorderFactory.createTitledBorder("動画検索対象フォルダ"));
931
932         lstSearchVideo.setModel(mdlSearchVideo);
933         srcSearchVideo.setViewportView(lstSearchVideo);
934
935         btnSearchVideoAdd.setText("追加...");
936
937         btnSearchVideoDel.setText("削除");
938
939         GroupLayout gl_pnlSearchVideo = new GroupLayout(pnlSearchVideo);
940         pnlSearchVideo.setLayout(gl_pnlSearchVideo);
941         gl_pnlSearchVideo.setHorizontalGroup(
942             gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
943             .addComponent(srcSearchVideo, GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
944             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlSearchVideo.createSequentialGroup()
945                 .addContainerGap(269, Short.MAX_VALUE)
946                 .addComponent(btnSearchVideoAdd)
947                 .addGap(18, 18, 18)
948                 .addComponent(btnSearchVideoDel)
949                 .addContainerGap())
950         );
951         gl_pnlSearchVideo.setVerticalGroup(
952             gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
953             .addGroup(gl_pnlSearchVideo.createSequentialGroup()
954                 .addComponent(srcSearchVideo, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
955                 .addPreferredGap(ComponentPlacement.RELATED)
956                 .addGroup(gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
957                     .addComponent(btnSearchVideoDel)
958                     .addComponent(btnSearchVideoAdd))
959                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
960         );
961
962         pnlSearchComment.setBorder(BorderFactory.createTitledBorder("コメント検索対象フォルダ"));
963
964         lstSearchComment.setModel(mdlSearchComment);
965         srcSearchComment.setViewportView(lstSearchComment);
966
967         btnSearchCommentAdd.setText("追加...");
968
969         btnSearchCommentDel.setText("削除");
970
971         GroupLayout gl_pnlSearchComment = new GroupLayout(pnlSearchComment);
972         pnlSearchComment.setLayout(gl_pnlSearchComment);
973         gl_pnlSearchComment.setHorizontalGroup(
974             gl_pnlSearchComment.createParallelGroup(GroupLayout.Alignment.LEADING)
975             .addComponent(srcSearchComment, GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
976             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlSearchComment.createSequentialGroup()
977                 .addContainerGap(269, Short.MAX_VALUE)
978                 .addComponent(btnSearchCommentAdd)
979                 .addGap(18, 18, 18)
980                 .addComponent(btnSearchCommentDel)
981                 .addContainerGap())
982         );
983         gl_pnlSearchComment.setVerticalGroup(
984             gl_pnlSearchComment.createParallelGroup(GroupLayout.Alignment.LEADING)
985             .addGroup(gl_pnlSearchComment.createSequentialGroup()
986                 .addComponent(srcSearchComment, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
987                 .addPreferredGap(ComponentPlacement.RELATED)
988                 .addGroup(gl_pnlSearchComment.createParallelGroup(GroupLayout.Alignment.BASELINE)
989                     .addComponent(btnSearchCommentDel)
990                     .addComponent(btnSearchCommentAdd))
991                 .addContainerGap(16, Short.MAX_VALUE))
992         );
993
994         pnlSearchCache.setBorder(BorderFactory.createEtchedBorder());
995
996         lblSearchCache.setText("キャッシュ更新(秒)");
997
998         GroupLayout gl_pnlSearchCache = new GroupLayout(pnlSearchCache);
999         pnlSearchCache.setLayout(gl_pnlSearchCache);
1000         gl_pnlSearchCache.setHorizontalGroup(
1001             gl_pnlSearchCache.createParallelGroup(GroupLayout.Alignment.LEADING)
1002             .addGroup(gl_pnlSearchCache.createSequentialGroup()
1003                 .addContainerGap()
1004                 .addComponent(lblSearchCache)
1005                 .addPreferredGap(ComponentPlacement.RELATED)
1006                 .addComponent(fldSearchCache, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE)
1007                 .addContainerGap(269, Short.MAX_VALUE))
1008         );
1009         gl_pnlSearchCache.setVerticalGroup(
1010             gl_pnlSearchCache.createParallelGroup(GroupLayout.Alignment.LEADING)
1011             .addGroup(gl_pnlSearchCache.createSequentialGroup()
1012                 .addContainerGap()
1013                 .addGroup(gl_pnlSearchCache.createParallelGroup(GroupLayout.Alignment.BASELINE)
1014                     .addComponent(lblSearchCache)
1015                     .addComponent(fldSearchCache, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
1016                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
1017         );
1018
1019         GroupLayout gl_pnlSearch = new GroupLayout(pnlSearch);
1020         pnlSearch.setLayout(gl_pnlSearch);
1021         gl_pnlSearch.setHorizontalGroup(
1022             gl_pnlSearch.createParallelGroup(GroupLayout.Alignment.LEADING)
1023             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlSearch.createSequentialGroup()
1024                 .addContainerGap()
1025                 .addGroup(gl_pnlSearch.createParallelGroup(GroupLayout.Alignment.TRAILING)
1026                     .addComponent(pnlSearchCache, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
1027                     .addComponent(pnlSearchComment, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
1028                     .addComponent(pnlSearchVideo, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
1029                 .addContainerGap())
1030         );
1031         gl_pnlSearch.setVerticalGroup(
1032             gl_pnlSearch.createParallelGroup(GroupLayout.Alignment.LEADING)
1033             .addGroup(gl_pnlSearch.createSequentialGroup()
1034                 .addContainerGap()
1035                 .addComponent(pnlSearchVideo, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
1036                 .addPreferredGap(ComponentPlacement.RELATED)
1037                 .addComponent(pnlSearchComment, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
1038                 .addPreferredGap(ComponentPlacement.RELATED)
1039                 .addComponent(pnlSearchCache, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
1040                 .addContainerGap(27, Short.MAX_VALUE))
1041         );
1042
1043         tabbedPane.addTab("検索", pnlSearch);
1044
1045         final JPanel pnlButton = new JPanel();
1046         final JButton btnOk = new JButton("OK");
1047         btnOk.addActionListener(new ActionListener() {
1048
1049             @Override
1050             public void actionPerformed(ActionEvent e) {
1051                 saveConfig();
1052                 dispose();
1053             }
1054         });
1055         final JButton btnCancel = new JButton("Cancel");
1056         pnlButton.add(btnOk);
1057         pnlButton.add(btnCancel);
1058
1059         GroupLayout layout = new GroupLayout(getContentPane());
1060         getContentPane().setLayout(layout);
1061         layout.setHorizontalGroup(
1062             layout.createParallelGroup(GroupLayout.Alignment.LEADING)
1063             .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 460, Short.MAX_VALUE)
1064             .addComponent(pnlButton)
1065         );
1066         layout.setVerticalGroup(
1067             layout.createSequentialGroup()
1068                 .addComponent(tabbedPane,GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
1069                 .addComponent(pnlButton)
1070         );
1071
1072         pack();
1073         setResizable(false);
1074         loadConfig();
1075     }
1076
1077     /**
1078      * @param args the command line arguments
1079      */
1080     public static void main(String args[]) {
1081         /* Set the Nimbus look and feel */
1082         //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
1083         /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
1084          * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
1085          */
1086         try {
1087             for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
1088                 if ("Nimbus".equals(info.getName())) {
1089                     UIManager.setLookAndFeel(info.getClassName());
1090                     break;
1091                 }
1092             }
1093         } catch (ClassNotFoundException ex) {
1094             java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1095         } catch (InstantiationException ex) {
1096             java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1097         } catch (IllegalAccessException ex) {
1098             java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1099         } catch (UnsupportedLookAndFeelException ex) {
1100             java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1101         }
1102         //</editor-fold>
1103
1104         /* Create and display the form */
1105         java.awt.EventQueue.invokeLater(new Runnable() {
1106
1107             @Override
1108             public void run() {
1109                 new ConfigDialog().setVisible(true);
1110             }
1111         });
1112     }
1113     // Variables declaration - do not modify//GEN-BEGIN:variables
1114
1115     // ネットワーク
1116     // ネットワーク - アカウント
1117     private final JTextField fldMail;
1118     private final JTextField fldPassword;
1119     // ネットワーク - プロキシ
1120     private final JCheckBox cbProxyUse;
1121     private final JTextField fldProxyHost;
1122     private final JTextField fldProxyPort;
1123     // ファイル
1124     // ファイル - 動画
1125     private final JTextField fldVideoDir;
1126     private final JButton btnVideoDir;
1127     private final JTextField fldVideoFileNamePattern;
1128     private final JCheckBox cbVideoLocal;
1129     // ファイル - コメント
1130     private final JTextField fldCommentDir;
1131     private final JButton btnCommentDir;
1132     private final JTextField fldCommentFileNamePattern;
1133     private final JCheckBox cbCommentLocal;
1134     // ファイル - 変換動画
1135     private final JTextField fldOutputDir;
1136     private final JTextField fldOutputFileNamePattern;
1137     private final JButton btnOutputDir;
1138     private final JCheckBox cbOutputEnable;
1139     private final JCheckBox cbOutputCommentOverlay;
1140     private final JCheckBox cbOutputDisplayProgress;
1141     // ファイル - 禁則文字
1142     private final JTextField fldReplaceFrom = new JTextField();
1143     private final JTextField fldReplaceTo = new JTextField();
1144     // コメント
1145     // コメント
1146     private final JCheckBox cbCommentSizeAuto;
1147     private final JTextField fldCommentSizeManual;
1148     private final JCheckBox cbCommentMinSizeAuto;
1149     private final JTextField fldCommentMinSizeManual;
1150     private final JCheckBox cbCommentDisplaySizeDefault;
1151     private final JTextField fldCommentDisplaySizeManual;
1152     // コメント - 高度な設定
1153     private final JTextField fldFontPath;
1154     private final JButton btnFontPath;
1155     private final JTextField fldFontIndex;
1156     private final JComboBox<String> cmbFontShadow = new JComboBox<>();
1157     private final JCheckBox cbFontSizeArrangeDisable;
1158     private final JCheckBox cbCommentOpaque;
1159     // ffmpeg
1160     // ffmpeg - ファイルパス
1161     private final JTextField fldFfmpegPath;
1162     private final JButton btnFfmpegPath;
1163     private final JTextField fldFfmpegDllPath;
1164     private final JButton btnFfmpegDllPath;
1165     // ffmpeg - ffmpegパラメータ
1166     private final JRadioButton rbFfmpegOptionFile;
1167     private final JRadioButton rbFfmpegOptionDirectInput;
1168     private final JComboBox cmbFfmpegOptionFile;
1169     private final JTextField fldFfmpegOptionExtension;
1170     private final JTextField fldFfmpegOptionMain;
1171     private final JTextField fldFfmpegOptionIn;
1172     private final JTextField fldFfmpegOptionOut;
1173     private final JTextField fldFfmpegOptionAv;
1174     private final JCheckBox cbFfmpegOptionResize;
1175     private final JTextField fldFfmpegOptionResizeWidth;
1176     private final JTextField fldFfmpegOptionResizeHeight;
1177     private final JCheckBox cbFfmpegOptionKeepAspect;
1178     // NG設定
1179     // NG設定 - NGワード
1180     private final JList<String> lstNgWord;
1181     private final DefaultListModel<String> mdlNgWord = new DefaultListModel<>();
1182     private final JTextField fldNgWord;
1183     private final JButton btnNgWordAdd;
1184     private final JButton btnNgWordDel;
1185     // NG設定 - NGID
1186     private final JList<String> lstNgId;
1187     private final DefaultListModel<String> mdlNgId = new DefaultListModel<>();
1188     private final JTextField fldNgId;
1189     private final JButton btnNgIdAdd;
1190     private final JButton btnNgIdDel;
1191     // 検索
1192     // 検索 - 動画検索対象フォルダ
1193     private final JList<String> lstSearchVideo;
1194     private final DefaultListModel<String> mdlSearchVideo = new DefaultListModel<>();
1195     private final JButton btnSearchVideoAdd;
1196     private final JButton btnSearchVideoDel;
1197     // 検索 - コメント検索対象フォルダ
1198     private final JList<String> lstSearchComment;
1199     private final DefaultListModel<String> mdlSearchComment = new DefaultListModel<>();
1200     private final JButton btnSearchCommentAdd;
1201     private final JButton btnSearchCommentDel;
1202     // 検索 - キャッシュ更新(秒)
1203     private final JTextField fldSearchCache;
1204
1205
1206     // End of variables declaration//GEN-END:variables
1207
1208     private void loadConfig() {
1209         final Config p = Config.INSTANCE;
1210
1211         /*
1212          * ネットワーク - アカウント
1213          */
1214         fldMail.setText(p.getId());
1215         fldPassword.setText(p.getPassword());
1216
1217         /*
1218          * ネットワーク - プロキシ
1219          */
1220         cbProxyUse.setSelected(p.getProxyUse());
1221         fldProxyHost.setText(p.getProxyHost());
1222         fldProxyPort.setText(p.getProxyPort());
1223
1224         /*
1225          * ファイル - 動画
1226          */
1227         fldVideoDir.setText(p.getVideoDir());
1228         fldVideoFileNamePattern.setText(p.getVideoFileNamePattern());
1229         cbVideoLocal.setSelected(p.getVideoUseLocal());
1230
1231         /*
1232          * ファイル - コメント
1233          */
1234         fldCommentDir.setText(p.getCommentDir());
1235         fldCommentFileNamePattern.setText(p.getCommentFileNamePattern());
1236         cbCommentLocal.setSelected(p.getCommentUseLocal());
1237
1238         /*
1239          * ファイル - 変換動画
1240          */
1241         fldOutputDir.setText(p.getOutputDir());
1242         fldOutputFileNamePattern.setText(p.getOutputFileNamePattern());
1243         cbOutputEnable.setSelected(p.getOutputEnable());
1244         cbOutputCommentOverlay.setSelected(p.getOutputCommentOverlay());
1245         cbOutputDisplayProgress.setSelected(p.getOutputDisplayProgress());
1246
1247         /*
1248          * ファイル - 禁則文字
1249          */
1250         fldReplaceFrom.setText(p.getReplaceFrom());
1251         fldReplaceTo.setText(p.getReplaceTo());
1252
1253         /**
1254          * コメント
1255          */
1256         cbCommentSizeAuto.setSelected(p.getCommentSizeAutosize());
1257         fldCommentSizeManual.setText(p.getCommentSizeManual());
1258         cbCommentMinSizeAuto.setSelected(p.getCommentMinSizeAutosize());
1259         fldCommentSizeManual.setText(p.getCommentMinSizeManual());
1260         cbCommentDisplaySizeDefault.setSelected(p.getCommentDisplaySizeDefault());
1261         fldCommentDisplaySizeManual.setText(p.getCommentDisplaySizeManual());
1262
1263         /**
1264          * コメント - 高度な設定
1265          */
1266         fldFontPath.setText(p.getFontPath());
1267         fldFontIndex.setText(p.getFontIndex());
1268         cmbFontShadow.setSelectedIndex(p.getFontShadow());
1269         cbFontSizeArrangeDisable.setSelected(p.getFontSizeArrangeDisable());
1270         cbCommentOpaque.setSelected(p.getCommentOpaque());
1271
1272         /*
1273          * ffmpeg - ファイルパス
1274          */
1275         fldFfmpegPath.setText(p.getFfmpegPath());
1276         fldFfmpegDllPath.setText(p.getFfmpegDllPath());
1277
1278         /*
1279          * ffmpeg - ffmpegパラメータ
1280          */
1281         rbFfmpegOptionFile.setSelected(!p.getFfmpegParamInputDirect());
1282         rbFfmpegOptionDirectInput.setSelected(p.getFfmpegParamInputDirect());
1283         // TODO cmbFfmpegOptionFile
1284         fldFfmpegOptionExtension.setText(p.getFfmpegExtension());
1285         fldFfmpegOptionMain.setText(p.getFfmpegMainOption());
1286         fldFfmpegOptionIn.setText(p.getFfmpegInOption());
1287         fldFfmpegOptionOut.setText(p.getFfmpegOutOption());
1288         fldFfmpegOptionAv.setText(p.getFfmpegAvOption());
1289         cbFfmpegOptionResize.setSelected(p.getFfmpegResizeEnable());
1290         fldFfmpegOptionResizeWidth.setText(p.getFfmpegResizeWidth());
1291         fldFfmpegOptionResizeHeight.setText(p.getFfmpegResizeHeight());
1292         cbFfmpegOptionKeepAspect.setSelected(p.getFfmpegKeepAspect());
1293
1294         /*
1295          * NG 設定
1296          */
1297         final List<String> ngWords = p.getNgWords();
1298         for (String s : ngWords) {
1299             mdlNgWord.addElement(s);
1300         }
1301         final List<String> ngIds = p.getNgIds();
1302         for (String s : ngIds) {
1303             mdlNgId.addElement(s);
1304         }
1305     }
1306     private void saveConfig() {
1307         final Config p = Config.INSTANCE;
1308
1309         /*
1310          * ネットワーク - アカウント
1311          */
1312
1313         p.setId(fldMail.getText());
1314         p.setPassword(fldPassword.getText());
1315
1316         /*
1317          * ネットワーク - プロキシ
1318          */
1319         p.setProxyUse(cbProxyUse.isSelected());
1320         p.setProxyHost(fldProxyHost.getText());
1321         p.setProxyPort(fldProxyPort.getText());
1322
1323         /*
1324          * ファイル - 動画
1325          */
1326         p.setVideoDir(fldVideoDir.getText());
1327         p.setVideoFileNamePattern(fldVideoFileNamePattern.getText());
1328         p.setVideoUseLocal(cbVideoLocal.isSelected());
1329
1330         /*
1331          * ファイル - コメント
1332          */
1333         p.setCommentDir(fldCommentDir.getText());
1334         p.setCommentFileNamePattern(fldCommentFileNamePattern.getText());
1335         p.setCommentUseLocal(cbCommentLocal.isSelected());
1336
1337         /*
1338          * ファイル - 変換動画
1339          */
1340         p.setOutputDir(fldOutputDir.getText());
1341         p.setOutputFileNamePattern(fldOutputFileNamePattern.getText());
1342         p.setOutputEnable(cbOutputEnable.isSelected());
1343         p.setOutputCommentOverlay(cbOutputCommentOverlay.isSelected());
1344         p.setOutputDisplayProgress(cbOutputDisplayProgress.isSelected());
1345
1346         /*
1347          * ファイル - 禁則文字
1348          */
1349         p.setReplaceFrom(fldReplaceFrom.getText());
1350         p.setReplaceTo(fldReplaceTo.getText());
1351
1352         /*
1353          * コメント
1354          */
1355         p.setCommentSizeAutosize(cbCommentSizeAuto.isSelected());
1356         p.setCommentSizeManual(fldCommentSizeManual.getText());
1357         p.setCommentMinSizeAutosize(cbCommentMinSizeAuto.isSelected());
1358         p.setCommentMinSizeManual(fldCommentSizeManual.getText());
1359         p.setCommentDisplaySizeDefault(cbCommentDisplaySizeDefault.isSelected());
1360         p.setCommentDisplaySizeManual(fldCommentDisplaySizeManual.getText());
1361
1362         /**
1363          * コメント - 高度な設定
1364          */
1365         p.setFontPath(fldFontPath.getText());
1366         p.setFontIndex(fldFontIndex.getText());
1367         p.setFontShadow(cmbFontShadow.getSelectedIndex());
1368         p.setFontSizeArrangeDisable(cbFontSizeArrangeDisable.isSelected());
1369         p.setCommentOpaque(cbCommentOpaque.isSelected());
1370
1371         /*
1372          * ffmpeg - ファイルパス
1373          */
1374         p.setFfmpegPath(fldFfmpegPath.getText());
1375         p.setFfmpegDllPath(fldFfmpegDllPath.getText());
1376
1377         /*
1378          * ffmpeg - ffmpegパラメータ
1379          */
1380         p.setFfmpegParamInputDirect(rbFfmpegOptionDirectInput.isSelected());
1381         // TODO cmbFfmpegOptionFile
1382         p.setFfmpegExtension(fldFfmpegOptionExtension.getText());
1383         p.setFfmpegMainOption(fldFfmpegOptionMain.getText());
1384         p.setFfmpegInOption(fldFfmpegOptionIn.getText());
1385         p.setFfmpegOutOption(fldFfmpegOptionOut.getText());
1386         p.setFfmpegAvOption(fldFfmpegOptionAv.getText());
1387         p.setFfmpegResizeEnable(cbFfmpegOptionResize.isSelected());
1388         p.setFfmpegResizeWidth(fldFfmpegOptionResizeWidth.getText());
1389         p.setFfmpegResizeHeight(fldFfmpegOptionResizeHeight.getText());
1390         p.setFfmpegKeepAspect(cbFfmpegOptionKeepAspect.isSelected());
1391
1392         /*
1393          * NG 設定
1394          */
1395         p.setNgWords(Arrays.asList((String[]) mdlNgWord.toArray()));
1396         p.setNgIds(Arrays.asList((String[])mdlNgId.toArray()));
1397
1398     }
1399 }