blob: cb52e041b865b5c7a6ebc2916e222e7483897b0d [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 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.authoring.ui.preferences;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.epf.authoring.ui.AuthoringUIResources;
import org.eclipse.epf.authoring.ui.AuthoringUIText;
import org.eclipse.epf.common.utils.FileUtil;
import org.eclipse.epf.library.LibraryPlugin;
import org.eclipse.epf.library.prefs.LibraryPreferenceConstants;
import org.eclipse.epf.library.ui.preferences.LibraryUIPreferences;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
/**
* Library options preference page
*
* @author BingXue Xu
* @since 1.0
*/
public class LibraryPrefPage extends PreferencePage implements
IWorkbenchPreferencePage, SelectionListener, ModifyListener {
Composite composite_tab;
Text ctrl_libParentPath;
Button ctrl_browseButton;
String defLibPPath = "/"; //$NON-NLS-1$
private Button bakCheckbox;
private Button discardUnresolvedRefCheckBox;
Text ctrl_defaultListLength;
private final String DEFAULT_LIST_LENGTH = "10";
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
*/
protected Control createContents(Composite parent) {
// composite_tab << parent
composite_tab = createComposite(parent, 3);
// createLabel(composite_tab, "Choose a library save option:");
//
// radio button composite << tab composite
// Composite composite_radioButton = createComposite(composite_tab, 1);
// radioButton1 = createRadioButton(composite_radioButton, "Save as
// multiple folders");
// radioButton2 = createRadioButton(composite_radioButton, "Save as a
// single file");
createLabel(composite_tab, " ", 3); //$NON-NLS-1$
createLabel(composite_tab, AuthoringUIResources.chooseDefaultDirectory_text, 3);
// Directory Path
createLabel(composite_tab, AuthoringUIResources.directory_text, 1);
ctrl_libParentPath = new Text(composite_tab, SWT.BORDER);
{
GridData gridData = new GridData(GridData.BEGINNING
| GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
gridData.widthHint = 400;
ctrl_libParentPath.setLayoutData(gridData);
}
ctrl_libParentPath.setText(defLibPPath);
ctrl_browseButton = new Button(composite_tab, SWT.NONE);
ctrl_browseButton.setText(AuthoringUIText.BROWSE_BUTTON_TEXT);
{
GridData gridData = new GridData(GridData.END
| GridData.GRAB_HORIZONTAL);
ctrl_browseButton.setLayoutData(gridData);
}
createLabel(composite_tab, " ", 3); //$NON-NLS-1$
createLine(composite_tab, 3);
createLabel(composite_tab, " ", 3); //$NON-NLS-1$
// backup before save check box
//
createLabel(composite_tab, " ", 1); //$NON-NLS-1$
bakCheckbox = new Button(composite_tab, SWT.CHECK);
bakCheckbox.setText(AuthoringUIResources.backupbeforesave_text);
createLabel(composite_tab, " ", 1); //$NON-NLS-1$
// 'discard unresolved references' check box
createLabel(composite_tab, " ", 1); //$NON-NLS-1$
discardUnresolvedRefCheckBox = new Button(composite_tab, SWT.CHECK);
discardUnresolvedRefCheckBox.setText(AuthoringUIResources.discardunresolvedref);
createLabel(composite_tab, " ", 1); //$NON-NLS-1$
createLabel(composite_tab, " ", 3); //$NON-NLS-1$
createLine(composite_tab, 3);
Composite composite_tab_size = createComposite(composite_tab, 3);
{
GridData gridData = new GridData(GridData.BEGINNING
| GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
gridData.horizontalSpan=3;
composite_tab_size.setLayoutData(gridData);
}
createLabel(composite_tab_size, AuthoringUIResources.default_list_length_label, 1);
ctrl_defaultListLength = new Text(composite_tab_size, SWT.BORDER);
{
GridData gridData = new GridData(GridData.BEGINNING
| GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
gridData.horizontalSpan=2;
ctrl_defaultListLength.setLayoutData(gridData);
}
createLine(composite_tab, 3);
initializeValues();
ctrl_browseButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
openDirectoryDialog();
}
});
// font = null;
return new Composite(parent, SWT.NULL);
}
private void openDirectoryDialog() {
try {
DirectoryDialog dd = new DirectoryDialog(composite_tab.getShell(),
SWT.NONE);
String destination = dd.open();
if (destination != null) {
ctrl_libParentPath.setText(destination);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
private Composite createComposite(Composite parent, int numColumns) {
Composite composite = new Composite(parent, SWT.NULL);
// GridLayout
GridLayout layout = new GridLayout();
layout.numColumns = numColumns;
composite.setLayout(layout);
// GridData
GridData data = new GridData();
data.verticalAlignment = GridData.FILL;
data.horizontalAlignment = GridData.FILL;
composite.setLayoutData(data);
return composite;
}
private Label createLabel(Composite parent, String text, int span) {
Label label = new Label(parent, SWT.LEFT);
label.setText(text);
GridData data = new GridData();
data.horizontalSpan = span;
data.horizontalAlignment = GridData.FILL;
label.setLayoutData(data);
return label;
}
// private Button createRadioButton(Composite parent, String label) {
// Button button = new Button(parent, SWT.RADIO | SWT.LEFT);
// button.setText(label);
// button.addSelectionListener(this);
// GridData data = new GridData();
// button.setLayoutData(data);
// return button;
// }
private void createLine(Composite parent, int ncol) {
Label line = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL
| SWT.BOLD);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalSpan = ncol;
line.setLayoutData(gridData);
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore()
*/
protected IPreferenceStore doGetPreferenceStore() {
return LibraryPlugin.getDefault().getPreferenceStore();
// return PlatformUI.getWorkbench().getPreferenceStore();
}
/**
* Initializes states of the controls using default values in the preference
* store.
*/
private void initializeDefaults() {
IPreferenceStore store = getPreferenceStore();
defLibPPath = store
.getDefaultString(LibraryPreferenceConstants.PREF_DEFAULT_LIBRARY_PARENT_DIRECTORY);
if (defLibPPath == null || defLibPPath.length() == 0)
defLibPPath = System.getProperty("user.home") + //$NON-NLS-1$
// FileUtil.FILE_SEP + LibraryUIManager.getAppName() + //$NON-NLS-1$
FileUtil.FILE_SEP + LibraryUIPreferences.getApplicationShortName() +
FileUtil.FILE_SEP + "Method Libraries"; //$NON-NLS-1$
// System.out.println("DEBUG: default defLibPPath = " +
// defLibPPath);
ctrl_libParentPath.setText(defLibPPath);
// radioButton1.setSelection(false);
// radioButton2.setSelection(false);
// int choice =
// store.getDefaultInt(LibaryPreferenceConstants.PRE_RADIO_SAVE_CHOICE);
// switch (choice) {
// case 1:
// radioButton1.setSelection(true);
// break;
// case 2:
// radioButton2.setSelection(true);
// break;
// default:
// radioButton1.setSelection(true);
// break;
// }
bakCheckbox
.setSelection(store
.getDefaultBoolean(LibraryPreferenceConstants.PREF_BACK_UP_BEFORE_SAVE));
discardUnresolvedRefCheckBox
.setSelection(store
.getDefaultBoolean(LibraryPreferenceConstants.PREF_DISCARD_UNRESOLVED_REFERENCES));
String listLength = store
.getString(LibraryPreferenceConstants.PREF_DEFAULT_HISTORY_SIZE);
if(listLength==null || listLength.length()<=0)
listLength = DEFAULT_LIST_LENGTH;
ctrl_defaultListLength.setText(listLength);
}
private boolean isDigitStr(String str){
Pattern pattern = Pattern.compile("[0-9]+");
Matcher matcher = pattern.matcher((CharSequence)str);
return matcher.matches();
}
/**
* Initializes states of the controls from the preference store.
*/
private void initializeValues() {
IPreferenceStore store = getPreferenceStore();
defLibPPath = store
.getString(LibraryPreferenceConstants.PREF_DEFAULT_LIBRARY_PARENT_DIRECTORY);
if (defLibPPath == null || defLibPPath.length() == 0)
defLibPPath = System.getProperty("user.home") + //$NON-NLS-1$
// FileUtil.FILE_SEP + LibraryUIManager.getAppName() + //$NON-NLS-1$
FileUtil.FILE_SEP + LibraryUIPreferences.getApplicationShortName() +
FileUtil.FILE_SEP + "Method Libraries"; //$NON-NLS-1$
// System.out.println("DEBUG: read defLibPPath = " + defLibPPath);
ctrl_libParentPath.setText(defLibPPath);
// int choice =
// store.getInt(LibaryPreferenceConstants.PRE_RADIO_SAVE_CHOICE);
// switch (choice) {
// case 1:
// radioButton1.setSelection(true);
// break;
// case 2:
// radioButton2.setSelection(true);
// break;
// default:
// radioButton1.setSelection(true);
// break;
// }
bakCheckbox
.setSelection(store
.getBoolean(LibraryPreferenceConstants.PREF_BACK_UP_BEFORE_SAVE));
discardUnresolvedRefCheckBox
.setSelection(store
.getBoolean(LibraryPreferenceConstants.PREF_DISCARD_UNRESOLVED_REFERENCES));
String listLength = store
.getString(LibraryPreferenceConstants.PREF_DEFAULT_HISTORY_SIZE);
if(listLength==null || listLength.length()<=0)
listLength = DEFAULT_LIST_LENGTH;
ctrl_defaultListLength.setText(listLength);
}
/*
* (non-Javadoc) Method declared on PreferencePage
*/
protected void performDefaults() {
super.performDefaults();
initializeDefaults();
}
/*
* (non-Javadoc) Method declared on PreferencePage
*/
public boolean performOk() {
storeValues();
LibraryPlugin.getDefault().savePluginPreferences();
return true;
}
/**
* Stores the values of the controls back to the preference store.
*/
private void storeValues() {
IPreferenceStore store = getPreferenceStore();
defLibPPath = ctrl_libParentPath.getText().trim();
System.out.println("DEBUG: defLibPPath = " + defLibPPath); //$NON-NLS-1$
store
.setValue(
LibraryPreferenceConstants.PREF_DEFAULT_LIBRARY_PARENT_DIRECTORY,
defLibPPath);
// int choice = 1;
// if (radioButton2.getSelection())
// choice = 2;
//
// store.setValue(LibaryPreferenceConstants.PRE_RADIO_SAVE_CHOICE,
// choice);
store.setValue(LibraryPreferenceConstants.PREF_BACK_UP_BEFORE_SAVE,
bakCheckbox.getSelection());
store.setValue(
LibraryPreferenceConstants.PREF_DISCARD_UNRESOLVED_REFERENCES,
discardUnresolvedRefCheckBox.getSelection());
String listLength = ctrl_defaultListLength.getText();
if(!isDigitStr(listLength))
listLength = DEFAULT_LIST_LENGTH;
else{
if(Integer.parseInt(listLength)<=0)
listLength = DEFAULT_LIST_LENGTH;
}
store.setValue(
LibraryPreferenceConstants.PREF_DEFAULT_HISTORY_SIZE, listLength);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
*/
public void init(IWorkbench workbench) {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetDefaultSelected(SelectionEvent e) {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
*/
public void modifyText(ModifyEvent e) {
}
}