/******************************************************************************* * Copyright (c) 2007, 2010 Intel 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: * Intel Corporation - initial API and implementation * IBM Corporation *******************************************************************************/ package org.eclipse.cdt.managedbuilder.ui.preferences; import java.util.Iterator; import java.util.List; import org.eclipse.cdt.core.settings.model.ICResourceDescription; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.internal.ui.Messages; import org.eclipse.cdt.managedbuilder.ui.properties.AbstractCBuildPropertyTab; import org.eclipse.cdt.managedbuilder.ui.wizards.MBSWizardHandler; import org.eclipse.cdt.ui.newui.CDTPrefUtil; import org.eclipse.cdt.ui.newui.PageLayout; import org.eclipse.cdt.ui.wizards.CDTMainWizardPage; import org.eclipse.cdt.ui.wizards.CWizardHandler; import org.eclipse.cdt.ui.wizards.EntryDescriptor; import org.eclipse.core.runtime.CoreException; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Label; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; /** * @since 5.1 * * @noextend This class is not intended to be subclassed by clients. * @noinstantiate This class is not intended to be instantiated by clients. */ public class PreferredToolchainsTab extends AbstractCBuildPropertyTab { protected CWizardHandler h_selected = null; // widgets private Tree tree; private Composite right; private Button show_sup; private Label right_label; private Button pref1; private Button pref0; private Label preferredTCsLabel; @Override public void createControls(Composite parent) { super.createControls(parent); usercomp.setLayout(new GridLayout(1, false)); Composite c = new Composite(usercomp, SWT.NONE); c.setLayoutData(new GridData(GridData.FILL_BOTH)); c.setLayout(new GridLayout(2, true)); Label l1 = new Label(c, SWT.NONE); l1.setText(Messages.CMainWizardPage_0); l1.setFont(parent.getFont()); l1.setLayoutData(new GridData(GridData.BEGINNING)); right_label = new Label(c, SWT.NONE); right_label.setFont(parent.getFont()); right_label.setLayoutData(new GridData(GridData.BEGINNING)); tree = new Tree(c, SWT.SINGLE | SWT.BORDER); tree.setLayoutData(new GridData(GridData.FILL_BOTH)); tree.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { TreeItem[] tis = tree.getSelection(); if (tis == null || tis.length == 0) return; switchTo((CWizardHandler)tis[0].getData(), (EntryDescriptor)tis[0].getData(CDTMainWizardPage.DESC)); updatePreferredTCsLabel(); }}); right = new Composite(c, SWT.NONE); right.setLayoutData(new GridData(GridData.FILL_BOTH)); right.setLayout(new PageLayout()); Label l = new Label(c,SWT.WRAP | SWT.CENTER); l.setText(Messages.PreferredToolchainsTab_0); GridData gd = new GridData(GridData.CENTER); gd.horizontalSpan = 2; l.setLayoutData(gd); new Label(c,0).setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); pref1 = new Button(c, SWT.PUSH); pref1.setText(Messages.PreferredToolchainsTab_1); pref1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); pref1.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { setPref(true); }} ); new Label(c,0).setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); pref0 = new Button(c, SWT.PUSH); pref0.setText(Messages.PreferredToolchainsTab_2); pref0.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); pref0.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { setPref(false); }} ); //bug 189220 - provide more information for accessibility preferredTCsLabel = new Label(c, SWT.LEFT); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; preferredTCsLabel.setLayoutData(gd); //space new Label(c, 0).setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); show_sup = new Button(c, SWT.CHECK); show_sup.setSelection(true); show_sup.setText(Messages.CMainWizardPage_1); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; show_sup.setLayoutData(gd); show_sup.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (h_selected != null) h_selected.setSupportedOnly(show_sup.getSelection()); switchTo(CDTMainWizardPage.updateData(tree, right, show_sup, null, null), CDTMainWizardPage.getDescriptor(tree)); }}); CDTPrefUtil.readPreferredTCs(); switchTo(CDTMainWizardPage.updateData(tree, right, show_sup, null, null), CDTMainWizardPage.getDescriptor(tree)); updatePreferredTCsLabel(); } private void setPref(boolean set) { if (h_selected == null || !h_selected.supportsPreferred()) return; if (h_selected instanceof MBSWizardHandler) { IToolChain[] tcs = ((MBSWizardHandler)h_selected).getSelectedToolChains(); for (int i=0; i<tcs.length; i++) { String id = (tcs[i] == null) ? CDTPrefUtil.NULL : tcs[i].getId(); if (set) CDTPrefUtil.addPreferredTC(id); else CDTPrefUtil.delPreferredTC(id); } } h_selected.updatePreferred(CDTPrefUtil.getPreferredTCs()); updatePreferredTCsLabel(); } //bug 189220 - provide more information for accessibility private void updatePreferredTCsLabel() { if (h_selected instanceof MBSWizardHandler) { List<String> tcs = ((MBSWizardHandler)h_selected).getPreferredTCNames(); if (tcs.size() == 0) { preferredTCsLabel.setText(""); //$NON-NLS-1$ return; } Iterator<String> iterator = tcs.iterator(); String temp = iterator.next(); while (iterator.hasNext()) { temp = temp + ", " + iterator.next(); //$NON-NLS-1$ } preferredTCsLabel.setText(Messages.PreferredToolchainsTab_3 + temp); } } // private void switchTo(CWizardHandler h) { // if (h == null) return; // if (h_selected != null) h_selected.handleUnSelection(); // h_selected = h; // right_label.setText(h_selected.getHeader()); // h_selected.setSupportedOnly(show_sup.getSelection()); // h_selected.handleSelection(); // } private void switchTo(CWizardHandler h, EntryDescriptor ed) { if (h == null) h = ed.getHandler(); try { if (h != null && ed != null) h.initialize(ed); } catch (CoreException e) { h = null; } if (h_selected != null) h_selected.handleUnSelection(); h_selected = h; if (h == null) return; right_label.setText(h_selected.getHeader()); h_selected.handleSelection(); h_selected.setSupportedOnly(show_sup.getSelection()); } @Override protected void performOK() { CDTPrefUtil.savePreferredTCs(); } @Override protected void performApply(ICResourceDescription src, ICResourceDescription dst) { performOK();} @Override protected void performDefaults() { CDTPrefUtil.cleanPreferredTCs(); h_selected.handleSelection(); } @Override protected void updateData(ICResourceDescription cfg) {} @Override protected void updateButtons() {} // Do nothing. No buttons to update. }