/*
* @(#)LinkToolBar.java
*
* Copyright (c) 2009-2010 The authors and contributors of JHotDraw.
* You may not use, copy or modify this file, except in compliance with the
* accompanying license terms.
*/
package org.jhotdraw.samples.svg.gui;
import org.jhotdraw.draw.gui.JAttributeTextField;
import org.jhotdraw.draw.gui.JAttributeTextArea;
import edu.umd.cs.findbugs.annotations.Nullable;
import org.jhotdraw.draw.event.FigureAttributeEditorHandler;
import org.jhotdraw.draw.event.SelectionComponentDisplayer;
import javax.swing.border.*;
import org.jhotdraw.gui.*;
import org.jhotdraw.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.LabelUI;
import javax.swing.plaf.TextUI;
import javax.swing.text.DefaultFormatter;
import javax.swing.text.DefaultFormatterFactory;
import org.jhotdraw.draw.*;
import org.jhotdraw.gui.plaf.palette.*;
import static org.jhotdraw.samples.svg.SVGAttributeKeys.*;
/**
* LinkToolBar.
*
* @author Werner Randelshofer
* @version $Id$
*/
public class LinkToolBar extends AbstractToolBar {
private static final long serialVersionUID = 1L;
@Nullable private SelectionComponentDisplayer displayer;
private ResourceBundleUtil labels;
/** Creates new instance. */
public LinkToolBar() {
labels = ResourceBundleUtil.getBundle("org.jhotdraw.samples.svg.Labels");
setName(labels.getString(getID() + ".toolbar"));
setDisclosureStateCount(3);
}
@Override
public void setEditor(DrawingEditor newValue) {
if (displayer != null) {
displayer.dispose();
displayer = null;
}
super.setEditor(newValue);
if (newValue != null) {
displayer = new SelectionComponentDisplayer(editor, this);
}
}
@Override
protected JComponent createDisclosedComponent(int state) {
JPanel p = null;
switch (state) {
case 1: {
p = new JPanel();
p.setOpaque(false);
p.setLayout(new GridBagLayout());
p.setBorder(new EmptyBorder(5, 5, 5, 8));
// Abort if no editor is set
if (editor == null) {
break;
}
GridBagConstraints gbc;
AbstractButton btn;
// Link field
JLabel linkLabel;
JScrollPane scrollPane;
JAttributeTextArea<String> linkField;
linkLabel = new javax.swing.JLabel();
linkLabel.setUI((LabelUI) PaletteLabelUI.createUI(linkLabel));
linkLabel.setToolTipText(labels.getString("attribute.figureLink.toolTipText"));
linkLabel.setText(labels.getString("attribute.figureLink.text")); // NOI18N
linkLabel.setFont(PaletteLookAndFeel.getInstance().getFont("SmallSystemFont"));
scrollPane = new javax.swing.JScrollPane();
linkField = new JAttributeTextArea<String>();
linkLabel.setLabelFor(linkField);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.insets = new Insets(-2, 0, -2, 0);
gbc.anchor = GridBagConstraints.SOUTHWEST;
gbc.gridwidth = GridBagConstraints.REMAINDER;
p.add(linkLabel, gbc);
scrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.putClientProperty("JComponent.sizeVariant", "small");
scrollPane.setBorder(PaletteLookAndFeel.getInstance().getBorder("ScrollPane.border"));
linkField.setToolTipText(labels.getString("attribute.figureLink.toolTipText"));
linkField.setColumns(8);
linkField.setLineWrap(true);
linkField.setRows(2);
linkField.setWrapStyleWord(true);
linkField.setFont(PaletteLookAndFeel.getInstance().getFont("SmallSystemFont"));
linkField.setFormatterFactory(new DefaultFormatterFactory(new DefaultFormatter()));
disposables.add(new FigureAttributeEditorHandler<String>(LINK, linkField, editor, false));
scrollPane.setViewportView(linkField);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = new Insets(3, 0, 0, 0);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1d;
gbc.weighty = 1d;
p.add(scrollPane, gbc);
// Target field
JLabel targetLabel;
JAttributeTextField<String> targetField;
targetLabel = new javax.swing.JLabel();
targetLabel.setUI((LabelUI) PaletteLabelUI.createUI(targetLabel));
targetLabel.setToolTipText(labels.getString("attribute.figureLinkTarget.toolTipText"));
targetLabel.setText(labels.getString("attribute.figureLinkTarget.text")); // NOI18N
//targetLabel.setFont(PaletteLookAndFeel.getInstance().getFont("SmallSystemFont"));
targetField = new JAttributeTextField<String>();
targetLabel.setLabelFor(targetField);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 2;
gbc.insets = new Insets(3, 0, 0, 0);
gbc.fill = GridBagConstraints.BOTH;
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
p.add(targetLabel, gbc);
targetField.setToolTipText(labels.getString("attribute.figureLinkTarget.toolTipText"));
targetField.setColumns(4);
//targetField.setFont(PaletteLookAndFeel.getInstance().getFont("SmallSystemFont"));
targetField.setFormatterFactory(new DefaultFormatterFactory(new DefaultFormatter()));
targetField.setUI((TextUI) PaletteFormattedTextFieldUI.createUI(targetField));
disposables.add(new FigureAttributeEditorHandler<String>(LINK_TARGET, targetField, editor, false));
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 2;
gbc.insets = new Insets(3, 3, 0, 0);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
p.add(targetField, gbc);
}
break;
case 2: {
p = new JPanel();
p.setOpaque(false);
p.setLayout(new GridBagLayout());
p.setBorder(new EmptyBorder(5, 5, 5, 8));
// Abort if no editor is set
if (editor == null) {
break;
}
GridBagConstraints gbc;
AbstractButton btn;
// Link field
JScrollPane scrollPane;
JAttributeTextArea<String> linkField;
scrollPane = new javax.swing.JScrollPane();
linkField = new JAttributeTextArea<String>();
scrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.putClientProperty("JComponent.sizeVariant", "small");
scrollPane.setBorder(PaletteLookAndFeel.getInstance().getBorder("ScrollPane.border"));
linkField.setToolTipText(labels.getString("attribute.figureLink.toolTipText"));
linkField.setColumns(12);
linkField.setLineWrap(true);
linkField.setRows(2);
linkField.setWrapStyleWord(true);
linkField.setFont(PaletteLookAndFeel.getInstance().getFont("SmallSystemFont"));
linkField.setFormatterFactory(new DefaultFormatterFactory(new DefaultFormatter()));
disposables.add(new FigureAttributeEditorHandler<String>(LINK, linkField, editor, false));
scrollPane.setViewportView(linkField);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = new Insets(0, 0, 0, 0);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1d;
gbc.weighty = 1d;
p.add(scrollPane, gbc);
// Target field
JLabel targetLabel;
JAttributeTextField<String> targetField;
targetLabel = new javax.swing.JLabel();
targetLabel.setUI((LabelUI) PaletteLabelUI.createUI(targetLabel));
targetLabel.setToolTipText(labels.getString("attribute.figureLinkTarget.toolTipText"));
targetLabel.setText(labels.getString("attribute.figureLinkTarget.text")); // NOI18N
//targetLabel.setFont(PaletteLookAndFeel.getInstance().getFont("SmallSystemFont"));
targetField = new JAttributeTextField<String>();
targetLabel.setLabelFor(targetField);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 2;
gbc.insets = new Insets(3, 0, 0, 0);
gbc.fill = GridBagConstraints.BOTH;
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
p.add(targetLabel, gbc);
targetField.setToolTipText(labels.getString("attribute.figureLinkTarget.toolTipText"));
targetField.setColumns(7);
//targetField.setFont(PaletteLookAndFeel.getInstance().getFont("SmallSystemFont"));
targetField.setFormatterFactory(new DefaultFormatterFactory(new DefaultFormatter()));
targetField.setUI((TextUI) PaletteFormattedTextFieldUI.createUI(targetField));
disposables.add(new FigureAttributeEditorHandler<String>(LINK_TARGET, targetField, editor, true));
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 2;
gbc.insets = new Insets(3, 3, 0, 0);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
p.add(targetField, gbc);
}
break;
}
return p;
}
@Override
protected String getID() {
return "link";
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables
}