package com.vci.client.uif.engine.client.tree; import java.util.ArrayList; import java.util.List; import javax.swing.tree.TreePath; import com.vci.client.ui.tree.VCIBaseTreeModel; import com.vci.client.ui.treeTable.TreeTableModel; import com.vci.client.uif.engine.client.IDataModel; import com.vci.client.uif.engine.client.IRegionPanel; import com.vci.client.uif.engine.client.IUILayoutModel; import com.vci.client.uif.engine.common.IDataNode; import com.vci.common.utility.ObjectUtility; public class TreePanelModel extends VCIBaseTreeModel implements IDataModel{ private static final long serialVersionUID = 8950763390449482192L; private String key = null; private IUILayoutModel uiLayoutModel = null; //当前选择的树节点数据 private Object[] selectObjs = null; //根节点 private TreeNode rootNode = null; //关联的树容器Panel(UI) private TreePanel mainPanel = null; //当前所选择的数据 private Object clickObject = null; // private IRegionPanel regionPanel = null; public TreePanelModel(TreeNode treeNode, TreePanel panel) { super(treeNode); rootNode = treeNode; this.mainPanel = panel; key = ObjectUtility.getNewObjectID36(); setRegionPanel(panel); } @Override public String getKey() { return key; } @Override public int[] getSelectObjectRowIndexs() { // TODO Auto-generated method stub return null; } @Override public Object[] getSelectObjects() { return this.selectObjs; } public void setSelectObjects(Object[] objs) { selectObjs = objs; } @Override public void setClickObject(Object selectObjs) { this.clickObject = selectObjs; } @Override public Object getClickObject() { return this.clickObject; } @Override public Object getRootObject() { return this.rootNode.getObj(); } @Override public void setUILayoutModel(IUILayoutModel uiLayoutModel) { this.uiLayoutModel = uiLayoutModel; } @Override public IUILayoutModel getUILayoutModel() { return this.uiLayoutModel; } @Override public void refreshCache(Object clientObject) { // TODO Auto-generated method stub } /** * 返回此 model 所在的 regionPanel */ @Override public IRegionPanel getRegionPanel() { return regionPanel; } /** * 设置此 model 所在的 regionPanel * @param regionPanel 此 model 所在的 regionPanel */ @Override public void setRegionPanel(IRegionPanel regionPanel) { this.regionPanel = regionPanel; } @Override public boolean selectedHasRoot(){ boolean res = false; TreePath[] treePaths = mainPanel.getTree().getSelectionPaths(); for(TreePath treePath : treePaths){ boolean pathIsRoot = treePathIsRoot(treePath); return pathIsRoot; } return res; } @Override public boolean lastSelectedIsRoot(){ return treePathIsRoot(mainPanel.getTree().getSelectionPath()); } private boolean treePathIsRoot(TreePath treePath){ boolean res = false; Object lastObject = mainPanel.getTree().getLastSelectedPathComponent(); if(lastObject instanceof TreeTableModel.TreeTableNode){ TreeTableModel.TreeTableNode treeNode = (TreeTableModel.TreeTableNode)lastObject; res = (treeNode.getParent() == null); } return res; } private IDataModel sourceModel; @Override public void setSourceModel(IDataModel sourceModel){ this.sourceModel = sourceModel; } @Override public IDataModel getSourceModel(){ return sourceModel; } private IDataNode sourceData = null; /** * 返回 此IRegionPanel初始时、唯一恒定不变的SourceData对象 * @return 此IRegionPanel初始时、唯一恒定不变的SourceData对象 */ public IDataNode getSourceData() { return sourceData; } /** * 设置此IRegionPanel初始时、唯一恒定不变的SourceData对象 * @param sourceData 此IRegionPanel初始时、唯一恒定不变的SourceData对象 */ public void setSourceData(IDataNode sourceData) { this.sourceData = sourceData; } protected List innerDataModelsInTabPanel = null; /** * @Title :设置嵌套子页签 by zhonggy 2015-07 * @Description : * @param innerDataModelsInTabPanel */ public void setInnerTabModels(List innerDataModelsInTabPanel){ this.innerDataModelsInTabPanel = innerDataModelsInTabPanel; } private boolean regionUIIsActive = false; //默认不需要加载激活界面 protected IDataModel innerActiveDataModel = null; @Override /** * @Title :控件是否激活显示(如果激活界面,当源界面数据变化后刷新时,当前界面数据需要及时刷新,否则不用刷新) * @Description : * @param isActive */ /*public void setActive(boolean isActive) { this.regionUIIsActive = isActive; }*/ public void setActive(boolean isActive) { this.regionUIIsActive = isActive; if (isActive) { //设置兄弟页签为非激活 if (brotherModels != null && brotherModels.size() >0) { for (IDataModel item : brotherModels) { if (item != this) { item.setActive(false); } } } if (innerActiveDataModel != null) { innerActiveDataModel.setActive(true); } }else if(innerDataModelsInTabPanel != null) { innerActiveDataModel = null; for (IDataModel item : innerDataModelsInTabPanel) { if (item.isActive()) { innerActiveDataModel = item; innerActiveDataModel.setActive(false); } } } } @Override /** * @Title :控件是否激活显示(如果激活界面,当源界面数据变化后刷新时,当前界面数据需要及时刷新,否则不用刷新) * @Description : * @return */ public boolean isActive(){ return regionUIIsActive; } private boolean needRefreshUI = false; //当前控件触发刷新 /** * 界面是否需要刷新 * @Title :isNeedRefreshUI * @Description : * @return */ public boolean isNeedRefreshUI(){ return needRefreshUI; } /** * 设置界面是否需要刷新 * @param needRefreshUI */ public void setNeedRefreshUI(boolean needRefreshUI){ this.needRefreshUI = needRefreshUI; } @Override public void refresh(IDataModel fromDataModel) { //TODO -本身的刷新 //先获取对象,而后更新对象的本身的信息,重新设置node的显示值。 this.sourceModel = fromDataModel; mainPanel.refreshUI(); } private List brotherModels = null; /** * @Title :兄弟Models * @Description : * @param dataModelsInTabPanel */ public void setBrotherModels(List models){ this.brotherModels = new ArrayList(); for (IDataModel iDataModel : models) { if (iDataModel != this) { brotherModels.add(iDataModel); } } } /** * 处理UI组件的UI刷新(先刷新UI Module,通过UI Module刷新UI组件) add by zhonggy 2015-07 */ public void refreshUI(IDataModel fromDataModel){ this.sourceModel = fromDataModel; needRefreshUI = true; if (regionUIIsActive && regionPanel != null) { needRefreshUI = false; regionPanel.refreshUI(); } } @Override /** * 处理UI刷新 */ public void refreshUI() { this.setActive(true); if (needRefreshUI && regionPanel != null) { needRefreshUI = false; regionPanel.refreshUI(); } } }