/*******************************************************************************
* Copyright (c) 2007-2015 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model.ui.preferences;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.preference.IPreferencePage;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.jboss.tools.common.model.XModel;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.ui.util.ModelUtilities;
/**
* @author eskimo
*
*/
public class TabbedPreferencesPage extends PreferencePage implements IWorkbenchPreferencePage {
Map<String,PreferencePage> map = new HashMap<String,PreferencePage>();
public TabbedPreferencesPage(String[] paths) {
addAllPreferencePage(convertPathArrayToPreferencePageList(paths));
}
public TabbedPreferencesPage() {
}
public final XModel getPreferenceModel() {
return ModelUtilities.getPreferenceModel();
}
private List convertPathArrayToPreferencePageList(String[] path) {
XModel model = getPreferenceModel();
if(model==null) throw new IllegalArgumentException("Preference XModel not loaded."); //$NON-NLS-1$
if(path==null) throw new IllegalArgumentException("String array with path's cannot be null"); //$NON-NLS-1$
if(path.length==0) throw new IllegalArgumentException("Path array should contains at least one element."); //$NON-NLS-1$
List<XMOBasedPreferencesPage> pages = new ArrayList<XMOBasedPreferencesPage>();
for (int i = 0; i < path.length; i++) {
XModelObject o = model.getByPath(path[i]);
XMOBasedPreferencesPage page = new XMOBasedPreferencesPage(o);
pages.add(page);
map.put(path[i], page); //map.put(o.getPathPart(), page);
}
return pages;
}
public XMOBasedPreferencesPage getXMOTabPage(String name) {
return (XMOBasedPreferencesPage)map.get(name);
}
/* (non-Javadoc)
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
*/
@Override
public void init(IWorkbench workbench) {
}
/* (non-Javadoc)
* @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createContents(Composite parent) {
this.noDefaultAndApplyButton();
TabFolder tabbedComposite = new TabFolder(parent,SWT.NULL);
tabbedComposite.setBackground(parent.getBackground());
for (Iterator iter = pageList.iterator(); iter.hasNext();) {
PreferencePage element = (PreferencePage) iter.next();
TabItem newTab = new TabItem(tabbedComposite,SWT.NULL);
element.createControl(tabbedComposite);
if(element instanceof XMOBasedPreferencesPage)
((XMOBasedPreferencesPage)element).initPageProperties();
newTab.setControl(element.getControl());
newTab.setText(element.getTitle());
}
return tabbedComposite;
}
List<PreferencePage> pageList = new ArrayList<PreferencePage>();
public void addPreferencePage(PreferencePage page) {
pageList.add(page);
if(page instanceof XMOBasedPreferencesPage) {
// XMOBasedPreferencesPage xPage = (XMOBasedPreferencesPage)page;
map.put(page.getTitle(),page);
}
}
public void addAllPreferencePage(List page) {
for (Iterator iter = page.iterator(); iter.hasNext();) {
addPreferencePage((PreferencePage)iter.next());
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.preference.IPreferencePage#performCancel()
*/
@Override
public boolean performCancel() {
boolean cancel = true;
for (PreferencePage preferencePage : pageList) {
cancel = preferencePage.performCancel() && cancel;
}
return cancel;
}
/* (non-Javadoc)
* @see org.eclipse.jface.preference.IPreferencePage#performCancel()
*/
@Override
public void performDefaults() {
for (Iterator iter = pageList.iterator(); iter.hasNext();) {
IPreferencePage element = (IPreferencePage) iter.next();
if (element instanceof IPreferencePageExt) {
IPreferencePageExt elementExt = (IPreferencePageExt) iter.next();
elementExt.performDefaults();
}
}
super.performDefaults();
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IDialogPage#performHelp()
*/
@Override
public void performHelp() {
super.performHelp();
}
/* (non-Javadoc)
* @see org.eclipse.jface.preference.IPreferencePage#performOk()
*/
@Override
public boolean performOk() {
boolean isOk = true;
for (PreferencePage page : pageList) {
isOk = page.performOk() && isOk;
}
return isOk;
}
@Override
public void dispose() {
for (Iterator iter = pageList.iterator(); iter.hasNext();) {
PreferencePage element = (PreferencePage) iter.next();
element.dispose();
}
super.dispose();
}
}