OSDN Git Service

プロファイルインタフェースメソッド名変更
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / gui / MainFrame.java
index bb7a10a..e985f49 100644 (file)
@@ -5,17 +5,55 @@
  */
 package yukihane.inqubus.gui;
 
+import java.awt.Image;
+import java.awt.ItemSelectable;
+import java.awt.Toolkit;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.KeyEvent;
 import java.io.File;
+import java.io.FilenameFilter;
+import java.net.URL;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import javax.swing.BorderFactory;
+import javax.swing.DropMode;
+import javax.swing.GroupLayout;
+import javax.swing.GroupLayout.Alignment;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.KeyStroke;
+import javax.swing.LayoutStyle.ComponentPlacement;
 import javax.swing.TransferHandler;
-import javax.swing.UIManager;
-import javax.swing.UIManager.LookAndFeelInfo;
-import yukihane.inqubus.model.SourceTypeComboBoxModel;
+import javax.swing.WindowConstants;
+import org.apache.commons.lang.StringUtils;
+import saccubus.MainFrame_AboutBox;
+import saccubus.worker.Download;
+import saccubus.worker.profile.CommentProfile;
+import saccubus.worker.profile.DownloadProfile;
+import saccubus.worker.profile.GeneralProfile;
+import saccubus.worker.profile.LoginProfile;
+import saccubus.worker.profile.ProxyProfile;
+import saccubus.worker.profile.VideoProfile;
+import yukihane.Util;
+import yukihane.inqubus.Config;
 import yukihane.inqubus.model.Target;
 import yukihane.inqubus.model.TargetsTableModel;
 
@@ -23,274 +61,456 @@ import yukihane.inqubus.model.TargetsTableModel;
  *
  * @author yuki
  */
