/** @param composite */ private void createInstallationDirectoryGroup(Composite parent) { Group instDirGroup = NSISWizardDialogUtil.createGroup( parent, 2, "installation.directory.group.label", null, false); // $NON-NLS-1$ NSISWizardSettings settings = mWizard.getSettings(); ((GridData) NSISWizardDialogUtil.createLabel( instDirGroup, "installation.directory.label", true, null, isScriptWizard()) .getLayoutData()) .horizontalSpan = 1; //$NON-NLS-1$ final Composite instDirComposite = new Composite(instDirGroup, SWT.NONE); instDirComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final StackLayout instDirLayout = new StackLayout(); instDirComposite.setLayout(instDirLayout); final Combo instDirCombo = NSISWizardDialogUtil.createCombo( instDirComposite, 1, NSISWizardUtil.getPathConstantsAndVariables(settings.getTargetPlatform()), settings.getInstallDir(), false, true, null); final Text instDirText = NSISWizardDialogUtil.createText(instDirComposite, settings.getInstallDir(), 1, true, null); instDirLayout.topControl = instDirCombo; Runnable r = new Runnable() { private String mInstDirParent = ""; // $NON-NLS-1$ private void updateInstDir(NSISWizardSettings settings) { Control topControl; if (isMultiUser()) { if (settings.getInstallDir().startsWith(mInstDirParent)) { String instDir = settings.getInstallDir().substring(mInstDirParent.length()); settings.setInstallDir(instDir); instDirText.setText(instDir); } topControl = instDirText; } else { if (!settings.getInstallDir().startsWith(mInstDirParent)) { String instDir = mInstDirParent + settings.getInstallDir(); settings.setInstallDir(instDir); instDirCombo.setText(instDir); } topControl = instDirCombo; } if (instDirLayout.topControl != topControl) { instDirLayout.topControl = topControl; instDirComposite.layout(true); } validateField(INSTDIR_CHECK); } public void run() { final PropertyChangeListener propertyListener = new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (NSISWizardSettings.INSTALLER_TYPE.equals(evt.getPropertyName()) || NSISWizardSettings.MULTIUSER_INSTALLATION.equals( evt.getPropertyName())) { updateInstDir(mWizard.getSettings()); } else if (NSISWizardSettings.INSTALL_DIR.equals(evt.getPropertyName())) { if (!isMultiUser()) { setInstDirParent(mWizard.getSettings()); } } } }; final INSISWizardSettingsListener settingsListener = new INSISWizardSettingsListener() { public void settingsChanged( NSISWizardSettings oldSettings, final NSISWizardSettings newSettings) { if (oldSettings != null) { oldSettings.removePropertyChangeListener(propertyListener); } setInstDirParent(newSettings); if (newSettings != null) { newSettings.addPropertyChangeListener(propertyListener); } updateInstDir(newSettings); } }; mWizard.addSettingsListener(settingsListener); mWizard.getSettings().addPropertyChangeListener(propertyListener); instDirCombo.addDisposeListener( new DisposeListener() { public void widgetDisposed(DisposeEvent e) { mWizard.getSettings().removePropertyChangeListener(propertyListener); mWizard.removeSettingsListener(settingsListener); } }); setInstDirParent(mWizard.getSettings()); updateInstDir(mWizard.getSettings()); } private void setInstDirParent(NSISWizardSettings settings) { mInstDirParent = ""; // $NON-NLS-1$ if (settings != null) { String instDir = settings.getInstallDir(); if (!Common.isEmpty(instDir)) { int n = instDir.lastIndexOf('\\'); if (n > 0 && n < instDir.length() - 1) { mInstDirParent = instDir.substring(0, n + 1); } } } } }; r.run(); GridData gd = (GridData) instDirCombo.getLayoutData(); gd.horizontalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = true; instDirCombo.addModifyListener( new ModifyListener() { public void modifyText(ModifyEvent e) { String text = ((Combo) e.widget).getText(); mWizard.getSettings().setInstallDir(text); validateField(INSTDIR_CHECK); } }); instDirText.addModifyListener( new ModifyListener() { public void modifyText(ModifyEvent e) { String text = ((Text) e.widget).getText(); mWizard.getSettings().setInstallDir(text); validateField(INSTDIR_CHECK); } }); final Button changeInstDir = NSISWizardDialogUtil.createCheckBox( instDirGroup, "change.installation.directory.label", //$NON-NLS-1$ settings.isChangeInstallDir(), (settings.getInstallerType() != INSTALLER_TYPE_SILENT), null, false); changeInstDir.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { mWizard.getSettings().setChangeInstallDir(((Button) e.widget).getSelection()); } }); addPageChangedRunnable( new Runnable() { public void run() { if (isCurrentPage()) { NSISWizardSettings settings = mWizard.getSettings(); instDirCombo.setText(settings.getInstallDir()); changeInstDir.setEnabled(settings.getInstallerType() != INSTALLER_TYPE_SILENT); } } }); final PropertyChangeListener propertyListener = new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (NSISWizardSettings.TARGET_PLATFORM.equals(evt.getPropertyName())) { NSISWizardDialogUtil.populateCombo( instDirCombo, NSISWizardUtil.getPathConstantsAndVariables( ((Integer) evt.getNewValue()).intValue()), ((NSISWizardSettings) evt.getSource()).getInstallDir()); } } }; settings.addPropertyChangeListener(propertyListener); final INSISWizardSettingsListener listener = new INSISWizardSettingsListener() { public void settingsChanged( NSISWizardSettings oldSettings, NSISWizardSettings newSettings) { if (oldSettings != null) { oldSettings.removePropertyChangeListener(propertyListener); } instDirCombo.setText(newSettings.getInstallDir()); changeInstDir.setSelection(newSettings.isChangeInstallDir()); changeInstDir.setEnabled(newSettings.getInstallerType() != INSTALLER_TYPE_SILENT); newSettings.addPropertyChangeListener(propertyListener); } }; mWizard.addSettingsListener(listener); instDirGroup.addDisposeListener( new DisposeListener() { public void widgetDisposed(DisposeEvent e) { mWizard.removeSettingsListener(listener); mWizard.getSettings().removePropertyChangeListener(propertyListener); } }); }
private void createMultiUserGroup(Composite parent) { final Group multiUserGroup = NSISWizardDialogUtil.createGroup( parent, 2, "MultiUser Installation", null, false); // $NON-NLS-1$ GridData data = (GridData) multiUserGroup.getLayoutData(); data.verticalAlignment = SWT.FILL; data.horizontalAlignment = SWT.FILL; data.grabExcessHorizontalSpace = true; NSISWizardSettings settings = mWizard.getSettings(); Composite composite = new Composite(multiUserGroup, SWT.NONE); data = new GridData(SWT.FILL, SWT.FILL, true, true); composite.setLayoutData(data); GridLayout layout = new GridLayout(2, false); layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); final Button multiUser = NSISWizardDialogUtil.createCheckBox( composite, EclipseNSISPlugin.getResourceString("enable.multiuser.label"), // $NON-NLS-1$ settings.isMultiUserInstallation(), settings.getInstallerType() == INSTALLER_TYPE_MUI2, null, false); multiUser.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { boolean selection = multiUser.getSelection(); mWizard.getSettings().setMultiUserInstallation(selection); validateField(MULTIUSER_CHECK); } }); final MasterSlaveController m = new MasterSlaveController(multiUser); boolean enabled = multiUser.isEnabled() && multiUser.getSelection(); final Combo execLevel = NSISWizardDialogUtil.createCombo( composite, NSISWizardDisplayValues.MULTIUSER_EXEC_LEVELS, settings.getMultiUserExecLevel(), true, EclipseNSISPlugin.getResourceString("multiuser.exec.level.label"), // $NON-NLS-1$ enabled, m, false); ((GridData) execLevel.getLayoutData()).horizontalAlignment = SWT.FILL; ((GridData) execLevel.getLayoutData()).grabExcessHorizontalSpace = true; final Group instModeGroup = NSISWizardDialogUtil.createGroup( multiUserGroup, 1, "Installation Mode", m, false); // $NON-NLS-1$ data = (GridData) instModeGroup.getLayoutData(); data.verticalAlignment = SWT.FILL; data.horizontalAlignment = SWT.FILL; data.grabExcessHorizontalSpace = true; data.horizontalSpan = 1; MasterSlaveEnabler mse = new MasterSlaveEnabler() { public void enabled(Control control, boolean flag) {} public boolean canEnable(Control c) { return isMultiUser(); } }; m.addSlave(execLevel, mse); enabled = enabled && execLevel.getSelectionIndex() != MULTIUSER_EXEC_LEVEL_STANDARD; mse = new MasterSlaveEnabler() { public void enabled(Control control, boolean flag) {} public boolean canEnable(Control c) { return isMultiUser() && mWizard.getSettings().getMultiUserExecLevel() != MULTIUSER_EXEC_LEVEL_STANDARD; } }; execLevel.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { mWizard.getSettings().setMultiUserExecLevel(execLevel.getSelectionIndex()); m.updateSlaves(); validateField(MULTIUSER_CHECK); } }); final Combo instMode = NSISWizardDialogUtil.createCombo( instModeGroup, NSISWizardDisplayValues.MULTIUSER_INSTALL_MODES, settings.getMultiUserInstallMode(), true, EclipseNSISPlugin.getResourceString("multiuser.install.mode.label"), enabled, m, false); //$NON-NLS-1$ ((GridData) instMode.getLayoutData()).grabExcessHorizontalSpace = true; ((GridData) instMode.getLayoutData()).horizontalAlignment = SWT.FILL; instMode.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { mWizard.getSettings().setMultiUserInstallMode(instMode.getSelectionIndex()); validateField(MULTIUSER_CHECK); } }); m.addSlave(instMode, mse); composite = new Composite(instModeGroup, SWT.NONE); data = new GridData(SWT.FILL, SWT.FILL, true, true); composite.setLayoutData(data); layout = new GridLayout(2, true); layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); final Button instModeRemember = NSISWizardDialogUtil.createCheckBox( composite, EclipseNSISPlugin.getResourceString("multiuser.install.mode.remember.label"), settings.isMultiUserInstallModeRemember(), // $NON-NLS-1$ enabled, m, false); ((GridData) instModeRemember.getLayoutData()).horizontalSpan = 1; instModeRemember.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { mWizard.getSettings().setMultiUserInstallModeRemember(instModeRemember.getSelection()); validateField(MULTIUSER_CHECK); } }); m.addSlave(instModeRemember, mse); final Button instModeAsk = NSISWizardDialogUtil.createCheckBox( composite, EclipseNSISPlugin.getResourceString("multiuser.install.mode.ask.label"), settings.isMultiUserInstallModeAsk(), // $NON-NLS-1$ enabled, m, false); ((GridData) instModeAsk.getLayoutData()).horizontalSpan = 1; instModeAsk.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { mWizard.getSettings().setMultiUserInstallModeAsk(instModeAsk.getSelection()); validateField(MULTIUSER_CHECK); } }); m.addSlave(instModeAsk, mse); m.updateSlaves(); addPageChangedRunnable( new Runnable() { public void run() { if (isCurrentPage()) { NSISWizardDialogUtil.setEnabled( multiUser, mWizard.getSettings().getInstallerType() == INSTALLER_TYPE_MUI2); m.updateSlaves(); } } }); mWizard.addSettingsListener( new INSISWizardSettingsListener() { public void settingsChanged( NSISWizardSettings oldSettings, NSISWizardSettings newSettings) { NSISWizardSettings settings = mWizard.getSettings(); multiUser.setSelection(settings.isMultiUserInstallation()); execLevel.select(settings.getMultiUserExecLevel()); instMode.select(settings.getMultiUserInstallMode()); instModeRemember.setSelection(settings.isMultiUserInstallModeRemember()); instModeAsk.setSelection(settings.isMultiUserInstallModeAsk()); NSISWizardDialogUtil.setEnabled( multiUser, settings.getInstallerType() == INSTALLER_TYPE_MUI2); m.updateSlaves(); } }); }