You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2016/04/29 13:04:44 UTC

svn commit: r1741609 [5/31] - in /qpid/java/trunk: bdbstore/src/main/java/resources/js/qpid/management/virtualhost/bdb/ bdbstore/src/main/java/resources/js/qpid/management/virtualhost/bdb_ha/ bdbstore/src/main/java/resources/js/qpid/management/virtualh...

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js?rev=1741609&r1=1741608&r2=1741609&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js Fri Apr 29 11:04:40 2016
@@ -23,167 +23,182 @@ define(["dojo/json",
         "dojo/store/Memory",
         "dojox/grid/DataGrid",
         "dojo/data/ObjectStore",
-        "dojo/store/Observable"], function (json, util, Memory, DataGrid, ObjectStore, Observable) {
+        "dojo/store/Observable"], function (json, util, Memory, DataGrid, ObjectStore, Observable)
+       {
 
-    function UpdatableStore( data, divName, structure, func, props, Grid, notObservable ) {
+           function UpdatableStore(data, divName, structure, func, props, Grid, notObservable)
+           {
 
-        var that = this;
-        var GridType = DataGrid;
+               var that = this;
+               var GridType = DataGrid;
 
-        that.memoryStore = new Memory({data: data, idProperty: "id"});
-        that.store = notObservable ? that.memoryStore : new Observable(that.memoryStore);
-        that.dataStore = ObjectStore({objectStore: that.store});
-
-        var gridProperties = {  store: that.dataStore,
-                     structure: structure,
-                      autoHeight: true
-                 };
-        if(props) {
-            for(var prop in props) {
-                if(props.hasOwnProperty(prop))
-                {
-                    gridProperties[ prop ] = props[ prop ];
-                }
-            }
-        }
-
-        if(Grid)
-        {
-            GridType = Grid;
-        }
-
-        that.grid = new GridType(gridProperties, divName);
-
-        // since we created this grid programmatically, call startup to render it
-        that.grid.startup();
-
-        if( func )
-        {
-            func(that);
-        }
-
-    }
-
-    UpdatableStore.prototype.update = function(data)
-    {
-        var changed = false;
-        var store = this.store;
-        var theItem;
-
-        // handle deletes
-        // iterate over existing store... if not in new data then remove
-        store.query({ }).forEach(function(object) {
-                                     if(data) {
-                                         for(var i=0; i < data.length; i++) {
-                                             if(data[i].id == object.id) {
-                                                 return;
-                                             }
-                                         }
-                                     }
-                                     store.remove(object.id);
-                                     changed = true;
-                                 });
-
-        // iterate over data...
-        if(data) {
-            for(var i=0; i < data.length; i++)
-            {
-                if(theItem = store.get(data[i].id))
-                {
-                  var modified = !util.equals(theItem, data[i]);
-                  if(modified)
-                  {
-                    if (store.notify)
-                    {
-                      // Seems that we are required to update the item that the store already holds
-                      for(var propName in data[i])
-                      {
-                        if(data[i].hasOwnProperty(propName))
-                        {
-                          if(theItem[ propName ] != data[i][ propName ])
-                          {
-                            theItem[ propName ] = data[i][ propName ];
-                          }
-                        }
-                      }
-                      // and tell it we have done so
-                      store.notify(theItem, data[i].id);
-                    }
-                    else
-                    {
-                      store.put(data[i], {overwrite: true});
-                    }
-                    changed = true;
-                  }
-                } else {
-                    // if not in the store then add
-                    store.put(data[i]);
-                    changed = true;
-                }
-            }
-        }
-
-        return changed;
-    };
-
-    function removeItemsFromArray(items, numberToRemove)
-    {
-      if (items)
-      {
-        if (numberToRemove > 0 && items.length > 0)
-        {
-          if (numberToRemove >= items.length)
-          {
-            numberToRemove = numberToRemove - items.length;
-            items.length = 0
-          }
-          else
-          {
-            items.splice(0, numberToRemove);
-            numberToRemove = 0;
-          }
-        }
-      }
-      return numberToRemove;
-    };
-
-    UpdatableStore.prototype.append = function(data, limit)
-    {
-        var changed = false;
-        var items = this.memoryStore.data;
-
-        if (limit)
-        {
-          var totalSize = items.length + (data ? data.length : 0);
-          var numberToRemove = totalSize - limit;
-
-          if (numberToRemove > 0)
-          {
-            changed = true;
-            numberToRemove = removeItemsFromArray(items, numberToRemove);
-            if (numberToRemove > 0)
-            {
-              removeItemsFromArray(data, numberToRemove);
-            }
-          }
-        }
-
-        if (data && data.length > 0)
-        {
-          changed = true;
-          items.push.apply(items, data);
-        }
-
-        this.memoryStore.setData(items);
-        return changed;
-    };
-
-    UpdatableStore.prototype.close = function()
-    {
-        this.dataStore.close();
-        this.dataStore = null;
-        this.store = null;
-        this.memoryStore = null;
-    };
-    return UpdatableStore;
-});
+               that.memoryStore = new Memory({
+                   data: data,
+                   idProperty: "id"
+               });
+               that.store = notObservable ? that.memoryStore : new Observable(that.memoryStore);
+               that.dataStore = ObjectStore({objectStore: that.store});
+
+               var gridProperties = {
+                   store: that.dataStore,
+                   structure: structure,
+                   autoHeight: true
+               };
+               if (props)
+               {
+                   for (var prop in props)
+                   {
+                       if (props.hasOwnProperty(prop))
+                       {
+                           gridProperties[prop] = props[prop];
+                       }
+                   }
+               }
+
+               if (Grid)
+               {
+                   GridType = Grid;
+               }
+
+               that.grid = new GridType(gridProperties, divName);
+
+               // since we created this grid programmatically, call startup to render it
+               that.grid.startup();
+
+               if (func)
+               {
+                   func(that);
+               }
+
+           }
+
+           UpdatableStore.prototype.update = function (data)
+           {
+               var changed = false;
+               var store = this.store;
+               var theItem;
+
+               // handle deletes
+               // iterate over existing store... if not in new data then remove
+               store.query({}).forEach(function (object)
+                                       {
+                                           if (data)
+                                           {
+                                               for (var i = 0; i < data.length; i++)
+                                               {
+                                                   if (data[i].id == object.id)
+                                                   {
+                                                       return;
+                                                   }
+                                               }
+                                           }
+                                           store.remove(object.id);
+                                           changed = true;
+                                       });
+
+               // iterate over data...
+               if (data)
+               {
+                   for (var i = 0; i < data.length; i++)
+                   {
+                       if (theItem = store.get(data[i].id))
+                       {
+                           var modified = !util.equals(theItem, data[i]);
+                           if (modified)
+                           {
+                               if (store.notify)
+                               {
+                                   // Seems that we are required to update the item that the store already holds
+                                   for (var propName in data[i])
+                                   {
+                                       if (data[i].hasOwnProperty(propName))
+                                       {
+                                           if (theItem[propName] != data[i][propName])
+                                           {
+                                               theItem[propName] = data[i][propName];
+                                           }
+                                       }
+                                   }
+                                   // and tell it we have done so
+                                   store.notify(theItem, data[i].id);
+                               }
+                               else
+                               {
+                                   store.put(data[i], {overwrite: true});
+                               }
+                               changed = true;
+                           }
+                       }
+                       else
+                       {
+                           // if not in the store then add
+                           store.put(data[i]);
+                           changed = true;
+                       }
+                   }
+               }
+
+               return changed;
+           };
+
+           function removeItemsFromArray(items, numberToRemove)
+           {
+               if (items)
+               {
+                   if (numberToRemove > 0 && items.length > 0)
+                   {
+                       if (numberToRemove >= items.length)
+                       {
+                           numberToRemove = numberToRemove - items.length;
+                           items.length = 0
+                       }
+                       else
+                       {
+                           items.splice(0, numberToRemove);
+                           numberToRemove = 0;
+                       }
+                   }
+               }
+               return numberToRemove;
+           };
+
+           UpdatableStore.prototype.append = function (data, limit)
+           {
+               var changed = false;
+               var items = this.memoryStore.data;
+
+               if (limit)
+               {
+                   var totalSize = items.length + (data ? data.length : 0);
+                   var numberToRemove = totalSize - limit;
+
+                   if (numberToRemove > 0)
+                   {
+                       changed = true;
+                       numberToRemove = removeItemsFromArray(items, numberToRemove);
+                       if (numberToRemove > 0)
+                       {
+                           removeItemsFromArray(data, numberToRemove);
+                       }
+                   }
+               }
+
+               if (data && data.length > 0)
+               {
+                   changed = true;
+                   items.push.apply(items, data);
+               }
+
+               this.memoryStore.setData(items);
+               return changed;
+           };
+
+           UpdatableStore.prototype.close = function ()
+           {
+               this.dataStore.close();
+               this.dataStore = null;
+               this.store = null;
+               this.memoryStore = null;
+           };
+           return UpdatableStore;
+       });

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/WarningPane.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/WarningPane.js?rev=1741609&r1=1741608&r2=1741609&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/WarningPane.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/WarningPane.js Fri Apr 29 11:04:40 2016
@@ -18,8 +18,7 @@
  * under the License.
  *
  */
