/******************************************************************************* * Copyright (c) 2009 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 * Zend Technologies *******************************************************************************/ package org.eclipse.php.internal.ui.preferences; import java.util.*; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.php.internal.ui.PHPUiPlugin; import org.eclipse.php.ui.preferences.IPHPPreferencePageBlock; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; /** * * @author guy.g * */ public abstract class AbstractMultiBlockPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private IPHPPreferencePageBlock[] fConfigurationBlocks; public AbstractMultiBlockPreferencePage() { setDescription(); setPreferenceStore(); createConfigurationBlocks(); } private void createConfigurationBlocks() { try { fConfigurationBlocks = PHPPreferencePageBlocksRegistry.getPHPPreferencePageBlock(getPreferencePageID()); } catch (Exception e) { PHPUiPlugin.log(e); } if (fConfigurationBlocks == null) { fConfigurationBlocks = new IPHPPreferencePageBlock[0]; } Map<String, IPHPPreferencePageBlock> map = new HashMap<>(); for (int i = 0; i < fConfigurationBlocks.length; i++) { IPHPPreferencePageBlock block = fConfigurationBlocks[i]; map.put(block.getComparableName(), block); } Set<String> keys = map.keySet(); fConfigurationBlocks = new IPHPPreferencePageBlock[keys.size()]; List<String> keysList = new ArrayList<>(); for (Iterator<String> iter = keys.iterator(); iter.hasNext();) { String comperableName = iter.next(); keysList.add(comperableName); } Collections.sort(keysList); int i = 0; for (Iterator<String> iter = keysList.iterator(); iter.hasNext(); i++) { String comperableName = iter.next(); fConfigurationBlocks[i] = map.get(comperableName); } } @Override protected Control createContents(Composite composite) { ScrolledCompositeImpl scrolledCompositeImpl = new ScrolledCompositeImpl(composite, SWT.V_SCROLL | SWT.H_SCROLL); Composite group = new Composite(scrolledCompositeImpl, SWT.NONE); group.setLayout(new GridLayout()); try { for (int i = 0; i < fConfigurationBlocks.length; i++) { fConfigurationBlocks[i].setCompositeAddon(group); fConfigurationBlocks[i].initializeValues(this); } scrolledCompositeImpl.setContent(group); } catch (Exception e) { PHPUiPlugin.log(e); } return scrolledCompositeImpl; } @Override public void init(IWorkbench workbench) { } protected abstract void setDescription(); protected abstract void setPreferenceStore(); protected abstract String getPreferencePageID(); @Override public boolean performCancel() { for (int i = 0; i < fConfigurationBlocks.length; i++) { IPHPPreferencePageBlock block = fConfigurationBlocks[i]; block.performCancel(); } return super.performCancel(); } @Override protected void performDefaults() { for (int i = 0; i < fConfigurationBlocks.length; i++) { IPHPPreferencePageBlock block = fConfigurationBlocks[i]; block.performDefaults(); } super.performDefaults(); } @Override public boolean performOk() { for (int i = 0; i < fConfigurationBlocks.length; i++) { IPHPPreferencePageBlock block = fConfigurationBlocks[i]; block.performOK(false); } return super.performOk(); } }