UI工厂按钮


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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值