package husacct.control.presentation.util;
import husacct.ServiceProvider;
import husacct.common.Resource;
import husacct.common.locale.ILocaleService;
import husacct.control.presentation.util.DialogUtils;
import husacct.control.task.MainController;
import husacct.control.task.help.HelpTreeModelLoader;
import husacct.control.task.help.HelpTreeNode;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import org.apache.log4j.Logger;
public class HelpDialog extends JDialog {
private static final long serialVersionUID = 652971000948178977L;
private ILocaleService localeService = ServiceProvider.getInstance().getLocaleService();
private Logger logger = Logger.getLogger(HelpDialog.class);
private JLabel pictureLabel;
private JTree tree;
private JScrollPane treeView;
private DefaultMutableTreeNode selectedNode;
private JEditorPane editorpane;
private JScrollPane scroller;
private Component component;
private HelpTreeModelLoader hpl;
public HelpDialog(MainController mainController, Component component) {
super(mainController.mainGUI, true);
this.component = component;
this.hpl = new HelpTreeModelLoader();
this.setTitle(localeService.getTranslatedString("Help"));
setup();
addComponents();
setListeners();
this.setVisible(true);
}
private void setup() {
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setSize(new Dimension(1000, 675));
this.setLayout(new FlowLayout(0, 0, 0));
this.setResizable(false);
this.getContentPane().setBackground(Color.WHITE);
DialogUtils.alignCenter(this);
}
public JPanel getYouTubePanel() {
JPanel youTubePanel = new JPanel();
youTubePanel.setPreferredSize(new Dimension (this.getSize().width,30));
Image logo = Toolkit.getDefaultToolkit().getImage(Resource.get(Resource.SMALL_YOUTUBE_LOGO));
logo = logo.getScaledInstance(95/2, 40/2, Image.SCALE_DEFAULT);
pictureLabel = new JLabel(new ImageIcon(logo));
pictureLabel.setBounds(0,0,256,256);
youTubePanel.add(new JLabel(localeService.getTranslatedString("WatchOnlineTutorialsOn")));
youTubePanel.add(pictureLabel);
return youTubePanel;
}
private void addComponents() {
JSplitPane rootPanel = new JSplitPane();
rootPanel.setDividerLocation(200);
rootPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
tree = new JTree(hpl.getTreeModel());
treeView = new JScrollPane(tree);
tree.setRootVisible(false);
ImageIcon leafIcon = new ImageIcon(Resource.get(Resource.ICON_DEFINE_ARCHITECTURE_DIAGRAM));
if (leafIcon != null) {
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
renderer.setLeafIcon(leafIcon);
tree.setCellRenderer(renderer);
}
rootPanel.add(treeView, JSplitPane.LEFT);
editorpane = new JEditorPane("text/html", hpl.getContent(component));
Color color = new Color(255, 255, 200);
editorpane.setBackground(color);
editorpane.setEditable(false);
editorpane.setCaretPosition(0);
scroller = new JScrollPane(editorpane);
rootPanel.add(scroller, JSplitPane.RIGHT);
rootPanel.setPreferredSize(new Dimension(this.getSize().width-5, this.getSize().height-55));
getContentPane().add(rootPanel, BorderLayout.NORTH);
getContentPane().add(getYouTubePanel());
}
private void setListeners() {
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
setVisible(false);
dispose();
}
});
tree.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent arg0) {
selectedNode = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
try {
if(((HelpTreeNode)selectedNode.getUserObject()).getFileType().equals("html")) {
String filename = ((HelpTreeNode)selectedNode.getUserObject()).getFilename();
InputStream stream = Resource.getStream(Resource.HELP_PAGES_PATH + filename);
editorpane.setText(hpl.getContent(stream));
editorpane.setCaretPosition(0);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
pictureLabel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
try {
Desktop.getDesktop().browse(new URI("http://www.youtube.com/user/HUSACCT"));
} catch (IOException e1) {
logger.error("IO Exception on opening browser with URL http://www.youtube.com/user/HUSACCT");
} catch (URISyntaxException e1) {
logger.error("URISyntaxException with URL http://www.youtube.com/user/HUSACCT");
}
}
@Override
public void mouseEntered(MouseEvent e) {setCursor (Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));}
@Override
public void mouseExited(MouseEvent e) {setCursor (Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
});
}
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
String id = e.getDescription().replaceAll("#", "");
int position = editorpane.getText().indexOf(("id=\"" + id));
if(position==-1) {
position = editorpane.getText().indexOf("id = \"" + id);
}
System.out.println(editorpane.getText());
System.out.println(position);
if(position > 0) {
editorpane.setCaretPosition(position);
}
}
}
}