package com.vci.client.logon.base;
|
|
import java.awt.Component;
|
import java.util.Iterator;
|
import java.util.Map;
|
|
import com.vci.client.ui.swing.components.CloseEvent;
|
import com.vci.client.ui.swing.components.CloseListenerAdapter;
|
import com.vci.client.ui.swing.components.JClosableTabbedPane;
|
import com.vci.client.ui.swing.components.TabTitleComponent;
|
import com.vci.client.uif.engine.client.IRegionPanel;
|
import com.vci.client.uif.engine.client.UILayoutPanel;
|
import com.vci.client.uif.engine.client.TreeTable.TreeTablePanel;
|
import com.vci.client.uif.engine.client.mainDataArea.MainDataFormPanel;
|
import com.vci.client.uif.engine.client.tableArea.TablePanel;
|
import com.vci.client.uif.engine.client.tree.TreePanel;
|
import com.vci.mw.ClientContextVariable;
|
|
public class TabPanelManage {
|
|
private static TabPanelManage instance = null;
|
private JClosableTabbedPane mainTabPanel = null;
|
|
|
public static synchronized TabPanelManage getInstance() {
|
if (instance == null) {
|
instance = new TabPanelManage();
|
}
|
return instance;
|
}
|
|
public void setTabPanel(JClosableTabbedPane tabPanel)
|
{
|
mainTabPanel = tabPanel;
|
}
|
|
/**
|
* 增加新的tabPanel
|
* @param component
|
* @param title
|
*/
|
public void addTabPanel(Component component, String title) {
|
this.addTabPanel(component, title, false);
|
}
|
|
/**
|
* 增加新的tabPanel
|
* @param component 组件对象
|
* @param title 标题
|
* @param override 是否覆盖(标题名称相同才覆盖)
|
*/
|
public void addTabPanel(Component component, String title, boolean override) {
|
boolean titleIsExist = isTabPanelExist(title);
|
if(titleIsExist && override){
|
int index = getComponentIndex(title);
|
mainTabPanel.setComponentAt(index, component);
|
} else {
|
mainTabPanel.addTab(title, component, true);
|
mainTabPanel.setSelectedComponent(component);
|
mainTabPanel.updateUI();
|
// 注册关闭前、后事件处理
|
mainTabPanel.addCloseListener(new CloseListenerAdapter() {
|
@Override
|
public void afterClosed(CloseEvent e) {
|
releaseUILayoutPanel(e);
|
}
|
});
|
}
|
}
|
/**
|
* 在关闭UILayoutPanel时,释放TablePanel产生的线程(池)
|
*/
|
private void releaseUILayoutPanel(CloseEvent e){
|
if(e.getSource() instanceof JClosableTabbedPane){
|
Component compt = e.getTabComponent();
|
if(compt == null) return;
|
if(!(compt instanceof TabTitleComponent)) return;
|
|
TabTitleComponent tabTitleCompt = (TabTitleComponent) compt;
|
Component tabCompt = tabTitleCompt.getTabComponent();
|
if(tabCompt == null) return;
|
if(!(tabCompt instanceof UILayoutPanel)) return;
|
|
UILayoutPanel uipl = (UILayoutPanel)tabCompt;
|
releaseUILayoutPanel(uipl);
|
}
|
}
|
|
private void releaseUILayoutPanel(UILayoutPanel uipl){
|
Map<String, IRegionPanel> regionPanelMap = uipl.getRegionPanelMap();
|
Iterator<String> its = regionPanelMap.keySet().iterator();
|
while(its.hasNext()){
|
String key = its.next();
|
IRegionPanel regionPanel = regionPanelMap.get(key);
|
if(regionPanel == null) continue;
|
if(regionPanel instanceof TreePanel){
|
repleaseTreePanel((TreePanel)regionPanel);
|
} else if(regionPanel instanceof MainDataFormPanel){
|
repleaseMainDataFormPanel((MainDataFormPanel)regionPanel);
|
} else if(regionPanel instanceof TablePanel){
|
repleaseTablePanel((TablePanel)regionPanel);
|
} else if(regionPanel instanceof TreeTablePanel){
|
repleaseTreeTablePanel((TreeTablePanel)regionPanel);
|
}
|
}
|
}
|
|
private void repleaseTreePanel(TreePanel treePanel){
|
//TODO release in here
|
}
|
private void repleaseMainDataFormPanel(MainDataFormPanel treePanel){
|
//TODO release in here
|
}
|
private void repleaseTablePanel(TablePanel tablePanel){
|
if(tablePanel != null && tablePanel.getDataTablePanel() != null){
|
tablePanel.getDataTablePanel().shutdownThreadPool();
|
}
|
}
|
private void repleaseTreeTablePanel(TreeTablePanel treeTablePanel){
|
//TODO release in here
|
}
|
|
/**
|
* 根据名称判断title是否存储,如果存在则选中并返回true
|
* @param title
|
* @return
|
*/
|
public boolean isTabPanelExist(String title) {
|
int count = mainTabPanel.getTabCount();
|
for (int i = 0; i < count; i++) {
|
if (mainTabPanel.getTitleAt(i).equals(title)) {
|
mainTabPanel.setSelectedIndex(i);
|
return true;
|
}
|
}
|
return false;
|
}
|
|
/**
|
* 获取指定标题组件的索引
|
* @param title
|
* @return
|
*/
|
public int getComponentIndex(String title){
|
int index = -1;
|
int count = mainTabPanel.getTabCount();
|
for (int i = 0; i < count; i++) {
|
if (mainTabPanel.getTitleAt(i).equals(title)) {
|
index = i;
|
break;
|
}
|
}
|
return index;
|
}
|
/**
|
* 返回主体框架顶层的TabbedPane
|
* @return
|
*/
|
public JClosableTabbedPane getTabPanel(){
|
return mainTabPanel;
|
}
|
}
|