package edu.cmu.minorthird.text.gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.io.File;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.WindowConstants;
import edu.cmu.minorthird.text.FancyLoader;
import edu.cmu.minorthird.text.MutableTextLabels;
import edu.cmu.minorthird.text.TextBase;
import edu.cmu.minorthird.text.TextLabels;
/**
* Label top-level "document" spans in a TextBase.
*/
public class TextBaseEditorPlusLabeler extends TrackedTextBaseComponent{
static final long serialVersionUID=200803014L;
// private SpanLabeler spanLabeler;
ViewerTracker viewerTracker2;
public TextBaseEditorPlusLabeler(TextBase base,TextLabels viewLabels, // seen
// in
// viewer
MutableTextLabels editLabels, // changed in editor
StatusMessage statusMsg){
super(base,viewLabels,editLabels,statusMsg);
viewer=new TextBaseViewer(base,viewLabels,statusMsg);
viewerTracker=
new SpanLabeler(viewLabels,editLabels,viewer.getDocumentList(),viewer
.getSpanPainter(),statusMsg);
((SpanLabeler)viewerTracker).addViewer(viewer);
viewerTracker2=
new SpanEditor(viewLabels,editLabels,viewer.getDocumentList(),viewer
.getSpanPainter(),statusMsg);
// ((SpanLabeler) viewerTracker).addViewer(viewer);
viewer.getDocumentList().addListSelectionListener(viewerTracker);
viewer.getDocumentList().addListSelectionListener(viewerTracker2);
viewer.getTruthBox().addActionListener(
new TextBaseEditor.EditTypeAction(viewer.getGuessBox(),viewer
.getTruthBox(),(SpanEditor)viewerTracker2));
viewer.getGuessBox().addActionListener(
new TextBaseEditor.EditTypeAction(viewer.getGuessBox(),viewer
.getTruthBox(),(SpanEditor)viewerTracker2));
initializeTwoTrackerLayout();
}
private void initializeTwoTrackerLayout(){
setPreferredSize(new Dimension(800,600));
setLayout(new GridBagLayout());
GridBagConstraints gbc;
viewer.setMinimumSize(new Dimension(200,200));
JTabbedPane tabbed=new JTabbedPane();
viewerTracker.setMinimumSize(new Dimension(200,50));
viewerTracker2.setMinimumSize(new Dimension(200,50));
tabbed.add("Label parts",viewerTracker2);
tabbed.add("Label whole",viewerTracker);
JSplitPane splitPane=
new JSplitPane(JSplitPane.VERTICAL_SPLIT,viewer,tabbed);
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);
}
/** add a 'save' button */
@Override
public void setSaveAs(File file){
viewerTracker.setSaveAs(file);
viewerTracker2.setSaveAs(file);
}
/** Pop up a frame for editing the labels. */
public static TextBaseEditorPlusLabeler editAndLabel(
MutableTextLabels labels,File file){
JFrame frame=new JFrame("TextBaseEditorPlusLabeler");
TextBase base=labels.getTextBase();
StatusMessage statusMsg=new StatusMessage();
TextBaseEditorPlusLabeler labeler=
new TextBaseEditorPlusLabeler(base,labels,labels,statusMsg);
if(file!=null)
labeler.setSaveAs(file);
JComponent main=new StatusMessagePanel(labeler,statusMsg);
frame.getContentPane().add(main,BorderLayout.CENTER);
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.pack();
frame.setVisible(true);
return labeler;
}
public static void main(String[] args){
if(args.length!=2){
System.out.println("Usage: TextBaseEditorPlusLabeler <data> <labelfile>");
return;
}
try{
MutableTextLabels labels=
(MutableTextLabels)FancyLoader.loadTextLabels(args[0]);
editAndLabel(labels,new File(args[1]));
}catch(Exception e){
e.printStackTrace();
}
}
}