webui: move idnode tree to idnode.js and update to handle 2 types of enum

This commit is contained in:
Adam Sutton 2013-06-10 21:54:53 +01:00
parent e770b416b3
commit ff35e6efab
2 changed files with 78 additions and 119 deletions

View file

@ -21,6 +21,13 @@ tvheadend.idnode_editor_field = function(f, create)
switch(f.type) {
case 'str':
if (f.enum) {
var store = f.enum;
if (f.enum.length > 0 && f.enum[0] instanceof Object)
store = new Ext.data.JsonStore({
id : 'key',
fields : [ 'key', 'val' ],
data : f.enum,
});
return new Ext.form.ComboBox({
fieldLabel : f.caption,
name : f.id,
@ -28,7 +35,9 @@ tvheadend.idnode_editor_field = function(f, create)
disabled : d,
width : 300,
mode : 'local',
store : f.enum,
valueField : 'key',
displayField : 'val',
store : store,
typeAhead : true,
forceSelection : true,
triggerAction : 'all',
@ -76,7 +85,7 @@ tvheadend.idnode_editor_field = function(f, create)
/*
* ID node editor panel
*/
tvheadend.idnode_editor = function(item)
tvheadend.idnode_editor = function(item, conf)
{
var fields = []
@ -87,13 +96,14 @@ tvheadend.idnode_editor = function(item)
}
var panel = new Ext.FormPanel({
title : conf.title || null,
frame : true,
border : true,
bodyStyle : 'padding: 5px',
labelAlign : 'left',
labelWidth : 200,
autoWidth : true,
autoHeight : true,
autoHeight : !conf.fixedHeight,
defaultType : 'textfield',
buttonAlign : 'left',
items : fields,
@ -371,7 +381,7 @@ tvheadend.idnode_grid = function(panel, conf)
success : function(d)
{
d = json_decode(d);
p = tvheadend.idnode_editor(d[0]);
p = tvheadend.idnode_editor(d[0], {});
w = new Ext.Window({
title : 'Add ' + conf.titleS,
layout : 'fit',
@ -437,3 +447,65 @@ tvheadend.idnode_grid = function(panel, conf)
build(conf.fields);
}
}
tvheadend.idnode_tree = function (conf)
{
var current = null;
var loader = new Ext.tree.TreeLoader({
dataUrl : conf.url
});
var tree = new Ext.tree.TreePanel({
loader : loader,
flex : 1,
border : false,
root : new Ext.tree.AsyncTreeNode({
id : 'root',
text : conf.title
}),
listeners : {
click: function(n) {
if(current)
panel.remove(current);
if(!n.isRoot)
current = panel.add(new tvheadend.idnode_editor(n.attributes, {title: 'Parameters', fixedHeight: true}));
panel.doLayout();
}
}
});
tvheadend.comet.on('idnodeNameChanged', function(o) {
var n = tree.getNodeById(o.id);
if(n) {
n.setText(o.text);
}
});
tvheadend.comet.on('idnodeParamsChanged', function(o) {
var n = tree.getNodeById(o.id);
if(n) {
n.attributes.params = o.params;
}
});
var panel = new Ext.Panel({
title : conf.title,
layout : 'hbox',
flex : 1,
padding : 5,
border : false,
layoutConfig : {
align : 'stretch'
},
items: [ tree ]
});
tree.on('render', function() {
tree.getRootNode().expand();
});
return panel;
}

View file

@ -1,117 +1,4 @@
/**
* Datastore for adapters
*/
/*
tvheadend.tvAdapterStore = new Ext.data.JsonStore({
root : 'entries',
id : 'identifier',
fields : [ 'identifier', 'type', 'name', 'path', 'devicename',
'hostconnection', 'currentMux', 'services', 'muxes', 'initialMuxes',
'satConf', 'deliverySystem', 'freqMin', 'freqMax', 'freqStep',
'symrateMin', 'symrateMax', 'signal', 'snr', 'ber', 'unc', 'uncavg', 'bw', 'reason'],
autoLoad : true,
url : 'tv/adapter'
});
tvheadend.comet.on('tvAdapter', function(m) {
idx = tvheadend.tvAdapterStore.find('identifier', m.identifier);
if (idx == -1)
return;
r = tvheadend.tvAdapterStore.getAt(idx);
r.beginEdit();
for (key in m)
r.set(key, m[key]);
r.endEdit();
tvheadend.tvAdapterStore.commitChanges();
});
tvheadend.tvadapters = function() {
tvheadend.tvAdapterStore.load();
var adapterSelection = new Ext.form.ComboBox({
loadingText : 'Loading...',
width : 300,
displayField : 'name',
store : tvheadend.tvAdapterStore,
mode : 'remote',
editable : false,
triggerAction : 'all',
emptyText : 'Select TV adapter...'
});
var dummyadapter = new Ext.Panel({
region : 'center',
layout : 'fit',
items : [ {
border : false
} ]
});
var panel = new Ext.Panel({
title : 'TV Adapters',
iconCls : 'hardware',
layout : 'fit',
tbar : [ adapterSelection, '->', {
text : 'Help',
handler : function() {
new tvheadend.help('DVB', 'config_dvb.html');
}
} ],
items : [ dummyadapter ]
});
adapterSelection.on('select', function(c, r) {
panel.removeAll(false);
if (r.data.type == 'dvb')
panel.add(new tvheadend.dvb_adapter(r.data));
else
panel.add(new tvheadend.v4l_adapter(r.data));
panel.doLayout();
});
return panel;
}
*/
/**
*
*/
/*
tvheadend.showTransportDetails = function(data) {
html = '';
html += '<div style="display:block;font-weight:bold;margin-bottom:4px">';
html += '<span style="float:left;width:100px">PID </span>';
html += '<span style="float:left;width:100px">Type</span>';
html += '<span>Details</span>';
html += '</div>';
for (i = 0; i < data.streams.length; i++) {
s = data.streams[i];
html += '<div style="display:block">';
html += '<span style="float:left;width:100px">' + s.pid + '</span>';
html += '<span style="float:left;width:100px">' + s.type + '</span>';
html += '<span>' + (s.details.length > 0 ? s.details : '&nbsp')
+ '</span>';
html += '</div>';
}
win = new Ext.Window({
title : 'Service details for ' + data.title,
layout : 'fit',
width : 400,
height : 400,
plain : true,
bodyStyle : 'padding: 5px',
html : html
});
win.show();
}
*/
tvheadend.tvadapters = function() {
return tvheadend.item_browser('tvadapters', 'TV Adapters');
// return tvheadend.item_browser('tvadapters', 'TV Adapters');
return tvheadend.idnode_tree({ url: 'tvadapters', title: 'TV adapters'});
}