/*
* Copyright (C) 2000-2012 InfoChamp System Corporation
*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.gk.engine.client.event.attrib;
import java.util.Map;
import org.gk.ui.client.com.tree.dir.gkTreeDirPanelIC;
import org.gk.ui.client.com.tree.xml.gkXMLTreePanelIC;
import com.extjs.gxt.ui.client.Style.LayoutRegion;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
/**
* <title>目前此類別用於控制ContentPanel的Collapsible屬性</title>
*
* @author I21890
* @since 2010/10/15
*/
public class CollapseAttribute implements IAttribute {
@Override
public void setAttributeValue(Component com, Object value) {
// 設定contentPanel收摺
if (com instanceof ContentPanel) {
boolean isCollapse = Boolean.parseBoolean(value + "");
ContentPanel cp = (ContentPanel) com;
Object layoutData = cp.getData("layoutData");
ContentPanel collpasePanel = cp.getData("collapse");
if (layoutData instanceof BorderLayoutData) {
// 當contentPanel在borderLayout中
// region=center時,使用contentPanel原來的收摺功能
BorderLayoutData bld = (BorderLayoutData) layoutData;
if (bld.getRegion().equals(LayoutRegion.CENTER)) {
cp.setExpanded(!isCollapse);
} else {
if (isCollapse) {
if (cp.getParent() == null) {
return;
}
LayoutContainer parent = (LayoutContainer) cp
.getParent();
BorderLayout parentLayout = (BorderLayout) parent
.getLayout();
parentLayout.collapse(bld.getRegion());
} else {
if (collpasePanel == null
|| collpasePanel.getParent() == null) {
return;
}
bld = (BorderLayoutData) collpasePanel
.getData("layoutData");
LayoutContainer parent = (LayoutContainer) collpasePanel
.getParent();
BorderLayout parentLayout = (BorderLayout) parent
.getLayout();
parentLayout.expand(bld.getRegion());
}
}
} else {
cp.setExpanded(!isCollapse);
}
}
// 收摺Tree節點
if (com instanceof gkXMLTreePanelIC) {
gkXMLTreePanelIC tree = (gkXMLTreePanelIC) com;
String nodeId = "";
if (value == null) {
// 收摺所有節點
tree.expandAllNode(false);
} else {
// 收摺指定節點
if (value instanceof Map) {
Map map = (Map) value;
assert map.containsKey(gkXMLTreePanelIC.ID) : "can't found nodeId:"
+ map;
nodeId = (String) map.get(gkXMLTreePanelIC.ID);
} else {
nodeId = value + "";
}
tree.expandNode(nodeId, false);
}
} else if (com instanceof gkTreeDirPanelIC) {
gkTreeDirPanelIC tree = (gkTreeDirPanelIC) com;
String nodeId = "";
// 收摺指定節點
if (value instanceof Map) {
Map map = (Map) value;
assert map.containsKey(gkTreeDirPanelIC.ID) : "can't found nodeId:"
+ map;
nodeId = (String) map.get(gkTreeDirPanelIC.ID);
} else {
nodeId = value + "";
}
ModelData md = tree.getStore().findModel(nodeId);
assert (md != null);
tree.setExpanded(md, false);
}
}
@Override
public Object getAttributeValue(Component com) {
boolean isCollapse = false;
if (com instanceof ContentPanel) {
isCollapse = ((ContentPanel) com).isCollapsed();
}
return isCollapse;
}
}