diff options
| author | Andreas Brachold <vdr07@deltab.de> | 2009-12-19 13:50:17 +0000 |
|---|---|---|
| committer | Andreas Brachold <vdr07@deltab.de> | 2009-12-19 13:50:17 +0000 |
| commit | ac6040823f365ef7bb6d455d070aaecec8dc744a (patch) | |
| tree | c46d3e883752f58773b7a12cbc226b6842237b02 | |
| parent | 65ababad8a7ef911f29a29cfcac775ad26e68445 (diff) | |
| download | xxv-ac6040823f365ef7bb6d455d070aaecec8dc744a.tar.gz xxv-ac6040823f365ef7bb6d455d070aaecec8dc744a.tar.bz2 | |
* CHANNELS: allow query a compact list ( by cmd=clist&compact=1 )
* STATUS: Refactoring output (network/filesys/memory/vitals)
* STREAM: Fix SMB streaming (div by zero)
* html/xstyle: footer updated
* xstyle: css fix correct z-index on schema for timemarker
* jason: use one loading mask for many tasks
* jason: timer self updating if new timer created
* jason: stream allow external video player
* jason: use compact channel list (reduce memory footprint)
* update translations
28 files changed, 502 insertions, 444 deletions
diff --git a/skins/jason/channels.js b/skins/jason/channels.js index 3f2beb6..507a1f4 100644 --- a/skins/jason/channels.js +++ b/skins/jason/channels.js @@ -14,25 +14,13 @@ Ext.xxv.storeChannels = function() { fields: [
{name: 'id', type: 'string'}, {name: 'name', type: 'string'}, - {name: 'frequency', type: 'int'}, - {name: 'parameter', type: 'string'}, - {name: 'source', type: 'string'}, - {name: 'srate', type: 'string'}, - {name: 'vpid', type: 'string'}, - {name: 'apid', type: 'string'}, - {name: 'tpid', type: 'string'}, - {name: 'ca', type: 'string'}, - {name: 'sid', type: 'string'}, - {name: 'nid', type: 'string'}, - {name: 'tid', type: 'string'}, - {name: 'rid', type: 'string'}, {name: 'group', type: 'string'}, {name: 'position', type: 'int'}, {name: 'grpname', type: 'string'}
] }), proxy : new Ext.data.HttpProxy({ - url: XXV.help.cmdAJAX('cl') + url: XXV.help.cmdAJAX('cl',{compact:1}) ,method: 'GET' }) // sortInfo:{field:'position', direction:'ASC'} @@ -51,10 +39,6 @@ Ext.xxv.ChannelsCombo = function(config){ Ext.xxv.ChannelsCombo.prototype ={
init : function(grid){
-/* this.grid = grid;
- this.grid.on('render', function(){
- var view = this.grid.getView();
- }, this);*/
}, renderer: function(value, p, record) { diff --git a/skins/jason/channelspanel.js b/skins/jason/channelspanel.js index a827b39..4c8c881 100644 --- a/skins/jason/channelspanel.js +++ b/skins/jason/channelspanel.js @@ -377,11 +377,7 @@ Ext.extend(Ext.xxv.channelsPanel, Ext.tree.TreePanel, { ,title: record.data.name }; - var viewer = Ext.getCmp('main-tabs');
- if(!viewer.streamwin){
- viewer.streamwin = new Ext.xxv.StreamWindow(item);
- } else {
- viewer.streamwin.show(item); - } + var viewer = Ext.getCmp('main-tabs'); + viewer.streamwin = Ext.xxv.createStream(item,viewer.streamwin);
}
}); diff --git a/skins/jason/index.tmpl b/skins/jason/index.tmpl index 0eb6fa0..add803d 100644 --- a/skins/jason/index.tmpl +++ b/skins/jason/index.tmpl @@ -19,6 +19,7 @@ ,monitorHeight : <?% getModule('GRAB').ysize %?> ,streamWidth : <?% getModule('STREAM').width %?> ,streamHeight : <?% getModule('STREAM').height %?> + ,streamWidget : "<?% getModule('STREAM').widget %?>" ,pageSize : 100 }; </script> @@ -74,8 +75,10 @@ <?% # Template used for EPG Items %?> <div id="preview-tpl" style="display:none;"> <div class="preview-header"> - <h3 class="preview-title">{content:this.getTitle}</h3><div class="preview-channel">{content:this.getChannel}</div> - <h4 class="preview-shorttitle">{content:this.getSubtitle}</h4><div class="preview-date">{day:date} {start} - {stop}</div> + <div class="preview-topic"> + <h3 class="preview-title">{content:this.getTitle}</h3><h4 class="preview-shorttitle">{content:this.getSubtitle}</h4> + </div> + <div class="preview-channel">{content:this.getChannel}</div><div class="preview-date">{day:date} {start} - {stop}</div> </div> <div class="preview-body">{content:this.getBody}</div> </div> diff --git a/skins/jason/jason.css b/skins/jason/jason.css index 33705bd..2925f56 100644 --- a/skins/jason/jason.css +++ b/skins/jason/jason.css @@ -76,6 +76,66 @@ margin:3px; display:none;
}
+/* +.xxv-icon { +width:16px; +height:16px; +background-image:url(pic/xxv-icon.png) !important; +background-repeat:no-repeat; +} + +.xxv-icon-xxv { background-position:0 0;} +.xxv-icon-record { background-position:-16px 0;} +.xxv-icon-backward { background-position:-32px 0;} +.xxv-icon-forward { background-position:-48px 0;} +.xxv-icon-pause { background-position:-64px 0;} +.xxv-icon-playback { background-position:-72px 0;} +.xxv-icon-stream { background-position:-88px 0;} + +.xxv-icon-remote-blue{ background-position:0 -16px;} +.xxv-icon-remote-green{ background-position:-16px -16px;} +.xxv-icon-remote-red{ background-position:-32px -16px;} +.xxv-icon-remote-yellow{ background-position:-48px -16px;} +.xxv-icon-remote-play { background-position:-64px -16px;} +.xxv-icon-remote{ background-position:-72px -16px;} +.xxv-icon-channel{ background-position:-88px -16px;} + +.xxv-icon-preview { background-position:0 -32px;} +.xxv-icon-preview-bottom { background-position:-16px -32px;} +.xxv-icon-preview-right { background-position:-32px -32px;} +.xxv-icon-remote-menu { background-position:-48px -32px;} +.xxv-icon-monitor { background-position:-64px -32px;} +.xxv-icon-recordings { background-position:-72px -32px;} +.xxv-icon-remote-back { background-position:-88px -32px;} + +.xxv-icon-movetimer { background-position:0 -32px;} +.xxv-icon-chronicle { background-position:-16px -32px;} +.xxv-icon-edit { background-position:-32px -32px;} +.xxv-icon-setup { background-position:-48px -32px;} +.xxv-icon-upgrade { background-position:-64px -32px;} +.xxv-icon-users { background-position:-72px -32px;} +.xxv-icon-vdr { background-position:-88px -32px;} +.xxv-icon-logout { background-position:-104px -32px;} + +.xxv-icon-autotimer { background-position:0 -48px;} +.xxv-icon-find { background-position:-16px -48px;} +.xxv-icon-timer { background-position:-32px -48px;} +.xxv-icon-timer-toggle { background-position:-48px -48px;} +.xxv-icon-new { background-position:-64px -48px;} +.xxv-icon-unviewed { background-position:-72px -48px;} +.xxv-icon-cut { background-position:-88px -48px;} +.xxv-icon-recover { background-position:-104px -48px;} +.xxv-icon-delete { background-position:-120px -48px;} + +.xxv-icon-playing-music { background-position:0 -64px;} +.xxv-icon-music { background-position:-16px -64px;} +.xxv-icon-remote-loud { background-position:-32px -64px;} +.xxv-icon-remote-quiet { background-position:-48px -64px;} +.xxv-icon-remote-up { background-position:-64px -64px;} +.xxv-icon-remote-down { background-position:-72px -64px;} +.xxv-icon-remote-left { background-position:-88px -64px;} +.xxv-icon-remote-right { background-position:-104px -64px;} +*/ .refresh-icon { background-image:url(pic/refresh.png) !important; } .autotimer-icon { background-image:url(pic/autotimer.png) !important; } @@ -183,6 +243,13 @@ list-style-type:disc !important; margin-left:18px;
}
+.preview .x-panel-body .preview-topic {
+overflow:hidden; +clear:left; +white-space:nowrap; +height:1.2em;
+} + .preview .x-panel-body h3.preview-title {
text-align:left; font-weight:bold;
@@ -197,8 +264,7 @@ text-align:left; font-weight:bold;
color:#555;
font-size:1.0em; -clear:left; -float:left;
+/*clear:left;*/ } .preview .x-panel-body div.preview-date {
@@ -212,9 +278,9 @@ width:100%; .preview .x-panel-body div.preview-channel {
font-weight:normal;
color:#555;
-text-align:right;
+text-align:left;
font-size:1.0em; -width:100%; +float:left;
} .preview .x-panel-body {
@@ -487,3 +553,9 @@ object#audio-player { display:inline; } background:repeat-x bottom; background-image:url(extjs/resources/images/default/grid/invalid_line.gif); } + +.coverimage { + text-align:right; + height:200px; + width:200px; +} diff --git a/skins/jason/main.js b/skins/jason/main.js index f111984..10551e8 100644 --- a/skins/jason/main.js +++ b/skins/jason/main.js @@ -41,11 +41,11 @@ Ext.onReady(function(){ if(!subtitle) { var Woerter = all.title.split("~"); if(Woerter.length > 1) { - return Woerter.pop(); + return ' - ' + Woerter.pop(); } return ' '; } - return subtitle; + return ' - ' + subtitle; } ,getChannel : function(v, all){ var channel = v || all.channel; diff --git a/skins/jason/music.js b/skins/jason/music.js index bacb475..ebc211f 100644 --- a/skins/jason/music.js +++ b/skins/jason/music.js @@ -109,9 +109,48 @@ Ext.xxv.musicGrid = function(viewer) { singleSelect:false
})
,view: new Ext.grid.GroupingView({
- enableGroupingMenu:false, - showGroupName: false + enableGroupingMenu:false + ,showGroupName: false + //,groupTextTpl: '{text} <img class="coverimage" src="?cmd=mi&data={[values.rs[0].data["id"]]}" />' }) + /*,listeners: { + mouseover: function(e, t) { + var rowIndex = this.getView().findRowIndex(t); + if(rowIndex === false)return; + var colIndex = this.getView().findCellIndex(t); + if(colIndex === false)return; + + var row = this.getStore().getAt(rowIndex) + var id = row.data.id; + if(this.CoverTransaction) + Ext.Ajax.abort(this.CoverTransaction); + this.DetailsTransaction = Ext.Ajax.request({ + scope: this + ,method: 'HEAD' + ,url: XXV.help.cmdHTML('mi',{data:row.data.id}) + ,timeout: 15000 + ,success: this.onCoverSuccess + ,failure: this.onCoverFailure + ,params:{ data: row.data.id } + }); + if(this.CoverTT) { + this.CoverTT.destroy(); + delete this.CoverTT; + } + this.CoverTT = new Ext.ToolTip({ + target: e.target, + title: 'Cover', + autoHide: false, + closable: true, + showDelay:1000, + hideDelay:0, + autoHeight:true, + hidden:true, + width:210, + html: '<img class="coverimage" src="?cmd=mi&data='+row.data.id +'" />', + }); + } + }*/ ,tbar:new Ext.PagingToolbar({ pageSize: this.store.autoLoad.params.limit ,store: this.store @@ -301,6 +340,14 @@ Ext.extend(Ext.xxv.musicGrid, Ext.grid.GridPanel, { // Ext.grid.EditorGridPanel } //this.loadMask.hide(); } + /******************************************************************************/ + ,onCoverSuccess : function( response,options ) + { + this.CoverTT.show(); + } + ,onCoverFailure : function( response,options ) + { + } }); function createMusicView(viewer,id) { diff --git a/skins/jason/now.js b/skins/jason/now.js index fd21ccf..b56ef59 100644 --- a/skins/jason/now.js +++ b/skins/jason/now.js @@ -45,8 +45,6 @@ Ext.xxv.NowGrid = function(viewer) { this.viewer = viewer;
this.preview = new Ext.xxv.NowPreview(viewer); - //this.timerstore = new Ext.xxv.timerStore(); - // create the data store this.store = new Ext.xxv.NowStore(); this.store.setDefaultSort('rang', "ASC");
@@ -117,7 +115,7 @@ Ext.xxv.NowGrid = function(viewer) { Ext.xxv.NowGrid.superclass.constructor.call(this, {
region: 'center'
,id: 'now-grid'
- ,loadMask: true + ,loadMask: false ,autoExpandColumn:'expand' ,cm: cm
,sm: new Ext.grid.RowSelectionModel({
@@ -146,10 +144,6 @@ Ext.xxv.NowGrid = function(viewer) { ,'loadexception' : this.onLoadException
,scope:this
}); - //this.timerstore.on({
- // 'loadexception' : this.onLoadException
- // ,scope:this
- //}); this.on('rowcontextmenu', this.onContextClick, this); this.getSelectionModel().on('rowselect', this.preview.select, this.preview, {buffer:50}); @@ -329,7 +323,7 @@ Ext.extend(Ext.xxv.NowGrid, Ext.grid.GridPanel, { /******************************************************************************/ ,onRecordSuccess : function( response,options ) { - this.loadMask.hide(); + this.viewer.loadMask.hide(); var json = response.responseText;
var o = eval("("+json+")");
if(!o || !o.data || typeof(o.data) != 'string') {
@@ -337,21 +331,21 @@ Ext.extend(Ext.xxv.NowGrid, Ext.grid.GridPanel, { } if(o.success) { new Ext.xxv.MessageBox().msgSuccess(this.szRecordSuccess, o.data); - //this.timerstore.reload(); - }else { + this.updateTimer(); + } else { new Ext.xxv.MessageBox().msgFailure(this.szRecordFailure, o.data); } } ,onRecordFailure : function( response,options ) { - this.loadMask.hide(); + this.viewer.loadMask.hide(); new Ext.xxv.MessageBox().msgFailure(this.szRecordFailure, response.statusText); } ,Record : function(record) { this.RecordID(record.data.id); } ,RecordID : function(id) { - this.loadMask.show(); + this.viewer.loadMask.show(); Ext.Ajax.request({ scope: this ,url: XXV.help.cmdAJAX('tn',{ data: id, '__fast':'1' }) @@ -359,6 +353,11 @@ Ext.extend(Ext.xxv.NowGrid, Ext.grid.GridPanel, { ,failure: this.onRecordFailure }); } + ,updateTimer : function() { + if(this.viewer.gridTimer) { + this.viewer.gridTimer.dataDirty = true; + } + } ,EditTimer : function(record,store) { var item; @@ -381,12 +380,6 @@ Ext.extend(Ext.xxv.NowGrid, Ext.grid.GridPanel, { }
this.viewer.formwin = new Ext.xxv.Question(item,store); } - //,TimerPresent : function(eventid) { - // var records = this.timerstore.query('eventid',eventid,false,false); - // if(!records || records.getCount() <= 0) - // return 0; - // return records.get(0); - //}
,formatTitle: function(value, p, record) { var style = ""; diff --git a/skins/jason/program.js b/skins/jason/program.js index 6f8f442..294c009 100644 --- a/skins/jason/program.js +++ b/skins/jason/program.js @@ -85,7 +85,7 @@ Ext.xxv.programGrid = function(viewer, record) { Ext.xxv.programGrid.superclass.constructor.call(this, {
region: 'center'
,id: 'program-grid'
- ,loadMask: true + ,loadMask: false ,autoExpandColumn:'expand' ,cm: cm
,sm: new Ext.grid.RowSelectionModel({
diff --git a/skins/jason/recordings.js b/skins/jason/recordings.js index eb1daa3..7d80a9b 100644 --- a/skins/jason/recordings.js +++ b/skins/jason/recordings.js @@ -128,21 +128,33 @@ Ext.extend(Ext.xxv.RecHeader, Ext.Component, { this.tpl = new Ext.Template( '<div class="preview-header">', - '<h3 class="preview-title">{title}</h3>', - '<div class="preview-channel">', - '<tpl if="channel != 0">', - '<b>{channel}</b> - ', - '</tpl>', - '{period}', - '<tpl if="cutlength != 0">', - ' ({cutlength})', - '</tpl>', + '<div class="preview-topic">', + '<h3 class="preview-title">{title}</h3>', + '<h4 class="preview-shorttitle">{subtitle:this.formatSubtitle}</h4>', + '</div>', + '{channel:this.formatChannel}', + '<div class="preview-date">{day:date} {start} - {stop} {period}{cutlength:this.formatCutlength}', '</div>', - '<h4 class="preview-shorttitle">{subtitle} </h4>', - '<div class="preview-date">{day:date} {start} - {stop}</div>' - ,'</div>' + '</div>' + ,{ + compiled: true + ,formatSubtitle : function(t) { + if(t && t != '') + return ' - ' + t; + return ' '; + } + ,formatChannel : function(t) { + if(t && t != '') + return '<div class="preview-channel"><b>' + t + '</b> </div>'; + return ''; + } + ,formatCutlength : function(t) { + if(t && t != '') + return ' (' + t + ')'; + return ''; + } + } ); - this.tpl.compile();
},
setvalue : function(data, lookupdata){ @@ -811,7 +823,8 @@ Ext.extend(Ext.xxv.recordingsDataView, Ext.DataView, { /******************************************************************************/ onCutSuccess : function( response,options ) { - this.el.unmask(); + this.viewer.loadMask.hide(); + var o = eval("("+response.responseText+")");
if(o && o.data && typeof(o.data) == 'string' @@ -830,7 +843,7 @@ Ext.extend(Ext.xxv.recordingsDataView, Ext.DataView, { onCutFailure : function( response,options ) { - this.el.unmask(); + this.viewer.loadMask.hide(); new Ext.xxv.MessageBox().msgFailure(this.szCutFailure, response.statusText); }, @@ -859,7 +872,7 @@ Ext.extend(Ext.xxv.recordingsDataView, Ext.DataView, { } } if(toCut.length) { - this.el.mask(Ext.LoadMask.prototype.msg, 'x-mask-loading'); + this.viewer.loadMask.show(); Ext.Ajax.request({ scope: this ,url: XXV.help.cmdAJAX('rcu') @@ -873,7 +886,8 @@ Ext.extend(Ext.xxv.recordingsDataView, Ext.DataView, { /******************************************************************************/ onDeleteSuccess : function( response,options ) { - this.el.unmask(); + this.viewer.loadMask.hide(); + var o = eval("("+response.responseText+")");
if(o && o.data && typeof(o.data) == 'string' @@ -917,7 +931,7 @@ Ext.extend(Ext.xxv.recordingsDataView, Ext.DataView, { onDeleteFailure : function( response,options ) { - this.el.unmask(); + this.viewer.loadMask.hide(); new Ext.xxv.MessageBox().msgFailure(this.szDeleteFailure, response.statusText); }, @@ -945,7 +959,7 @@ Ext.extend(Ext.xxv.recordingsDataView, Ext.DataView, { } } if(todelete.length) { - this.el.mask(Ext.LoadMask.prototype.msg, 'x-mask-loading'); + this.viewer.loadMask.show(); Ext.Ajax.request({ scope: this ,url: XXV.help.cmdAJAX('rr') @@ -993,12 +1007,7 @@ Ext.extend(Ext.xxv.recordingsDataView, Ext.DataView, { url : XXV.help.cmdHTML('pre',{data:record.data.id,'__player':'1','__start':begin}) ,title: record.data.fulltitle }; - - if(!this.viewer.streamwin){
- this.viewer.streamwin = new Ext.xxv.StreamWindow(item);
- } else {
- this.viewer.streamwin.show(item); - } + this.viewer.streamwin = Ext.xxv.createStream(item,this.viewer.streamwin); } /******************************************************************************/ ,EditItem : function( record ) { diff --git a/skins/jason/search.js b/skins/jason/search.js index c17bc91..648a972 100644 --- a/skins/jason/search.js +++ b/skins/jason/search.js @@ -78,7 +78,7 @@ Ext.xxv.searchGrid = function(viewer, lookup) { Ext.xxv.searchGrid.superclass.constructor.call(this, {
region: 'center',
id: 'search-grid',
- loadMask: true,
+ loadMask: false,
sm: new Ext.grid.RowSelectionModel({
singleSelect:false
}),
diff --git a/skins/jason/stream.js b/skins/jason/stream.js index c973d55..5eba5bb 100644 --- a/skins/jason/stream.js +++ b/skins/jason/stream.js @@ -7,7 +7,7 @@ * $Id$ */
-Ext.xxv.StreamWindow = function(item) {
+Ext.xxv.StreamWindow = function(item,width,height) {
var tpl = new Ext.XTemplate( '<object id="player_obj" width="{width}" height="{height}"', @@ -30,17 +30,6 @@ Ext.xxv.StreamWindow = function(item) { ); - var width = configuration.streamWidth; - var height = configuration.streamHeight; - if(Ext.state.Manager.getProvider()) { - var streamwin = Ext.state.Manager.get('stream-win'); - if(streamwin && streamwin.width && streamwin.width >= 160 && streamwin.width <= 4096) { - width = streamwin.width; - } - if(streamwin && streamwin.height && streamwin.height >= 120 && streamwin.height <= 2048) { - height = streamwin.height; - } - } var marginHeight = 33; var marginWidth = 16; var t = this.szTitle; @@ -128,3 +117,28 @@ Ext.extend(Ext.xxv.StreamWindow, Ext.Window, { Ext.xxv.StreamWindow.superclass.show.apply(this, arguments);
}
}); + + +Ext.xxv.createStream = function(item,streamwin) { + var width = configuration.streamWidth; + var height = configuration.streamHeight; + if(Ext.state.Manager.getProvider()) { + var streamwin = Ext.state.Manager.get('stream-win'); + if(streamwin && streamwin.width && streamwin.width >= 160 && streamwin.width <= 4096) { + width = streamwin.width; + } + if(streamwin && streamwin.height && streamwin.height >= 120 && streamwin.height <= 2048) { + height = streamwin.height; + } + } + if(configuration.streamWidget + && configuration.streamWidget == 'external') { + window.open(item.url, '_blank', "width=" + width + ",height="+ height); + return false; + } + if(!streamwin){
+ return new Ext.xxv.StreamWindow(item,width,height);
+ } else {
+ streamwin.show(item); + } +}; diff --git a/skins/jason/tabpanel.js b/skins/jason/tabpanel.js index 461dee3..a15efe6 100644 --- a/skins/jason/tabpanel.js +++ b/skins/jason/tabpanel.js @@ -20,15 +20,21 @@ Ext.xxv.tabPanel = function(){ ,resizeTabs:true
,tabWidth:150
,minTabWidth: 100
- ,enableTabScroll: true
+ ,enableTabScroll: true + ,loadMask: null + //,defaults: {hideMode: 'offsets'} ,plugins: [ new Ext.ux.TabCloseMenu() ]
,items: [ tab ]
});
-
+ this.on('render', this.initPanel, this);
};
Ext.extend(Ext.xxv.tabPanel, Ext.TabPanel, {
-
+ + initPanel : function(){
+ if(!this.loadMask) + this.loadMask = new Ext.LoadMask(this.id, {msg: Ext.LoadMask.prototype.msg, msgCls:'x-mask-loading'}); + },
initPreview : function(){
XXV.BottomPreview = false;
XXV.RightPreview = true; diff --git a/skins/jason/teletext.js b/skins/jason/teletext.js index dcdcdff..13dfb01 100644 --- a/skins/jason/teletext.js +++ b/skins/jason/teletext.js @@ -95,16 +95,14 @@ Ext.extend(Ext.xxv.TeleTextView, Ext.DataView, { ,szLoadException : "Couldn't get teletext pages!\r\n{0}" ,onLoadException : function( scope, o, arg, e) { - this.loadMask.hide(); + this.viewer.loadMask.hide(); new Ext.xxv.MessageBox().msgFailure(this.szLoadException, e.message); var tb = this.ownerCt.getTopToolbar(); tb.get('teletext-refresh').enable(); } ,onBeforeLoad : function( scope, params ) { - if(!this.loadMask) - this.loadMask = new Ext.LoadMask(this.viewer.id, {msg: Ext.LoadMask.prototype.msg, msgCls:'x-mask-loading'}); if(this.filter.getValue()) - this.loadMask.show(); + this.viewer.loadMask.show(); if(this.DetailsTransaction) Ext.Ajax.abort(this.DetailsTransaction); @@ -151,7 +149,7 @@ Ext.extend(Ext.xxv.TeleTextView, Ext.DataView, { tb.get('teletext-next').setDisabled(data.next == 0); //tb.get('teletext-last').setDisabled(true); tb.get('teletext-refresh').enable(); - this.loadMask.hide(); + this.viewer.loadMask.hide(); } ,doClick : function(){
var selNode = this.getSelectedNodes();
diff --git a/skins/jason/timers.js b/skins/jason/timers.js index d02926a..b088742 100644 --- a/skins/jason/timers.js +++ b/skins/jason/timers.js @@ -154,7 +154,7 @@ Ext.xxv.timerGrid = function(viewer) { Ext.xxv.timerGrid.superclass.constructor.call(this, {
region: 'center'
,id: 'timer-view-grid'
- ,loadMask: true + ,loadMask: false ,plugins:[this.activeColumn,this.vpsColumn,this.ChannelsCombo]
,clicksToEdit:1 ,autoExpandColumn:'expand' @@ -220,18 +220,23 @@ Ext.extend(Ext.xxv.timerGrid, Ext.grid.GridPanel, { // Ext.grid.EditorGridPanel ,szToggleFailure : "Couldn't toggle timer!\r\n{0}" ,stateful: true - + ,dataDirty: false ,onLoadException : function( scope, o, arg, e) { + this.dataDirty = false; new Ext.xxv.MessageBox().msgFailure(this.szLoadException, e.message); } ,onBeforeLoad : function( store, opt ) { this.preview.clear(); } ,onLoad : function( store, records, opt ) { + this.dataDirty = false; this.getSelectionModel().selectFirstRow(); this.ownerCt.SetPanelTitle(this.szTitle); } - + ,refreshPanel : function(panel){ + if(this.dataDirty) + this.store.reload(); + } ,onContextClick : function(grid, index, e){
if(!this.menu){ // create context menu on first right click
this.menu = new Ext.menu.Menu({
@@ -333,7 +338,7 @@ Ext.extend(Ext.xxv.timerGrid, Ext.grid.GridPanel, { // Ext.grid.EditorGridPanel /******************************************************************************/ ,onToggleSuccess : function( response,options ) { - this.loadMask.hide(); + this.viewer.loadMask.hide(); var o = eval("("+response.responseText+")");
@@ -372,13 +377,13 @@ Ext.extend(Ext.xxv.timerGrid, Ext.grid.GridPanel, { // Ext.grid.EditorGridPanel ,onToggleFailure : function( response,options ) { - this.loadMask.hide(); + this.viewer.loadMask.hide(); new Ext.xxv.MessageBox().msgFailure(this.szToggleFailure, response.statusText); } ,ToggleItem : function( record ) { this.stopEditing();
- this.loadMask.show(); + this.viewer.loadMask.show(); var gsm = this.getSelectionModel(); var sel = gsm.getSelections() @@ -404,7 +409,7 @@ Ext.extend(Ext.xxv.timerGrid, Ext.grid.GridPanel, { // Ext.grid.EditorGridPanel /******************************************************************************/ ,onDeleteSuccess : function( response,options ) { - this.loadMask.hide(); + this.viewer.loadMask.hide(); var o = eval("("+response.responseText+")");
@@ -437,13 +442,13 @@ Ext.extend(Ext.xxv.timerGrid, Ext.grid.GridPanel, { // Ext.grid.EditorGridPanel ,onDeleteFailure : function( response,options ) { - this.loadMask.hide(); + this.viewer.loadMask.hide(); new Ext.xxv.MessageBox().msgFailure(this.szDeleteFailure, response.statusText); } ,DeleteItem : function( record ) { this.stopEditing();
- this.loadMask.show(); + this.viewer.loadMask.show(); var gsm = this.getSelectionModel(); var sel = gsm.getSelections() @@ -606,7 +611,11 @@ function createTimerView(viewer,id) { hidden:XXV.RightPreview
} ]
- + ,listeners: { + activate: function(p){ + viewer.gridTimer.refreshPanel(p); + } + } });
viewer.add(tab); diff --git a/skins/jason/vtxgfx.css b/skins/jason/vtxgfx.css index f4e7a41..211a95f 100644 --- a/skins/jason/vtxgfx.css +++ b/skins/jason/vtxgfx.css @@ -49,6 +49,11 @@ color:#0F0; color:#FF0; } +.vtx-mark{ + background:repeat-x bottom; + background-image:url(extjs/resources/images/default/grid/invalid_line.gif); +} + .vtgfx { width:12px; height:18px; @@ -56,11 +61,6 @@ background-image:url(pic/vtxgfx.gif); background-repeat:no-repeat; } -.vtx-mark{ - background:repeat-x bottom; - background-image:url(extjs/resources/images/default/grid/invalid_line.gif); -} - .white20{ background-position:0 0;} .white21{ background-position:0 -18px;} .white22{ background-position:0 -36px;} diff --git a/skins/stone/memory.tmpl b/skins/stone/memory.tmpl index 042dfb0..129f7ff 100644 --- a/skins/stone/memory.tmpl +++ b/skins/stone/memory.tmpl @@ -9,43 +9,42 @@ <?% USE date; statusfiles = []; + fields = data.shift; FILTER null; name = 'memory_stat'; swapdata = []; activedata = []; cacheddata = []; - buffersdata = []; + inactivedata = []; timestamps = []; - FOREACH item = param.stack; - t = date.format(item.timestamp, '%H:%M'); + FOREACH row = data; + t = date.format(row.6, '%H:%M'); timestamps.push(t); - swapdata.push(item.memory.SwapTotal); - activedata.push(item.memory.Active); - cacheddata.push(item.memory.Cached); - buffersdata.push(item.memory.Buffers); + activedata.push(row.2 / (1024)); + inactivedata.push(row.3 / (1024)); + cacheddata.push(row.4 / (1024)); + swapdata.push(row.5 / (1024)); END; - # Maximum wert - max = param.stack.last.memory.MemTotal; - # Data ... d = [ timestamps , - swapdata , - cacheddata , activedata , - buffersdata , + inactivedata + cacheddata , + swapdata ]; USE my_graph = GD.Graph.lines(375,375); # Xsteps - steps = param.stack.size div 5; + steps = data.size div 5; label = gettext('Memory usage since'); - label_y = gettext('Memory usage in bytes') + label_y = gettext('Memory usage in MB') label = "${label} ${d.first.first} (${label_y})"; + my_graph.set( x_label_skip => steps, x_long_ticks => 1, @@ -54,9 +53,9 @@ line_width => 2, box_axis => 1, - boxclr => '#FFFFCC', + boxclr => '#FFFFFF', fgclr => '#BBBBBB' - legend_placement => 'RD', + legend_placement => '>BO', legend_spacing => 5, ); my_graph.set_title_font(param.font,10); @@ -64,28 +63,29 @@ my_graph.set_x_label_font(param.font,10); my_graph.set_x_axis_font(param.font,6); my_graph.set_y_axis_font(param.font,6); - my_graph.set_legend( 'Swap', 'Active', 'Cached', 'Buffers'); + my_graph.set_legend( fields.2, fields.3, fields.4, fields.5); file = writefile("status_${name}.gif", my_graph.plot(d).gif ); statusfiles.push([ label , file ]); - END; # ------------------- Piegraph für Speicher + row = data.last; FILTER null; name = 'memory_now'; - MemTotal = data.MemTotal div 1024; - Active = data.Active div 1024; - Cached = data.Cached div 1024; - Inactive = data.Inactive div 1024; - MemFree = data.MemFree div 1024; - Buffers = data.Buffers div 1024; + MemTotal = row.0 div 1024; + MemFree = row.1 div 1024; + Active = row.2 div 1024; + Cached = row.4 div 1024; + Inactive = row.3 div 1024; + Swapped = row.5 div 1024; d2 = [ - ["Active ${Active} MB","Cached ${Cached} MB","Inactive ${Inactive} MB","MemFree ${MemFree} MB","Buffers ${Buffers} MB"], - [ data.Active, data.Cached, data.Inactive, data.MemFree, data.Buffers] + [ "${fields.2} ${Active} MB","${fields.3} ${Inactive} MB","${fields.4} ${Cached} MB","${fields.5} ${Swapped} MB","${fields.1} ${MemFree} MB"], + [ row.2, row.3, row.4, row.5, row.1] ]; + USE my_graph = GD.Graph.pie(375, 375); - label = gettext('Total Memory'); + label = fields.0; label = "${label} ${MemTotal} MB"; my_graph.set( axislabelclr => 'black', diff --git a/skins/stone/network.tmpl b/skins/stone/network.tmpl index d9f781e..263e0be 100644 --- a/skins/stone/network.tmpl +++ b/skins/stone/network.tmpl @@ -10,10 +10,11 @@ statusfiles = []; FILTER null; - name = 'network_stat'; + fields = data.shift; + timestamps = []; - FOREACH entry = param.stack.first.network; - iname = entry.first.split(':').first; + FOREACH row = data; + iname = row.0.split(':').first; rxbytes.${iname} = []; txbytes.${iname} = []; @@ -23,27 +24,26 @@ oldentry.${iname} = []; END; - FOREACH item = param.stack; - t = date.format(item.timestamp, '%H:%M'); - timestamps.push(t); + FOREACH row = data; + IF ot != row.5; + t = date.format(row.5, '%H:%M'); + timestamps.push(t); + ot = row.5; + END; - FOREACH entry = item.network; - iname = entry.first.split(':').first; + iname = row.0.split(':').first; UNLESS oldentry.${iname}.size; - oldentry.${iname} = entry; + oldentry.${iname} = row; END; - bytes = entry.1 - oldentry.${iname}.1; - rxbytes.${iname}.push(bytes); + bytes = row.1 - oldentry.${iname}.1; + rxbytes.${iname}.push(bytes / (1024*1024)); - bytes = entry.5 - oldentry.${iname}.5; - txbytes.${iname}.push(bytes); + bytes = row.3 - oldentry.${iname}.3; + txbytes.${iname}.push(bytes / (1024*1024)); - rxerror.${iname}.push(entry.3); - txerror.${iname}.push(entry.7); - oldentry.${iname} = entry; - END; + oldentry.${iname} = row; END; FOREACH iname = rxbytes.keys.sort; @@ -52,17 +52,15 @@ d = [ timestamps, rxbytes.${iname}, - rxerror.${iname}, - txbytes.${iname}, - txerror.${iname}, + txbytes.${iname} ]; USE my_graph = GD.Graph.lines(375,375); # Xsteps - steps = param.stack.size div 5; + steps = timestamps.size div 5; label = gettext('Traffic on Interface'); - y_label = gettext('Transfer in bytes') + y_label = gettext('MB') label = "${label} ${iname} (${y_label})"; my_graph.set( x_label_skip => steps, @@ -72,9 +70,9 @@ line_width => 2, box_axis => 1, - boxclr => '#FFFFCC', + boxclr => '#FFFFFF', fgclr => '#BBBBBB' - legend_placement => 'RD', + legend_placement => 'BO', legend_spacing => 5, ); my_graph.set_title_font(param.font,10); @@ -82,7 +80,7 @@ my_graph.set_x_label_font(param.font,10); my_graph.set_x_axis_font(param.font,6); my_graph.set_y_axis_font(param.font,6); - my_graph.set_legend( 'RxBytes', 'RxErrors', 'TxBytes', 'TxErrors'); + my_graph.set_legend( fields.1, fields.3); file = writefile("status_network_${iname}.gif", my_graph.plot(d).gif ); statusfiles.push([ label , file ]); END; @@ -94,35 +92,6 @@ <h1><?% param.headingText %?></h1> <?% END %?> - - -<div class="areabegin"> -<table class="largetable" summary=""> - <tr><td class="largehead"> </td></tr> - <tr> - <td class="largetext"> - <table summary="" width="100%"> - <?% fields = data.shift %?> - <tr> - <?% FOREACH field = fields %?> - <th><?% field %?></th> - <?% END %?> - </tr> - <?% FOREACH zeile = data %?> - <tr<?% ' class="two"' IF loop.count mod 2 == 1 %?>> - <?% FOREACH field = zeile %?> - <td><?% field.replace('\n', '<br />') %?></td> - <?% END %?> - </tr> - <?% END %?> - - </table> - </td> - </tr> - <tr><td class="largebottom"></td></tr> -</table> -<div class="areaclose"></div> - <?% FOREACH file = statusfiles %?> <div class="areabegin"> <table class="areatable" summary=""> diff --git a/skins/stone/vitals.tmpl b/skins/stone/vitals.tmpl index 82077f5..1a8d8cd 100644 --- a/skins/stone/vitals.tmpl +++ b/skins/stone/vitals.tmpl @@ -57,9 +57,9 @@ line_width => 2, box_axis => 1, - boxclr => '#FFFFCC', + boxclr => '#FFFFFF', fgclr => '#BBBBBB' - legend_placement => 'RD', + legend_placement => 'BO', legend_spacing => 5, ); my_graph.set_title_font(param.font,10); diff --git a/skins/stone/widgets/wait.tmpl b/skins/stone/widgets/wait.tmpl index 14deedd..4598725 100644 --- a/skins/stone/widgets/wait.tmpl +++ b/skins/stone/widgets/wait.tmpl @@ -3,16 +3,12 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de"> <head> + <link rel="stylesheet" type="text/css" href="style-<?% skin %?>.css" media="all" /> <title>XXV</title> <meta http-equiv="content-type" content="text/html; charset=<?% charset %?>" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="pragma" content="no-cache" /> <meta name="robots" content="noindex,noarchive,nofollow" /> -<style type="text/css"> -<!-- - <?% INCLUDE style.css %?> ---> -</style> </head> <?% IF info.http_useragent.match('.*MSIE.*') && !info.http_useragent.match('.*Opera.*'); global.imagetyp = "gif"; diff --git a/skins/stone_flat/filesys.tmpl b/skins/stone_flat/filesys.tmpl index f84509a..a5bd3a3 100644 --- a/skins/stone_flat/filesys.tmpl +++ b/skins/stone_flat/filesys.tmpl @@ -24,7 +24,7 @@ IF param.graphic; [ device.5, free], ]; - USE my_graph = GD.Graph.pie(500, 300); + USE my_graph = GD.Graph.pie(300, 200); label = gettext('Total space'); label = "${device.0} - ${device.6} - ${label} ${device.2}"; diff --git a/skins/stone_flat/memory.tmpl b/skins/stone_flat/memory.tmpl index 2fc2f1d..27b01fb 100644 --- a/skins/stone_flat/memory.tmpl +++ b/skins/stone_flat/memory.tmpl @@ -9,43 +9,42 @@ <?% USE date; statusfiles = []; + fields = data.shift; FILTER null; name = 'memory_stat'; swapdata = []; activedata = []; cacheddata = []; - buffersdata = []; + inactivedata = []; timestamps = []; - FOREACH item = param.stack; - t = date.format(item.timestamp, '%H:%M:%S'); + FOREACH row = data; + t = date.format(row.6, '%H:%M'); timestamps.push(t); - swapdata.push(item.memory.SwapTotal); - activedata.push(item.memory.Active); - cacheddata.push(item.memory.Cached); - buffersdata.push(item.memory.Buffers); + activedata.push(row.2 / (1024)); + inactivedata.push(row.3 / (1024)); + cacheddata.push(row.4 / (1024)); + swapdata.push(row.5 / (1024)); END; - # Maximum wert - max = param.stack.last.memory.MemTotal; - # Data ... d = [ timestamps , - swapdata , - cacheddata , activedata , - buffersdata , + inactivedata + cacheddata , + swapdata ]; - USE my_graph = GD.Graph.lines(575,300); + USE my_graph = GD.Graph.lines(575,375); # Xsteps - steps = param.stack.size div 5; + steps = data.size div 5; label = gettext('Memory usage since'); - y_label = gettext('Memory usage in bytes'), - label = "${label} ${d.first.first} (${y_label})"; + label_y = gettext('Memory usage in MB') + label = "${label} ${d.first.first} (${label_y})"; + my_graph.set( x_label_skip => steps, x_long_ticks => 1, @@ -54,9 +53,9 @@ line_width => 2, box_axis => 1, - boxclr => '#FFFFCC', + boxclr => '#FFFFFF', fgclr => '#BBBBBB' - legend_placement => 'RD', + legend_placement => '>BO', legend_spacing => 5, ); my_graph.set_title_font(param.font,10); @@ -64,28 +63,29 @@ my_graph.set_x_label_font(param.font,10); my_graph.set_x_axis_font(param.font,6); my_graph.set_y_axis_font(param.font,6); - my_graph.set_legend( 'Swap', 'Active', 'Cached', 'Buffers'); + my_graph.set_legend( fields.2, fields.3, fields.4, fields.5); file = writefile("status_${name}.gif", my_graph.plot(d).gif ); - statusfiles.push([label, file]); + statusfiles.push([ label , file ]); END; # ------------------- Piegraph für Speicher + row = data.last; FILTER null; name = 'memory_now'; - MemTotal = data.MemTotal div 1024; - Active = data.Active div 1024; - Cached = data.Cached div 1024; - Inactive = data.Inactive div 1024; - MemFree = data.MemFree div 1024; - Buffers = data.Buffers div 1024; + MemTotal = row.0 div 1024; + MemFree = row.1 div 1024; + Active = row.2 div 1024; + Cached = row.4 div 1024; + Inactive = row.3 div 1024; + Swapped = row.5 div 1024; d2 = [ - ["Active ${Active} MB","Cached ${Cached} MB","Inactive ${Inactive} MB","MemFree ${MemFree} MB","Buffers ${Buffers} MB"], - [ data.Active, data.Cached, data.Inactive, data.MemFree, data.Buffers] + [ "${fields.2} ${Active} MB","${fields.3} ${Inactive} MB","${fields.4} ${Cached} MB","${fields.5} ${Swapped} MB","${fields.1} ${MemFree} MB"], + [ row.2, row.3, row.4, row.5, row.1] ]; - USE my_graph = GD.Graph.pie(500, 300); - label = gettext('Total Memory'); + USE my_graph = GD.Graph.pie(300, 200); + label = fields.0; label = "${label} ${MemTotal} MB"; my_graph.set( axislabelclr => 'black', @@ -96,7 +96,7 @@ my_graph.set_label_font(param.font,10); my_graph.set_value_font(param.font,8); file = writefile("status_${name}.gif", my_graph.plot(d2).gif ); - statusfiles.push([label, file]); + statusfiles.push([ label , file ]); END; %?> diff --git a/skins/stone_flat/network.tmpl b/skins/stone_flat/network.tmpl index 4683e7f..be95538 100644 --- a/skins/stone_flat/network.tmpl +++ b/skins/stone_flat/network.tmpl @@ -10,10 +10,11 @@ statusfiles = []; FILTER null; - name = 'network_stat'; + fields = data.shift; + timestamps = []; - FOREACH entry = param.stack.first.network; - iname = entry.first.split(':').first; + FOREACH row = data; + iname = row.0.split(':').first; rxbytes.${iname} = []; txbytes.${iname} = []; @@ -23,27 +24,26 @@ oldentry.${iname} = []; END; - FOREACH item = param.stack; - t = date.format(item.timestamp, '%H:%M:%S'); - timestamps.push(t); + FOREACH row = data; + IF ot != row.5; + t = date.format(row.5, '%H:%M'); + timestamps.push(t); + ot = row.5; + END; - FOREACH entry = item.network; - iname = entry.first.split(':').first; + iname = row.0.split(':').first; UNLESS oldentry.${iname}.size; - oldentry.${iname} = entry; + oldentry.${iname} = row; END; - bytes = entry.1 - oldentry.${iname}.1; - rxbytes.${iname}.push(bytes); + bytes = row.1 - oldentry.${iname}.1; + rxbytes.${iname}.push(bytes / (1024*1024)); - bytes = entry.5 - oldentry.${iname}.5; - txbytes.${iname}.push(bytes); + bytes = row.3 - oldentry.${iname}.3; + txbytes.${iname}.push(bytes / (1024*1024)); - rxerror.${iname}.push(entry.3); - txerror.${iname}.push(entry.7); - oldentry.${iname} = entry; - END; + oldentry.${iname} = row; END; FOREACH iname = rxbytes.keys.sort; @@ -52,17 +52,15 @@ d = [ timestamps, rxbytes.${iname}, - rxerror.${iname}, - txbytes.${iname}, - txerror.${iname}, + txbytes.${iname} ]; USE my_graph = GD.Graph.lines(575,300); # Xsteps - steps = param.stack.size div 5; + steps = timestamps.size div 5; label = gettext('Traffic on Interface'); - y_label = gettext('Transfer in bytes'); + y_label = gettext('MB') label = "${label} ${iname} (${y_label})"; my_graph.set( x_label_skip => steps, @@ -72,9 +70,9 @@ line_width => 2, box_axis => 1, - boxclr => '#FFFFCC', + boxclr => '#FFFFFF', fgclr => '#BBBBBB' - legend_placement => 'RD', + legend_placement => 'BO', legend_spacing => 5, ); my_graph.set_title_font(param.font,10); @@ -82,10 +80,9 @@ my_graph.set_x_label_font(param.font,10); my_graph.set_x_axis_font(param.font,6); my_graph.set_y_axis_font(param.font,6); - my_graph.set_legend( 'RxBytes', 'RxErrors', 'TxBytes', 'TxErrors'); + my_graph.set_legend( fields.1, fields.3); file = writefile("status_network_${iname}.gif", my_graph.plot(d).gif ); - statusfiles.push([label, file]); - + statusfiles.push([ label , file ]); END; END; %?> @@ -95,30 +92,6 @@ <h1><?% param.headingText %?></h1> <?% END %?> -<table class="editortable" summary=""> - <tr><td class="editorhead"> </td></tr> - <tr> - <td class="editortext"> - <table summary="" width="100%"> - <?% fields = data.shift %?> - <tr> - <?% FOREACH field = fields %?> - <th><?% field %?></th> - <?% END %?> - </tr> - <?% FOREACH zeile = data %?> - <tr<?% ' class="two"' IF loop.count mod 2 == 1 %?>> - <?% FOREACH field = zeile %?> - <td><?% field.replace('\n', '<br />') %?></td> - <?% END %?> - </tr> - <?% END %?> - </table> - </td> - </tr> - <tr><td class="editorbottom"></td></tr> -</table> - <?% FOREACH file = statusfiles %?> <table class="editortable" summary=""> <tr><td class="editorhead"><?% file.0 %?></td></tr> diff --git a/skins/stone_flat/vitals.tmpl b/skins/stone_flat/vitals.tmpl index f8f9e20..19fa6ae 100644 --- a/skins/stone_flat/vitals.tmpl +++ b/skins/stone_flat/vitals.tmpl @@ -57,9 +57,9 @@ line_width => 2, box_axis => 1, - boxclr => '#FFFFCC', + boxclr => '#FFFFFF', fgclr => '#BBBBBB' - legend_placement => 'RD', + legend_placement => 'BO', legend_spacing => 5, ); my_graph.set_title_font(param.font,10); diff --git a/skins/xstyle/memory.tmpl b/skins/xstyle/memory.tmpl index 7c455d9..a0572f3 100644 --- a/skins/xstyle/memory.tmpl +++ b/skins/xstyle/memory.tmpl @@ -1,39 +1,37 @@ <?% USE date; statusfiles = {}; + fields = data.shift; FILTER null; name = 'memory_stat'; swapdata = []; activedata = []; cacheddata = []; - buffersdata = []; + inactivedata = []; timestamps = []; - FOREACH item = param.stack; - t = date.format(item.timestamp, '%H:%M:%S'); + FOREACH row = data; + t = date.format(row.6, '%H:%M'); timestamps.push(t); - swapdata.push(item.memory.SwapTotal); - activedata.push(item.memory.Active); - cacheddata.push(item.memory.Cached); - buffersdata.push(item.memory.Buffers); + activedata.push(row.2 / (1024)); + inactivedata.push(row.3 / (1024)); + cacheddata.push(row.4 / (1024)); + swapdata.push(row.5 / (1024)); END; - # Maximum wert - max = param.stack.last.memory.MemTotal; - # Data ... d = [ timestamps , - swapdata , - cacheddata , activedata , - buffersdata , + inactivedata + cacheddata , + swapdata ]; USE my_graph = GD.Graph.lines(500,300); # Xsteps - steps = param.stack.size div 5; + steps = data.size div 5; label = gettext('Memory usage since'); label = "${label} ${d.first.first}"; @@ -42,7 +40,7 @@ x_label_skip => steps, x_long_ticks => 1, - y_label => gettext('Memory usage in bytes'), + y_label => gettext('Memory usage in MB'), y_long_ticks => 1, line_width => 2, @@ -57,27 +55,28 @@ my_graph.set_x_label_font(param.font,10); my_graph.set_x_axis_font(param.font,6); my_graph.set_y_axis_font(param.font,6); - my_graph.set_legend( 'Swap', 'Active', 'Cached', 'Buffers'); - statusfiles.$name = writefile("status_${name}.png", my_graph.plot(d).gif ); + my_graph.set_legend( fields.2, fields.3, fields.4, fields.5 ); + statusfiles.$name = writefile("status_${name}.gif", my_graph.plot(d).gif ); END; # ------------------- Piegraph für Speicher + row = data.last; FILTER null; name = 'memory_now'; - MemTotal = data.MemTotal div 1024; - Active = data.Active div 1024; - Cached = data.Cached div 1024; - Inactive = data.Inactive div 1024; - MemFree = data.MemFree div 1024; - Buffers = data.Buffers div 1024; + MemTotal = row.0 div 1024; + MemFree = row.1 div 1024; + Active = row.2 div 1024; + Cached = row.4 div 1024; + Inactive = row.3 div 1024; + Swapped = row.5 div 1024; d2 = [ - ["Active ${Active} MB","Cached ${Cached} MB","Inactive ${Inactive} MB","MemFree ${MemFree} MB","Buffers ${Buffers} MB"], - [ data.Active, data.Cached, data.Inactive, data.MemFree, data.Buffers] + [ "${fields.2} ${Active} MB","${fields.3} ${Inactive} MB","${fields.4} ${Cached} MB","${fields.5} ${Swapped} MB","${fields.1} ${MemFree} MB"], + [ row.2, row.3, row.4, row.5, row.1 ] ]; USE my_graph = GD.Graph.pie(400, 300); - label = gettext('Total Memory'); + label = fields.0; label = "${label} ${MemTotal} MB"; my_graph.set( title => label, @@ -88,7 +87,7 @@ my_graph.set_title_font(param.font,10); my_graph.set_label_font(param.font,10); my_graph.set_value_font(param.font,8); - statusfiles.$name = writefile("status_${name}.png", my_graph.plot(d2).gif ); + statusfiles.$name = writefile("status_${name}.gif", my_graph.plot(d2).gif ); END; %?> <!-- Vitals Template --> diff --git a/skins/xstyle/network.tmpl b/skins/xstyle/network.tmpl index f9b3a93..314c1f2 100644 --- a/skins/xstyle/network.tmpl +++ b/skins/xstyle/network.tmpl @@ -3,10 +3,11 @@ statusfiles = {}; FILTER null; - name = 'network_stat'; + fields = data.shift; + timestamps = []; - FOREACH entry = param.stack.first.network; - iname = entry.first.split(':').first; + FOREACH row = data; + iname = row.0.split(':').first; rxbytes.${iname} = []; txbytes.${iname} = []; @@ -16,27 +17,26 @@ oldentry.${iname} = []; END; - FOREACH item = param.stack; - t = date.format(item.timestamp, '%H:%M:%S'); - timestamps.push(t); + FOREACH row = data; + IF ot != row.5; + t = date.format(row.5, '%H:%M'); + timestamps.push(t); + ot = row.5; + END; - FOREACH entry = item.network; - iname = entry.first.split(':').first; + iname = row.0.split(':').first; UNLESS oldentry.${iname}.size; - oldentry.${iname} = entry; + oldentry.${iname} = row; END; - bytes = entry.1 - oldentry.${iname}.1; - rxbytes.${iname}.push(bytes); + bytes = row.1 - oldentry.${iname}.1; + rxbytes.${iname}.push(bytes / (1024*1024)); - bytes = entry.5 - oldentry.${iname}.5; - txbytes.${iname}.push(bytes); + bytes = row.3 - oldentry.${iname}.3; + txbytes.${iname}.push(bytes / (1024*1024)); - rxerror.${iname}.push(entry.3); - txerror.${iname}.push(entry.7); - oldentry.${iname} = entry; - END; + oldentry.${iname} = row; END; FOREACH iname = rxbytes.keys.sort; @@ -45,23 +45,21 @@ d = [ timestamps, rxbytes.${iname}, - rxerror.${iname}, - txbytes.${iname}, - txerror.${iname}, + txbytes.${iname} ]; USE my_graph = GD.Graph.lines(600,300); # Xsteps - steps = param.stack.size / 5 | format('%d'); + steps = timestamps.size div 5; label = gettext('Traffic on Interface'); - label = "${label} ${iname}"; + y_label = gettext('MB') + label = "${label} ${iname} (${y_label})"; my_graph.set( title => label, x_label_skip => steps, x_long_ticks => 1, - y_label => gettext('Transfer in bytes'), y_long_ticks => 1, line_width => 2, @@ -76,31 +74,16 @@ my_graph.set_x_label_font(param.font,10); my_graph.set_x_axis_font(param.font,6); my_graph.set_y_axis_font(param.font,6); - my_graph.set_legend( 'RxBytes', 'RxErrors', 'TxBytes', 'TxErrors'); + my_graph.set_legend( fields.1, fields.3); statusfiles.$iname = writefile("status_network_${iname}.png", my_graph.plot(d).gif ); END; END; %?> - <!-- Vitals Template --> <?% IF param.headingText %?> <h3><?% param.headingText %?></h3> <?% END %?> <table border="0" width="95%"> - <?% fields = data.shift %?> - <tr> - <?% FOREACH field = fields %?> - <th><?% field %?></th> - <?% END %?> - </tr> - <?% FOREACH zeile = data %?> - <tr> - <?% FOREACH field = zeile %?> - <td><?% field %?></td> - <?% END %?> - </tr> - <?% END %?> - <?% FOREACH file = statusfiles.keys %?> <tr> <td colspan="<?% fields.size %?>" align=center> diff --git a/skins/xstyle/schema.tmpl b/skins/xstyle/schema.tmpl index 5d5d23a..c147791 100644 --- a/skins/xstyle/schema.tmpl +++ b/skins/xstyle/schema.tmpl @@ -52,104 +52,16 @@ sec_height = 0.1; <style> /* Schema */ -#channel -{ - margin: 3px; - position: relative; - float:left; -} #channelcontainer { height: <?% Duration * sec_height %?>px; - width: 200px; - border: 1px solid #999; - position: relative; - background:#FFF url(style/tr_bck.gif) repeat-x; - overflow: hidden; -} - -#channeltitle, #channeltitle a -{ - font-weight:bold; - font-size:1.1em; - background-color:blue; - color:white; - padding: 3px; - -} - -#eventbox -{ - margin: 1px; - border: 1px solid #999; - position: relative; - overflow: hidden; - background:#FFF url(style/foot_bck.gif) repeat-x; -} - -#eventbox_time -{ - margin:3px; - font-size:0.8em; - float: left; - background:#eee; - height:98%; -} - -#eventbox_title -{ - font-weight:bold; - font-size:1.1em; - margin: 3px; } - -#eventbox_title_link -{ - font-size:0.7em; - margin: 2px; -} - -#eventbox_subtitle -{ - font-weight:bold; - font-style:italic; - font-size:0.8em; - margin: 3px; -} - -#eventbox_text -{ - font-style:italic; - font-size:0.8em; - margin: 3px; -} - -#eventbox_bild -{ - margin: 3px; -} -#eventbox_bild img { - margin: 0px; - padding: 0px; - width : 140px; - height : 105px; - display : inline; -} - <?% ttm = date.now - param.zeitvon; ttm = ttm * sec_height; %?> #timemarker { - margin: 1px; - border-top: 1px dashed #F00; - position: absolute; top: <?% ttm | format('%d') %?>px; - width:100%; - font-size:0.6em; - text-align: right; - color:#F00; - z-index:99; } </style> <table width='<?% (data.keys.size * 210) %?>'><td> diff --git a/skins/xstyle/style/style.css b/skins/xstyle/style/style.css index 962e67a..c650f09 100644 --- a/skins/xstyle/style/style.css +++ b/skins/xstyle/style/style.css @@ -290,3 +290,99 @@ caption margin: 0px; background-color: #ffffff; } + +/* Schema */ +#channel +{ + margin: 3px; + position: relative; + float:left; +} +#channelcontainer +{ + width: 200px; + border: 1px solid #999; + position: relative; + background:#FFF url(tr_bck.gif) repeat-x; + overflow: hidden; +} + +#channeltitle, #channeltitle a +{ + font-weight:bold; + font-size:1.1em; + background-color:blue; + color:white; + padding: 3px; +} + +#eventbox +{ + margin: 1px; + border: 1px solid #999; + position: relative; + overflow: hidden; + background:#FFF url(style/foot_bck.gif) repeat-x; +} + +#eventbox_time +{ + margin:3px; + font-size:0.8em; + float: left; + background:#eee; + height:98%; +} + +#eventbox_title +{ + font-weight:bold; + font-size:1.1em; + margin: 3px; +} + +#eventbox_title_link +{ + font-size:0.7em; + margin: 2px; +} + +#eventbox_subtitle +{ + font-weight:bold; + font-style:italic; + font-size:0.8em; + margin: 3px; +} + +#eventbox_text +{ + font-style:italic; + font-size:0.8em; + margin: 3px; +} + +#eventbox_bild +{ + margin: 3px; +} + +#eventbox_bild img { + margin: 0px; + padding: 0px; + width : 140px; + height : 105px; + display : inline; +} + +#timemarker +{ + margin: 1px; + border-top: 1px dashed #F00; + position: absolute; + width:100%; + font-size:0.6em; + text-align: right; + color:#F00; + z-index:2; +} diff --git a/skins/xstyle/widgets/footer.tmpl b/skins/xstyle/widgets/footer.tmpl index 61e4372..f7e16b2 100644 --- a/skins/xstyle/widgets/footer.tmpl +++ b/skins/xstyle/widgets/footer.tmpl @@ -53,8 +53,7 @@ print Dumper($stash->_dump_frame(5)); <div id="TOOLTIP"></div> <div class='footer'> -User: <?% user %?><br> -<a href="http://xxv.berlios.de">XXV System</a> -- Version: <?% version %?> -- created by xpix, hulk and poetter 2004 - 2008 +<a href="http://xxv.berlios.de">XXV System</a> -- Version: <?% version %?> </div> </body> </HTML> |
