/*
 * AddressBookPanel.java
 *
 * Copyright 2011 John W Dawson
 *
 * This code is distributed under the terms of the GNU General Public License, version 3
 *
 * This class represents the panels on which the data input fields appear. Each panel
 * is displayed on a separate tab within an EditPanel 
 */
 
import javax.swing.*;
import java.awt.*;
class AddressBookPanel extends JPanel
{

  private int numFields = 0;
  private GroupLayout.ParallelGroup horizontalGroup;
  private GroupLayout.SequentialGroup verticalGroup;
  private GroupLayout layout;

  public AddressBookPanel () 
  {
    // Create group layout
    layout = new GroupLayout(this);
    layout.setAutoCreateGaps(true);
    layout.setAutoCreateContainerGaps(true);    
    this.setLayout(layout);
    
    horizontalGroup = layout.createParallelGroup(GroupLayout.Alignment.TRAILING);
    layout.setHorizontalGroup (horizontalGroup);
    
    verticalGroup = layout.createSequentialGroup();
    layout.setVerticalGroup (verticalGroup);
    
  }
  
  
  protected void addField (String labelText, AddressBookField field)
  {
    // Create groups to arrange label & field
    GroupLayout.SequentialGroup fieldHorizontalGroup = layout.createSequentialGroup();
    horizontalGroup.addGroup (fieldHorizontalGroup);
    
    // Label, call button & field are centred along horizontal axis for text fields, otherwise
    // label is aligned with top of multi-line and image fields
    GroupLayout.ParallelGroup fieldVerticalGroup = layout.createParallelGroup
        (field instanceof AddressBookTextField ? GroupLayout.Alignment.CENTER : GroupLayout.Alignment.LEADING);
    verticalGroup.addGroup (fieldVerticalGroup);

    // Add a spacer to push fields to right edge
    fieldHorizontalGroup.addContainerGap (GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE);

    // Create label & add to panel    
    JLabel label = new JLabel (labelText + (labelText.length() > 0 ? ":" : ""), JLabel.TRAILING);
    fieldHorizontalGroup.addComponent (label, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                                       GroupLayout.PREFERRED_SIZE);
    fieldVerticalGroup.addComponent (label, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                                     GroupLayout.PREFERRED_SIZE);
    
    // Associate label with field component
    label.setLabelFor ((JComponent)field);
    
    // Add call button to group if required
    CallButton callButton = field.getCallButton ();
    if (callButton != null)
    {
      fieldHorizontalGroup.addComponent (callButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                                         GroupLayout.PREFERRED_SIZE);
      fieldVerticalGroup.addComponent (callButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                                       GroupLayout.PREFERRED_SIZE);
    }
    
    // Add field to group
    fieldHorizontalGroup.addComponent ((JComponent)field, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                                       GroupLayout.PREFERRED_SIZE);
    fieldVerticalGroup.addComponent ((JComponent)field, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
                                     GroupLayout.PREFERRED_SIZE);
                                     
    ++numFields;
  }
        
}
