/**
* Copyright (c) 2005-2006 Aptana, Inc.
*
* 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. If redistributing this code,
* this entire header must remain intact.
*/
package com.aptana.ide.editors.preferences;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.LocalResourceManager;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
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.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import com.aptana.ide.core.StringUtils;
import com.aptana.ide.editors.UnifiedEditorsPlugin;
import com.aptana.ide.editors.unified.contentassist.UnifiedContentAssistProcessor;
/**
* Allows the user to edit the set of user agents
*
* @since 3.1
*/
public final class UserAgentPreferencePage extends PreferencePage implements IWorkbenchPreferencePage
{
/**
* CategoryContentProvider
*
* @author Ingo Muschenetz
*/
private class CategoryContentProvider implements IStructuredContentProvider
{
/**
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object inputElement)
{
return (Object[]) inputElement;
}
/**
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose()
{
}
/**
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
* java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
{
}
}
/**
* CategoryLabelProvider
*
* @author Ingo Muschenetz
*/
private class CategoryLabelProvider extends LabelProvider implements ITableLabelProvider
{
private LocalResourceManager manager = new LocalResourceManager(JFaceResources.getResources());
/**
* @param decorate
*/
public CategoryLabelProvider(boolean decorate)
{
}
/**
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
*/
public Image getColumnImage(Object element, int columnIndex)
{
HashMap images = UnifiedContentAssistProcessor.getUserAgentImages();
if (images.containsKey(element))
{
return (Image) images.get(element);
}
else
{
return null;
}
}
/**
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
*/
public String getColumnText(Object element, int columnIndex)
{
return (String) element;
}
/**
* @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
*/
public void dispose()
{
super.dispose();
manager.dispose();
}
}
/**
* workbench
*/
protected IWorkbench workbench;
private CheckboxTableViewer categoryViewer;
private TableViewer dependantViewer;
private Text descriptionText;
/**
* @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
*/
protected Control createContents(Composite parent)
{
Composite composite = new Composite(parent, SWT.NONE);
composite.setFont(parent.getFont());
GridLayout layout = new GridLayout(2, false);
layout.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
Label label = new Label(composite, SWT.WRAP);
label.setText(CodeAssistMessages.UserAgentPreferencePage_SelectBrowsers);
label.setFont(parent.getFont());
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.widthHint = 400;
data.horizontalSpan = 2;
label.setLayoutData(data);
label = new Label(composite, SWT.NONE); // spacer
data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
data.horizontalSpan = 2;
label.setLayoutData(data);
createCategoryArea(composite);
createButtons(composite);
return composite;
}
private void createButtons(Composite parent)
{
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(4, false);
layout.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 2;
composite.setLayoutData(data);
Button enableAll = new Button(composite, SWT.PUSH);
enableAll.setFont(parent.getFont());
enableAll.addSelectionListener(new SelectionAdapter()
{
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e)
{
categoryViewer.setCheckedElements(UnifiedContentAssistProcessor.getDefaultUserAgents());
}
});
enableAll.setText(CodeAssistMessages.UserAgentPreferencePage_SelectAll);
setButtonLayoutData(enableAll);
Button disableAll = new Button(composite, SWT.PUSH);
disableAll.setFont(parent.getFont());
disableAll.addSelectionListener(new SelectionAdapter()
{
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e)
{
categoryViewer.setCheckedElements(new String[0]);
}
});
disableAll.setText(CodeAssistMessages.UserAgentPreferencePage_SelectNone);
setButtonLayoutData(disableAll);
}
/**
* @param parent
*/
private void createCategoryArea(Composite parent)
{
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
GridData data = new GridData(GridData.FILL_BOTH);
data.widthHint = 200;
composite.setLayoutData(data);
Label label = new Label(composite, SWT.NONE);
label.setFont(parent.getFont());
label.setText(StringUtils.makeFormLabel("User Agents")); //$NON-NLS-1$
Table table = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.SINGLE);
table.setFont(parent.getFont());
table.addSelectionListener(new SelectionAdapter()
{
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e)
{
}
});
categoryViewer = new CheckboxTableViewer(table);
categoryViewer.getControl().setFont(parent.getFont());
categoryViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
categoryViewer.setContentProvider(new CategoryContentProvider());
CategoryLabelProvider categoryLabelProvider = new CategoryLabelProvider(true);
categoryViewer.setLabelProvider(categoryLabelProvider);
categoryViewer.setSorter(new ViewerSorter());
categoryViewer.addSelectionChangedListener(new ISelectionChangedListener()
{
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
*/
public void selectionChanged(SelectionChangedEvent event)
{
}
});
categoryViewer.setInput(UnifiedContentAssistProcessor.getDefaultUserAgents());
categoryViewer.setCheckedElements(getEnabledCategories());
}
private String[] getEnabledCategories()
{
return UnifiedContentAssistProcessor.getUserAgents();
}
/**
* Clear the details area.
*/
protected void clearDetails()
{
dependantViewer.setInput(Collections.EMPTY_SET);
descriptionText.setText(StringUtils.EMPTY);
}
/**
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
*/
public void init(IWorkbench workbench)
{
this.workbench = workbench;
setPreferenceStore(UnifiedEditorsPlugin.getDefault().getPreferenceStore());
}
/**
* @see org.eclipse.jface.preference.IPreferencePage#performOk()
*/
public boolean performOk()
{
ArrayList al = new ArrayList();
Object[] elements = categoryViewer.getCheckedElements();
for (int i = 0; i < elements.length; i++)
{
al.add(elements[i].toString());
}
getPreferenceStore().setValue(com.aptana.ide.editors.preferences.IPreferenceConstants.USER_AGENT_PREFERENCE,
StringUtils.join(",", (String[]) al.toArray(new String[0]))); //$NON-NLS-1$
return true;
}
/**
* @see org.eclipse.jface.preference.PreferencePage#performDefaults()
*/
protected void performDefaults()
{
super.performDefaults();
String prefs = getPreferenceStore().getDefaultString(
com.aptana.ide.editors.preferences.IPreferenceConstants.USER_AGENT_PREFERENCE);
categoryViewer.setCheckedElements(prefs.split(",")); //$NON-NLS-1$
}
}