(JAL-368) ensure window never gets a negative Y coordinate when dragged or resised.
[jalview.git] / src / jalview / gui / Desktop.java
index 5dadeb3..b6cbea3 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
  * 
 package jalview.gui;
 
 import jalview.bin.Cache;
-import jalview.io.*;
+import jalview.io.FileLoader;
+import jalview.io.FormatAdapter;
+import jalview.io.IdentifyFile;
+import jalview.io.JalviewFileChooser;
+import jalview.io.JalviewFileView;
 import jalview.ws.params.ParamManager;
 
-import java.awt.*;
-import java.awt.datatransfer.*;
-import java.awt.dnd.*;
-import java.awt.event.*;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.GridLayout;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.ClipboardOwner;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyVetoException;
 import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.InputStream;
 import java.lang.reflect.Constructor;
 import java.net.URL;
-import java.net.URLConnection;
-import java.nio.channels.ReadableByteChannel;
-import java.util.*;
-
-import javax.swing.*;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import javax.swing.DefaultDesktopManager;
+import javax.swing.DesktopManager;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JDesktopPane;
+import javax.swing.JFrame;
+import javax.swing.JInternalFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JProgressBar;
+import javax.swing.SwingUtilities;
 import javax.swing.event.MenuEvent;
 import javax.swing.event.MenuListener;
 
-import com.sun.xml.internal.ws.streaming.TidyXMLStreamReader;
-
 /**
  * Jalview Desktop
  * 
@@ -166,6 +204,10 @@ public class Desktop extends jalview.jbgui.GDesktop implements
 
     public void dragFrame(JComponent f, int newX, int newY)
     {
+      if (newY<0)
+      {
+        newY=0;
+      }
       delegate.dragFrame(f, newX, newY);
     }
 
@@ -202,6 +244,11 @@ public class Desktop extends jalview.jbgui.GDesktop implements
     public void resizeFrame(JComponent f, int newX, int newY, int newWidth,
             int newHeight)
     {
+      Rectangle b=desktop.getBounds();
+      if (newY<0)
+      {
+        newY=0;
+      }
       delegate.resizeFrame(f, newX, newY, newWidth, newHeight);
     }
 
@@ -244,12 +291,14 @@ public class Desktop extends jalview.jbgui.GDesktop implements
     //sp.getViewport().setView(desktop);
     //getContentPane().add(sp, BorderLayout.CENTER);
     getContentPane().add(desktop, BorderLayout.CENTER);
-      desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
+    desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
+    
       
     // This line prevents Windows Look&Feel resizing all new windows to maximum
     // if previous window was maximised
     desktop.setDesktopManager(new MyDesktopManager(
             new DefaultDesktopManager()));
+    
     Rectangle dims = getLastKnownDimensions("");
     if (dims != null)
     {
@@ -281,8 +330,11 @@ public class Desktop extends jalview.jbgui.GDesktop implements
       @Override
       public void run()
       {
+        Cache.log.debug("Starting news thread.");
+
         jvnews = new BlogReader(me);
         showNews.setVisible(true);
+        Cache.log.debug("Completed news thread.");
       }
     }).start();
     
@@ -294,7 +346,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements
       }
     });
 
-    this.addMouseListener(new MouseAdapter()
+    MouseAdapter ma;
+    this.addMouseListener(ma=new MouseAdapter()
     {
       public void mousePressed(MouseEvent evt)
       {
@@ -304,6 +357,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements
         }
       }
     });
+    desktop.addMouseListener(ma);
+   
     this.addFocusListener(new FocusListener()
     {
       
@@ -371,22 +426,19 @@ public class Desktop extends jalview.jbgui.GDesktop implements
   void showNews(boolean visible)
   {
     {
-      jvnews.setVisible(visible);
+      Cache.log.debug((visible?"Showing":"Hiding")+" news.");
       showNews.setSelected(visible);
-      if (visible)
+      if (visible && !jvnews.isVisible())
       {
-        jvnews.refreshNews();
-        jvnews.toFront();
-        // try real hard to get focus when the news is first opened
         new Thread(new Runnable() {
           @Override
           public void run()
           {
-            while (jvnews.isVisible() && !jvnews.requestFocusInWindow())
-            {
-              try { Thread.sleep(50); } catch (InterruptedException x) {}; 
-            }
-            
+            long instance=System.currentTimeMillis();
+            Desktop.instance.setProgressBar("Refreshing news", instance);
+            jvnews.refreshNews();
+            Desktop.instance.setProgressBar(null, instance);
+            jvnews.showNews();
           }
         }).start();
       }
@@ -2014,7 +2066,6 @@ public class Desktop extends jalview.jbgui.GDesktop implements
         }
       }
     }
-
   }
 
   /**
@@ -2022,10 +2073,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements
    */
   public void relayerWindows()
   {
-    if (jvnews!=null && jvnews.isVisible())
-    {
-      jvnews.toFront();
-    }
+    
   }
 
   protected JMenuItem groovyShell;