1 if(typeof Rico=='undefined')
\r
2 throw("GridMenu requires the Rico JavaScript framework");
\r
6 * Standard menu for LiveGrid
\r
8 Rico.GridMenu = Class.create();
10 Rico.GridMenu.prototype = {
12 initialize: function(options) {
15 dataMenuHandler : null // put custom items on the menu
\r
17 Object.extend(this.options, options || {});
\r
18 Object.extend(this, new Rico.Menu(this.options));
\r
19 this.sortmenu = new Rico.Menu(this.options);
\r
20 this.filtermenu = new Rico.Menu(this.options);
\r
21 this.exportmenu = new Rico.Menu(this.options);
\r
22 this.hideshowmenu = new Rico.Menu(this.options);
\r
24 this.sortmenu.createDiv();
\r
25 this.filtermenu.createDiv();
\r
26 this.exportmenu.createDiv();
\r
27 this.hideshowmenu.createDiv();
\r
30 // Build context menu for grid
\r
31 buildGridMenu: function(r,c) {
\r
33 var totrows=this.liveGrid.buffer.totalRows;
\r
34 var onBlankRow=r >= totrows;
\r
35 var column=this.liveGrid.columns[c];
\r
36 if (this.options.dataMenuHandler) {
\r
37 var showMenu=this.options.dataMenuHandler(this.liveGrid,r,c,onBlankRow);
\r
38 if (!showMenu) return false;
\r
41 // menu items for sorting
\r
42 if (column.sortable && totrows>0) {
\r
43 this.sortmenu.clearMenu();
\r
44 this.addSubMenuItem(RicoTranslate.getPhrase("Sort by")+": "+column.displayName, this.sortmenu, false);
\r
45 this.sortmenu.addMenuItem("Ascending", column.sortAsc.bind(column), true);
\r
46 this.sortmenu.addMenuItem("Descending", column.sortDesc.bind(column), true);
\r
49 // menu items for filtering
\r
50 if (column.canFilter() && (!onBlankRow || column.filterType == Rico.TableColumn.USERFILTER)) {
\r
51 this.filtermenu.clearMenu();
\r
52 this.addSubMenuItem(RicoTranslate.getPhrase("Filter by")+": "+column.displayName, this.filtermenu, false);
\r
53 column.userFilter=column.getValue(r);
\r
54 if (column.filterType == Rico.TableColumn.USERFILTER) {
\r
55 this.filtermenu.addMenuItem("Remove filter", column.setUnfiltered.bind(column), true);
\r
56 this.filtermenu.addMenuItem("Refresh", this.liveGrid.filterHandler.bind(this.liveGrid), true);
\r
57 if (column.filterOp=='LIKE')
\r
58 this.filtermenu.addMenuItem("Change keyword...", column.setFilterKW.bind(column), true);
\r
59 if (column.filterOp=='NE' && !onBlankRow)
\r
60 this.filtermenu.addMenuItem("Exclude this value also", column.addFilterNE.bind(column), true);
\r
61 } else if (!onBlankRow) {
\r
62 this.filtermenu.addMenuItem("Include only this value", column.setFilterEQ.bind(column), true);
\r
63 this.filtermenu.addMenuItem("Greater than or equal to this value", column.setFilterGE.bind(column), column.userFilter!='');
\r
64 this.filtermenu.addMenuItem("Less than or equal to this value", column.setFilterLE.bind(column), column.userFilter!='');
\r
66 this.filtermenu.addMenuItem("Contains keyword...", column.setFilterKW.bind(column), true);
\r
67 this.filtermenu.addMenuItem("Exclude this value", column.setFilterNE.bind(column), true);
\r
69 if (this.liveGrid.filterCount() > 0)
\r
70 this.filtermenu.addMenuItem("Remove all filters", this.liveGrid.clearFilters.bind(this.liveGrid), true);
\r
73 // menu items for Print/Export
\r
74 if (this.liveGrid.options.maxPrint > 0 && totrows>0) {
\r
75 this.exportmenu.clearMenu();
\r
76 this.addSubMenuItem('Print\t/Export',this.exportmenu);
\r
77 this.exportmenu.addMenuItem("Visible rows to web page", this.liveGrid.printVisible.bind(this.liveGrid,'plain'), true);
\r
78 this.exportmenu.addMenuItem("All rows to web page", this.liveGrid.printAll.bind(this.liveGrid,'plain'), this.liveGrid.buffer.totalRows <= this.liveGrid.options.maxPrint);
\r
79 if (Prototype.Browser.IE) {
\r
80 this.exportmenu.addMenuBreak();
\r
81 this.exportmenu.addMenuItem("Visible rows to spreadsheet", this.liveGrid.printVisible.bind(this.liveGrid,'owc'), true);
\r
82 this.exportmenu.addMenuItem("All rows to spreadsheet", this.liveGrid.printAll.bind(this.liveGrid,'owc'), this.liveGrid.buffer.totalRows <= this.liveGrid.options.maxPrint);
\r
86 // menu items for hide/unhide
\r
87 var hiddenCols=this.liveGrid.listInvisible();
\r
88 for (var showableCnt=0,x=0; x<hiddenCols.length; x++)
\r
89 if (hiddenCols[x].canHideShow()) showableCnt++;
\r
90 if (showableCnt > 0 || column.canHideShow()) {
\r
91 this.hideshowmenu.clearMenu();
\r
92 this.addSubMenuItem('Hide\t/Show',this.hideshowmenu);
\r
93 var visibleCnt=this.liveGrid.columns.length-hiddenCols.length;
\r
94 var enabled=(visibleCnt>1 && column.visible && column.canHideShow());
\r
95 this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Hide')+': '+column.displayName, column.hideColumn.bind(column), enabled);
\r
96 for (var cnt=0,x=0; x<hiddenCols.length; x++) {
\r
97 if (hiddenCols[x].canHideShow()) {
\r
98 if (cnt++==0) this.hideshowmenu.addMenuBreak();
\r
99 this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Show')+': '+hiddenCols[x].displayName, hiddenCols[x].showColumn.bind(hiddenCols[x]));
\r
102 if (hiddenCols.length > 1)
\r
103 this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Show All'), this.liveGrid.showAll.bind(this.liveGrid));
\r
110 Rico.includeLoaded('ricoLiveGridMenu.js');