Commits

Sebastian Sdorra committed bc1f9b9

store expanded/collapsed state of groupingviews across sessions

  • Participants
  • Parent commits 93109ec
  • Branches issue-268

Comments (0)

Files changed (3)

File scm-webapp/src/main/webapp/index.mustache

     <script type="text/javascript" src="resources/js/override/ext.data.store.js"></script>
     <script type="text/javascript" src="resources/js/override/ext.grid.columnmodel.js"></script>
     <script type="text/javascript" src="resources/js/override/ext.grid.gridpanel.js"></script>
+    <script type="text/javascript" src="resources/js/override/ext.grid.groupingview.js"></script>
 
     <!-- sonia.navigation -->
     <script type="text/javascript" src="resources/js/navigation/sonia.navigation.js"></script>

File scm-webapp/src/main/webapp/resources/js/override/ext.grid.gridpanel.js

  *
  */
 
+Ext.grid.GridPanel.prototype.applyStateExt = Ext.grid.GridPanel.prototype.applyState;
+Ext.grid.GridPanel.prototype.getStateExt = Ext.grid.GridPanel.prototype.getState;
+
 Ext.override(Ext.grid.GridPanel,{
 
+  stateEvents : ['columnmove', 'columnresize', 'sortchange', 'groupchange', 'toggleGroup'],
+
   addColumn: function(field, column, colIndex){
     if(!column){
       if(field.dataIndex){
     if(colIndex >= 0){
       this.colModel.removeColumn(colIndex);
     }
+  },
+  
+  applyState: function(state){
+    var view = this.getView();
+    if (view && view.applyState){
+      var groups = state.groups;
+      if (groups){
+        view.applyState(groups);
+      }
+    }
+    this.applyStateExt(state);
+  },
+  
+  getState: function(){
+    var state = this.getStateExt();
+    var view = this.getView();
+    if (view && view.getState){
+      state.groups = view.getState();
+    }
+    console.debug('get state');
+    console.debug(state);
+    return state;
   }
   
 });

File scm-webapp/src/main/webapp/resources/js/override/ext.grid.groupingview.js

+/* *
+ * Copyright (c) 2010, Sebastian Sdorra
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of SCM-Manager; nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * http://bitbucket.org/sdorra/scm-manager
+ * 
+ */
+
+Ext.grid.GroupingView.prototype.initTemplatesExt = Ext.grid.GroupingView.prototype.initTemplates;
+Ext.grid.GroupingView.prototype.toggleGroupExt = Ext.grid.GroupingView.prototype.toggleGroup;
+
+Ext.override(Ext.grid.GroupingView,{
+  
+  storedState: null,
+  
+  initTemplates : function(){
+    this.initTemplatesExt();
+    if (this.storedState){
+      this.state = this.storedState;
+    }
+  },
+  
+  toggleGroup : function(group, expanded){
+    this.toggleGroupExt(group, expanded);
+    this.grid.fireEvent('toggleGroup', group, expanded);
+  },
+  
+  getState: function(){
+    return this.state;
+  },
+  
+  applyState: function(state){
+    this.storedState = state;
+  }
+  
+});