-public class MainFrame extends javax.swing.JFrame {
+public class MainFrame extends JFrame {
 
+    private static final long serialVersionUID = 1L;
+    private static final Logger logger = Logger.getLogger(MainFrame.class.getName());
     private final TargetsTableModel targetModel = new TargetsTableModel();
 
     /** Creates new form MainFrame */
     public MainFrame() {
-        initComponents();
-        jPanel1.setTransferHandler(new DownloadListTransferHandler());
-        jTable1.setTransferHandler(new TableTransferHandler());
-    }
-
-    /** This method is called from within the constructor to
-     * initialize the form.
-     * WARNING: Do NOT modify this code. The content of this method is
-     * always regenerated by the Form Editor.
-     */
-    @SuppressWarnings("unchecked")
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-    private void initComponents() {
-
-        jPanel1 = new javax.swing.JPanel();
-        jScrollPane1 = new javax.swing.JScrollPane();
-        jTable1 = new javax.swing.JTable();
-        jPanel2 = new javax.swing.JPanel();
-        jButton2 = new javax.swing.JButton();
-        jButton3 = new javax.swing.JButton();
-        jButton4 = new javax.swing.JButton();
-        jPanel3 = new javax.swing.JPanel();
-        jButton1 = new javax.swing.JButton();
-        jLabel1 = new javax.swing.JLabel();
-        jLabel2 = new javax.swing.JLabel();
-        jLabel3 = new javax.swing.JLabel();
-        jComboBox1 = new javax.swing.JComboBox();
-        jComboBox2 = new javax.swing.JComboBox();
-        jComboBox3 = new javax.swing.JComboBox();
-        jCheckBox1 = new javax.swing.JCheckBox();
-        jCheckBox2 = new javax.swing.JCheckBox();
-        jTextField1 = new javax.swing.JTextField();
-        jTextField2 = new javax.swing.JTextField();
-        jTextField3 = new javax.swing.JTextField();
-        jMenuBar1 = new javax.swing.JMenuBar();
-        jMenu1 = new javax.swing.JMenu();
-        jMenu2 = new javax.swing.JMenu();
-
-        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
-
-        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
-
-        jTable1.setModel(targetModel);
-        jTable1.setDropMode(javax.swing.DropMode.INSERT_ROWS);
-        jScrollPane1.setViewportView(jTable1);
-
-        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
-
-        jButton2.setText("開始");
-
-        jButton3.setText("停止");
-
-        jButton4.setText("選択解除");
-
-        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
-        jPanel2.setLayout(jPanel2Layout);
-        jPanel2Layout.setHorizontalGroup(
-            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(jPanel2Layout.createSequentialGroup()
+        final URL url = MainFrame_AboutBox.class.getResource("icon.png");
+        final Image icon1 = Toolkit.getDefaultToolkit().createImage(url);
+        final URL url32 = MainFrame_AboutBox.class.getResource("icon32.png");
+        final Image icon2 = Toolkit.getDefaultToolkit().createImage(url32);
+        final List<Image> images = new ArrayList<Image>(2);
+        images.add(icon1);
+        images.add(icon2);
+        setIconImages(images);
+
+        final JPanel pnlMain = new JPanel();
+        final JScrollPane scrDisplay = new JScrollPane();
+        tblDisplay = new JTable();
+        final JPanel pnlButton = new JPanel();
+        btnStart = new JButton();
+        btnStop = new JButton();
+        btnDeselect = new JButton();
+        final JPanel pnlInputMain = new JPanel();
+        final JLabel lblId = new JLabel();
+        fldId = new JTextField();
+        final JLabel lblVideo = new JLabel();
+        cbVideoLocal = new JCheckBox();
+        fldVideo = new JTextField();
+        btnVideo = new JButton();
+        final JLabel lblComment = new JLabel();
+        cbCommentLocal = new JCheckBox();
+        fldComment = new JTextField();
+        btnComment = new JButton();
+        final JLabel lblOutput = new JLabel();
+        cbOutputEnable = new JCheckBox();
+        fldOutput = new JTextField();
+
+        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+
+        btnApply.addActionListener(new ApplyActionListener());
+
+        pnlMain.setBorder(BorderFactory.createEtchedBorder());
+
+        tblDisplay.setModel(targetModel);
+        tblDisplay.setDropMode(DropMode.INSERT_ROWS);
+        scrDisplay.setViewportView(tblDisplay);
+
+        pnlButton.setBorder(BorderFactory.createEtchedBorder());
+
+        btnStart.setText("開始");
+
+        btnStop.setText("停止");
+
+        btnDeselect.setText("選択解除");
+
+        GroupLayout gl_pnlButton = new GroupLayout(pnlButton);
+        pnlButton.setLayout(gl_pnlButton);
+        gl_pnlButton.setHorizontalGroup(
+            gl_pnlButton.createParallelGroup(Alignment.LEADING)
+            .addGroup(gl_pnlButton.createSequentialGroup()
                 .addContainerGap()
-                .addComponent(jButton2)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jButton3)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 250, Short.MAX_VALUE)
-                .addComponent(jButton4)
+                .addComponent(btnStart)
+                .addPreferredGap(ComponentPlacement.RELATED)
+                .addComponent(btnStop)
+                .addPreferredGap(ComponentPlacement.RELATED, 250, Short.MAX_VALUE)
+                .addComponent(btnDeselect)
                 .addContainerGap())
         );
-        jPanel2Layout.setVerticalGroup(
-            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(jPanel2Layout.createSequentialGroup()
+        gl_pnlButton.setVerticalGroup(
+            gl_pnlButton.createParallelGroup(Alignment.LEADING)
+            .addGroup(gl_pnlButton.createSequentialGroup()
                 .addContainerGap()
-                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(jButton2)
-                    .addComponent(jButton3)
-                    .addComponent(jButton4))
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addGroup(gl_pnlButton.createParallelGroup(Alignment.BASELINE)
+                    .addComponent(btnStart)
+                    .addComponent(btnStop)
+                    .addComponent(btnDeselect))
+                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
-        jPanel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());
+        pnlInputMain.setBorder(BorderFactory.createEtchedBorder());
+
+        lblId.setText("ID");
+
+        fldId.addFocusListener(new java.awt.event.FocusAdapter() {
 
-        jButton1.setText("適用");
+            public void focusLost(java.awt.event.FocusEvent evt) {
+                idFieldFocusLost(evt);
+            }
+        });
 
-        jLabel1.setText("動画");
+        lblVideo.setText("動画");
 
-        jLabel2.setText("コメント");
+        cbVideoLocal.setText("local");
+        cbVideoLocal.addItemListener(new java.awt.event.ItemListener() {
+
+            public void itemStateChanged(java.awt.event.ItemEvent evt) {
+                useMovieLocalCheckBoxItemStateChanged(evt);
+            }
+        });
 
-        jLabel3.setText("投コメ");
+        btnVideo.setText("...");
 
-        jComboBox1.setModel(new SourceTypeComboBoxModel());
+        lblComment.setText("コメント");
 
-        jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+        cbCommentLocal.setText("local");
+        cbCommentLocal.addItemListener(new java.awt.event.ItemListener() {
 
-        jComboBox3.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+            public void itemStateChanged(java.awt.event.ItemEvent evt) {
+                useMovieLocalCheckBoxItemStateChanged(evt);
+            }
+        });
 
-        jCheckBox1.setText("変換を行う");
+        btnComment.setText("...");
 
-        jCheckBox2.setText("自動で処理開始");
+        lblOutput.setText("出力");
 
-        jTextField1.setText("jTextField1");
+        cbOutputEnable.setText("変換");
+        cbOutputEnable.addItemListener(new java.awt.event.ItemListener() {
 
-        jTextField2.setText("jTextField2");
+            public void itemStateChanged(java.awt.event.ItemEvent evt) {
+                outputConvertCheckBoxItemStateChanged(evt);
+            }
+        });
 
-        jTextField3.setText("jTextField3");
 
-        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
-        jPanel3.setLayout(jPanel3Layout);
-        jPanel3Layout.setHorizontalGroup(
-            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(jPanel3Layout.createSequentialGroup()
+        GroupLayout gl_pnlInputMain = new GroupLayout(pnlInputMain);
+        pnlInputMain.setLayout(gl_pnlInputMain);
+        gl_pnlInputMain.setHorizontalGroup(
+            gl_pnlInputMain.createParallelGroup(Alignment.LEADING)
+            .addGroup(gl_pnlInputMain.createSequentialGroup()
                 .addContainerGap()
-                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(jPanel3Layout.createSequentialGroup()
-                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(jLabel3)
-                            .addComponent(jLabel2)
-                            .addComponent(jLabel1))
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addGroup(jPanel3Layout.createSequentialGroup()
-                                .addComponent(jComboBox3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 352, Short.MAX_VALUE))
-                            .addGroup(jPanel3Layout.createSequentialGroup()
-                                .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 352, Short.MAX_VALUE))
-                            .addGroup(jPanel3Layout.createSequentialGroup()
-                                .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE))))
-                    .addGroup(jPanel3Layout.createSequentialGroup()
-                        .addComponent(jCheckBox1)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(jCheckBox2)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 209, Short.MAX_VALUE)
-                        .addComponent(jButton1)))
+                .addGroup(gl_pnlInputMain.createParallelGroup(Alignment.LEADING)
+                    .addGroup(gl_pnlInputMain.createSequentialGroup()
+                        .addGroup(gl_pnlInputMain.createParallelGroup(Alignment.LEADING)
+                            .addComponent(lblComment)
+                            .addComponent(lblVideo)
+                            .addComponent(lblId)
+                            .addComponent(lblOutput))
+                        .addPreferredGap(ComponentPlacement.RELATED)
+                        .addGroup(gl_pnlInputMain.createParallelGroup(Alignment.LEADING)
+                            .addGroup(gl_pnlInputMain.createSequentialGroup()
+                                .addComponent(cbVideoLocal)
+                                .addPreferredGap(ComponentPlacement.RELATED)
+                                .addComponent(fldVideo, GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE)
+                                .addPreferredGap(ComponentPlacement.RELATED)
+                                .addComponent(btnVideo))
+                            .addComponent(fldId, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
+                            .addGroup(Alignment.TRAILING, gl_pnlInputMain.createSequentialGroup()
+                                .addGroup(gl_pnlInputMain.createParallelGroup(Alignment.TRAILING)
+                                    .addGroup(Alignment.LEADING, gl_pnlInputMain.createSequentialGroup()
+                                        .addComponent(cbOutputEnable)
+                                        .addPreferredGap(ComponentPlacement.RELATED)
+                                        .addComponent(fldOutput, GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE))
+                                    .addGroup(gl_pnlInputMain.createSequentialGroup()
+                                        .addComponent(cbCommentLocal)
+                                        .addPreferredGap(ComponentPlacement.RELATED)
+                                        .addComponent(fldComment, GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE)))
+                                .addPreferredGap(ComponentPlacement.RELATED)
+                                .addComponent(btnComment))))
+                    .addComponent(btnApply, Alignment.TRAILING))
                 .addContainerGap())
         );
-        jPanel3Layout.setVerticalGroup(
-            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(jPanel3Layout.createSequentialGroup()
+        gl_pnlInputMain.setVerticalGroup(
+            gl_pnlInputMain.createParallelGroup(Alignment.LEADING)
+            .addGroup(gl_pnlInputMain.createSequentialGroup()
                 .addContainerGap()
-                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(jLabel1)
-                    .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(jLabel2)
-                    .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(jLabel3)
-                    .addComponent(jComboBox3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addGap(18, 18, 18)
-                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(jCheckBox1)
-                    .addComponent(jCheckBox2)
-                    .addComponent(jButton1))
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addGroup(gl_pnlInputMain.createParallelGroup(Alignment.BASELINE)
+                    .addComponent(fldId, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+                    .addComponent(lblId))
+                .addPreferredGap(ComponentPlacement.RELATED)
+                .addGroup(gl_pnlInputMain.createParallelGroup(Alignment.BASELINE)
+                    .addComponent(lblVideo)
+                    .addComponent(fldVideo, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+                    .addComponent(btnVideo)
+                    .addComponent(cbVideoLocal))
+                .addPreferredGap(ComponentPlacement.RELATED)
+                .addGroup(gl_pnlInputMain.createParallelGroup(Alignment.BASELINE)
+                    .addComponent(lblComment)
+                    .addComponent(fldComment, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+                    .addComponent(btnComment)
+                    .addComponent(cbCommentLocal))
+                .addPreferredGap(ComponentPlacement.RELATED)
+                .addGroup(gl_pnlInputMain.createParallelGroup(Alignment.BASELINE)
+                    .addComponent(lblOutput)
+                    .addComponent(fldOutput, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+                    .addComponent(cbOutputEnable))
+                .addPreferredGap(ComponentPlacement.UNRELATED)
+                .addComponent(btnApply)
+                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
-        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
-        jPanel1.setLayout(jPanel1Layout);
-        jPanel1Layout.setHorizontalGroup(
-            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
+        GroupLayout gl_pnlMain = new GroupLayout(pnlMain);
+        pnlMain.setLayout(gl_pnlMain);
+        gl_pnlMain.setHorizontalGroup(
+            gl_pnlMain.createParallelGroup(Alignment.LEADING)
+            .addGroup(Alignment.TRAILING, gl_pnlMain.createSequentialGroup()
                 .addContainerGap()
-                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 480, Short.MAX_VALUE)
-                    .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addGroup(gl_pnlMain.createParallelGroup(Alignment.TRAILING)
+                    .addComponent(pnlInputMain, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(scrDisplay, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 480, Short.MAX_VALUE)
+                    .addComponent(pnlButton, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                 .addContainerGap())
         );
-        jPanel1Layout.setVerticalGroup(
-            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
+        gl_pnlMain.setVerticalGroup(
+            gl_pnlMain.createParallelGroup(Alignment.LEADING)
+            .addGroup(Alignment.TRAILING, gl_pnlMain.createSequentialGroup()
                 .addContainerGap()
-                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 188, Short.MAX_VALUE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap())
+                .addComponent(scrDisplay, GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
+                .addPreferredGap(ComponentPlacement.RELATED)
+                .addComponent(pnlButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(ComponentPlacement.RELATED)
+                .addComponent(pnlInputMain, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+                .addGap(24, 24, 24))
         );
 
-        jMenu1.setText("File");
-        jMenuBar1.add(jMenu1);
-
-        jMenu2.setText("Edit");
-        jMenuBar1.add(jMenu2);
 
-        setJMenuBar(jMenuBar1);
+        JMenuBar menuBar = initMenuBar();
+        setJMenuBar(menuBar);
 
-        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        GroupLayout layout = new GroupLayout(getContentPane());
         getContentPane().setLayout(layout);
         layout.setHorizontalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+            layout.createParallelGroup(Alignment.LEADING)
+            .addComponent(pnlMain, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
         );
         layout.setVerticalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+            layout.createParallelGroup(Alignment.LEADING)
+            .addComponent(pnlMain, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
         );
 
         pack();
-    }// </editor-fold>//GEN-END:initComponents
+        initInputPanel();
+        pnlMain.setTransferHandler(new DownloadListTransferHandler());
+        tblDisplay.setTransferHandler(new TableTransferHandler());
+    }
 
-    /**
-     * @param args the command line arguments
+    private class ApplyActionListener implements ActionListener {
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            final DownloadProfile prof = new InqubusDownloadProfile();
+            final String id = Util.getVideoId(fldId.getText());
+
+            new Download(prof, id).execute();
+        }
+    }
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
      */
-    public static void main(String args[]) {
-        try {
-            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
-                if ("Nimbus".equals(info.getName())) {
-                    UIManager.setLookAndFeel(info.getClassName());
-                    break;
-                }
-            }
-        } catch (Exception e) {
-            try {
-                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-            } catch (Exception ex) {
-            }
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+    }// </editor-fold>//GEN-END:initComponents
+
+    private File searchFileMatchId(final File dir, final String id) throws UnsupportedOperationException {
+        // TODO 候補は複数返すようにして、その後の対処は呼び出しもとで行ってもらった方が良いかも
+        if (id.isEmpty()) {
+            return null;
         }
-        java.awt.EventQueue.invokeLater(new Runnable() {
 
-            public void run() {
-                new MainFrame().setVisible(true);
+        final File[] lists = dir.listFiles(new FilenameFilter() {
+
+            final Pattern pattern = Pattern.compile(id + "\\D");
+
+            @Override
+            public boolean accept(File dir, String name) {
+                return pattern.matcher(name).find();
             }
         });
+
+        if (lists.length == 1) {
+            return lists[0];
+        } else if (lists.length > 1) {
+            throw new UnsupportedOperationException();
+        } else {
+            return null;
+        }
     }
+
+    private void useMovieLocalCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_useMovieLocalCheckBoxItemStateChanged
+        final Config p = Config.INSTANCE;
+
+        final ItemSelectable source = evt.getItemSelectable();
+
+        JButton btn;
+        JTextField field;
+        File dir;
+        if (source == cbVideoLocal) {
+            btn = btnVideo;
+            field = fldVideo;
+            dir = new File(p.getVideoDir());
+        } else {
+            btn = btnComment;
+            field = fldComment;
+            dir = new File(p.getCommentDir());
+        }
+
+        final boolean useLocal = (evt.getStateChange() == ItemEvent.SELECTED);
+        btn.setEnabled(useLocal);
+
+        String text;
+        if (useLocal) {
+            final File f = searchFileMatchId(dir, fldId.getText());
+            if (f != null) {
+                text = f.getPath();
+            } else {
+                text = "";
+            }
+        } else {
+            text = p.getVideoFileNamePattern();
+        }
+        field.setText(text);
+    }//GEN-LAST:event_useMovieLocalCheckBoxItemStateChanged
+
+    private void outputConvertCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_outputConvertCheckBoxItemStateChanged
+        final boolean convert = (evt.getStateChange() == ItemEvent.SELECTED);
+        fldOutput.setEnabled(convert);
+    }//GEN-LAST:event_outputConvertCheckBoxItemStateChanged
+
+    private void idFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_idFieldFocusLost
+        final Config p = Config.INSTANCE;
+        final String id = fldId.getText();
+        if (id.isEmpty()) {
+            return;
+        }
+
+        if (cbVideoLocal.isSelected() && fldVideo.getText().isEmpty()) {
+            final File dir = new File(p.getVideoDir());
+            final File file = searchFileMatchId(dir, id);
+            if (file != null) {
+                fldVideo.setText(file.getPath());
+            }
+        }
+
+        if (cbCommentLocal.isSelected() && fldComment.getText().isEmpty()) {
+            final File dir = new File(p.getCommentDir());
+            final File file = searchFileMatchId(dir, id);
+            if (file != null) {
+                fldComment.setText(file.getPath());
+            }
+        }
+
+    }//GEN-LAST:event_idFieldFocusLost
     // Variables declaration - do not modify//GEN-BEGIN:variables
-    private javax.swing.JButton jButton1;
-    private javax.swing.JButton jButton2;
-    private javax.swing.JButton jButton3;
-    private javax.swing.JButton jButton4;
-    private javax.swing.JCheckBox jCheckBox1;
-    private javax.swing.JCheckBox jCheckBox2;
-    private javax.swing.JComboBox jComboBox1;
-    private javax.swing.JComboBox jComboBox2;
-    private javax.swing.JComboBox jComboBox3;
-    private javax.swing.JLabel jLabel1;
-    private javax.swing.JLabel jLabel2;
-    private javax.swing.JLabel jLabel3;
-    private javax.swing.JMenu jMenu1;
-    private javax.swing.JMenu jMenu2;
-    private javax.swing.JMenuBar jMenuBar1;
-    private javax.swing.JPanel jPanel1;
-    private javax.swing.JPanel jPanel2;
-    private javax.swing.JPanel jPanel3;
-    private javax.swing.JScrollPane jScrollPane1;
-    private javax.swing.JTable jTable1;
-    private javax.swing.JTextField jTextField1;
-    private javax.swing.JTextField jTextField2;
-    private javax.swing.JTextField jTextField3;
+    private final JTable tblDisplay;
+    // ボタン領域
+    private final JButton btnStart;
+    private final JButton btnStop;
+    private final JButton btnDeselect;
+    //入力領域 - 標準
+    private final JTextField fldId;
+    private final JCheckBox cbVideoLocal;
+    private final JTextField fldVideo;
+    private final JButton btnVideo;
+    private final JCheckBox cbCommentLocal;
+    private final JTextField fldComment;
+    private final JButton btnComment;
+    private final JCheckBox cbOutputEnable;
+    private final JTextField fldOutput;
+    // 適用
+    private final JButton btnApply = new JButton("適用");
     // End of variables declaration//GEN-END:variables
 
+    private void initInputPanel() {
+        fldId.setText("");
+
+        final Config p = Config.INSTANCE;
+
+        final boolean movieLocal = p.getVideoUseLocal();
+        cbVideoLocal.setSelected(movieLocal);
+        btnVideo.setEnabled(movieLocal);
+        if (!movieLocal) {
+            fldVideo.setText(p.getVideoFileNamePattern());
+        }
+
+        final boolean commentLocal = p.getCommentUseLocal();
+        cbCommentLocal.setSelected(commentLocal);
+        btnComment.setEnabled(commentLocal);
+        if (!commentLocal) {
+            fldComment.setText(p.getCommentFileNamePattern());
+        }
+
+        final boolean convert = p.getOutputEnable();
+        cbOutputEnable.setSelected(convert);
+        fldOutput.setEnabled(convert);
+        fldOutput.setText(p.getOutputFileNamePattern());
+
+    }
+
+    private JMenuBar initMenuBar() {
+        final JMenuBar menuBar = new JMenuBar();
+
+        final JMenu mnFile = new JMenu("ファイル(F)");
+        menuBar.add(mnFile);
+
+        final JMenuItem itExit = new JMenuItem("終了(X)", KeyEvent.VK_X);
+        itExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.CTRL_MASK));
+        itExit.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+        });
+        mnFile.add(itExit);
+
+        final JMenu mnTool = new JMenu("ツール(T)");
+        menuBar.add(mnTool);
+
+        final JMenuItem itOption = new JMenuItem("オプション(O)...", KeyEvent.VK_O);
+        // TODO ショートカットキー
+        itOption.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                final yukihane.inqubus.gui.ConfigDialog dlg = new yukihane.inqubus.gui.ConfigDialog(MainFrame.this);
+                dlg.setLocationRelativeTo(MainFrame.this);
+                dlg.setModal(true);
+                dlg.setVisible(true);
+            }
+        });
+        mnTool.add(itOption);
+
+        final JMenu mnHelp = new JMenu("ヘルプ(H)");
+        menuBar.add(mnHelp);
+
+        final JMenuItem itAbout = new JMenuItem("このソフトウェアについて(A)...", KeyEvent.VK_A);
+        itAbout.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                MainFrame_AboutBox dlg = new MainFrame_AboutBox(MainFrame.this);
+                dlg.pack();
+                dlg.setLocationRelativeTo(MainFrame.this);
+                dlg.setModal(true);
+                dlg.setVisible(true);
+            }
+        });
+        mnHelp.add(itAbout);
+
+        return menuBar;
+    }
+
     private class DownloadListTransferHandler extends TransferHandler {
 
+        private static final long serialVersionUID = 1L;
         private final Pattern movieIdPattern = Pattern.compile("(\\w\\w\\d+)");
 
         @Override
@@ -308,7 +528,8 @@ public class MainFrame extends javax.swing.JFrame {
             try {
                 Transferable transferable = support.getTransferable();
                 if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
-                    List<File> data = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
+                    @SuppressWarnings("unchecked")
+                    final List<File> data = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
                     Collection<Target> targets = Target.from(data);
                     targetModel.addTarget(targets);
                 } else if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
@@ -325,7 +546,7 @@ public class MainFrame extends javax.swing.JFrame {
                 }
                 return false;
             } catch (Exception e) {
-                e.printStackTrace();
+                logger.log(Level.SEVERE, null, e);
                 return false;
             }
         }
@@ -333,6 +554,8 @@ public class MainFrame extends javax.swing.JFrame {
 
     private class TableTransferHandler extends DownloadListTransferHandler {
 
+        private static final long serialVersionUID = 1L;
+
         @Override
         public boolean canImport(TransferHandler.TransferSupport support) {
             return super.canImport(support);
@@ -343,4 +566,91 @@ public class MainFrame extends javax.swing.JFrame {
             return super.importData(support);
         }
     }
+
+
+    private class InqubusDownloadProfile implements DownloadProfile {
+
+        private final LoginProfile loginProfile;
+        private final ProxyProfile proxyProfile;
+
+        private InqubusDownloadProfile() {
+            this.loginProfile = new InqubusLoginProfile();
+            this.proxyProfile = new InqubusProxyProfile();
+        }
+
+        @Override
+        public LoginProfile getLoginInfo() {
+            return this.loginProfile;
+        }
+
+        @Override
+        public ProxyProfile getProxyProfile() {
+            return this.proxyProfile;
+        }
+
+        @Override
+        public VideoProfile getVideoProfile() {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+
+        @Override
+        public CommentProfile getCommentProfile() {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+
+        @Override
+        public GeneralProfile getGeneralProfile() {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+    }
+
+    private class InqubusLoginProfile implements LoginProfile {
+        private final String mail;
+        private final String password;
+
+        private InqubusLoginProfile(){
+            final Config p = Config.INSTANCE;
+            this.mail = p.getId();
+            this.password = p.getPassword();
+        }
+
+        @Override
+        public String getMail() {
+            return this.mail;
+        }
+
+        @Override
+        public String getPassword() {
+            return this.password;
+        }
+    }
+
+    private class InqubusProxyProfile implements ProxyProfile {
+        private final boolean use;
+        private final String host;
+        private final int port;
+
+        private InqubusProxyProfile(){
+            final Config p = Config.INSTANCE;
+            this.use = p.getProxyUse();
+            this.host = p.getProxyHost();
+            final String pp = p.getProxyPort();
+            this.port = StringUtils.isBlank(pp) ? -1 : Integer.parseInt(pp);
+        }
+
+        @Override
+        public boolean use() {
+            return this.use;
+        }
+
+        @Override
+        public String getHost() {
+            return this.host;
+        }
+
+        @Override
+        public int getPort() {
+            return this.port;
+        }
+    }
 }