// kate: space-indent on; indent-width 4; replace-tabs on; Ext.namespace('Ext.ux'); Ext.ux.LogViewerPanel = function( config ){ Ext.apply( this, config ); Ext.applyIf( this, { xtype: 'grid', title: gettext('Log messages'), colModel: new Ext.grid.ColumnModel([{ header: gettext('Timestamp'), dataIndex: 'timestamp', width: 100, renderer: function( value ){ return new Date(value*1000).format( "Y-m-d H:i:s" ); } }, { header: gettext('Log entry'), width: 500, dataIndex: 'txt' }]), bbar: [{ text: gettext('Filter') + ':' }, { xtype: 'textfield', name: 'filter', listeners: { render: function(c) { Ext.QuickTips.register({ target: c.getEl(), text: gettext('Enter a string to filter the logs by and press Enter. To display all log entries, empty this field.') }); }, specialkey: function( field, ev ){ if( ev.getKey() == ev.ENTER ){ field.ownerCt.ownerCt.store.baseParams.filter = field.getValue(); field.ownerCt.ownerCt.store.reload(); } } } }, '-', { iconCls: 'x-tbar-loading', tooltip: gettext('Refresh'), handler: function(){ this.ownerCt.ownerCt.store.reload(); } }], store: new Ext.data.DirectStore({ baseParams: {'server': this.server, 'start': 0, 'limit': 100, 'filter': ''}, directFn: Mumble.log, paramOrder: ['server', 'start', 'limit', 'filter'], root: 'data', fields: ['timestamp', 'txt'], autoLoad: true, remoteSort: false }), viewConfig: { forceFit: true } }); Ext.ux.LogViewerPanel.superclass.constructor.call( this ); } Ext.extend( Ext.ux.LogViewerPanel, Ext.grid.EditorGridPanel, { } ); Ext.reg( 'logViewerPanel', Ext.ux.LogViewerPanel );