/* * (c) 2005-2009 Richard Cowin (http://openrico.org) * (c) 2005-2009 Matt Brown (http://dowdybrown.com) * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this * file except in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ if(typeof Rico=='undefined') throw("GridMenu requires the Rico JavaScript framework"); /** * Standard menu for LiveGrid */ Rico.GridMenu = function(options) { this.initialize(options); }; Rico.GridMenu.prototype = { initialize: function(options) { this.options = { width : '18em', dataMenuHandler : null // put custom items on the menu }; Rico.extend(this.options, options || {}); Rico.extend(this, new Rico.Menu(this.options)); this.sortmenu = new Rico.Menu({ width: '15em' }); this.filtermenu = new Rico.Menu({ width: '22em' }); this.exportmenu = new Rico.Menu({ width: '24em' }); this.hideshowmenu = new Rico.Menu({ width: '22em' }); this.createDiv(); this.sortmenu.createDiv(); this.filtermenu.createDiv(); this.exportmenu.createDiv(); this.hideshowmenu.createDiv(); }, // Build context menu for grid buildGridMenu: function(r,c) { this.clearMenu(); var livegrid=this.liveGrid; var buffer=livegrid.buffer; var totrows=buffer.totalRows; var maxprint=livegrid.options.maxPrint; var onBlankRow=(r >= totrows); var column=livegrid.columns[c]; if (this.options.dataMenuHandler) { var showDefaultMenu=this.options.dataMenuHandler(livegrid,r,c,onBlankRow); if (!showDefaultMenu) return (this.itemCount > 0); } // menu items for sorting if (column.sortable && totrows>0) { this.sortmenu.clearMenu(); this.addSubMenuItem(Rico.getPhraseById("gridmenuSortBy",column.displayName), this.sortmenu, false); this.sortmenu.addMenuItemId("gridmenuSortAsc", function() { column.sortAsc(); }, true); this.sortmenu.addMenuItemId("gridmenuSortDesc", function() { column.sortDesc(); }, true); } // menu items for filtering this.filtermenu.clearMenu(); if (column.canFilter()) { this.addSubMenuItem(Rico.getPhraseById("gridmenuFilterBy",column.displayName), this.filtermenu, false); if (!column.format.filterUI && (!onBlankRow || column.filterType == Rico.ColumnConst.USERFILTER)) { column.userFilter=column.getValue(r); if (column.filterType == Rico.ColumnConst.USERFILTER) { this.filtermenu.addMenuItemId("gridmenuRemoveFilter", function() { column.setUnfiltered(false); }, true); if (column.filterOp=='LIKE') this.filtermenu.addMenuItemId("gridmenuChgKeyword", function() { livegrid.openKeyword(c); }, true); if (column.filterOp=='NE' && !onBlankRow) this.filtermenu.addMenuItemId("gridmenuExcludeAlso", function() { column.addFilterNE(); }, true); } else if (!onBlankRow) { this.filtermenu.addMenuItemId("gridmenuInclude", function() { column.setFilterEQ(); }, true); this.filtermenu.addMenuItemId("gridmenuGreaterThan", function() { column.setFilterGE(); }, column.userFilter!=''); this.filtermenu.addMenuItemId("gridmenuLessThan", function() { column.setFilterLE(); }, column.userFilter!=''); if (column.isText) this.filtermenu.addMenuItemId("gridmenuContains", function() { livegrid.openKeyword(c); }, true); this.filtermenu.addMenuItemId("gridmenuExclude", function() { column.setFilterNE(); }, true); } } if (livegrid.filterCount() > 0) { this.filtermenu.addMenuItemId("gridmenuRemoveAll", function() { livegrid.clearFilters(); }, true); } this.filtermenu.addMenuItemId("gridmenuRefresh", function() { livegrid.filterHandler(); }, true); } // menu items for Print/Export this.exportmenu.clearMenu(); if (maxprint > 0) { this.addSubMenuItem(Rico.getPhraseById('gridmenuExport'),this.exportmenu,false); if (buffer.printVisibleSQL && typeof(buffer.dataSource)=='string') { // SQL buffer this.exportmenu.addMenuItemId("gridmenuExportVis2Web", function() { buffer.printVisibleSQL('html'); }); this.exportmenu.addMenuItemId("gridmenuExportAll2Web", function() { buffer.printAllSQL('html'); }, buffer.totalRows <= maxprint); this.exportmenu.addMenuBreak(); this.exportmenu.addMenuItemId("gridmenuExportVis2SS", function() { buffer.printVisibleSQL('xl'); }); this.exportmenu.addMenuItemId("gridmenuExportAll2SS", function() { buffer.printAllSQL('xl'); }, buffer.totalRows <= maxprint); } else { // any other buffer this.addSubMenuItem(Rico.getPhraseById('gridmenuExport'),this.exportmenu,false); this.exportmenu.addMenuItemId("gridmenuExportVis2Web", function() { buffer.printVisible(); }); this.exportmenu.addMenuItemId("gridmenuExportAll2Web", function() { buffer.printAll(); }, buffer.totalRows <= maxprint); } } // menu items for hide/unhide var hiddenCols=livegrid.listInvisible(); for (var showableCnt=0,x=0; x 0 || column.canHideShow()) { this.hideshowmenu.clearMenu(); this.addSubMenuItem(Rico.getPhraseById('gridmenuHideShow'),this.hideshowmenu,false); this.hideshowmenu.addMenuItemId('gridmenuChooseCols', function() { livegrid.chooseColumns(); },true,false); var visibleCnt=livegrid.columns.length-hiddenCols.length; var enabled=(visibleCnt>1 && column.visible && column.canHideShow()); this.hideshowmenu.addMenuItem(Rico.getPhraseById('gridmenuHide',column.displayName), function() { column.hideColumn(); }, enabled); if (hiddenCols.length > 1) this.hideshowmenu.addMenuItemId('gridmenuShowAll', function() { livegrid.showAll(); }); } return true; } }