getting of external node data
[jalview.git] / forester / java / src / org / forester / archaeopteryx / MainFrame.java
index 5af1879..ac08d25 100644 (file)
@@ -24,6 +24,7 @@
 
 package org.forester.archaeopteryx;
 
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.Container;
 import java.awt.Font;
@@ -42,10 +43,14 @@ import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
 import javax.swing.JRadioButtonMenuItem;
+import javax.swing.SwingUtilities;
 
 import org.forester.archaeopteryx.Options.CLADOGRAM_TYPE;
 import org.forester.archaeopteryx.Options.NODE_LABEL_DIRECTION;
 import org.forester.archaeopteryx.Options.PHYLOGENY_GRAPHICS_TYPE;
+import org.forester.archaeopteryx.tools.InferenceManager;
+import org.forester.archaeopteryx.tools.ProcessPool;
+import org.forester.archaeopteryx.tools.ProcessRunning;
 import org.forester.phylogeny.Phylogeny;
 import org.forester.phylogeny.PhylogenyNodeI.NH_CONVERSION_SUPPORT_VALUE_STYLE;
 import org.forester.phylogeny.data.NodeVisualization.NodeFill;
@@ -202,6 +207,8 @@ public abstract class MainFrame extends JFrame implements ActionListener {
     JMenuItem                 _phyloxml_website_item;
     JMenuItem                 _phyloxml_ref_item;
     JMenuItem                 _aptx_ref_item;
+    // process menu:
+    JMenu                     _process_menu;
     // Handy pointers to child components:
     MainPanel                 _mainpanel;
     Container                 _contentpane;
@@ -209,9 +216,15 @@ public abstract class MainFrame extends JFrame implements ActionListener {
     Configuration             _configuration;
     JMenuItem                 _remove_branch_color_item;
     Options                   _options;
+    InferenceManager          _inference_manager;
+    final ProcessPool         _process_pool;
 
     MainFrame() {
-        // Empty constructor.
+        _process_pool = ProcessPool.createInstance();
+    }
+
+    public ProcessPool getProcessPool() {
+        return _process_pool;
     }
 
     /**
@@ -535,6 +548,43 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         _jmenubar.add( _help_jmenu );
     }
 
+    public void updateProcessMenu() {
+        // In general Swing is not thread safe.
+        // See "Swing's Threading Policy".
+        SwingUtilities.invokeLater( new Runnable() {
+
+            public void run() {
+                doUpdateProcessMenu();
+            }
+        } );
+    }
+
+    private void doUpdateProcessMenu() {
+        if ( _process_pool.size() > 0 ) {
+            if ( _process_menu == null ) {
+                _process_menu = createMenu( "", getConfiguration() );
+                _process_menu.setForeground( Color.RED );
+            }
+            _process_menu.removeAll();
+            final String text = "processes running: " + _process_pool.size();
+            _process_menu.setText( text );
+            _jmenubar.add( _process_menu );
+            for( int i = 0; i < _process_pool.size(); ++i ) {
+                final ProcessRunning p = _process_pool.getProcessByIndex( i );
+                _process_menu.add( customizeJMenuItem( new JMenuItem( p.getName() + " [" + p.getStart() + "]" ) ) );
+            }
+        }
+        else {
+            if ( _process_menu != null ) {
+                _process_menu.removeAll();
+                _jmenubar.remove( _process_menu );
+            }
+        }
+        _jmenubar.validate();
+        _jmenubar.repaint();
+        repaint();
+    }
+
     void buildTypeMenu() {
         _type_menu = createMenu( TYPE_MENU_HEADER, getConfiguration() );
         _type_menu.add( _rectangular_type_cbmi = new JCheckBoxMenuItem( MainFrame.RECTANGULAR_TYPE_CBMI_LABEL ) );
@@ -694,7 +744,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         }
     }
 
-    void customizeJMenuItem( final JMenuItem jmi ) {
+    JMenuItem customizeJMenuItem( final JMenuItem jmi ) {
         if ( jmi != null ) {
             jmi.setFont( MainFrame.menu_font );
             if ( !getConfiguration().isUseNativeUI() ) {
@@ -703,6 +753,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
             }
             jmi.addActionListener( this );
         }
+        return jmi;
     }
 
     void customizeRadioButtonMenuItem( final JRadioButtonMenuItem item, final boolean is_selected ) {
@@ -776,7 +827,7 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         return _label_direction_cbmi;
     }
 
-    MainPanel getMainPanel() {
+    public MainPanel getMainPanel() {
         return _mainpanel;
     }
 
@@ -852,6 +903,14 @@ public abstract class MainFrame extends JFrame implements ActionListener {
         _options = options;
     }
 
+    void setInferenceManager( final InferenceManager i ) {
+        _inference_manager = i;
+    }
+
+    public InferenceManager getInferenceManager() {
+        return _inference_manager;
+    }
+
     void setSelectedTypeInTypeMenu( final PHYLOGENY_GRAPHICS_TYPE type ) {
         setTypeMenuToAllUnselected();
         switch ( type ) {
@@ -1101,10 +1160,11 @@ public abstract class MainFrame extends JFrame implements ActionListener {
      */
     static void about() {
         final StringBuffer about = new StringBuffer( "Archaeopteryx\nVersion " + Constants.VERSION + "\n" );
-        about.append( "Copyright (C) 2007-2011 Christian Zmasek\n" );
+        about.append( "Copyright (C) 2007-2012 Christian M. Zmasek\n" );
         about.append( "All Rights Reserved\n" );
         about.append( "License: GNU Lesser General Public License (LGPL)\n" );
         about.append( "Last modified: " + Constants.PRG_DATE + "\n" );
+        about.append( "Based on: " + ForesterUtil.getForesterLibraryInformation() + "\n" );
         about.append( "phyloXML version : " + ForesterConstants.PHYLO_XML_VERSION + "\n" );
         about.append( "phyloXML location: " + ForesterConstants.PHYLO_XML_LOCATION + "\n" );
         if ( !ForesterUtil.isEmpty( ForesterUtil.JAVA_VERSION ) && !ForesterUtil.isEmpty( ForesterUtil.JAVA_VENDOR ) ) {