/* *************************************************************************
IT Mill Toolkit
Development of Browser User Interfaces Made Easy
Copyright (C) 2000-2006 IT Mill Ltd
*************************************************************************
This product is distributed under commercial license that can be found
from the product package on license.pdf. Use of this product might
require purchasing a commercial license from IT Mill Ltd. For guidelines
on usage, see licensing-guidelines.html
*************************************************************************
For more information, contact:
IT Mill Ltd phone: +358 2 4802 7180
Ruukinkatu 2-4 fax: +358 2 4802 7181
20540, Turku email: info@itmill.com
Finland company www: www.itmill.com
Primary source for information and releases: www.itmill.com
********************************************************************** */
package com.itmill.toolkit.tests.featurebrowser;
import com.itmill.toolkit.event.Action;
import com.itmill.toolkit.ui.Button;
import com.itmill.toolkit.ui.Component;
import com.itmill.toolkit.ui.Form;
import com.itmill.toolkit.ui.OrderedLayout;
import com.itmill.toolkit.ui.Select;
import com.itmill.toolkit.ui.Table;
public class FeatureTable extends Feature implements Action.Handler {
private static final String[] firstnames = new String[] { "John", "Mary",
"Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
private static final String[] lastnames = new String[] { "Torvalds",
"Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding",
"Einstein" };
private static final String[] title = new String[] { "Project Manager",
"Marketing Manager", "Sales Manager", "Trainer", "IT Support",
"Account Manager", "Customer Support", "Testing Engineer",
"Software Designer", "Programmer", "Consultant" };
private static final String[] unit = new String[] { "Tokyo", "Mexico City",
"Seoul", "New York", "Sao Paulo", "Bombay", "Delhi", "Shanghai",
"Los Angeles", "London", "Bangalore", "Hong Kong", "Madrid",
"Milano", "Beijing", "Paris", "Moscow", "Helsinki" };
private Table t;
private boolean actionsActive = false;
private Button actionHandlerSwitch = new Button("Activate actions", this,
"toggleActions");
public void toggleActions() {
if (actionsActive) {
t.removeActionHandler(this);
actionsActive = false;
actionHandlerSwitch.setCaption("Activate Actions");
} else {
t.addActionHandler(this);
actionsActive = true;
actionHandlerSwitch.setCaption("Deactivate Actions");
}
}
protected Component getDemoComponent() {
OrderedLayout l = new OrderedLayout();
// Sample table
t = new Table("Corporate Employees");
t.setPageLength(10);
l.addComponent(t);
// Add columns to table
t.addContainerProperty("Firstname", String.class, "");
t.addContainerProperty("Lastname", String.class, "");
t.addContainerProperty("Title", String.class, "");
t.addContainerProperty("Unit", String.class, "");
// set alignments to demonstrate features
t.setColumnAlignment("Title", Table.ALIGN_CENTER);
t.setColumnAlignment("Unit", Table.ALIGN_RIGHT);
// Add random rows to table
for (int j = 0; j < 300; j++) {
t
.addItem(
new Object[] {
firstnames[(int) (Math.random() * (firstnames.length - 1))],
lastnames[(int) (Math.random() * (lastnames.length - 1))],
title[(int) (Math.random() * title.length)],
unit[(int) (Math.random() * unit.length)] },
new Integer(j));
}
// Actions
l.addComponent(actionHandlerSwitch);
// Properties
propertyPanel = new PropertyPanel(t);
Form ap = propertyPanel.createBeanPropertySet(new String[] {
"pageLength", "rowHeaderMode", "selectable",
"columnHeaderMode", "columnCollapsingAllowed",
"columnReorderingAllowed", "width", "height" });
ap.replaceWithSelect("columnHeaderMode", new Object[] {
new Integer(Table.COLUMN_HEADER_MODE_EXPLICIT),
new Integer(Table.COLUMN_HEADER_MODE_EXPLICIT_DEFAULTS_ID),
new Integer(Table.COLUMN_HEADER_MODE_HIDDEN),
new Integer(Table.COLUMN_HEADER_MODE_ID) }, new Object[] {
"Explicit", "Explicit defaults ID", "Hidden", "ID" });
ap.replaceWithSelect("rowHeaderMode", new Object[] {
new Integer(Table.ROW_HEADER_MODE_EXPLICIT),
new Integer(Table.ROW_HEADER_MODE_EXPLICIT_DEFAULTS_ID),
new Integer(Table.ROW_HEADER_MODE_HIDDEN),
new Integer(Table.ROW_HEADER_MODE_ICON_ONLY),
new Integer(Table.ROW_HEADER_MODE_ID),
new Integer(Table.ROW_HEADER_MODE_INDEX),
new Integer(Table.ROW_HEADER_MODE_ITEM),
new Integer(Table.ROW_HEADER_MODE_PROPERTY) }, new Object[] {
"Explicit", "Explicit defaults ID", "Hidden", "Icon only",
"ID", "Index", "Item", "Property" });
Select themes = (Select) propertyPanel.getField("style");
themes.addItem("list").getItemProperty(
themes.getItemCaptionPropertyId()).setValue("list");
themes.addItem("paging").getItemProperty(
themes.getItemCaptionPropertyId()).setValue("paging");
propertyPanel.addProperties("Table Properties", ap);
// Set first name as item caption propertyId in cas somebody
// selecs it
t.setItemCaptionPropertyId("Firstname");
// this overrides previous
t.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX);
t.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_EXPLICIT_DEFAULTS_ID);
t.setColumnCollapsingAllowed(true);
t.setColumnReorderingAllowed(true);
t.setSelectable(true);
setJavadocURL("ui/Table.html");
return l;
}
protected String getExampleSrc() {
return "// Sample table\n"
+ "t = new Table(\"Corporate Employees\");\n"
+ "t.setPageLength(10);\n\n"
+ "// Add columns to table\n"
+ "t.addContainerProperty(\"Firstname\", String.class, \"\");\n"
+ "t.addContainerProperty(\"Lastname\", String.class, \"\");\n"
+ "t.addContainerProperty(\"Age\", String.class, \"\");\n"
+ "t.addContainerProperty(\"Title\", String.class, \"\");\n"
+ "t.addContainerProperty(\"Unit\", String.class, \"\");\n\n"
+ "// Add random rows to table\n"
+ "for (int j = 0; j < 50; j++) {\n" + " t.addItem(\n"
+ " new Object[] {\n"
+ " firstnames[(int) (Math.random() * 9)],\n"
+ " lastnames[(int) (Math.random() * 9)],\n"
+ " title[(int) (Math.random() * title.length)],\n"
+ " unit[(int) (Math.random() * unit.length)] },\n"
+ " new Integer(j));\n" + "}\n";
}
protected String getDescriptionXHTML() {
return "The Table component is designed for displaying large volumes of tabular data, "
+ "in multiple pages whenever needed."
+ "
Selection of the displayed data is supported both in selecting exclusively one row "
+ "or multiple rows at the same time. For each row, there may be a set of actions associated, "
+ "depending on the theme these actions may be displayed either as a drop-down "
+ "menu for each row or a set of command buttons."
+ "
Table may be connected to any datasource implementing the Container
interface."
+ "This way data found in external datasources can be directly presented in the table component."
+ "
"
+ "Table implements a number of features and you can test most of them in the table demo tab.";
}
protected String getImage() {
return "icon_demo.png";
}
protected String getTitle() {
return "Table";
}
private Action ACTION1 = new Action("Action 1");
private Action ACTION2 = new Action("Action 2");
private Action ACTION3 = new Action("Action 3");
private Action[] actions = new Action[] { ACTION1, ACTION2, ACTION3 };
public Action[] getActions(Object target, Object sender) {
return actions;
}
public void handleAction(Action action, Object sender, Object target) {
t.setDescription("Last action clicked was '" + action.getCaption()
+ "' on item '" + t.getItem(target).toString() + "'");
}
}