this.app = app_;
  public ExternalControlConfigurator(Display display_, PluginApplication app_, Plugin plugin_)  {    this.display = display_;    this.app = app_;    this.plugin = (ExternalControlPlugin) plugin_;    final Shell shell = new Shell(display);    shell.setText("External control configuration");    shell.addShellListener(new ShellAdapter() {      public void shellClosed(ShellEvent e){        done=true;      }    });    GridLayout layout = new GridLayout(2, false);    shell.setLayout(layout);    ModifyListener callSetup = new ModifyListener() {      public void modifyText(ModifyEvent e) {        setup();      }    };    SelectionListener buttonSelected = new SelectionListener() {      public void widgetDefaultSelected(SelectionEvent e) {        setup();      }      public void widgetSelected(SelectionEvent e) {        setup();      }    };          new Label(shell, SWT.NONE).setText("Port");    port = new Text(shell, SWT.SINGLE | SWT.BORDER);    port.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));    port.setText(Integer.toString(plugin.getPort()));    port.addModifyListener(callSetup);    new Label(shell, SWT.NONE).setText("Simultanious connections");    simConn = new Text(shell, SWT.SINGLE | SWT.BORDER);    simConn.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));    simConn.setText(Integer.toString(plugin.getSimConnections()));    simConn.addModifyListener(callSetup);    new Label(shell, SWT.NONE).setText("Localhost only");    localhostOnly = new Button(shell, SWT.CHECK);    localhostOnly.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));    localhostOnly.setSelection(plugin.getLocalhostOnly());    localhostOnly.addSelectionListener(buttonSelected);    new Label(shell, SWT.NONE).setText("Require password");    requirePassword = new Button(shell, SWT.CHECK);    requirePassword.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));    requirePassword.setSelection(plugin.getRequirePassword());    requirePassword.addSelectionListener(buttonSelected);        new Label(shell, SWT.NONE).setText("Password");    password = new Text(shell, SWT.SINGLE | SWT.BORDER);    password.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));    password.setText(plugin.getPassword());    password.addModifyListener(callSetup);    org.eclipse.swt.widgets.Button ok = new org.eclipse.swt.widgets.Button(shell, SWT.NONE);    ok.setText("OK");    GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_CENTER);    gd.horizontalSpan = 2;    ok.setLayoutData(gd);    ok.addSelectionListener(new SelectionAdapter(){        public void widgetSelected(SelectionEvent e){          setup();          shell.close();        }      });    shell.pack();        shell.open();    while (!done) {      if (!display.readAndDispatch()) display.sleep();    }     shell.dispose();  }