/**
* VimDasaView.java
* Created On 2006, Mar 24, 2006 7:31:43 PM
* @author E. Rajasekar
*/
package app.astrosoft.ui.view;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.ToolTipManager;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.ExpandVetoException;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import app.astrosoft.consts.DisplayStrings;
import app.astrosoft.consts.TableStyle;
import app.astrosoft.core.Dasa;
import app.astrosoft.core.Vimshottari;
import app.astrosoft.ui.comp.TitleLabel;
import app.astrosoft.ui.comp.TitledTable;
import app.astrosoft.ui.table.AstrosoftTable;
import app.astrosoft.ui.table.AstrosoftTableModel;
import app.astrosoft.ui.table.TableData;
import app.astrosoft.ui.tree.DasaTreeCellRenderer;
import app.astrosoft.ui.tree.DasaTreeListener;
import app.astrosoft.ui.tree.DasaTreeSelectionHandler;
import app.astrosoft.ui.util.UIUtil;
public class VimDasaView extends AstrosoftView implements DasaTreeSelectionHandler{
private Vimshottari v;
private AstrosoftTableModel dasaTableModel;
private AstrosoftTable dasaTable;
private TitleLabel dasaTitle;
private static final Dimension viewSize = new Dimension(580, 400);
private static final Dimension treeSize = new Dimension((int)(viewSize.width * 0.30), viewSize.height);
private static final Dimension tableSize = new Dimension((int)(viewSize.width * 0.60), (int) (viewSize.height * 0.56));
public VimDasaView(String title, Vimshottari v) {
super(title, viewSize);
this.v = v;
Font treeFont = UIUtil.getFont("Tahoma", Font.PLAIN, 11);
Font tableFont = UIUtil.getFont(Font.BOLD, 12);
JTree dasaTree = new JTree(v.getDasaTreeModel());
dasaTree.setFont(treeFont);
dasaTree.getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);
dasaTree.setCellRenderer(new DasaTreeCellRenderer());
ToolTipManager.sharedInstance().registerComponent(dasaTree);
JScrollPane treePane = new JScrollPane(dasaTree);
treePane.setPreferredSize(treeSize);
dasaTableModel = new AstrosoftTableModel(
v.getVimDasaTableData(), Vimshottari.getVimDasaTableColumnMetaData());
dasaTable = new AstrosoftTable(dasaTableModel, TableStyle.SCROLL_SINGLE_ROW_SELECT);
dasaTable.getTableHeader().setFont(tableFont);
dasaTable.getSelectionModel().setLeadSelectionIndex(-1);
dasaTitle = new TitleLabel(DisplayStrings.VIM_DASA_STR);
JPanel dasaPanel = new JPanel();
dasaPanel.add(new TitledTable(dasaTitle, dasaTable, tableSize));
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treePane, dasaPanel);
//splitPane.setBackground(Color.WHITE);
treePane.setBorder(BorderFactory.createEtchedBorder());
dasaPanel.setBorder(BorderFactory.createEmptyBorder());
splitPane.setBorder(BorderFactory.createEtchedBorder());
add(splitPane,BorderLayout.CENTER);
this.setVisible(true);
//Make Current Dasa as Selected
TreePath currentDasaPath = v.getCurrentDasaPath();
dasaTree.setSelectionPath(currentDasaPath);
DefaultMutableTreeNode currentDasaNode = (DefaultMutableTreeNode) dasaTree.getLastSelectedPathComponent();
nodeSelected(currentDasaNode, currentDasaPath);
dasaTree.addTreeSelectionListener(new DasaTreeListener(this));
}
public void nodeSelected(DefaultMutableTreeNode node, TreePath path) {
Dasa dasa = (Dasa) node.getUserObject();
boolean isRoot = node.isRoot();
if (node.isLeaf()){
updateDasaTable(dasa.getParent(), isRoot);
}else{
updateDasaTable(dasa, isRoot);
}
if (!isRoot && node.isLeaf()){
setRowSelected(node.getParent(), node);
}
String title;
if (isRoot){
title = DisplayStrings.VIM_DASA_STR.toString();
}else{
title = path.getPathComponent(1).toString() + " " + DisplayStrings.DASA_STR.toString();
}
dasaTitle.setText(title);
}
private void setRowSelected(TreeNode parent, TreeNode node){
int index = parent.getIndex(node);
dasaTable.getSelectionModel().setLeadSelectionIndex(index);
}
private void updateDasaTable(Dasa dasa, boolean isRoot){
TableData<Dasa> data = null;
//if Root node is selected, display root dasa.
if(isRoot || dasa == null){
data = v.getVimDasaTableData();
}else{
data = v.getVimDasaTableData(dasa);
}
if (data.getRowCount() > 0){
dasaTableModel.updateData(data);
}
}
}