Java tutorial
/** * */ package cz.cuni.mff.peckam.java.origamist.gui.viewer; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Desktop; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.IOException; import java.net.URISyntaxException; import java.security.Permission; import java.text.DateFormat; import java.text.MessageFormat; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkEvent.EventType; import javax.swing.event.HyperlinkListener; import javax.swing.origamist.JHideablePanel; import javax.swing.origamist.JLocalizedLabel; import javax.swing.origamist.JMultilineLabel; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; import cz.cuni.mff.peckam.java.origamist.common.License; import cz.cuni.mff.peckam.java.origamist.gui.common.JLabelWithTooltip; import cz.cuni.mff.peckam.java.origamist.gui.common.JLocalizedLabelWithTooltip; import cz.cuni.mff.peckam.java.origamist.gui.common.JMultilineLabelWithTooltip; import cz.cuni.mff.peckam.java.origamist.model.Origami; import cz.cuni.mff.peckam.java.origamist.services.ServiceLocator; import cz.cuni.mff.peckam.java.origamist.services.TooltipFactory; import cz.cuni.mff.peckam.java.origamist.services.interfaces.ConfigurationManager; /** * Panel with info about a model. * * @author Martin Pecka */ public class ModelInfoPanel extends JHideablePanel { /** */ private static final long serialVersionUID = 9041458561866387156L; /** The origami this panel displays info of. */ protected Origami origami; /** The listener for locale changes. */ protected PropertyChangeListener localeListener; protected JLocalizedLabel nameDesc = new JLocalizedLabelWithTooltip("viewer", "nameLabel", "%1s:"); protected JLabel name = new JLabelWithTooltip(); protected JLocalizedLabel authorDesc = new JLocalizedLabelWithTooltip("viewer", "authorLabel", "%1s:"); protected JMultilineLabel author = new JMultilineLabelWithTooltip(""); protected JLocalizedLabel licenseDesc = new JLocalizedLabelWithTooltip("viewer", "licenseLabel", "%1s:"); protected JLabel license = new JLabel(); protected JLocalizedLabel creationDateDesc = new JLocalizedLabelWithTooltip("viewer", "creationDateLabel", "%1s:"); protected JLabel creationDate = new JLabelWithTooltip(); protected JLocalizedLabel originalDesc = new JLocalizedLabelWithTooltip("viewer", "originalLabel", "%1s:"); protected JLabel original = new JLabelWithTooltip(); protected JLocalizedLabel paperDesc = new JLocalizedLabelWithTooltip("viewer", "paperLabel"); protected JLocalizedLabel paperDimensionDesc = new JLocalizedLabelWithTooltip("viewer", "paperDimensionLabel", " %1s:"); protected JLabel paperDimension = new JLabelWithTooltip(); protected JLocalizedLabel paperNoteDesc = new JLocalizedLabelWithTooltip("viewer", "paperNoteLabel", " %1s:"); protected JLabel paperNote = new JLabelWithTooltip(); protected JLocalizedLabel paperForegroundDesc = new JLocalizedLabelWithTooltip("viewer", "paperForegroundLabel", " %1s:"); protected JTextField paperForeground = new JTextField(); protected JLocalizedLabel paperBackgroundDesc = new JLocalizedLabelWithTooltip("viewer", "paperBackgroundLabel", " %1s:"); protected JTextField paperBackground = new JTextField(); protected JLocalizedLabel paperWeightDesc = new JLocalizedLabelWithTooltip("viewer", "paperWeightLabel", " %1s:"); protected JLabel paperWeight = new JLabelWithTooltip(); protected JLocalizedLabel descDesc = new JLocalizedLabelWithTooltip("viewer", "longDescLabel", "%1s:"); protected JMultilineLabel desc = new JMultilineLabelWithTooltip(""); public ModelInfoPanel(Origami origami) { this(origami, BorderLayout.NORTH); } public ModelInfoPanel(Origami origami, String orientation) { super(orientation); setOpaque(true); getContent().setOpaque(true); hideButton.setBackground(new Color(231, 231, 189)); getContent().setBackground(new Color(250, 250, 242)); hideButton.setBorder(BorderFactory.createEmptyBorder()); paperBackground.setOpaque(true); paperForeground.setOpaque(true); paperBackground.setFont(name.getFont()); paperForeground.setFont(name.getFont()); paperBackground.setEditable(false); paperForeground.setEditable(false); paperBackground.setBorder(BorderFactory.createEmptyBorder()); paperForeground.setBorder(BorderFactory.createEmptyBorder()); author.setDisableLastLineHack(true); author.addHyperlinkListener(new HyperlinkListener() { @Override public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType().equals(EventType.ACTIVATED) && Desktop.isDesktopSupported()) { try { Desktop.getDesktop().browse(e.getURL().toURI()); } catch (IOException e1) { } catch (URISyntaxException e1) { } } } }); localeListener = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { Locale locale = ServiceLocator.get(ConfigurationManager.class).get().getLocale(); name.setText(ModelInfoPanel.this.origami.getName(locale)); String homePage = ResourceBundle.getBundle("viewer", locale).getString("author.homepage"); author.setText("<html>" + ModelInfoPanel.this.origami.getAuthor().getName() + (ModelInfoPanel.this.origami.getAuthor().getHomepage() == null ? "" : " (<a href=\"" + ModelInfoPanel.this.origami.getAuthor().getHomepage() + "\">" + homePage + "</a>)") + "</html>"); license.setToolTipText(createLicenseTooltip(ModelInfoPanel.this.origami.getLicense())); if (ModelInfoPanel.this.origami.getCreationDate() != null) { creationDate.setText(DateFormat.getDateInstance(DateFormat.MEDIUM, locale) .format(ModelInfoPanel.this.origami.getCreationDate())); } else { creationDate.setText(""); } paperDimension .setText((ModelInfoPanel.this.origami.getModel().getPaper()).getSize().toString(true)); paperNote.setText((ModelInfoPanel.this.origami.getModel().getPaper()).getNote(locale)); paperNote.setVisible(!(paperNote.getText() == null || paperNote.getText().equals(""))); paperNoteDesc.setVisible(paperNote.isVisible()); paperWeight.setText(MessageFormat.format( ResourceBundle.getBundle("application", locale).getString("units.gramm_per_meter2"), ModelInfoPanel.this.origami.getModel().getPaper().getWeight())); desc.setText(ModelInfoPanel.this.origami.getDescription(locale)); desc.setVisible(!(desc.getText() == null || desc.getText().equals(""))); descDesc.setVisible(desc.isVisible()); } }; ServiceLocator.get(ConfigurationManager.class).get().addPropertyChangeListener("locale", localeListener); ServiceLocator.get(ConfigurationManager.class).get().addPropertyChangeListener("preferredUnit", localeListener); setOrigami(origami); buildLayout(); } /** * Add components to the layout. */ protected void buildLayout() { DefaultFormBuilder b = new DefaultFormBuilder( new FormLayout("min(default;60dlu),$lcgap,min(default;100dlu)"), content); b.append(nameDesc); b.append(name); b.nextLine(); b.append(authorDesc); b.append(author); b.nextLine(); b.append(licenseDesc); b.append(license); b.nextLine(); b.append(creationDateDesc); b.append(creationDate); b.nextLine(); b.append(originalDesc); b.append(original); b.nextLine(); b.append(paperDesc); b.nextLine(); b.append(paperDimensionDesc); b.append(paperDimension); b.nextLine(); b.append(paperNoteDesc); b.append(paperNote); b.nextLine(); b.append(paperForegroundDesc); b.append(paperForeground); b.nextLine(); b.append(paperBackgroundDesc); b.append(paperBackground); b.nextLine(); b.append(paperWeightDesc); b.append(paperWeight); b.nextLine(); b.append(descDesc); b.append(desc); b.nextLine(); } /** * @return the origami */ public Origami getOrigami() { return origami; } /** * @param origami the origami to set */ public void setOrigami(Origami origami) { this.origami = origami; if (origami == null) return; license.setText(origami.getLicense().getName()); original.setText(origami.getOriginal() == null ? "" : origami.getOriginal().toString()); original.setVisible(!(original.getText() == null || original.getText().equals(""))); originalDesc.setVisible(original.isVisible()); Color c = origami.getModel().getPaper().getColors().getForeground(); paperForeground.setText("R: " + c.getRed() + ", G: " + c.getGreen() + ", B: " + c.getBlue()); paperForeground.setBackground(c); c = origami.getModel().getPaper().getColors().getBackground(); paperBackground.setText("R: " + c.getRed() + ", G: " + c.getGreen() + ", B: " + c.getBlue()); paperBackground.setBackground(c); localeListener.propertyChange(new PropertyChangeEvent(this, "locale", null, ServiceLocator.get(ConfigurationManager.class).get().getLocale())); showPanel(); revalidate(); } /** * Return the tooltip displaying information about the given license. * * @param license The license the tooltip will be generated from. * @return The tooltip displaying information about the given license. */ protected String createLicenseTooltip(License license) { StringBuilder tooltip = new StringBuilder(); Locale l = ServiceLocator.get(ConfigurationManager.class).get().getLocale(); ResourceBundle viewerMessages = ResourceBundle.getBundle("viewer", l); ResourceBundle messages = ResourceBundle.getBundle("application", l); tooltip.append("<html>").append( "<head><style>body {width: 500px;} ul {padding: 0px; margin: 0px; margin-left: 20px;}</style></head>"); tooltip.append("<body>"); tooltip.append("<h1>" + license.getName() + "</h1>") .append(viewerMessages.getString("license.tooltip.youArePermittedTo")); if (license.getPermission().size() == 0) { tooltip.append(messages.getString("permission.doNothing")); } else { tooltip.append("<ul>"); for (Permission p : license.getPermission()) { String name = p.getName(); try { name = messages.getString("permission." + name); } catch (MissingResourceException e) { } tooltip.append("<li>" + name + "</li>"); } tooltip.append("</ul>"); } if (license.getHomepage() != null) { tooltip.append("<b>" + viewerMessages.getString("license.tooltip.homepage") + "</b>: " + license.getHomepage()); } if (license.getContent() != null) { tooltip.append("<h2>" + viewerMessages.getString("license.tooltip.licenseText") + "</h2>"); tooltip.append("<p>" + license.getContent() + "</p>"); } tooltip.append("</body>"); tooltip.append("</html>"); return ServiceLocator.get(TooltipFactory.class).getPlain(tooltip.toString()); } }