blob: d48e4436bf4770baebf01ca1fa06b0d138f05c11 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2007 IBM Corporation 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.publishing.ui.preferences;
import org.eclipse.epf.common.utils.StrUtil;
import org.eclipse.epf.library.preferences.LibraryPreferences;
import org.eclipse.epf.publishing.ui.PublishingUIResources;
import org.eclipse.epf.ui.preferences.BasePreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Text;
/**
* The Publishing preference page.
*
* @author Kelvin Low
* @since 1.0
*
* Bugs fixed:
* <ul>
* <li>https://bugs.eclipse.org/bugs/show_bug.cgi?id=156957</li>
* </ul>
*/
public class RoleDiagramPreferencePage extends BasePreferencePage implements
ModifyListener {
private static int MIN_HORIZONTAL_SPACING = 50;
private static int MAX_HORIZONTAL_SPACING = 200;
private static int MIN_VERTICAL_SPACING = 25;
private static int MAX_VERTICAL_SPACING = 100;
private static int MIN_TEXT_LINES = 1;
private static int MAX_TEXT_LINES = 5;
private Composite composite;
private Text horizonalSpacingText;
private Text verticalSpacingText;
private Text textLinesText;
/**
* Creates and returns the SWT control for the customized body of this
* preference page under the given parent composite.
*
* @param parent
* the parent composite
* @return the new control
*/
protected Control createContents(Composite parent) {
composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout(1, false));
// Create Spacing between task and work product elements group.
Group elementSpacingGroup = createGridLayoutGroup(composite,
PublishingUIResources.elementSpacingGroup_text, 2);
createLabel(elementSpacingGroup,
PublishingUIResources.tasksHorizonalSpacingLabel_text);
horizonalSpacingText = createEditableText(elementSpacingGroup, "", 25); //$NON-NLS-1$
createLabel(elementSpacingGroup,
PublishingUIResources.tasksVerticalSpacingLabel_text);
verticalSpacingText = createEditableText(elementSpacingGroup, "", 25); //$NON-NLS-1$
// Create Element text label group.
Group elementTextLabelGroup = createGridLayoutGroup(composite,
PublishingUIResources.elementTextLabelGroup_text, 2);
createLabel(elementTextLabelGroup,
PublishingUIResources.maxLineOfTextLabel_text);
textLinesText = createEditableText(elementTextLabelGroup, "", 15); //$NON-NLS-1$
initControls();
addListeners();
return composite;
}
/**
* Initializes the preference page controls with data.
*/
protected void initControls() {
horizonalSpacingText.setText(String.valueOf(LibraryPreferences
.getRoleDiagramHorizontalSpacing()));
verticalSpacingText.setText(String.valueOf(LibraryPreferences
.getRoleDiagramVerticalSpacing()));
textLinesText.setText(String.valueOf(LibraryPreferences
.getRoleDiagramMaximumTextLines()));
}
/**
* Adds event listeners to the preference page controls.
*/
protected void addListeners() {
horizonalSpacingText.addModifyListener(this);
verticalSpacingText.addModifyListener(this);
textLinesText.addModifyListener(this);
}
/**
* @see org.eclipse.swt.events.ModifyListener#modifyText(ModifyEvent)
*/
public void modifyText(ModifyEvent e) {
setErrorMessage(null);
setValid(true);
int value = 0;
if (e.widget == horizonalSpacingText) {
value = getHorizontalSpacing();
if (value < MIN_HORIZONTAL_SPACING
|| value > MAX_HORIZONTAL_SPACING) {
setErrorMessage(PublishingUIResources.bind(
PublishingUIResources.invalidHorizonalSpacingError_msg,
new Object[] { new Integer(MIN_HORIZONTAL_SPACING),
new Integer(MAX_HORIZONTAL_SPACING) }));
setValid(false);
}
} else if (e.widget == verticalSpacingText) {
value = getVerticalSpacing();
if (value < MIN_VERTICAL_SPACING || value > MAX_VERTICAL_SPACING) {
setErrorMessage(PublishingUIResources.bind(
PublishingUIResources.invalidVerticalSpacingError_msg,
new Object[] { new Integer(MIN_VERTICAL_SPACING),
new Integer(MAX_VERTICAL_SPACING) }));
setValid(false);
}
} else if (e.widget == textLinesText) {
value = getMaximumTextLines();
if (value < MIN_TEXT_LINES || value > MAX_TEXT_LINES) {
setErrorMessage(PublishingUIResources.bind(
PublishingUIResources.invalidTextLinesError_msg,
new Object[] { new Integer(MIN_TEXT_LINES),
new Integer(MAX_TEXT_LINES) }));
setValid(false);
}
}
updateApplyButton();
}
/**
* Performs special processing when this page's Defaults button has been
* pressed.
*/
protected void performDefaults() {
super.performDefaults();
horizonalSpacingText.setText("" //$NON-NLS-1$
+ LibraryPreferences.getDefaultRoleDiagramHorizontalSpacing());
verticalSpacingText.setText("" //$NON-NLS-1$
+ LibraryPreferences.getDefaultRoleDiagramVerticalSpacing());
textLinesText.setText("" //$NON-NLS-1$
+ LibraryPreferences.getDefaultRoleDiagramMaximumTextLines());
}
/**
* @see org.eclipse.jface.preference.PreferencePage#performOk()
*/
public boolean performOk() {
LibraryPreferences
.setRoleDiagramHorizontalSpacing(getHorizontalSpacing());
LibraryPreferences.setRoleDiagramVerticalSpacing(getVerticalSpacing());
LibraryPreferences
.setRoleDiagramMaximumTextLines(getMaximumTextLines());
return true;
}
/**
* Gets the user specified horizontal spacing between tasks and roles.
*/
protected int getHorizontalSpacing() {
return StrUtil.getIntValue(horizonalSpacingText.getText().trim(), 0);
}
/**
* Gets the user specified vertical spacing between tasks and roles.
*/
protected int getVerticalSpacing() {
return StrUtil.getIntValue(verticalSpacingText.getText().trim(), 0);
}
/**
* Gets the user specified element label text lines.
*/
protected int getMaximumTextLines() {
return StrUtil.getIntValue(textLinesText.getText().trim(), 0);
}
}