/*******************************************************************************
 * 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
 *******************************************************************************/
package org.eclipse.cdt.managedbuilder.ui.preferences;

import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.ui.newui.AbstractCPropertyTab;
import org.eclipse.cdt.ui.newui.CDTPrefUtil;
import org.eclipse.cdt.managedbuilder.internal.ui.Messages;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
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.Group;
import org.eclipse.swt.widgets.Label;

/**
 * @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 PropertyMultiCfgTab extends AbstractCPropertyTab {

	private static final int SPACING = 5; // for radio buttons layout

	private Group dGrp;
	private Group wGrp;
	private Button d_1;
	private Button d_2;

	private Button w_0;
	private Button w_1;

	@Override
	public void createControls(Composite parent) {
		super.createControls(parent);
		GridLayout g = new GridLayout(1, false);
		g.verticalSpacing = SPACING;
		usercomp.setLayout(g);

		dGrp = new Group(usercomp, SWT.NONE);
		dGrp.setText(Messages.PropertyMultiCfgTab_3); 
		dGrp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		FillLayout fl = new FillLayout(SWT.VERTICAL);
		fl.spacing = SPACING;
		fl.marginHeight = SPACING;
		fl.marginWidth = SPACING;
		dGrp.setLayout(fl);

		Label l = new Label(dGrp, SWT.WRAP);
		l.setText(Messages.PropertyMultiCfgTab_4); 

		d_1 = new Button(dGrp, SWT.RADIO);
		d_1.setText(Messages.PropertyMultiCfgTab_6); 
		d_2 = new Button(dGrp, SWT.RADIO);
		d_2.setText(Messages.PropertyMultiCfgTab_7); 

		wGrp = new Group(usercomp, SWT.NONE);
		wGrp.setText(Messages.PropertyMultiCfgTab_8); 
		wGrp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		fl = new FillLayout(SWT.VERTICAL);
		fl.spacing = SPACING;
		fl.marginHeight = SPACING;
		fl.marginWidth = SPACING;
		wGrp.setLayout(fl);

		l = new Label(wGrp, SWT.WRAP);
		l.setText(Messages.PropertyMultiCfgTab_9); 

		w_0 = new Button(wGrp, SWT.RADIO);
		w_0.setText(Messages.PropertyMultiCfgTab_10); 
		w_1 = new Button(wGrp, SWT.RADIO);
		w_1.setText(Messages.PropertyMultiCfgTab_11); 

		switch (CDTPrefUtil.getMultiCfgStringListDisplayMode()) {
			case CDTPrefUtil.DMODE_CONJUNCTION: d_1.setSelection(true); break;
			case CDTPrefUtil.DMODE_DISJUNCTION: d_2.setSelection(true); break;
		}

		switch (CDTPrefUtil.getMultiCfgStringListWriteMode()) {
			case CDTPrefUtil.WMODE_MODIFY:  w_0.setSelection(true); break;
			case CDTPrefUtil.WMODE_REPLACE: w_1.setSelection(true); break;
		}
	}

	@Override
	protected void performOK() {
		int x = 0;
		if (d_1.getSelection()) 
			x = CDTPrefUtil.DMODE_CONJUNCTION;
		else if (d_2.getSelection()) 
			x = CDTPrefUtil.DMODE_DISJUNCTION;
		CDTPrefUtil.setMultiCfgStringListDisplayMode(x);

		if (w_0.getSelection())      
			x = CDTPrefUtil.WMODE_MODIFY;
		else if (w_1.getSelection()) 
			x = CDTPrefUtil.WMODE_REPLACE;
		CDTPrefUtil.setMultiCfgStringListWriteMode(x);
	}
	
	@Override
	protected void performDefaults() {
		d_1.setSelection(true);
		d_2.setSelection(false);
		w_0.setSelection(true);
		w_1.setSelection(false);
	}

	@Override
	protected void performApply(ICResourceDescription src, ICResourceDescription dst) { performOK(); }
	@Override
	protected void updateData(ICResourceDescription cfg) {}  // Do nothing. Data is read once after creation
	@Override
	protected void updateButtons() {} // Do nothing. No buttons to update
}
