// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.turnrestrictions.qa; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.StyleSheet; import org.openstreetmap.josm.gui.widgets.HtmlPanel; import org.openstreetmap.josm.tools.CheckParameterUtil; import org.openstreetmap.josm.tools.ImageProvider; /** * An IssueView is a view on an individual {@see Issue}. */ public class IssueView extends JPanel { private HtmlPanel pnlMessage; private JPanel pnlActions; private Issue issue; private JLabel lblIcon; /** * Builds the style sheet used in the internal help browser * * @return the style sheet */ protected void initStyleSheet(HtmlPanel view) { StyleSheet ss = ((HTMLEditorKit) view.getEditorPane().getEditorKit()).getStyleSheet(); ss.addRule("em {font-style: italic}"); ss.addRule("tt {font-family: Courier New}"); ss.addRule(".object-name {background-color:rgb(240, 240, 240); color: blue;}"); } protected void build() { setLayout(new GridBagLayout()); setBackground(Color.WHITE); setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1)); // add the icon for the severity GridBagConstraints gc = new GridBagConstraints(); gc.anchor = GridBagConstraints.NORTHWEST; gc.fill = GridBagConstraints.VERTICAL; gc.gridheight = 2; gc.weightx = 0.0; gc.weighty = 1.0; gc.gridx = 0; gc.gridy = 0; gc.insets = new Insets(2, 2, 2, 2); add(lblIcon = new JLabel(), gc); lblIcon.setVerticalAlignment(SwingConstants.TOP); lblIcon.setHorizontalAlignment(SwingConstants.CENTER); lblIcon.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); // add the html panel with the issue description gc.insets = new Insets(0, 0, 0, 0); gc.anchor = GridBagConstraints.NORTHWEST; gc.fill = GridBagConstraints.BOTH; gc.gridx = 1; gc.gridy = 0; gc.gridheight = 1; gc.weightx = 1.0; gc.weighty = 1.0; add(pnlMessage = new HtmlPanel(), gc); initStyleSheet(pnlMessage); pnlMessage.setBackground(Color.white); pnlMessage.setText("<html><body>" + issue.getText() + "</html></bod>"); // if there are any actions available to resolve the issue, add a panel with action buttons if (!issue.getActions().isEmpty()) { pnlActions = new JPanel(new FlowLayout(FlowLayout.LEFT)); pnlActions.setBackground(Color.WHITE); for (Action action: issue.getActions()) { JButton btn = new JButton(action); pnlActions.add(btn); } gc.gridx = 1; gc.gridy = 1; gc.fill = GridBagConstraints.HORIZONTAL; gc.weighty = 0.0; add(pnlActions, gc); } // set the severity icon switch(issue.getSeverity()) { case WARNING: lblIcon.setIcon(ImageProvider.get("warning-small")); break; case ERROR: lblIcon.setIcon(ImageProvider.get("error")); break; } } /** * Creates an issue view for an issue. * * @param issue the issue. Must not be null. * @throws IllegalArgumentException thrown if issue is null. */ public IssueView(Issue issue) throws IllegalArgumentException { CheckParameterUtil.ensureParameterNotNull(issue, "issue"); this.issue = issue; build(); } @Override public Dimension getMinimumSize() { return super.getPreferredSize(); } }