X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;h=ed968f89b942ea534c9daaeede74e8dc890e8ddb;hb=ccc0d91abe38690088a6050faba8ef66cde1f271;hp=36fbcf9d6be2881ed7ee0fd82b59fc9bf5cdc603;hpb=7cb5308c5ec411a566d131993e63abaaf7f7c7b9;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 36fbcf9..ed968f8 100755 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -45,8 +45,8 @@ public class Desktop //Need to decide if the Memory Usage is to be included in //Next release or not. - // public static MyDesktopPane desktop; - public static JDesktopPane desktop; + public static MyDesktopPane desktop; + // public static JDesktopPane desktop; static int openFrameCount = 0; @@ -64,6 +64,11 @@ public class Desktop */ public Desktop() { + /** + * A note to implementors. It is ESSENTIAL that any + * activities that might block are spawned off as threads rather + * than waited for during this constructor. + */ instance = this; doVamsasClientCheck(); doGroovyCheck(); @@ -71,8 +76,9 @@ public class Desktop setTitle("Jalview " + jalview.bin.Cache.getProperty("VERSION")); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - desktop = new JDesktopPane(); + boolean selmemusage = jalview.bin.Cache.getDefault("SHOW_MEMUSAGE",false); + desktop = new MyDesktopPane(selmemusage); + showMemusage.setSelected(selmemusage); desktop.setBackground(Color.white); getContentPane().setLayout(new BorderLayout()); getContentPane().add(desktop, BorderLayout.CENTER); @@ -120,10 +126,9 @@ public class Desktop this.setDropTarget(new java.awt.dnd.DropTarget(desktop, this)); + // Spawn a thread that shows the splashscreen + new SplashScreen(); - /////////Add a splashscreen on startup - /////////Add a splashscreen on startup - new SplashScreen(); discoverer = new jalview.ws.Discoverer(); // Only gets started if gui is displayed. @@ -663,6 +668,25 @@ public class Desktop reorderAssociatedWindows(false, true); } + /* (non-Javadoc) + * @see jalview.jbgui.GDesktop#garbageCollect_actionPerformed(java.awt.event.ActionEvent) + */ + protected void garbageCollect_actionPerformed(ActionEvent e) + { + // We simply collect the garbage + jalview.bin.Cache.log.debug("Collecting garbage..."); + System.gc(); + jalview.bin.Cache.log.debug("Finished garbage collection."); + } + + /* (non-Javadoc) + * @see jalview.jbgui.GDesktop#showMemusage_actionPerformed(java.awt.event.ActionEvent) + */ + protected void showMemusage_actionPerformed(ActionEvent e) + { + desktop.showMemoryUsage(showMemusage.isSelected()); + } + void reorderAssociatedWindows(boolean minimize, boolean close) { JInternalFrame[] frames = desktop.getAllFrames(); @@ -739,7 +763,6 @@ public class Desktop } } } - /** * DOCUMENT ME! * @@ -815,21 +838,45 @@ public class Desktop { if (fileLoadingCount == 0) { + addProgressPanel("Loading File: " + fileName + " "); + + } + fileLoadingCount++; + } + private JProgressBar addProgressPanel(String string) + { + if (progressPanel==null) + { progressPanel = new JPanel(new BorderLayout()); - JProgressBar progressBar = new JProgressBar(); - progressBar.setIndeterminate(true); + totalProgressCount=0; + } + JProgressBar progressBar = new JProgressBar(); + progressBar.setIndeterminate(true); - progressPanel.add(new JLabel("Loading File: " + fileName + " "), - BorderLayout.WEST); + progressPanel.add(new JLabel(string), + BorderLayout.WEST); - progressPanel.add(progressBar, BorderLayout.CENTER); + progressPanel.add(progressBar, BorderLayout.CENTER); - instance.getContentPane().add(progressPanel, BorderLayout.SOUTH); + instance.getContentPane().add(progressPanel, BorderLayout.SOUTH); + totalProgressCount++; + validate(); + return progressBar; + } + int totalProgressCount=0; + private void removeProgressPanel(JProgressBar progbar) + { + if (progressPanel!=null) + { + progressPanel.remove(progbar); + if (--totalProgressCount<1) + { + this.getContentPane().remove(progressPanel); + progressPanel = null; + } } - fileLoadingCount++; validate(); } - public void stopLoading() { fileLoadingCount--; @@ -844,7 +891,6 @@ public class Desktop } validate(); } - public static int getViewCount(String viewId) { int count = 0; @@ -1058,15 +1104,25 @@ public class Desktop { if (dsktp.v_client == null) { - dsktp.v_client = new VamsasApplication(dsktp, mysesid); - dsktp.setupVamsasConnectedGui(); - dsktp.v_client.initial_update(); + Thread rthr = new Thread(new Runnable() { + + public void run() + { + dsktp.v_client = new VamsasApplication(dsktp, mysesid); + dsktp.setupVamsasConnectedGui(); + dsktp.v_client.initial_update(); + } + + }); + rthr.start(); } }; }); VamsasStMenu.add(sessit); } - VamsasStMenu.setVisible(true); + // don't show an empty menu. + VamsasStMenu.setVisible(sess.length>0); + } else { @@ -1128,6 +1184,7 @@ public class Desktop } } } + JProgressBar vamUpdate = null; /** * hide vamsas user gui bits when a vamsas document event is being handled. * @param b true to hide gui, false to reveal gui @@ -1136,6 +1193,15 @@ public class Desktop { jalview.bin.Cache.log.debug("Setting gui for Vamsas update " + (b ? "in progress" : "finished")); + + if (vamUpdate!=null) + { + this.removeProgressPanel(vamUpdate); + } + if (b) + { + vamUpdate = this.addProgressPanel("Updating vamsas session"); + } vamsasStart.setVisible(!b); vamsasStop.setVisible(!b); vamsasSave.setVisible(!b); @@ -1155,12 +1221,18 @@ public class Desktop public void checkForQuestionnaire(String url) { UserQuestionnaireCheck jvq = new UserQuestionnaireCheck(url); - javax.swing.SwingUtilities.invokeLater(jvq); + //javax.swing.SwingUtilities.invokeLater(jvq); + new Thread(jvq).start(); } - - /*DISABLED - class MyDesktopPane extends JDesktopPane implements Runnable + /** + * Proxy class for JDesktopPane which optionally + * displays the current memory usage and highlights + * the desktop area with a red bar if free memory runs low. + * @author AMW + */ + public class MyDesktopPane extends JDesktopPane implements Runnable { + boolean showMemoryUsage = false; Runtime runtime; java.text.NumberFormat df; @@ -1181,7 +1253,10 @@ public class Desktop worker.start(); } } - + public boolean isShowMemoryUsage() + { + return showMemoryUsage; + } public void run() { df = java.text.NumberFormat.getNumberInstance(); @@ -1228,13 +1303,16 @@ public class Desktop getHeight() - g.getFontMetrics().getHeight()); } } - }*/ + + + + } protected JMenuItem groovyShell; public void doGroovyCheck() { if (jalview.bin.Cache.groovyJarsPresent()) { groovyShell = new JMenuItem(); - groovyShell.setText("Groovy Shell..."); + groovyShell.setText("Groovy Console..."); groovyShell.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -1249,7 +1327,7 @@ public class Desktop * Accessor method to quickly get all the AlignmentFrames * loaded. */ - protected AlignFrame[] getAlignframes() { + public static AlignFrame[] getAlignframes() { JInternalFrame[] frames = Desktop.desktop.getAllFrames(); if (frames == null)