AttributeManifestTabbedPane.java :  » Math » migen » uk » ac » lkl » migen » system » expresser » ui » Java Open Source

Java Open Source » Math » migen 
migen » uk » ac » lkl » migen » system » expresser » ui » AttributeManifestTabbedPane.java
/**
 * 
 */
package uk.ac.lkl.migen.system.expresser.ui;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;

import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import uk.ac.lkl.migen.system.expresser.model.Walker;

/**
 * 
 * Implements the holder of tabs within property lists
 * 
 * Tied number walkers recognise instances of this class
 * and treat them specially
 * 
 * @author Ken Kahn
 *
 */
public class AttributeManifestTabbedPane extends JTabbedPane {
    
    // used to maintain an appropriate width for the manifest
    protected Component previouslySelectedComponent = null;
    
    public AttributeManifestTabbedPane() {
  super();
  ChangeListener listener = new ChangeListener() {

      public void stateChanged(ChangeEvent e) {
    adjustWidth();
      }
      
  };
  addChangeListener(listener);
    }

    public boolean walkToTiedNumbers(Walker walker) {
  int originalSelectedIndex = getSelectedIndex();
  int tabCount = getTabCount();
  for (int i = 0; i < tabCount; i++) {
      setSelectedIndex(i);
      Component selectedComponent = getSelectedComponent();
      if (selectedComponent instanceof Container &&
    !ObjectSetCanvas.walkContainerToTiedNumbers((Container) selectedComponent, walker, false)) {
    // restore original index
    setSelectedIndex(originalSelectedIndex);
    return false;
      }
  }
  // restore original index
  setSelectedIndex(originalSelectedIndex);
  return true;
    }
    
    @Override
    public void addNotify() {
  super.addNotify();
  adjustWidth();
    }
    
    protected void adjustWidth() {
  // when a tab is selected we change the width
  // to fit the contents
  Component selectedComponent = getSelectedComponent();
  if (selectedComponent == null) {
      return;
  }
  if (selectedComponent == previouslySelectedComponent) {
      return;
  }
  previouslySelectedComponent = selectedComponent;
  Dimension preferredSizeOfSelectedComponent = selectedComponent.getPreferredSize();
  Container ancestor = getParent();
  while (ancestor != null && !(ancestor instanceof AttributeManifest)) {
      ancestor = ancestor.getParent();
  }
  if (ancestor != null) {
      int panelWidth = preferredSizeOfSelectedComponent.width;
      // 30 is a good amount extra for the attribute manifest container
      // was 15 but caused Issue 997
      ancestor.setSize(panelWidth+30, ancestor.getHeight());
  }
    }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.