UI工厂通过ButtonManager统一管理按钮的创建和状态。
package nc.ui.trade.button;
import java.util.*;
import nc.bs.logging.Logger;
import nc.ui.ml.NCLangRes;
import nc.ui.pub.ButtonObject;
import nc.ui.trade.base.IChildMenuController;
import nc.ui.trade.buffer.BillUIBuffer;
import nc.uif.pub.exception.UifRuntimeException;
import nc.vo.pub.*;
import nc.vo.pub.hotkey.HotkeyRegisterVO;
import nc.vo.trade.button.ButtonVO;
import nc.vo.trade.field.IBillField;
// Referenced classes of package nc.ui.trade.button:
// BusiBtnManager, ButtonVOFactory, IBillStatuJudger
public class ButtonManager
{
private ButtonObject buildButton(int intBtn)
{
ButtonVO btnVO = null;
Integer oIntBtn = Integer.valueOf(intBtn);
if(m_privateBtnHas.containsKey(oIntBtn))
btnVO = (ButtonVO)m_privateBtnHas.get(oIntBtn);
else
btnVO = ButtonVOFactory.getInstance().build(intBtn);
btnVO.setBtnCode(null);
ButtonObject bo = btnVO.buildButton();
if(btnVO.getChildAry() != null)
addChildButton(bo, btnVO.getChildAry());
if(intBtn == 33)
addNodeKeyButton(bo);
if(btnVO.getHotKey() != null)
{
getHotKey().put(HotkeyRegisterVO.getKeyStroke(btnVO.getHotKey(), btnVO.getModifiers()), bo);
ButtonObject btns[] = bo.getChildButtonGroup();
for(int i = 0; i < btns.length; i++)
{
ButtonObject btn = btns[i];
getHotKey().put(HotkeyRegisterVO.getKeyStroke(btn.getHotKey(), btn.getModifiers()), btn);
}
}
return bo;
}
public final ButtonObject getButton(int intBtn)
{
Integer IntBtn = Integer.valueOf(intBtn);
if(m_btnHas.containsKey(IntBtn))
return (ButtonObject)m_btnHas.get(IntBtn);
else
return null;
}
public final ButtonObject[] getButtonAry(int intBtnAry[])
{
if(intBtnAry == null)
return null;
List btnAry = new ArrayList();
for(int i = 0; i < intBtnAry.length; i++)
{
Integer IntButton = Integer.valueOf(intBtnAry[i]);
ButtonObject btn = (ButtonObject)m_btnHas.get(IntButton);
if(btn == null)
btn = buildButton(intBtnAry[i]);
if(btn != null)
{
btnAry.add(btn);
m_btnHas.put(Integer.valueOf(intBtnAry[i]), btn);
}
}
return (ButtonObject[])(ButtonObject[])btnAry.toArray(new ButtonObject[btnAry.size()]);
}
private void setButtonEnable(int intBtn, boolean enable)
{
ButtonObject bo = getButton(intBtn);
if(bo != null)
bo.setEnabled(enable);
}
public final void setPageButtonState(BillUIBuffer buffer)
throws Exception
{
setButtonEnable(21, buffer.hasPrev());
setButtonEnable(23, buffer.hasPrev());
setButtonEnable(22, buffer.hasNext());
setButtonEnable(24, buffer.hasNext());
}
public BusiBtnManager getBusiBtnManager()
{
if(busiBtnMgr == null)
busiBtnMgr = new BusiBtnManager();
return busiBtnMgr;
}
public ButtonManager(IBillField bField, Hashtable privateBtnHas, IChildMenuController childMenuCtl)
{
m_btnHas = new HashMap();
billstatujudger = new IBillStatuJudger() {
public int getBillStatus(CircularlyAccessibleValueObject dataVo)
{
if(dataVo == null)
return -1;
Integer intState = (Integer)dataVo.getAttributeValue(m_bField.getField_BillStatus());
if(intState == null)
throw new UifRuntimeException(NCLangRes.getInstance().getStrByID("uifactory", "UPPuifactory-000082"));
else
return intState.intValue();
}
final ButtonManager this$0;
{
this$0 = ButtonManager.this;
super();
}
}
;
childMenu = null;
hotKey = new Hashtable();
m_bField = null;
m_privateBtnHas = null;
busiBtnMgr = null;
m_bField = bField;
if(privateBtnHas == null)
m_privateBtnHas = new Hashtable();
else
m_privateBtnHas = privateBtnHas;
childMenu = childMenuCtl;
}
private void addChildButton(ButtonObject parent, int IntBtn[])
{
for(int i = 0; i < IntBtn.length; i++)
{
ButtonVO btnVO = null;
Integer BtnInteger = Integer.valueOf(IntBtn[i]);
if(m_privateBtnHas.containsKey(BtnInteger))
btnVO = (ButtonVO)m_privateBtnHas.get(BtnInteger);
else
btnVO = ButtonVOFactory.getInstance().build(BtnInteger.intValue());
if(btnVO != null)
{
btnVO.setBtnCode(null);
ButtonObject child = btnVO.buildButton();
m_btnHas.put(Integer.valueOf(btnVO.getBtnNo()), child);
parent.addChildButton(child);
}
}
}
private void addNodeKeyButton(ButtonObject parentBtn)
{
if(childMenu == null)
return;
parentBtn.setCheckboxGroup(true);
SuperVO child[] = childMenu.getMenuData();
if(child != null)
{
for(int i = 0; i < child.length; i++)
{
String strName = (String)child[i].getAttributeValue(childMenu.getShowFieldName());
String strPk = (String)child[i].getAttributeValue(childMenu.getIDFieldName());
if(strName != null && strPk != null)
{
ButtonObject childBtn = new ButtonObject(strName, strName, strName);
childBtn.setTag(strPk);
parentBtn.addChildButton(childBtn);
}
}
}
}
public int getBillStatus(CircularlyAccessibleValueObject dataVo)
throws Exception
{
return getBillstatujudger().getBillStatus(dataVo);
}
public final ButtonObject getButton(String btnKey)
{
if(m_btnHas.containsKey(btnKey))
return (ButtonObject)m_btnHas.get(btnKey);
else
return null;
}
public Hashtable getHotKey()
{
return hotKey;
}
public void setActionButtonVO(boolean isSaveAndCommit)
{
ButtonObject boAction = getButton(25);
if(boAction == null)
return;
getBusiBtnManager().initBusiButton(isSaveAndCommit);
Map map_Button = getBusiBtnManager().getBusiButton();
for(int i = 0; i < boAction.getChildButtonGroup().length; i++)
{
ButtonObject bo = boAction.getChildButtonGroup()[i];
if(map_Button.containsKey(bo.getTag()))
{
ButtonVO btnVO = (ButtonVO)map_Button.get(bo.getTag());
bo.setDisplayHotkey(btnVO.getDisplayHotKey());
bo.setHotKey(btnVO.getHotKey());
bo.setModifiers(btnVO.getModifiers());
bo.setData(btnVO);
} else
{
Logger.debug((new StringBuilder()).append("\u521D\u59CB\u4E1A\u52A1\u6309\u94AE").append(bo.getTag()).append("\u6709\u8BEF!!!!").toString());
}
m_btnHas.put(bo.getTag(), bo);
}
}
private void setBtnByExtendStatus(int intExtendStatus)
throws Exception
{
Iterator i$ = m_btnHas.values().iterator();
do
{
if(!i$.hasNext())
break;
ButtonObject bo = (ButtonObject)i$.next();
ButtonVO btnVO = (ButtonVO)bo.getData();
if(btnVO != null)
{
int intExtendStatusAry[] = btnVO.getExtendStatus();
if(intExtendStatusAry != null)
{
if(btnVO.getBtnCode() == null)
setButtonEnable(btnVO.getBtnNo(), false);
else
setBusiButtonEnable(btnVO.getBtnCode(), false);
int i = 0;
while(i < intExtendStatusAry.length)
{
if(btnVO.getBtnCode() == null)
{
if(intExtendStatusAry[i] == intExtendStatus || intExtendStatusAry[i] == 0)
setButtonEnable(btnVO.getBtnNo(), true);
} else
if(intExtendStatusAry[i] == intExtendStatus || intExtendStatusAry[i] == 0)
setBusiButtonEnable(btnVO.getBtnCode(), true);
i++;
}
}
}
} while(true);
}
private void setBtnByStatus(int billStatus, boolean isEditInGoing)
throws Exception
{
Iterator i$ = m_btnHas.values().iterator();
do
{
if(!i$.hasNext())
break;
ButtonObject bo = (ButtonObject)i$.next();
ButtonVO btnVO = (ButtonVO)bo.getData();
if(btnVO != null)
{
int intBusiStatusAry[] = btnVO.getBusinessStatus();
if(intBusiStatusAry != null)
{
if(btnVO.getBtnCode() == null)
setButtonEnable(btnVO.getBtnNo(), false);
else
setBusiButtonEnable(btnVO.getBtnCode(), false);
for(int i = 0; i < intBusiStatusAry.length; i++)
{
if(btnVO.getBtnCode() == null)
{
if(intBusiStatusAry[i] == billStatus || intBusiStatusAry[i] == 30)
setButtonEnable(btnVO.getBtnNo(), true);
continue;
}
if(intBusiStatusAry[i] == billStatus || intBusiStatusAry[i] == 30)
setBusiButtonEnable(btnVO.getBtnCode(), true);
}
}
if(billStatus == 2 && btnVO.getBtnNo() == 3)
if(isEditInGoing)
setButtonEnable(btnVO.getBtnNo(), true);
else
setButtonEnable(btnVO.getBtnNo(), false);
}
} while(true);
}
private void setBusiButtonEnable(String btnKey, boolean enable)
{
ButtonObject bo = getButton(btnKey);
if(bo != null)
bo.setEnabled(enable);
}
public final void setButtonByBillStatus(BillUIBuffer buffer, Boolean isEditInGoing)
throws Exception
{
if(buffer.getCurrentVO() != null)
{
int billStatus = getBillStatus(buffer.getCurrentVO().getParentVO());
boolean isEdit = false;
if(isEditInGoing != null)
isEdit = isEditInGoing.booleanValue();
setBtnByStatus(billStatus, isEdit);
}
}
public final void setButtonByextendStatus(int intExtendBillStatus)
throws Exception
{
if(intExtendBillStatus == -1)
{
return;
} else
{
setBtnByExtendStatus(intExtendBillStatus);
return;
}
}
public final void setButtonByOperate(int intOpType)
throws Exception
{
Iterator i$ = m_btnHas.values().iterator();
do
{
if(!i$.hasNext())
break;
ButtonObject bo = (ButtonObject)i$.next();
ButtonVO btnVO = (ButtonVO)bo.getData();
if(btnVO != null)
{
int intOpStatusAry[] = btnVO.getOperateStatus();
if(intOpStatusAry != null)
{
setButtonEnable(btnVO.getBtnNo(), false);
int i = 0;
while(i < intOpStatusAry.length)
{
if(intOpStatusAry[i] == intOpType || intOpStatusAry[i] == 7)
setButtonEnable(btnVO.getBtnNo(), true);
i++;
}
}
}
} while(true);
}
public void setBillstatujudger(IBillStatuJudger billstatujudger)
{
if(billstatujudger == null)
{
throw new IllegalArgumentException("billstatujudger cann't be null");
} else
{
this.billstatujudger = billstatujudger;
return;
}
}
private IBillStatuJudger getBillstatujudger()
{
return billstatujudger;
}
private Map m_btnHas;
private IBillStatuJudger billstatujudger;
private IChildMenuController childMenu;
private Hashtable hotKey;
private IBillField m_bField;
private Hashtable m_privateBtnHas;
BusiBtnManager busiBtnMgr;
}
UI工厂预先预置了许多按钮,如保存,新增,删除等。
IBillButton接口源码:
package nc.ui.trade.button;
public interface IBillButton
{
public static final int Save = 0;
public static final int Add = 1;
public static final int Edit = 3;
public static final int Del = 4;
public static final int Query = 5;
public static final int Print = 6;
public static final int Cancel = 7;
public static final int Refresh = 8;
public static final int Refbill = 9;
public static final int Line = 10;
public static final int AddLine = 11;
public static final int DelLine = 12;
public static final int CopyLine = 13;
public static final int PasteLine = 14;
public static final int InsLine = 15;
public static final int File = 16;
public static final int FileDel = 17;
public static final int FileWrite = 18;
public static final int FileRead = 19;
public static final int Brow = 20;
public static final int First = 21;
public static final int Next = 22;
public static final int Prev = 23;
public static final int Last = 24;
public static final int Action = 25;
public static final int Audit = 26;
public static final int CancelAudit = 27;
public static final int Commit = 28;
public static final int FREEZE = 37;
public static final int UNFREEZE = 38;
public static final int END = 39;
public static final int UNEND = 40;
public static final int CX = 45;
public static final int UnCX = 46;
public static final int Ass = 29;
public static final int Card = 30;
public static final int Return = 31;
public static final int Delete = 32;
public static final int NodeKey = 33;
public static final int ClearAll = 34;
public static final int SelAll = 35;
public static final int SelNone = 36;
public static final int Copy = 41;
public static final int PrintList = 43;
public static final int PrintBatch = 44;
public static final int DirectPrint = 50;
public static final int ImportBill = 51;
public static final int ExportBill = 52;
public static final int ApproveInfo = 53;
IBillButtonpublic static final int PasteLinetoTail = 54;
}