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