/******************************************************************************* * Copyright (c) 2013 Red Hat Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Neil Guzman - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.internal.rpm.createrepo.preference; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.IntegerFieldEditor; import org.eclipse.linuxtools.internal.rpm.createrepo.Activator; import org.eclipse.linuxtools.internal.rpm.createrepo.CreaterepoPreferenceConstants; import org.eclipse.linuxtools.internal.rpm.createrepo.Messages; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; /** * Project property page for configuring the delta options for a repository. */ public class CreaterepoDeltaPropertyPage extends CreaterepoPropertyPage { private Composite composite; private BooleanFieldEditor bfeEnableDeltas; private Group optionsGroup; private IntegerFieldEditor ifeNumDeltas; private IntegerFieldEditor ifeMaxSizeDeltas; private Group dirGroup; private CreaterepoPathEditor peDirectories; /** * Default Constructor. Sets the description of the property page. */ public CreaterepoDeltaPropertyPage() { super(Messages.CreaterepoDeltaPropertyPage_description); } @Override protected Composite addContents(Composite parent) { composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); composite.setLayout(layout); bfeEnableDeltas = new BooleanFieldEditor( CreaterepoPreferenceConstants.PREF_DELTA_ENABLE, Messages.CreaterepoDeltaPropertyPage_booleanEnableLabel, composite); bfeEnableDeltas.setPreferenceStore(Activator.getDefault().getPreferenceStore()); bfeEnableDeltas.load(); bfeEnableDeltas.setPropertyChangeListener(this); optionsGroup = new Group(composite, SWT.SHADOW_ETCHED_IN); layout = new GridLayout(2, false); optionsGroup.setLayout(layout); optionsGroup.setText(Messages.CreaterepoDeltaPropertyPage_groupLabel); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER) .grab(true, false).applyTo(optionsGroup); // max deltas. ifeNumDeltas = new IntegerFieldEditor( CreaterepoPreferenceConstants.PREF_NUM_DELTAS, Messages.CreaterepoDeltaPropertyPage_maxNumberOfDeltas, optionsGroup); ifeNumDeltas.setPreferenceStore(preferenceStore); ifeNumDeltas.setValidRange(0, Integer.MAX_VALUE); ifeNumDeltas.load(); ifeNumDeltas.setPropertyChangeListener(this); ifeNumDeltas.setTextLimit(String.valueOf(Integer.MAX_VALUE).length()); // max delta size. stored in megabytes for convenience to user ifeMaxSizeDeltas = new IntegerFieldEditor( CreaterepoPreferenceConstants.PREF_MAX_DELTA_SIZE, Messages.CreaterepoDeltaPropertyPage_maxDeltaSize, optionsGroup); ifeMaxSizeDeltas.setPreferenceStore(preferenceStore); ifeMaxSizeDeltas.setValidRange(0, Integer.MAX_VALUE); ifeMaxSizeDeltas.load(); ifeMaxSizeDeltas.setPropertyChangeListener(this); ifeMaxSizeDeltas.setTextLimit(String.valueOf(Integer.MAX_VALUE).length()); // spaces around the group layout = (GridLayout) optionsGroup.getLayout(); layout.marginWidth = 5; layout.marginHeight = 5; // the group for directories to package against dirGroup = new Group(composite, SWT.SHADOW_ETCHED_IN); layout = new GridLayout(2, false); dirGroup.setLayout(layout); dirGroup.setText(Messages.CreaterepoDeltaPropertyPage_groupDirectoryLabel); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER) .grab(true, false).applyTo(dirGroup); peDirectories = new CreaterepoPathEditor(CreaterepoPreferenceConstants.PREF_OLD_PACKAGE_DIRS, Messages.CreaterepoDeltaPropertyPage_directoryDescription, Messages.CreaterepoDeltaPropertyPage_directoryDialogLabel, dirGroup); peDirectories.setPreferenceStore(preferenceStore); peDirectories.load(); peDirectories.setPropertyChangeListener(this); layout = (GridLayout) dirGroup.getLayout(); layout.marginWidth = 5; layout.marginHeight = 5; toggleEnabled(); return composite; } @Override public void performDefaults() { Activator.getDefault().getPreferenceStore().setToDefault(CreaterepoPreferenceConstants.PREF_DELTA_ENABLE); bfeEnableDeltas.loadDefault(); ifeNumDeltas.loadDefault(); ifeMaxSizeDeltas.loadDefault(); peDirectories.loadDefault(); } @Override public boolean performOk() { Activator.getDefault().getPreferenceStore().setValue(CreaterepoPreferenceConstants.PREF_DELTA_ENABLE, bfeEnableDeltas.getBooleanValue()); getPreferenceStore().setValue(CreaterepoPreferenceConstants.PREF_NUM_DELTAS, ifeNumDeltas.getIntValue()); getPreferenceStore().setValue(CreaterepoPreferenceConstants.PREF_MAX_DELTA_SIZE, ifeMaxSizeDeltas.getIntValue()); peDirectories.store(); return true; } @Override protected void checkState() { if (!ifeNumDeltas.isValid() || !ifeMaxSizeDeltas.isValid()) { bfeEnableDeltas.setEnabled(false, composite); setErrorMessage(ifeMaxSizeDeltas.getErrorMessage()); setValid(false); } else { bfeEnableDeltas.setEnabled(true, composite); setErrorMessage(null); setValid(true); } toggleEnabled(); } /** * Toggle the enabled status of the field editors dependending on the * enabled status of the button. */ private void toggleEnabled() { boolean enabled = bfeEnableDeltas.getBooleanValue(); ifeNumDeltas.setEnabled(enabled, optionsGroup); ifeMaxSizeDeltas.setEnabled(enabled, optionsGroup); peDirectories.setEnabled(enabled, dirGroup); } }