added a close button
authorcmzmasek <cmzmasek@yahoo.com>
Wed, 29 Jun 2016 23:13:25 +0000 (16:13 -0700)
committercmzmasek <cmzmasek@yahoo.com>
Wed, 29 Jun 2016 23:13:25 +0000 (16:13 -0700)
forester/java/src/org/forester/archaeopteryx/AptxConstants.java
forester/java/src/org/forester/archaeopteryx/NodeEditPanel.java
forester/java/src/org/forester/archaeopteryx/NodeFrame.java
forester/java/src/org/forester/archaeopteryx/NodePanel.java

index 182c7fc..456dea4 100644 (file)
@@ -61,7 +61,7 @@ public final class AptxConstants {
     static final boolean        SPECIAL_CUSTOM                                                = false;                                                                             //TODO remove me
     static final double         EXT_NODE_INFO_LENGTH_MAX_RATIO                                = 0.95;
     static final Dimension      NODE_PANEL_SPLIT_MINIMUM_SIZE                                 = new Dimension( 100, 50 );
-    static final Dimension      NODE_PANEL_SIZE                                               = new Dimension( 500, 600 );
+    static final Dimension      NODE_PANEL_SIZE                                               = new Dimension( 500, 540 );
     static final Dimension      NODE_FRAME_SIZE                                               = new Dimension( 520, 640 );
     static final String         APPLET_PARAM_NAME_FOR_URL_OF_TREE_TO_LOAD                     = "url_of_tree_to_load";
     static final String         APPLET_PARAM_NAME_FOR_URL_OF_SPECIES_TREE_TO_LOAD             = "url_of_species_tree_to_load";
index 972f0e9..21aaea9 100644 (file)
@@ -25,6 +25,9 @@
 
 package org.forester.archaeopteryx;
 
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.awt.event.KeyListener;
 import java.math.BigDecimal;
@@ -35,11 +38,12 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
 import javax.swing.JEditorPane;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
 import javax.swing.JTree;
 import javax.swing.event.TreeSelectionEvent;
 import javax.swing.event.TreeSelectionListener;
@@ -143,7 +147,9 @@ class NodeEditPanel extends JPanel {
     private final TreePanel                              _tree_panel;
     private final Map<DefaultMutableTreeNode, TagNumber> _map;
 
-    public NodeEditPanel( final PhylogenyNode phylogeny_node, final TreePanel tree_panel ) {
+    public NodeEditPanel( final PhylogenyNode phylogeny_node,
+                          final TreePanel tree_panel,
+                          final NodeFrame parent ) {
         _map = new HashMap<DefaultMutableTreeNode, TagNumber>();
         _my_node = phylogeny_node;
         _tree_panel = tree_panel;
@@ -159,17 +165,32 @@ class NodeEditPanel extends JPanel {
         getJTree().setToggleClickCount( 1 );
         getJTree().setInvokesStopCellEditing( true );
         final JScrollPane tree_view = new JScrollPane( getJTree() );
+        
+        final JButton close_button = new JButton( "Close" );
+        close_button.setToolTipText( "This only closes this window; to write values back to the phylogeny, press ENTER after editing a field." );
+        close_button.setEnabled( true );
+        
+        close_button.addActionListener( new ActionListener() {
+            public void actionPerformed( final ActionEvent e ) {
+                writeAll();
+                parent.close();
+           }
+        } );
+        
         _pane = new JEditorPane();
         _pane.setEditable( true );
-        final JScrollPane data_view = new JScrollPane( _pane );
-        final JSplitPane split_pane = new JSplitPane( JSplitPane.VERTICAL_SPLIT );
-        split_pane.setTopComponent( tree_view );
-        // split_pane.setBottomComponent( data_view );
-        data_view.setMinimumSize( AptxConstants.NODE_PANEL_SPLIT_MINIMUM_SIZE );
         tree_view.setMinimumSize( AptxConstants.NODE_PANEL_SPLIT_MINIMUM_SIZE );
-        // split_pane.setDividerLocation( 400 );
-        split_pane.setPreferredSize( AptxConstants.NODE_PANEL_SIZE );
-        add( split_pane );
+        tree_view.setPreferredSize( AptxConstants.NODE_PANEL_SIZE );
+        
+        close_button.setAlignmentX( Component.CENTER_ALIGNMENT );
+        tree_view.setAlignmentX( Component.CENTER_ALIGNMENT );
+        
+        final JPanel panel = new JPanel();
+        panel.setLayout( new BoxLayout( panel, BoxLayout.Y_AXIS ) );
+        panel.add( tree_view );
+        panel.add( close_button );
+        add( panel );
+        
         getJTree().getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
         getJTree().addKeyListener( new KeyListener() {
 
@@ -215,6 +236,8 @@ class NodeEditPanel extends JPanel {
                 getTreePanel().repaint();
             }
         } );
+        
+        
        
     }
 
@@ -1118,6 +1141,7 @@ class NodeEditPanel extends JPanel {
     }
 
     void writeAll() {
+        //TODO this does not do what it should do.
         for( int i = 0; i < getJTree().getRowCount(); i++ ) {
             final TreePath p = getJTree().getPathForRow( i );
             writeBack( ( DefaultMutableTreeNode ) p.getLastPathComponent() );
index 4c82bfe..cf65155 100644 (file)
@@ -49,28 +49,33 @@ final class NodeFrame extends javax.swing.JFrame {
         setSize( AptxConstants.NODE_FRAME_SIZE );
         _index = x;
         final Container contentPane = getContentPane();
-        final NodePanel nodepanel = new NodePanel( n );
-        contentPane.add( nodepanel, BorderLayout.CENTER );
+        final NodePanel nodepanel = new NodePanel( n, this );
+        contentPane.add( nodepanel );
         addWindowListener( new WindowAdapter() {
 
             @Override
             public void windowClosing( final WindowEvent e ) {
-                remove(); // to release slot in array
-                dispose();
+                close();
             }
         } );
-        setResizable( false );
+        setResizable( true );
         nodepanel.setVisible( true );
         setVisible( true );
     }
 
+    
+    void close() {
+        remove(); // to release slot in array
+        dispose();
+    }
+    
     NodeFrame( final PhylogenyNode n, final Phylogeny tree, final TreePanel tp, final int x, final String dummy ) {
         super( "Editable Node " + ( ForesterUtil.isEmpty( n.getName() ) ? n.getId() : n.getName() ) );
         _reepanel = tp;
         setSize( AptxConstants.NODE_FRAME_SIZE );
         _index = x;
         final Container contentPane = getContentPane();
-        final NodeEditPanel nodepanel = new NodeEditPanel( n, tp );
+        final NodeEditPanel nodepanel = new NodeEditPanel( n, tp, this );
         contentPane.add( nodepanel, BorderLayout.CENTER );
         addWindowListener( new WindowAdapter() {
 
index e7427ca..0c1aa5b 100644 (file)
 
 package org.forester.archaeopteryx;
 
+
 import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.util.List;
 import java.util.Map;
 import java.util.SortedMap;
 import java.util.SortedSet;
 
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
 import javax.swing.JEditorPane;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
@@ -116,7 +122,7 @@ class NodePanel extends JPanel implements TreeSelectionListener {
     private final JEditorPane _pane;
     private final JTree       _tree;
 
-    public NodePanel( final PhylogenyNode phylogeny_node ) {
+    public NodePanel( final PhylogenyNode phylogeny_node, final NodeFrame parent ) {
         String node_name = "";
         if ( !ForesterUtil.isEmpty( phylogeny_node.getName() ) ) {
             node_name = phylogeny_node.getName() + " ";
@@ -131,17 +137,38 @@ class NodePanel extends JPanel implements TreeSelectionListener {
         expandPath( SEQUENCE );
         expandPath( EVENTS );
         final JScrollPane tree_view = new JScrollPane( getJTree() );
+        
+        final JButton close_button = new JButton( "Close" );
+        close_button.setEnabled( true );
+       
         _pane = new JEditorPane();
         _pane.setEditable( false );
+        
         final JScrollPane data_view = new JScrollPane( _pane );
         final JSplitPane split_pane = new JSplitPane( JSplitPane.VERTICAL_SPLIT );
         split_pane.setTopComponent( tree_view );
+        data_view.add( close_button );
         split_pane.setBottomComponent( data_view );
         data_view.setMinimumSize( AptxConstants.NODE_PANEL_SPLIT_MINIMUM_SIZE );
         tree_view.setMinimumSize( AptxConstants.NODE_PANEL_SPLIT_MINIMUM_SIZE );
-        split_pane.setDividerLocation( 400 );
+        split_pane.setDividerLocation( 300 );
         split_pane.setPreferredSize( AptxConstants.NODE_PANEL_SIZE );
-        add( split_pane );
+       
+        
+        close_button.addActionListener( new ActionListener() {
+            public void actionPerformed( final ActionEvent e ) {
+                parent.close();
+           }
+        } );
+        
+      
+        close_button.setAlignmentX( Component.CENTER_ALIGNMENT );
+        split_pane.setAlignmentX( Component.CENTER_ALIGNMENT );
+        final JPanel panel = new JPanel();
+        panel.setLayout( new BoxLayout( panel, BoxLayout.Y_AXIS ) );
+        panel.add( split_pane );
+        panel.add( close_button );
+        add( panel );
     }
 
     @Override