content: package edu.stanford.rsl.apps.gui;
  
  import java.awt.Color;
  import java.awt.Dimension;
  import java.awt.Font;
  import java.awt.GridBagConstraints;
  import java.awt.GridBagLayout;
  import java.awt.Insets;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import javax.swing.JButton;
  import javax.swing.JCheckBox;
  import javax.swing.BorderFactory;
  import javax.swing.JPanel;
  import javax.swing.JScrollPane;
  import javax.swing.JTextPane;
  import javax.swing.border.TitledBorder;
  
  import edu.stanford.rsl.conrad.filtering.ImageFilteringTool;
  import edu.stanford.rsl.conrad.pipeline.BufferedProjectionSink;
  import edu.stanford.rsl.conrad.utils.CONRAD;
  import edu.stanford.rsl.conrad.utils.Configuration;
  
  /**
  * This code was edited or generated using CloudGarden's Jigloo
  * SWT/Swing GUI Builder, which is free for non-commercial
  * use. If Jigloo is being used commercially (ie, by a corporation,
  * company or business for any purpose whatever) then you
  * should purchase a license for each developer using Jigloo.
  * Please visit www.cloudgarden.com for details.
  * Use of Jigloo implies acceptance of these licensing terms.
  * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
  * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
  * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
  */
  public class GUICompatibleObjectVisualizationPanel extends JPanel implements ActionListener, UpdateableGUI {
  	/**
  	 * 
  	 */
  	private static final long serialVersionUID = 126994236281825512L;
  	private JButton jConfigureButton;
  	private JCheckBox jIsConfiguredCheckBox;
  	private JScrollPane jScrollPane1;
  	private JTextPane jCitationTextField;
  	private Citeable citation;
  	private GUIConfigurable config;
  	private TitledBorder border;
  	private UpdateableGUI parentFrame = null;
  	
  	public TitledBorder getBorder() {
  		return border;
  	}
  
  	public GUICompatibleObjectVisualizationPanel(ImageFilteringTool tool){
  		citation = tool;
  		config = tool;
  		initGUI();
  		updateGUI();
  	}
  	
  	public GUICompatibleObjectVisualizationPanel(GUIConfigurable config, Citeable citation){
  		this.citation = citation;
  		this.config = config;
  		initGUI();
  		updateGUI();
  	}
  	
  	public GUICompatibleObjectVisualizationPanel(BufferedProjectionSink sink) {
  		this.citation = sink;
  		this.config = sink;
  		initGUI();
  		updateGUI();
  	}
  
  	private void initGUI() {
  		try {
  			{
  				border = BorderFactory.createTitledBorder("Title");
  				this.setBorder(border);
  				GridBagLayout thisLayout = new GridBagLayout();
  				thisLayout.rowWeights = new double[] {0.0, 0.1};
  				thisLayout.rowHeights = new int[] {12, 7};
  				thisLayout.columnWeights = new double[] {0.0, 0.0, 0.1};
  				thisLayout.columnWidths = new int[] {344, 109, 7};
  				this.setLayout(thisLayout);
  				{
  					jConfigureButton = new JButton();
  					jConfigureButton.addActionListener(this);
  					this.add(jConfigureButton, new GridBagConstraints(1, 0, 1, 2, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
  					jConfigureButton.setText("configure...");
  				}
  				{
  					jIsConfiguredCheckBox = new JCheckBox();
  					this.add(jIsConfiguredCheckBox, new GridBagConstraints(2, 0, 1, 2, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
  					jIsConfiguredCheckBox.setText("configured?");
  					jIsConfiguredCheckBox.setEnabled(false);
  				}
  				{
  					jScrollPane1 = new JScrollPane();
  					this.add(jScrollPane1, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
  					{
  						jCitationTextField = new JTextPane();
  						jScrollPane1.setViewportView(jCitationTextField);
  						jCitationTextField.setEditable(false);
  						jCitationTextField.setBackground(Color.WHITE);
  					}
  				}
  				Dimension d = new Dimension(550, 100); 
  				this.setSize(d);
  				this.setMinimumSize(d);
  				this.setMaximumSize(d);
  				setBackground(Color.WHITE);
  			}
  		} catch(Exception e) {
  			e.printStackTrace();
  		}
  	}
  	
  	public void setBackground(Color color){
  		super.setBackground(color);
  		if (jConfigureButton != null) jConfigureButton.setBackground(color);
  		if (jIsConfiguredCheckBox != null) jIsConfiguredCheckBox.setBackground(color);
  	}
  	
  	public void setParentFrame(UpdateableGUI parentFrame) {
  		this.parentFrame = parentFrame;
  	}
  
  	public UpdateableGUI getParentFrame() {
  		return parentFrame;
  	}
  
  	public void setVisualizedObject(BufferedProjectionSink sink){
  		citation = sink;
  		config = sink;
  		updateGUI();
  	}
  	
  	public void updateGUI(){
  		if (citation != null) {
  		border.setTitle(citation.toString());
  		} else {
  			border.setTitle("Not configured");
  		}
  		if (config != null) {
  		jIsConfiguredCheckBox.setSelected(config.isConfigured());
  		if (Configuration.getGlobalConfiguration().getCitationFormat() == Configuration.MEDLINE_CITATION_FORMAT){
  			jCitationTextField.setText(citation.getMedlineCitation());
  			jCitationTextField.setFont(new Font(Font.SERIF, Font.PLAIN, 11));
  		}
  		if (Configuration.getGlobalConfiguration().getCitationFormat() == Configuration.BIBTEX_CITATION_FORMAT){
  			jCitationTextField.setText(citation.getBibtexCitation());
  			jCitationTextField.getCaret().setDot(0);
  			jCitationTextField.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 11));
  		}
  		} else {
  			jIsConfiguredCheckBox.setSelected(false);
  		}
  	}
  	
  	public void actionPerformed(ActionEvent e) {
  		Object source = e.getSource();
  		if (source != null){
  			if (source.equals(jConfigureButton)){
  				try {
  					config.configure();
  				} catch (Exception e1) {
  					CONRAD.log(e1.getLocalizedMessage());
  					System.out.println(e1.getLocalizedMessage());
  				}
  			}
  		}
  		updateGUI();
  		if (parentFrame != null) parentFrame.updateGUI();
  	}
  
  }
  
  /*
   * Copyright (C) 2010-2014 - Andreas Maier 
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */
  