/*******************************************************************************
 * Copyright (c) 2000, 2007 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
 *******************************************************************************/
package org.eclipse.swt.examples.controlexample;


import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.events.*;

/**
 * <code>ButtonTab</code> is the class that
 * demonstrates SWT buttons.
 */
class ButtonTab extends AlignableTab {

	/* Example widgets and groups that contain them */
	Button button1, button2, button3, button4, button5, button6, button7, button8, button9;
	Group textButtonGroup, imageButtonGroup, imagetextButtonGroup;

	/* Alignment widgets added to the "Control" group */
	Button upButton, downButton;

	/* Style widgets added to the "Style" group */
	Button pushButton, checkButton, radioButton, toggleButton, arrowButton, flatButton;
	
	/**
	 * Creates the Tab within a given instance of ControlExample.
	 */
	ButtonTab(ControlExample instance) {
		super(instance);
	}
	
	/**
	 * Creates the "Control" group. 
	 */
	void createControlGroup () {
		super.createControlGroup ();
	
		/* Create the controls */
		upButton = new Button (alignmentGroup, SWT.RADIO);
		upButton.setText (ControlExample.getResourceString("Up"));
		downButton = new Button (alignmentGroup, SWT.RADIO);
		downButton.setText (ControlExample.getResourceString("Down"));
	
		/* Add the listeners */
		SelectionListener selectionListener = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent event) {
				if (!((Button) event.widget).getSelection()) return;
				setExampleWidgetAlignment ();
			}
		};
		upButton.addSelectionListener(selectionListener);
		downButton.addSelectionListener(selectionListener);
	}
	
	/**
	 * Creates the "Example" group.
	 */
	void createExampleGroup () {
		super.createExampleGroup ();
		
		/* Create a group for text buttons */
		textButtonGroup = new Group(exampleGroup, SWT.NONE);
		GridLayout gridLayout = new GridLayout ();
		textButtonGroup.setLayout(gridLayout);
		gridLayout.numColumns = 3;
		textButtonGroup.setLayoutData (new GridData (SWT.FILL, SWT.FILL, true, true));
		textButtonGroup.setText (ControlExample.getResourceString("Text_Buttons"));
	
		/* Create a group for the image buttons */
		imageButtonGroup = new Group(exampleGroup, SWT.NONE);
		gridLayout = new GridLayout();
		imageButtonGroup.setLayout(gridLayout);
		gridLayout.numColumns = 3;
		imageButtonGroup.setLayoutData (new GridData (SWT.FILL, SWT.FILL, true, true));
		imageButtonGroup.setText (ControlExample.getResourceString("Image_Buttons"));

		/* Create a group for the image and text buttons */
		imagetextButtonGroup = new Group(exampleGroup, SWT.NONE);
		gridLayout = new GridLayout();
		imagetextButtonGroup.setLayout(gridLayout);
		gridLayout.numColumns = 3;
		imagetextButtonGroup.setLayoutData (new GridData (SWT.FILL, SWT.FILL, true, true));
		imagetextButtonGroup.setText (ControlExample.getResourceString("Image_Text_Buttons"));
	}
	
	/**
	 * Creates the "Example" widgets.
	 */
	void createExampleWidgets () {
	
		/* Compute the widget style */
		int style = getDefaultStyle();
		if (pushButton.getSelection()) style |= SWT.PUSH;
		if (checkButton.getSelection()) style |= SWT.CHECK;
		if (radioButton.getSelection()) style |= SWT.RADIO;
		if (toggleButton.getSelection()) style |= SWT.TOGGLE;
		if (flatButton.getSelection()) style |= SWT.FLAT;
		if (borderButton.getSelection()) style |= SWT.BORDER;
		if (leftButton.getSelection()) style |= SWT.LEFT;
		if (rightButton.getSelection()) style |= SWT.RIGHT;
		if (arrowButton.getSelection()) {
			style |= SWT.ARROW; 
			if (upButton.getSelection()) style |= SWT.UP;
			if (downButton.getSelection()) style |= SWT.DOWN;
		} else {
			if (centerButton.getSelection()) style |= SWT.CENTER;			
		}
	
		/* Create the example widgets */
		button1 = new Button(textButtonGroup, style);
		button1.setText(ControlExample.getResourceString("One"));
		button2 = new Button(textButtonGroup, style);
		button2.setText(ControlExample.getResourceString("Two"));
		button3 = new Button(textButtonGroup, style);
		button3.setText(ControlExample.getResourceString("Three"));
		button4 = new Button(imageButtonGroup, style);
		button4.setImage(instance.images[ControlExample.ciClosedFolder]);
		button5 = new Button(imageButtonGroup, style);
		button5.setImage(instance.images[ControlExample.ciOpenFolder]);
		button6 = new Button(imageButtonGroup, style);
		button6.setImage(instance.images[ControlExample.ciTarget]);
		button7 = new Button(imagetextButtonGroup, style);
		button7.setText(ControlExample.getResourceString("One"));
		button7.setImage(instance.images[ControlExample.ciClosedFolder]);
		button8 = new Button(imagetextButtonGroup, style);
		button8.setText(ControlExample.getResourceString("Two"));
		button8.setImage(instance.images[ControlExample.ciOpenFolder]);
		button9 = new Button(imagetextButtonGroup, style);
		button9.setText(ControlExample.getResourceString("Three"));
		button9.setImage(instance.images[ControlExample.ciTarget]);
	}
	
	/**
	 * Creates the "Style" group.
	 */
	void createStyleGroup() {
		super.createStyleGroup ();
	
		/* Create the extra widgets */
		pushButton = new Button (styleGroup, SWT.RADIO);
		pushButton.setText("SWT.PUSH");
		checkButton = new Button (styleGroup, SWT.RADIO);
		checkButton.setText ("SWT.CHECK");
		radioButton = new Button (styleGroup, SWT.RADIO);
		radioButton.setText ("SWT.RADIO");
		toggleButton = new Button (styleGroup, SWT.RADIO);
		toggleButton.setText ("SWT.TOGGLE");
		arrowButton = new Button (styleGroup, SWT.RADIO);
		arrowButton.setText ("SWT.ARROW");
		flatButton = new Button (styleGroup, SWT.CHECK);
		flatButton.setText ("SWT.FLAT");
		borderButton = new Button (styleGroup, SWT.CHECK);
		borderButton.setText ("SWT.BORDER");
	}
	
	/**
	 * Gets the "Example" widget children.
	 */
	Widget [] getExampleWidgets () {
		return new Widget [] {button1, button2, button3, button4, button5, button6, button7, button8, button9};
	}
	
	/**
	 * Returns a list of set/get API method names (without the set/get prefix)
	 * that can be used to set/get values in the example control(s).
	 */
	String[] getMethodNames() {
		return new String[] {"Selection", "Text", "ToolTipText"};
	}

	/**
	 * Gets the text for the tab folder item.
	 */
	String getTabText () {
		return "Button";
	}
	
	/**
	 * Sets the alignment of the "Example" widgets.
	 */
	void setExampleWidgetAlignment () {
		int alignment = 0;
		if (leftButton.getSelection ()) alignment = SWT.LEFT;
		if (centerButton.getSelection ()) alignment = SWT.CENTER;
		if (rightButton.getSelection ()) alignment = SWT.RIGHT;
		if (upButton.getSelection ()) alignment = SWT.UP;
		if (downButton.getSelection ()) alignment = SWT.DOWN;
		button1.setAlignment (alignment);
		button2.setAlignment (alignment);
		button3.setAlignment (alignment);
		button4.setAlignment (alignment);
		button5.setAlignment (alignment);
		button6.setAlignment (alignment);
		button7.setAlignment (alignment);
		button8.setAlignment (alignment);
		button9.setAlignment (alignment);
	}
	
	/**
	 * Sets the state of the "Example" widgets.
	 */
	void setExampleWidgetState () {
		super.setExampleWidgetState ();
		if (arrowButton.getSelection ()) {
			upButton.setEnabled (true);
			centerButton.setEnabled (false);
			downButton.setEnabled (true);
		} else {
			upButton.setEnabled (false);
			centerButton.setEnabled (true);
			downButton.setEnabled (false);
		}
		upButton.setSelection ((button1.getStyle () & SWT.UP) != 0);
		downButton.setSelection ((button1.getStyle () & SWT.DOWN) != 0);
		pushButton.setSelection ((button1.getStyle () & SWT.PUSH) != 0);
		checkButton.setSelection ((button1.getStyle () & SWT.CHECK) != 0);
		radioButton.setSelection ((button1.getStyle () & SWT.RADIO) != 0);
		toggleButton.setSelection ((button1.getStyle () & SWT.TOGGLE) != 0);
		arrowButton.setSelection ((button1.getStyle () & SWT.ARROW) != 0);
		flatButton.setSelection ((button1.getStyle () & SWT.FLAT) != 0);
		borderButton.setSelection ((button1.getStyle () & SWT.BORDER) != 0);
	}
}
