X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=security%2Fruntime%2Forg.argeo.security.ria%2Fsrc%2Fargeo-ria-lib%2Fsecurity%2Fclass%2Forg%2Fargeo%2Fsecurity%2Fria%2FRolesApplet.js;h=f2f488d31a3220a38d4a93f35a773b2a2e992522;hb=f0037ce21f65a9ae5fb87cb706398a83f5b42880;hp=3d6ad869fb85b2a757148d6fa5994c6b43886e04;hpb=30d0df2528e69ed0a0f8fb873fd8d591db949697;p=lgpl%2Fargeo-commons.git diff --git a/security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/RolesApplet.js b/security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/RolesApplet.js index 3d6ad869f..f2f488d31 100644 --- a/security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/RolesApplet.js +++ b/security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/RolesApplet.js @@ -27,12 +27,70 @@ qx.Class.define("org.argeo.security.ria.RolesApplet", * Commands definition, see {@link org.argeo.ria.event.CommandsManager#definitions} */ commands : { - init : {} + init : { + "new_role" : { + label : "Create Role", + icon : "org.argeo.security.ria/list-add.png", + shortcut : "Control+n", + enabled : true, + menu : "Roles", + toolbar : "role", + callback : function(e){ + // Prompt for new name + }, + command : null + }, + "delete_role" : { + label : "Delete Role", + icon : "org.argeo.security.ria/list-remove.png", + shortcut : "Control+s", + enabled : true, + menu : "Roles", + toolbar : "role", + callback : function(e){ + // Call service to delete + var crtUsers = this.getViewSelection().getNodes(); + for(var i=0;i 1)); + }, + command : null + } + } }, viewSelection : { nullable:false, check:"org.argeo.ria.components.ViewSelection" }, + guiMode : { + apply : "_applyGuiMode" + }, + chooserOriginalSelection : {}, + chooserSelectionModified : { + init:false, + event : "chooserSelectionWasModified" + }, instanceId : {init:""}, instanceLabel : {init:""} }, @@ -53,13 +111,178 @@ qx.Class.define("org.argeo.security.ria.RolesApplet", return new qx.ui.table.columnmodel.Resize(obj) } }); - this.table.setStatusBarVisible(false); + this.table.setStatusBarVisible(false); + this.table.setShowCellFocusIndicator(false); + this.table.setColumnVisibilityButtonVisible(false); + this.table.highlightFocusedRow(false); viewPane.add(this.table, {height:"100%"}); + this.table.getSelectionModel().addListener("changeSelection", function(){ + this._selectionToValues(this.table.getSelectionModel(), this.getViewSelection()); + }, this); + - var selectionModel = this.table.getSelectionModel(); - selectionModel.addListener("changeSelection", function(){ - var ranges = selectionModel.getSelectedRanges(); + this.rolesUsersStub = {"ROLE_ADMIN":["root","mbaudier"],"ROLE_USER":["mbaudier","cdujeu"]}; + + var buttonPane = new qx.ui.container.Composite(new qx.ui.layout.HBox(2, "right")); + this.getView().header.setPadding(0); + if(this.getView().headerLabel) this.getView().headerLabel.setMargin(8); + this.getView().header.add(buttonPane, {edge:"east"}); + + this.toggleButton = new qx.ui.form.ToggleButton("Filter", "org.argeo.security.ria/go-next.png"); + this.toggleButton.set({ + show:"icon", + margin:2, + toolTip :new qx.ui.tooltip.ToolTip("Apply automatic filtering on Users list") + }); + buttonPane.add(this.toggleButton); + + // TOGGLE THE GUI MODES + this.toggleButton.addListener("changeChecked", function(event){ + this.setGuiMode(event.getData()?"filter":"clear"); + }, this); + + this.saveButton = new qx.ui.form.Button("Save", "org.argeo.security.ria/document-save.png"); + this.saveButton.set({ + show:"icon", + margin:2, + toolTip :new qx.ui.tooltip.ToolTip("Save changes"), + visibility : "excluded" }); + buttonPane.add(this.saveButton); + + this.cancelButton = new qx.ui.form.Button("Cancel", "org.argeo.security.ria/window-close.png"); + this.cancelButton.set({ + show:"icon", + margin:2, + toolTip :new qx.ui.tooltip.ToolTip("Cancel changes"), + visibility : "excluded" + }); + buttonPane.add(this.cancelButton); + + this.saveButton.addListener("execute", function(){ + alert("Saving changes..."); + this.setGuiMode(this.initialState); + }, this); + this.cancelButton.addListener("execute", function(){ + if(!this.getChooserSelectionModified()){ + this.setGuiMode(this.initialState); + return; + } + var modal = new org.argeo.ria.components.Modal("Warning"); + modal.addConfirm("There are unsaved changes!\n Are you sure you want to close?"); + modal.addListener("ok", function(){ + this.setGuiMode(this.initialState); + }, this); + modal.attachAndShow(); + }, 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