blob: 3ecbab3a856c0cc1cd5da916f1ce9dc83b769cb9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Brock Janiczak (brockj@tpg.com.au) - Bug 158456 Preview fonts and colours in the CVS decorator preference page
*******************************************************************************/
package org.eclipse.team.internal.ccvs.ui;
import java.util.*;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.*;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.*;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.eclipse.team.internal.ccvs.core.CVSException;
import org.eclipse.team.internal.ccvs.core.client.Command;
import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation;
import org.eclipse.team.internal.ui.SWTUtils;
import org.eclipse.ui.*;
import org.eclipse.ui.dialogs.ListSelectionDialog;
import org.eclipse.ui.ide.IDE.SharedImages;
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
public class CVSDecoratorPreferencesPage extends PreferencePage implements IWorkbenchPreferencePage {
private static class PreviewFile {
public final String name, tag, mode;
public final int type;
public final boolean added, dirty, hasRemote, ignored, newResource;
public Collection children;
public PreviewFile(String name, int type, boolean added, boolean newResource, boolean dirty, boolean ignored, boolean hasRemote, String mode, String tag) {
this.name= name;
this.type= type;
this.added= added;
this.ignored= ignored;
this.dirty= dirty;
this.hasRemote= hasRemote;
this.newResource= newResource;
this.mode= mode != null ? mode : Command.KSUBST_TEXT.getShortDisplayText();
this.tag= tag != null ? tag : ""; //$NON-NLS-1$
this.children= Collections.EMPTY_LIST;
}
public void configureDecoration(CVSDecoration decoration) {
decoration.setResourceType(type);
decoration.setAdded(added);
decoration.setDirty(dirty);
decoration.setNewResource(newResource);
decoration.setIgnored(ignored);
decoration.setHasRemote(hasRemote);
decoration.setTag(tag);
decoration.setKeywordSubstitution(mode);
}
}
private static class FormatEditor extends SelectionAdapter {
private final Text fText;
private final Map fBindings;
private final String fKey;
public FormatEditor(Composite composite, String title, String buttonText, Map bindings, String key) {
fKey= key;
fBindings= bindings;
final Label label= SWTUtils.createLabel(composite, title);
label.setLayoutData(SWTUtils.createGridData(SWT.DEFAULT, SWT.DEFAULT, false, false));
fText= SWTUtils.createText(composite);
final Button button = new Button(composite, SWT.NONE);
button.setText(buttonText);
button.setLayoutData(new GridData());
button.addSelectionListener(this);
}
public void addModifyListener(ModifyListener listener) {
fText.addModifyListener(listener);
}
public String getText() {
return fText.getText();
}
@Override
public void widgetSelected(SelectionEvent e) {
final ILabelProvider labelProvider = new LabelProvider() {
@Override
public String getText(Object element) {
return ((Map.Entry)element).getKey() + " - " + ((Map.Entry)element).getValue(); //$NON-NLS-1$
}
};
final IStructuredContentProvider contentsProvider = new IStructuredContentProvider() {
@Override
public Object[] getElements(Object inputElement) {
return ((Collection)inputElement).toArray();
}
@Override
public void dispose() {}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
};
final ListSelectionDialog dialog= new ListSelectionDialog(
fText.getShell(),
fBindings.entrySet(),
contentsProvider,
labelProvider,
CVSUIMessages.CVSDecoratorPreferencesPage_0);
dialog.setHelpAvailable(false);
dialog.setTitle(CVSUIMessages.CVSDecoratorPreferencesPage_1);
if (dialog.open() != Window.OK)
return;
Object[] result = dialog.getResult();
for (int i = 0; i < result.length; i++) {
fText.insert("{"+((Map.Entry)result[i]).getKey() +"}"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
public void performOk(IPreferenceStore store) {
store.setValue(fKey, fText.getText());
}
public void performDefaults(IPreferenceStore store) {
store.setToDefault(fKey);
fText.setText(store.getDefaultString(fKey));
}
public void initializeValue(IPreferenceStore store) {
fText.setText(
CVSDecoration.updateOldDirtyFlag(store.getString(fKey)));
}
}
private abstract class Tab extends Observable {
public abstract void initializeValues(IPreferenceStore store);
public abstract void performDefaults(IPreferenceStore store);
public abstract void performOk(IPreferenceStore store);
public abstract void setPreferences(Preferences preferences);
}
private class IconDecoratorTab extends Tab implements SelectionListener {
private final Button fDirty, fHasRemote, fAdded, fNewResource;
public IconDecoratorTab(TabFolder parent) {
final Composite composite= SWTUtils.createHFillComposite(parent, SWTUtils.MARGINS_DEFAULT);
fDirty= SWTUtils.createCheckBox(composite, CVSUIMessages.CVSDecoratorPreferencesPage_2);
fDirty.addSelectionListener(this);
fHasRemote= SWTUtils.createCheckBox(composite, CVSUIMessages.CVSDecoratorPreferencesPage_3);
fHasRemote.addSelectionListener(this);
fAdded= SWTUtils.createCheckBox(composite, CVSUIMessages.CVSDecoratorPreferencesPage_4);
fAdded.addSelectionListener(this);
fNewResource= SWTUtils.createCheckBox(composite, CVSUIMessages.CVSDecoratorPreferencesPage_5);
fNewResource.addSelectionListener(this);
final TabItem item= new TabItem(parent, SWT.NONE);
item.setText(CVSUIMessages.CVSDecoratorPreferencesPage_6);
item.setControl(composite);
}
@Override
public void widgetSelected(SelectionEvent e) {
setChanged();
notifyObservers();
}
@Override
public void initializeValues(IPreferenceStore store) {
fDirty.setSelection(store.getBoolean(ICVSUIConstants.PREF_SHOW_DIRTY_DECORATION));
fAdded.setSelection(store.getBoolean(ICVSUIConstants.PREF_SHOW_ADDED_DECORATION));
fHasRemote.setSelection(store.getBoolean(ICVSUIConstants.PREF_SHOW_HASREMOTE_DECORATION));
fNewResource.setSelection(store.getBoolean(ICVSUIConstants.PREF_SHOW_NEWRESOURCE_DECORATION));
}
@Override
public void performOk(IPreferenceStore store) {
store.setValue(ICVSUIConstants.PREF_SHOW_DIRTY_DECORATION, fDirty.getSelection());
store.setValue(ICVSUIConstants.PREF_SHOW_ADDED_DECORATION, fAdded.getSelection());
store.setValue(ICVSUIConstants.PREF_SHOW_HASREMOTE_DECORATION, fHasRemote.getSelection());
store.setValue(ICVSUIConstants.PREF_SHOW_NEWRESOURCE_DECORATION, fNewResource.getSelection());
}
@Override
public void performDefaults(IPreferenceStore store) {
fDirty.setSelection(store.getDefaultBoolean(ICVSUIConstants.PREF_SHOW_DIRTY_DECORATION));
fAdded.setSelection(store.getDefaultBoolean(ICVSUIConstants.PREF_SHOW_ADDED_DECORATION));
fHasRemote.setSelection(store.getDefaultBoolean(ICVSUIConstants.PREF_SHOW_HASREMOTE_DECORATION));
fNewResource.setSelection(store.getDefaultBoolean(ICVSUIConstants.PREF_SHOW_NEWRESOURCE_DECORATION));
}
@Override
public void setPreferences(Preferences prefs) {
prefs.setDefault(ICVSUIConstants.PREF_SHOW_DIRTY_DECORATION, fDirty.getSelection());
prefs.setDefault(ICVSUIConstants.PREF_SHOW_ADDED_DECORATION, fAdded.getSelection());
prefs.setDefault(ICVSUIConstants.PREF_SHOW_HASREMOTE_DECORATION, fHasRemote.getSelection());
prefs.setDefault(ICVSUIConstants.PREF_SHOW_NEWRESOURCE_DECORATION, fNewResource.getSelection());
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
}
private class TextDecoratorTab extends Tab implements ModifyListener {
private final FormatEditor fFileDecoration;
private final FormatEditor fFolderDecoration;
private final FormatEditor fProjectDecoration;
private final Text dirtyFlag;
private final Text addedFlag;
public TextDecoratorTab(TabFolder parent) {
final Composite composite= SWTUtils.createHFillComposite(parent, SWTUtils.MARGINS_DEFAULT, 3);
Dialog.applyDialogFont(composite);
fFileDecoration= new FormatEditor(composite, CVSUIMessages.CVSDecoratorPreferencesPage_7, CVSUIMessages.CVSDecoratorPreferencesPage_8, BINDINGS, ICVSUIConstants.PREF_FILETEXT_DECORATION); //
fFolderDecoration= new FormatEditor(composite, CVSUIMessages.CVSDecoratorPreferencesPage_9, CVSUIMessages.CVSDecoratorPreferencesPage_10, FOLDER_BINDINGS, ICVSUIConstants.PREF_FOLDERTEXT_DECORATION); //
fProjectDecoration= new FormatEditor(composite, CVSUIMessages.CVSDecoratorPreferencesPage_11, CVSUIMessages.CVSDecoratorPreferencesPage_12, FOLDER_BINDINGS, ICVSUIConstants.PREF_PROJECTTEXT_DECORATION); //
fFileDecoration.addModifyListener(this);
fFolderDecoration.addModifyListener(this);
fProjectDecoration.addModifyListener(this);
SWTUtils.createPlaceholder(composite, 1, 3);
final Label dirtyLabel= SWTUtils.createLabel(composite, CVSUIMessages.CVSDecoratorPreferencesPage_13, 1);
dirtyLabel.setLayoutData(new GridData());
dirtyFlag = new Text(composite, SWT.BORDER);
dirtyFlag.setLayoutData(SWTUtils.createHFillGridData(1));
dirtyFlag.addModifyListener(this);
SWTUtils.createPlaceholder(composite, 1, 1);
final Label addedLabel= SWTUtils.createLabel(composite, CVSUIMessages.CVSDecoratorPreferencesPage_14, 1);
addedLabel.setLayoutData(new GridData());
addedFlag = new Text(composite, SWT.BORDER);
addedFlag.setLayoutData(SWTUtils.createHFillGridData(1));
addedFlag.addModifyListener(this);
SWTUtils.createPlaceholder(composite, 1, 1);
SWTUtils.createPlaceholder(composite, 1, 3);
final TabItem item= new TabItem(parent, SWT.NONE);
item.setText(CVSUIMessages.CVSDecoratorPreferencesPage_15);
item.setControl(composite);
}
@Override
public void initializeValues(IPreferenceStore store) {
fFileDecoration.initializeValue(store);
fFolderDecoration.initializeValue(store);
fProjectDecoration.initializeValue(store);
addedFlag.setText(store.getString(ICVSUIConstants.PREF_ADDED_FLAG));
dirtyFlag.setText(store.getString(ICVSUIConstants.PREF_DIRTY_FLAG));
}
@Override
public void performOk(IPreferenceStore store) {
fFileDecoration.performOk(store);
fFolderDecoration.performOk(store);
fProjectDecoration.performOk(store);
store.setValue(ICVSUIConstants.PREF_ADDED_FLAG, addedFlag.getText());
store.setValue(ICVSUIConstants.PREF_DIRTY_FLAG, dirtyFlag.getText());
}
@Override
public void performDefaults(IPreferenceStore store) {
fFileDecoration.performDefaults(store);
fFolderDecoration.performDefaults(store);
fProjectDecoration.performDefaults(store);
addedFlag.setText(store.getDefaultString(ICVSUIConstants.PREF_ADDED_FLAG));
dirtyFlag.setText(store.getDefaultString(ICVSUIConstants.PREF_DIRTY_FLAG));
}
public String getFileTextFormat() {
return fFileDecoration.getText();
}
public String getFolderTextFormat() {
return fFolderDecoration.getText();
}
public String getProjectTextFormat() {
return fProjectDecoration.getText();
}
@Override
public void modifyText(ModifyEvent e) {
setChanged();
notifyObservers();
}
@Override
public void setPreferences(Preferences prefs) {
prefs.setDefault(ICVSUIConstants.PREF_CALCULATE_DIRTY, true);
prefs.setDefault(ICVSUIConstants.PREF_DIRTY_FLAG, dirtyFlag.getText());
prefs.setDefault(ICVSUIConstants.PREF_ADDED_FLAG, addedFlag.getText());
}
}
private class GeneralTab extends Tab implements SelectionListener {
private final Button fShowDirty;
private final Button fUseFontDecorations;
public GeneralTab(TabFolder parent) {
final Composite composite= SWTUtils.createHFillComposite(parent, SWTUtils.MARGINS_DEFAULT);
Dialog.applyDialogFont(composite);
SWTUtils.createPreferenceLink((IWorkbenchPreferenceContainer) getContainer(), composite, CVSUIMessages.CVSDecoratorPreferencesPage_36, CVSUIMessages.CVSDecoratorPreferencesPage_37);
fShowDirty= SWTUtils.createCheckBox(composite, CVSUIMessages.CVSDecoratorPreferencesPage_16);
SWTUtils.createLabel(composite, CVSUIMessages.CVSDecoratorPreferencesPage_17);
fUseFontDecorations= SWTUtils.createCheckBox(composite, CVSUIMessages.CVSDecoratorPreferencesPage_18);
SWTUtils.createPreferenceLink((IWorkbenchPreferenceContainer) getContainer(), composite, CVSUIMessages.CVSDecoratorPreferencesPage_19, CVSUIMessages.CVSDecoratorPreferencesPage_20);
fShowDirty.addSelectionListener(this);
fUseFontDecorations.addSelectionListener(this);
final TabItem item= new TabItem(parent, SWT.NONE);
item.setText(CVSUIMessages.CVSDecoratorPreferencesPage_21);
item.setControl(composite);
}
@Override
public void widgetSelected(SelectionEvent e) {
setChanged();
notifyObservers();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
@Override
public void initializeValues(IPreferenceStore store) {
fShowDirty.setSelection(store.getBoolean(ICVSUIConstants.PREF_CALCULATE_DIRTY));
fUseFontDecorations.setSelection(store.getBoolean(ICVSUIConstants.PREF_USE_FONT_DECORATORS));
}
@Override
public void performDefaults(IPreferenceStore store) {
fShowDirty.setSelection(store.getDefaultBoolean(ICVSUIConstants.PREF_CALCULATE_DIRTY));
fUseFontDecorations.setSelection(store.getDefaultBoolean(ICVSUIConstants.PREF_USE_FONT_DECORATORS));
}
@Override
public void performOk(IPreferenceStore store) {
store.setValue(ICVSUIConstants.PREF_CALCULATE_DIRTY, fShowDirty.getSelection());
store.setValue(ICVSUIConstants.PREF_USE_FONT_DECORATORS, fUseFontDecorations.getSelection());
}
@Override
public void setPreferences(Preferences preferences) {
preferences.setValue(ICVSUIConstants.PREF_CALCULATE_DIRTY, fShowDirty.getSelection());
preferences.setValue(ICVSUIConstants.PREF_USE_FONT_DECORATORS, fUseFontDecorations.getSelection());
}
public boolean isFontDecorationEnabled() {
return this.fUseFontDecorations.getEnabled();
}
}
public class Preview extends LabelProvider implements Observer, ITreeContentProvider {
private final ResourceManager fImageCache;
private final TreeViewer fViewer;
public Preview(Composite composite) {
SWTUtils.createLabel(composite, CVSUIMessages.CVSDecoratorPreferencesPage_39);
fImageCache= new LocalResourceManager(JFaceResources.getResources());
fViewer = new TreeViewer(composite);
fViewer.getControl().setLayoutData(SWTUtils.createHVFillGridData());
fViewer.setContentProvider(this);
fViewer.setLabelProvider(this);
fViewer.setInput(ROOT);
fViewer.expandAll();
}
public void refresh() {
fViewer.refresh(true);
setColorsAndFonts();
}
private void setColorsAndFonts() {
TreeItem[] items = fViewer.getTree().getItems();
setColorsAndFonts(items);
}
private void setColorsAndFonts(TreeItem[] items) {
for (int i = 0; i < items.length; i++) {
if (fGeneralTab.isFontDecorationEnabled()) {
Color backGroundColor = getBackground(items[i].getData());
items[i].setBackground(backGroundColor);
Color foreGroundColor = getForeground(items[i].getData());
items[i].setForeground(foreGroundColor);
Font font = getFont(items[i].getData());
items[i].setFont(font);
} else {
items[i].setBackground(null);
items[i].setForeground(null);
items[i].setFont(null);
}
setColorsAndFonts(items[i].getItems());
}
}
@Override
public void update(Observable o, Object arg) {
refresh();
}
@Override
public Object[] getChildren(Object parentElement) {
return ((PreviewFile)parentElement).children.toArray();
}
@Override
public Object getParent(Object element) {
return null;
}
@Override
public boolean hasChildren(Object element) {
return !((PreviewFile)element).children.isEmpty();
}
@Override
public Object[] getElements(Object inputElement) {
return ((Collection)inputElement).toArray();
}
@Override
public void dispose() {
fImageCache.dispose();
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
public Color getBackground(Object element) {
return getDecoration(element).getBackgroundColor();
}
public Color getForeground(Object element) {
return getDecoration(element).getForegroundColor();
}
public Font getFont(Object element) {
return getDecoration(element).getFont();
}
@Override
public String getText(Object element) {
final CVSDecoration decoration = getDecoration(element);
final StringBuffer buffer = new StringBuffer();
final String prefix = decoration.getPrefix();
if (prefix != null)
buffer.append(prefix);
buffer.append(((PreviewFile)element).name);
final String suffix = decoration.getSuffix();
if (suffix != null)
buffer.append(suffix);
return buffer.toString();
}
public CVSDecoration getDecoration(Object element) {
final CVSDecoration decoration = buildDecoration((PreviewFile)element);
((PreviewFile)element).configureDecoration(decoration);
decoration.compute();
return decoration;
}
@Override
public Image getImage(Object element) {
final String s;
switch (((PreviewFile)element).type) {
case IResource.PROJECT:
s= SharedImages.IMG_OBJ_PROJECT; break;
case IResource.FOLDER:
s= ISharedImages.IMG_OBJ_FOLDER; break;
default:
s= ISharedImages.IMG_OBJ_FILE; break;
}
final Image baseImage= PlatformUI.getWorkbench().getSharedImages().getImage(s);
final ImageDescriptor overlay = getDecoration(element).getOverlay();
if (overlay == null)
return baseImage;
try {
return fImageCache.createImage(new DecorationOverlayIcon(baseImage, overlay, IDecoration.BOTTOM_RIGHT));
} catch (DeviceResourceException e) {
CVSUIPlugin.log(new Status(IStatus.ERROR, CVSUIPlugin.ID, 0, "Error creating decorator image", e)); //$NON-NLS-1$
}
return null;
}
}
private static class ThemeListener implements IPropertyChangeListener {
private final Preview fPreview;
ThemeListener(Preview preview) {
fPreview= preview;
}
@Override
public void propertyChange(PropertyChangeEvent event) {
fPreview.refresh();
}
}
protected static final Collection ROOT;
protected static final Map BINDINGS;
protected static final Map FOLDER_BINDINGS;
static {
BINDINGS= new HashMap();
BINDINGS.put(CVSDecoratorConfiguration.RESOURCE_NAME, CVSUIMessages.CVSDecoratorPreferencesPage_22);
BINDINGS.put(CVSDecoratorConfiguration.RESOURCE_TAG, CVSUIMessages.CVSDecoratorPreferencesPage_23);
BINDINGS.put(CVSDecoratorConfiguration.FILE_KEYWORD, CVSUIMessages.CVSDecoratorPreferencesPage_24);
BINDINGS.put(CVSDecoratorConfiguration.FILE_REVISION, CVSUIMessages.CVSDecoratorPreferencesPage_25);
BINDINGS.put(CVSDecoratorConfiguration.NEW_DIRTY_FLAG, CVSUIMessages.CVSDecoratorPreferencesPage_26);
BINDINGS.put(CVSDecoratorConfiguration.ADDED_FLAG, CVSUIMessages.CVSDecoratorPreferencesPage_27);
FOLDER_BINDINGS= new HashMap();
FOLDER_BINDINGS.put(CVSDecoratorConfiguration.RESOURCE_NAME, CVSUIMessages.CVSDecoratorPreferencesPage_28);
FOLDER_BINDINGS.put(CVSDecoratorConfiguration.RESOURCE_TAG, CVSUIMessages.CVSDecoratorPreferencesPage_29);
FOLDER_BINDINGS.put(CVSDecoratorConfiguration.REMOTELOCATION_HOST, CVSUIMessages.CVSDecoratorPreferencesPage_30);
FOLDER_BINDINGS.put(CVSDecoratorConfiguration.REMOTELOCATION_METHOD, CVSUIMessages.CVSDecoratorPreferencesPage_31);
FOLDER_BINDINGS.put(CVSDecoratorConfiguration.REMOTELOCATION_USER, CVSUIMessages.CVSDecoratorPreferencesPage_32);
FOLDER_BINDINGS.put(CVSDecoratorConfiguration.REMOTELOCATION_ROOT, CVSUIMessages.CVSDecoratorPreferencesPage_33);
FOLDER_BINDINGS.put(CVSDecoratorConfiguration.REMOTELOCATION_REPOSITORY, CVSUIMessages.CVSDecoratorPreferencesPage_34);
FOLDER_BINDINGS.put(CVSDecoratorConfiguration.REMOTELOCATION_LABEL, CVSUIMessages.CVSDecoratorPreferencesPage_38);
FOLDER_BINDINGS.put(CVSDecoratorConfiguration.NEW_DIRTY_FLAG, CVSUIMessages.CVSDecoratorPreferencesPage_35);
final PreviewFile project= new PreviewFile("Project", IResource.PROJECT, false, false, false, false, true, null, "v1_0"); //$NON-NLS-1$ //$NON-NLS-2$
final ArrayList children= new ArrayList();
children.add(new PreviewFile("Folder", IResource.FOLDER, false, false, false, false, true, null, null)); //$NON-NLS-1$
children.add(new PreviewFile("ignored.txt", IResource.FILE, false, false, false, true, false, null, null)); //$NON-NLS-1$
children.add(new PreviewFile("dirty.cpp", IResource.FILE, false, false, true, false, true, null, null)); //$NON-NLS-1$
children.add(new PreviewFile("added.java", IResource.FILE, true, false, true, false, false, null, null)); //$NON-NLS-1$
children.add(new PreviewFile("todo.txt", IResource.FILE, false, true, true, false, false, null, null)); //$NON-NLS-1$
children.add(new PreviewFile("bugs.txt", IResource.FILE, false, false, true, false, true, null, null)); //$NON-NLS-1$
children.add(new PreviewFile("archive.zip", IResource.FILE, false, false, true, false, true, Command.KSUBST_BINARY.getShortDisplayText(), null)); //$NON-NLS-1$
project.children= children;
ROOT= Collections.singleton(project);
}
private TextDecoratorTab fTextTab;
private Tab fIconTab;
private GeneralTab fGeneralTab;
private Preview fPreview;
private ThemeListener fThemeListener;
@Override
protected Control createContents(Composite parent) {
final Composite composite= SWTUtils.createHVFillComposite(parent, SWTUtils.MARGINS_NONE);
final Composite folderComposite= SWTUtils.createHFillComposite(composite, SWTUtils.MARGINS_NONE);
// create a tab folder for the page
final TabFolder tabFolder = new TabFolder(folderComposite, SWT.NONE);
tabFolder.setLayoutData(SWTUtils.createHFillGridData());
// text decoration options
fGeneralTab= new GeneralTab(tabFolder);
fTextTab= new TextDecoratorTab(tabFolder);
fIconTab= new IconDecoratorTab(tabFolder);
fPreview= new Preview(composite);
fTextTab.addObserver(fPreview);
fIconTab.addObserver(fPreview);
fGeneralTab.addObserver(fPreview);
initializeValues();
PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.DECORATORS_PREFERENCE_PAGE);
Dialog.applyDialogFont(parent);
PlatformUI.getWorkbench().getThemeManager().addPropertyChangeListener(fThemeListener= new ThemeListener(fPreview));
return tabFolder;
}
@Override
public void dispose() {
if (fThemeListener != null)
PlatformUI.getWorkbench().getThemeManager().removePropertyChangeListener(fThemeListener);
if (fPreview != null)
fPreview.dispose();
}
/**
* Initializes states of the controls from the preference store.
*/
private void initializeValues() {
final IPreferenceStore store = getPreferenceStore();
fTextTab.initializeValues(store);
fIconTab.initializeValues(store);
fGeneralTab.initializeValues(store);
fPreview.refresh();
setValid(true);
}
@Override
public void init(IWorkbench workbench) {
}
/**
* OK was clicked. Store the CVS preferences.
*
* @return whether it is okay to close the preference page
*/
@Override
public boolean performOk() {
final IPreferenceStore store = getPreferenceStore();
fTextTab.performOk(store);
fIconTab.performOk(store);
fGeneralTab.performOk(store);
if (store.needsSaving()) {
CVSUIPlugin.broadcastPropertyChange(new PropertyChangeEvent(this, CVSUIPlugin.P_DECORATORS_CHANGED, null, null));
CVSUIPlugin.getPlugin().savePluginPreferences();
}
return true;
}
/**
* Defaults was clicked. Restore the CVS preferences to
* their default values
*/
@Override
protected void performDefaults() {
final IPreferenceStore store = getPreferenceStore();
fTextTab.performDefaults(store);
fIconTab.performDefaults(store);
fGeneralTab.performDefaults(store);
fPreview.refresh();
super.performDefaults();
}
/**
* Returns preference store that belongs to the our plugin.
* This is important because we want to store
* our preferences separately from the desktop.
*
* @return the preference store for this plugin
*/
@Override
protected IPreferenceStore doGetPreferenceStore() {
return CVSUIPlugin.getPlugin().getPreferenceStore();
}
public CVSDecoration buildDecoration(PreviewFile file) {
final Preferences prefs = new Preferences();
fIconTab.setPreferences(prefs);
fTextTab.setPreferences(prefs);
fGeneralTab.setPreferences(prefs);
final CVSDecoration decoration= new CVSDecoration(prefs, fTextTab.getFileTextFormat(), fTextTab.getFolderTextFormat(), fTextTab.getProjectTextFormat());
decoration.setKeywordSubstitution(Command.KSUBST_TEXT.getShortDisplayText());
decoration.setRevision("1.45"); //$NON-NLS-1$
try {
decoration.setLocation(CVSRepositoryLocation.fromString(":pserver:alize@cvs.site.org:/home/cvsroot")); //$NON-NLS-1$
} catch (CVSException e) {
// continue without a location, since the location is hard coded an exception should never occur
}
return decoration;
}
}