/*******************************************************************************
 * Copyright (c) 2016 RCP Vision (http://www.rcp-vision.com) 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:
 *     Lorenzo Bettini - initial API and implementation
 *******************************************************************************/
package org.eclipse.emf.parsley.viewers;

import org.eclipse.jface.layout.AbstractColumnLayout;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.layout.TreeColumnLayout;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.Widget;

/**
 * Some methods to adjust layout.
 * 
 * @author Lorenzo Bettini - initial API and implementation
 *
 */
public class LayoutHelper {

	public static final int MINIMUM_WEIGHT = 30;

	public Layout adjustForTableLayout(TableViewer tableViewer) {
		final Table table = tableViewer.getTable();

		Layout layout = null;

		final Layout parentLayout = table.getParent().getLayout();
		if (parentLayout instanceof TableColumnLayout) {
			layout = parentLayout;
		} else {
			layout = new TableLayout();
			table.setLayout(layout);
		}
		table.setHeaderVisible(true);
		table.setLinesVisible(true);

		return layout;
	}

	public Layout adjustForTableLayout(TreeViewer treeViewer) {
		final Tree tree = treeViewer.getTree();

		Layout layout = null;

		final Layout parentLayout = tree.getParent().getLayout();
		if (parentLayout instanceof TreeColumnLayout) {
			layout = parentLayout;
		} else {
			layout = new TableLayout();
			tree.setLayout(layout);
		}
		tree.setHeaderVisible(true);
		tree.setLinesVisible(true);

		return layout;
	}

	public void adjustLayoutColumnData(Layout layout, Widget column, int weight) {
		if (layout instanceof AbstractColumnLayout) {
			((AbstractColumnLayout) layout).setColumnData(column, createColumnWeightData(weight));
		} else if (layout instanceof TableLayout) {
			((TableLayout) layout).addColumnData(createColumnWeightData(weight));
		}
	}

	protected ColumnWeightData createColumnWeightData(int weight) {
		return new ColumnWeightData(weight, MINIMUM_WEIGHT, true);
	}
}
