OSDN Git Service

96e48b1cdfd69fb9ec194c029f143f8e7483bbb1
[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         //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
840         /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
841          * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
842          */
843         try {
844             for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
845                 if ("Nimbus".equals(info.getName())) {
846                     UIManager.setLookAndFeel(info.getClassName());
847                     break;
848                 }
849             }
850         } catch (ClassNotFoundException ex) {
851             java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
852         } catch (InstantiationException ex) {
853             java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
854         } catch (IllegalAccessException ex) {
855             java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
856         } catch (UnsupportedLookAndFeelException ex) {
857             java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
858         }
859         //</editor-fold>
860
861         /* Create and display the form */
862         java.awt.EventQueue.invokeLater(new Runnable() {
863
864             @Override
865             public void run() {
866                 new ConfigDialog().setVisible(true);
867             }
868         });
869     }
870     // Variables declaration - do not modify//GEN-BEGIN:variables
871
872     // ネットワーク
873     // ネットワーク - アカウント
874     private final JTextField fldMail;
875     private final JTextField fldPassword;
876     // ネットワーク - プロキシ
877     private final JCheckBox cbProxyUse;
878     private final JTextField fldProxyHost;
879     private final JTextField fldProxyPort;
880     // ファイル
881     // ファイル - 動画
882     private final JTextField fldVideoDir;
883     private final JButton btnVideoDir;
884     private final JTextField fldVideoFileNamePattern;
885     private final JCheckBox cbVideoLocal;
886     // ファイル - コメント
887     private final JTextField fldCommentDir;
888     private final JButton btnCommentDir;
889     private final JTextField fldCommentFileNamePattern;
890     private final JCheckBox cbCommentLocal;
891     // ファイル - 変換動画
892     private final JTextField fldOutputDir;
893     private final JTextField fldOutputFileNamePattern;
894     private final JButton btnOutputDir;
895     private final JCheckBox cbOutputEnable;
896     private final JCheckBox cbOutputCommentOverlay;
897     private final JCheckBox cbOutputDisplayProgress;
898     // ファイル - 禁則文字
899     private final JTextField fldReplaceFrom = new JTextField();
900     private final JTextField fldReplaceTo = new JTextField();
901     // コメント
902     // コメント
903     private final JCheckBox cbCommentSizeAuto;
904     private final JTextField fldCommentSizeManual;
905     private final JCheckBox cbCommentMinSizeAuto;
906     private final JTextField fldCommentMinSizeManual;
907     private final JCheckBox cbCommentDisplaySizeDefault;
908     private final JTextField fldCommentDisplaySizeManual;
909     // コメント - 高度な設定
910     private final JTextField fldFontPath;
911     private final JButton btnFontPath;
912     private final JTextField fldFontIndex;
913     private final JComboBox<String> cmbFontShadow = new JComboBox<>();
914     private final JCheckBox cbFontSizeArrangeDisable;
915     private final JCheckBox cbCommentOpaque;
916     // ffmpeg
917     // ffmpeg - ファイルパス
918     private final JTextField fldFfmpegPath;
919     private final JButton btnFfmpegPath;
920     private final JTextField fldFfmpegDllPath;
921     private final JButton btnFfmpegDllPath;
922     // ffmpeg - ffmpegパラメータ
923     private final FfmpegParamPanel pnlFfmpegParam = new FfmpegParamPanel();
924     // NG設定
925     // NG設定 - NGワード
926     private final NgRegisterPanel pnlNgWord = new NgRegisterPanel();
927     // NG設定 - NGID
928     private final NgRegisterPanel pnlNgId = new NgRegisterPanel();
929     // 検索
930     // 検索 - 動画検索対象フォルダ
931     private final DirectoryRegisterPanel pnlSearchVideo = new DirectoryRegisterPanel();
932     // 検索 - コメント検索対象フォルダ
933     private final DirectoryRegisterPanel pnlSearchComment = new DirectoryRegisterPanel();
934     // 検索 - キャッシュ更新(秒)
935     private final JTextField fldSearchCache;
936     // システム
937     private final JTextField fldSystemThreadDownload = new JTextField();
938     private final JTextField fldSystemWaitDownload = new JTextField();
939     private final JTextField fldSystemThreadConvert = new JTextField();
940     private final JTextField fldSystemTempDir = new JTextField();
941
942
943     // End of variables declaration//GEN-END:variables
944
945     private void loadConfig() {
946         final Config p = Config.INSTANCE;
947
948         /*
949          * ネットワーク - アカウント
950          */
951         fldMail.setText(p.getId());
952         fldPassword.setText(p.getPassword());
953
954         /*
955          * ネットワーク - プロキシ
956          */
957         cbProxyUse.setSelected(p.getProxyUse());
958         fldProxyHost.setText(p.getProxyHost());
959         fldProxyPort.setText(p.getProxyPort());
960
961         /*
962          * ファイル - 動画
963          */
964         fldVideoDir.setText(p.getVideoDir());
965         fldVideoFileNamePattern.setText(p.getVideoFileNamePattern());
966         cbVideoLocal.setSelected(p.getVideoUseLocal());
967
968         /*
969          * ファイル - コメント
970          */
971         fldCommentDir.setText(p.getCommentDir());
972         fldCommentFileNamePattern.setText(p.getCommentFileNamePattern());
973         cbCommentLocal.setSelected(p.getCommentUseLocal());
974
975         /*
976          * ファイル - 変換動画
977          */
978         fldOutputDir.setText(p.getOutputDir());
979         fldOutputFileNamePattern.setText(p.getOutputFileNamePattern());
980         cbOutputEnable.setSelected(p.getOutputEnable());
981         cbOutputCommentOverlay.setSelected(p.getOutputCommentOverlay());
982         cbOutputDisplayProgress.setSelected(p.getOutputDisplayProgress());
983
984         /*
985          * ファイル - 禁則文字
986          */
987         fldReplaceFrom.setText(p.getReplaceFrom());
988         fldReplaceTo.setText(p.getReplaceTo());
989
990         /**
991          * コメント
992          */
993         cbCommentSizeAuto.setSelected(p.getCommentSizeAutosize());
994         fldCommentSizeManual.setText(p.getCommentSizeManual());
995         cbCommentMinSizeAuto.setSelected(p.getCommentMinSizeAutosize());
996         fldCommentSizeManual.setText(p.getCommentMinSizeManual());
997         cbCommentDisplaySizeDefault.setSelected(p.getCommentDisplaySizeDefault());
998         fldCommentDisplaySizeManual.setText(p.getCommentDisplaySizeManual());
999
1000         /**
1001          * コメント - 高度な設定
1002          */
1003         fldFontPath.setText(p.getFontPath());
1004         fldFontIndex.setText(p.getFontIndex());
1005         cmbFontShadow.setSelectedIndex(p.getFontShadow());
1006         cbFontSizeArrangeDisable.setSelected(p.getFontSizeArrangeDisable());
1007         cbCommentOpaque.setSelected(p.getCommentOpaque());
1008
1009         /*
1010          * ffmpeg - ファイルパス
1011          */
1012         fldFfmpegPath.setText(p.getFfmpegPath());
1013         fldFfmpegDllPath.setText(p.getFfmpegDllPath());
1014
1015         /*
1016          * ffmpeg - ffmpegパラメータ
1017          */
1018         pnlFfmpegParam.init(p);
1019
1020         /*
1021          * NG 設定
1022          */
1023         final List<String> ngWords = p.getNgWords();
1024         pnlNgWord.init(ngWords);
1025         final List<String> ngIds = p.getNgIds();
1026         pnlNgId.init(ngIds);
1027
1028         /*
1029          * システム
1030          */
1031         fldSystemThreadDownload.setText(Integer.toString(p.getSystemDownloadThread()));
1032         fldSystemWaitDownload.setText(Integer.toString(p.getSystemDownloadWait()));
1033         fldSystemThreadConvert.setText(Integer.toString(p.getSystemConvertThread()));
1034         fldSystemTempDir.setText(p.getSystemTempDir());
1035     }
1036
1037     private void saveConfig() {
1038         final Config p = Config.INSTANCE;
1039
1040         /*
1041          * ネットワーク - アカウント
1042          */
1043
1044         p.setId(fldMail.getText());
1045         p.setPassword(fldPassword.getText());
1046
1047         /*
1048          * ネットワーク - プロキシ
1049          */
1050         p.setProxyUse(cbProxyUse.isSelected());
1051         p.setProxyHost(fldProxyHost.getText());
1052         p.setProxyPort(fldProxyPort.getText());
1053
1054         /*
1055          * ファイル - 動画
1056          */
1057         p.setVideoDir(fldVideoDir.getText());
1058         p.setVideoFileNamePattern(fldVideoFileNamePattern.getText());
1059         p.setVideoUseLocal(cbVideoLocal.isSelected());
1060
1061         /*
1062          * ファイル - コメント
1063          */
1064         p.setCommentDir(fldCommentDir.getText());
1065         p.setCommentFileNamePattern(fldCommentFileNamePattern.getText());
1066         p.setCommentUseLocal(cbCommentLocal.isSelected());
1067
1068         /*
1069          * ファイル - 変換動画
1070          */
1071         p.setOutputDir(fldOutputDir.getText());
1072         p.setOutputFileNamePattern(fldOutputFileNamePattern.getText());
1073         p.setOutputEnable(cbOutputEnable.isSelected());
1074         p.setOutputCommentOverlay(cbOutputCommentOverlay.isSelected());
1075         p.setOutputDisplayProgress(cbOutputDisplayProgress.isSelected());
1076
1077         /*
1078          * ファイル - 禁則文字
1079          */
1080         p.setReplaceFrom(fldReplaceFrom.getText());
1081         p.setReplaceTo(fldReplaceTo.getText());
1082
1083         /*
1084          * コメント
1085          */
1086         p.setCommentSizeAutosize(cbCommentSizeAuto.isSelected());
1087         p.setCommentSizeManual(fldCommentSizeManual.getText());
1088         p.setCommentMinSizeAutosize(cbCommentMinSizeAuto.isSelected());
1089         p.setCommentMinSizeManual(fldCommentSizeManual.getText());
1090         p.setCommentDisplaySizeDefault(cbCommentDisplaySizeDefault.isSelected());
1091         p.setCommentDisplaySizeManual(fldCommentDisplaySizeManual.getText());
1092
1093         /**
1094          * コメント - 高度な設定
1095          */
1096         p.setFontPath(fldFontPath.getText());
1097         p.setFontIndex(fldFontIndex.getText());
1098         p.setFontShadow(cmbFontShadow.getSelectedIndex());
1099         p.setFontSizeArrangeDisable(cbFontSizeArrangeDisable.isSelected());
1100         p.setCommentOpaque(cbCommentOpaque.isSelected());
1101
1102         /*
1103          * ffmpeg - ファイルパス
1104          */
1105         p.setFfmpegPath(fldFfmpegPath.getText());
1106         p.setFfmpegDllPath(fldFfmpegDllPath.getText());
1107
1108         /*
1109          * ffmpeg - ffmpegパラメータ
1110          */
1111         final File fileFfmpegOption = pnlFfmpegParam.mdlFfmpegOption.getSelectedFile();
1112         p.setFfmpegOptionFile(fileFfmpegOption != null ? fileFfmpegOption.getPath() : null);
1113         p.setFfmpegExtension(pnlFfmpegParam.fldFfmpegOptionExtension.getText());
1114         p.setFfmpegMainOption(pnlFfmpegParam.fldFfmpegOptionMain.getText());
1115         p.setFfmpegInOption(pnlFfmpegParam.fldFfmpegOptionIn.getText());
1116         p.setFfmpegOutOption(pnlFfmpegParam.fldFfmpegOptionOut.getText());
1117         p.setFfmpegAvOption(pnlFfmpegParam.fldFfmpegOptionAv.getText());
1118         p.setFfmpegResizeEnable(pnlFfmpegParam.cbFfmpegOptionResize.isSelected());
1119         p.setFfmpegResizeWidth(pnlFfmpegParam.fldFfmpegOptionResizeWidth.getText());
1120         p.setFfmpegResizeHeight(pnlFfmpegParam.fldFfmpegOptionResizeHeight.getText());
1121         p.setFfmpegKeepAspect(pnlFfmpegParam.cbFfmpegOptionKeepAspect.isSelected());
1122
1123         /*
1124          * NG 設定
1125          */
1126         p.setNgWords(pnlNgWord.getAllElements());
1127         p.setNgIds(pnlNgId.getAllElements());
1128
1129         /*
1130          * システム
1131          */
1132         p.setSystemDownloadThread(Integer.parseInt(fldSystemThreadDownload.getText()));
1133         p.setSystemDownloadWait(Integer.parseInt(fldSystemWaitDownload.getText()));
1134         p.setSystemConvertThread(Integer.parseInt(fldSystemThreadConvert.getText()));
1135         p.setSystemTempDir(fldSystemTempDir.getText());
1136
1137         try {
1138             p.save();
1139         } catch (ConfigurationException ex) {
1140             logger.log(Level.SEVERE, "コンフィグファイル保存に失敗", ex);
1141         }
1142     }
1143 }