/*******************************************************************************
 * Copyright (c) 2000, 2010 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.gef.ui.console;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.part.ViewPart;

import org.eclipse.gef.GEF;

/**
 * View used for debugging information in GEF
 * 
 * @deprecated in 3.1
 */
public class DebugGEF extends ViewPart {

	/** Text field **/
	protected Text text;
	/** Container for all {@link DebugGEFAction}s **/
	protected List actions = null;

	/**
	 * Creates a new DebugGEF ViewPart
	 */
	public DebugGEF() {
		super();
	}

	/**
	 * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
	 */
	public void createPartControl(Composite parent) {
		text = new Text(parent, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER);
		text.setFont(new org.eclipse.swt.graphics.Font(parent.getDisplay(),
				"Arial", 7, //$NON-NLS-1$
				org.eclipse.draw2d.rap.swt.SWT.NATIVE));
		text.setText("GEF Debug"); //$NON-NLS-1$
		GEF.setConsole(text);
		makeActions();
		fillActions();
	}

	/**
	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
	 */
	public void dispose() {
		GEF.setConsole(null);
		super.dispose();
	}

	/**
	 * Called by createPartControl(Composite). Adds all actions to the
	 * {@link IToolBarManager}.
	 * 
	 */
	protected void fillActions() {
		IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
		for (int i = 0; i < actions.size(); i++) {
			mgr.add((IAction) actions.get(i));
		}
	}

	private ImageDescriptor getDescriptor(String image) {
		return ImageDescriptor.createFromFile(DebugGEF.class, image);
	}

	/**
	 * Called by createPartControl(Composite). Creates, initializes, and adds
	 * all actions.
	 */
	protected void makeActions() {
		if (actions == null)
			actions = new ArrayList();
		DebugGEFAction action = null;
		action = new DebugGEFAction(DebugGEFAction.DEBUG_DND,
				getDescriptor("icons/debugDND.gif")); //$NON-NLS-1$
		action.setToolTipText("Drag and Drop"); //$NON-NLS-1$
		action.setChecked(GEF.DebugDND);
		actions.add(action);
		action = new DebugGEFAction(DebugGEFAction.DEBUG_STATES,
				getDescriptor("icons/debugStates.gif")); //$NON-NLS-1$
		action.setToolTipText("States"); //$NON-NLS-1$
		action.setChecked(GEF.DebugToolStates);
		actions.add(action);
		action = new DebugGEFAction(DebugGEFAction.DEBUG_FEEDBACK,
				getDescriptor("icons/debugFeedback.gif")); //$NON-NLS-1$
		action.setToolTipText("Feedback"); //$NON-NLS-1$
		action.setChecked(GEF.DebugFeedback);
		actions.add(action);
		action = new DebugGEFAction(DebugGEFAction.DEBUG_PAINTING,
				getDescriptor("icons/debugPaint.gif")); //$NON-NLS-1$
		action.setToolTipText("Painting Messages"); //$NON-NLS-1$
		action.setChecked(GEF.DebugPainting);
		actions.add(action);
		action = new DebugGEFAction(DebugGEFAction.DEBUG_EDITPARTS,
				getDescriptor("icons/debugEditParts.gif")); //$NON-NLS-1$
		action.setToolTipText("EditPart Messages"); //$NON-NLS-1$
		action.setChecked(GEF.DebugEditParts);
		actions.add(action);
		action = new DebugGEFAction(DebugGEFAction.DEBUG_EVENTS,
				getDescriptor("icons/debugEvents.gif")); //$NON-NLS-1$
		action.setToolTipText("Event Messages"); //$NON-NLS-1$
		action.setChecked(GEF.DebugEvents);
		actions.add(action);
		action = new DebugGEFAction(DebugGEFAction.DEBUG_TOOLS,
				getDescriptor("icons/debugTools.gif")); //$NON-NLS-1$
		action.setToolTipText("Tool Messages"); //$NON-NLS-1$
		action.setChecked(GEF.DebugTools);
		actions.add(action);
		action = new DebugGEFAction(DebugGEFAction.DEBUG_GLOBAL,
				getDescriptor("icons/debugGlobal.gif")); //$NON-NLS-1$
		action.setToolTipText("Global Messages"); //$NON-NLS-1$
		action.setChecked(GEF.GlobalDebug);
		actions.add(action);
		action = new DebugGEFAction(DebugGEFAction.DEBUG_CLEAR,
				getDescriptor("icons/debugClear.gif")); //$NON-NLS-1$
		action.setToolTipText("Clears Debug Messages"); //$NON-NLS-1$
		actions.add(action);
	}

	/**
	 * @see org.eclipse.ui.IWorkbenchPart#setFocus()
	 */
	public void setFocus() {
		if (text != null)
			text.setFocus();
	}

}
