/*******************************************************************************
* Copyright (c) 2006-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 API and implementation
* IBM Research
*******************************************************************************/
package com.ibm.research.tours.fx.wizards;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.themes.FontDefinition;
import org.eclipse.ui.internal.themes.IThemeRegistry;
import com.ibm.research.tours.adapters.StructuredContentProviderAdapter;
import com.ibm.research.tours.adapters.TableLabelProviderAdapter;
import com.ibm.research.tours.controls.FilteredTable;
import com.ibm.research.tours.controls.NQueryTablePatternFilter;
public class ResetFontPreferenceWizardPage extends WizardPage {
private String id, fLabel;
private FilteredTable fFontPrefRegistry;
protected ResetFontPreferenceWizardPage(String pageName)
{
super(pageName);
setTitle("Font preferences");
setDescription("Select the font preferences for the element.");
}
public void createControl(Composite parent)
{
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.verticalSpacing = 6;
composite.setLayout(layout);
Label label = new Label(composite,SWT.WRAP);
label.setText("Configure font for this element");
GridData data = new GridData(GridData.GRAB_HORIZONTAL
| GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL
| GridData.VERTICAL_ALIGN_CENTER);
label.setData(data);
ITableLabelProvider labelProvider = new TableLabelProviderAdapter(){
public String getColumnText(Object element, int columnIndex) {
if ( element instanceof FontDefinition )
{
FontDefinition defn = (FontDefinition) element;
if ( columnIndex==0 )
return defn.getName();
else if ( columnIndex==1 )
return defn.getDescription();
}
return null;
}
};
IContentProvider contentProvider = new StructuredContentProviderAdapter() {
public Object[] getElements(Object inputElement) {
IThemeRegistry registry = WorkbenchPlugin.getDefault().getThemeRegistry();
FontDefinition[] fontDefinitions = registry.getFonts();
return fontDefinitions;
}
};
fFontPrefRegistry = new FilteredTable(composite,SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL,new NQueryTablePatternFilter());
fFontPrefRegistry.getViewer().setContentProvider(contentProvider);
fFontPrefRegistry.getViewer().setSorter(new ViewerSorter());
fFontPrefRegistry.getViewer().setLabelProvider(labelProvider);
fFontPrefRegistry.getViewer().setInput(new Object());
fFontPrefRegistry.getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selected = (IStructuredSelection) event.getSelection();
if ( selected.isEmpty() )
{
ResetFontPreferenceWizardPage.this.setPageComplete(false);
}
else
{
FontDefinition defn = (FontDefinition) selected.getFirstElement();
ResetFontPreferenceWizardPage.this.setId(defn.getId());
ResetFontPreferenceWizardPage.this.setLabel(defn.getName());
ResetFontPreferenceWizardPage.this.setPageComplete(id!=null);
}
}
});
Table table = fFontPrefRegistry.getViewer().getTable();
table.setHeaderVisible(false);
table.setLinesVisible(true);
TableColumn nameColumn = new TableColumn(table,SWT.LEFT,0);
nameColumn.setWidth(240);
TableColumn descColumn = new TableColumn(table,SWT.LEFT,1);
descColumn.setWidth(640);
GridData registryListData = new GridData(GridData.FILL_HORIZONTAL);
registryListData.heightHint = 120;
registryListData.horizontalSpan = 2;
fFontPrefRegistry.setLayoutData(registryListData);
if ( id!=null )
{
IThemeRegistry registry = WorkbenchPlugin.getDefault().getThemeRegistry();
FontDefinition[] fontDefinitions = registry.getFonts();
for (FontDefinition defn : fontDefinitions )
{
if ( id.equals(defn.getId()) )
{
IStructuredSelection selection = new StructuredSelection(defn);
fFontPrefRegistry.getViewer().setSelection(selection, true);
break;
}
}
}
setPageComplete(id!=null);
setControl(composite);
}
@Override
public void dispose()
{
super.dispose();
}
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return id;
}
public void setLabel(String label)
{
fLabel = label;
}
public String getLabel()
{
return fLabel;
}
public void init(String preferenceId, String label) {
id = preferenceId;
fLabel = label;
}
}