OSDN Git Service

終了時に画面サイズ, 表示位置を記憶し次回起動時に再現する
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / gui / MainFrame.java
index dddc532..248e2b0 100644 (file)
@@ -5,18 +5,20 @@
  */
 package yukihane.inqubus.gui;
 
+import java.awt.Dimension;
 import java.awt.Image;
 import java.awt.ItemSelectable;
+import java.awt.Point;
 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.FocusEvent;
-import java.awt.event.FocusListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.awt.event.KeyEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.io.File;
@@ -56,6 +58,7 @@ import javax.swing.SwingUtilities;
 import javax.swing.TransferHandler;
 import javax.swing.WindowConstants;
 import javax.swing.border.BevelBorder;
+import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import saccubus.FfmpegOption;
@@ -109,6 +112,9 @@ public class MainFrame extends JFrame {
 
     /** Creates new form MainFrame */
     public MainFrame() {
+        super();
+        addWindowListener(new MainFrameWindowListener());
+
         final Config p = Config.INSTANCE;
 
         // ワーカスレッド生成
@@ -465,6 +471,33 @@ public class MainFrame extends JFrame {
         );
 
         pack();
+
+        /*
+         * 画面のサイズや位置を前回終了時のものに設定する
+         */
+        final int windowWidth = p.getSystemWindowWidth();
+        final int windowHeight = p.getSystemWindowHeight();
+        if (windowWidth > 0 && windowHeight > 0) {
+            setSize(windowWidth, windowHeight);
+        }
+
+        final int windowPosX = p.getSystemWindowPosX();
+        final int windowPosY = p.getSystemWindowPosY();
+        if (windowPosX > 0 && windowPosY > 0) {
+            setLocation(windowPosX, windowPosY);
+        } else {
+            setLocationByPlatform(true);
+        }
+
+        final int colId = p.getSystemColumnId();
+        if(colId > 0) {
+            tblDisplay.getColumnModel().getColumn(0).setPreferredWidth(colId);
+        }
+        final int colStatus = p.getSystemColumnStatus();
+        if(colStatus > 0) {
+            tblDisplay.getColumnModel().getColumn(4).setPreferredWidth(colStatus);
+        }
+
         initInputPanel();
         pnlMain.setTransferHandler(new DownloadListTransferHandler());
         tblDisplay.setTransferHandler(new TableTransferHandler());
@@ -834,6 +867,32 @@ public class MainFrame extends JFrame {
         }
     }
 
+    private class MainFrameWindowListener extends WindowAdapter {
+        @Override
+        public void windowClosing(WindowEvent e) {
+            final Config p = Config.INSTANCE;
+
+            final Dimension size = getSize();
+            p.setSystemWindowWidth(size.width);
+            p.setSystemWindowHeight(size.height);
+
+            final Point pos = getLocation();
+            p.setSystemWindowPosX(pos.x);
+            p.setSystemWindowPosY(pos.y);
+
+            p.setSystemColumnId(tblDisplay.getColumnModel().getColumn(0).getWidth());
+            p.setSystemColumnVideo(tblDisplay.getColumnModel().getColumn(1).getWidth());
+            p.setSystemColumnComment(tblDisplay.getColumnModel().getColumn(2).getWidth());
+            p.setSystemColumnConvert(tblDisplay.getColumnModel().getColumn(3).getWidth());
+            p.setSystemColumnStatus(tblDisplay.getColumnModel().getColumn(4).getWidth());
+            try {
+                p.save();
+            } catch (ConfigurationException ex) {
+                logger.log(Level.SEVERE, "コンフィグ保存失敗", ex);
+            }
+        }
+    }
+
     /*
      * ここからDownloadProfile作成用クラスの定義
      */