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,
disabled : d,
width : 300,
mode : 'local',
- store : f.enum,
+ valueField : 'key',
+ displayField : 'val',
+ store : store,
typeAhead : true,
forceSelection : true,
triggerAction : 'all',
/*
* ID node editor panel
*/
-tvheadend.idnode_editor = function(item)
+tvheadend.idnode_editor = function(item, conf)
{
var fields = []
}
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,
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',
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;
+}
-/**
- * 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 : ' ')
- + '</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'});
}