Приложение e4 RCP: Как отключить взаимодействие окон с диалогом? - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть окно с таблицей, которая позволяет пользователям добавлять / редактировать и удалять записи.Кнопки вызовут диалоговое окно для выполнения действий (Сделано с редактором Window Builder).Однако, когда диалоговое окно открыто, пользователи все еще могут взаимодействовать с таблицей, что может оказаться проблематичным.Как я могу «отключить» взаимодействие с окном таблицы, пока диалоговое окно не закроется?

enter image description here

Класс диалога

 public class RoleEditDialog {
        Text txtRoleName;
        Spinner spnrEksLvl;
        Spinner spnrLvl;

        @PostConstruct
        public void postConstruct(Composite parent) {
            parent.setLayout(null);

            Group group = new Group(parent, SWT.BORDER);
            group.setText("Role");
            group.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
            group.setBounds(29, 83, 236, 164);

            Label label = new Label(group, SWT.NONE);
            label.setText("Role Name");
            label.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
            label.setBounds(8, 30, 66, 14);

            txtRoleName = new Text(group, SWT.BORDER);
            txtRoleName.setBounds(74, 27, 152, 20);

            Label label_1 = new Label(group, SWT.NONE);
            label_1.setText("EKS Level");
            label_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
            label_1.setBounds(8, 67, 59, 14);

            spnrEksLvl = new Spinner(group, SWT.BORDER);
            spnrEksLvl.setBounds(74, 64, 152, 20);

            spnrLvl = new Spinner(group, SWT.BORDER);
            spnrLvl.setBounds(74, 101, 152, 20);

            Label label_2 = new Label(group, SWT.NONE);
            label_2.setText("Level");
            label_2.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
            label_2.setBounds(8, 104, 54, 14);

            Label label_3 = new Label(parent, SWT.NONE);
            label_3.setText("Role Administration");
            label_3.setFont(SWTResourceManager.getFont("Lucida Bright", 19, SWT.BOLD));
            label_3.setBounds(10, 10, 259, 29);

            Label label_4 = new Label(parent, SWT.NONE);
            label_4.setText("New/Update Role");
            label_4.setBounds(97, 38, 93, 15);      
        }

    }

Класс обработчика для открытия диалога

public class OpenEditRoleHandler {
    @Inject
    EModelService modelService;
    @Inject
    MApplication application;

    @Execute
    public void execute(MPart part) 
    {
        RoleController roleController = new RoleController();
        if(part!=null)
        {
            RolesFrame rolesFrame = (RolesFrame) part.getObject(); 
            int selecRow = rolesFrame.table.getSelectionIndex();
            if(selecRow!=-1)
            {
                RightController rightController = new RightController();

                //Dialog
                modelService.find("ats_usermanagement_rcp.dialog.RoleAdmin", application).setToBeRendered(true);
                //Dialog part (I have more than one part so depending on if Add/Edit was selected the appropriate part would be rendered)
                modelService.find("ats_usermanagement_rcp.part.RoleEditDialog", application).setToBeRendered(true);     

                Role selectedRole = roleController.getRole((long) Integer.parseInt(rolesFrame.table.getItem(selecRow).getText(0)));

                MPart editPart = (MPart) modelService.find("ats_usermanagement_rcp.part.RoleEditDialog", application);
                RoleEditDialog editRole = (RoleEditDialog) editPart.getObject();

                editRole.txtRoleName.setText(selectedRole.getRolename());
                editRole.spnrLvl.setSelection(selectedRole.getLevel());
                editRole.spnrEksLvl.setSelection(selectedRole.getEksLevel());   
            }   
        }       
    }       
}

1 Ответ

0 голосов
/ 10 декабря 2018

Это на самом деле не то, что традиционно называется Диалогом - это другая часть, открывающаяся в отдельном окне.e4 не имеет хорошей поддержки для диалогов, выполненных с использованием Application.e4xmi.Большинство диалогов создаются с использованием класса JFace Dialog (org.eclipse.jface.dialogs.Dialog) и отсутствуют в Application.e4xmi.

Вы можете настроить поведение окна, переопределив стиль окна, используяstyleOverride (см. здесь ), чтобы указать флаг SWT.APPLICATION_MODAL.Значение переопределения для диалога будет

styleOverride 68720

68720 - это числовое значение флагов SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.MAX | SWT.RESIZE.

...