/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.diagram.ui.preferences; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; 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.Group; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.teiid.designer.diagram.ui.DiagramUiConstants; /** * This class represents the preference page for setting the Diagram Filter Preferences. * * @since 8.0 */ public class FilterPreferencePage extends PreferencePage implements DiagramUiConstants, IWorkbenchPreferencePage { // I18N Property File Keys private static final String KEY_PAGE_DESCRIPTION = "DiagramFilterPrefPage.description";//$NON-NLS-1$ private static final String KEY_DIAGRAM_TAB_TITLE = "DiagramFilterPrefPage.diagram.tabTitle";//$NON-NLS-1$ private static final String KEY_PACKAGE_TAB_TITLE = "DiagramFilterPrefPage.package.tabTitle";//$NON-NLS-1$ private static final String KEY_GROUP_TAB_TITLE = "DiagramFilterPrefPage.group.tabTitle";//$NON-NLS-1$ private static final String KEY_ATTRIBUTE_TAB_TITLE = "DiagramFilterPrefPage.attribute.tabTitle";//$NON-NLS-1$ private static final String KEY_OPERATIONS_TAB_TITLE = "DiagramFilterPrefPage.operations.tabTitle";//$NON-NLS-1$ private static final String KEY_ASSOCIATIONS_TAB_TITLE = "DiagramFilterPrefPage.associations.tabTitle";//$NON-NLS-1$ private static final String KEY_DIAGRAM_TAB_DESC = "DiagramFilterPrefPage.diagram.tabDesc";//$NON-NLS-1$ private static final String KEY_PACKAGE_TAB_DESC = "DiagramFilterPrefPage.package.tabDesc";//$NON-NLS-1$ private static final String KEY_GROUP_TAB_DESC = "DiagramFilterPrefPage.group.tabDesc";//$NON-NLS-1$ private static final String KEY_ATTRIBUTE_TAB_DESC = "DiagramFilterPrefPage.attribute.tabDesc";//$NON-NLS-1$ private static final String KEY_OPERATIONS_TAB_DESC = "DiagramFilterPrefPage.operations.tabDesc";//$NON-NLS-1$ private static final String KEY_ASSOCIATIONS_TAB_DESC = "DiagramFilterPrefPage.associations.tabDesc";//$NON-NLS-1$ private ArrayList settingControls; HashSet changedControls = null; public FilterPreferencePage() { setDescription(Util.getString(KEY_PAGE_DESCRIPTION)); } /** * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite) */ @Override protected Control createContents( Composite parent ) { Composite container = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); container.setLayout(layout); TabFolder folder = new TabFolder(container, SWT.NONE); GridData gd = new GridData(GridData.FILL_BOTH); folder.setLayoutData(gd); settingControls = new ArrayList(); SelectionListener listener = new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent e ) { if (changedControls == null) changedControls = new HashSet(); changedControls.add(e.widget); } }; createPage(folder, Util.getString(KEY_DIAGRAM_TAB_TITLE), FilterSettings.DIAGRAM); createPage(folder, Util.getString(KEY_PACKAGE_TAB_TITLE), FilterSettings.PACKAGE); createPage(folder, Util.getString(KEY_GROUP_TAB_TITLE), FilterSettings.GROUP); createPage(folder, Util.getString(KEY_ATTRIBUTE_TAB_TITLE), FilterSettings.ATTRIBUTE); createPage(folder, Util.getString(KEY_OPERATIONS_TAB_TITLE), FilterSettings.OPERATIONS); createPage(folder, Util.getString(KEY_ASSOCIATIONS_TAB_TITLE), FilterSettings.ASSOCIATIONS); for (int i = 0; i < settingControls.size(); i++) { Control control = (Control)settingControls.get(i); if (control instanceof Button) ((Button)control).addSelectionListener(listener); } return container; } private void createPage( TabFolder folder, String name, int index ) { Composite page = new Composite(folder, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; page.setLayout(layout); TabItem tab = new TabItem(folder, SWT.NONE); tab.setText(name); tab.setControl(page); Group group = new Group(page, SWT.NONE); group.setLayoutData(new GridData(GridData.FILL_BOTH)); String descKey; if (index == FilterSettings.DIAGRAM) descKey = KEY_DIAGRAM_TAB_DESC; else if (index == FilterSettings.PACKAGE) descKey = KEY_PACKAGE_TAB_DESC; else if (index == FilterSettings.GROUP) descKey = KEY_GROUP_TAB_DESC; else if (index == FilterSettings.ATTRIBUTE) descKey = KEY_ATTRIBUTE_TAB_DESC; else if (index == FilterSettings.OPERATIONS) descKey = KEY_OPERATIONS_TAB_DESC; else descKey = KEY_ASSOCIATIONS_TAB_DESC; // Set text on the Group makes a border around it group.setText(Util.getString(descKey)); group.setLayout(new GridLayout()); GridData gd = new GridData(); gd.horizontalSpan = 2; String[] settingIDs = FilterSettings.getSettings(index); for (int i = 0; i < settingIDs.length; i++) { Control control = createSetting(group, settingIDs[i]); settingControls.add(control); } } private Control createSetting( Composite page, String settingID ) { Control control = null; Button button = new Button(page, SWT.CHECK); button.setText(Util.getString(settingID)); button.setSelection(FilterSettings.getBoolean(settingID)); GridData gd = new GridData(); gd.horizontalSpan = 2; button.setLayoutData(gd); control = button; control.setData(settingID); return control; } /** * @see org.eclipse.jface.preference.PreferencePage#performDefaults() */ @Override protected void performDefaults() { for (int i = 0; i < settingControls.size(); i++) { Control control = (Control)settingControls.get(i); String settingID = (String)control.getData(); if (control instanceof Button) { ((Button)control).setSelection(FilterSettings.getDefaultBoolean(settingID)); } } changedControls = null; } @Override public boolean performOk() { if (changedControls != null) { for (Iterator iter = changedControls.iterator(); iter.hasNext();) { Control control = (Control)iter.next(); String settingID = (String)control.getData(); if (control instanceof Button) { boolean value = ((Button)control).getSelection(); FilterSettings.setBoolean(settingID, value); } } FilterSettings.save(); } return super.performOk(); } /** * Initializes this preference page using the passed desktop. * * @param desktop the current desktop */ @Override public void init( IWorkbench workbench ) { } }