package edu.cmu.minorthird.text.gui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.WindowAdapter; import java.io.File; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JSplitPane; import org.apache.log4j.Logger; import edu.cmu.minorthird.text.MutableTextLabels; /** * A TextBaseViewer augmented with a ViewerTracker component. * * @author William Cohen */ public class TrackedTextBaseComponent extends JComponent{ static final long serialVersionUID=20080314L; protected Logger log; protected edu.cmu.minorthird.text.TextBase base; protected edu.cmu.minorthird.text.TextLabels viewLabels; protected MutableTextLabels editLabels; protected StatusMessage statusMsg; protected TextBaseViewer viewer; protected ViewerTracker viewerTracker; // after Kevin's refactoring of components in this package, // initLayout was sometimes called zero times, sometimes once. // after William's fixes, this went to once or twice. // this flag keeps initLayout code from happening more than once. private boolean laidOut=false; protected TrackedTextBaseComponent(){ log=Logger.getLogger(this.getClass().getName()); } public TrackedTextBaseComponent(edu.cmu.minorthird.text.TextBase base, edu.cmu.minorthird.text.TextLabels viewLabels, MutableTextLabels editLabels,StatusMessage statusMsg){ init(base,viewLabels,editLabels,statusMsg); } protected void init(edu.cmu.minorthird.text.TextBase base, edu.cmu.minorthird.text.TextLabels viewLabels, MutableTextLabels editLabels,StatusMessage statusMsg){ log=Logger.getLogger(this.getClass().getName()); this.base=base; this.viewLabels=viewLabels; this.editLabels=editLabels; this.statusMsg=statusMsg; } public TextBaseViewer getViewer(){ return viewer; } public ViewerTracker getViewerTracker(){ return viewerTracker; } /** * Layout stuff - assumes that viewer and viewerTracker are already created. */ protected void initializeLayout(){ if(laidOut) return; setPreferredSize(new Dimension(800,600)); setLayout(new GridBagLayout()); GridBagConstraints gbc; viewer.setMinimumSize(new Dimension(200,200)); viewerTracker.setMinimumSize(new Dimension(200,50)); JSplitPane splitPane= new JSplitPane(JSplitPane.VERTICAL_SPLIT,viewer,viewerTracker); splitPane.setDividerLocation(400); gbc=new GridBagConstraints(); gbc.fill=GridBagConstraints.BOTH; gbc.weightx=1.0; gbc.weighty=1.0; gbc.gridx=1; gbc.gridy=1; add(splitPane,gbc); laidOut=true; } /** change the text labels */ public void updateTextLabels(edu.cmu.minorthird.text.TextLabels newLabels){ this.viewLabels=newLabels; viewer.updateTextLabels(newLabels); viewerTracker.updateViewLabels(newLabels); } /** add a 'save' button */ public void setSaveAs(File file){ viewerTracker.setSaveAs(file); } protected void buildFrame(){ JComponent main=new StatusMessagePanel(this,this.statusMsg); JFrame frame=new JFrame(this.getClass().getName()); frame.getContentPane().add(main,BorderLayout.CENTER); frame.addWindowListener(new WindowAdapter(){ // public void windowClosing(WindowEvent e) // { // System.exit(0); // } }); frame.pack(); frame.setVisible(true); } }