enhancements on changing permissions
git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace@91620 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
3f83870f01
commit
60426d513d
|
@ -71,6 +71,8 @@ import org.gcube.portlets.user.workspace.client.event.SearchTextEvent;
|
||||||
import org.gcube.portlets.user.workspace.client.event.SearchTextEventHandler;
|
import org.gcube.portlets.user.workspace.client.event.SearchTextEventHandler;
|
||||||
import org.gcube.portlets.user.workspace.client.event.SendMessageEvent;
|
import org.gcube.portlets.user.workspace.client.event.SendMessageEvent;
|
||||||
import org.gcube.portlets.user.workspace.client.event.SendMessageEventHandler;
|
import org.gcube.portlets.user.workspace.client.event.SendMessageEventHandler;
|
||||||
|
import org.gcube.portlets.user.workspace.client.event.SettingPermissionEvent;
|
||||||
|
import org.gcube.portlets.user.workspace.client.event.SettingPermissionEventHandler;
|
||||||
import org.gcube.portlets.user.workspace.client.event.TrashEvent;
|
import org.gcube.portlets.user.workspace.client.event.TrashEvent;
|
||||||
import org.gcube.portlets.user.workspace.client.event.TrashEvent.TRASHOPERATION;
|
import org.gcube.portlets.user.workspace.client.event.TrashEvent.TRASHOPERATION;
|
||||||
import org.gcube.portlets.user.workspace.client.event.TrashEventHandler;
|
import org.gcube.portlets.user.workspace.client.event.TrashEventHandler;
|
||||||
|
@ -83,6 +85,7 @@ import org.gcube.portlets.user.workspace.client.model.FileModel;
|
||||||
import org.gcube.portlets.user.workspace.client.model.FolderModel;
|
import org.gcube.portlets.user.workspace.client.model.FolderModel;
|
||||||
import org.gcube.portlets.user.workspace.client.model.ScopeModel;
|
import org.gcube.portlets.user.workspace.client.model.ScopeModel;
|
||||||
import org.gcube.portlets.user.workspace.client.view.WorskpacePortlet;
|
import org.gcube.portlets.user.workspace.client.view.WorskpacePortlet;
|
||||||
|
import org.gcube.portlets.user.workspace.client.view.dialog.DialogPermission;
|
||||||
import org.gcube.portlets.user.workspace.client.view.panels.GxtBorderLayoutPanel;
|
import org.gcube.portlets.user.workspace.client.view.panels.GxtBorderLayoutPanel;
|
||||||
import org.gcube.portlets.user.workspace.client.view.panels.GxtItemsPanel;
|
import org.gcube.portlets.user.workspace.client.view.panels.GxtItemsPanel;
|
||||||
import org.gcube.portlets.user.workspace.client.view.trash.WindowTrash;
|
import org.gcube.portlets.user.workspace.client.view.trash.WindowTrash;
|
||||||
|
@ -920,6 +923,36 @@ public class AppController implements SubscriberInterface {
|
||||||
loadBreadcrumbByFileModel(loadBreadcrumbEvent.getFileModel(), true);
|
loadBreadcrumbByFileModel(loadBreadcrumbEvent.getFileModel(), true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
eventBus.addHandler(SettingPermissionEvent.TYPE, new SettingPermissionEventHandler() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPermissionSetting(SettingPermissionEvent settingPermissionEvent) {
|
||||||
|
|
||||||
|
final DialogPermission dialog = settingPermissionEvent.getDialogPermission();
|
||||||
|
FileModel folder = settingPermissionEvent.getSourceFile();
|
||||||
|
dialog.mask("Changing permissions");
|
||||||
|
if(dialog!=null && folder!=null && dialog.getSelectedACL().getId()!=null){
|
||||||
|
|
||||||
|
AppControllerExplorer.rpcWorkspaceService.setACLForVRE(folder.getIdentifier(), dialog.getSelectedACL().getId(), new AsyncCallback<Void>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
dialog.hide();
|
||||||
|
new MessageBoxAlert("Error", "Sorry, an error occurred on setting permission",null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(Void result) {
|
||||||
|
dialog.unmask();
|
||||||
|
dialog.hide();
|
||||||
|
new InfoDisplay("Permission updated", "The permissions have been changed correctly");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void accountingSetItemAsRead(boolean read) {
|
private void accountingSetItemAsRead(boolean read) {
|
||||||
|
|
|
@ -17,6 +17,7 @@ public class ConstantsPortlet {
|
||||||
public static final String UPLOADFILE = "Upload";
|
public static final String UPLOADFILE = "Upload";
|
||||||
public static final String DOWNLOADITEM = "Download";
|
public static final String DOWNLOADITEM = "Download";
|
||||||
public static final String UPLOADARCHIVE = "Upload Archive";
|
public static final String UPLOADARCHIVE = "Upload Archive";
|
||||||
|
public static final String CHANGEPERMISSION = "Change Permission";
|
||||||
|
|
||||||
//USED IN HTTP GET AS PARAMETERS
|
//USED IN HTTP GET AS PARAMETERS
|
||||||
public static final String GET_SEARCH_PARAMETER ="search";
|
public static final String GET_SEARCH_PARAMETER ="search";
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
package org.gcube.portlets.user.workspace.client.event;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.workspace.client.model.FileGridModel;
|
||||||
|
import org.gcube.portlets.user.workspace.client.model.FileModel;
|
||||||
|
import org.gcube.portlets.user.workspace.client.view.dialog.DialogPermission;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.GwtEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class SettingPermissionEvent extends GwtEvent<SettingPermissionEventHandler> {
|
||||||
|
public static Type<SettingPermissionEventHandler> TYPE = new Type<SettingPermissionEventHandler>();
|
||||||
|
|
||||||
|
private FileModel targetFile = null;
|
||||||
|
|
||||||
|
private DialogPermission dialogPermission;
|
||||||
|
|
||||||
|
|
||||||
|
public SettingPermissionEvent(FileModel target, DialogPermission dialog) {
|
||||||
|
this.targetFile = (FileGridModel) target;
|
||||||
|
this.dialogPermission = dialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type<SettingPermissionEventHandler> getAssociatedType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dispatch(SettingPermissionEventHandler handler) {
|
||||||
|
handler.onPermissionSetting(this);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public FileModel getSourceFile() {
|
||||||
|
return targetFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DialogPermission getDialogPermission() {
|
||||||
|
return dialogPermission;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDialogPermission(DialogPermission dialogPermission) {
|
||||||
|
this.dialogPermission = dialogPermission;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package org.gcube.portlets.user.workspace.client.event;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.EventHandler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface SettingPermissionEventHandler extends EventHandler {
|
||||||
|
void onPermissionSetting(SettingPermissionEvent settingPermissionEvent);
|
||||||
|
}
|
|
@ -0,0 +1,188 @@
|
||||||
|
package org.gcube.portlets.user.workspace.client.view.dialog;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.portlets.user.workspace.client.AppController;
|
||||||
|
import org.gcube.portlets.user.workspace.client.AppControllerExplorer;
|
||||||
|
import org.gcube.portlets.user.workspace.client.event.SettingPermissionEvent;
|
||||||
|
import org.gcube.portlets.user.workspace.client.model.FileModel;
|
||||||
|
import org.gcube.portlets.user.workspace.client.model.InfoContactModel;
|
||||||
|
import org.gcube.portlets.user.workspace.client.resources.Resources;
|
||||||
|
import org.gcube.portlets.user.workspace.client.view.sharing.PanelTogglePermission;
|
||||||
|
import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxAlert;
|
||||||
|
import org.gcube.portlets.user.workspace.shared.WorkspaceACL;
|
||||||
|
|
||||||
|
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
|
||||||
|
import com.extjs.gxt.ui.client.Style.Scroll;
|
||||||
|
import com.extjs.gxt.ui.client.event.ButtonEvent;
|
||||||
|
import com.extjs.gxt.ui.client.event.SelectionListener;
|
||||||
|
import com.extjs.gxt.ui.client.widget.Dialog;
|
||||||
|
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
|
||||||
|
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
|
||||||
|
import com.google.gwt.core.shared.GWT;
|
||||||
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
import com.google.gwt.user.client.ui.Label;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class DialogPermission extends Dialog {
|
||||||
|
|
||||||
|
private int widthDialog = 530;
|
||||||
|
private FileModel parentFolder = null;
|
||||||
|
|
||||||
|
private PanelTogglePermission permission;
|
||||||
|
private HorizontalPanel hpPermission = null;
|
||||||
|
private FileModel folder;
|
||||||
|
|
||||||
|
private DialogPermission INSTANCE = this;
|
||||||
|
|
||||||
|
public FileModel getParentFolder() {
|
||||||
|
return parentFolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initLayout(String folderParentName) {
|
||||||
|
FormLayout layout = new FormLayout();
|
||||||
|
layout.setLabelWidth(90);
|
||||||
|
layout.setDefaultWidth(380);
|
||||||
|
setLayout(layout);
|
||||||
|
setModal(true);
|
||||||
|
setScrollMode(Scroll.AUTOY);
|
||||||
|
setBodyStyle("padding: 9px; background: none");
|
||||||
|
setWidth(widthDialog);
|
||||||
|
setHeight(200);
|
||||||
|
setResizable(true);
|
||||||
|
setButtonAlign(HorizontalAlignment.CENTER);
|
||||||
|
setWidth(widthDialog);
|
||||||
|
setButtons(Dialog.OKCANCEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use to set permission to VRE Folder
|
||||||
|
*/
|
||||||
|
public DialogPermission(FileModel folder) {
|
||||||
|
|
||||||
|
this.folder = folder;
|
||||||
|
|
||||||
|
Label labelProperty = new Label("Permissions");
|
||||||
|
|
||||||
|
hpPermission.add(labelProperty);
|
||||||
|
|
||||||
|
hpPermission.mask("Permission Control");
|
||||||
|
|
||||||
|
|
||||||
|
AsyncCallback<InfoContactModel> callcack = new AsyncCallback<InfoContactModel>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
new MessageBoxAlert("Alert", "Sorry, an error occurred on recovering ACLs",null);
|
||||||
|
hpPermission.unmask();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(InfoContactModel result) {
|
||||||
|
permissionControl(result.getLogin(), true);
|
||||||
|
hpPermission.unmask();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
getOwner(folder.getIdentifier(), callcack);
|
||||||
|
|
||||||
|
AppControllerExplorer.rpcWorkspaceService.getACLs(new AsyncCallback<List<WorkspaceACL>>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(List<WorkspaceACL> result) {
|
||||||
|
permission = new PanelTogglePermission(result);
|
||||||
|
hpPermission.add(permission);
|
||||||
|
hpPermission.layout();
|
||||||
|
layout();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
new MessageBoxAlert("Alert", "Sorry, an error occurred on recovering ACLs",null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
initLayout(folder.getName());
|
||||||
|
this.setIcon(Resources.getIconSharedFolder());
|
||||||
|
setHeading("Set permissions to folder: " + folder.getName());
|
||||||
|
|
||||||
|
setWidth(widthDialog);
|
||||||
|
setButtons(Dialog.OKCANCEL);
|
||||||
|
|
||||||
|
add(hpPermission);
|
||||||
|
addListners();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addListners() {
|
||||||
|
|
||||||
|
this.getButtonById(Dialog.CANCEL).addSelectionListener(
|
||||||
|
new SelectionListener<ButtonEvent>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void componentSelected(ButtonEvent ce) {
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.getButtonById(Dialog.OK).addSelectionListener(
|
||||||
|
new SelectionListener<ButtonEvent>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void componentSelected(ButtonEvent ce) {
|
||||||
|
|
||||||
|
AppController.getEventBus().fireEvent(new SettingPermissionEvent(folder, INSTANCE));
|
||||||
|
// hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void permissionControl(String owner, boolean showAlert){
|
||||||
|
GWT.log("DialogPermission control compare between owner: "+owner +" and my login: "+AppControllerExplorer.myLogin);
|
||||||
|
|
||||||
|
if(AppControllerExplorer.myLogin.compareToIgnoreCase(owner)!=0){
|
||||||
|
enableFormDialog(false);
|
||||||
|
if(showAlert)
|
||||||
|
new MessageBoxAlert("Permission denied", "You have no permissions to change sharing. You are not owner of \""+folder.getName()+"\"", null);
|
||||||
|
}else{
|
||||||
|
enableFormDialog(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableFormDialog(boolean bool){
|
||||||
|
getButtonById(Dialog.OK).setEnabled(bool);
|
||||||
|
|
||||||
|
if(permission!=null)
|
||||||
|
permission.setEnabled(bool);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getOwner(final String sharedFolderId,final AsyncCallback<InfoContactModel> callback) {
|
||||||
|
|
||||||
|
AppControllerExplorer.rpcWorkspaceService.getOwnerByItemId(sharedFolderId, new AsyncCallback<InfoContactModel>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable caught) {
|
||||||
|
GWT.log("an error occured in get Owner by Id "+sharedFolderId + " "+caught.getMessage());
|
||||||
|
new MessageBoxAlert("Alert", "Sorry, an error occurred on owner property",null);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(InfoContactModel result) {
|
||||||
|
callback.onSuccess(result);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public WorkspaceACL getSelectedACL(){
|
||||||
|
if(permission!=null)
|
||||||
|
return permission.getSelectedACL();
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -25,6 +25,7 @@ import org.gcube.portlets.user.workspace.client.interfaces.GXTFolderItemTypeEnum
|
||||||
import org.gcube.portlets.user.workspace.client.model.FileGridModel;
|
import org.gcube.portlets.user.workspace.client.model.FileGridModel;
|
||||||
import org.gcube.portlets.user.workspace.client.model.FileModel;
|
import org.gcube.portlets.user.workspace.client.model.FileModel;
|
||||||
import org.gcube.portlets.user.workspace.client.resources.Resources;
|
import org.gcube.portlets.user.workspace.client.resources.Resources;
|
||||||
|
import org.gcube.portlets.user.workspace.client.view.dialog.DialogPermission;
|
||||||
import org.gcube.portlets.user.workspace.client.view.grids.GxtGridFilterGroupPanel;
|
import org.gcube.portlets.user.workspace.client.view.grids.GxtGridFilterGroupPanel;
|
||||||
import org.gcube.portlets.user.workspace.client.view.tree.CutCopyAndPaste;
|
import org.gcube.portlets.user.workspace.client.view.tree.CutCopyAndPaste;
|
||||||
import org.gcube.portlets.user.workspace.client.view.tree.CutCopyAndPaste.OperationType;
|
import org.gcube.portlets.user.workspace.client.view.tree.CutCopyAndPaste.OperationType;
|
||||||
|
@ -68,6 +69,7 @@ public class GxtToolBarItemFunctionality {
|
||||||
private Button btnCopyItem;
|
private Button btnCopyItem;
|
||||||
private Button btnPasteItem;
|
private Button btnPasteItem;
|
||||||
private Button btnCutItem;
|
private Button btnCutItem;
|
||||||
|
private Button btnSetPermission;
|
||||||
|
|
||||||
public GxtToolBarItemFunctionality() {
|
public GxtToolBarItemFunctionality() {
|
||||||
initToolBar();
|
initToolBar();
|
||||||
|
@ -220,6 +222,14 @@ public class GxtToolBarItemFunctionality {
|
||||||
// toolBar.add(new SeparatorToolItem());
|
// toolBar.add(new SeparatorToolItem());
|
||||||
// toolBar.add(new SeparatorToolItem());
|
// toolBar.add(new SeparatorToolItem());
|
||||||
|
|
||||||
|
btnSetPermission= new Button(ConstantsPortlet.CHANGEPERMISSION,
|
||||||
|
Resources.getIconWriteAll());
|
||||||
|
btnSetPermission.setScale(ButtonScale.SMALL);
|
||||||
|
btnSetPermission.setIconAlign(IconAlign.TOP);
|
||||||
|
btnSetPermission.setArrowAlign(ButtonArrowAlign.BOTTOM);
|
||||||
|
|
||||||
|
toolBar.add(btnSetPermission);
|
||||||
|
|
||||||
|
|
||||||
//TODO OLD CODE
|
//TODO OLD CODE
|
||||||
toggleGroup = new ToggleButton();
|
toggleGroup = new ToggleButton();
|
||||||
|
@ -448,6 +458,22 @@ public class GxtToolBarItemFunctionality {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
btnSetPermission.addSelectionListener(new SelectionListener<ButtonEvent>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void componentSelected(ButtonEvent ce) {
|
||||||
|
|
||||||
|
final FileGridModel fileGridModel = gridGroupViewContainer.getSelectedItem();
|
||||||
|
|
||||||
|
if(fileGridModel!=null && fileGridModel.isVreFolder()){
|
||||||
|
DialogPermission dialog = new DialogPermission(fileGridModel);
|
||||||
|
dialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
btnDownloadFile.addSelectionListener(new SelectionListener<ButtonEvent>() {
|
btnDownloadFile.addSelectionListener(new SelectionListener<ButtonEvent>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -578,6 +604,7 @@ public class GxtToolBarItemFunctionality {
|
||||||
this.btnPublicLink.disable();
|
this.btnPublicLink.disable();
|
||||||
this.btnGetSharedLink.disable();
|
this.btnGetSharedLink.disable();
|
||||||
this.btnOpen.enable();
|
this.btnOpen.enable();
|
||||||
|
this.btnSetPermission.disable();
|
||||||
|
|
||||||
if(target!=null){
|
if(target!=null){
|
||||||
|
|
||||||
|
@ -642,6 +669,7 @@ public class GxtToolBarItemFunctionality {
|
||||||
if(target!=null && target.isVreFolder()){
|
if(target!=null && target.isVreFolder()){
|
||||||
this.btnRemoveItem.disable();
|
this.btnRemoveItem.disable();
|
||||||
this.btnRenameItem.disable();
|
this.btnRenameItem.disable();
|
||||||
|
this.btnSetPermission.enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -656,6 +684,7 @@ public class GxtToolBarItemFunctionality {
|
||||||
this.btnOpen.disable();
|
this.btnOpen.disable();
|
||||||
this.btnCopyItem.disable();
|
this.btnCopyItem.disable();
|
||||||
this.btnCutItem.disable();
|
this.btnCutItem.disable();
|
||||||
|
this.btnSetPermission.disable();
|
||||||
// this.btnGetInfo.disable();
|
// this.btnGetInfo.disable();
|
||||||
// this.btnGetSharedLink.disable();
|
// this.btnGetSharedLink.disable();
|
||||||
} else {
|
} else {
|
||||||
|
@ -665,6 +694,7 @@ public class GxtToolBarItemFunctionality {
|
||||||
this.btnOpen.enable();
|
this.btnOpen.enable();
|
||||||
this.btnCopyItem.enable();
|
this.btnCopyItem.enable();
|
||||||
this.btnCutItem.enable();
|
this.btnCutItem.enable();
|
||||||
|
this.btnSetPermission.enable();
|
||||||
// this.btnGetInfo.enable();
|
// this.btnGetInfo.enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -693,6 +723,7 @@ public class GxtToolBarItemFunctionality {
|
||||||
this.btnOpen.setEnabled(!active);
|
this.btnOpen.setEnabled(!active);
|
||||||
this.btnGetSharedLink.setEnabled(!active);
|
this.btnGetSharedLink.setEnabled(!active);
|
||||||
this.btnPublicLink.setEnabled(!active);
|
this.btnPublicLink.setEnabled(!active);
|
||||||
|
this.btnSetPermission.setEnabled(!active);
|
||||||
|
|
||||||
//ONLY ENABLED
|
//ONLY ENABLED
|
||||||
this.btnRemoveItem.setEnabled(active);
|
this.btnRemoveItem.setEnabled(active);
|
||||||
|
|
Loading…
Reference in New Issue