Source: control/MessageBox.js

/*
 * redmicro all Copyright (c)
 */

/**
 * Created by seeker910 on 2014/8/10.
 */
Rsd.define('Rsd.control.MessageBox', {
    extend: 'Rsd.container.Dialog',
    requires: [
        'Rsd.form.Label',
        'Rsd.form.Button'
    ],
    xtype: 'message-box',
    width:500,
    height:160,
    title:'提示信息',
    closeBtn:false,
    layout:'border',
    style:{maxHeight:'90%',maxWidth:'80%'},
    buttons:[{btn:'确 定',fn:function(){}}],
    items:[
        {xtype:'container',  cls:'x-message-box', style:{overflow:'auto'}, region:'center', layout:{type:'vbox'}},
        {
            xtype:'container',
            header:null,
            cls:'x-message-box-line',
            layout:{type:'hbox',align:'center'},
            region:'bottom',
            width:'100%',
            height:60
        }
    ] ,
    /*
    * text |html
    * */
    messageType:'text',
    /**
     * 消息内容样式
     */
    messageStyle:null,
    /*
    * */
    message:null,
    /*
     * */
    constructor: function constructor(config) {
        config = config || {};
        this.apply(config);
        if(this.messageStyle)
        {
            Rsd.apply(this.items[0].style,this.messageStyle);
        }
       
    },
    /*
    * */
    onBeforeInit:function onBeforeInit()
    { 
        this.callParent();
        //追踪消息框弹出位置
        //this.printCallStack('msg box');
    },
    /*
    * */
    load:function load()
    {
        var me = this;
 
        setTimeout(function () {
            me.visible = false;
            me.setMessage();
            me.setButtons();
            me.visible = true;
        },100);

       
    },
    /*
     * */
    setMessage:function setMessage()
    {
        var me = this;
        if(me.message && me.message.length > 0){

            var _f = Rsd.isCreated(me.items[0]);
            if(_f)
            {
                me.items[0].removeAll();
            } 
            if(me.messageType=='text')
            {
                var _list = [];
                if(Rsd.isArray(me.message))
                {
                    _list = me.message;
                }
                else
                {
                    _list = me.message.split("\r\n");
                }


                for(var i in _list)
                {
                    if(_f)
                    {
                        me.items[0].add({xtype:'label',label:null,ctrlCls:'x-text',width:'100%',text:_list[i]});
                    }else {
                        me.items[0].items=me.items[0].items||[];
                        me.items[0].items.push({xtype:'label',label:null,ctrlCls:'x-text',width:'100%',text:_list[i]});
                    }

                    if(i>20) {
                        if (_f) {
                            me.items[0].add({
                                xtype: 'label',
                                ctrlCls: 'x-text',
                                width: '100%',
                                text: '......[更多信息请查看日志]'
                            });
                        } else {
                            me.items[0].items.push({
                                xtype: 'label',
                                ctrlCls: 'x-text',
                                width: '100%',
                                text: '......[更多信息请查看日志]'
                            });
                        }
                        break;
                    }
                }
                var _h = me.items[0].items.length * (me.header.height||45) + 90;//header margin_top margin_bottom bottom
                if(_h < 160)
                {
                    _h = 160;
                }

                me.height = _h;
            }else
            {
                if( me.items[0].body)
                {
                    var list = me.message.replace("\r\n","<br>").replace("\\r\\n","<br>").replace("\r","<br>").replace("\n","<br>").split("<br>");
                    var _h = list.length * (me.header.height||45) + 90; 
                    
                    var _w = 300;
                    var html = "";
                    for(var i in list)
                    { 
                        if(i<20) 
                        {
                            if((list[i].length * 20) > _w)
                            {
                                _w = list[i].length * 20 + 100;
                            }
                            html += list[i];
                            continue;
                        } 
                        html += "......";
                        break;
                    }
                  
                    me.items[0].body.element.innerHTML = html;
                    if(_h < 160)
                    {
                        _h = 160;
                    } 
                    if(_w > 1000)
                    {
                        _w = 1000;
                    }
                    me.height = _h;
                    me.width = _w;
                }

            }

        }

    },
    /*
     * */
    setButtons:function setButtons()
    {
        var me = this;
        var _f = Rsd.isCreated(this.items[1]);
        if(_f)
        {
            this.items[1].removeAll();

        }
        if(_f)
        {
            this.items[1].add({xtype: 'container', flex: 1});
        }else {
            this.items[1].items = this.items[1].items||[];
            this.items[1].items.push({xtype: 'container', flex: 1});
        }

        if(this.buttons && this.buttons.length > 0) {

            for (var i in  this.buttons) {

                var fn = function () {

                    var flag = Rsd.callFunction(me, me.buttons[this._index].fn);
                    if (flag == false) {
                        return;
                    }
                    me.close();

                };
                if (_f) 
                {
                    this.items[1].add({
                        xtype: 'button',
                        align: 'center',
                        _index: i,
                        margin: '2 5 0 5',
                        style: this.buttons[i].style||{},
                        width: this.buttons[i].width||70,
                        value: this.buttons[i].text || this.buttons[i].btn,
                        handler: fn
                    });
                }
                else 
                {
                    this.items[1].items.push({
                        xtype: 'button',
                        align: 'center',
                        _index: i,
                        margin: '2 5 0 5',
                        style: this.buttons[i].style||{},
                        width: this.buttons[i].width||70,
                        value: this.buttons[i].text || this.buttons[i].btn,
                        handler: fn
                    });
                }

            }
            if (_f) {
                this.items[1].add({xtype: 'container', flex: 1});
            } else {
                this.items[1].items.push({xtype: 'container', flex: 1});
            }

            Rsd.clearHotKey('Enter');
            Rsd.registerHotKey('Enter', me.buttons[0].fn, me);
        }

    }

});