/*******************************************************************************
* Copyright (c) 2005, 2015 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 API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.ide;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
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.Group;
/**
* A class to handle editing of the Line delimiter preferences in core.
*
* @since 3.1
*/
public class ResourceDragAndDropEditor {
class PreferenceGroup
{
Group group;
String preferenceKey;
String title;
String[] labels;
String[] values;
Button[] buttons;
public PreferenceGroup(String title, String pref, String[] labels, String[] values) {
this.preferenceKey = pref;
this.title = title;
this.labels = labels;
this.values = values;
}
public void createControl(Composite parent) {
Font font = parent.getFont();
group = new Group(parent, SWT.NONE);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
group.setLayoutData(data);
GridLayout layout = new GridLayout();
layout.numColumns = labels.length;
group.setLayout(layout);
group.setText(title);
group.setFont(font);
buttons = new Button[labels.length];
for (int i = 0; i < labels.length; i++) {
buttons[i] = new Button(group, SWT.RADIO);
buttons[i].setText(labels[i]);
buttons[i].setData(values[i]);
buttons[i].setFont(font);
}
}
/**
*
*/
public void doLoad() {
String resourcePreference = getStoredValue(false);
updateState(resourcePreference);
}
/**
* @param value
*/
private void updateState(String value) {
for (int i = 0; i < labels.length; i++) {
if (value.equals(buttons[i].getData()))
buttons[i].setSelection(true);
}
}
/**
*
*/
public void loadDefault() {
String value = getStoredValue(true);
updateState(value);
}
/**
* Returns the value that is currently stored for the encoding.
* @param useDefault
*
* @return the currently stored encoding
*/
public String getStoredValue(boolean useDefault) {
IPreferenceStore store = IDEWorkbenchPlugin.getDefault().getPreferenceStore();
if (useDefault)
return store.getDefaultString(preferenceKey);
return store.getString(preferenceKey);
}
/**
* @return the current selection
*/
private String getSelection() {
for (int i = 0; i < labels.length; i++) {
if (buttons[i].getSelection())
return (String) buttons[i].getData();
}
return values[0];
}
/**
*
*/
public void store() {
IPreferenceStore store = IDEWorkbenchPlugin.getDefault().getPreferenceStore();
store.putValue(preferenceKey, getSelection());
}
/**
* @param enableLinking
*/
public void setEnabled(boolean enableLinking) {
group.setEnabled(enableLinking);
for (int i = 0; i < labels.length; i++) {
if (buttons[i] != null && !buttons[i].isDisposed())
buttons[i].setEnabled(enableLinking);
}
}
}
PreferenceGroup folderPref;
PreferenceGroup virtualFolderPref;
/**
* Creates a new drag and drop resource editor with the given preference name, label
* and parent.
*
* @param composite
* the parent of the field editor's control
*/
public ResourceDragAndDropEditor(Composite composite) {
folderPref = new PreferenceGroup(IDEWorkbenchMessages.LinkedResourcesPreference_dragAndDropHandlingMessage,
IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE,
new String[] {
IDEWorkbenchMessages.Prompt,
IDEWorkbenchMessages.linkedResourcesPreference_copy,
IDEWorkbenchMessages.LinkedResourcesPreference_link,
IDEWorkbenchMessages.LinkedResourcesPreference_linkAndVirtualFolder },
new String[] {IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_PROMPT,
IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_MOVE_COPY,
IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_LINK,
IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_LINK_AND_VIRTUAL_FOLDER});
virtualFolderPref = new PreferenceGroup(IDEWorkbenchMessages.LinkedResourcesPreference_dragAndDropVirtualFolderHandlingMessage,
IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_VIRTUAL_FOLDER_MODE,
new String[] {
IDEWorkbenchMessages.LinkedResourcesPreference_promptVirtual,
IDEWorkbenchMessages.LinkedResourcesPreference_linkVirtual,
IDEWorkbenchMessages.LinkedResourcesPreference_linkAndVirtualFolderVirtual },
new String[] {IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_PROMPT,
IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_LINK,
IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_LINK_AND_VIRTUAL_FOLDER});
createControl(composite);
}
/**
* Creates this field editor's main control containing all of its basic
* controls.
*
* @param parent
* the parent control
*/
protected void createControl(Composite parent) {
folderPref.createControl(parent);
virtualFolderPref.createControl(parent);
}
/**
* Load the list items from core and update the state of the buttons to
* match what the preference is currently set to.
*/
public void doLoad() {
folderPref.doLoad();
virtualFolderPref.doLoad();
}
/**
* Initializes this field editor with the preference value from the
* preference store.
*/
public void loadDefault() {
folderPref.loadDefault();
virtualFolderPref.loadDefault();
}
/**
* Store the currently selected line delimiter value in the preference
* store.
*/
public void store() {
folderPref.store();
virtualFolderPref.store();
}
/**
* Sets the enabled state of the group's widgets.
* Does nothing if called prior to calling <code>createContents</code>.
* @param enableLinking
*/
public void setEnabled(boolean enableLinking) {
folderPref.setEnabled(enableLinking);
virtualFolderPref.setEnabled(enableLinking);
}
}