+ buttonPane.add(this.saveButton);
+
+ this.cancelButton = new qx.ui.form.Button("Cancel");
+ this.cancelButton.set({
+ show:"label",
+ margin:2,
+ toolTip :new qx.ui.tooltip.ToolTip("Cancel changes"),
+ visibility : "excluded"
+ });
+ buttonPane.add(this.cancelButton);
+
+ var listener = function(){
+ this.setGuiMode(this.initialState);
+ };
+ this.saveButton.addListener("execute", listener, this);
+ this.cancelButton.addListener("execute", listener, this);
+
+ this.table.addListener("cellDblclick", function(cellEvent){
+ this.setGuiMode("edit");
+ }, this);
+
+ this.setGuiMode("clear");
+ },
+
+ _applyGuiMode : function(guiMode, previousMode){
+ var selectionModel = this.table.getSelectionModel();
+ if(!this.usersAppletReference){
+ var vManager = org.argeo.ria.components.ViewsManager.getInstance();
+ this.usersAppletReference = vManager.getViewPaneById("users").getContent();
+ }
+
+ this.saveButton.setVisibility((guiMode=="edit"?"visible":"excluded"));
+ this.cancelButton.setVisibility((guiMode=="edit"?"visible":"excluded"));
+ this.table.setEnabled((guiMode=="edit"?false:true));
+ this.toggleButton.setVisibility((guiMode=="edit"?"excluded":"visible"));
+
+ if(guiMode == "filter"){
+ if(this.usersAppletReference){
+ this.usersAppletReference.setGuiMode(("filter"));
+ var viewSel = this.usersAppletReference.getViewSelection();
+ viewSel.removeListener("changeSelection", this.monitorChooserSelectionChanges, this);
+ }
+ selectionModel.addListener("changeSelection", this.selectionToFilter, this);
+ selectionModel.setSelectionMode(qx.ui.table.selection.Model.MULTIPLE_INTERVAL_SELECTION_TOGGLE);
+ this.selectionToFilter();
+ }else if(guiMode == "edit"){
+ if(!this.usersAppletReference) return;
+ this.initialState = previousMode;
+ if(previousMode == "filter"){
+ this.usersAppletReference.setGuiMode(("clear"));
+ selectionModel.removeListener("changeSelection", this.selectionToFilter, this);
+ }
+ this.usersAppletReference.setGuiMode(("chooser"));
+ this.selectionToChooser(); // Warning, to be called before calling listener!
+ var viewSel = this.usersAppletReference.getViewSelection();
+ viewSel.addListener("changeSelection", this.monitorChooserSelectionChanges, this);
+ }else if(guiMode == "clear"){
+ if(this.usersAppletReference){
+ this.usersAppletReference.setGuiMode(("clear"));
+ var viewSel = this.usersAppletReference.getViewSelection();
+ viewSel.removeListener("changeSelection", this.monitorChooserSelectionChanges, this);
+ }
+ this.table.setEnabled(true);
+ selectionModel.removeListener("changeSelection", this.selectionToFilter, this);
+ selectionModel.setSelectionMode(qx.ui.table.selection.Model.SINGLE_SELECTION);
+ }
+ },
+
+ monitorChooserSelectionChanges : function(event){
+ if(!this.usersAppletReference || this.getChooserSelectionModified()) return;
+ var initialSelection = this.getChooserOriginalSelection();
+ var crtSelection = event.getTarget().getNodes();
+ if(!qx.lang.Array.equals(initialSelection.sort(), crtSelection.sort())){
+ this.setChooserSelectionModified(true);
+ console.log("Changed!");
+ this.saveButton.setEnabled(true);
+ }
+ },
+
+ selectionToFilter : function(){
+ if(!this.usersAppletReference) return;
+ var selectionModel = this.table.getSelectionModel();
+ if(!selectionModel.getSelectedCount()){
+ this.usersAppletReference.resetHiddenRows();
+ return;
+ }
+ this.usersAppletReference.applyFilter(this._selectionToValues(selectionModel), "roles", true);
+ },
+
+ selectionToChooser : function(){
+ if(!this.usersAppletReference) return;
+ var selectionModel = this.table.getSelectionModel();
+ if(!selectionModel.getSelectedCount()){
+ this.usersAppletReference.resetHiddenRows();
+ return;
+ }
+ var uniqueValue = this._selectionToValues(selectionModel)[0];
+ var initSelection = this.rolesUsersStub[uniqueValue];
+ this.setChooserOriginalSelection(initSelection);
+ this.setChooserSelectionModified(false);
+ this.usersAppletReference.applySelection(initSelection, "username");
+ this.saveButton.setEnabled(false);
+ },
+
+ _selectionToValues : function(selectionModel, viewSelection){
+ if(viewSelection){
+ viewSelection.setBatchMode(true);
+ viewSelection.clear();
+ }
+ if(!selectionModel.getSelectedCount()) return [];
+ var ranges = selectionModel.getSelectedRanges();
+ var values = [];
+ for(var i=0;i<ranges.length;i++){
+ for(var j=ranges[i].minIndex;j<=ranges[i].maxIndex;j++){
+ values.push(this.tableModel.getData()[j][0]);
+ if(viewSelection){
+ viewSelection.addNode(this.tableModel.getData()[j][0]);
+ }
+ }
+ }
+ if(viewSelection){
+ viewSelection.setBatchMode(false);
+ }
+ return values;