]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
webui: move idnode tree to idnode.js and update to handle 2 types of enum
authorAdam Sutton <dev@adamsutton.me.uk>
Mon, 10 Jun 2013 20:54:53 +0000 (21:54 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Mon, 10 Jun 2013 20:54:53 +0000 (21:54 +0100)
src/webui/static/app/idnode.js
src/webui/static/app/tvadapters.js

index 20b3243787a2a88e9fb1faad889389b0538bae9c..62fa93b25ed3ef4d775f0361620f7ca20eebe761 100644 (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;
+}
index c13e209f8be2dba6caa977d260931e45d79f8f6f..010d2e4068251dada497999582d2a36f7e93cf00 100644 (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'});
 }