/*
* Licensed Materials - Property of Rogue Wave Software, Inc.
* © Copyright Rogue Wave Software, Inc. 2014, 2017
* © Copyright IBM Corp. 2009, 2014
* © Copyright ILOG 1996, 2009
* All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* The Software and Documentation were developed at private expense and
* are "Commercial Items" as that term is defined at 48 CFR 2.101,
* consisting of "Commercial Computer Software" and
* "Commercial Computer Software Documentation", as such terms are
* used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
* as applicable.
*/
package webviewer;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.net.URL;
import javax.swing.Action;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import ilog.views.util.IlvProductUtil;
import webviewer.docview.WebSitePanelView;
import webviewer.ui.ToolBarExtensions;
import webviewer.ui.WebPageView;
/**
* The <code>WebViewer</code> application illustrates how to create a <em>Web
* Viewer</em> using Rogue Wave JViews Diagrammer.
*/
public class WebViewer extends JFrame {
final static String WEB_SITE_DOCUMENT_TEMPLATE_NAME = "WebSite";
private WebSitePanelView websitePanelView;
private ToolBarExtensions toolbarExtensions;
// The frame of the application
private static JFrame frame;
// the help viewer
private WebPageView helpView;
/**
* The width of the view in the diagrammer.
*/
public static final int VIEW_WIDTH = 400;
/**
* The height of the view in the diagrammer.
*/
public static final int VIEW_HEIGHT = 600;
private static final Font LABEL_FONT = new Font("Arial", Font.PLAIN, 12);
/**
* Create the main frame.
*
* @throws Exception
* if an error occurs for any reason.
*/
public void init(Container contentPane) throws Exception {
contentPane.setLayout(new BorderLayout());
JPanel helpPanel = createHelpPanel();
JPanel mainPanel = createMainPanel();
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, helpPanel, mainPanel);
splitPane.setDividerSize(10);
splitPane.setDividerLocation(0.2);
splitPane.setOneTouchExpandable(true);
contentPane.add(splitPane, BorderLayout.CENTER);
// Add a toolbar for controlling the application at the north of the frame.
JToolBar toolbar = websitePanelView.createToolBar();
toolbar.setFloatable(false);
// extend the toolbar
toolbarExtensions = new ToolBarExtensions(this, toolbar);
contentPane.add(toolbar, BorderLayout.NORTH);
updateActions();
contentPane.validate();
contentPane.repaint();
}
/**
* Creates the main diagram panel.
*/
private JPanel createMainPanel() {
websitePanelView = new WebSitePanelView(this);
return websitePanelView;
}
/**
* Returns the website panel view.
*/
public WebSitePanelView getWebSitePanelView() {
return websitePanelView;
}
/**
* Returns the toolbar extensions.
*/
public ToolBarExtensions getToolbarExtensions() {
return toolbarExtensions;
}
/**
* Creates the help panel.
*/
private JPanel createHelpPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(createTitlePanel("Help"), BorderLayout.NORTH);
JEditorPane editorPane = new JEditorPane();
editorPane.setMargin(new Insets(0, 0, 0, 0));
editorPane.setEditable(false);
editorPane.setOpaque(false);
URL helpUrl = getClass().getResource("ui/html/help.html");
try {
editorPane.setPage(helpUrl);
} catch (IOException ex) {
ex.printStackTrace();
}
JScrollPane scrollPane = new JScrollPane(editorPane, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
panel.add(scrollPane, BorderLayout.CENTER);
panel.setPreferredSize(new Dimension(200, 200));
return panel;
}
/**
* Creates a panel for the title.
*/
private static JPanel createTitlePanel(String title) {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBorder(new EmptyBorder(4, 4, 4, 4));
panel.add(createLabel(title), BorderLayout.WEST);
return panel;
}
/**
* Creates a <code>JLabel</code> for the given text and sets the
* <code>LABEL_FONT</code> on it.
*/
private static JLabel createLabel(String txt) {
JLabel label = new JLabel(txt);
label.setFont(LABEL_FONT);
return label;
}
/**
* Handle the help command.
*/
protected void handleHelp(ActionEvent ae) {
if (helpView == null)
helpView = new WebPageView(this);
URL u = null;
try {
u = this.getClass().getResource("/webviewer/ui/html/help.html");
} catch (Exception ex) {
ex.printStackTrace();
}
helpView.open(u);
}
/**
* Refreshes the presentation of all the actions represented in the toolbar.
*/
public void updateActions() {
websitePanelView.updateActions();
}
/**
* Refreshes the presentation of the action represented by the given command.
*/
public void updateAction(String actionCommand) {
websitePanelView.updateAction(actionCommand);
}
/**
* Refreshes the presentation of the given action.
*/
public void updateAction(Action action) {
websitePanelView.updateAction(action);
}
/**
* Returns the main frame of the application.
*/
public JFrame getMainFrame() {
return frame;
}
// -------------------------------------------------------------
/**
* The main method of the application.
*
* @param args
* the command line arguments for the application (these arguments
* are ignored by this application).
*/
public static void main(final String[] args) {
// This sample uses JViews Diagrammer features. When deploying an
// application that includes this code, you need to be in possession
// of a Rogue Wave JViews Diagrammer Deployment license.
IlvProductUtil.DeploymentLicenseRequired(IlvProductUtil.JViews_Diagrammer_Deployment);
SwingUtilities.invokeLater(new Runnable() {
Override
public void run() {
// Create an instance of the application, and show it.
try {
frame = new JFrame("Web Viewer");
WebViewer app = new WebViewer();
app.init(frame.getContentPane());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(50, 50);
frame.setSize(800, 800);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
});
}
}