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 static javax.swing.GroupLayout.DEFAULT_SIZE;
9 import static javax.swing.GroupLayout.PREFERRED_SIZE;
10
11 import java.awt.event.ActionEvent;
12 import java.awt.event.ActionListener;
13 import java.io.File;
14 import java.util.List;
15 import java.util.logging.Level;
16 import java.util.logging.Logger;
17 import javax.swing.BorderFactory;
18 import javax.swing.ComboBoxModel;
19 import javax.swing.DefaultComboBoxModel;
20 import javax.swing.GroupLayout;
21 import javax.swing.GroupLayout.Alignment;
22 import javax.swing.JButton;
23 import javax.swing.JCheckBox;
24 import javax.swing.JComboBox;
25 import javax.swing.JDialog;
26 import javax.swing.JFrame;
27 import javax.swing.JLabel;
28 import javax.swing.JPanel;
29 import javax.swing.JTabbedPane;
30 import javax.swing.JTextField;
31 import javax.swing.LayoutStyle.ComponentPlacement;
32 import javax.swing.UIManager;
33 import javax.swing.UnsupportedLookAndFeelException;
34 import javax.swing.WindowConstants;
35 import org.apache.commons.configuration.ConfigurationException;
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     private static final Logger logger = Logger.getLogger(ConfigDialog.class.getName());
45
46     /** Creates new form Properties */
47     public ConfigDialog() {
48         this(null);
49     }
50
51     public ConfigDialog(JFrame owner){
52         super(owner);
53
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 pnlNgSetting = new JPanel();
123         final JPanel pnlSearch = new JPanel();
124         final JPanel pnlSearchCache = new JPanel();
125         final JLabel lblSearchCache = new JLabel();
126         fldSearchCache = new JTextField();
127
128         setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
129
130         pnlNetwork.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
131
132         pnlAccount.setBorder(BorderFactory.createTitledBorder("アカウント"));
133
134         lblMail.setText("ID(メールアドレス)");
135
136         lblPassword.setText("パスワード");
137
138         GroupLayout gl_pnlAccount = new GroupLayout(pnlAccount);
139         pnlAccount.setLayout(gl_pnlAccount);
140         gl_pnlAccount.setHorizontalGroup(
141             gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.LEADING)
142             .addGroup(gl_pnlAccount.createSequentialGroup()
143                 .addContainerGap()
144                 .addGroup(gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.LEADING)
145                     .addComponent(lblMail)
146                     .addComponent(lblPassword))
147                 .addPreferredGap(ComponentPlacement.RELATED)
148                 .addGroup(gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.LEADING)
149                     .addComponent(fldPassword, GroupLayout.DEFAULT_SIZE, 306, Short.MAX_VALUE)
150                     .addComponent(fldMail, GroupLayout.DEFAULT_SIZE, 306, Short.MAX_VALUE))
151                 .addContainerGap())
152         );
153         gl_pnlAccount.setVerticalGroup(
154             gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.LEADING)
155             .addGroup(gl_pnlAccount.createSequentialGroup()
156                 .addContainerGap()
157                 .addGroup(gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.BASELINE)
158                     .addComponent(lblMail)
159                     .addComponent(fldMail, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
160                 .addPreferredGap(ComponentPlacement.RELATED)
161                 .addGroup(gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.BASELINE)
162                     .addComponent(lblPassword)
163                     .addComponent(fldPassword, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
164                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
165         );
166
167         pnlProxy.setBorder(BorderFactory.createTitledBorder("プロキシ"));
168
169         cbProxyUse.setText("プロキシを使用する");
170
171         lblProxyHost.setText("ホスト名");
172
173         lblProxyPort.setText("ポート番号");
174
175         GroupLayout gl_pnlProxy = new GroupLayout(pnlProxy);
176         pnlProxy.setLayout(gl_pnlProxy);
177         gl_pnlProxy.setHorizontalGroup(
178             gl_pnlProxy.createParallelGroup(GroupLayout.Alignment.LEADING)
179             .addGroup(gl_pnlProxy.createSequentialGroup()
180                 .addContainerGap()
181                 .addGroup(gl_pnlProxy.createParallelGroup(GroupLayout.Alignment.LEADING)
182                     .addComponent(cbProxyUse)
183                     .addGroup(gl_pnlProxy.createSequentialGroup()
184                         .addComponent(lblProxyHost)
185                         .addGap(18, 18, 18)
186                         .addComponent(fldProxyHost, GroupLayout.PREFERRED_SIZE, 168, GroupLayout.PREFERRED_SIZE))
187                     .addGroup(gl_pnlProxy.createSequentialGroup()
188                         .addComponent(lblProxyPort)
189                         .addPreferredGap(ComponentPlacement.RELATED)
190                         .addComponent(fldProxyPort, GroupLayout.PREFERRED_SIZE, 76, GroupLayout.PREFERRED_SIZE)))
191                 .addContainerGap(181, Short.MAX_VALUE))
192         );
193         gl_pnlProxy.setVerticalGroup(
194             gl_pnlProxy.createParallelGroup(GroupLayout.Alignment.LEADING)
195             .addGroup(gl_pnlProxy.createSequentialGroup()
196                 .addContainerGap()
197                 .addComponent(cbProxyUse)
198                 .addPreferredGap(ComponentPlacement.RELATED)
199                 .addGroup(gl_pnlProxy.createParallelGroup(GroupLayout.Alignment.BASELINE)
200                     .addComponent(lblProxyHost)
201                     .addComponent(fldProxyHost, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
202                 .addPreferredGap(ComponentPlacement.RELATED)
203                 .addGroup(gl_pnlProxy.createParallelGroup(GroupLayout.Alignment.BASELINE)
204                     .addComponent(lblProxyPort)
205                     .addComponent(fldProxyPort, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
206                 .addContainerGap(39, Short.MAX_VALUE))
207         );
208
209         GroupLayout gl_pnlNetwork = new GroupLayout(pnlNetwork);
210         pnlNetwork.setLayout(gl_pnlNetwork);
211         gl_pnlNetwork.setHorizontalGroup(
212             gl_pnlNetwork.createParallelGroup(GroupLayout.Alignment.LEADING)
213             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlNetwork.createSequentialGroup()
214                 .addContainerGap()
215                 .addGroup(gl_pnlNetwork.createParallelGroup(GroupLayout.Alignment.TRAILING)
216                     .addComponent(pnlProxy, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
217                     .addComponent(pnlAccount, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
218                 .addContainerGap())
219         );
220         gl_pnlNetwork.setVerticalGroup(
221             gl_pnlNetwork.createParallelGroup(GroupLayout.Alignment.LEADING)
222             .addGroup(gl_pnlNetwork.createSequentialGroup()
223                 .addContainerGap()
224                 .addComponent(pnlAccount, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
225                 .addPreferredGap(ComponentPlacement.RELATED)
226                 .addComponent(pnlProxy, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
227                 .addContainerGap(178, Short.MAX_VALUE))
228         );
229
230         tabbedPane.addTab("ネットワーク", pnlNetwork);
231
232         pnlFileVideo.setBorder(BorderFactory.createTitledBorder("動画"));
233
234         lblVideoDir.setText("保存フォルダ");
235
236         lblVideoFileNamepattern.setText("ファイル名規則");
237
238         btnVideoDir.setText("...");
239
240         cbVideoLocal.setText("local");
241
242         GroupLayout gl_pnlFileVideo = new GroupLayout(pnlFileVideo);
243         pnlFileVideo.setLayout(gl_pnlFileVideo);
244         gl_pnlFileVideo.setHorizontalGroup(
245             gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
246             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFileVideo.createSequentialGroup()
247                 .addContainerGap()
248                 .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
249                     .addComponent(lblVideoFileNamepattern)
250                     .addComponent(lblVideoDir))
251                 .addPreferredGap(ComponentPlacement.RELATED)
252                 .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
253                     .addGroup(gl_pnlFileVideo.createSequentialGroup()
254                         .addComponent(fldVideoDir, GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
255                         .addPreferredGap(ComponentPlacement.RELATED)
256                         .addComponent(btnVideoDir))
257                     .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFileVideo.createSequentialGroup()
258                         .addComponent(fldVideoFileNamePattern, GroupLayout.PREFERRED_SIZE, 165, GroupLayout.PREFERRED_SIZE)
259                         .addPreferredGap(ComponentPlacement.RELATED, 94, Short.MAX_VALUE)
260                         .addComponent(cbVideoLocal)))
261                 .addContainerGap())
262         );
263         gl_pnlFileVideo.setVerticalGroup(
264             gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
265             .addGroup(gl_pnlFileVideo.createSequentialGroup()
266                 .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
267                     .addComponent(lblVideoDir)
268                     .addComponent(fldVideoDir, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
269                     .addComponent(btnVideoDir))
270                 .addPreferredGap(ComponentPlacement.RELATED)
271                 .addGroup(gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
272                     .addComponent(lblVideoFileNamepattern)
273                     .addComponent(fldVideoFileNamePattern, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
274                     .addComponent(cbVideoLocal))
275                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
276         );
277
278         pnlFileComment.setBorder(BorderFactory.createTitledBorder("コメント"));
279
280         lblCommentDir.setText("保存フォルダ");
281
282         lblCommentFileNamePattern.setText("ファイル名規則");
283
284         btnCommentDir.setText("...");
285
286         cbCommentLocal.setText("local");
287
288         GroupLayout gl_pnlFileComment = new GroupLayout(pnlFileComment);
289         pnlFileComment.setLayout(gl_pnlFileComment);
290         gl_pnlFileComment.setHorizontalGroup(
291             gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
292             .addGroup(gl_pnlFileComment.createSequentialGroup()
293                 .addContainerGap()
294                 .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
295                     .addComponent(lblCommentFileNamePattern)
296                     .addComponent(lblCommentDir))
297                 .addPreferredGap(ComponentPlacement.RELATED)
298                 .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
299                     .addGroup(gl_pnlFileComment.createSequentialGroup()
300                         .addComponent(fldCommentFileNamePattern, GroupLayout.PREFERRED_SIZE, 166, GroupLayout.PREFERRED_SIZE)
301                         .addPreferredGap(ComponentPlacement.RELATED, 93, Short.MAX_VALUE)
302                         .addComponent(cbCommentLocal))
303                     .addGroup(gl_pnlFileComment.createSequentialGroup()
304                         .addComponent(fldCommentDir, GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
305                         .addPreferredGap(ComponentPlacement.RELATED)
306                         .addComponent(btnCommentDir)))
307                 .addContainerGap())
308         );
309         gl_pnlFileComment.setVerticalGroup(
310             gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
311             .addGroup(gl_pnlFileComment.createSequentialGroup()
312                 .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.BASELINE)
313                     .addComponent(lblCommentDir)
314                     .addComponent(fldCommentDir, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
315                     .addComponent(btnCommentDir))
316                 .addPreferredGap(ComponentPlacement.RELATED)
317                 .addGroup(gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.BASELINE)
318                     .addComponent(lblCommentFileNamePattern)
319                     .addComponent(fldCommentFileNamePattern, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
320                     .addComponent(cbCommentLocal))
321                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
322         );
323
324         pnlFileOutput.setBorder(BorderFactory.createTitledBorder("変換動画"));
325
326         lblOutputDir.setText("保存フォルダ");
327
328         lblOutputFileNamePattern.setText("ファイル名規則");
329
330         btnOutputDir.setText("...");
331
332         cbOutputEnable.setText("変換");
333
334         cbOutputCommentOverlay.setText("コメント付与");
335
336         cbOutputDisplayProgress.setText("変換中動画表示");
337
338         GroupLayout gl_pnlFileOutput = new GroupLayout(pnlFileOutput);
339         pnlFileOutput.setLayout(gl_pnlFileOutput);
340         gl_pnlFileOutput.setHorizontalGroup(
341             gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.LEADING)
342             .addGroup(gl_pnlFileOutput.createSequentialGroup()
343                 .addContainerGap()
344                 .addGroup(gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.LEADING)
345                     .addComponent(lblOutputFileNamePattern)
346                     .addComponent(lblOutputDir))
347                 .addPreferredGap(ComponentPlacement.RELATED)
348                 .addGroup(gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.LEADING)
349                     .addGroup(gl_pnlFileOutput.createSequentialGroup()
350                         .addComponent(fldOutputDir, GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
351                         .addPreferredGap(ComponentPlacement.RELATED)
352                         .addComponent(btnOutputDir)
353                         .addContainerGap())
354                     .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFileOutput.createSequentialGroup()
355                         .addComponent(fldOutputFileNamePattern, GroupLayout.PREFERRED_SIZE, 167, GroupLayout.PREFERRED_SIZE)
356                         .addPreferredGap(ComponentPlacement.RELATED, 23, Short.MAX_VALUE)
357                         .addGroup(gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.LEADING)
358                             .addComponent(cbOutputDisplayProgress)
359                             .addGroup(gl_pnlFileOutput.createSequentialGroup()
360                                 .addComponent(cbOutputEnable)
361                                 .addPreferredGap(ComponentPlacement.RELATED)
362                                 .addComponent(cbOutputCommentOverlay))))))
363         );
364         gl_pnlFileOutput.setVerticalGroup(
365             gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.LEADING)
366             .addGroup(gl_pnlFileOutput.createSequentialGroup()
367                 .addGroup(gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.BASELINE)
368                     .addComponent(lblOutputDir)
369                     .addComponent(fldOutputDir, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
370                     .addComponent(btnOutputDir))
371                 .addPreferredGap(ComponentPlacement.RELATED)
372                 .addGroup(gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.BASELINE)
373                     .addComponent(lblOutputFileNamePattern)
374                     .addComponent(fldOutputFileNamePattern, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
375                     .addComponent(cbOutputCommentOverlay)
376                     .addComponent(cbOutputEnable))
377                 .addPreferredGap(ComponentPlacement.RELATED)
378                 .addComponent(cbOutputDisplayProgress)
379                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
380         );
381
382         final JPanel pnlFileProhibit = new JPanel();
383         pnlFileProhibit.setBorder(BorderFactory.createTitledBorder("禁則文字"));
384         final JLabel lblReplaceFrom = new JLabel("置換対象文字");
385         final JLabel lblReplaceTo = new JLabel("置換後文字");
386
387         final GroupLayout glProhibit = new GroupLayout(pnlFileProhibit);
388         glProhibit.setAutoCreateContainerGaps(true);
389         glProhibit.setAutoCreateGaps(true);
390         pnlFileProhibit.setLayout(glProhibit);
391
392         glProhibit.setHorizontalGroup(glProhibit.createSequentialGroup()
393             .addGroup(glProhibit.createParallelGroup()
394                 .addComponent(lblReplaceFrom)
395                 .addComponent(lblReplaceTo)
396             )
397             .addGroup(glProhibit.createParallelGroup()
398                 .addComponent(fldReplaceFrom)
399                 .addComponent(fldReplaceTo)
400             )
401         );
402
403         glProhibit.setVerticalGroup(glProhibit.createSequentialGroup()
404             .addGroup(glProhibit.createParallelGroup(Alignment.BASELINE)
405                 .addComponent(lblReplaceFrom)
406                 .addComponent(fldReplaceFrom)
407             )
408             .addGroup(glProhibit.createParallelGroup(Alignment.BASELINE)
409                 .addComponent(lblReplaceTo)
410                 .addComponent(fldReplaceTo)
411             )
412         );
413
414         GroupLayout gl_pnlFile = new GroupLayout(pnlFile);
415         pnlFile.setLayout(gl_pnlFile);
416         gl_pnlFile.setHorizontalGroup(
417             gl_pnlFile.createParallelGroup(GroupLayout.Alignment.LEADING)
418             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFile.createSequentialGroup()
419                 .addContainerGap()
420                 .addGroup(gl_pnlFile.createParallelGroup(GroupLayout.Alignment.TRAILING)
421                     .addComponent(pnlFileOutput, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
422                     .addComponent(pnlFileVideo, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
423                     .addComponent(pnlFileComment, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
424                     .addComponent(pnlFileProhibit, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
425                 )
426                 .addContainerGap())
427         );
428         gl_pnlFile.setVerticalGroup(
429             gl_pnlFile.createParallelGroup(GroupLayout.Alignment.LEADING)
430             .addGroup(gl_pnlFile.createSequentialGroup()
431                 .addContainerGap()
432                 .addComponent(pnlFileVideo, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
433                 .addPreferredGap(ComponentPlacement.RELATED)
434                 .addComponent(pnlFileComment, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
435                 .addPreferredGap(ComponentPlacement.RELATED)
436                 .addComponent(pnlFileOutput, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
437                 .addPreferredGap(ComponentPlacement.RELATED)
438                 .addComponent(pnlFileProhibit, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
439                 .addContainerGap())
440         );
441
442         tabbedPane.addTab("ファイル", pnlFile);
443
444         pnlCommentStandard.setBorder(BorderFactory.createTitledBorder(""));
445
446         lblCommentSize.setText("再生時間に応じたコメントの取得数");
447
448         cbCommentSizeAuto.setText("自動調整");
449
450         lblCommentSizeManual.setText("手動取得");
451
452         lblCommentMinSize.setText("1分当たりのコメント取得数");
453
454         cbCommentMinSizeAuto.setText("自動調整");
455
456         lblCommentMinSizeManual.setText("手動取得");
457
458         lblCommentDisplayMax.setText("1画面に表示する最大コメント数");
459
460         cbCommentDisplaySizeDefault.setText("標準(30)");
461
462         lblCommentDisplayMaxManual.setText("手動設定");
463
464         GroupLayout gl_pnlCommentStandard = new GroupLayout(pnlCommentStandard);
465         pnlCommentStandard.setLayout(gl_pnlCommentStandard);
466         gl_pnlCommentStandard.setAutoCreateContainerGaps(true);
467         gl_pnlCommentStandard.setAutoCreateGaps(true);
468         gl_pnlCommentStandard.setHorizontalGroup(
469             gl_pnlCommentStandard.createSequentialGroup()
470                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
471                     .addComponent(lblCommentSize)
472                     .addComponent(lblCommentMinSize)
473                     .addComponent(lblCommentDisplayMax))
474                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
475                     .addComponent(cbCommentSizeAuto)
476                     .addComponent(cbCommentMinSizeAuto)
477                     .addComponent(cbCommentDisplaySizeDefault))
478                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
479                     .addComponent(lblCommentSizeManual)
480                     .addComponent(lblCommentMinSizeManual)
481                     .addComponent(lblCommentDisplayMaxManual))
482                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
483                     .addComponent(fldCommentSizeManual, 48, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
484                     .addComponent(fldCommentMinSizeManual, 48, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
485                     .addComponent(fldCommentDisplaySizeManual, 48, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
486         );
487         gl_pnlCommentStandard.setVerticalGroup(
488             gl_pnlCommentStandard.createSequentialGroup()
489                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.BASELINE)
490                     .addComponent(lblCommentSize)
491                     .addComponent(cbCommentSizeAuto)
492                     .addComponent(lblCommentSizeManual)
493                     .addComponent(fldCommentSizeManual))
494                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.BASELINE)
495                     .addComponent(lblCommentMinSize)
496                     .addComponent(cbCommentMinSizeAuto)
497                     .addComponent(lblCommentMinSizeManual)
498                     .addComponent(fldCommentMinSizeManual))
499                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.BASELINE)
500                     .addComponent(lblCommentDisplayMax)
501                     .addComponent(cbCommentDisplaySizeDefault)
502                     .addComponent(lblCommentDisplayMaxManual)
503                     .addComponent(fldCommentDisplaySizeManual))
504         );
505
506         pnlCommentAdvanced.setBorder(BorderFactory.createTitledBorder("高度な設定"));
507
508         lblFontPath.setText("フォントパス");
509
510         cbFontSizeArrangeDisable.setText("フォントサイズ調整を行わない");
511
512         cbCommentOpaque.setText("コメント透明化を行わない");
513
514         btnFontPath.setText("...");
515
516         lblFontIndex.setText("フォント番号");
517
518         lblFontShadow.setText("影の種類");
519         final ComboBoxModel<String> cbmFontShadow
520                 = new DefaultComboBoxModel<>(new String[]{"0:なし", "1:ニコニコ動画風", "2:右下", "3:囲い込み"});
521         cmbFontShadow.setModel(cbmFontShadow);
522
523         GroupLayout gl_pnlCommentAdvanced = new GroupLayout(pnlCommentAdvanced);
524         pnlCommentAdvanced.setLayout(gl_pnlCommentAdvanced);
525         gl_pnlCommentAdvanced.setHorizontalGroup(
526             gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
527             .addGroup(gl_pnlCommentAdvanced.createSequentialGroup()
528                 .addContainerGap()
529                 .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
530                     .addComponent(cbCommentOpaque)
531                     .addGroup(gl_pnlCommentAdvanced.createSequentialGroup()
532                         .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
533                             .addComponent(lblFontPath)
534                             .addComponent(lblFontIndex)
535                             .addComponent(lblFontShadow))
536                         .addGap(18, 18, 18)
537                         .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
538                             .addComponent(fldFontPath, GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE)
539                             .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.TRAILING, false)
540                                 .addComponent(cmbFontShadow, GroupLayout.Alignment.LEADING)
541                                 .addComponent(fldFontIndex, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 48, Short.MAX_VALUE)))
542                         .addPreferredGap(ComponentPlacement.RELATED)
543                         .addComponent(btnFontPath))
544                     .addComponent(cbFontSizeArrangeDisable))
545                 .addContainerGap())
546         );
547         gl_pnlCommentAdvanced.setVerticalGroup(
548             gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
549             .addGroup(gl_pnlCommentAdvanced.createSequentialGroup()
550                 .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.BASELINE)
551                     .addComponent(lblFontPath)
552                     .addComponent(fldFontPath, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
553                     .addComponent(btnFontPath))
554                 .addPreferredGap(ComponentPlacement.RELATED)
555                 .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.BASELINE)
556                     .addComponent(lblFontIndex)
557                     .addComponent(fldFontIndex, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
558                 .addPreferredGap(ComponentPlacement.RELATED)
559                 .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.BASELINE)
560                     .addComponent(lblFontShadow)
561                     .addComponent(cmbFontShadow, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
562                 .addPreferredGap(ComponentPlacement.RELATED)
563                 .addComponent(cbFontSizeArrangeDisable)
564                 .addPreferredGap(ComponentPlacement.RELATED)
565                 .addComponent(cbCommentOpaque)
566                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
567         );
568
569         GroupLayout gl_pnlComment = new GroupLayout(pnlComment);
570         pnlComment.setLayout(gl_pnlComment);
571         gl_pnlComment.setHorizontalGroup(
572             gl_pnlComment.createParallelGroup(GroupLayout.Alignment.LEADING)
573             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlComment.createSequentialGroup()
574                 .addContainerGap()
575                 .addGroup(gl_pnlComment.createParallelGroup(GroupLayout.Alignment.TRAILING)
576                     .addComponent(pnlCommentAdvanced, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
577                     .addComponent(pnlCommentStandard, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
578                 .addContainerGap())
579         );
580         gl_pnlComment.setVerticalGroup(
581             gl_pnlComment.createParallelGroup(GroupLayout.Alignment.LEADING)
582             .addGroup(gl_pnlComment.createSequentialGroup()
583                 .addContainerGap()
584                 .addComponent(pnlCommentStandard, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
585                 .addPreferredGap(ComponentPlacement.RELATED)
586                 .addComponent(pnlCommentAdvanced, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
587                 .addContainerGap(168, Short.MAX_VALUE))
588         );
589
590         tabbedPane.addTab("コメント", pnlComment);
591
592         jPanel10.setBorder(BorderFactory.createTitledBorder("ファイルパス"));
593
594         lblFfmpegPath.setText("ffmpeg");
595
596         lblFfmpegDllPath.setText("拡張ライブラリ");
597
598         btnFfmpegPath.setText("...");
599
600         btnFfmpegDllPath.setText("...");
601
602         GroupLayout gl_jPanel10 = new GroupLayout(jPanel10);
603         jPanel10.setLayout(gl_jPanel10);
604         gl_jPanel10.setHorizontalGroup(
605             gl_jPanel10.createParallelGroup(GroupLayout.Alignment.LEADING)
606             .addGroup(gl_jPanel10.createSequentialGroup()
607                 .addContainerGap()
608                 .addGroup(gl_jPanel10.createParallelGroup(GroupLayout.Alignment.LEADING)
609                     .addComponent(lblFfmpegDllPath)
610                     .addComponent(lblFfmpegPath))
611                 .addPreferredGap(ComponentPlacement.RELATED)
612                 .addGroup(gl_jPanel10.createParallelGroup(GroupLayout.Alignment.LEADING)
613                     .addComponent(fldFfmpegDllPath, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 280, Short.MAX_VALUE)
614                     .addComponent(fldFfmpegPath, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 280, Short.MAX_VALUE))
615                 .addPreferredGap(ComponentPlacement.RELATED)
616                 .addGroup(gl_jPanel10.createParallelGroup(GroupLayout.Alignment.LEADING)
617                     .addComponent(btnFfmpegPath, GroupLayout.Alignment.TRAILING)
618                     .addComponent(btnFfmpegDllPath, GroupLayout.Alignment.TRAILING))
619                 .addContainerGap())
620         );
621         gl_jPanel10.setVerticalGroup(
622             gl_jPanel10.createParallelGroup(GroupLayout.Alignment.LEADING)
623             .addGroup(gl_jPanel10.createSequentialGroup()
624                 .addGroup(gl_jPanel10.createParallelGroup(GroupLayout.Alignment.BASELINE)
625                     .addComponent(lblFfmpegPath)
626                     .addComponent(fldFfmpegPath, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
627                     .addComponent(btnFfmpegPath))
628                 .addPreferredGap(ComponentPlacement.RELATED)
629                 .addGroup(gl_jPanel10.createParallelGroup(GroupLayout.Alignment.BASELINE)
630                     .addComponent(lblFfmpegDllPath)
631                     .addComponent(fldFfmpegDllPath, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
632                     .addComponent(btnFfmpegDllPath))
633                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
634         );
635
636         pnlFfmpegParam.setBorder(BorderFactory.createTitledBorder("ffmpegパラメータ"));
637
638
639
640         GroupLayout gl_pnlFfmpeg = new GroupLayout(pnlFfmpeg);
641         pnlFfmpeg.setLayout(gl_pnlFfmpeg);
642         gl_pnlFfmpeg.setHorizontalGroup(
643             gl_pnlFfmpeg.createParallelGroup(GroupLayout.Alignment.LEADING)
644             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlFfmpeg.createSequentialGroup()
645                 .addContainerGap()
646                 .addGroup(gl_pnlFfmpeg.createParallelGroup(GroupLayout.Alignment.TRAILING)
647                     .addComponent(pnlFfmpegParam, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
648                     .addComponent(jPanel10, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
649                 .addContainerGap())
650         );
651         gl_pnlFfmpeg.setVerticalGroup(
652             gl_pnlFfmpeg.createParallelGroup(GroupLayout.Alignment.LEADING)
653             .addGroup(gl_pnlFfmpeg.createSequentialGroup()
654                 .addContainerGap()
655                 .addComponent(jPanel10, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
656                 .addPreferredGap(ComponentPlacement.RELATED)
657                 .addComponent(pnlFfmpegParam, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
658                 .addContainerGap())
659         );
660
661         tabbedPane.addTab("ffmpeg", pnlFfmpeg);
662
663         pnlNgWord.setBorder(BorderFactory.createTitledBorder("NGワード"));
664         pnlNgId.setBorder(BorderFactory.createTitledBorder("NGID"));
665
666         GroupLayout gl_pnlNgSetting = new GroupLayout(pnlNgSetting);
667         pnlNgSetting.setLayout(gl_pnlNgSetting);
668         gl_pnlNgSetting.setHorizontalGroup(
669             gl_pnlNgSetting.createParallelGroup(GroupLayout.Alignment.LEADING)
670             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlNgSetting.createSequentialGroup()
671                 .addContainerGap()
672                 .addGroup(gl_pnlNgSetting.createParallelGroup(GroupLayout.Alignment.TRAILING)
673                     .addComponent(pnlNgId, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
674                     .addComponent(pnlNgWord, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
675                 .addContainerGap())
676         );
677         gl_pnlNgSetting.setVerticalGroup(
678             gl_pnlNgSetting.createParallelGroup(GroupLayout.Alignment.LEADING)
679             .addGroup(gl_pnlNgSetting.createSequentialGroup()
680                 .addContainerGap()
681                 .addComponent(pnlNgWord, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
682                 .addPreferredGap(ComponentPlacement.RELATED)
683                 .addComponent(pnlNgId, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
684                 .addContainerGap())
685         );
686
687         tabbedPane.addTab("NG設定", pnlNgSetting);
688
689         pnlSearchVideo.setBorder(BorderFactory.createTitledBorder("動画検索対象フォルダ"));
690         pnlSearchComment.setBorder(BorderFactory.createTitledBorder("コメント検索対象フォルダ"));
691
692         pnlSearchCache.setBorder(BorderFactory.createEtchedBorder());
693
694         lblSearchCache.setText("キャッシュ更新(秒)");
695
696         GroupLayout gl_pnlSearchCache = new GroupLayout(pnlSearchCache);
697         pnlSearchCache.setLayout(gl_pnlSearchCache);
698         gl_pnlSearchCache.setHorizontalGroup(
699             gl_pnlSearchCache.createParallelGroup(GroupLayout.Alignment.LEADING)
700             .addGroup(gl_pnlSearchCache.createSequentialGroup()
701                 .addContainerGap()
702                 .addComponent(lblSearchCache)
703                 .addPreferredGap(ComponentPlacement.RELATED)
704                 .addComponent(fldSearchCache, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE)
705                 .addContainerGap(269, Short.MAX_VALUE))
706         );
707         gl_pnlSearchCache.setVerticalGroup(
708             gl_pnlSearchCache.createParallelGroup(GroupLayout.Alignment.LEADING)
709             .addGroup(gl_pnlSearchCache.createSequentialGroup()
710                 .addContainerGap()
711                 .addGroup(gl_pnlSearchCache.createParallelGroup(GroupLayout.Alignment.BASELINE)
712                     .addComponent(lblSearchCache)
713                     .addComponent(fldSearchCache, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
714                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
715         );
716
717         GroupLayout gl_pnlSearch = new GroupLayout(pnlSearch);
718         pnlSearch.setLayout(gl_pnlSearch);
719         gl_pnlSearch.setHorizontalGroup(
720             gl_pnlSearch.createParallelGroup(GroupLayout.Alignment.LEADING)
721             .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlSearch.createSequentialGroup()
722                 .addContainerGap()
723                 .addGroup(gl_pnlSearch.createParallelGroup(GroupLayout.Alignment.TRAILING)
724                     .addComponent(pnlSearchCache, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
725                     .addComponent(pnlSearchComment, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
726                     .addComponent(pnlSearchVideo, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
727                 .addContainerGap())
728         );
729         gl_pnlSearch.setVerticalGroup(
730             gl_pnlSearch.createParallelGroup(GroupLayout.Alignment.LEADING)
731             .addGroup(gl_pnlSearch.createSequentialGroup()
732                 .addContainerGap()
733                 .addComponent(pnlSearchVideo, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
734                 .addPreferredGap(ComponentPlacement.RELATED)
735                 .addComponent(pnlSearchComment, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
736                 .addPreferredGap(ComponentPlacement.RELATED)
737                 .addComponent(pnlSearchCache, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
738                 .addContainerGap(27, Short.MAX_VALUE))
739         );
740
741         tabbedPane.addTab("検索", pnlSearch);
742
743         final JPanel pnlButton = new JPanel();
744         final JButton btnOk = new JButton("OK");
745         btnOk.addActionListener(new ActionListener() {
746
747             @Override
748             public void actionPerformed(ActionEvent e) {
749                 saveConfig();
750                 dispose();
751             }
752         });
753         final JButton btnCancel = new JButton("Cancel");
754         pnlButton.add(btnOk);
755         pnlButton.add(btnCancel);
756
757         GroupLayout layout = new GroupLayout(getContentPane());
758         getContentPane().setLayout(layout);
759         layout.setHorizontalGroup(
760             layout.createParallelGroup(GroupLayout.Alignment.LEADING)
761             .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 460, Short.MAX_VALUE)
762             .addComponent(pnlButton)
763         );
764         layout.setVerticalGroup(
765             layout.createSequentialGroup()
766                 .addComponent(tabbedPane,GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
767                 .addComponent(pnlButton)
768         );
769
770         final JLabel lblSystemThreadDownload = new JLabel("ダウンロードスレッド数");
771         final JLabel lblSystemWaitDownload = new JLabel("ダウンロード開始最小間隔(秒)");
772         final JLabel lblSystemThreadConvert = new JLabel("変換スレッド数");
773         final JLabel lblSystemTempDir = new JLabel("作業フォルダ");
774
775         final JPanel pnlSystemGeneral = new JPanel();
776         pnlSystemGeneral.setBorder(BorderFactory.createTitledBorder("システム"));
777         final GroupLayout glSystemGenegal = new GroupLayout(pnlSystemGeneral);
778         glSystemGenegal.setAutoCreateGaps(true);
779         glSystemGenegal.setAutoCreateContainerGaps(true);
780         pnlSystemGeneral.setLayout(glSystemGenegal);
781
782         glSystemGenegal.setHorizontalGroup(glSystemGenegal.createParallelGroup()
783             .addGroup(glSystemGenegal.createSequentialGroup()
784                 .addGroup(glSystemGenegal.createParallelGroup()
785                     .addComponent(lblSystemThreadDownload)
786                     .addComponent(lblSystemWaitDownload)
787                     .addComponent(lblSystemThreadConvert))
788                 .addGroup(glSystemGenegal.createParallelGroup()
789                     .addComponent(fldSystemThreadDownload, PREFERRED_SIZE, 40, PREFERRED_SIZE)
790                     .addComponent(fldSystemWaitDownload, PREFERRED_SIZE, 40, PREFERRED_SIZE)
791                     .addComponent(fldSystemThreadConvert, PREFERRED_SIZE, 40, PREFERRED_SIZE)
792                 )
793             )
794             .addGroup(glSystemGenegal.createSequentialGroup()
795                 .addComponent(lblSystemTempDir)
796                 .addComponent(fldSystemTempDir, DEFAULT_SIZE, 400, Short.MAX_VALUE)
797                 )
798             );
799
800         glSystemGenegal.setVerticalGroup(glSystemGenegal.createSequentialGroup()
801             .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
802                 .addComponent(lblSystemThreadDownload)
803                 .addComponent(fldSystemThreadDownload, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE))
804             .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
805                 .addComponent(lblSystemWaitDownload)
806                 .addComponent(fldSystemWaitDownload, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE))
807             .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
808                 .addComponent(lblSystemThreadConvert)
809                 .addComponent(fldSystemThreadConvert, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE))
810             .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
811                 .addComponent(lblSystemTempDir)
812                 .addComponent(fldSystemTempDir, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE)));
813
814         final JPanel pnlSystem = new JPanel();
815         pnlSystem.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
816         final GroupLayout glSystem = new GroupLayout(pnlSystem);
817         glSystem.setAutoCreateGaps(true);
818         glSystem.setAutoCreateContainerGaps(true);
819         pnlSystem.setLayout(glSystem);
820
821         glSystem.setHorizontalGroup(glSystem.createParallelGroup()
822             .addComponent(pnlSystemGeneral));
823
824         glSystem.setVerticalGroup(glSystem.createSequentialGroup()
825             .addComponent(pnlSystemGeneral));
826
827         tabbedPane.add("システム", pnlSystem);
828
829         pack();
830         setResizable(false);
831         loadConfig();
832     }
833
834     /**
835      * @param args the command line arguments
836      */
837     public static void main(String args[]) {
838         /* Set the Nimbus look and feel */
839         /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
840          * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
841          */
842         try {
843             for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
844                 if ("Nimbus".equals(info.getName())) {
845                     UIManager.setLookAndFeel(info.getClassName());
846                     break;
847                 }
848             }
849         } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
850             java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
851         }
852
853         /* Create and display the form */
854         java.awt.EventQueue.invokeLater(new Runnable() {
855
856             @Override
857             public void run() {
858                 new ConfigDialog().setVisible(true);
859             }
860         });
861     }
862     // Variables declaration - do not modify//GEN-BEGIN:variables
863
864     // ネットワーク
865     // ネットワーク - アカウント
866     private final JTextField fldMail;
867     private final JTextField fldPassword;
868     // ネットワーク - プロキシ
869     private final JCheckBox cbProxyUse;
870     private final JTextField fldProxyHost;
871     private final JTextField fldProxyPort;
872     // ファイル
873     // ファイル - 動画
874     private final JTextField fldVideoDir;
875     private final JButton btnVideoDir;
876     private final JTextField fldVideoFileNamePattern;
877     private final JCheckBox cbVideoLocal;
878     // ファイル - コメント
879     private final JTextField fldCommentDir;
880     private final JButton btnCommentDir;
881     private final JTextField fldCommentFileNamePattern;
882     private final JCheckBox cbCommentLocal;
883     // ファイル - 変換動画
884     private final JTextField fldOutputDir;
885     private final JTextField fldOutputFileNamePattern;
886     private final JButton btnOutputDir;
887     private final JCheckBox cbOutputEnable;
888     private final JCheckBox cbOutputCommentOverlay;
889     private final JCheckBox cbOutputDisplayProgress;
890     // ファイル - 禁則文字
891     private final JTextField fldReplaceFrom = new JTextField();
892     private final JTextField fldReplaceTo = new JTextField();
893     // コメント
894     // コメント
895     private final JCheckBox cbCommentSizeAuto;
896     private final JTextField fldCommentSizeManual;
897     private final JCheckBox cbCommentMinSizeAuto;
898     private final JTextField fldCommentMinSizeManual;
899     private final JCheckBox cbCommentDisplaySizeDefault;
900     private final JTextField fldCommentDisplaySizeManual;
901     // コメント - 高度な設定
902     private final JTextField fldFontPath;
903     private final JButton btnFontPath;
904     private final JTextField fldFontIndex;
905     private final JComboBox<String> cmbFontShadow = new JComboBox<>();
906     private final JCheckBox cbFontSizeArrangeDisable;
907     private final JCheckBox cbCommentOpaque;
908     // ffmpeg
909     // ffmpeg - ファイルパス
910     private final JTextField fldFfmpegPath;
911     private final JButton btnFfmpegPath;
912     private final JTextField fldFfmpegDllPath;
913     private final JButton btnFfmpegDllPath;
914     // ffmpeg - ffmpegパラメータ
915     private final FfmpegParamPanel pnlFfmpegParam = new FfmpegParamPanel();
916     // NG設定
917     // NG設定 - NGワード
918     private final NgRegisterPanel pnlNgWord = new NgRegisterPanel();
919     // NG設定 - NGID
920     private final NgRegisterPanel pnlNgId = new NgRegisterPanel();
921     // 検索
922     // 検索 - 動画検索対象フォルダ
923     private final DirectoryRegisterPanel pnlSearchVideo = new DirectoryRegisterPanel();
924     // 検索 - コメント検索対象フォルダ
925     private final DirectoryRegisterPanel pnlSearchComment = new DirectoryRegisterPanel();
926     // 検索 - キャッシュ更新(秒)
927     private final JTextField fldSearchCache;
928     // システム
929     private final JTextField fldSystemThreadDownload = new JTextField();
930     private final JTextField fldSystemWaitDownload = new JTextField();
931     private final JTextField fldSystemThreadConvert = new JTextField();
932     private final JTextField fldSystemTempDir = new JTextField();
933
934
935     // End of variables declaration//GEN-END:variables
936
937     private void loadConfig() {
938         final Config p = Config.INSTANCE;
939
940         /*
941          * ネットワーク - アカウント
942          */
943         fldMail.setText(p.getId());
944         fldPassword.setText(p.getPassword());
945
946         /*
947          * ネットワーク - プロキシ
948          */
949         cbProxyUse.setSelected(p.getProxyUse());
950         fldProxyHost.setText(p.getProxyHost());
951         fldProxyPort.setText(p.getProxyPort());
952
953         /*
954          * ファイル - 動画
955          */
956         fldVideoDir.setText(p.getVideoDir());
957         fldVideoFileNamePattern.setText(p.getVideoFileNamePattern());
958         cbVideoLocal.setSelected(p.getVideoUseLocal());
959
960         /*
961          * ファイル - コメント
962          */
963         fldCommentDir.setText(p.getCommentDir());
964         fldCommentFileNamePattern.setText(p.getCommentFileNamePattern());
965         cbCommentLocal.setSelected(p.getCommentUseLocal());
966
967         /*
968          * ファイル - 変換動画
969          */
970         fldOutputDir.setText(p.getOutputDir());
971         fldOutputFileNamePattern.setText(p.getOutputFileNamePattern());
972         cbOutputEnable.setSelected(p.getOutputEnable());
973         cbOutputCommentOverlay.setSelected(p.getOutputCommentOverlay());
974         cbOutputDisplayProgress.setSelected(p.getOutputDisplayProgress());
975
976         /*
977          * ファイル - 禁則文字
978          */
979         fldReplaceFrom.setText(p.getReplaceFrom());
980         fldReplaceTo.setText(p.getReplaceTo());
981
982         /**
983          * コメント
984          */
985         cbCommentSizeAuto.setSelected(p.getCommentSizeAutosize());
986         fldCommentSizeManual.setText(p.getCommentSizeManual());
987         cbCommentMinSizeAuto.setSelected(p.getCommentMinSizeAutosize());
988         fldCommentSizeManual.setText(p.getCommentMinSizeManual());
989         cbCommentDisplaySizeDefault.setSelected(p.getCommentDisplaySizeDefault());
990         fldCommentDisplaySizeManual.setText(p.getCommentDisplaySizeManual());
991
992         /**
993          * コメント - 高度な設定
994          */
995         fldFontPath.setText(p.getFontPath());
996         fldFontIndex.setText(p.getFontIndex());
997         cmbFontShadow.setSelectedIndex(p.getFontShadow());
998         cbFontSizeArrangeDisable.setSelected(p.getFontSizeArrangeDisable());
999         cbCommentOpaque.setSelected(p.getCommentOpaque());
1000
1001         /*
1002          * ffmpeg - ファイルパス
1003          */
1004         fldFfmpegPath.setText(p.getFfmpegPath());
1005         fldFfmpegDllPath.setText(p.getFfmpegDllPath());
1006
1007         /*
1008          * ffmpeg - ffmpegパラメータ
1009          */
1010         pnlFfmpegParam.init(p);
1011
1012         /*
1013          * NG 設定
1014          */
1015         final List<String> ngWords = p.getNgWords();
1016         pnlNgWord.init(ngWords);
1017         final List<String> ngIds = p.getNgIds();
1018         pnlNgId.init(ngIds);
1019
1020         /*
1021          * システム
1022          */
1023         fldSystemThreadDownload.setText(Integer.toString(p.getSystemDownloadThread()));
1024         fldSystemWaitDownload.setText(Integer.toString(p.getSystemDownloadWait()));
1025         fldSystemThreadConvert.setText(Integer.toString(p.getSystemConvertThread()));
1026         fldSystemTempDir.setText(p.getSystemTempDir());
1027     }
1028
1029     private void saveConfig() {
1030         final Config p = Config.INSTANCE;
1031
1032         /*
1033          * ネットワーク - アカウント
1034          */
1035
1036         p.setId(fldMail.getText());
1037         p.setPassword(fldPassword.getText());
1038
1039         /*
1040          * ネットワーク - プロキシ
1041          */
1042         p.setProxyUse(cbProxyUse.isSelected());
1043         p.setProxyHost(fldProxyHost.getText());
1044         p.setProxyPort(fldProxyPort.getText());
1045
1046         /*
1047          * ファイル - 動画
1048          */
1049         p.setVideoDir(fldVideoDir.getText());
1050         p.setVideoFileNamePattern(fldVideoFileNamePattern.getText());
1051         p.setVideoUseLocal(cbVideoLocal.isSelected());
1052
1053         /*
1054          * ファイル - コメント
1055          */
1056         p.setCommentDir(fldCommentDir.getText());
1057         p.setCommentFileNamePattern(fldCommentFileNamePattern.getText());
1058         p.setCommentUseLocal(cbCommentLocal.isSelected());
1059
1060         /*
1061          * ファイル - 変換動画
1062          */
1063         p.setOutputDir(fldOutputDir.getText());
1064         p.setOutputFileNamePattern(fldOutputFileNamePattern.getText());
1065         p.setOutputEnable(cbOutputEnable.isSelected());
1066         p.setOutputCommentOverlay(cbOutputCommentOverlay.isSelected());
1067         p.setOutputDisplayProgress(cbOutputDisplayProgress.isSelected());
1068
1069         /*
1070          * ファイル - 禁則文字
1071          */
1072         p.setReplaceFrom(fldReplaceFrom.getText());
1073         p.setReplaceTo(fldReplaceTo.getText());
1074
1075         /*
1076          * コメント
1077          */
1078         p.setCommentSizeAutosize(cbCommentSizeAuto.isSelected());
1079         p.setCommentSizeManual(fldCommentSizeManual.getText());
1080         p.setCommentMinSizeAutosize(cbCommentMinSizeAuto.isSelected());
1081         p.setCommentMinSizeManual(fldCommentSizeManual.getText());
1082         p.setCommentDisplaySizeDefault(cbCommentDisplaySizeDefault.isSelected());
1083         p.setCommentDisplaySizeManual(fldCommentDisplaySizeManual.getText());
1084
1085         /**
1086          * コメント - 高度な設定
1087          */
1088         p.setFontPath(fldFontPath.getText());
1089         p.setFontIndex(fldFontIndex.getText());
1090         p.setFontShadow(cmbFontShadow.getSelectedIndex());
1091         p.setFontSizeArrangeDisable(cbFontSizeArrangeDisable.isSelected());
1092         p.setCommentOpaque(cbCommentOpaque.isSelected());
1093
1094         /*
1095          * ffmpeg - ファイルパス
1096          */
1097         p.setFfmpegPath(fldFfmpegPath.getText());
1098         p.setFfmpegDllPath(fldFfmpegDllPath.getText());
1099
1100         /*
1101          * ffmpeg - ffmpegパラメータ
1102          */
1103         final File fileFfmpegOption = pnlFfmpegParam.mdlFfmpegOption.getSelectedFile();
1104         p.setFfmpegOptionFile(fileFfmpegOption != null ? fileFfmpegOption.getPath() : null);
1105         p.setFfmpegExtension(pnlFfmpegParam.fldFfmpegOptionExtension.getText());
1106         p.setFfmpegMainOption(pnlFfmpegParam.fldFfmpegOptionMain.getText());
1107         p.setFfmpegInOption(pnlFfmpegParam.fldFfmpegOptionIn.getText());
1108         p.setFfmpegOutOption(pnlFfmpegParam.fldFfmpegOptionOut.getText());
1109         p.setFfmpegAvOption(pnlFfmpegParam.fldFfmpegOptionAv.getText());
1110         p.setFfmpegResizeEnable(pnlFfmpegParam.cbFfmpegOptionResize.isSelected());
1111         p.setFfmpegResizeWidth(pnlFfmpegParam.fldFfmpegOptionResizeWidth.getText());
1112         p.setFfmpegResizeHeight(pnlFfmpegParam.fldFfmpegOptionResizeHeight.getText());
1113         p.setFfmpegKeepAspect(pnlFfmpegParam.cbFfmpegOptionKeepAspect.isSelected());
1114
1115         /*
1116          * NG 設定
1117          */
1118         p.setNgWords(pnlNgWord.getAllElements());
1119         p.setNgIds(pnlNgId.getAllElements());
1120
1121         /*
1122          * システム
1123          */
1124         p.setSystemDownloadThread(Integer.parseInt(fldSystemThreadDownload.getText()));
1125         p.setSystemDownloadWait(Integer.parseInt(fldSystemWaitDownload.getText()));
1126         p.setSystemConvertThread(Integer.parseInt(fldSystemThreadConvert.getText()));
1127         p.setSystemTempDir(fldSystemTempDir.getText());
1128
1129         try {
1130             p.save();
1131         } catch (ConfigurationException ex) {
1132             logger.log(Level.SEVERE, "コンフィグファイル保存に失敗", ex);
1133         }
1134     }
1135 }