/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.motorola.studio.android.logger.collector.util;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.widgets.TreeItem;
/**
* Class factory to create widgets.
*/
public class WidgetsFactory
{
/**
* Create a new composite with two columns.
*
* @param parent The parent composite.
* @return A composite with two columns.
*/
public static Composite createComposite(Composite parent)
{
Composite toReturn = new Composite(parent, SWT.NULL);
toReturn.setLayout(createGridLayout());
toReturn.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
return toReturn;
}
/**
* Create a new composite with the given column count.
*
* @param parent The parent composite.
* @param numColumns The column count for the new composite.
* @return A composite with the given column count.
*/
public static Composite createComposite(Composite parent, int numColumns)
{
Composite toReturn = createComposite(parent);
((GridLayout) toReturn.getLayout()).numColumns = numColumns;
return toReturn;
}
/**
* Creates a new line.
*
* @param parent The parent composite.
* @return A label with a line.
*/
public static Label createLine(Composite parent)
{
Label toReturn = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL | SWT.BOLD);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalSpan = ((GridLayout) parent.getLayout()).numColumns;
toReturn.setLayoutData(gridData);
return toReturn;
}
/**
* Creates a new GridLayout with two columns.
*
* @return A new GridLayout with two columns.
*/
public static GridLayout createGridLayout()
{
GridLayout toReturn = new GridLayout();
toReturn.numColumns = 2;
toReturn.makeColumnsEqualWidth = false;
toReturn.marginWidth = 0;
toReturn.marginHeight = 0;
return toReturn;
}
/**
* Creates a new GridLayout with the given number of columns.
*
* @return A new GridLayout with the given number of columns.
*/
public static GridLayout createGridLayout(int numColumns)
{
GridLayout toReturn = new GridLayout();
toReturn.numColumns = numColumns;
toReturn.makeColumnsEqualWidth = false;
toReturn.marginWidth = 0;
toReturn.marginHeight = 0;
return toReturn;
}
/**
* Creates a new GridLayout with the given number of columns for the given
* composite.
*
* @return A new GridLayout with the given number of columns for the given
* composite.
*/
public static GridLayout createGridLayout(int numColumns, Composite composite)
{
GridLayout toReturn = new GridLayout();
toReturn.numColumns = numColumns;
toReturn.makeColumnsEqualWidth = false;
toReturn.marginWidth = 0;
toReturn.marginHeight = 0;
composite.setLayout(toReturn);
return toReturn;
}
/**
* Creates a new label.
*
* @param parent The parent composite.
* @param text Text used in label.
* @return A new label
*/
public static Label createLabel(Composite parent, String text)
{
return createLabel(parent, text, SWT.NONE);
}
/**
* Creates a new label.
*
* @param parent The parent composite.
* @param text Text used in label.
* @param style The style used in label.
* @return A new label
*/
public static Label createLabel(Composite parent, String text, int style)
{
Label toReturn = new Label(parent, style);
if (text != null)
{
toReturn.setText(text);
}
toReturn.setFont(parent.getFont());
return toReturn;
}
/**
* Creates a new combo.
*
* @param parent The parent composite.
* @return The new combo
*/
public static Combo createCombo(Composite parent)
{
Combo toReturn = new Combo(parent, SWT.READ_ONLY);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
data.horizontalSpan = 1;
toReturn.setLayoutData(data);
return toReturn;
}
/**
* Creates two labels used to show a read only value in screens.
*
* @param parent The parent composite.
* @param text The text used in both labels.
* @return The label that will show a read only value.
*/
public static Label createValueLabel(Composite parent, String text)
{
createLabel(parent, text);
return createLabel(parent, null);
}
/**
* Creates a new button.
*
* @param parent The parent composite.
* @param text The text of the button.
* @return A new button
*/
public static Button createButton(Composite parent, String text)
{
Button toReturn = new Button(parent, SWT.PUSH);
toReturn.setFont(parent.getFont());
toReturn.setText(text);
toReturn.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
return toReturn;
}
/**
* Creates a new table widget.
*
* @param parent The parent composite.
* @return The new table
*/
public static Table createTable(Composite parent)
{
Table toReturn =
new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION
| SWT.BORDER);
GridData data = new GridData(GridData.FILL_BOTH);
data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
data.heightHint = toReturn.getItemHeight();
data.horizontalSpan = 1;
toReturn.setLayoutData(data);
return toReturn;
}
/**
* Creates a new table widget.
*
* @param parent The parent composite.
* @return The new table
*/
public static Table createTableMultiSelection(Composite parent)
{
Table toReturn =
new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER
| SWT.MULTI);
GridData data = new GridData(GridData.FILL_BOTH);
data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
data.heightHint = toReturn.getItemHeight();
data.horizontalSpan = 1;
toReturn.setLayoutData(data);
return toReturn;
}
/**
* Creates a new table column.
*
* @param table The table of the column.
* @param text The column text.
* @return A new table column
*/
public static TableColumn createTableColumn(Table table, String text)
{
TableColumn toReturn = new TableColumn(table, SWT.NONE);
toReturn.setText(text);
return toReturn;
}
/**
* Creates a new table item.
*
* @param table The table of the table item.
* @param image The image of the item.
* @param s The text of the item.
* @return The new table item.
*/
public static TableItem createTableItem(Table table, Image image, String s)
{
TableItem toReturn = new TableItem(table, SWT.NONE);
toReturn.setText(s);
if (image != null)
{
toReturn.setImage(image);
}
return toReturn;
}
/**
* Creates a collection of table items.
*
* @param table The table of the table item.
* @param image The image of the item.
* @param s The text of the item.
* @return The new table item.
*/
public static TableItem createTableItem(Table table, Image image, String... s)
{
TableItem toReturn = new TableItem(table, SWT.NONE);
toReturn.setText(s);
if (image != null)
{
toReturn.setImage(image);
}
return toReturn;
}
/**
* Creates a new text.
*
* @param parent The parent composite.
* @return The new text.
*/
public static Text createText(Composite parent)
{
Text toReturn = new Text(parent, SWT.BORDER);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
toReturn.setLayoutData(data);
return toReturn;
}
/**
* Creates a new tree item. If the text parameter is null, it will appear is
* after the field parameter.
*
* @param itemParent The parent tree item
* @param image The image of the tree item.
* @param field The field.
* @param text The text of the tree item.
* @return The new tree item.
*/
public static TreeItem createTreeItem(TreeItem itemParent, Image image, String field,
String text)
{
TreeItem toReturn = new TreeItem(itemParent, 0);
toReturn.setText((text == null) ? field : field + " (" + text + ")"); //$NON-NLS-1$ //$NON-NLS-2$
toReturn.setImage(image);
toReturn.setExpanded(true);
return toReturn;
}
/**
* Creates a new horizontal tool bar.
*
* @param parent The parent tool bar item.
* @return A new tool bar item.
*/
public static ToolBar createHorizontalToolBar(Composite parent)
{
return new ToolBar(parent, SWT.HORIZONTAL);
}
/**
* Creates a new tool item like a push button
*
* @param toolBar The parent tool bar item.
* @return A new tool item.
*/
public static ToolItem createPushToolItem(ToolBar toolBar)
{
return new ToolItem(toolBar, SWT.PUSH);
}
/**
* Creates a titled group.
*
* @param parent The parent composite
* @param title The desired title.
* @return The titled group
*/
public static Group createTitledGroup(Composite parent, String title)
{
Group toReturn = new Group(parent, SWT.SHADOW_NONE);
toReturn.setText(title);
toReturn.setLayout(new GridLayout());
toReturn.setLayoutData(new GridData(GridData.FILL_BOTH));
return toReturn;
}
/**
* Creates a titled group with the given number of columns.
*
* @param parent The parent composite.
* @param title The group title.
* @param numColumns The number of columns.
* @return The created group.
*/
public static Group createTitledGroup(Composite parent, String title, int numColumns)
{
Group toReturn = new Group(parent, SWT.SHADOW_NONE);
toReturn.setText(title);
GridLayout layout = createGridLayout(numColumns);
toReturn.setLayout(layout);
return toReturn;
}
/**
* Creates a group
*
* @param parent The parent composite
* @return The group
*/
public static Group createGroup(Composite parent)
{
Group toReturn = new Group(parent, SWT.SHADOW_NONE);
return toReturn;
}
/**
* Creates a radio button
*
* @param parent The parent composite
* @param text The given text.
* @return The radio button
*/
public static Button createRadioButton(Composite parent, String text)
{
Button toReturn = new Button(parent, SWT.RADIO);
toReturn.setText(text);
toReturn.setLayoutData(new GridData(GridData.FILL_BOTH));
return toReturn;
}
/**
* Creates a list.
*
* @param parent The parent composite.
* @return The list.
*/
public static List createList(Composite parent)
{
return new List(parent, SWT.BORDER | SWT.SINGLE);
}
}