-define([
-        "dojo/_base/declare",
+define(["dojo/_base/declare",
         "dojo/_base/array",
         "dojo/_base/lang",
         "dojo/_base/event",
@@ -30,44 +29,45 @@ define([
         "dojox/html/entities",
         "dijit/form/Button",
         "dojo/domReady!"],
-function (declare, array, lang, event, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, template, entities)
-{
+       function (declare, array, lang, event, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, template, entities)
+       {
 
-  return declare("qpid.common.WarningPane", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin],
-    {
-      templateString: template,
-      message: "Not Found",
+           return declare("qpid.common.WarningPane", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
+               templateString: template,
+               message: "Not Found",
 
-      buildRendering: function()
-      {
-        //Strip out the apache comment header from the template html as comments unsupported.
-        this.templateString = this.templateString.replace(/<!--[\s\S]*?-->/g, "");
-        this.inherited(arguments);
-      },
-      postCreate: function()
-      {
-        this.inherited(arguments);
-        this._renderMessage();
-        var that = this;
-        this.closeButton.on("click", function(e){that._onButtonClick(e)});
-      },
-      _onButtonClick: function( /*Event*/ e)
-      {
-        this.onClick(e);
-      },
-      onClick: function( /*Event*/ e)
-      {
-        // extention point
-      },
-      _setMessageAttr: function(message)
-      {
-        this.message = message;
-        this._renderMessage();
-      },
-      _renderMessage : function()
-      {
-        this.warningMessage.innerHTML = entities.encode(String(this.message));
-      }
-    }
-  );
-});
+               buildRendering: function ()
+               {
+                   //Strip out the apache comment header from the template html as comments unsupported.
+                   this.templateString = this.templateString.replace(/<!--[\s\S]*?-->/g, "");
+                   this.inherited(arguments);
+               },
+               postCreate: function ()
+               {
+                   this.inherited(arguments);
+                   this._renderMessage();
+                   var that = this;
+                   this.closeButton.on("click", function (e)
+                   {
+                       that._onButtonClick(e)
+                   });
+               },
+               _onButtonClick: function (/*Event*/ e)
+               {
+                   this.onClick(e);
+               },
+               onClick: function (/*Event*/ e)
+               {
+                   // extention point
+               },
+               _setMessageAttr: function (message)
+               {
+                   this.message = message;
+                   this._renderMessage();
+               },
+               _renderMessage: function ()
+               {
+                   this.warningMessage.innerHTML = entities.encode(String(this.message));
+               }
+           });
+       });

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/footer.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/footer.js?rev=1741609&r1=1741608&r2=1741609&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/footer.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/footer.js Fri Apr 29 11:04:40 2016
@@ -18,13 +18,18 @@
  * under the License.
  *
  */
-define(["dojo/_base/xhr", "dojo/query", "dojo/domReady!"], function (xhr, query) {
-   query('div[qpid-type="footer"]').forEach(function(node, index, arr) {
-       xhr.get({url: "footer.html",
-                sync: true,
-                load:  function(data) {
-                    node.innerHTML = data;
-                } });
-   });
+define(["dojo/_base/xhr", "dojo/query", "dojo/domReady!"], function (xhr, query)
+{
+    query('div[qpid-type="footer"]').forEach(function (node, index, arr)
+                                             {
+                                                 xhr.get({
+                                                             url: "footer.html",
+                                                             sync: true,
+                                                             load: function (data)
+                                                             {
+                                                                 node.innerHTML = data;
+                                                             }
+                                                         });
+                                             });
 });
 

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/formatter.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/formatter.js?rev=1741609&r1=1741608&r2=1741609&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/formatter.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/formatter.js Fri Apr 29 11:04:40 2016
@@ -19,81 +19,86 @@
  *
  */
 
-define(function () {
-    return {
-
-        formatBytes: function formatBytes(amount)
-        {
-            var returnVal = { units: "B",
-                              value: "0"};
-
-
-            if(amount < 1000)
-            {
-                returnVal.value = amount.toPrecision(3);;
-            }
-            else if(amount < 1000 * 1024)
-            {
-                returnVal.units = "KB";
-                returnVal.value = (amount / 1024).toPrecision(3);
-            }
-            else if(amount < 1000 * 1024 * 1024)
-            {
-                returnVal.units = "MB";
-                returnVal.value = (amount / (1024 * 1024)).toPrecision(3);
-            }
-            else if(amount < 1000 * 1024 * 1024 * 1024)
-            {
-                returnVal.units = "GB";
-                returnVal.value = (amount / (1024 * 1024 * 1024)).toPrecision(3);
-            }
-
-            return returnVal;
-
-        },
-
-        formatTime: function formatTime(amount)
-        {
-            var returnVal = { units: "ms",
-                              value: "0"};
-
-            if(amount < 1000)
-            {
-                returnVal.units = "ms";
-                returnVal.value = amount.toString();
-            }
-            else if(amount < 1000 * 60)
-            {
-                returnVal.units = "s";
-                returnVal.value = (amount / 1000).toPrecision(3);
-            }
-            else if(amount < 1000 * 60 * 60)
-            {
-                returnVal.units = "min";
-                returnVal.value = (amount / (1000 * 60)).toPrecision(3);
-            }
-            else if(amount < 1000 * 60 * 60 * 24)
-            {
-                returnVal.units = "hr";
-                returnVal.value = (amount / (1000 * 60 * 60)).toPrecision(3);
-            }
-            else if(amount < 1000 * 60 * 60 * 24 * 7)
-            {
-                returnVal.units = "d";
-                returnVal.value = (amount / (1000 * 60 * 60 * 24)).toPrecision(3);
-            }
-            else if(amount < 1000 * 60 * 60 * 24 * 365)
-            {
-                returnVal.units = "wk";
-                returnVal.value = (amount / (1000 * 60 * 60 * 24 * 7)).toPrecision(3);
-            }
-            else
-            {
-                returnVal.units = "yr";
-                returnVal.value = (amount / (1000 * 60 * 60 * 24 * 365)).toPrecision(3);
-            }
-
-            return returnVal;
-        }
-    };
-});
\ No newline at end of file
+define(function ()
+       {
+           return {
+
+               formatBytes: function formatBytes(amount)
+               {
+                   var returnVal = {
+                       units: "B",
+                       value: "0"
+                   };
+
+                   if (amount < 1000)
+                   {
+                       returnVal.value = amount.toPrecision(3);
+                       ;
+                   }
+                   else if (amount < 1000 * 1024)
+                   {
+                       returnVal.units = "KB";
+                       returnVal.value = (amount / 1024).toPrecision(3);
+                   }
+                   else if (amount < 1000 * 1024 * 1024)
+                   {
+                       returnVal.units = "MB";
+                       returnVal.value = (amount / (1024 * 1024)).toPrecision(3);
+                   }
+                   else if (amount < 1000 * 1024 * 1024 * 1024)
+                   {
+                       returnVal.units = "GB";
+                       returnVal.value = (amount / (1024 * 1024 * 1024)).toPrecision(3);
+                   }
+
+                   return returnVal;
+
+               },
+
+               formatTime: function formatTime(amount)
+               {
+                   var returnVal = {
+                       units: "ms",
+                       value: "0"
+                   };
+
+                   if (amount < 1000)
+                   {
+                       returnVal.units = "ms";
+                       returnVal.value = amount.toString();
+                   }
+                   else if (amount < 1000 * 60)
+                   {
+                       returnVal.units = "s";
+                       returnVal.value = (amount / 1000).toPrecision(3);
+                   }
+                   else if (amount < 1000 * 60 * 60)
+                   {
+                       returnVal.units = "min";
+                       returnVal.value = (amount / (1000 * 60)).toPrecision(3);
+                   }
+                   else if (amount < 1000 * 60 * 60 * 24)
+                   {
+                       returnVal.units = "hr";
+                       returnVal.value = (amount / (1000 * 60 * 60)).toPrecision(3);
+                   }
+                   else if (amount < 1000 * 60 * 60 * 24 * 7)
+                   {
+                       returnVal.units = "d";
+                       returnVal.value = (amount / (1000 * 60 * 60 * 24)).toPrecision(3);
+                   }
+                   else if (amount < 1000 * 60 * 60 * 24 * 365)
+                   {
+                       returnVal.units = "wk";
+                       returnVal.value = (amount / (1000 * 60 * 60 * 24 * 7)).toPrecision(3);
+                   }
+                   else
+                   {
+                       returnVal.units = "yr";
+                       returnVal.value = (amount / (1000 * 60 * 60 * 24 * 365)).toPrecision(3);
+                   }
+
+                   return returnVal;
+               }
+           };
+       });
\ No newline at end of file

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js?rev=1741609&r1=1741608&r2=1741609&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js Fri Apr 29 11:04:40 2016
@@ -19,127 +19,136 @@
  *
  */
 
-define([
-  "dojo/_base/declare",
-  "dojo/_base/event",
-  "dojo/_base/array",
-  "dojo/_base/lang",
-  "dojo/parser",
-  "dojo/dom-construct",
-  "dojo/query",
-  "dijit/registry",
-  "dijit/form/Button",
-  "dijit/form/CheckBox",
-  "dojox/grid/enhanced/plugins/Dialog",
-  "dojo/text!../../../grid/showColumnDefDialog.html",
-  "dojo/domReady!"
-], function(declare, event, array, lang, parser, dom, query, registry, Button, CheckBox, Dialog, template ){
-
-
-return declare("qpid.common.grid.ColumnDefDialog", null, {
-
-  grid: null,
-  containerNode: null,
-  _columns: [],
-  _dialog: null,
-
-  constructor: function(args){
-      var grid = this.grid = args.grid;
-      var that = this;
-      this.containerNode = dom.create("div", {innerHTML: template});
-      parser.parse(this.containerNode).then(function(instances)
-      {
-          that._postParse();
-      });
-  },
-  _postParse: function()
-  {
-      var submitButton = registry.byNode(query(".displayButton", this.containerNode)[0]);
-      this.closeButton = registry.byNode(query(".cancelButton", this.containerNode)[0]);
-      var columnsContainer = query(".columnList", this.containerNode)[0];
-
-      this._buildColumnWidgets(columnsContainer);
-
-      this._dialog = new Dialog({
-        "refNode": this.grid.domNode,
-        "title": "Grid Columns",
-        "content": this.containerNode
-      });
-
-      var self = this;
-      submitButton.on("click", function(e){self._onColumnsSelect(e); });
-      this.closeButton.on("click", function(e){self._dialog.hide(); });
-
-      this._dialog.startup();
-    },
-
-    destroy: function(){
-      this._dialog.destroyRecursive();
-      this._dialog = null;
-      this.grid = null;
-      this.containerNode = null;
-      this._columns = null;
-    },
-
-    showDialog: function(){
-      this._initColumnWidgets();
-      this._dialog.show();
-    },
-
-    _initColumnWidgets: function()
-    {
-      var cells = this.grid.layout.cells;
-      for(var i in cells)
-      {
-        var cell = cells[i];
-        this._columns[cell.name].checked = !cell.hidden;
-      }
-    },
-
-    _onColumnsSelect: function(evt){
-      event.stop(evt);
-      var grid = this.grid;
-      grid.beginUpdate();
-      var cells = grid.layout.cells;
-      try
-      {
-        for(var i in cells)
-        {
-          var cell = cells[i];
-          var widget = this._columns[cell.name];
-          grid.layout.setColumnVisibility(i, widget.checked);
-        }
-      }
-      finally
-      {
-        grid.endUpdate();
-        this._dialog.hide();
-      }
-    },
-
-    _buildColumnWidgets: function(columnsContainer)
-    {
-      var cells = this.grid.layout.cells;
-      for(var i in cells)
-      {
-        var cell = cells[i];
-        var widget = new dijit.form.CheckBox({
-          required: false,
-          checked: !cell.hidden,
-          label: cell.name,
-          name: this.grid.id + "_cchb_ " + i
-        });
-
-        this._columns[cell.name] = widget;
-
-        var div = dom.create("div");
-        div.appendChild(widget.domNode);
-        div.appendChild(dom.create("span", {innerHTML: cell.name}));
-
-        columnsContainer.appendChild(div);
-      }
-    }
+define(["dojo/_base/declare",
+        "dojo/_base/event",
+        "dojo/_base/array",
+        "dojo/_base/lang",
+        "dojo/parser",
+        "dojo/dom-construct",
+        "dojo/query",
+        "dijit/registry",
+        "dijit/form/Button",
+        "dijit/form/CheckBox",
+        "dojox/grid/enhanced/plugins/Dialog",
+        "dojo/text!../../../grid/showColumnDefDialog.html",
+        "dojo/domReady!"],
+       function (declare, event, array, lang, parser, dom, query, registry, Button, CheckBox, Dialog, template)
+       {
+
+           return declare("qpid.common.grid.ColumnDefDialog", null, {
+
+               grid: null,
+               containerNode: null,
+               _columns: [],
+               _dialog: null,
+
+               constructor: function (args)
+               {
+                   var grid = this.grid = args.grid;
+                   var that = this;
+                   this.containerNode = dom.create("div", {innerHTML: template});
+                   parser.parse(this.containerNode).then(function (instances)
+                                                         {
+                                                             that._postParse();
+                                                         });
+               },
+               _postParse: function ()
+               {
+                   var submitButton = registry.byNode(query(".displayButton", this.containerNode)[0]);
+                   this.closeButton = registry.byNode(query(".cancelButton", this.containerNode)[0]);
+                   var columnsContainer = query(".columnList", this.containerNode)[0];
+
+                   this._buildColumnWidgets(columnsContainer);
+
+                   this._dialog = new Dialog({
+                       "refNode": this.grid.domNode,
+                       "title": "Grid Columns",
+                       "content": this.containerNode
+                   });
+
+                   var self = this;
+                   submitButton.on("click", function (e)
+                   {
+                       self._onColumnsSelect(e);
+                   });
+                   this.closeButton.on("click", function (e)
+                   {
+                       self._dialog.hide();
+                   });
+
+                   this._dialog.startup();
+               },
+
+               destroy: function ()
+               {
+                   this._dialog.destroyRecursive();
+                   this._dialog = null;
+                   this.grid = null;
+                   this.containerNode = null;
+                   this._columns = null;
+               },
+
+               showDialog: function ()
+               {
+                   this._initColumnWidgets();
+                   this._dialog.show();
+               },
+
+               _initColumnWidgets: function ()
+               {
+                   var cells = this.grid.layout.cells;
+                   for (var i in cells)
+                   {
+                       var cell = cells[i];
+                       this._columns[cell.name].checked = !cell.hidden;
+                   }
+               },
+
+               _onColumnsSelect: function (evt)
+               {
+                   event.stop(evt);
+                   var grid = this.grid;
+                   grid.beginUpdate();
+                   var cells = grid.layout.cells;
+                   try
+                   {
+                       for (var i in cells)
+                       {
+                           var cell = cells[i];
+                           var widget = this._columns[cell.name];
+                           grid.layout.setColumnVisibility(i, widget.checked);
+                       }
+                   }
+                   finally
+                   {
+                       grid.endUpdate();
+                       this._dialog.hide();
+                   }
+               },
+
+               _buildColumnWidgets: function (columnsContainer)
+               {
+                   var cells = this.grid.layout.cells;
+                   for (var i in cells)
+                   {
+                       var cell = cells[i];
+                       var widget = new dijit.form.CheckBox({
+                           required: false,
+                           checked: !cell.hidden,
+                           label: cell.name,
+                           name: this.grid.id + "_cchb_ " + i
+                       });
+
+                       this._columns[cell.name] = widget;
+
+                       var div = dom.create("div");
+                       div.appendChild(widget.domNode);
+                       div.appendChild(dom.create("span", {innerHTML: cell.name}));
+
+                       columnsContainer.appendChild(div);
+                   }
+               }
 
-  });
+           });
 
-});
+       });

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js?rev=1741609&r1=1741608&r2=1741609&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilter.js Fri Apr 29 11:04:40 2016
@@ -19,213 +19,235 @@
  *
  */
 
-define([
-  "dojo/_base/declare",
-  "dojo/_base/lang",
-  "dojo/_base/array",
-  "dijit/Toolbar",
-  "dojox/grid/enhanced/_Plugin",
-  "dojox/grid/enhanced/plugins/Dialog",
-  "dojox/grid/enhanced/plugins/filter/FilterLayer",
-  "dojox/grid/enhanced/plugins/filter/FilterDefDialog",
-  "dojox/grid/enhanced/plugins/filter/FilterStatusTip",
-  "dojox/grid/enhanced/plugins/filter/ClearFilterConfirm",
-  "dojox/grid/EnhancedGrid",
-  "dojo/i18n!dojox/grid/enhanced/nls/Filter",
-  "qpid/common/grid/EnhancedFilterTools"
-], function(declare, lang, array, Toolbar, _Plugin,
-    Dialog, FilterLayer, FilterDefDialog, FilterStatusTip, ClearFilterConfirm, EnhancedGrid, nls, EnhancedFilterTools){
-
-  // override CriteriaBox#_getColumnOptions to show criteria for hidden columns with EnhancedFilter
-  dojo.extend(dojox.grid.enhanced.plugins.filter.CriteriaBox, {
-          _getColumnOptions: function(){
-                  var colIdx = this.dlg.curColIdx >= 0 ? String(this.dlg.curColIdx) : "anycolumn";
-                  var filterHidden = this.plugin.filterHidden;
-                  return array.map(array.filter(this.plugin.grid.layout.cells, function(cell){
-                          return !(cell.filterable === false || (!filterHidden && cell.hidden));
-                  }), function(cell){
-                          return {
-                                  label: cell.name || cell.field,
-                                  value: String(cell.index),
-                                  selected: colIdx == String(cell.index)
-                          };
-                  });
-          }
-  });
-
-  // Enhanced filter has extra functionality for refreshing, limiting rows, displaying/hiding columns in the grid
-  var EnhancedFilter = declare("qpid.common.grid.EnhancedFilter", _Plugin, {
-    // summary:
-    //    Accept the same plugin parameters as dojox.grid.enhanced.plugins.Filter and the following:
-    //
-    //    filterHidden: boolean:
-    //    Whether to display filtering criteria for hidden columns. Default to true.
-    //
-    //    defaulGridRowLimit: int:
-    //    Default limit for numbers of items to cache in the gris dtore
-    //
-    //    disableFiltering: boolean:
-    //    Whether to disable a filtering including filter button, clear filter button and filter summary.
-    //
-    //    toolbar: dijit.Toolbar:
-    //    An instance of toolbar to add the enhanced filter widgets.
-
-
-    // name: String
-    //    plugin name
-    name: "enhancedFilter",
-
-    // filterHidden: Boolean
-    //    whether to filter hidden columns
-    filterHidden: true,
-
-    constructor: function(grid, args){
-      // summary:
-      //    See constructor of dojox.grid.enhanced._Plugin.
-      this.grid = grid;
-      this.nls = nls;
-      this.userPreferences = args.userPreferences;
-      args = this.args = lang.isObject(args) ? args : {};
-      if(typeof args.ruleCount != 'number' || args.ruleCount < 0){
-        args.ruleCount = 0;
-      }
-      this.ruleCountToConfirmClearFilter = args.ruleCountToConfirmClearFilter || 5;
-
-      if (args.filterHidden){
-          this.filterHidden = args.filterHidden;
-      }
-      this.defaulGridRowLimit = args.defaulGridRowLimit;
-      this.disableFiltering = args.disableFiltering;
-      this.displayLastUpdateTime = args.displayLastUpdateTime;
-
-      //Install UI components
-      var obj = { "plugin": this };
-
-      this.filterBar = ( args.toolbar && args.toolbar instanceof dijit.Toolbar) ? args.toolbar: new Toolbar();
-
-      if (!this.disableFiltering)
-      {
-          //Install filter layer
-          this._wrapStore();
-
-          this.clearFilterDialog = new Dialog({
-            refNode: this.grid.domNode,
-            title: this.nls["clearFilterDialogTitle"],
-            content: new ClearFilterConfirm(obj)
-          });
-
-          this.filterDefDialog = new FilterDefDialog(obj);
-          this.filterDefDialog.filterDefPane._clearFilterBtn.set("label", "Clear Filter");
-
-          nls["statusTipTitleNoFilter"] = "Filter is not set";
-          nls["statusTipMsg"] = "Click on 'Set Filter' button to specify filtering conditions";
-          this.filterStatusTip = new FilterStatusTip(obj);
-
-          var self = this;
-          var toggleClearFilterBtn = function (arg){ self.enhancedFilterTools.toggleClearFilterBtn(arg); };
-
-          this.filterBar.toggleClearFilterBtn = toggleClearFilterBtn;
-
-          this.grid.isFilterBarShown = function (){return true};
-
-          this.connect(this.grid.layer("filter"), "onFilterDefined", function(filter){
-            toggleClearFilterBtn(true);
-          });
-
-          //Expose the layer event to grid.
-          grid.onFilterDefined = function(){};
-          this.connect(grid.layer("filter"), "onFilterDefined", function(filter){
-              grid.onFilterDefined(grid.getFilter(), grid.getFilterRelation());
-          });
-      }
-
-      // add extra buttons into toolbar
-      this.enhancedFilterTools = new EnhancedFilterTools({
-          grid: grid,
-          toolbar: this.filterBar,
-          filterStatusTip: this.filterStatusTip,
-          clearFilterDialog: this.clearFilterDialog,
-          filterDefDialog: this.filterDefDialog,
-          defaulGridRowLimit: this.defaulGridRowLimit,
-          disableFiltering: this.disableFiltering,
-          displayLastUpdateTime: this.displayLastUpdateTime,
-          nls: nls,
-          ruleCountToConfirmClearFilter: this.ruleCountToConfirmClearFilter,
-          userPreferences: this.userPreferences
-        });
-
-      this.filterBar.placeAt(this.grid.viewsHeaderNode, "before");
-      this.filterBar.startup();
-
-    },
-
-    destroy: function(){
-      this.inherited(arguments);
-      try
-      {
-        if (this.filterDefDialog)
-        {
-          this.filterDefDialog.destroy();
-          this.filterDefDialog = null;
-        }
-        if (this.grid)
-        {
-          this.grid.unwrap("filter");
-          this.grid = null;
-        }
-        if (this.filterBar)
-        {
-          this.filterBar.destroyRecursive();
-          this.filterBar = null;
-        }
-        if (this.enhancedFilterTools)
-        {
-          this.enhancedFilterTools.destroy();
-          this.enhancedFilterTools = null;
-        }
-        if (this.clearFilterDialog)
-        {
-          this.clearFilterDialog.destroyRecursive();
-          this.clearFilterDialog = null;
-        }
-        if (this.filterStatusTip)
-        {
-          this.filterStatusTip.destroy();
-          this.filterStatusTip = null;
-        }
-        this.args = null;
-
-      }catch(e){
-        console.warn("Filter.destroy() error:",e);
-      }
-    },
-
-    _wrapStore: function(){
-      var g = this.grid;
-      var args = this.args;
-      var filterLayer = args.isServerSide ? new FilterLayer.ServerSideFilterLayer(args) :
-        new FilterLayer.ClientSideFilterLayer({
-          cacheSize: args.filterCacheSize,
-          fetchAll: args.fetchAllOnFirstFilter,
-          getter: this._clientFilterGetter
-        });
-      FilterLayer.wrap(g, "_storeLayerFetch", filterLayer);
-
-      this.connect(g, "_onDelete", lang.hitch(filterLayer, "invalidate"));
-    },
-
-    onSetStore: function(store){
-      this.filterDefDialog.clearFilter(true);
-    },
-
-    _clientFilterGetter: function(/* data item */ datarow,/* cell */cell, /* int */rowIndex){
-      return cell.get(rowIndex, datarow);
-    }
+define(["dojo/_base/declare",
+        "dojo/_base/lang",
+        "dojo/_base/array",
+        "dijit/Toolbar",
+        "dojox/grid/enhanced/_Plugin",
+        "dojox/grid/enhanced/plugins/Dialog",
+        "dojox/grid/enhanced/plugins/filter/FilterLayer",
+        "dojox/grid/enhanced/plugins/filter/FilterDefDialog",
+        "dojox/grid/enhanced/plugins/filter/FilterStatusTip",
+        "dojox/grid/enhanced/plugins/filter/ClearFilterConfirm",
+        "dojox/grid/EnhancedGrid",
+        "dojo/i18n!dojox/grid/enhanced/nls/Filter",
+        "qpid/common/grid/EnhancedFilterTools"],
+       function (declare, lang, array, Toolbar, _Plugin, Dialog, FilterLayer, FilterDefDialog, FilterStatusTip, ClearFilterConfirm, EnhancedGrid, nls, EnhancedFilterTools)
+       {
+
+           // override CriteriaBox#_getColumnOptions to show criteria for hidden columns with EnhancedFilter
+           dojo.extend(dojox.grid.enhanced.plugins.filter.CriteriaBox, {
+               _getColumnOptions: function ()
+               {
+                   var colIdx = this.dlg.curColIdx >= 0 ? String(this.dlg.curColIdx) : "anycolumn";
+                   var filterHidden = this.plugin.filterHidden;
+                   return array.map(array.filter(this.plugin.grid.layout.cells, function (cell)
+                   {
+                       return !(cell.filterable === false || (!filterHidden && cell.hidden));
+                   }), function (cell)
+                                    {
+                                        return {
+                                            label: cell.name || cell.field,
+                                            value: String(cell.index),
+                                            selected: colIdx == String(cell.index)
+                                        };
+                                    });
+               }
+           });
+
+           // Enhanced filter has extra functionality for refreshing, limiting rows, displaying/hiding columns in the grid
+           var EnhancedFilter = declare("qpid.common.grid.EnhancedFilter", _Plugin, {
+               // summary:
+               //    Accept the same plugin parameters as dojox.grid.enhanced.plugins.Filter and the following:
+               //
+               //    filterHidden: boolean:
+               //    Whether to display filtering criteria for hidden columns. Default to true.
+               //
+               //    defaulGridRowLimit: int:
+               //    Default limit for numbers of items to cache in the gris dtore
+               //
+               //    disableFiltering: boolean:
+               //    Whether to disable a filtering including filter button, clear filter button and filter summary.
+               //
+               //    toolbar: dijit.Toolbar:
+               //    An instance of toolbar to add the enhanced filter widgets.
+
+               // name: String
+               //    plugin name
+               name: "enhancedFilter",
+
+               // filterHidden: Boolean
+               //    whether to filter hidden columns
+               filterHidden: true,
+
+               constructor: function (grid, args)
+               {
+                   // summary:
+                   //    See constructor of dojox.grid.enhanced._Plugin.
+                   this.grid = grid;
+                   this.nls = nls;
+                   this.userPreferences = args.userPreferences;
+                   args = this.args = lang.isObject(args) ? args : {};
+                   if (typeof args.ruleCount != 'number' || args.ruleCount < 0)
+                   {
+                       args.ruleCount = 0;
+                   }
+                   this.ruleCountToConfirmClearFilter = args.ruleCountToConfirmClearFilter || 5;
+
+                   if (args.filterHidden)
+                   {
+                       this.filterHidden = args.filterHidden;
+                   }
+                   this.defaulGridRowLimit = args.defaulGridRowLimit;
+                   this.disableFiltering = args.disableFiltering;
+                   this.displayLastUpdateTime = args.displayLastUpdateTime;
+
+                   //Install UI components
+                   var obj = {"plugin": this};
+
+                   this.filterBar =
+                       ( args.toolbar && args.toolbar instanceof dijit.Toolbar) ? args.toolbar : new Toolbar();
+
+                   if (!this.disableFiltering)
+                   {
+                       //Install filter layer
+                       this._wrapStore();
+
+                       this.clearFilterDialog = new Dialog({
+                           refNode: this.grid.domNode,
+                           title: this.nls["clearFilterDialogTitle"],
+                           content: new ClearFilterConfirm(obj)
+                       });
+
+                       this.filterDefDialog = new FilterDefDialog(obj);
+                       this.filterDefDialog.filterDefPane._clearFilterBtn.set("label", "Clear Filter");
+
+                       nls["statusTipTitleNoFilter"] = "Filter is not set";
+                       nls["statusTipMsg"] = "Click on 'Set Filter' button to specify filtering conditions";
+                       this.filterStatusTip = new FilterStatusTip(obj);
+
+                       var self = this;
+                       var toggleClearFilterBtn = function (arg)
+                       {
+                           self.enhancedFilterTools.toggleClearFilterBtn(arg);
+                       };
+
+                       this.filterBar.toggleClearFilterBtn = toggleClearFilterBtn;
+
+                       this.grid.isFilterBarShown = function ()
+                       {
+                           return true
+                       };
+
+                       this.connect(this.grid.layer("filter"), "onFilterDefined", function (filter)
+                       {
+                           toggleClearFilterBtn(true);
+                       });
+
+                       //Expose the layer event to grid.
+                       grid.onFilterDefined = function ()
+                       {
+                       };
+                       this.connect(grid.layer("filter"), "onFilterDefined", function (filter)
+                       {
+                           grid.onFilterDefined(grid.getFilter(), grid.getFilterRelation());
+                       });
+                   }
+
+                   // add extra buttons into toolbar
+                   this.enhancedFilterTools = new EnhancedFilterTools({
+                       grid: grid,
+                       toolbar: this.filterBar,
+                       filterStatusTip: this.filterStatusTip,
+                       clearFilterDialog: this.clearFilterDialog,
+                       filterDefDialog: this.filterDefDialog,
+                       defaulGridRowLimit: this.defaulGridRowLimit,
+                       disableFiltering: this.disableFiltering,
+                       displayLastUpdateTime: this.displayLastUpdateTime,
+                       nls: nls,
+                       ruleCountToConfirmClearFilter: this.ruleCountToConfirmClearFilter,
+                       userPreferences: this.userPreferences
+                   });
+
+                   this.filterBar.placeAt(this.grid.viewsHeaderNode, "before");
+                   this.filterBar.startup();
+
+               },
+
+               destroy: function ()
+               {
+                   this.inherited(arguments);
+                   try
+                   {
+                       if (this.filterDefDialog)
+                       {
+                           this.filterDefDialog.destroy();
+                           this.filterDefDialog = null;
+                       }
+                       if (this.grid)
+                       {
+                           this.grid.unwrap("filter");
+                           this.grid = null;
+                       }
+                       if (this.filterBar)
+                       {
+                           this.filterBar.destroyRecursive();
+                           this.filterBar = null;
+                       }
+                       if (this.enhancedFilterTools)
+                       {
+                           this.enhancedFilterTools.destroy();
+                           this.enhancedFilterTools = null;
+                       }
+                       if (this.clearFilterDialog)
+                       {
+                           this.clearFilterDialog.destroyRecursive();
+                           this.clearFilterDialog = null;
+                       }
+                       if (this.filterStatusTip)
+                       {
+                           this.filterStatusTip.destroy();
+                           this.filterStatusTip = null;
+                       }
+                       this.args = null;
+
+                   }
+                   catch (e)
+                   {
+                       console.warn("Filter.destroy() error:", e);
+                   }
+               },
+
+               _wrapStore: function ()
+               {
+                   var g = this.grid;
+                   var args = this.args;
+                   var filterLayer = args.isServerSide
+                       ? new FilterLayer.ServerSideFilterLayer(args)
+                       : new FilterLayer.ClientSideFilterLayer({
+                       cacheSize: args.filterCacheSize,
+                       fetchAll: args.fetchAllOnFirstFilter,
+                       getter: this._clientFilterGetter
+                   });
+                   FilterLayer.wrap(g, "_storeLayerFetch", filterLayer);
+
+                   this.connect(g, "_onDelete", lang.hitch(filterLayer, "invalidate"));
+               },
+
+               onSetStore: function (store)
+               {
+                   this.filterDefDialog.clearFilter(true);
+               },
+
+               _clientFilterGetter: function (/* data item */ datarow, /* cell */cell, /* int */rowIndex)
+               {
+                   return cell.get(rowIndex, datarow);
+               }
 
-  });
+           });
 
-  EnhancedGrid.registerPlugin(EnhancedFilter);
+           EnhancedGrid.registerPlugin(EnhancedFilter);
 
-  return EnhancedFilter;
+           return EnhancedFilter;
 
-});
+       });

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js?rev=1741609&r1=1741608&r2=1741609&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/EnhancedFilterTools.js Fri Apr 29 11:04:40 2016
@@ -19,293 +19,342 @@
  *
  */
 
-define([
-  "dojo/_base/declare",
-  "dojo/_base/event",
-  "dojo/dom-construct",
-  "dojo/date/locale",
-  "dijit/form/Button",
-  "dijit/form/ToggleButton",
-  "qpid/common/grid/RowNumberLimitDialog",
-  "qpid/common/grid/ColumnDefDialog",
-  "qpid/common/grid/FilterSummary"
-], function(declare, event, domConstruct, locale, Button, ToggleButton, RowNumberLimitDialog, ColumnDefDialog, FilterSummary){
-
-  var _stopEvent = function (evt){
-    try{
-      if(evt && evt.preventDefault){
-        event.stop(evt);
-      }
-      }catch(e){}
-  };
-
-  return declare("qpid.common.grid.EnhancedFilterTools", null, {
-
-    grid: null,
-    filterBar: null,
-    filterStatusTip: null,
-    clearFilterDialog: null,
-    filterDefDialog: null,
-
-    columnDefDialog: null,
-    columnDefButton: null,
-    filterDefButton: null,
-    clearFilterButton: null,
-    filterSummary: null,
-    setRowNumberLimitButton: null,
-    setRowNumberLimitDialog: null,
-    refreshButton: null,
-    autoRefreshButton: null,
-
-    constructor: function(params)
-    {
-      this.inherited(arguments);
-
-      this.userPreferences = params.userPreferences;
-      this.filterBar = params.toolbar;
-      this.grid = params.grid;
-      this.filterStatusTip= params.filterStatusTip;
-      this.clearFilterDialog = params.clearFilterDialog;
-      this.filterDefDialog = params.filterDefDialog;
-      this.ruleCountToConfirmClearFilter = params.ruleCountToConfirmClearFilter;
-      this.displayLastUpdateTime = params.hasOwnProperty("displayLastUpdateTime")?params.displayLastUpdateTime:true;
-
-      this._addRefreshButtons();
-      this._addRowLimitButton(params.defaulGridRowLimit);
-      this._addColumnsButton();
-
-      if (!params.disableFiltering)
-      {
-          this._addFilteringTools(params.nls);
-      }
-    },
-
-    toggleClearFilterBtn: function(clearFlag)
-    {
-      var filterLayer = this.grid.layer("filter");
-      var filterSet = filterLayer && filterLayer.filterDef && filterLayer.filterDef();
-      this.clearFilterButton.set("disabled", !filterSet);
-    },
-
-    destroy: function()
-    {
-      this.inherited(arguments);
-
-      if (this.columnDefDialog)
-      {
-        this.columnDefDialog.destroy();
-        this.columnDefDialog = null;
-      }
-      if (this.columnDefButton)
-      {
-        this.columnDefButton.destroy();
-        this.columnDefButton = null;
-      }
-      if (this.filterDefButton)
-      {
-        this.filterDefButton.destroy();
-        this.filterDefButton = null;
-      }
-      if (this.clearFilterButton)
-      {
-        this.clearFilterButton.destroy();
-        this.clearFilterButton = null;
-      }
-      if (this.filterSummary)
-      {
-        this.filterSummary.destroy();
-        this.filterSummary = null;
-      }
-      if (this.setRowNumberLimitButton)
-      {
-        this.setRowNumberLimitButton.destroy();
-        this.setRowNumberLimitButton = null;
-      }
-      if (this.setRowNumberLimitDialog)
-      {
-        this.setRowNumberLimitDialog.destroy();
-        this.setRowNumberLimitDialog = null;
-      }
-      if (this.refreshButton)
-      {
-        this.refreshButton.destroy();
-        this.refreshButton = null;
-      }
-      if (this.autoRefreshButton)
-      {
-        this.autoRefreshButton.destroy();
-        this.autoRefreshButton = null;
-      }
-
-      this.grid = null;
-      this.filterBar = null;
-      this.filterStatusTip = null;
-      this.clearFilterDialog = null;
-      this.filterDefDialog = null;
-    },
-
-    _addRefreshButtons: function()
-    {
-      var self = this;
-      this.refreshButton = new dijit.form.Button({
-        label: "Refresh",
-        type: "button",
-        iconClass: "gridRefreshIcon",
-        title: "Manual Refresh"
-      });
-
-      this.autoRefreshButton = new dijit.form.ToggleButton({
-        label: "Auto Refresh",
-        type: "button",
-        iconClass: "gridAutoRefreshIcon",
-        title: "Auto Refresh"
-      });
-
-      this.autoRefreshButton.on("change", function(value){
-          self.grid.updater.updatable=value;
-          self.refreshButton.set("disabled", value);
-      });
-
-      this.refreshButton.on("click", function(value){
-          self.grid.updater.performUpdate();
-      });
-
-      this.filterBar.addChild(this.autoRefreshButton);
-      this.filterBar.addChild(this.refreshButton);
-
-      if (this.displayLastUpdateTime)
-      {
-        var updateStatusPanel = domConstruct.create("div");
-        var updateTimeLabel = domConstruct.create("span", {innerHTML: "Update time: ", "class": "formLabel-labelCell", "style": "padding-right: 5px;padding-left: 5px"}, updateStatusPanel);
-        var updateTimeLabelPreferredTZ = domConstruct.create("span", {innerHTML: "Preferred timezone:", "style": "padding-right: 5px"}, updateStatusPanel);
-        var updateTimePreferredTZ = domConstruct.create("span", {"style": "padding-right: 5px"}, updateStatusPanel);
-        var updateTimeLabelBrowserTZ = domConstruct.create("span", {innerHTML: "Browser timezone:", "style": "padding-right: 5px"}, updateStatusPanel);
-        var updateTimeBrowserTZ = domConstruct.create("span", {"style": "padding-right: 5px"}, updateStatusPanel);
-
-        var userPreferences = this.userPreferences;
-        var lastUpdateTimeUpdater = function(data)
-        {
-          var userTimeZone = userPreferences.timeZone;
-          var displayStyle = userTimeZone? "inline" : "none";
-          updateTimeLabelPreferredTZ.style.display = displayStyle;
-          updateTimePreferredTZ.style.display = displayStyle;
-          var formatOptions = {selector: "time", timePattern: "HH:mm:ss.SSS", appendTimeZone: true, addOffset: true};
-          var updateTime = new Date();
-          updateTimePreferredTZ.innerHTML = userPreferences.formatDateTime(updateTime.getTime(), formatOptions);
-          updateTimeBrowserTZ.innerHTML = locale.format(updateTime, formatOptions);
-        };
-
-        if (self.grid.updater.store)
-        {
-          // data have been already provided/or fetched
-          // set last update time to current time
-          lastUpdateTimeUpdater();
-        }
-
-        self.grid.updater.addOnUpdate(lastUpdateTimeUpdater);
-        domConstruct.place(updateStatusPanel, this.grid.viewsHeaderNode, "before");
-      }
-    },
-
-    _addRowLimitButton: function(defaulGridRowLimit)
-    {
-      var self = this;
-      this.setRowNumberLimitButton = new dijit.form.Button({
-        label: "Set Row Limit",
-        type: "button",
-        iconClass: "rowNumberLimitIcon",
-        title: "Set Row Number Limit"
-      });
-      this.setRowNumberLimitButton.set("title", "Set Row Number Limit (Current: " + defaulGridRowLimit +")");
-
-      this.setRowNumberLimitDialog = new RowNumberLimitDialog(this.grid.domNode, function(newLimit){
-        if (newLimit > 0 && self.grid.updater.appendLimit != newLimit )
-        {
-          self.grid.updater.appendLimit = newLimit;
-          self.grid.updater.performRefresh([]);
-          self.setRowNumberLimitButton.set("title", "Set Row Number Limit (Current: " + newLimit +")");
-        }
-      });
-
-      this.setRowNumberLimitButton.on("click", function(evt){
-        self.setRowNumberLimitDialog.showDialog(self.grid.updater.appendLimit);
-      });
-
-      this.filterBar.addChild(this.setRowNumberLimitButton);
-    },
-
-    _addColumnsButton: function()
-    {
-      var self = this;
-      this.columnDefDialog = new ColumnDefDialog({grid: this.grid});
-
-      this.columnDefButton = new dijit.form.Button({
-        label: "Display Columns",
-        type: "button",
-        iconClass: "columnDefDialogButtonIcon",
-        title: "Show/Hide Columns"
-      });
-
-      this.columnDefButton.on("click", function(e){
-        _stopEvent(e);
-        self.columnDefDialog.showDialog();
-      });
-
-      this.filterBar.addChild(this.columnDefButton);
-    },
-
-    _addFilteringTools: function(nls)
-    {
-      var self = this;
-
-      this.filterDefButton = new dijit.form.Button({
-        "class": "dojoxGridFBarBtn",
-        label: "Set Filter",
-        iconClass: "dojoxGridFBarDefFilterBtnIcon",
-        showLabel: "true",
-        title: "Define filter"
-      });
-
-      this.clearFilterButton = new dijit.form.Button({
-        "class": "dojoxGridFBarBtn",
-        label: "Clear filter",
-        iconClass: "dojoxGridFBarClearFilterButtontnIcon",
-        showLabel: "true",
-        title: "Clear filter",
-        disabled: true
-      });
-
-
-      this.filterDefButton.on("click", function(e){
-        _stopEvent(e);
-
-        // a bit of a hack to force dialog to rebuild the criteria controls in order to get rid from empty rule controls
-        self.filterDefDialog._criteriasChanged = true;
-        self.filterDefDialog.showDialog();
-      });
-
-      this.clearFilterButton.on("click", function(e){
-        _stopEvent(e);
-        if (self.ruleCountToConfirmClearFilter && self.filterDefDialog.getCriteria() >= self.ruleCountToConfirmClearFilter)
-        {
-          self.clearFilterDialog.show();
-        }
-        else
-        {
-          self.grid.layer("filter").filterDef(null);
-          self.toggleClearFilterBtn(true)
-        }
-      });
-
-      this.filterSummary = new FilterSummary({grid: this.grid, filterStatusTip: this.filterStatusTip, nls: nls});
-
-      this.filterBar.addChild(this.filterDefButton);
-      this.filterBar.addChild(this.clearFilterButton);
-
-      this.filterBar.addChild(new dijit.ToolbarSeparator());
-      this.filterBar.addChild(this.filterSummary, "last");
-      this.filterBar.getColumnIdx = function(coordX){return self.filterSummary._getColumnIdx(coordX);};
-
-    }
-  });
-});
\ No newline at end of file
+define(["dojo/_base/declare",
+        "dojo/_base/event",
+        "dojo/dom-construct",
+        "dojo/date/locale",
+        "dijit/form/Button",
+        "dijit/form/ToggleButton",
+        "qpid/common/grid/RowNumberLimitDialog",
+        "qpid/common/grid/ColumnDefDialog",
+        "qpid/common/grid/FilterSummary"],
+       function (declare, event, domConstruct, locale, Button, ToggleButton, RowNumberLimitDialog, ColumnDefDialog, FilterSummary)
+       {
+
+           var _stopEvent = function (evt)
+           {
+               try
+               {
+                   if (evt && evt.preventDefault)
+                   {
+                       event.stop(evt);
+                   }
+               }
+               catch (e)
+               {
+               }
+           };
+
+           return declare("qpid.common.grid.EnhancedFilterTools", null, {
+
+               grid: null,
+               filterBar: null,
+               filterStatusTip: null,
+               clearFilterDialog: null,
+               filterDefDialog: null,
+
+               columnDefDialog: null,
+               columnDefButton: null,
+               filterDefButton: null,
+               clearFilterButton: null,
+               filterSummary: null,
+               setRowNumberLimitButton: null,
+               setRowNumberLimitDialog: null,
+               refreshButton: null,
+               autoRefreshButton: null,
+
+               constructor: function (params)
+               {
+                   this.inherited(arguments);
+
+                   this.userPreferences = params.userPreferences;
+                   this.filterBar = params.toolbar;
+                   this.grid = params.grid;
+                   this.filterStatusTip = params.filterStatusTip;
+                   this.clearFilterDialog = params.clearFilterDialog;
+                   this.filterDefDialog = params.filterDefDialog;
+                   this.ruleCountToConfirmClearFilter = params.ruleCountToConfirmClearFilter;
+                   this.displayLastUpdateTime =
+                       params.hasOwnProperty("displayLastUpdateTime") ? params.displayLastUpdateTime : true;
+
+                   this._addRefreshButtons();
+                   this._addRowLimitButton(params.defaulGridRowLimit);
+                   this._addColumnsButton();
+
+                   if (!params.disableFiltering)
+                   {
+                       this._addFilteringTools(params.nls);
+                   }
+               },
+
+               toggleClearFilterBtn: function (clearFlag)
+               {
+                   var filterLayer = this.grid.layer("filter");
+                   var filterSet = filterLayer && filterLayer.filterDef && filterLayer.filterDef();
+                   this.clearFilterButton.set("disabled", !filterSet);
+               },
+
+               destroy: function ()
+               {
+                   this.inherited(arguments);
+
+                   if (this.columnDefDialog)
+                   {
+                       this.columnDefDialog.destroy();
+                       this.columnDefDialog = null;
+                   }
+                   if (this.columnDefButton)
+                   {
+                       this.columnDefButton.destroy();
+                       this.columnDefButton = null;
+                   }
+                   if (this.filterDefButton)
+                   {
+                       this.filterDefButton.destroy();
+                       this.filterDefButton = null;
+                   }
+                   if (this.clearFilterButton)
+                   {
+                       this.clearFilterButton.destroy();
+                       this.clearFilterButton = null;
+                   }
+                   if (this.filterSummary)
+                   {
+                       this.filterSummary.destroy();
+                       this.filterSummary = null;
+                   }
+                   if (this.setRowNumberLimitButton)
+                   {
+                       this.setRowNumberLimitButton.destroy();
+                       this.setRowNumberLimitButton = null;
+                   }
+                   if (this.setRowNumberLimitDialog)
+                   {
+                       this.setRowNumberLimitDialog.destroy();
+                       this.setRowNumberLimitDialog = null;
+                   }
+                   if (this.refreshButton)
+                   {
+                       this.refreshButton.destroy();
+                       this.refreshButton = null;
+                   }
+                   if (this.autoRefreshButton)
+                   {
+                       this.autoRefreshButton.destroy();
+                       this.autoRefreshButton = null;
+                   }
+
+                   this.grid = null;
+                   this.filterBar = null;
+                   this.filterStatusTip = null;
+                   this.clearFilterDialog = null;
+                   this.filterDefDialog = null;
+               },
+
+               _addRefreshButtons: function ()
+               {
+                   var self = this;
+                   this.refreshButton = new dijit.form.Button({
+                       label: "Refresh",
+                       type: "button",
+                       iconClass: "gridRefreshIcon",
+                       title: "Manual Refresh"
+                   });
+
+                   this.autoRefreshButton = new dijit.form.ToggleButton({
+                       label: "Auto Refresh",
+                       type: "button",
+                       iconClass: "gridAutoRefreshIcon",
+                       title: "Auto Refresh"
+                   });
+
+                   this.autoRefreshButton.on("change", function (value)
+                   {
+                       self.grid.updater.updatable = value;
+                       self.refreshButton.set("disabled", value);
+                   });
+
+                   this.refreshButton.on("click", function (value)
+                   {
+                       self.grid.updater.performUpdate();
+                   });
+
+                   this.filterBar.addChild(this.autoRefreshButton);
+                   this.filterBar.addChild(this.refreshButton);
+
+                   if (this.displayLastUpdateTime)
+                   {
+                       var updateStatusPanel = domConstruct.create("div");
+                       var updateTimeLabel = domConstruct.create("span",
+                                                                 {
+                                                                     innerHTML: "Update time: ",
+                                                                     "class": "formLabel-labelCell",
+                                                                     "style": "padding-right: 5px;padding-left: 5px"
+                                                                 },
+                                                                 updateStatusPanel);
+                       var updateTimeLabelPreferredTZ = domConstruct.create("span",
+                                                                            {
+                                                                                innerHTML: "Preferred timezone:",
+                                                                                "style": "padding-right: 5px"
+                                                                            },
+                                                                            updateStatusPanel);
+                       var updateTimePreferredTZ = domConstruct.create("span",
+                                                                       {"style": "padding-right: 5px"},
+                                                                       updateStatusPanel);
+                       var updateTimeLabelBrowserTZ = domConstruct.create("span",
+                                                                          {
+                                                                              innerHTML: "Browser timezone:",
+                                                                              "style": "padding-right: 5px"
+                                                                          },
+                                                                          updateStatusPanel);
+                       var updateTimeBrowserTZ = domConstruct.create("span",
+                                                                     {"style": "padding-right: 5px"},
+                                                                     updateStatusPanel);
+
+                       var userPreferences = this.userPreferences;
+                       var lastUpdateTimeUpdater = function (data)
+                       {
+                           var userTimeZone = userPreferences.timeZone;
+                           var displayStyle = userTimeZone ? "inline" : "none";
+                           updateTimeLabelPreferredTZ.style.display = displayStyle;
+                           updateTimePreferredTZ.style.display = displayStyle;
+                           var formatOptions = {
+                               selector: "time",
+                               timePattern: "HH:mm:ss.SSS",
+                               appendTimeZone: true,
+                               addOffset: true
+                           };
+                           var updateTime = new Date();
+                           updateTimePreferredTZ.innerHTML =
+                               userPreferences.formatDateTime(updateTime.getTime(), formatOptions);
+                           updateTimeBrowserTZ.innerHTML = locale.format(updateTime, formatOptions);
+                       };
+
+                       if (self.grid.updater.store)
+                       {
+                           // data have been already provided/or fetched
+                           // set last update time to current time
+                           lastUpdateTimeUpdater();
+                       }
+
+                       self.grid.updater.addOnUpdate(lastUpdateTimeUpdater);
+                       domConstruct.place(updateStatusPanel, this.grid.viewsHeaderNode, "before");
+                   }
+               },
+
+               _addRowLimitButton: function (defaulGridRowLimit)
+               {
+                   var self = this;
+                   this.setRowNumberLimitButton = new dijit.form.Button({
+                       label: "Set Row Limit",
+                       type: "button",
+                       iconClass: "rowNumberLimitIcon",
+                       title: "Set Row Number Limit"
+                   });
+                   this.setRowNumberLimitButton.set("title",
+                                                    "Set Row Number Limit (Current: " + defaulGridRowLimit + ")");
+
+                   this.setRowNumberLimitDialog = new RowNumberLimitDialog(this.grid.domNode, function (newLimit)
+                   {
+                       if (newLimit > 0 && self.grid.updater.appendLimit != newLimit)
+                       {
+                           self.grid.updater.appendLimit = newLimit;
+                           self.grid.updater.performRefresh([]);
+                           self.setRowNumberLimitButton.set("title",
+                                                            "Set Row Number Limit (Current: " + newLimit + ")");
+                       }
+                   });
+
+                   this.setRowNumberLimitButton.on("click", function (evt)
+                   {
+                       self.setRowNumberLimitDialog.showDialog(self.grid.updater.appendLimit);
+                   });
+
+                   this.filterBar.addChild(this.setRowNumberLimitButton);
+               },
+
+               _addColumnsButton: function ()
+               {
+                   var self = this;
+                   this.columnDefDialog = new ColumnDefDialog({grid: this.grid});
+
+                   this.columnDefButton = new dijit.form.Button({
+                       label: "Display Columns",
+                       type: "button",
+                       iconClass: "columnDefDialogButtonIcon",
+                       title: "Show/Hide Columns"
+                   });
+
+                   this.columnDefButton.on("click", function (e)
+                   {
+                       _stopEvent(e);
+                       self.columnDefDialog.showDialog();
+                   });
+
+                   this.filterBar.addChild(this.columnDefButton);
+               },
+
+               _addFilteringTools: function (nls)
+               {
+                   var self = this;
+
+                   this.filterDefButton = new dijit.form.Button({
+                       "class": "dojoxGridFBarBtn",
+                       label: "Set Filter",
+                       iconClass: "dojoxGridFBarDefFilterBtnIcon",
+                       showLabel: "true",
+                       title: "Define filter"
+                   });
+
+                   this.clearFilterButton = new dijit.form.Button({
+                       "class": "dojoxGridFBarBtn",
+                       label: "Clear filter",
+                       iconClass: "dojoxGridFBarClearFilterButtontnIcon",
+                       showLabel: "true",
+                       title: "Clear filter",
+                       disabled: true
+                   });
+
+                   this.filterDefButton.on("click", function (e)
+                   {
+                       _stopEvent(e);
+
+                       // a bit of a hack to force dialog to rebuild the criteria controls in order to get rid from empty rule controls
+                       self.filterDefDialog._criteriasChanged = true;
+                       self.filterDefDialog.showDialog();
+                   });
+
+                   this.clearFilterButton.on("click", function (e)
+                   {
+                       _stopEvent(e);
+                       if (self.ruleCountToConfirmClearFilter && self.filterDefDialog.getCriteria()
+                                                                 >= self.ruleCountToConfirmClearFilter)
+                       {
+                           self.clearFilterDialog.show();
+                       }
+                       else
+                       {
+                           self.grid.layer("filter").filterDef(null);
+                           self.toggleClearFilterBtn(true)
+                       }
+                   });
+
+                   this.filterSummary = new FilterSummary({
+                       grid: this.grid,
+                       filterStatusTip: this.filterStatusTip,
+                       nls: nls
+                   });
+
+                   this.filterBar.addChild(this.filterDefButton);
+                   this.filterBar.addChild(this.clearFilterButton);
+
+                   this.filterBar.addChild(new dijit.ToolbarSeparator());
+                   this.filterBar.addChild(this.filterSummary, "last");
+                   this.filterBar.getColumnIdx = function (coordX)
+                   {
+                       return self.filterSummary._getColumnIdx(coordX);
+                   };
+
+               }
+           });
+       });
\ No newline at end of file

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js?rev=1741609&r1=1741608&r2=1741609&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/FilterSummary.js Fri Apr 29 11:04:40 2016
@@ -19,155 +19,186 @@
  *
  */
 
-define([
-  "dojo/_base/declare",
-  "dojo/_base/lang",
-  "dojo/_base/html",
-  "dojo/query",
-  "dojo/dom-construct",
-  "dojo/string",
-  "dojo/on",
-  "dijit/_WidgetBase"
-], function(declare, lang, html, query, domConstruct, string, on, _WidgetBase){
-
-return declare("qpid.common.grid.FilterSummary", [_WidgetBase], {
-
-    domNode: null,
-    itemName: null,
-    filterStatusTip: null,
-    grid: null,
-    _handle_statusTooltip: null,
-    _timeout_statusTooltip: 300,
-    _nls: null,
-
-    constructor: function(params)
-    {
-      this.inherited(arguments);
-      this.itemName = params.itemsName;
-      this.initialize(params.filterStatusTip, params.grid);
-      this._nls = params.nls;
-    },
-
-    buildRendering: function(){
-      this.inherited(arguments);
-      var itemsName = this.itemName || this._nls["defaultItemsName"];
-      var message = string.substitute(this._nls["filterBarMsgNoFilterTemplate"], [0, itemsName ]);
-      this.domNode = domConstruct.create("span", {innerHTML: message, "class": "dijit dijitReset dijitInline dijitButtonInline", role: "presentation" });
-    },
-
-    postCreate: function(){
-      this.inherited(arguments);
-      on(this.domNode, "mouseenter", lang.hitch(this, this._onMouseEnter));
-      on(this.domNode, "mouseleave", lang.hitch(this, this._onMouseLeave));
-      on(this.domNode, "mousemove", lang.hitch(this, this._onMouseMove));
-    },
-
-    destroy: function()
-    {
-      this.inherited(arguments);
-      this.itemName = null;
-      this.filterStatusTip = null;
-      this.grid = null;
-      this._handle_statusTooltip = null;
-      this._filteredClass = null;
-      this._nls = null;
-    },
-
-    initialize: function(filterStatusTip, grid)
-    {
-      this.filterStatusTip = filterStatusTip;
-      this.grid = grid;
-      if (this.grid)
-      {
-        var filterLayer = grid.layer("filter");
-        this.connect(filterLayer, "onFiltered", this.onFiltered);
-      }
-    },
-
-    onFiltered: function(filteredSize, originSize)
-    {
-      try
-      {
-        var itemsName = this.itemName || this._nls["defaultItemsName"],
-          msg = "", g = this.grid,
-          filterLayer = g.layer("filter");
-        if(filterLayer.filterDef()){
-          msg = string.substitute(this._nls["filterBarMsgHasFilterTemplate"], [filteredSize, originSize, itemsName]);
-        }else{
-          msg = string.substitute(this._nls["filterBarMsgNoFilterTemplate"], [originSize, itemsName]);
-        }
-        this.domNode.innerHTML = msg;
-      }
-      catch(e)
-      {
-        // swallow and log exception
-        // otherwise grid rendering is screwed
-        console.error(e);
-      }
-    },
-
-    _getColumnIdx: function(coordX){
-      var headers = query("[role='columnheader']", this.grid.viewsHeaderNode);
-      var idx = -1;
-      for(var i = headers.length - 1; i >= 0; --i){
-        var coord = html.position(headers[i]);
-        if(coordX >= coord.x && coordX < coord.x + coord.w){
-          idx = i;
-          break;
-        }
-      }
-      if(idx >= 0 && this.grid.layout.cells[idx].filterable !== false){
-        return idx;
-      }else{
-        return -1;
-      }
-    },
-
-    _setStatusTipTimeout: function(){
-        this._clearStatusTipTimeout();
-        this._handle_statusTooltip = setTimeout(lang.hitch(this,this._showStatusTooltip),this._timeout_statusTooltip);
-    },
-
-    _clearStatusTipTimeout: function(){
-      if (this._handle_statusTooltip){
-        clearTimeout(this._handle_statusTooltip);
-      }
-      this._handle_statusTooltip = null;
-    },
-
-    _showStatusTooltip: function(){
-        this._handle_statusTooltip = null;
-        if(this.filterStatusTip){
-            this.filterStatusTip.showDialog(this._tippos.x, this._tippos.y, this._getColumnIdx(this._tippos.x));
-        }
-    },
-
-    _updateTipPosition: function(evt){
-        this._tippos = {
-            x: evt.pageX,
-            y: evt.pageY
-        };
-     },
-
-     _onMouseEnter: function(e){
-         this._updateTipPosition(e);
-         if(this.filterStatusTip){
-           this._setStatusTipTimeout();
-         }
-     },
-
-     _onMouseMove: function(e){
-       if(this.filterStatusTip){
-         this._setStatusTipTimeout();
-         if(this._handle_statusTooltip){
-             this._updateTipPosition(e);
-         }
-       }
-    },
-
-    _onMouseLeave: function(e){
-        this._clearStatusTipTimeout();
-    }
-  });
+define(["dojo/_base/declare",
+        "dojo/_base/lang",
+        "dojo/_base/html",
+        "dojo/query",
+        "dojo/dom-construct",
+        "dojo/string",
+        "dojo/on",
+        "dijit/_WidgetBase"], function (declare, lang, html, query, domConstruct, string, on, _WidgetBase)
+       {
+
+           return declare("qpid.common.grid.FilterSummary", [_WidgetBase], {
+
+               domNode: null,
+               itemName: null,
+               filterStatusTip: null,
+               grid: null,
+               _handle_statusTooltip: null,
+               _timeout_statusTooltip: 300,
+               _nls: null,
+
+               constructor: function (params)
+               {
+                   this.inherited(arguments);
+                   this.itemName = params.itemsName;
+                   this.initialize(params.filterStatusTip, params.grid);
+                   this._nls = params.nls;
+               },
+
+               buildRendering: function ()
+               {
+                   this.inherited(arguments);
+                   var itemsName = this.itemName || this._nls["defaultItemsName"];
+                   var message = string.substitute(this._nls["filterBarMsgNoFilterTemplate"], [0, itemsName]);
+                   this.domNode = domConstruct.create("span",
+                                                      {
+                                                          innerHTML: message,
+                                                          "class": "dijit dijitReset dijitInline dijitButtonInline",
+                                                          role: "presentation"
+                                                      });
+               },
+
+               postCreate: function ()
+               {
+                   this.inherited(arguments);
+                   on(this.domNode, "mouseenter", lang.hitch(this, this._onMouseEnter));
+                   on(this.domNode, "mouseleave", lang.hitch(this, this._onMouseLeave));
+                   on(this.domNode, "mousemove", lang.hitch(this, this._onMouseMove));
+               },
+
+               destroy: function ()
+               {
+                   this.inherited(arguments);
+                   this.itemName = null;
+                   this.filterStatusTip = null;
+                   this.grid = null;
+                   this._handle_statusTooltip = null;
+                   this._filteredClass = null;
+                   this._nls = null;
+               },
+
+               initialize: function (filterStatusTip, grid)
+               {
+                   this.filterStatusTip = filterStatusTip;
+                   this.grid = grid;
+                   if (this.grid)
+                   {
+                       var filterLayer = grid.layer("filter");
+                       this.connect(filterLayer, "onFiltered", this.onFiltered);
+                   }
+               },
+
+               onFiltered: function (filteredSize, originSize)
+               {
+                   try
+                   {
+                       var itemsName = this.itemName
+                                       || this._nls["defaultItemsName"], msg = "", g = this.grid, filterLayer = g.layer(
+                           "filter");
+                       if (filterLayer.filterDef())
+                       {
+                           msg = string.substitute(this._nls["filterBarMsgHasFilterTemplate"],
+                                                   [filteredSize, originSize, itemsName]);
+                       }
+                       else
+                       {
+                           msg = string.substitute(this._nls["filterBarMsgNoFilterTemplate"], [originSize, itemsName]);
+                       }
+                       this.domNode.innerHTML = msg;
+                   }
+                   catch (e)
+                   {
+                       // swallow and log exception
+                       // otherwise grid rendering is screwed
+                       console.error(e);
+                   }
+               },
+
+               _getColumnIdx: function (coordX)
+               {
+                   var headers = query("[role='columnheader']", this.grid.viewsHeaderNode);
+                   var idx = -1;
+                   for (var i = headers.length - 1; i >= 0; --i)
+                   {
+                       var coord = html.position(headers[i]);
+                       if (coordX >= coord.x && coordX < coord.x + coord.w)
+                       {
+                           idx = i;
+                           break;
+                       }
+                   }
+                   if (idx >= 0 && this.grid.layout.cells[idx].filterable !== false)
+                   {
+                       return idx;
+                   }
+                   else
+                   {
+                       return -1;
+                   }
+               },
+
+               _setStatusTipTimeout: function ()
+               {
+                   this._clearStatusTipTimeout();
+                   this._handle_statusTooltip =
+                       setTimeout(lang.hitch(this, this._showStatusTooltip), this._timeout_statusTooltip);
+               },
+
+               _clearStatusTipTimeout: function ()
+               {
+                   if (this._handle_statusTooltip)
+                   {
+                       clearTimeout(this._handle_statusTooltip);
+                   }
+                   this._handle_statusTooltip = null;
+               },
+
+               _showStatusTooltip: function ()
+               {
+                   this._handle_statusTooltip = null;
+                   if (this.filterStatusTip)
+                   {
+                       this.filterStatusTip.showDialog(this._tippos.x,
+                                                       this._tippos.y,
+                                                       this._getColumnIdx(this._tippos.x));
+                   }
+               },
+
+               _updateTipPosition: function (evt)
+               {
+                   this._tippos = {
+                       x: evt.pageX,
+                       y: evt.pageY
+                   };
+               },
+
+               _onMouseEnter: function (e)
+               {
+                   this._updateTipPosition(e);
+                   if (this.filterStatusTip)
+                   {
+                       this._setStatusTipTimeout();
+                   }
+               },
+
+               _onMouseMove: function (e)
+               {
+                   if (this.filterStatusTip)
+                   {
+                       this._setStatusTipTimeout();
+                       if (this._handle_statusTooltip)
+                       {
+                           this._updateTipPosition(e);
+                       }
+                   }
+               },
+
+               _onMouseLeave: function (e)
+               {
+                   this._clearStatusTipTimeout();
+               }
+           });
 
-});
\ No newline at end of file
+       });
\ No newline at end of file




---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org