/*
* Copyright (C) 2010---2014 星星(wuweixing)<349446658@qq.com>
*
* This file is part of Wabacus
*
* Wabacus is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.wabacus.system.component.container.panel;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.wabacus.config.Config;
import com.wabacus.config.component.IComponentConfigBean;
import com.wabacus.config.component.container.AbsContainerConfigBean;
import com.wabacus.config.component.container.panel.TabsPanelBean;
import com.wabacus.config.xml.XmlElementBean;
import com.wabacus.system.ReportRequest;
import com.wabacus.system.assistant.WabacusAssistant;
import com.wabacus.system.component.IComponentType;
import com.wabacus.system.component.container.AbsContainerType;
import com.wabacus.system.tags.component.AbsComponentTag;
import com.wabacus.util.Consts;
public class TabsPanel extends AbsPanelType
{
private static Log log=LogFactory.getLog(TabsPanel.class);
private TabItemDisplayBean currentSelectedTabItemDisplayBean=null;
private List<TabItemDisplayBean> lstDisplayedChildren;
private TabsPanelBean tabspanelBean;
public TabsPanel(AbsContainerType parentContainerType,IComponentConfigBean comCfgBean,ReportRequest rrequest)
{
super(parentContainerType,comCfgBean,rrequest);
tabspanelBean=(TabsPanelBean)comCfgBean;
}
public void initUrl(IComponentConfigBean applicationConfigBean,ReportRequest rrequest)
{
super.initUrl(applicationConfigBean,rrequest);
rrequest.addParamToUrl(applicationConfigBean.getId()+"_selectedIndex","rrequest{"+applicationConfigBean.getId()+"_selectedIndex}",true);
}
protected List<String> getDisplayChildIds()
{
initDisplayTabItems();
List<String> lstResults=new ArrayList<String>();
if(currentSelectedTabItemDisplayBean==null) return lstResults;
if(tabspanelBean.isAsyn())
{
lstResults.add(currentSelectedTabItemDisplayBean.getChildid());
}else
{
for(TabItemDisplayBean tidbeanTmp:lstDisplayedChildren)
{//所有显示了标题的,且不是禁用的,都显示出来,切换时只要在客户端切换即可
if(!tidbeanTmp.isDisabled()) lstResults.add(tidbeanTmp.getChildid());
}
}
return lstResults;
}
private void initDisplayTabItems()
{
lstDisplayedChildren=new ArrayList<TabItemDisplayBean>();
if(!rrequest.checkPermission(this.containerConfigBean.getId(),null,null,Consts.PERMISSION_TYPE_DISPLAY)) return;
int childscount=containerConfigBean.getLstChildrenIDs().size();
if(childscount<=0) return;
int currentSelectedTabItemIdx=-1;
String selectedIndex=rrequest.getStringAttribute(this.containerConfigBean.getId()+"_selectedIndex");
if(selectedIndex!=null&&!selectedIndex.trim().equals(""))
{
try
{
currentSelectedTabItemIdx=Integer.parseInt(selectedIndex.trim());
}catch(NumberFormatException e)
{
log.warn("传入的"+this.containerConfigBean.getId()+"_selectedIndex不是有效序号",e);
}
}
if(currentSelectedTabItemIdx<0||currentSelectedTabItemIdx>=childscount)
{
currentSelectedTabItemIdx=0;
changeSelectedTabItemIdx(0);
}
String childidTmp;
TabItemDisplayBean tdbeanTmp;
for(int i=0;i<childscount;i++)
{
childidTmp=containerConfigBean.getLstChildrenIDs().get(i);
if(!rrequest.checkPermission(containerConfigBean.getId(),Consts.DATA_PART,String.valueOf(i),Consts.PERMISSION_TYPE_DISPLAY)) continue;
tdbeanTmp=new TabItemDisplayBean();
tdbeanTmp.setIndex(i);//位置下标
tdbeanTmp.setChildid(childidTmp);
if(rrequest.checkPermission(containerConfigBean.getId(),Consts.DATA_PART,String.valueOf(i),Consts.PERMISSION_TYPE_DISABLED))
{
tdbeanTmp.setDisabled(true);
}else if(i==currentSelectedTabItemIdx)
{
currentSelectedTabItemDisplayBean=tdbeanTmp;
}
lstDisplayedChildren.add(tdbeanTmp);
}
if(lstDisplayedChildren.size()==0) return;
if(currentSelectedTabItemDisplayBean==null)
{
for(TabItemDisplayBean tabItemTmp:lstDisplayedChildren)
{
if(!tabItemTmp.isDisabled())
{
currentSelectedTabItemDisplayBean=tabItemTmp;
changeSelectedTabItemIdx(currentSelectedTabItemDisplayBean.getIndex());
break;
}
}
}
}
private void changeSelectedTabItemIdx(int newtabitemIdx)
{
rrequest.setAttribute(this.containerConfigBean.getId()+"_selectedIndex",newtabitemIdx);
rrequest.addParamToUrl(containerConfigBean.getId()+"_selectedIndex",String.valueOf(newtabitemIdx),true);
}
public void displayOnPage(AbsComponentTag displayTag)
{
if(currentSelectedTabItemDisplayBean==null)
{//如果没有要显示的子标签
wresponse.println(" ");
return;
}
wresponse.println(showContainerStartPart());
if(mChildren!=null&&mChildren.size()>0)
{
IComponentType childObjTmp;
if(this.tabspanelBean.isAsyn())
{
wresponse.println(showContainerTableTag());
childObjTmp=this.mChildren.entrySet().iterator().next().getValue();
wresponse.println("<TR>");
showChildObj(childObjTmp,null);
wresponse.println("</TR>");
wresponse.println("</table>");
}else
{
showChildTabItem(this.currentSelectedTabItemDisplayBean,true);
for(TabItemDisplayBean tidbeanTmp:lstDisplayedChildren)
{//所有显示了标题的,且不是禁用的,都显示出来,切换时只要在客户端切换即可
if(tidbeanTmp.isDisabled()) continue;
if(tidbeanTmp.getIndex()==this.currentSelectedTabItemDisplayBean.getIndex()) continue;
showChildTabItem(tidbeanTmp,false);
}
}
}
wresponse.println(showContainerEndPart());
}
private void showChildTabItem(TabItemDisplayBean tidbean,boolean isDisplay)
{
StringBuffer resultBuf=new StringBuffer();
resultBuf.append("<table cellspacing='0' cellpadding='0' width=\"100%\"");
if(!this.containerConfigBean.isScrollY()&&containerConfigBean.getHeight()!=null&&!containerConfigBean.getHeight().trim().equals(""))
{//容器的高度配置必须放在最里层的<table/>中,否则没办法通过它的<td/>的valign控制子组件的垂直对齐方式
resultBuf.append(" height=\""+containerConfigBean.getHeight()+"\"");
}
resultBuf.append(" id=\""+this.containerConfigBean.getGuid()+"_"+tidbean.getIndex()+"_content\"");//分配一个ID属性,以便在客户端切换时能取到此<table/>对象
if(!isDisplay)
{
resultBuf.append(" style=\"display:none;\"");
}
resultBuf.append(">");
wresponse.println(resultBuf.toString());
wresponse.println("<TR>");
showChildObj(this.mChildren.get(tidbean.getChildid()),null);
wresponse.println("</TR>");
wresponse.println("</table>");
}
protected String showLeftRightTitlePart()
{
if(currentSelectedTabItemDisplayBean==null) return "";
if(!rrequest.checkPermission(containerConfigBean.getId(),Consts.TITLE_PART,null,Consts.PERMISSION_TYPE_DISPLAY)) return "";
StringBuffer resultBuf=new StringBuffer();
resultBuf.append("<td width=\"20\"");
if(containerConfigBean.isTitleInRight())
{//标题显示在右侧
resultBuf.append(" class=\"cls-tabtitle-right-parenttd\"");
}else
{
resultBuf.append(" class=\"cls-tabtitle-left-parenttd\"");
}
String titlealign=containerConfigBean.getTitlealign();
if(titlealign==null||titlealign.trim().equals("")) titlealign="top";
resultBuf.append(" valign=\"").append(titlealign).append("\">");
resultBuf.append("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\"");
if(containerConfigBean.isTitleInRight())
{
resultBuf.append(" class=\"cls-tabtitle-right-table\"");
}else
{
resultBuf.append(" class=\"cls-tabtitle-left-table\"");
}
if(!this.tabspanelBean.isAsyn())
{
resultBuf.append(" selectedItemIndex=\"").append(currentSelectedTabItemDisplayBean.getIndex()).append("\"");//记录当前选中的标签页下标,以便切换时用上
}
resultBuf.append(">");
String titlewidth=((TabsPanelBean)containerConfigBean).getTitlewidth();
String titlestyle=((TabsPanelBean)containerConfigBean).getTitlestyle();
TabItemDisplayBean tdbeanTmp;
for(int i=0,len=lstDisplayedChildren.size();i<len;i++)
{
tdbeanTmp=lstDisplayedChildren.get(i);
resultBuf.append("<tr><TD ");
String titleclassname=null;
if(titlestyle!=null&&titlestyle.equals("2"))
{
resultBuf.append(" nowrap ");
if(titlewidth!=null&&!titlewidth.trim().equals("")) resultBuf.append(" style=\"width:").append(titlewidth).append("\"");
titleclassname="cls-tabtitle-leftright2";
}else
{
if(titlewidth!=null&&!titlewidth.trim().equals("")) resultBuf.append("style=\"height:").append(titlewidth).append("\"");
titleclassname="cls-tabtitle-leftright";
}
resultBuf.append(" id=\""+this.containerConfigBean.getGuid()+"_"+tdbeanTmp.getIndex()+"_title\"");
if(tdbeanTmp.getIndex()==currentSelectedTabItemDisplayBean.getIndex())
{
resultBuf.append(" class=\""+titleclassname+"-selected\"");
if(!this.tabspanelBean.isAsyn()) resultBuf.append(" onclick=\"try{"+getTabItemClickEvent(tdbeanTmp.getIndex())+"}catch(e){logErrorsAsJsFileLoad(e);}\"");
}else
{
if(tdbeanTmp.isDisabled())
{//如果当前标签页不可点击
resultBuf.append(" class=\""+titleclassname+"-disabled\"");
}else
{
resultBuf.append(" class=\""+titleclassname+"-deselected\"");
resultBuf.append(" onclick=\"try{"+getTabItemClickEvent(tdbeanTmp.getIndex())+"}catch(e){logErrorsAsJsFileLoad(e);}\"");
}
}
resultBuf.append(">"+getTabItemTitle(tdbeanTmp.getChildid())).append("</TD></tr>");
if(i!=len-1) resultBuf.append("<tr><td height=\"2px\"></td></tr>");
}
String subtitle=this.getMChildren().get(currentSelectedTabItemDisplayBean.getChildid()).getConfigBean().getParentSubtitle(rrequest);
if(subtitle!=null&&!subtitle.trim().equals(""))
{
resultBuf.append("<tr><TD class=\"cls-subtitle\"");
// {//标题显示在右边
// resultBuf.append(" align=\"right\"");
resultBuf.append(">").append(subtitle.trim()).append("</TD></tr>");
}
resultBuf.append("</table></td>");
return resultBuf.toString();
}
protected String showTopBottomTitlePart(boolean isDisplayTopTitleBar)
{
if(currentSelectedTabItemDisplayBean==null) return "";
if(this.containerConfigBean.isTitleInLeft()||this.containerConfigBean.isTitleInRight())
{
return super.showTopBottomTitlePart(isDisplayTopTitleBar);
}
if((isDisplayTopTitleBar&&this.containerConfigBean.isTitleInBottom())||(!isDisplayTopTitleBar&&this.containerConfigBean.isTitleInTop()))
{
return super.showTopBottomTitlePart(isDisplayTopTitleBar);
}
if(!rrequest.checkPermission(containerConfigBean.getId(),Consts.TITLE_PART,null,Consts.PERMISSION_TYPE_DISPLAY))
{
return super.showTopBottomTitlePart(isDisplayTopTitleBar);
}
String realtabtitle=getTabsTitleInTopAndBottomDisplayValue();
if(realtabtitle.trim().equals("")) return super.showTopBottomTitlePart(isDisplayTopTitleBar);//没有标题需要显示,则只考虑按钮的显示
String buttonsOnTitle=getContainerTopBottomButtonsDisplayValue(isDisplayTopTitleBar);
String buttonalign=null;
if(!buttonsOnTitle.trim().equals(""))
{
buttonalign=this.containerConfigBean.getButtonsBean().getAlign();
buttonalign=buttonalign==null||buttonalign.trim().equals("")?"right":buttonalign.toLowerCase().trim();
}
String titlealign=containerConfigBean.getTitlealign();
titlealign=titlealign==null?"left":titlealign.toLowerCase().trim();
StringBuffer resultBuf=new StringBuffer();
resultBuf.append("<TR><TD>");
resultBuf.append("<TABLE cellSpacing=0 cellPadding=0 style=\"width:100%\"");
if(containerConfigBean.isTitleInBottom())
{
resultBuf.append(" class=\"cls-tabtitle-bottom-table\"");
}else
{
resultBuf.append(" class=\"cls-tabtitle-top-table\"");
}
if(buttonsOnTitle.equals("")||titlealign.equalsIgnoreCase(buttonalign))
{
if(!this.tabspanelBean.isAsyn())
{//如果不是异步切换tabitem
resultBuf.append(" selectedItemIndex=\"").append(currentSelectedTabItemDisplayBean.getIndex()).append("\"");
}
resultBuf.append("><TBODY><TR>");
if(!titlealign.equals("left")) resultBuf.append("<td> </td>");
if(!buttonsOnTitle.equals("")&&"left".equals(this.containerConfigBean.getButtonsBean().getTitleposition()))
{
resultBuf.append("<td width='1%' nowrap>");
resultBuf.append(buttonsOnTitle);
resultBuf
.append(WabacusAssistant.getInstance().getSpacingDisplayString(this.containerConfigBean.getButtonsBean().getButtonspacing()));
resultBuf.append("</td>");
}
resultBuf.append(realtabtitle);
if(!buttonsOnTitle.equals("")&&!"left".equals(this.containerConfigBean.getButtonsBean().getTitleposition()))
{
resultBuf.append("<td width='1%' nowrap>");
resultBuf
.append(WabacusAssistant.getInstance().getSpacingDisplayString(this.containerConfigBean.getButtonsBean().getButtonspacing()));
resultBuf.append(buttonsOnTitle);
resultBuf.append("</td>");
}
if(!titlealign.equals("right")) resultBuf.append("<td> </td>");
}else
{//要显示按钮,且标题与按钮的对齐方式不一致,则要分两个<td/>显示
resultBuf.append("><TBODY><TR>");
if(titlealign.equals("left"))
{
resultBuf.append(showRealTitlePartInTopBottom(realtabtitle,titlealign));
resultBuf.append(showRealButtonPartInTopBottom(buttonsOnTitle,buttonalign.equals("center")?"align=\"left\" width=\"50%\""
:"align=\"right\" width=\"1%\""));
}else if(titlealign.equals("center"))
{
if(buttonalign.equals("left"))
{
resultBuf.append(showRealButtonPartInTopBottom(buttonsOnTitle,"align=\"left\" width=\"1%\""));
resultBuf.append(showRealTitlePartInTopBottom(realtabtitle,titlealign));
}else
{//right
resultBuf.append(showRealTitlePartInTopBottom(realtabtitle,titlealign));
resultBuf.append(showRealButtonPartInTopBottom(buttonsOnTitle,"width=\"1%\" align=\"right\""));
}
}else
{
resultBuf.append(showRealButtonPartInTopBottom(buttonsOnTitle,buttonalign.equals("center")?"align=\"right\" width=\"50%\""
:"align=\"left\" width=\"1%\""));
resultBuf.append(showRealTitlePartInTopBottom(realtabtitle,titlealign));
}
}
resultBuf.append("</TR></TBODY></TABLE>");
resultBuf.append("</TD></TR>");
return resultBuf.toString();
}
private String showRealTitlePartInTopBottom(String realtabtitle,String titlealign)
{
StringBuffer resultBuf=new StringBuffer();
resultBuf.append("<td align=\""+titlealign+"\" valign=\""+(containerConfigBean.isTitleInBottom()?"top":"bottom")+"\">");
resultBuf.append("<TABLE cellSpacing=0 cellPadding=0");
if(!this.tabspanelBean.isAsyn())
{
resultBuf.append(" selectedItemIndex=\"").append(currentSelectedTabItemDisplayBean.getIndex()).append("\"");
}
resultBuf.append("><TBODY><TR>");
resultBuf.append(realtabtitle);
resultBuf.append("</TR></TBODY></TABLE>");
resultBuf.append("</td>");
return resultBuf.toString();
}
private String showRealButtonPartInTopBottom(String buttonsOnTitle,String tdStyleproperty)
{
StringBuffer resultBuf=new StringBuffer();
resultBuf.append("<td nowrap "+tdStyleproperty);
resultBuf.append(" valign=\""+(containerConfigBean.isTitleInBottom()?"top":"bottom")+"\"");
resultBuf.append(">").append(buttonsOnTitle).append("</td>");
return resultBuf.toString();
}
// protected String showTopBottomTitlePart(boolean isDisplayTopTitleBar)
// {//如果当前容器的标题是显示在左右两侧,即不在上下显示标题,则只要考虑显示在上下的按钮
// }
// {//如果当前是在显示容器顶部,但标题是显示在底部;或者当前是在显示容器底部,但标题是显示在容器顶部
// {//标题栏授权为不显示,则只显示上面的功能按钮
// return super.showTopBottomTitlePart(isDisplayTopTitleBar);
// if(realtabtitle.trim().equals("")) return super.showTopBottomTitlePart(isDisplayTopTitleBar);//没有标题需要显示,则只考虑按钮的显示
// String buttonsOnTitle=getContainerTopBottomButtonsDisplayValue(isDisplayTopTitleBar);//要显示在顶部或底部标题栏上的功能按钮
// {
// String titlealign=containerConfigBean.getTitlealign();
// if(containerConfigBean.isTitleInBottom())
// {//标题显示在底部
// {//标题显示在顶部
// if(!this.tabspanelBean.isAsyn())
// {//如果不是异步切换tabitem
// resultBuf.append(" selectedItemIndex=\"").append(currentSelectedTabItemDisplayBean.getIndex()).append("\"");//记录当前选中的标签页下标
// {//没有按钮只显示标题部分
// {
// resultBuf.append("<td width='50%'> </td>");
// resultBuf.append("<td width='50%'> </td>");
// resultBuf.append("<td> </td>");
// }else
// {//left
// resultBuf.append("<td> </td>");
// {//需要显示标题和功能按钮
// {
// resultBuf.append("<td width=\"50%\" nowrap align=\"left\">").append(buttonsOnTitle).append("</td>");
// resultBuf.append("<td width=\"50%\"> </td>");
// {
// resultBuf.append("<td width='50%'> </td>");
// resultBuf.append("<td width=\"2px\"> </td>");
// resultBuf.append("<td align=\"left\" width=\"1%\" nowrap>"+buttonsOnTitle+"</td>");
// resultBuf.append("<td width='50%'> </td>");
// {//right
// resultBuf.append("<td width='50%'> </td>");
// resultBuf.append("<td align=\"right\" nowrap>"+buttonsOnTitle+"</td>");
// }else if(titlealign.equals("right"))
// resultBuf.append("<td align=\"left\" nowrap>"+buttonsOnTitle+"</td>");
// }else if(buttonalign.equals("center"))
// resultBuf.append("<td width='50%'> </td>");
// resultBuf.append("<td align=\"left\" nowrap>"+buttonsOnTitle+"</td>");
// {//right
// resultBuf.append("<td> </td>");
// resultBuf.append("<td width=\"2px\"> </td>");
// resultBuf.append("<td align=\"left\" width=\"1%\" nowrap>"+buttonsOnTitle+"</td>");
// }
// {//left
// if(buttonalign.equals("left")) resultBuf.append("<td width=\"2px\"> </td>");
// resultBuf.append("<td align=\""+buttonalign+"\" nowrap>"+buttonsOnTitle+"</td>");
// resultBuf.append("</TR></TBODY></TABLE>");
// resultBuf.append("</TD></TR>");
// return resultBuf.toString();
private String getTabsTitleInTopAndBottomDisplayValue()
{
StringBuffer resultBuf=new StringBuffer();
String titlewidth=((TabsPanelBean)containerConfigBean).getTitlewidth();
if(titlewidth==null||titlewidth.trim().equals("")) titlewidth=Config.getInstance().getSystemConfigValue("default-tabpanel-titlewidth","120px");
String titlestyle=((TabsPanelBean)containerConfigBean).getTitlestyle();
String img_sel=null;
String img_sel_desel=null;
String img_desel=null;
String img_desel_sel=null;
String img_desel_desel=null;
if(titlestyle!=null&&titlestyle.trim().equals("2")&&containerConfigBean.isTitleInTop())
{
img_sel=Config.webroot+"webresources/skin/"+rrequest.getPageskin()+"/images/title2_selected.gif";
img_sel_desel=Config.webroot+"webresources/skin/"+rrequest.getPageskin()+"/images/title2_selected_deselected.gif";
img_desel=Config.webroot+"webresources/skin/"+rrequest.getPageskin()+"/images/title2_deselected.gif";
img_desel_sel=Config.webroot+"webresources/skin/"+rrequest.getPageskin()+"/images/title2_deselected_selected.gif";
img_desel_desel=Config.webroot+"webresources/skin/"+rrequest.getPageskin()+"/images/title2_deselected_deselected.gif";
StringBuffer paramsBuf=new StringBuffer();
paramsBuf.append("{tabpanelguid:\""+this.containerConfigBean.getGuid()+"\"");
paramsBuf.append(",tabitemcount:"+lstDisplayedChildren.size()+"}");
rrequest.getWResponse().addOnloadMethod("adjustTabItemTitleImgHeight",paramsBuf.toString(),true);
}
String titleTmp;
TabItemDisplayBean tdbeanTmp;
for(int i=0,len=lstDisplayedChildren.size();i<len;i++)
{
tdbeanTmp=lstDisplayedChildren.get(i);
titleTmp=getTabItemTitle(tdbeanTmp.getChildid());
resultBuf.append("<TD noWrap style=\"width:").append(titlewidth).append("\"");
resultBuf.append(" id=\""+this.containerConfigBean.getGuid()+"_"+tdbeanTmp.getIndex()+"_title\"");
if(titlestyle!=null&&titlestyle.trim().equals("2")&&containerConfigBean.isTitleInTop())
{
if(!this.tabspanelBean.isAsyn()&&len>1)
{
if(i==0)
{
resultBuf.append("tabitem_position_type=\"first\"");
}else if(i==len-1)
{//如果是最后一个标签页
resultBuf.append("tabitem_position_type=\"last\"");
}else
{
resultBuf.append("tabitem_position_type=\"middle\"");
}
}
boolean isSelected=false;
if(tdbeanTmp.getIndex()==currentSelectedTabItemDisplayBean.getIndex())
{
isSelected=true;
if(!this.tabspanelBean.isAsyn()) resultBuf.append(" onclick=\"try{"+getTabItemClickEvent(tdbeanTmp.getIndex())+"}catch(e){logErrorsAsJsFileLoad(e);}\"");
resultBuf.append(" class='cls-tabtitle-top2-selected'>");
}else
{
if(tdbeanTmp.isDisabled())
{
resultBuf.append(" class='cls-tabtitle-top2-disabled'>");
}else
{
resultBuf.append(" class='cls-tabtitle-top2-deselected' onclick=\"try{"+getTabItemClickEvent(tdbeanTmp.getIndex())+"}catch(e){logErrorsAsJsFileLoad(e);}\">");
}
}
resultBuf.append(titleTmp+"</td>");
resultBuf.append("<TD width=\"21px\"><IMG width=\"21px\"");
resultBuf.append(" id=\""+this.containerConfigBean.getGuid()+"_"+tdbeanTmp.getIndex()+"_rightimg\"");
resultBuf.append(" src=\"");
if(i==len-1)
{
if(isSelected)
{
resultBuf.append(img_sel);
}else
{
resultBuf.append(img_desel);
}
}else
{
if(isSelected)
{
resultBuf.append(img_sel_desel);
}else
{
if(lstDisplayedChildren.get(i+1).getIndex()==currentSelectedTabItemDisplayBean.getIndex())
{//如果当前tabitem的下一个tabitem就是本次选中显示的tabitem
resultBuf.append(img_desel_sel);
}else
{
resultBuf.append(img_desel_desel);
}
}
}
resultBuf.append("\"></td>");
}else
{
if(containerConfigBean.isTitleInBottom())
{
if(tdbeanTmp.getIndex()==currentSelectedTabItemDisplayBean.getIndex())
{
resultBuf.append(" class=\"cls-tabtitle-bottom-selected\"");
if(!this.tabspanelBean.isAsyn()) resultBuf.append(" onclick=\"try{"+getTabItemClickEvent(tdbeanTmp.getIndex())+"}catch(e){logErrorsAsJsFileLoad(e);}\"");
}else
{
if(tdbeanTmp.isDisabled())
{
resultBuf.append(" class='cls-tabtitle-bottom-disabled'");
}else
{
resultBuf.append(" class='cls-tabtitle-bottom-deselected' onclick=\"try{"+getTabItemClickEvent(tdbeanTmp.getIndex())+"}catch(e){logErrorsAsJsFileLoad(e);}\"");
}
}
}else
{
if(tdbeanTmp.getIndex()==currentSelectedTabItemDisplayBean.getIndex())
{
resultBuf.append(" class=\"cls-tabtitle-top-selected\"");
if(!this.tabspanelBean.isAsyn()) resultBuf.append(" onclick=\"try{"+getTabItemClickEvent(tdbeanTmp.getIndex())+"}catch(e){logErrorsAsJsFileLoad(e);}\"");
}else
{
if(tdbeanTmp.isDisabled())
{
resultBuf.append(" class='cls-tabtitle-top-disabled'");
}else
{
resultBuf.append(" class='cls-tabtitle-top-deselected' onclick=\"try{"+getTabItemClickEvent(tdbeanTmp.getIndex())+"}catch(e){logErrorsAsJsFileLoad(e);}\"");
}
}
}
resultBuf.append(">").append(titleTmp).append("</TD>");
if(i!=len-1) resultBuf.append("<TD width=\"1px\"> </TD>");
}
}
String subtitle=this.getMChildren().get(currentSelectedTabItemDisplayBean.getChildid()).getConfigBean().getParentSubtitle(rrequest);
if(subtitle!=null&&!subtitle.trim().equals(""))
{//有副标题
resultBuf.append("<td width=\"2px\"> </td>");
resultBuf.append("<td class='cls-subtitle' align='left' nowrap");
// {//标题显示在底部
// resultBuf.append(" valign='bottom'");
resultBuf.append(">").append(subtitle.trim()).append("</td>");
}
return resultBuf.toString();
}
private String getTabItemClickEvent(int index)
{
StringBuffer resultBuf=new StringBuffer();
if(this.tabspanelBean.isAsyn())
{
resultBuf.append("shiftTabPanelItemAsyn('");
resultBuf.append(containerConfigBean.getPageBean().getId()).append("','");
resultBuf.append(containerConfigBean.getId()).append("','");
resultBuf.append(((TabsPanelBean)containerConfigBean).getRefreshGuid(index)).append("','");
resultBuf.append(index).append("',");
resultBuf
.append(this.tabspanelBean.getSwitchbeforecallback()==null||this.tabspanelBean.getSwitchbeforecallback().trim().equals("")?"null"
:this.tabspanelBean.getSwitchbeforecallback().trim());
resultBuf.append(")");
}else
{
resultBuf.append("shiftTabPanelItemSyn('");
resultBuf.append(containerConfigBean.getPageBean().getId()).append("','");
resultBuf.append(containerConfigBean.getId()).append("','");
resultBuf.append(((TabsPanelBean)containerConfigBean).getRefreshGuid(index)).append("','");
resultBuf.append(index).append("')");
}
return resultBuf.toString();
}
private String getTabItemTitle(String childid)
{
if(this.mChildren.containsKey(childid))
{
return this.mChildren.get(childid).getRealParenttitle();
}
IComponentConfigBean childBean=containerConfigBean.getMChildren().get(childid).getConfigBeanWithValidParentTitle();
if(childBean==null) return "";
String title=childBean.getParenttitle(rrequest);
if(title==null||title.trim().equals(""))
{
title=childBean.getTitle(rrequest);
}
return title==null?"":title.trim();
}
public AbsContainerConfigBean loadConfig(XmlElementBean eleContainer,AbsContainerConfigBean parent,String tagname)
{
TabsPanelBean tabsConfigBean=(TabsPanelBean)super.loadConfig(eleContainer,parent,tagname);
String asyn=eleContainer.attributeValue("asyn");
String titlewidth=eleContainer.attributeValue("titlewidth");
String titlestyle=eleContainer.attributeValue("titlestyle");
String switchbeforecallback=eleContainer.attributeValue("switchbeforecallback");
if(asyn!=null)
{
tabsConfigBean.setAsyn(!asyn.trim().toLowerCase().equals("false"));//因为默认是true,所以这里这样判断
}
if(titlewidth!=null) tabsConfigBean.setTitlewidth(titlewidth.trim());
if(titlestyle!=null) tabsConfigBean.setTitlestyle(titlestyle.trim());
String displaycount=eleContainer.attributeValue("displaycount");
if(displaycount!=null&&!displaycount.trim().equals(""))
{
try
{
tabsConfigBean.setDisplaycount(Integer.parseInt(displaycount.trim()));
}catch(NumberFormatException e)
{
log.warn("tab容器"+tabsConfigBean.getPath()+"的displaycount属性配置值不是合法数字",e);
}
}
if(switchbeforecallback!=null) tabsConfigBean.setSwitchbeforecallback(switchbeforecallback.trim());
return tabsConfigBean;
}
protected AbsContainerConfigBean createContainerConfigBean(AbsContainerConfigBean parentContainer,String tagname)
{
return new TabsPanelBean(parentContainer,tagname);
}
private class TabItemDisplayBean
{
private int index;
private String childid;
private boolean isDisabled;
public int getIndex()
{
return index;
}
public void setIndex(int index)
{
this.index=index;
}
public String getChildid()
{
return childid;
}
public void setChildid(String childid)
{
this.childid=childid;
}
public boolean isDisabled()
{
return isDisabled;
}
public void setDisabled(boolean isDisabled)
{
this.isDisabled=isDisabled;
}
}
protected String getComponentTypeName()
{
return "container.tabspanel";
}
}