private void createGeneralGroup(Composite container) { final Group group = new Group(container, SWT.NONE); group.setText(Messages.OPT_TAB_GROUP_GENERAL); FormLayout layout = new FormLayout(); layout.marginBottom = 10; group.setLayout(layout); group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // ********************************************** // Row: CleanSession // ********************************************** // CleanSession - Label Label cleanSessionLabel = new Label(group, SWT.NONE); FormData fd = new FormData(); fd.top = new FormAttachment(0, 10); fd.left = new FormAttachment(0, 10); cleanSessionLabel.setLayoutData(fd); cleanSessionLabel.setText(Messages.OPT_TAB_GROUP_GENERAL_CLEAN_SESSION); // CleanSession - Check final Button cleanSessionCheck = new Button(group, SWT.CHECK); fd = new FormData(); fd.top = new FormAttachment(cleanSessionLabel, 0, SWT.CENTER); // fd.left = new FormAttachment(cleanSessionLabel, 60); fd.left = new FormAttachment(0, 160); cleanSessionCheck.setLayoutData(fd); // ********************************************** // Row: SSL // ********************************************** // SSL - Label Label sslLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(cleanSessionLabel, 10); fd.left = new FormAttachment(0, 10); sslLabel.setLayoutData(fd); sslLabel.setText(Messages.OPT_TAB_GROUP_GENERAL_ENABLE_SSL); // SSL - Check final Button sslCheck = new Button(group, SWT.CHECK); fd = new FormData(); fd.top = new FormAttachment(sslLabel, 0, SWT.CENTER); fd.left = new FormAttachment(cleanSessionCheck, 0, SWT.LEFT); sslCheck.setLayoutData(fd); sslCheck.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { sslViewUpdater.update(sslCheck.getSelection()); } }); } }); // ********************************************** // Row: HA // ********************************************** // HA - Label Label haLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(sslLabel, 10); fd.left = new FormAttachment(0, 10); haLabel.setLayoutData(fd); haLabel.setText(Messages.OPT_TAB_GROUP_GENERAL_ENABLE_HA); // HA - Check final Button haCheck = new Button(group, SWT.CHECK); fd = new FormData(); fd.top = new FormAttachment(haLabel, 0, SWT.CENTER); fd.left = new FormAttachment(cleanSessionCheck, 0, SWT.LEFT); haCheck.setLayoutData(fd); haCheck.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { haViewUpdater.update(haCheck.getSelection()); } }); } }); // ********************************************** // Row: LWT // ********************************************** // LWT - Label Label lwtLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(haLabel, 10); fd.left = new FormAttachment(0, 10); lwtLabel.setLayoutData(fd); lwtLabel.setText(Messages.OPT_TAB_GROUP_GENERAL_ENABLE_LWT); // LWT - Check final Button lwtCheck = new Button(group, SWT.CHECK); fd = new FormData(); fd.top = new FormAttachment(lwtLabel, 0, SWT.CENTER); fd.left = new FormAttachment(cleanSessionCheck, 0, SWT.LEFT); lwtCheck.setLayoutData(fd); lwtCheck.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { lwtViewUpdater.update(lwtCheck.getSelection()); } }); } }); // ********************************************** // Row: Keep Alive Interval // ********************************************** // Keep Alive - Label Label keepAliveLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(lwtLabel, 10); fd.left = new FormAttachment(0, 10); keepAliveLabel.setLayoutData(fd); keepAliveLabel.setText(Messages.OPT_TAB_GROUP_GENERAL_KEEP_ALIVE); // Keep Alive - Spinner final Spinner keepAliveSpinner = new Spinner(group, SWT.BORDER); keepAliveSpinner.setMinimum(0); keepAliveSpinner.setMaximum(Integer.MAX_VALUE); keepAliveSpinner.setIncrement(5); keepAliveSpinner.setPageIncrement(30); trackSpinnerUpdates(keepAliveSpinner); fd = new FormData(); fd.top = new FormAttachment(keepAliveLabel, 0, SWT.CENTER); fd.left = new FormAttachment(cleanSessionCheck, 0, SWT.LEFT); keepAliveSpinner.setLayoutData(fd); // Keep Alive Unit - Label Label keepAliveUnitLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(keepAliveLabel, 0, SWT.CENTER); fd.left = new FormAttachment(keepAliveSpinner, 10); keepAliveUnitLabel.setLayoutData(fd); keepAliveUnitLabel.setText(Messages.LABEL_SECONDS); // ********************************************** // Row: Connection Timeout // ********************************************** // Connection Timeout - Label Label connectionTimeoutLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(keepAliveLabel, 10); fd.left = new FormAttachment(0, 10); connectionTimeoutLabel.setLayoutData(fd); connectionTimeoutLabel.setText(Messages.OPT_TAB_GROUP_GENERAL_CONNECTION_TIMEOUT); // Connection Timeout - Spinner final Spinner connectionTimeoutSpinner = new Spinner(group, SWT.BORDER); connectionTimeoutSpinner.setMinimum(0); connectionTimeoutSpinner.setMaximum(Integer.MAX_VALUE); connectionTimeoutSpinner.setIncrement(5); connectionTimeoutSpinner.setPageIncrement(30); trackSpinnerUpdates(connectionTimeoutSpinner); fd = new FormData(); fd.top = new FormAttachment(connectionTimeoutLabel, 0, SWT.CENTER); fd.left = new FormAttachment(cleanSessionCheck, 0, SWT.LEFT); connectionTimeoutSpinner.setLayoutData(fd); // Connection Timeout Unit - Label Label connectionTimeoutUnitLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(connectionTimeoutLabel, 0, SWT.CENTER); fd.left = new FormAttachment(connectionTimeoutSpinner, 10); connectionTimeoutUnitLabel.setLayoutData(fd); connectionTimeoutUnitLabel.setText(Messages.LABEL_SECONDS); // ********************************************** // Row: Use Login // ********************************************** // Use Login - Label Label loginLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(connectionTimeoutLabel, 10); fd.left = new FormAttachment(0, 10); loginLabel.setLayoutData(fd); loginLabel.setText(Messages.OPT_TAB_GROUP_GENERAL_ENABLE_LOGIN); // Use Login - Check final Button loginCheck = new Button(group, SWT.CHECK); fd = new FormData(); fd.top = new FormAttachment(loginLabel, 0, SWT.CENTER); fd.left = new FormAttachment(cleanSessionCheck, 0, SWT.LEFT); loginCheck.setLayoutData(fd); loginCheck.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { loginViewUpdater.update(loginCheck.getSelection()); } }); } }); // Use Login - Username - Label Label usernameLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(loginLabel, 0, SWT.CENTER); fd.left = new FormAttachment(connectionTimeoutUnitLabel, 0, SWT.LEFT); usernameLabel.setLayoutData(fd); usernameLabel.setText(Messages.OPT_TAB_GROUP_GENERAL_USERNAME); // Use Login - Username - Text final Text usernameText = new Text(group, SWT.BORDER); fd = new FormData(); fd.top = new FormAttachment(usernameLabel, 0, SWT.CENTER); fd.left = new FormAttachment(usernameLabel, 10); fd.width = 120; usernameText.setLayoutData(fd); // Use Login - Password - Label Label passwordLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(loginLabel, 0, SWT.CENTER); fd.left = new FormAttachment(usernameText, 20); passwordLabel.setLayoutData(fd); passwordLabel.setText(Messages.OPT_TAB_GROUP_GENERAL_PASSWORD); // Use Login - Password - Text final Text passwordText = new Text(group, SWT.BORDER | SWT.PASSWORD); fd = new FormData(); fd.top = new FormAttachment(passwordLabel, 0, SWT.CENTER); fd.left = new FormAttachment(passwordLabel, 10); fd.width = 120; passwordText.setLayoutData(fd); // ********************************************** // Row: Use Persistence // ********************************************** // Use Persistence - Label Label persistLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(loginLabel, 10); fd.left = new FormAttachment(0, 10); persistLabel.setLayoutData(fd); persistLabel.setText(Messages.OPT_TAB_GROUP_GENERAL_ENABLE_PERSISTENCE); // Use Persistence - Check final Button persistCheck = new Button(group, SWT.CHECK); fd = new FormData(); fd.top = new FormAttachment(persistLabel, 0, SWT.CENTER); fd.left = new FormAttachment(cleanSessionCheck, 0, SWT.LEFT); persistCheck.setLayoutData(fd); persistCheck.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { persistenceViewUpdater.update(persistCheck.getSelection()); } }); } }); // Use Persistence - Directory - Label Label directoryLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(persistLabel, 0, SWT.CENTER); fd.left = new FormAttachment(connectionTimeoutUnitLabel, 0, SWT.LEFT); directoryLabel.setLayoutData(fd); directoryLabel.setText(Messages.OPT_TAB_GROUP_GENERAL_PERSISTENCE_DIRECTORY); // Use Persistence - Directory - Text final Text directoryText = new Text(group, SWT.BORDER); directoryText.setEditable(false); fd = new FormData(); fd.top = new FormAttachment(directoryLabel, 0, SWT.CENTER); fd.left = new FormAttachment(usernameText, 0, SWT.LEFT); fd.right = new FormAttachment(passwordText, 0, SWT.RIGHT); directoryText.setLayoutData(fd); // Use Persistence - Browse - Button final Button browseDirButton = new Button(group, SWT.PUSH); browseDirButton.setText(Messages.LABEL_BROWSE); fd = new FormData(); fd.top = new FormAttachment(directoryText, 0, SWT.CENTER); fd.left = new FormAttachment(directoryText, 10); browseDirButton.setLayoutData(fd); browseDirButton.setEnabled(connection.getOptions().isPersistenceEnabled()); browseDirButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { DirectoryDialog directoryDialog = new DirectoryDialog(getControl().getShell()); directoryDialog.setMessage(Messages.OPT_TAB_GROUP_GENERAL_PERSISTENCE_DLG); String dir = directoryDialog.open(); if (dir != null) { directoryText.setText(dir); } } }); } }); // ********************************************** // DataBinding // ********************************************** final DataBinding dataBinding = DataBindings.createDataBinding(); // updater loginViewUpdater = new ViewUpdater<Boolean>() { final DecoratedBinding usrBinding; final DecoratedBinding pwdBinding; { // username is required usrBinding = dataBinding .bindText( usernameText, connection, Connection.PROP_OPT_LOGIN_USERNAME, Validators.required) .hideDecorations(); // password is not required pwdBinding = dataBinding .bindText( passwordText, connection, Connection.PROP_OPT_LOGIN_PASSWORD, Converters.stringToChars) .hideDecorations(); } @Override public void update(Boolean selected) { if (selected) { usrBinding.showDecorations(); pwdBinding.showDecorations(); Widgets.enable(true, usernameText, passwordText); } else { usrBinding.hideDecorations(); pwdBinding.hideDecorations(); Widgets.enable(false, usernameText, passwordText); } } }; // Persistence view updater persistenceViewUpdater = new ViewUpdater<Boolean>() { final DecoratedBinding binding; { binding = dataBinding .bindText( directoryText, connection, Connection.PROP_OPT_PERSISTENCE_DIRECTORY, Validators.required) .hideDecorations(); directoryText.setText(System.getProperty("user.dir")); // $NON-NLS-1$ } @Override public void update(Boolean selected) { browseDirButton.setEnabled(selected); if (selected) { binding.showDecorations(); } else { binding.hideDecorations(); } } }; // checkbox dataBinding.bindSelection(cleanSessionCheck, connection, Connection.PROP_OPT_CLEAN_SESSION); dataBinding.bindSelection(sslCheck, connection, Connection.PROP_OPT_SSL_ENABLED); dataBinding.bindSelection(haCheck, connection, Connection.PROP_OPT_HA_ENABLED); dataBinding.bindSelection(lwtCheck, connection, Connection.PROP_OPT_LWT_ENABLED); dataBinding.bindSelection(loginCheck, connection, Connection.PROP_OPT_LOGIN_ENABLED); dataBinding.bindSelection(persistCheck, connection, Connection.PROP_OPT_PERSISTENCE_ENABLED); // spinner dataBinding.bindSelection( keepAliveSpinner, connection, Connection.PROP_OPT_KEEP_ALIVE_INTERVAL); dataBinding.bindSelection( connectionTimeoutSpinner, connection, Connection.PROP_OPT_CONNECTION_TIMEOUT); // dispose dataBinding when UI is disposed addDisposeListener(dataBinding); // initial state Widgets.enable(connection.getOptions().isLoginEnabled(), usernameText, passwordText); }
private void createHAGroup(Composite container) { final Group group = new Group(container, SWT.NONE); group.setText(Messages.OPT_TAB_GROUP_HA); // layout GridLayout layout = new GridLayout(); layout.numColumns = 1; layout.marginTop = 0; layout.marginBottom = 10; layout.verticalSpacing = 0; group.setLayout(layout); group.setLayoutData(new GridData(GridData.FILL_BOTH)); // Toolbar ToolBar toolBar = new ToolBar(group, SWT.NONE); // add ToolItem itemAdd = new ToolItem(toolBar, SWT.FLAT); itemAdd.setImage(Images.get(ImageKeys.IMG_ADD)); itemAdd.setDisabledImage(Images.get(ImageKeys.IMG_ADD_GRAY)); itemAdd.setToolTipText(Messages.OPT_TAB_GROUP_HA_ADD_BTN_TOOLTIP); itemAdd.addSelectionListener( new SelectionAdapter() { @SuppressWarnings("unchecked") public void widgetSelected(SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { ServerURI uri = new ServerURI(Constants.TCP_SERVER_URI); ((List<ServerURI>) viewer.getInput()).add(uri); viewer.refresh(); // select the added uri viewer.setSelection(new StructuredSelection(uri)); viewer.editElement(uri, 1); } }); } }); // remove final ToolItem itemRemove = new ToolItem(toolBar, SWT.FLAT); itemRemove.setImage(Images.get(ImageKeys.IMG_REMOVE)); itemRemove.setDisabledImage(Images.get(ImageKeys.IMG_REMOVE_GRAY)); itemRemove.setToolTipText(Messages.OPT_TAB_GROUP_HA_RM_BTN_TOOLTIP); itemRemove.setEnabled(false); itemRemove.addSelectionListener( new SelectionAdapter() { @SuppressWarnings("unchecked") public void widgetSelected(SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { StructuredSelection selection = (StructuredSelection) viewer.getSelection(); List<ServerURI> input = ((List<ServerURI>) viewer.getInput()); int index = -1; for (ServerURI uri : (List<ServerURI>) selection.toList()) { if (index == -1) { index = input.indexOf(uri); } input.remove(uri); } viewer.refresh(); // select previous index if (!input.isEmpty()) { index = index - 1 >= 0 ? index - 1 : 0; viewer.setSelection(new StructuredSelection(input.get(index))); } } }); } }); // clear ToolItem itemClear = new ToolItem(toolBar, SWT.FLAT); itemClear.setImage(Images.get(ImageKeys.IMG_CLEAR)); // itemClear.setDisabledImage(Images.get("clear_gray")); itemClear.setToolTipText(Messages.OPT_TAB_GROUP_HA_CLEAR_BTN_TOOLTIP); itemClear.setEnabled(true); itemClear.addSelectionListener( new SelectionAdapter() { @SuppressWarnings("unchecked") public void widgetSelected(SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { ((List<ServerURI>) viewer.getInput()).clear(); viewer.refresh(); } }); } }); // Table viewer Composite composite = new Composite(group, SWT.NONE); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); // Note: using V_SCROLL | NO_SCROLL to force disable H_SCROLL TableViewerBuilder builder = new TableViewerBuilder( composite, SWT.MULTI | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.NO_SCROLL | SWT.BORDER) .selectionChangedListener( new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { itemRemove.setEnabled(!viewer.getSelection().isEmpty()); } }); } }) .makeEditable() .input(connection.getOptions().getServerURIs()); // build the table viewer viewer = builder.build(); // table columns // First extra column to display error message builder.columnBuilder("", SWT.LEFT).pixelWidth(20).emptyCellLabelProvider().build(); builder .columnBuilder(Messages.OPT_TAB_GROUP_HA_SERVER_URIS, SWT.LEFT) .percentWidth(90) .cellLabelProvider( new ColumnLabelProvider() { @Override public String getText(Object element) { return ((ServerURI) element).getValue(); } @Override public String getToolTipText(Object element) { return Messages.TOOLTIP_DBCLICK_TO_EDIT; } }) .editingSupport(new ServerUriCellEditor(viewer)) .build(); viewer.refresh(); // initial state Widgets.enable(group, connection.getOptions().isHaEnabled()); haViewUpdater = new ViewUpdater<Boolean>() { @Override public void update(Boolean selected) { Widgets.enable(group, selected); viewer.refresh(); } }; }
private void createSSLGroup(Composite container) { final Group group = new Group(container, SWT.NONE); group.setText(Messages.OPT_TAB_GROUP_SSL); FormLayout layout = new FormLayout(); layout.marginBottom = 10; group.setLayout(layout); group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // 1) // ********************************************** // Row: Keystore - Location // ********************************************** // Keystore Location - Label Label keystoreLabel = new Label(group, SWT.NONE); FormData fd = new FormData(); fd.top = new FormAttachment(0, 10); fd.left = new FormAttachment(0, 10); keystoreLabel.setLayoutData(fd); keystoreLabel.setText(Messages.OPT_TAB_GROUP_SSL_KEY_STORE); // Keystore Location - Directory - Text final Text keystoreDirText = new Text(group, SWT.BORDER); keystoreDirText.setEditable(false); fd = new FormData(); fd.top = new FormAttachment(keystoreLabel, 0, SWT.CENTER); // fd.left = new FormAttachment(keystoreLabel, 30); fd.left = new FormAttachment(0, 160); fd.width = 454; keystoreDirText.setLayoutData(fd); // Keystore Location- Browse - Button final Button keystoreBrowseButton = new Button(group, SWT.PUSH); keystoreBrowseButton.setText(Messages.LABEL_BROWSE); fd = new FormData(); fd.top = new FormAttachment(keystoreDirText, 0, SWT.CENTER); fd.left = new FormAttachment(keystoreDirText, 10); keystoreBrowseButton.setLayoutData(fd); keystoreBrowseButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { FileDialog fileDialog = new FileDialog(getControl().getShell()); fileDialog.setText(Messages.OPT_TAB_GROUP_SSL_KEY_STORE_DLG); fileDialog.setFilterExtensions(KEYSTORE_FILE_EXT); String selectedFile = fileDialog.open(); if (selectedFile != null) { keystoreDirText.setText(selectedFile); } } }); } }); // ********************************************** // Row: Keystore - Password // ********************************************** // Keystore - Password - Label Label keystorePwdLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(keystoreLabel, 10); fd.left = new FormAttachment(0, 10); keystorePwdLabel.setLayoutData(fd); keystorePwdLabel.setText(Messages.OPT_TAB_GROUP_SSL_KEY_STORE_PWD); // Keystore - Password - Text final Text keystorePwdText = new Text(group, SWT.BORDER | SWT.PASSWORD); fd = new FormData(); fd.top = new FormAttachment(keystorePwdLabel, 0, SWT.CENTER); fd.left = new FormAttachment(keystoreDirText, 0, SWT.LEFT); fd.right = new FormAttachment(keystoreDirText, 0, SWT.RIGHT); keystorePwdText.setLayoutData(fd); // 2) // ********************************************** // Row: Truststore - Location // ********************************************** // Truststore Location - Label Label truststoreLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(keystorePwdLabel, 10); fd.left = new FormAttachment(0, 10); truststoreLabel.setLayoutData(fd); truststoreLabel.setText(Messages.OPT_TAB_GROUP_SSL_TRUST_STORE); // Truststore Location - Directory - Text final Text truststoreDirText = new Text(group, SWT.BORDER); truststoreDirText.setEditable(false); fd = new FormData(); fd.top = new FormAttachment(truststoreLabel, 0, SWT.CENTER); fd.left = new FormAttachment(keystoreDirText, 0, SWT.LEFT); fd.right = new FormAttachment(keystoreDirText, 0, SWT.RIGHT); truststoreDirText.setLayoutData(fd); // Truststore Location- Browse - Button final Button truststoreBrowseButton = new Button(group, SWT.PUSH); truststoreBrowseButton.setText(Messages.LABEL_BROWSE); fd = new FormData(); fd.top = new FormAttachment(truststoreDirText, 0, SWT.CENTER); fd.left = new FormAttachment(truststoreDirText, 10); truststoreBrowseButton.setLayoutData(fd); truststoreBrowseButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { FileDialog fileDialog = new FileDialog(getControl().getShell()); fileDialog.setText(Messages.OPT_TAB_GROUP_SSL_TRUST_STORE_DLG); fileDialog.setFilterExtensions(KEYSTORE_FILE_EXT); String selectedFile = fileDialog.open(); if (selectedFile != null) { truststoreDirText.setText(selectedFile); } } }); } }); // ********************************************** // Row: Truststore - Password // ********************************************** // Truststore - Password - Label Label truststorePwdLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(truststoreLabel, 10); fd.left = new FormAttachment(0, 10); truststorePwdLabel.setLayoutData(fd); truststorePwdLabel.setText(Messages.OPT_TAB_GROUP_SSL_TRUST_STORE_PWD); // Truststore - Password - Text final Text truststorePwdText = new Text(group, SWT.BORDER | SWT.PASSWORD); fd = new FormData(); fd.top = new FormAttachment(truststorePwdLabel, 0, SWT.CENTER); fd.left = new FormAttachment(keystoreDirText, 0, SWT.LEFT); fd.right = new FormAttachment(keystoreDirText, 0, SWT.RIGHT); truststorePwdText.setLayoutData(fd); // ********************************************** // DataBinding // ********************************************** final DataBinding dataBinding = DataBindings.createDataBinding(); // SSL view updater sslViewUpdater = new ViewUpdater<Boolean>() { final DecoratedBinding keystoreBinding; final DecoratedBinding truststoreBinding; { // key store keystoreBinding = dataBinding .bindText( keystoreDirText, connection, Connection.PROP_OPT_SSL_KS, Validators.required) .hideDecorations(); // PWD is not required, no decoration is required dataBinding.bindText( keystorePwdText, connection, Connection.PROP_OPT_SSL_KSPWD, Converters.stringToChars); // trust store truststoreBinding = dataBinding .bindText( truststoreDirText, connection, Connection.PROP_OPT_SSL_TS, Validators.required) .hideDecorations(); // PWD is not required, no decoration is required dataBinding.bindText( truststorePwdText, connection, Connection.PROP_OPT_SSL_TSPWD, Converters.stringToChars); } @Override public void update(Boolean selected) { Widgets.enable(group, selected); if (selected) { keystoreBinding.showDecorations(); truststoreBinding.showDecorations(); } else { keystoreBinding.hideDecorations(); truststoreBinding.hideDecorations(); } } }; // dispose dataBinding when UI is disposed addDisposeListener(dataBinding); // disable all when creation Widgets.enable(group, connection.getOptions().isSslEnabled()); }
private void createLWTGroup(Composite container) { // data model final LWT lwt = connection.getOptions().getLwt(); final Group group = new Group(container, SWT.NONE); group.setText(Messages.OPT_TAB_GROUP_LWT); // layout FormLayout layout = new FormLayout(); layout.marginBottom = 10; group.setLayout(layout); GridData gd = new GridData(GridData.FILL_HORIZONTAL); group.setLayoutData(gd); // ********************************************** // Row: Topic + QoS + Retain // ********************************************** // Topic - label Label topicLabel = new Label(group, SWT.NONE); FormData fd = new FormData(); fd.top = new FormAttachment(0, 10); fd.left = new FormAttachment(0, 10); topicLabel.setLayoutData(fd); topicLabel.setText(Messages.OPT_TAB_GROUP_LWT_TOPIC); // Topic - input final Text topicText = new Text(group, SWT.BORDER); fd = new FormData(); fd.top = new FormAttachment(topicLabel, 10, SWT.CENTER); fd.left = new FormAttachment(topicLabel, 40); fd.right = new FormAttachment(100, -4); topicText.setLayoutData(fd); // QoS - label Label qosLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(topicLabel, 10); fd.left = new FormAttachment(0, 10); qosLabel.setLayoutData(fd); qosLabel.setText(Messages.OPT_TAB_GROUP_LWT_QOS); // QoS - selection CCombo combo = new CCombo(group, SWT.BORDER); List<String> qosList = new ArrayList<String>(); for (QoS qos : QoS.values()) { qosList.add(qos.getLabel()); } combo.setItems(qosList.toArray(new String[0])); combo.setEditable(false); combo.addSelectionListener( new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { // Note: need manually set (because NOT using databinding for combo) CCombo combo = (CCombo) e.widget; lwt.setQos(QoS.valueOf(combo.getSelectionIndex())); } }); } }); // Note: need manually set (because NOT using databinding for combo) combo.select(lwt.getQos().getValue()); fd = new FormData(); fd.top = new FormAttachment(qosLabel, 0, SWT.CENTER); fd.left = new FormAttachment(topicText, 0, SWT.LEFT); combo.setLayoutData(fd); // Retained Button retained = new Button(group, SWT.CHECK); retained.setText(Messages.OPT_TAB_GROUP_LWT_RETAINED); fd = new FormData(); fd.top = new FormAttachment(qosLabel, 0, SWT.CENTER); fd.left = new FormAttachment(combo, 10); retained.setLayoutData(fd); // Hex final Button hex = new Button(group, SWT.CHECK); hex.setText(Messages.OPT_TAB_GROUP_LWT_HEX); fd = new FormData(); fd.top = new FormAttachment(qosLabel, 0, SWT.CENTER); fd.right = new FormAttachment(100, -4); hex.setLayoutData(fd); // ********************************************** // Row: Message - label // ********************************************** // Topic - label Label messageLabel = new Label(group, SWT.NONE); fd = new FormData(); fd.top = new FormAttachment(topicLabel, 60); fd.left = new FormAttachment(0, 10); messageLabel.setLayoutData(fd); messageLabel.setText(Messages.OPT_TAB_GROUP_LWT_MSG); // Message - input final Text messageText = new Text(group, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL); fd = new FormData(); fd.top = new FormAttachment(messageLabel, 10, SWT.CENTER); fd.left = new FormAttachment(topicText, 0, SWT.LEFT); fd.right = new FormAttachment(topicText, 0, SWT.RIGHT); // fd.width = 300; fd.height = 60; messageText.setLayoutData(fd); // XXX handle input when in HEX mode hex.addSelectionListener( new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { Button button = (Button) e.widget; if (button.getSelection()) { messageText.setText(Strings.toHex(messageText.getText())); messageText.setEditable(false); } else { messageText.setText(Strings.hexToString(messageText.getText())); messageText.setEditable(true); } } }); } }); // ********************************************** // DataBinding // ********************************************** final DataBinding dataBinding = DataBindings.createDataBinding(); dataBinding.bindTextAsBytes(messageText, connection, Connection.PROP_OPT_LWT_PAYLOAD); dataBinding.bindSelection(retained, connection, Connection.PROP_OPT_LWT_RETAIN); // LWT view updater lwtViewUpdater = new ViewUpdater<Boolean>() { final DecoratedBinding binding; { binding = dataBinding .bindText( topicText, connection, Connection.PROP_OPT_LWT_TOPIC, Validators.publishTopic) .hideDecorations(); } @Override public void update(Boolean selected) { Widgets.enable(group, selected); if (selected) { binding.showDecorations(); } else { binding.hideDecorations(); } } }; // dispose dataBinding when UI is disposed addDisposeListener(dataBinding); // initial state Widgets.enable(group, connection.getOptions().isLwtEnabled()); }