/**
* Copyright 2014 Comcast Cable Communications Management, LLC
*
* This file is part of CATS.
*
* CATS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CATS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CATS. If not, see <http://www.gnu.org/licenses/>.
*/
package com.comcast.cats.vision.panel;
import java.awt.Color;
import java.awt.Dimension;
import java.util.HashMap;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeWillExpandListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.ExpandVetoException;
import javax.swing.tree.TreeSelectionModel;
@SuppressWarnings("serial")
public class PreferencePanel extends JPanel implements TreeSelectionListener, TreeWillExpandListener{
JTree preferenceTree;
DefaultMutableTreeNode top;
HashMap<String, JScrollPane> prefereancePanelMap = new HashMap<String, JScrollPane>();
JSplitPane splitPane;
JPanel defPanel;
public PreferencePanel(){
top = new DefaultMutableTreeNode("CATSVision");
preferenceTree = new JTree(top);
preferenceTree.getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);
preferenceTree.addTreeSelectionListener(this);
preferenceTree.addTreeWillExpandListener(this);
setMinimumSize(new Dimension(200,800));
JScrollPane treeView = new JScrollPane(preferenceTree);
//Add the scroll panes to a split pane.
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setLeftComponent(treeView);
defPanel = new JPanel();
JLabel label = new JLabel("Configure settings for CATSVision");
defPanel.add(label);
JScrollPane defaultScrollPane = new JScrollPane(defPanel);
prefereancePanelMap.put("CATSVision", defaultScrollPane);
splitPane.setRightComponent(defaultScrollPane);
Dimension minimumSize = new Dimension(200, 50);
treeView.setMinimumSize(minimumSize);
splitPane.setDividerLocation(200);
splitPane.setPreferredSize(new Dimension(700, 300));
JScrollPane scrollPane = new JScrollPane(splitPane);
add(scrollPane);
expandAll();
}
public void expandAll(){
for (int i = 0; i < preferenceTree.getRowCount(); i++) {
preferenceTree.expandRow(i);
}
}
public void addPreference(String preferenceName, JScrollPane prefernceEditorPanel, DefaultMutableTreeNode parentNode){
try{
createNode(preferenceName , parentNode);
prefereancePanelMap.put(preferenceName, prefernceEditorPanel);
}catch (IllegalStateException e) {
throw new IllegalStateException(e);
}
}
private void createNode(String preferenceName, DefaultMutableTreeNode parentNode){
DefaultMutableTreeNode node= new DefaultMutableTreeNode(preferenceName);
if(parentNode == null){
parentNode = top;
}
for (int i =0; i< parentNode.getChildCount();i++){
DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) parentNode.getChildAt(i);
if(childNode.getUserObject() == preferenceName){
throw new IllegalStateException("Parent Node already has child for the same preferance");
}
}
parentNode.add(node);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setLocation(300,300);
frame.setPreferredSize(new Dimension(600,800));
PreferencePanel pp = new PreferencePanel();
pp.expandAll();
frame.add(pp);
frame.setVisible(true);
}
@Override
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)
preferenceTree.getLastSelectedPathComponent();
if (node == null){
return;
}
String nodeInfo = (String)node.getUserObject();
JScrollPane scrollPane = prefereancePanelMap.get(nodeInfo);
splitPane.setRightComponent(scrollPane);
}
@Override
public void treeWillCollapse(TreeExpansionEvent event)
throws ExpandVetoException {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)
preferenceTree.getLastSelectedPathComponent();
if(node == top){
throw new ExpandVetoException(event);
}
}
@Override
public void treeWillExpand(TreeExpansionEvent event)
throws ExpandVetoException {
}
}