package common.string; import java.awt.BorderLayout; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.IOException; import javax.swing.JEditorPane; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import org.trianacode.gui.panels.ParameterPanel; import org.trianacode.gui.windows.WindowButtonConstants; /** * $POPUP_DESCRIPTION * * @author $AUTHOR * @version $Revision: 2921 $ */ public class HTMLViewPanel extends ParameterPanel implements ItemListener, HyperlinkListener { private JEditorPane editpane = new JEditorPane(); /** * This method returns WindowButtonConstants.OK_CANCEL_APPLY_BUTTONS by default. It should be overridden if the * panel has different preferred set of buttons. * * @return the panels preferred button combination (as defined in Windows Constants). */ public byte getPreferredButtons() { return WindowButtonConstants.OK_BUTTON; } /** * This method returns true by default. It should be overridden if the panel does not want the user to be able to * change the auto commit state */ public boolean isAutoCommitVisible() { return false; } /** * Commit append value immediately */ public boolean isAutoCommitByDefault() { return true; } /** * This method is called before the panel is displayed. It should initialise the panel layout. */ public void init() { setLayout(new BorderLayout()); editpane.setEditable(false); editpane.setContentType("text/html"); editpane.addHyperlinkListener(this); setText(getParameter("str").toString()); JScrollPane scroll = new JScrollPane(editpane, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); add(scroll, BorderLayout.CENTER); } private void setText(String str) { if (str.startsWith("http://")) { try { editpane.setPage(str.trim()); } catch (IOException except) { editpane.setText("Error: " + except.getMessage()); } } else { editpane.setText(str); } } /** * This method is called when cancel is clicked on the parameter window. It should synchronize the GUI components * with the task parameter values */ public void reset() { setText(getParameter("str").toString()); } /** * This method is called when a parameter in the task is updated. It should update the GUI in response to the * parameter update */ public void parameterUpdate(String paramname, Object value) { if (paramname.equals("str")) { setText(value.toString()); } } /** * This method is called when the panel is being disposed off. It should clean-up subwindows, open files etc. */ public void dispose() { } public void itemStateChanged(ItemEvent event) { } /** * Called when a hypertext link is updated. * * @param event the event responsible for the update */ public void hyperlinkUpdate(HyperlinkEvent event) { if ((event.getSource() == editpane) && (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED)) { handleLink(event); } } private void handleLink(HyperlinkEvent event) { try { editpane.setPage(event.getURL()); } catch (IOException except) { JOptionPane.showMessageDialog(this, "Invalid URL: " + event.getURL(), getTask().getToolName(), JOptionPane.ERROR_MESSAGE); } } }