/* * OpenTrader Trading Platform * The solution for online trading, technical analysis and automated trading. * * Copyright (C) 2010 Andrey Pudov * Andrey Pudov <syscreat@gmail.com> * * http://opentrader.github.com/ */ /* * CDDL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2010 Andrey Pudov. All rights reserved. * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2010 Andrey Pudov. All rights reserved. * Use is subject to license terms. * * Contributor(s): * * Portions Copyrighted 2010 Andrey Pudov. * */ package com.opentrader.ui.controls; import com.internal.resources.Resources; import java.awt.event.ActionEvent; import java.util.logging.Logger; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; /** * @author Andrey Pudov <syscreat@gmail.com> * @version 0.00.00 * %name CommonTree.java * %pkg com.opentrader.ui.controls * %date 7:15:30 PM, Oct 4, 2010 */ public class CommonTree extends javax.swing.JTree { private static final long serialVersionUID = 992478959333420522L; private static final Logger LOG = Logger.getLogger("opentrader"); private String rootName; // Create the listener list protected javax.swing.event.EventListenerList listenerList = new javax.swing.event.EventListenerList(); private enum Node { Accounts, AccountItem, Servers, ServerItem, NOVALUE; public static Node toNode(String str) { try { return valueOf(str); } catch (Exception e) { LOG.warning(e.getMessage()); return NOVALUE; } } } // <editor-fold defaultstate="collapsed" desc="EventListeners Code"> // This methods allows classes to register for MyEvents public synchronized void addUserLoginEvent(CommonTreeUserLoginEventListener listener) { listenerList.add(CommonTreeUserLoginEventListener.class, listener); } // This methods allows classes to unregister for MyEvents public synchronized void removeUserLoginEvent(CommonTreeUserLoginEventListener listener) { listenerList.remove(CommonTreeUserLoginEventListener.class, listener); } // This private class is used to fire CommonTreeUserLoginEvent private synchronized void fireUserLoginEvent(CommonTreeUserLoginEvent evnt) { for (CommonTreeUserLoginEventListener listener : listenerList.getListeners(CommonTreeUserLoginEventListener.class)) { listener.loginEventOccurred(evnt); } } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="Popup Menu Code"> private java.awt.event.MouseAdapter mouseAdapter = new java.awt.event.MouseAdapter() { private void PopupEvent(java.awt.event.MouseEvent e) { int x = e.getX(); int y = e.getY(); javax.swing.JTree tree = (javax.swing.JTree) e.getSource(); javax.swing.tree.TreePath path = tree.getPathForLocation(x, y); if (path == null) { return; } tree.setSelectionPath(path); DefaultMutableTreeNode obj = (DefaultMutableTreeNode) path.getLastPathComponent(); javax.swing.JPopupMenu popup; switch (obj.getLevel()) { case 0: break; case 1: break; case 2: switch ( Node.toNode( ((TreeNode) obj.getPreviousNode().getUserObject() ).getName() )) { case Accounts: popup = getPopupMenu( Node.AccountItem, ((TreeNode) obj.getUserObject()) ); popup.show(tree, x, y); // selectedAccount = (TradeAccount) // ( // (TreeNode) obj.getUserObject() // ).getUserObject(); break; case Servers: break; } break; default: break; } } @Override public void mousePressed(java.awt.event.MouseEvent e) { if (e.isPopupTrigger()) { PopupEvent(e); } } @Override public void mouseReleased(java.awt.event.MouseEvent e) { if (e.isPopupTrigger()) { PopupEvent(e); } } }; private javax.swing.JPopupMenu getPopupMenu(Node node, final TreeNode item) { javax.swing.JPopupMenu popup = new javax.swing.JPopupMenu(); switch (node) { case Accounts: break; case AccountItem: popup.add(new javax.swing.JMenuItem("Login", Resources.getIcon("/16x16/user_add.png"))).addActionListener( new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { fireUserLoginEvent(new CommonTreeUserLoginEvent( item.getUserObject())); } } ); popup.add(new javax.swing.JMenuItem("Delete", Resources.getIcon("/16x16/user_remove.png"))); popup.add(new javax.swing.JSeparator()); popup.add(new javax.swing.JMenuItem("Open an Account", Resources.getIcon("/16x16/user_accept.png"))); break; case Servers: break; case ServerItem: break; default: break; } return popup; } // </editor-fold> public CommonTree() { super(); rootName = "OpenTrader"; addMouseListener(mouseAdapter); putClientProperty("JTree.lineStyle", "Horizontal"); } // public void addAccount(TradeAccount account) { // accounts.add(account); // // updateTree(); // } // // public void addServer(TradeServer server) { // servers.add(server); // // updateTree(); // } // // public TradeAccount getSelectedAccount() { // return selectedAccount; // } // // public TradeServer getServierForAccount(TradeAccount account) // throws CommonTreeServerNotFoundException { // // for (TradeServer server : servers) { // if (server.getName().equals(account.getServer())) { // return server; // } // } // // throw new CommonTreeServerNotFoundException(); // } public void updateTree() { DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(rootName); DefaultTreeModel defaultTreeModel = new DefaultTreeModel(rootNode); DefaultMutableTreeNode accountRootTreeNode = new DefaultMutableTreeNode( new TreeNode( "Accounts", Resources.getIcon("/16x16/users.png"), null)); DefaultMutableTreeNode accountTreeNode = null; DefaultMutableTreeNode serverRootTreeNode = new DefaultMutableTreeNode( new TreeNode( "Servers", Resources.getIcon("/16x16/computers.png"), null)); DefaultMutableTreeNode serverTreeNode = null; setModel(defaultTreeModel); setCellRenderer(new NodeTreeCellRenderer()); // for (TradeAccount account : accounts) { // accountTreeNode = new DefaultMutableTreeNode( // new TreeNode( // account.getName(), // Resources.getIcon("/16x16/computer.png"), // account)); // accountRootTreeNode.add(accountTreeNode); // } // // rootNode.add(accountRootTreeNode); // // for (TradeServer server : servers) { // serverTreeNode = new DefaultMutableTreeNode( // new TreeNode( // server.getName(), // Resources.getIcon("/16x16/computer.png"), // server)); // serverRootTreeNode.add(serverTreeNode); // } // // rootNode.add(serverRootTreeNode); this.updateUI(); /* display jtree without root node */ //this.setRootVisible(false); for (int i = 0; i < this.getRowCount(); i++) { this.expandRow(i); } } private class NodeTreeCellRenderer implements javax.swing.tree.TreeCellRenderer { private javax.swing.JLabel label; NodeTreeCellRenderer() { label = new javax.swing.JLabel(); } @Override public java.awt.Component getTreeCellRendererComponent( javax.swing.JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { Object o = ((DefaultMutableTreeNode) value).getUserObject(); if (o instanceof TreeNode) { TreeNode node = (TreeNode) o; label.setIcon(node.getIcon()); label.setText(node.getName()); } else { label.setIcon(null); label.setText("" + value); } //setToolTipText("This book is in the Tutorial series."); return label; } } private class TreeNode { private String name; private javax.swing.Icon icon; private Object userObject; TreeNode (String name, javax.swing.Icon icon, Object userObject) { this.name = name; this.icon = icon; this.userObject = userObject; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setUserObject(Object userObject) { this.userObject = userObject; } public javax.swing.Icon getIcon() { return icon; } public void setIcon(javax.swing.Icon icon) { this.icon = icon; } public Object getUserObject() { return userObject; } } }