From 44083ece0d88dbb23e0a7f38ee91fe0a7285fe9f Mon Sep 17 00:00:00 2001 From: Jani Laakso Date: Mon, 12 Feb 2007 00:33:32 +0000 Subject: [PATCH] Many language fixes. Removed TODO's. Added documentational content. Removed most pictures which are no longer required. - also this slows down loading of the application on "slow" links. - pictures were not that good anyway. Property panel is now also applicable. Fixed: #387 FeatureBrowser is full of descriptions saying TODO #337 FeatureBrowser: Source tabs in "features" that do not have source #374 FeatureBrowser: When opening a feature with no properties, hide propertypanel (on Java) #395 FeatureBrowser: Hide non-working features #375 FeatureBrowser: Should start from welcome (?) and select it from tree svn changeset:674/svn branch:toolkit --- .../itmill/toolkit/demo/features/Feature.java | 55 ++++++--- .../toolkit/demo/features/FeatureBrowser.java | 2 +- .../demo/features/FeatureBuffering.java | 114 ++++++++++-------- .../toolkit/demo/features/FeatureButton.java | 2 +- .../demo/features/FeatureContainers.java | 83 ++++++++----- .../demo/features/FeatureCustomLayout.java | 81 ++++++++----- .../demo/features/FeatureDateField.java | 36 +++--- .../demo/features/FeatureEmbedded.java | 71 ++++++----- .../toolkit/demo/features/FeatureForm.java | 16 +-- .../demo/features/FeatureFrameWindow.java | 2 +- .../demo/features/FeatureGridLayout.java | 10 +- .../toolkit/demo/features/FeatureItems.java | 60 ++++++--- .../toolkit/demo/features/FeatureLabel.java | 2 +- .../toolkit/demo/features/FeatureLink.java | 6 +- .../demo/features/FeatureOrderedLayout.java | 6 +- .../toolkit/demo/features/FeaturePanel.java | 18 +-- .../demo/features/FeatureProperties.java | 81 ++++++++----- .../toolkit/demo/features/FeatureSelect.java | 2 +- .../demo/features/FeatureTabSheet.java | 28 +++-- .../toolkit/demo/features/FeatureTable.java | 31 ++--- .../demo/features/FeatureTextField.java | 17 ++- .../toolkit/demo/features/FeatureTree.java | 24 ++-- .../toolkit/demo/features/FeatureUpload.java | 5 +- .../demo/features/FeatureValidators.java | 62 ++++++---- .../toolkit/demo/features/FeatureWindow.java | 45 +++++-- .../toolkit/demo/features/IntroBasic.java | 38 ++++-- .../demo/features/IntroComponents.java | 46 +++++-- .../demo/features/IntroDataHandling.java | 37 ++++-- .../toolkit/demo/features/IntroDataModel.java | 39 ++++-- .../demo/features/IntroItemContainers.java | 38 ++++-- .../toolkit/demo/features/IntroLayouts.java | 40 ++++-- .../toolkit/demo/features/IntroTerminal.java | 2 +- .../toolkit/demo/features/IntroWelcome.java | 84 ++++++++++--- .../toolkit/demo/features/buffering.jpg | Bin 11833 -> 0 bytes .../toolkit/demo/features/containers.jpg | Bin 12327 -> 0 bytes .../toolkit/demo/features/customlayout.jpg | Bin 7127 -> 0 bytes .../toolkit/demo/features/properties.jpg | Bin 8877 -> 0 bytes .../toolkit/demo/features/validators.gif | Bin 28209 -> 0 bytes 38 files changed, 774 insertions(+), 409 deletions(-) delete mode 100644 src/com/itmill/toolkit/demo/features/buffering.jpg delete mode 100644 src/com/itmill/toolkit/demo/features/containers.jpg delete mode 100644 src/com/itmill/toolkit/demo/features/customlayout.jpg delete mode 100644 src/com/itmill/toolkit/demo/features/properties.jpg delete mode 100644 src/com/itmill/toolkit/demo/features/validators.gif diff --git a/src/com/itmill/toolkit/demo/features/Feature.java b/src/com/itmill/toolkit/demo/features/Feature.java index c59eeb30ab..7d20da755a 100644 --- a/src/com/itmill/toolkit/demo/features/Feature.java +++ b/src/com/itmill/toolkit/demo/features/Feature.java @@ -28,12 +28,20 @@ package com.itmill.toolkit.demo.features; +import com.itmill.toolkit.Application; import com.itmill.toolkit.terminal.ClassResource; import com.itmill.toolkit.terminal.Resource; import com.itmill.toolkit.ui.*; public abstract class Feature extends CustomComponent { + private static final String PROP_REMINDER_TEXT = "" + + "

Note: Use Properties panel located at the top" + + " right corner to try out how different properties affect" + + " the presentation or functionality of currently selected component."; + + private boolean propsReminder = true; + private OrderedLayout layout; private TabSheet ts; @@ -51,13 +59,20 @@ public abstract class Feature extends CustomComponent { layout = new OrderedLayout(OrderedLayout.ORIENTATION_VERTICAL); setCompositionRoot(layout); } - + /** * Actual URL consists of "/doc/api/com/itmill/toolkit/"+url + * * @param url */ public void setJavadocURL(String url) { - javadoc.setValue(""); + // TODO: FIXME!!! + javadoc + .setValue(""); + javadoc + .setValue(""); } /** @@ -65,14 +80,13 @@ public abstract class Feature extends CustomComponent { * attached to application */ public void attach() { - super.attach(); // Check if the feature is already initialized if (initialized) return; initialized = true; - + // Javadoc javadoc = new Label(); javadoc.setContentMode(Label.CONTENT_RAW); @@ -83,37 +97,42 @@ public abstract class Feature extends CustomComponent { layout.addComponent(demo); ts = new TabSheet(); - layout.addComponent(ts); // Description tab String desc = getDescriptionXHTML(); String title = getTitle(); - if (desc != null && title != null) { + if (desc != null) { GridLayout gl = new GridLayout(2, 1); if (getImage() != null) gl.addComponent(new Embedded("", new ClassResource(getImage(), this.getApplication()))); - gl.addComponent(new Label("

" + title + "

" + desc, - Label.CONTENT_XHTML)); + String label = ""; + if (title != null) + label += "

" + title + "

"; + label += desc; + if (propsReminder) + label += PROP_REMINDER_TEXT; + gl.addComponent(new Label(label, Label.CONTENT_XHTML)); ts.addTab(gl, "Description", null); } + // Javadoc tab + if (!javadoc.getValue().equals("")) + ts.addTab(javadoc, "Javadoc", null); + // Code Sample tab String example = getExampleSrc(); if (example != null) { OrderedLayout l = new OrderedLayout(); - l.addComponent(new Label("

" + getTitle() + " example

", - Label.CONTENT_XHTML)); + if (getTitle() != null) + l.addComponent(new Label("// " + getTitle() + " example", + Label.CONTENT_XHTML)); l.addComponent(new Label(example, Label.CONTENT_PREFORMATTED)); ts.addTab(l, "Code Sample", null); } - - // Javadoc tab - ts.addTab(javadoc, "Javadoc", null); - // Properties tab - // if (properties != null) - // ts.addTab(properties, "Properties", null); + layout.addComponent(ts); + } /** Get the desctiption of the feature as XHTML fragment */ @@ -152,4 +171,8 @@ public abstract class Feature extends CustomComponent { return propertyPanel; } + public void setPropsReminder(boolean propsReminder) { + this.propsReminder = propsReminder; + } + } \ No newline at end of file diff --git a/src/com/itmill/toolkit/demo/features/FeatureBrowser.java b/src/com/itmill/toolkit/demo/features/FeatureBrowser.java index 41e8979ce7..8d63a162d0 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureBrowser.java +++ b/src/com/itmill/toolkit/demo/features/FeatureBrowser.java @@ -149,7 +149,7 @@ public class FeatureBrowser extends CustomComponent implements features.expandItem(i.next()); // Add demo component and tabs - currentFeature = new FeatureTable(); + currentFeature = new IntroWelcome(); layout.addComponent(currentFeature); // Add properties diff --git a/src/com/itmill/toolkit/demo/features/FeatureBuffering.java b/src/com/itmill/toolkit/demo/features/FeatureBuffering.java index 3071c3a3d6..da345e5a5a 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureBuffering.java +++ b/src/com/itmill/toolkit/demo/features/FeatureBuffering.java @@ -1,92 +1,110 @@ /* ************************************************************************* - IT Mill Toolkit + IT Mill Toolkit - Development of Browser User Interfaces Made Easy + Development of Browser User Interfaces Made Easy - Copyright (C) 2000-2006 IT Mill Ltd - - ************************************************************************* + 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 + 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 + ************************************************************************* + + 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.demo.features; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class FeatureBuffering extends Feature { - + + private static final String INTRO_TEXT = "" + + "IT Mill Toolkit data model provides interface for implementing " + + "buffering in data components. The basic idea is that a component " + + "reading their state from data source can implement " + + "Buffered-interface, for storing the value internally. " + + "Buffering provides transactional access " + + "for setting data: data can be put to a component's buffer and " + + "afterwards committed to or discarded by re-reding it from the data source. " + + "The buffering can be used for creating interactive interfaces " + + "as well as caching the data for performance reasons." + + "

Buffered interface contains methods for committing and discarding " + + "changes to an object and support for controlling buffering mode " + + "with read-through and write-through modes. " + + "Read-through mode means that the value read from the buffered " + + "object is constantly up to date with the data source. " + + "Respectively the write-through mode means that all changes to the object are " + + "immediately updated to the data source."; + public FeatureBuffering() { super(); } - + protected Component getDemoComponent() { OrderedLayout l = new OrderedLayout(); + Panel panel = new Panel(); + panel.setCaption("Buffering"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); // Properties - propertyPanel = null; - + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); + setJavadocURL("data/Buffered.html"); - + return l; } protected String getExampleSrc() { - return ""; + return null; } /** * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return "

IT Mill Toolkit data model provides interface for implementing " - + "buffering in data components. The basic idea is that a component " - + "reading their state from data source can implement " - + "Buffered-interface, for storing the value internally. " - + "Buffering provides transactional access " - + "for setting data: data can be put to a component's buffer and " - + "afterwards committed to or discarded by re-reding it from the data source. " - + "The buffering can be used for creating interactive interfaces " - + "as well as caching the data for performance reasons.

" - + "

Buffered interface contains methods for committing and discarding " - + "changes to an object and support for controlling buffering mode " - + "with read-through and write-through modes. " - + "Read-through mode means that the value read from the buffered " - + "object is constantly up to date with the data source. " - + "Respectively the write-through mode means that all changes to the object are " - + "immediately updated to the data source.

"; + return null; } - protected String getImage() { - return "buffering.jpg"; + return null; } protected String getTitle() { - return "Introduction of Data Model Buffering"; + return null; } } diff --git a/src/com/itmill/toolkit/demo/features/FeatureButton.java b/src/com/itmill/toolkit/demo/features/FeatureButton.java index 364e759b6e..502a4d9272 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureButton.java +++ b/src/com/itmill/toolkit/demo/features/FeatureButton.java @@ -53,7 +53,7 @@ public class FeatureButton extends Feature { propertyPanel.addProperties("Button Properties", ap); setJavadocURL("ui/Button.html"); - + return l; } diff --git a/src/com/itmill/toolkit/demo/features/FeatureContainers.java b/src/com/itmill/toolkit/demo/features/FeatureContainers.java index 94d093ae56..5b3f5fe134 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureContainers.java +++ b/src/com/itmill/toolkit/demo/features/FeatureContainers.java @@ -29,66 +29,85 @@ package com.itmill.toolkit.demo.features; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class FeatureContainers extends Feature { + private static final String INTRO_TEXT = "" + + "Container is the most advanced of the data " + + "model supported by IT Mill Toolkit. It provides a very flexible " + + "way of managing set of items that share common properties. Each " + + "item is identified by an item id. " + + "Properties can be requested from container with item " + + "and property ids. Other way of accessing properties is to first " + + "request an item from container and then request its properties " + + "from it." + + "

Container interface was designed with flexibility and " + + "efficiency in mind. It contains inner interfaces for ordering " + + "the items sequentially, indexing the items and accessing them " + + "hierarchically. Those ordering models provide basis for " + + "Table, Tree and Select UI components. As with other data " + + "models, the containers support events for notifying about the " + + "changes." + + "

Set of utilities for converting between container models by " + + "adding external indexing or hierarchy into existing containers. " + + "In memory containers implementing indexed and hierarchical " + + "models provide easy to use tools for setting up in memory data " + + "storages. There is even a hierarchical container for direct " + + "file system access."; + public FeatureContainers() { super(); } - + protected Component getDemoComponent() { OrderedLayout l = new OrderedLayout(); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); + Panel panel = new Panel(); + panel.setCaption("Containers"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); // Properties - propertyPanel = null; - + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); + setJavadocURL("data/Container.html"); - + return l; } protected String getExampleSrc() { - return ""; + return null; } protected String getDescriptionXHTML() { - return "

Container is the most advanced of the data " - + "model supported by IT Mill Toolkit. It provides a very flexible " - + "way of managing set of items that share common properties. Each " - + "item is identified by an item id. " - + "Properties can be requested from container with item " - + "and property ids. Other way of accessing properties is to first " - + "request an item from container and then request its properties " - + "from it.

" - + "

Container interface was designed with flexibility and " - + "efficiency in mind. It contains inner interfaces for ordering " - + "the items sequentially, indexing the items and accessing them " - + "hierarchically. Those ordering models provide basis for " - + "Table, Tree and Select UI components. As with other data " - + "models, the containers support events for notifying about the " - + "changes.

" - + "

Set of utilities for converting between container models by " - + "adding external indexing or hierarchy into existing containers. " - + "In memory containers implementing indexed and hierarchical " - + "models provide easy to use tools for setting up in memory data " - + "storages. There is even a hierarchical container for direct " - + "file system access.

"; + return null; } - protected String getImage() { - return "containers.jpg"; + return null; } protected String getTitle() { - return "Introduction of Data Model Containers"; + return null; } } diff --git a/src/com/itmill/toolkit/demo/features/FeatureCustomLayout.java b/src/com/itmill/toolkit/demo/features/FeatureCustomLayout.java index a9900e4b63..b491f406d7 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureCustomLayout.java +++ b/src/com/itmill/toolkit/demo/features/FeatureCustomLayout.java @@ -32,48 +32,65 @@ import com.itmill.toolkit.ui.*; public class FeatureCustomLayout extends Feature { + private static final String INTRO_TEXT = "" + + "A container component with freely designed layout and style. The " + + "container consists of items with textually represented locations. Each " + + "item contains one sub-component. The adapter and theme are resposible " + + "for rendering the layout with given style by placing the items on the " + + "screen in defined locations." + + "

The definition of locations is not fixed - the each style can define its " + + "locations in a way that is suitable for it. One typical example would be " + + "to create visual design for a website as a custom layout: the visual design " + + "could define locations for \"menu\", \"body\" and \"title\" for example. " + + "The layout would then be implemented e.g. as plain HTML file." + + "

The default theme handles the styles that are not defined by just drawing " + + "the subcomponents with flowlayout."; + + protected Component getDemoComponent() { + OrderedLayout l = new OrderedLayout(); + + Panel panel = new Panel(); + panel.setCaption("Custom Layout"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); + + // Properties + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); + + setJavadocURL("ui/CustomLayout.html"); + + return l; + } + protected String getDescriptionXHTML() { - return "

A container component with freely designed layout and style. The " - + "container consists of items with textually represented locations. Each " - + "item contains one sub-component. The adapter and theme are resposible " - + "for rendering the layout with given style by placing the items on the " - + "screen in defined locations.

" - + "

The definition of locations is not fixed - the each style can define its " - + "locations in a way that is suitable for it. One typical example would be " - + "to create visual design for a website as a custom layout: the visual design " - + "could define locations for \"menu\", \"body\" and \"title\" for example. " - + "The layout would then be implemented as XLS-template with for given style.

" - + "

The default theme handles the styles that are not defined by just drawing " - + "the subcomponents with flowlayout.

"; + return null; } protected String getExampleSrc() { - return "CustomLayout c = new CustomLayout(\"style-name\");\n" - + "c.addComponent(new Label(\"foo\"),\"foo-location\");\n" - + "c.addComponent(new Label(\"bar\"),\"bar-location\");\n"; + return "CustomLayout c = new CustomLayout(\"mystyle\");\n" + + "c.addComponent(new Label(\"Example description\"),\"label1-location\");\n" + + "c.addComponent(new Button(\"Example action\"),\"example-action-location\");\n"; } protected String getImage() { - return "customlayout.jpg"; + return null; } protected String getTitle() { - return "CustomLayout"; - } - - protected Component getDemoComponent() { - OrderedLayout l = new OrderedLayout(); - - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); - - // Properties - propertyPanel = null; - - setJavadocURL("ui/CustomLayout.html"); - - return l; + return "Custom Layout"; } } diff --git a/src/com/itmill/toolkit/demo/features/FeatureDateField.java b/src/com/itmill/toolkit/demo/features/FeatureDateField.java index 24c9b46afb..570b2c370b 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureDateField.java +++ b/src/com/itmill/toolkit/demo/features/FeatureDateField.java @@ -60,14 +60,13 @@ public class FeatureDateField extends Feature { // Create locale selector // TODO: see #244 (broken for AJAX mode), known issue exists - /* DISABLE UNTIL WORKS - Select selector = new Select("Application Locale", localeContainer); - selector.setItemCaptionPropertyId("name"); - selector.setImmediate(true); - selector.setPropertyDataSource(new MethodProperty( - this.getApplication(), "locale")); - l.addComponent(selector); - */ + /* + * DISABLE UNTIL WORKS Select selector = new Select("Application + * Locale", localeContainer); selector.setItemCaptionPropertyId("name"); + * selector.setImmediate(true); selector.setPropertyDataSource(new + * MethodProperty( this.getApplication(), "locale")); + * l.addComponent(selector); + */ // Properties propertyPanel = new PropertyPanel(df); @@ -91,8 +90,8 @@ public class FeatureDateField extends Feature { themes.addItem("calendar").getItemProperty( themes.getItemCaptionPropertyId()).setValue("calendar"); propertyPanel.addProperties("DateField Properties", ap); - - setJavadocURL("ui/DateField"); + + setJavadocURL("ui/DateField.html"); return l; } @@ -100,21 +99,20 @@ public class FeatureDateField extends Feature { protected String getExampleSrc() { return "DateField df = new DateField(\"Caption\");\n" + "df.setValue(new java.util.Date());\n"; - } protected String getDescriptionXHTML() { - return "

Representing Dates and times and providing a way to select " + return "Representing Dates and times and providing a way to select " + "or enter some specific date and/or time is an typical need in " - + "data-entry userinterfaces. IT Mill Toolkit provides a DateField " + + "data-entry user interfaces (UI). IT Mill Toolkit provides a DateField " + "component that is intuitive to use and yet controllable through " - + "its properties.

" - + "

The calendar-style allows point-and-click selection " + + "its properties." + + "

The calendar-style allows point-and-click selection " + "of dates while text-style shows only minimalistic user interface." - + "Validators may be bound to the component to check and " - + "validate the given input.

" - + "

On the demo tab you can try out how the different properties affect the " - + "presentation of the component.

"; + + " Validators may be bound to the component to check and " + + "validate the given input." + + "

On the demo tab you can try out how the different properties affect the " + + "presentation of the component."; } protected String getImage() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureEmbedded.java b/src/com/itmill/toolkit/demo/features/FeatureEmbedded.java index e152e38ed8..e63792f2cd 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureEmbedded.java +++ b/src/com/itmill/toolkit/demo/features/FeatureEmbedded.java @@ -42,8 +42,8 @@ public class FeatureEmbedded extends Feature { OrderedLayout l = new OrderedLayout(); - ClassResource flashResource = new ClassResource( - "itmill_spin.swf", this.getApplication()); + ClassResource flashResource = new ClassResource("itmill_spin.swf", this + .getApplication()); Embedded emb = new Embedded("Embedded Caption", flashResource); emb.setType(Embedded.TYPE_OBJECT); emb.setMimeType("application/x-shockwave-flash"); @@ -51,41 +51,40 @@ public class FeatureEmbedded extends Feature { emb.setHeight(100); l.addComponent(emb); - // Properties propertyPanel = null; if (false) { - propertyPanel = new PropertyPanel(emb); - Form ap = propertyPanel.createBeanPropertySet(new String[] { "type", - "source", "width", "height", "widthUnits", "heightUnits", - "codebase", "codetype", "archive", "mimeType", "standby", - "classId" }); - ap.replaceWithSelect("type", new Object[] { - new Integer(Embedded.TYPE_IMAGE), - new Integer(Embedded.TYPE_OBJECT) }, new Object[] { "Image", - "Object" }); - Object[] units = new Object[Sizeable.UNIT_SYMBOLS.length]; - Object[] symbols = new Object[Sizeable.UNIT_SYMBOLS.length]; - for (int i = 0; i < units.length; i++) { - units[i] = new Integer(i); - symbols[i] = Sizeable.UNIT_SYMBOLS[i]; - } - ap.replaceWithSelect("heightUnits", units, symbols); - ap.replaceWithSelect("widthUnits", units, symbols); - ap.replaceWithSelect("source", new Object[] { null, - new ClassResource("m-bullet-blue.gif", getApplication()) }, - new Object[] { "null", "IT Mill (m)" }); - propertyPanel.addProperties("Embedded Properties", ap); - propertyPanel.getField("standby").setDescription( - "The text to display while loading the object."); - propertyPanel.getField("codebase").setDescription( - "root-path used to access resources with relative paths."); - propertyPanel.getField("codetype").setDescription( - "MIME-type of the code."); - propertyPanel - .getField("classId") - .setDescription( - "Unique object id. This can be used for example to identify windows components."); + propertyPanel = new PropertyPanel(emb); + Form ap = propertyPanel.createBeanPropertySet(new String[] { + "type", "source", "width", "height", "widthUnits", + "heightUnits", "codebase", "codetype", "archive", + "mimeType", "standby", "classId" }); + ap.replaceWithSelect("type", new Object[] { + new Integer(Embedded.TYPE_IMAGE), + new Integer(Embedded.TYPE_OBJECT) }, new Object[] { + "Image", "Object" }); + Object[] units = new Object[Sizeable.UNIT_SYMBOLS.length]; + Object[] symbols = new Object[Sizeable.UNIT_SYMBOLS.length]; + for (int i = 0; i < units.length; i++) { + units[i] = new Integer(i); + symbols[i] = Sizeable.UNIT_SYMBOLS[i]; + } + ap.replaceWithSelect("heightUnits", units, symbols); + ap.replaceWithSelect("widthUnits", units, symbols); + ap.replaceWithSelect("source", new Object[] { null, + new ClassResource("m-bullet-blue.gif", getApplication()) }, + new Object[] { "null", "IT Mill (m)" }); + propertyPanel.addProperties("Embedded Properties", ap); + propertyPanel.getField("standby").setDescription( + "The text to display while loading the object."); + propertyPanel.getField("codebase").setDescription( + "root-path used to access resources with relative paths."); + propertyPanel.getField("codetype").setDescription( + "MIME-type of the code."); + propertyPanel + .getField("classId") + .setDescription( + "Unique object id. This can be used for example to identify windows components."); } setJavadocURL("ui/Embedded.html"); @@ -99,10 +98,10 @@ public class FeatureEmbedded extends Feature { } protected String getDescriptionXHTML() { - return "

The embedding feature allows for adding images, multimedia and other non-specified " + return "The embedding feature allows for adding images, multimedia and other non-specified " + "content to your application. " + "The feature has provisions for embedding both applets and Active X controls. " - + "Actual support for embedded media types is left to the terminal.

"; + + "Actual support for embedded media types is left to the terminal."; } protected String getImage() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureForm.java b/src/com/itmill/toolkit/demo/features/FeatureForm.java index 4e0fda7c85..488b9e9fcb 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureForm.java +++ b/src/com/itmill/toolkit/demo/features/FeatureForm.java @@ -52,7 +52,7 @@ public class FeatureForm extends Feature implements demo = new OrderedLayout(); createDemo(); } - + setJavadocURL("ui/Form.html"); return demo; @@ -67,7 +67,7 @@ public class FeatureForm extends Feature implements test = new Form(); else test = new Form(formLayout); - + demo.addComponent(test); OrderedLayout actions = new OrderedLayout( OrderedLayout.ORIENTATION_HORIZONTAL); @@ -160,13 +160,13 @@ public class FeatureForm extends Feature implements } protected String getDescriptionXHTML() { - return "

Form is a flexible, yet simple container for fields. " + return "Form is a flexible, yet simple container for fields. " + " It provides support for any layouts and provides buffering interface for" + " easy connection of commit- and discard buttons. All the form" + " fields can be customized by adding validators, setting captions and icons, " + " setting immediateness, etc. Also direct mechanism for replacing existing" - + " fields with selections is given.

" - + "

Form provides customizable editor for classes implementing" + + " fields with selections is given." + + "

Form provides customizable editor for classes implementing" + " Item-interface. Also the form itself" + " implements this interface for easier connectivity to other items." + " To use the form as editor for an item, just connect the item to" @@ -175,9 +175,9 @@ public class FeatureForm extends Feature implements + " be added. If you need to connect a class that does not implement" + " Item-interface, most properties of any" + " class following bean pattern, can be accessed trough" - + " BeanItem.

" - + "

The best example of Form usage is the this feature browser itself; " - + " all the Property-panels in demos are composed of Form-components.

"; + + " BeanItem." + + "

The best example of Form usage is the this feature browser itself; " + + " all the Property-panels in demos are composed of Form-components."; } protected String getTitle() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureFrameWindow.java b/src/com/itmill/toolkit/demo/features/FeatureFrameWindow.java index fa60495edb..51e430f084 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureFrameWindow.java +++ b/src/com/itmill/toolkit/demo/features/FeatureFrameWindow.java @@ -70,7 +70,7 @@ public class FeatureFrameWindow extends Feature implements Button.ClickListener "None", "Minimal" }); propertyPanel.addProperties("FrameWindow Properties", ap); - + setJavadocURL("ui/FrameWindow.html"); return l; diff --git a/src/com/itmill/toolkit/demo/features/FeatureGridLayout.java b/src/com/itmill/toolkit/demo/features/FeatureGridLayout.java index 134de073f8..99926dba4e 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureGridLayout.java +++ b/src/com/itmill/toolkit/demo/features/FeatureGridLayout.java @@ -59,7 +59,7 @@ public class FeatureGridLayout extends Feature { propertyPanel.addProperties("GridLayout Features", ap); propertyPanel.getField("height").dependsOn( propertyPanel.getField("add component")); - + setJavadocURL("ui/GridLayout.html"); return l; @@ -77,10 +77,10 @@ public class FeatureGridLayout extends Feature { * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return "

This feature provides a container that lays out components " - + "into a grid of given width and height.

" - + "

On the demo tab you can try out how the different " - + "properties affect the presentation of the component.

"; + return "This feature provides a container that lays out components " + + "into a grid of given width and height." + + "

On the demo tab you can try out how the different " + + "properties affect the presentation of the component."; } protected String getImage() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureItems.java b/src/com/itmill/toolkit/demo/features/FeatureItems.java index 208fccd2d9..0ee458debc 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureItems.java +++ b/src/com/itmill/toolkit/demo/features/FeatureItems.java @@ -29,50 +29,70 @@ package com.itmill.toolkit.demo.features; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class FeatureItems extends Feature { + private static final String INTRO_TEXT = "" + + "Item is an object, which contains a set of named " + + "properties. Each property is identified by an " + + "id and a reference to the property can be queried from the Item. " + + "Item defines inner-interfaces for maintaining the item property " + + "set and listening the item property set changes." + + "

Items generally represent objects in the object-oriented " + + "model, but with the exception that they are configurable " + + "and provide an event mechanism. The simplest way of utilizing " + + "Item interface is to use existing Item implementations. " + + "Provided utility classes include configurable property set," + + " bean to item adapter and Form UI component."; + public FeatureItems() { super(); } - + protected Component getDemoComponent() { OrderedLayout l = new OrderedLayout(); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); + Panel panel = new Panel(); + panel.setCaption("Items"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); // Properties - propertyPanel = null; - - setJavadocURL("data/Items.html"); - + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); + + setJavadocURL("data/Item.html"); + return l; } protected String getExampleSrc() { - return ""; + return null; } /** * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return "

Item is an object, which contains a set of named " - + "properties. Each property is identified by an " - + "id and a reference to the property can be queried from the Item. " - + "Item defines inner-interfaces for maintaining the item property " - + "set and listening the item property set changes.

" - + "

Items generally represent objects in the object-oriented " - + "model, but with the exception that they are configurable " - + "and provide an event mechanism. The simplest way of utilizing " - + "Item interface is to use existing Item implementations. " - + "Provided utility classes include configurable property set," - + " bean to item adapter and Form UI component.

"; + return null; } protected String getImage() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureLabel.java b/src/com/itmill/toolkit/demo/features/FeatureLabel.java index 88e5448ec2..cac095c6f6 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureLabel.java +++ b/src/com/itmill/toolkit/demo/features/FeatureLabel.java @@ -59,7 +59,7 @@ public class FeatureLabel extends Feature { propertyPanel.addProperties("Label Properties", ap); setJavadocURL("ui/Label.html"); - + return l; } diff --git a/src/com/itmill/toolkit/demo/features/FeatureLink.java b/src/com/itmill/toolkit/demo/features/FeatureLink.java index b1b3a52b7a..372a7cb230 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureLink.java +++ b/src/com/itmill/toolkit/demo/features/FeatureLink.java @@ -40,7 +40,7 @@ public class FeatureLink extends Feature { protected Component getDemoComponent() { OrderedLayout l = new OrderedLayout(); - + Link lnk = new Link("Link caption", new ExternalResource( "http://www.itmill.com")); l.addComponent(lnk); @@ -57,12 +57,12 @@ public class FeatureLink extends Feature { propertyPanel.addProperties("Link Properties", ap); setJavadocURL("ui/Link.html"); - + return l; } protected String getExampleSrc() { - return "Link lnk = new Link(\"Link caption\",new ExternalResource(\"http://www.itmill.com\"));\n"; + return "Link link = new Link(\"Link caption\",new ExternalResource(\"http://www.itmill.com\"));\n"; } protected String getDescriptionXHTML() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureOrderedLayout.java b/src/com/itmill/toolkit/demo/features/FeatureOrderedLayout.java index 3b006e5e86..a432e3a27b 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureOrderedLayout.java +++ b/src/com/itmill/toolkit/demo/features/FeatureOrderedLayout.java @@ -59,7 +59,7 @@ public class FeatureOrderedLayout extends Feature { propertyPanel.addProperties("OrderedLayout Properties", ap); setJavadocURL("ui/OrderedLayout.html"); - + return l; } @@ -77,9 +77,9 @@ public class FeatureOrderedLayout extends Feature { return "This feature provides a container for laying out components either " + "vertically, horizontally or flowingly. The orientation may be changed " + "during runtime. It also defines a special style for themes to implement called \"form\"" - + "that is used for input forms where the components are layed-out side-by-side " + + "that is used for input forms where the components are laid-out side-by-side " + "with their captions." - + "

" + + "

" + "On the demo tab you can try out how the different properties " + "affect the presentation of the component."; } diff --git a/src/com/itmill/toolkit/demo/features/FeaturePanel.java b/src/com/itmill/toolkit/demo/features/FeaturePanel.java index 199203be02..f65829dcdb 100644 --- a/src/com/itmill/toolkit/demo/features/FeaturePanel.java +++ b/src/com/itmill/toolkit/demo/features/FeaturePanel.java @@ -42,7 +42,9 @@ public class FeaturePanel extends Feature { // Example panel Panel show = new Panel("Panel caption"); - show.addComponent(new Label("Label in Panel")); + show + .addComponent(new Label( + "This is an example Label component that is added into Panel.")); l.addComponent(show); // Properties @@ -57,23 +59,21 @@ public class FeaturePanel extends Feature { propertyPanel.addProperties("Panel Properties", ap); setJavadocURL("ui/Panel.html"); - + return l; } protected String getExampleSrc() { return "Panel show = new Panel(\"Panel caption\");\n" - + "show.addComponent(new Label(\"Label in Panel\"));"; + + "show.addComponent(new Label(\"This is an example Label component that is added into Panel.\"));"; } protected String getDescriptionXHTML() { - return "The Panel is a container for other components, it usually draws a frame around it's " - + "extremities and may have a caption to clarify the nature of the contained components purpose." - + "A panel always contains firstly a layout onto which the actual contained components are added, " - + "this layout may be switched on the fly.

" - + "On the demo tab you can try out how the different properties " - + "affect the presentation of the component."; + return "Panel is a container for other components, by default it draws a frame around it's " + + "extremities and may have a caption to clarify the nature of the contained components' purpose." + + " Panel contains an layout where the actual contained components are added, " + + "this layout may be switched on the fly."; } protected String getImage() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureProperties.java b/src/com/itmill/toolkit/demo/features/FeatureProperties.java index 253c20356f..4d6b013378 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureProperties.java +++ b/src/com/itmill/toolkit/demo/features/FeatureProperties.java @@ -29,64 +29,83 @@ package com.itmill.toolkit.demo.features; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class FeatureProperties extends Feature { + private static final String INTRO_TEXT = "" + + "IT Mill Toolkit data model is one of the core concepts " + + "in the library and Property-interface is the base of that " + + "model. Property provides standardized API for a single data object " + + "that can be read (get) and written (set). A property is always typed, but can optionally " + + "support data type conversions. Optionally properties can provide " + + "value change events for following the state changes." + + "

The most important function of the Property as well as other " + + "data models is to connect classes implementing the interface directly to " + + "editor and viewer classes. Typically this is used to connect different " + + "data sources to UI components for editing and viewing their contents." + + "

Properties can be utilized either by implementing the interface " + + "or by using some of the existing property implementations. IT Mill Toolkit " + + "includes Property interface implementations for " + + "arbitrary function pairs or Bean-properties as well as simple object " + + "properties." + + "

Many of the UI components also implement Property interface and allow " + + "setting of other components as their data-source. These UI-components " + + "include TextField, DateField, Select, Table, Button, " + + "Label and Tree."; + public FeatureProperties() { super(); } - + protected Component getDemoComponent() { OrderedLayout l = new OrderedLayout(); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); + Panel panel = new Panel(); + panel.setCaption("Data Model"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); // Properties - propertyPanel = null; - - setJavadocURL("ui/package-summary.html"); - + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); + + setJavadocURL("data/Property.html"); + return l; } protected String getExampleSrc() { - return ""; + return null; } protected String getDescriptionXHTML() { - return "

IT Mill Toolkti data model is one of the core concepts " - + "in the library and Property-interface is the base of that " - + "model. Property provides standardized API for a singe data object " - + "that can be getted and setted. A property is always typed, but can optionally " - + "support data type conversions. Optionally properties can provide " - + "value change events for following the state changes.

" - + "

The most important function of the Property as well as other " - + "data models is to connect classes implementing the interface directly to " - + "editor and viewer classes. Typically this is used to connect different " - + "data sources to UI components for editing and viewing their contents.

" - + "

Properties can be utilized either by implementing the interface " - + "or by using some of the existing property implementations. IT Mill Toolkit " - + "includes Property interface implementations for " - + "arbitrary function pairs or Bean-properties as well as simple object " - + "properties.

" - + "

Many of the UI components also imlement Property interface and allow " - + "setting of other components as their data-source. These UI-components " - + "include TextField, DateField, Select, Table, Button, " - + "Label and Tree.

"; + return null; } - protected String getImage() { - return "properties.jpg"; + return null; } protected String getTitle() { - return "Introduction of Data Model Properties"; + return null; } } diff --git a/src/com/itmill/toolkit/demo/features/FeatureSelect.java b/src/com/itmill/toolkit/demo/features/FeatureSelect.java index 53d883797a..f0f95ff909 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureSelect.java +++ b/src/com/itmill/toolkit/demo/features/FeatureSelect.java @@ -65,7 +65,7 @@ public class FeatureSelect extends Feature { themes.getItemCaptionPropertyId()).setValue("optiongroup"); themes.addItem("twincol").getItemProperty( themes.getItemCaptionPropertyId()).setValue("twincol"); - + setJavadocURL("ui/Select.html"); return l; diff --git a/src/com/itmill/toolkit/demo/features/FeatureTabSheet.java b/src/com/itmill/toolkit/demo/features/FeatureTabSheet.java index 19bf0399be..524e4be03a 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureTabSheet.java +++ b/src/com/itmill/toolkit/demo/features/FeatureTabSheet.java @@ -41,24 +41,36 @@ public class FeatureTabSheet extends Feature { OrderedLayout l = new OrderedLayout(); TabSheet ts = new TabSheet(); - ts.addTab(new Label("Tab 1 Body"), "Tab 1 caption", null); - ts.addTab(new Label("Tab 2 Body"), "Tab 2 caption", null); - ts.addTab(new Label("Tab 3 Body"), "Tab 3 caption", null); + ts + .addTab( + new Label( + "This is an example Label component that is added into Tab 1."), + "Tab 1 caption", null); + ts + .addTab( + new Label( + "This is an example Label component that is added into Tab 2."), + "Tab 2 caption", null); + ts + .addTab( + new Label( + "This is an example Label component that is added into Tab 3."), + "Tab 3 caption", null); l.addComponent(ts); // Properties propertyPanel = new PropertyPanel(ts); - + setJavadocURL("ui/TabSheet.html"); return l; } protected String getExampleSrc() { - return "TabSheet ts = new TabSheet();" - + "ts.addTab(new Label(\"Tab 1 Body\"),\"Tab 1 caption\",null);" - + "ts.addTab(new Label(\"Tab 2 Body\"),\"Tab 2 caption\",null);" - + "ts.addTab(new Label(\"Tab 3 Body\"),\"Tab 3 caption\",null);"; + return "TabSheet ts = new TabSheet();\n" + + "ts.addTab(new Label(\"This is an example Label component that is added into Tab 1.\"),\"Tab 1 caption\",null);\n" + + "ts.addTab(new Label(\"This is an example Label component that is added into Tab 2.\"),\"Tab 2 caption\",null);\n" + + "ts.addTab(new Label(\"This is an example Label component that is added into Tab 3.\"),\"Tab 3 caption\",null);"; } protected String getDescriptionXHTML() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureTable.java b/src/com/itmill/toolkit/demo/features/FeatureTable.java index 43b5de61bb..e2cbd2f922 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureTable.java +++ b/src/com/itmill/toolkit/demo/features/FeatureTable.java @@ -124,13 +124,14 @@ public class FeatureTable extends Feature implements Action.Handler { new Integer(Table.ROW_HEADER_MODE_PROPERTY) }, new Object[] { "Explicit", "Explicit defaults ID", "Hidden", "Icon only", "ID", "Index", "Item", "Property" }); - /* Disabled theme changer before #356, #357 are fixed - Select themes = (Select) propertyPanel.getField("style"); - themes.addItem("list").getItemProperty( - themes.getItemCaptionPropertyId()).setValue("list"); - themes.addItem("paging").getItemProperty( - themes.getItemCaptionPropertyId()).setValue("paging"); - */ + /* + * Disabled theme changer before #356, #357 are fixed 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); t.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX); @@ -140,7 +141,7 @@ public class FeatureTable extends Feature implements Action.Handler { t.setSelectable(true); setJavadocURL("ui/Table.html"); - + return l; } @@ -167,16 +168,16 @@ public class FeatureTable extends Feature implements Action.Handler { 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 " + 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." + + "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.

"; + + "

" + + "Table implements a number of features and you can test most of them in the table demo tab."; } protected String getImage() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureTextField.java b/src/com/itmill/toolkit/demo/features/FeatureTextField.java index 0485b9d8fa..342dda1f77 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureTextField.java +++ b/src/com/itmill/toolkit/demo/features/FeatureTextField.java @@ -51,9 +51,9 @@ public class FeatureTextField extends Feature { "rows", "wordwrap", "writeThrough", "readThrough", "nullRepresentation", "nullSettingAllowed", "secret" }); propertyPanel.addProperties("Text field properties", f); - + setJavadocURL("ui/TextField.html"); - + return l; } @@ -66,17 +66,16 @@ public class FeatureTextField extends Feature { * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return "

TextField combines the logic of both the single line text-entry field and the multi-line " + return "TextField combines the logic of both the single line text-entry field and the multi-line " + "text-area into one component. " + "As with all Data-components of IT Mill Toolkit, the TextField can also be bound to an " + "underlying data source, both directly or in a buffered (asynchronous) " + "mode. In buffered mode its background color will change to indicate " - + "that the value has changed but is not committed.

" - + "

Furthermore a validators may be bound to the component to " - + "check and validate the given input before it is actually commited." - + "

" - + "

On the demo tab you can try out how the different properties affect the " - + "presentation of the component.

"; + + "that the value has changed but is not committed." + + "

Furthermore a validators may be bound to the component to " + + "check and validate the given input before it is actually committed." + + "

On the demo tab you can try out how the different properties affect the " + + "presentation of the component."; } protected String getImage() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureTree.java b/src/com/itmill/toolkit/demo/features/FeatureTree.java index fa82a6852b..8821749444 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureTree.java +++ b/src/com/itmill/toolkit/demo/features/FeatureTree.java @@ -100,7 +100,7 @@ public class FeatureTree extends Feature implements Action.Handler { for (int i = 0; i < 100; i++) if (!t.hasChildren(names[i])) t.setChildrenAllowed(names[i], false); - + l.addComponent(t); // Actions @@ -118,9 +118,9 @@ public class FeatureTree extends Feature implements Action.Handler { themes.addItem("menu").getItemProperty( themes.getItemCaptionPropertyId()).setValue("menu"); propertyPanel.addProperties("Tree Properties", ap); - + setJavadocURL("ui/Tree.html"); - + return l; } @@ -140,21 +140,21 @@ public class FeatureTree extends Feature implements Action.Handler { } protected String getDescriptionXHTML() { - return "

A tree is a natural way to represent datasets that have" + return "A tree is a natural way to represent datasets that have" + " hierarchical relationships, such as filesystems, message " - + "threads or... family trees. IT Mill Toolkit features a versatile " + + "threads or, as in this example, family trees. IT Mill Toolkit features a versatile " + "and powerful Tree component that works much like the tree components " - + "of most modern operating systems.

" - + "

The most prominent use of the Tree component is to " + + "of most modern operating systems." + + "

The most prominent use of the Tree component is to " + "use it for displaying a hierachical menu, like the " + "menu on the left side of the screen for instance " - + "or to display filesystems or other hierarchical datasets.

" - + "

The tree component uses Container " + + "or to display filesystems or other hierarchical datasets." + + "

The tree component uses Container " + "datasources much like the Table component, " + "with the addition that it also utilizes the hierarchy " - + "information maintained by the container.

On " - + "the demo tab you can try out how the different properties " - + "affect the presentation of the tree component.

"; + + "information maintained by the container." + + "

On the demo tab you can try out how the different properties " + + "affect the presentation of the tree component."; } protected String getImage() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureUpload.java b/src/com/itmill/toolkit/demo/features/FeatureUpload.java index e4d90ecd01..452df31c77 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureUpload.java +++ b/src/com/itmill/toolkit/demo/features/FeatureUpload.java @@ -65,7 +65,7 @@ public class FeatureUpload extends Feature implements Upload.FinishedListener { // Properties propertyPanel = new PropertyPanel(up); - + setJavadocURL("ui/Upload.html"); return l; @@ -84,8 +84,7 @@ public class FeatureUpload extends Feature implements Upload.FinishedListener { protected String getDescriptionXHTML() { return "This demonstrates the use of the Upload component together with the Link component. " + "This implementation does not actually store the file to disk, it only keeps it in a buffer. " - + "The example given on the example-tab on the other hand stores the file to disk and binds the link to that file.
" - + "
On the demo tab you can try out how the different properties affect the presentation of the component."; + + "The example given on the Code Sample-tab on the other hand stores the file to disk and binds the link to that file."; } protected String getImage() { diff --git a/src/com/itmill/toolkit/demo/features/FeatureValidators.java b/src/com/itmill/toolkit/demo/features/FeatureValidators.java index ce469c0e9c..f04bd4b998 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureValidators.java +++ b/src/com/itmill/toolkit/demo/features/FeatureValidators.java @@ -29,58 +29,78 @@ package com.itmill.toolkit.demo.features; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class FeatureValidators extends Feature { + private static final String INTRO_TEXT = "" + + "IT Mill Toolkit contains simple, yet powerful validation interface, " + + "that consists of two parts: Validator and Validatable. Validator is " + + "any class that can check validity of an Object. Validatable is " + + "a class with configurable validation. " + + "Validation errors are passed as special exceptions that implement " + + "ErrorMessage interface. This way the validation errors can be " + + "automatically added to components." + + "

Utilities for simple string and null validation are provided, as " + + "well as combinative validators. The validation interface can also " + + "be easily implemented by the applications for more complex " + + "validation needs."; + public FeatureValidators() { super(); } - + protected Component getDemoComponent() { OrderedLayout l = new OrderedLayout(); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); + Panel panel = new Panel(); + panel.setCaption("Validators"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); // Properties - propertyPanel = null; - + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); + setJavadocURL("data/Validator.html"); - + return l; } protected String getExampleSrc() { - return ""; + return null; } /** * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return "

IT Mill Toolkit contains simple, yet powerful validation interface, " - + "that consists of two parts: Validator and Validatable. Validator is " - + "any class that can check validity of an Object. Validatable is " - + "a class with configurable validation. " - + "Validation errors are passed as special exceptions that implement " - + "ErrorMessage interface. This way the validation errors can be " - + "automatically added to components.

" - + "

Utilities for simple string and null validation are provided, as " - + "well as combinative validators. The validation interface can also " - + "be easily implemented by the applications for more complex " - + "validation needs.

"; + return null; } protected String getImage() { - return "validators.gif"; + return null; } protected String getTitle() { - return "Introduction of Data Model Validators"; + return null; } } diff --git a/src/com/itmill/toolkit/demo/features/FeatureWindow.java b/src/com/itmill/toolkit/demo/features/FeatureWindow.java index 32fd71d529..db96a7dba4 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureWindow.java +++ b/src/com/itmill/toolkit/demo/features/FeatureWindow.java @@ -45,14 +45,21 @@ public class FeatureWindow extends Feature { protected Component getDemoComponent() { - OrderedLayout l = new OrderedLayout(); + OrderedLayout layoutRoot = new OrderedLayout(); + OrderedLayout layoutUpper = new OrderedLayout(); + OrderedLayout layoutLower = new OrderedLayout(); demoWindow = new Window("Feature Test Window"); - l.addComponent(addButton); - l.addComponent(removeButton); + layoutUpper.addComponent(addButton); + layoutUpper.addComponent(removeButton); + + layoutLower.addComponent(new Label( + "Note: depending on your browser, you may have to " + + "allow popups from this web site in order" + + " to get this demo to work.")); updateWinStatus(); - // Properties + // Propertiesc propertyPanel = new PropertyPanel(demoWindow); propertyPanel.dependsOn(addButton); propertyPanel.dependsOn(removeButton); @@ -65,10 +72,12 @@ public class FeatureWindow extends Feature { new Integer(Window.BORDER_MINIMAL) }, new Object[] { "Default", "None", "Minimal" }); propertyPanel.addProperties("Window Properties", windowProperties); - + setJavadocURL("ui/Window.html"); - - return l; + + layoutRoot.addComponent(layoutUpper); + layoutRoot.addComponent(layoutLower); + return layoutRoot; } protected String getExampleSrc() { @@ -95,6 +104,28 @@ public class FeatureWindow extends Feature { public void addWin() { getApplication().addWindow(demoWindow); + + demoWindow.removeAllComponents(); + demoWindow.setWidth(500); + demoWindow.setHeight(200); + + // Panel panel = new Panel("New window"); + // panel.addComponent(new Label( + // "This is a new window created by selecting Add to " + // + "application.

You can close" + // + " this window by selecting Remove from" + // + " application from the Feature Browser window.", + // Label.CONTENT_XHTML)); + // demoWindow.addComponent(panel); + + demoWindow + .addComponent(new Label( + "

This is a new window created by Add to " + + "application button's event.

You may simply" + + " close this window or select Remove from" + + " application from the Feature Browser window.", + Label.CONTENT_XHTML)); + windowProperties.getField("name").setReadOnly(true); updateWinStatus(); } diff --git a/src/com/itmill/toolkit/demo/features/IntroBasic.java b/src/com/itmill/toolkit/demo/features/IntroBasic.java index 5501a7c968..48afd990ca 100644 --- a/src/com/itmill/toolkit/demo/features/IntroBasic.java +++ b/src/com/itmill/toolkit/demo/features/IntroBasic.java @@ -29,11 +29,19 @@ package com.itmill.toolkit.demo.features; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class IntroBasic extends Feature { + private static final String INTRO_TEXT = "" + + "Text Field, Date Field, Button, Form, Label and Link components are provided as samples" + + " for basic UI components." + + "

See the API documentation of respective components for more information."; + public IntroBasic() { super(); } @@ -42,27 +50,41 @@ public class IntroBasic extends Feature { OrderedLayout l = new OrderedLayout(); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); - + Panel panel = new Panel(); + panel.setCaption("Basic UI components"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); + // Properties - propertyPanel = null; + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); setJavadocURL("ui/package-summary.html"); - + return l; } protected String getExampleSrc() { - return ""; + return null; } /** * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return ""; + return null; } protected String getImage() { diff --git a/src/com/itmill/toolkit/demo/features/IntroComponents.java b/src/com/itmill/toolkit/demo/features/IntroComponents.java index 966c5f818c..2907f46b70 100644 --- a/src/com/itmill/toolkit/demo/features/IntroComponents.java +++ b/src/com/itmill/toolkit/demo/features/IntroComponents.java @@ -28,12 +28,21 @@ package com.itmill.toolkit.demo.features; +import com.itmill.toolkit.terminal.ClassResource; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Embedded; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class IntroComponents extends Feature { + private static final String INTRO_TEXT = "" + + "This picture summarizes the relations between different user interface (UI) components." + + "

See API documentation below for more information."; + public IntroComponents() { super(); } @@ -42,35 +51,52 @@ public class IntroComponents extends Feature { OrderedLayout l = new OrderedLayout(); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); + Panel panel = new Panel(); + panel.setCaption("UI component diagram"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); + + panel.addComponent(new Embedded("", new ClassResource("components.png", + this.getApplication()))); // Properties - propertyPanel = null; - + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); + setJavadocURL("ui/package-summary.html"); - + return l; } protected String getExampleSrc() { - return ""; + return null; } /** * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return ""; + return null; } protected String getImage() { - return "components.png"; + return null; } protected String getTitle() { - return "Introduction of basic components (TODO)"; + return null; } } diff --git a/src/com/itmill/toolkit/demo/features/IntroDataHandling.java b/src/com/itmill/toolkit/demo/features/IntroDataHandling.java index 1079505bec..c2c954381f 100644 --- a/src/com/itmill/toolkit/demo/features/IntroDataHandling.java +++ b/src/com/itmill/toolkit/demo/features/IntroDataHandling.java @@ -29,11 +29,19 @@ package com.itmill.toolkit.demo.features; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class IntroDataHandling extends Feature { + private static final String INTRO_TEXT = "" + + "Embedded Objects and Upload components are provided as samples" + + " for data handling section." + + "

See the API documentation of respective components for more information."; + public IntroDataHandling() { super(); } @@ -42,25 +50,40 @@ public class IntroDataHandling extends Feature { OrderedLayout l = new OrderedLayout(); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); + Panel panel = new Panel(); + panel.setCaption("Data Handling"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); // Properties - propertyPanel = null; + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); return l; } protected String getExampleSrc() { - return ""; + return null; } /** * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return ""; + return "Please select Embedded Objects or Upload" + + " from the menu for more information."; } protected String getImage() { @@ -68,7 +91,7 @@ public class IntroDataHandling extends Feature { } protected String getTitle() { - return "Introduction for data handling (TODO)"; + return null; } } diff --git a/src/com/itmill/toolkit/demo/features/IntroDataModel.java b/src/com/itmill/toolkit/demo/features/IntroDataModel.java index 35c640da30..5a0a677d73 100644 --- a/src/com/itmill/toolkit/demo/features/IntroDataModel.java +++ b/src/com/itmill/toolkit/demo/features/IntroDataModel.java @@ -29,11 +29,20 @@ package com.itmill.toolkit.demo.features; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class IntroDataModel extends Feature { + private static final String INTRO_TEXT = "" + + "This section introduces main concepts of data model in IT Mill Toolkit." + + " It contains brief introduction to Properties, Items, Containers, Validators and" + + " Buffering classes." + + "

See the API documentation of respective area for more information."; + public IntroDataModel() { super(); } @@ -42,25 +51,41 @@ public class IntroDataModel extends Feature { OrderedLayout l = new OrderedLayout(); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); + Panel panel = new Panel(); + panel.setCaption("Data Model"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); // Properties - propertyPanel = null; + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); + + setJavadocURL("data/package-summary.html"); return l; } protected String getExampleSrc() { - return ""; + return null; } /** * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return ""; + return null; } protected String getImage() { @@ -68,7 +93,7 @@ public class IntroDataModel extends Feature { } protected String getTitle() { - return "Introduction for data model (TODO)"; + return null; } } diff --git a/src/com/itmill/toolkit/demo/features/IntroItemContainers.java b/src/com/itmill/toolkit/demo/features/IntroItemContainers.java index d7d811f0bb..1ee36bde35 100644 --- a/src/com/itmill/toolkit/demo/features/IntroItemContainers.java +++ b/src/com/itmill/toolkit/demo/features/IntroItemContainers.java @@ -29,11 +29,19 @@ package com.itmill.toolkit.demo.features; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class IntroItemContainers extends Feature { + private static final String INTRO_TEXT = "" + + "Select, Table and Tree components are provided as samples" + + " for item containers section." + + "

See the API documentation of respective components for more information."; + public IntroItemContainers() { super(); } @@ -42,25 +50,41 @@ public class IntroItemContainers extends Feature { OrderedLayout l = new OrderedLayout(); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); + Panel panel = new Panel(); + panel.setCaption("Item Containers"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); // Properties - propertyPanel = null; + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); + + setJavadocURL("data/Container.html"); return l; } protected String getExampleSrc() { - return ""; + return null; } /** * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return ""; + return null; } protected String getImage() { @@ -68,7 +92,7 @@ public class IntroItemContainers extends Feature { } protected String getTitle() { - return "Introduction for item containers (TODO)"; + return null; } } diff --git a/src/com/itmill/toolkit/demo/features/IntroLayouts.java b/src/com/itmill/toolkit/demo/features/IntroLayouts.java index 724916f3ee..d68aa720b4 100644 --- a/src/com/itmill/toolkit/demo/features/IntroLayouts.java +++ b/src/com/itmill/toolkit/demo/features/IntroLayouts.java @@ -29,11 +29,21 @@ package com.itmill.toolkit.demo.features; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class IntroLayouts extends Feature { + private static final String INTRO_TEXT = "" + + "Layouts are required to place components to specific place in the UI." + + " You can use plain Java to accomplish sophisticated component layouting." + + " Other option is to use Custom Layout and let the web page designers" + + " to take responsibility of component layouting using their own set of tools." + + "

See API documentation below for more information."; + public IntroLayouts() { super(); } @@ -42,25 +52,41 @@ public class IntroLayouts extends Feature { OrderedLayout l = new OrderedLayout(); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - l.addComponent(lab); + Panel panel = new Panel(); + panel.setCaption("Layouts"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(INTRO_TEXT); // Properties - propertyPanel = null; + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); + + setJavadocURL("ui/Layout.html"); return l; } protected String getExampleSrc() { - return ""; + return null; } /** * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return ""; + return null; } protected String getImage() { @@ -68,7 +94,7 @@ public class IntroLayouts extends Feature { } protected String getTitle() { - return "Introduction for layouts (TODO)"; + return null; } } diff --git a/src/com/itmill/toolkit/demo/features/IntroTerminal.java b/src/com/itmill/toolkit/demo/features/IntroTerminal.java index be5603d284..eb7d1f1808 100644 --- a/src/com/itmill/toolkit/demo/features/IntroTerminal.java +++ b/src/com/itmill/toolkit/demo/features/IntroTerminal.java @@ -53,7 +53,7 @@ public class IntroTerminal extends Feature { } protected String getExampleSrc() { - return ""; + return null; } /** diff --git a/src/com/itmill/toolkit/demo/features/IntroWelcome.java b/src/com/itmill/toolkit/demo/features/IntroWelcome.java index 94277e5f58..3f2fa826d8 100644 --- a/src/com/itmill/toolkit/demo/features/IntroWelcome.java +++ b/src/com/itmill/toolkit/demo/features/IntroWelcome.java @@ -28,20 +28,42 @@ package com.itmill.toolkit.demo.features; -import com.itmill.toolkit.terminal.web.ApplicationServlet; import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.Form; import com.itmill.toolkit.ui.Label; import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; public class IntroWelcome extends Feature { - private static final String WELCOME_TEXT = "" - + "In this application you may view and play with some features of IT Mill Toolkit.
" - + "Most of the features can be tested online and include simple example of their " - + "usage associated with it.

" - + "Start your tour by selecting features from the list on the left.

" - + "For more information, point your browser to: www.itmill.com"; + private static final String WELCOME_TEXT_UPPER = "" + + "This application lets you view and play with some features of " + + "IT Mill Toolkit. Use menu on the left to select component." + + "

Note the Properties selection on the top " + + "right corner. Click it open to access component properties and" + + " feel free to edit properties at any time." + + "

The area that you are now reading is the component" + + " demo area. Lower area from here contains component description, API" + + " documentation and optional code sample. Note that not all selections" + + " contain demo, only description and API documentation is shown." + + "

You may also change application's theme from below the menu." + + " This example application is designed to work best with" + + " Demo theme, other themes are for demonstration purposes only." + + "

IT Mill Toolkit enables you to construct complex Web" + + " applications using plain Java, no knowledge of other Web technologies" + + " such as XML, HTML, DOM, JavaScript or browser differences is required." + + "

For more information, point your browser to" + + " www.itmill.com."; + + private static final String WELCOME_TEXT_LOWER = "" + + "This area contains the selected component's description, API documentation" + + " and optional code sample." + + "

To see how simple it is to create IT Mill Toolkit application," + + " click Code Sample tab." + + "

Start your tour now by selecting features from the list" + + " on the left and remember to experiment with the Properties panel" + + " located at the top right corner area."; public IntroWelcome() { super(); @@ -51,30 +73,52 @@ public class IntroWelcome extends Feature { OrderedLayout l = new OrderedLayout(); - Label lab = new Label(); - lab.setStyle("featurebrowser-none"); - Label version = new Label(); - version.setValue("IT Mill Toolkit version: "+ApplicationServlet.VERSION); - l.addComponent(version); - l.addComponent(lab); + Panel panel = new Panel(); + panel.setCaption("Welcome to the IT Mill Toolkit feature tour!"); + l.addComponent(panel); + + Label label = new Label(); + panel.addComponent(label); + + label.setContentMode(Label.CONTENT_XHTML); + label.setValue(WELCOME_TEXT_UPPER); // Properties - propertyPanel = null; - + propertyPanel = new PropertyPanel(panel); + Form ap = propertyPanel.createBeanPropertySet(new String[] { "width", + "height" }); + Select themes = (Select) propertyPanel.getField("style"); + themes.addItem("light").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("light"); + themes.addItem("strong").getItemProperty( + themes.getItemCaptionPropertyId()).setValue("strong"); + propertyPanel.addProperties("Panel Properties", ap); + setJavadocURL("package-summary.html"); - + + setPropsReminder(false); + return l; } protected String getExampleSrc() { - return ""; + return "" + + "// Hello World example application\n\n" + + "package com.itmill.toolkit.demo;\n" + + "import com.itmill.toolkit.ui.*;\n" + + "public class HelloWorld extends com.itmill.toolkit.Application {\n" + + " public void init() {\n" + + " Window main = new Window(\"Hello window\");\n" + + " setMainWindow(main);\n" + + " main.addComponent(new Label(\"Hello World!\"));\n" + + " }\n" + "}\n"; } /** * @see com.itmill.toolkit.demo.features.Feature#getDescriptionXHTML() */ protected String getDescriptionXHTML() { - return WELCOME_TEXT; + return WELCOME_TEXT_LOWER; } protected String getImage() { @@ -82,7 +126,7 @@ public class IntroWelcome extends Feature { } protected String getTitle() { - return "Welcome to the IT Mill Toolkit feature tour! (TODO)"; + return null; } } diff --git a/src/com/itmill/toolkit/demo/features/buffering.jpg b/src/com/itmill/toolkit/demo/features/buffering.jpg deleted file mode 100644 index 23f1e89f29d9f23f6a643228d9f50a6883ff4ec1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11833 zcmb7qWmFtN)9zx6yE_CA4ht;qut0FvKo;4>T>>El2=4Cgu((TtySoPq7CZzJLc&e* ze&@d5&wFdmshQI~)An@rJXPIKt4})s0#zjyB>)l<5+LEv1$g=mAeVQyvGTOBX7GV~ z!Wi^mHVn!t>RL}50C@lbHVz&R76BeE9uXk{F$Fsn1sNFyKNAZryO^M)gs31`L@}tRW6F;+Z0}6n2-X)TdG08Q|k?OumDs1dSXBHHaclUsL1{bl+?_T{W zhVsua{gwaL@wW<8v_DxagnyEe|HAq^1+|9 z&YeE-aW?t2W~}x5A~3rb{BgECw`Of>a<5vr6XOl@Fl2(i&u6UstFBbS-mlTOp1&Qi zu`a#@x2KXjK~Knd>X_*}-wL6>R*#vmN_hEG^RO}hG@n@z_tUlBhQfo@AZo3PO;~}$ zlFt*s+JbuC(Xk+18E^xCT;X7-(S2MFLw)EySH+9}0_5Eczt=p>{(|@C;oz-Mk}6_e zs4Jneb!M67We5I6{uFNw_@g`hmUPz9mS_)=&L1dePB*PGW2ma`9cwqjJf5Kz@ zVZ9Qwr>^6<#0hTeObJDGO~UV!$N7i8sC&jA^i$Tzc*R*J$?9aPJnK(@^6S6@X{H~g z4{ymI+5?rp8Vf6h637{Z82)L^H`hPkEozn+HQY1)TKG{D{vnulhKD`dDPQFp3fuXU zR6(!GzgZOWr_l}JI*B5Uo$AXo%P~HuS5JV>%PGbaCGl^*Z?}978)S5$Uh1r0ig!OG zs7DNvy)q>>PV0j)Y{iwj3~|~xHP?xy9tu*zi_DPE+XbWR5o|@N-ERcmut4L9t?(}H z64L^?I?rjhEt%}+qTvb%C5;?rk_7&14PxAdrezF_V3A}? zBGRNbLW;@Jv$!bSA=TvsTKQ782eT4qDb?C#6s{oANzu3+_MW7hm@;P`*@c7B+qD2G zh?7bf^d9qt>rL#w&lutDiBig^B$slPDTI8%R!sPX_(67)>(BCoXc{?J3adCvVCVV}Nn8|WrDB3fl(p!@ zsi(SN5ha{j#F7p5XYaYE)&At3DHy)?De5^M`q>mb2m3!A;6ZIajIqdUHNXGYoz2_P z+uZWoWE!-%LHIQ%;K<{>AbWAemi>cGTp)F{(y($41=7dIoQ@;6$PA$%KvhH-CMLH; zN2<@<)=sE|J6FgVp0mAld6x97G)VK2{MHX?mF>*jqy@MwK>ItAo)qd^toh)qTeqQ$ z{YG(^cut{TnT38n_MRrkO&IP}howHVwre+EZe{wqIn~k%xl%(SK&J!YpyJUAV4|jU zUFry!&JDL(ANpSI z$O|j$HcTxnP*(4cPZ9%LYzWYNLY;3$4;qz4_s60_)rhoMj0kYIwNct^+pbmBQN%_| zl0_hN2YIvP^&NwOgBF5W%PG%Tc7Pxo*X6$Y$P(~v3wj#FY4-;>zA{}{1zIpzI`4iyp`0}7e`ActhU0|NY-YAuqbDV4{ zKH9S(D_X5f-?<-d5a-`VV%Oe|z9flR`W5lpj>nrYOPQuw*vx&R^Zxo;jRoks<6NCZ zg`!x@Wc=nAa+&R~)Yz1i8O$DzC`MU}X9n^lHmzS(XXi#&4-DLEH+_GxpY^*DCu2`&^6}ktamZAo9iM)+VADq4OKO}R&w4jM*-ORpr1TS`O^)mQy&%6! z!it_0YzxujPQUJz5Q{9tUV_%r0Ms~jY7guKqkqW~o|3)#NJ2*=G>TzhJG9s6G~Yyt z^x;>?Ze!C4Uv8fAU@ZiKxh%jr^a27b27j;qO!?@w99hJ+^6@dHmJP+4K8Q1kBB%4N z4hu@o0vDO&Y|kTI6s;lM#BR4|an_K*-lrQ9R!X+b8NQYXsTeWru z?c|=>t0Wvg+SCp^nY3@xq{t24TnWJPzP|Jedz3LOIWPFm!o}DqTHZS!>MEH?W<%mb z-XSj%r#SWTp|UMzcX|gui~4uWu{oLCo&)%>Yx*yYX3QC@Zj#whlAS9b^G|<4=1`VC ziN3iux@Goea=90^!lX=pEyd}-fd3Wp1lXmY{5+F@&+>WZhvC|8{%Oh#ZUQw!#rUTt zZj4diK({RI)GBaAeP72bTir!4;)QeT=X4$sUdl5OTbf?nSW*NGmktxDKywmpe5H;? zXq_h}Jsh0?sgbmQ(Loh+T|eftkiW_z)g?|SX`a5Zq$$BC3TZ+?Evuzu@D5va@OpBX^WRmuC7t(mJ(Gm+}n-a z<`(0~Lq3WMAxABLgZtc!374goA$iih1(VL`_x_nh92HM8j)nhJ7DXJnFu5V$N?3*A zFh-T>i#;MGe-7Gpkr6%3<41A=h5`04`P~93PEo6STGzw8#yH*MnWcTF6CjFM<}ZWpDF_Kb=gZ)iolx zXqebR?RXkpDcz5;AllF(#mjVKX1C-DcOugM_MdfHxP+rM)x&z2g8i8S(u&gpSLrg| zW{o@nFn-%H)Mv=_uGyd-StvGgWc*gU%P0heP={WfJ68luLG?( z5SH`1hstm84@EP0Db5i1P^5jNz#4GncqbY9RjkHL!up^Lvj+=9XP2I%U04Hc|o`a$&*fmaK4xA)P%Ej!Qxs%||w<@VkF=k3*jk_XI zwpBm9yNQBF8SDDSC+^sS;U3&Bs52+S^wm0CRHD^5j=5ufeOpqQ3(@9fi|lwE1J? zAb`ZYrs`0aY;|_sfOCjXsId_6nzc%odFfM@1FDHaIWRU>`%#4IjE5x-KF)1tkqQUp z>}+qQD(jvY0HEz2zIoKf&s==*oSp#JuIGbfoi#1nj6PB^`#)cNH&$#usS`>Z0-G`o zj-k%Yp{9wo(WGcmNHMLo3(J_z%gi}}M2P7)LNV)1KiPTBmSoSWe^V|5{E;koTM$PXrQ9oO^XFFHUA`|lc#oSY_enoTEA z3&;5n6!aVmOQ+sC{kvc9w>f$w4`6Y}xWF9_cNZE03fSo7Or28eyo3~aeAAHjud?}u z#EoXnv>Kh6REK`lK}&wEm^F{KZQBYZh$y0>G(bP)WVSS_cOVWPAm2D>*o%0P(cZYe zBNshnFR4?_oy397OlgKoppWo&GesGLrx zr4GG-vvlu_B7$K=(9~J^2_V0Ud<Uy{XrvZiapvz6TBjx>Rct9bUD3D(Sk*1QF7d)vUgYboBpV94Kg@52YArA%-O4vh%pR=z)H%`IXUQ9~u+EQXex>=BbSd^{CpH5J@% zkM>wqD#hhGgB2*=VkO-fT9}krO)Gj}olo!2`myr(1kd+2HOGkoY!|D@u|-Ea%Ik6E2`P*C!%P9F`=AQL_{}nSo5KCeuLF(JG{@) z6-U!1a(sV_lVuwvxBAL?A_90P+Yy6uB0%8jRxdZSSA!p|kBCf>#twf2Ow0^RQ&ZJ6Lv z@s-N-mM`MXBkMt-Z}wMZf+s+QG;-&E_*J09#18N3bC{$cMA|ewsso*toxoyN6gMC>^lOZ zM~UiZMZEIWD&-ba!|WJ4DuCkj2f{)qsL!e}_yvx;!iuTcO6PCYORt$l_xUG4)VKK^ z28uv>6bGFRY0{aVbdHmvFBZ>PaovNErvouvl6#6J}s*&c&AwnstH(xAL?l^$-tZPnlDKiwi0Mw>C!_ z5)(5^muR_b@X+vzNOKI#&jaF!nyKWlqAr0IN4V#>YBvWwrr#r$xSYdTp*X~MdDi)A zDyCaOqj&Ff(3Xe+J)WwzIOz3h+-)!uGyk5Vt!-%Bd)wVj3_yUPAuR?~LZJOJmEW`K ztjeA(k~$NbCCHp-I8!9Up=fyU^w5WXmb+IT9l)Ayy$_s1mcH??)kWVIOgLck%FFoG zobhz#Ih)`yv~ja8D|Pcs;6MvXJ}*}~RL0VxaoAyxq@3S>Z_MM@5Lt}=E&H8x%~jLd zC28;4d6J2~RT{ZV<1cHr$m8AnAuV>9?yS798{kg=)B6b^m@bMPxb(qcvEdOPY0wQy z939hh4zr|;Ahmu1=qb^^-{I@^21AULC4&Eev9#r9lX$3oHEGLoRNp_vATfX&upCMk zc5OV$17)OdJr9(9EfqT-beuoA4(YIKqaFA~Fl2?qMoP$oKv7-!g-c!Rz^^Z?Ye^{U z*q&T~K4l# z>0lChew5#z$s{3T^@0Y<} zPd2Qsad25%+1V~)GY)NN`!RnaUd^8s6NU!xY`DBLyC6ujbqGU%4AtJF^SL5-)Zjqz z=%ZiEbna&a7^;}LM-Q|@I>VxH88_GhW0#x~YlYtV*F0oJ&v|^0#EwO&G(?}hrSME%-$*j083 z@6nVBb6SGK@6x55YuLv`aGdV@I&j*2<*(z!3+jIrx|-IEvOIqK;qNRl|9)6}6cAHp zd;w|^Ypf1bZ;Dw%^6Ur~&$Z*>rBsJlnCUPHyuL2#n@P#0j4(lLicKQ%;Q> zws)tVZC=^h%rKU+`YaeGFn-Tp>p^oKw-c8VCg214 zkt&~G`ROp^B_4fPio!j*uo^dmK@VYcCb5_Z|CC3Z{Hy7A_IvFS&NQ8Z%G@_|4s>fh zI9ZU@c?+4ZMvrQQc${b;xreshDI_U|p2HGex@!!(Q4>fH)=J6p+Vw}~P{Kk5WroZ8 zSQ_5(j)KoV>+gld^0-bEczoI*+>5(VYtG@;y4ZV^cPQ$q{_i7B$gLFZ(A^h`CT>IU zEJtKsLM05Xxx1OD;L|RN%_3!2i(pFA7MtH>H9bw~W!PvA_AXw?RnQtC^`mZbL+0z5 zZk$w4_qGAAOk%aTbuXp;65Ii0>R9yl_U{F>QMk@V8`sZ~^9A{?zf{Nd0Uyn3k1SNf zMQ6O)*9>Jt1~q@vXfQa~8#QrCa`L)$xd|5`hOA2aRhcpXd$YUBNu_#iP+!AVeBRR@ z-M?N^dg@i3Bi+lSZ~rV@A60TDJ|d)6nGZiUHK41d7oVuncVumUFI`Ai=F?!YDQE6` zmfqECvzyM7dG#>^F|&ebxf#iLlOHQAYM+Z>j}ZAWekPqJar@hpI+nGdf@=S%V||_k z^RS-3KtqwtK+Qk9tKK1Jc|)!A^9t1~duMJj#q?Mbk?lTlDmuc)_v-F_Mw zg)>uJTE&Op@i8%Jh?%CshR?lfBPQ%9Ef8n_TsF$9uIRc+(X)xM(2KAGwQJK4Sv^?a zMet27Z~nZQExDVzJz^3AAZU+%Fs|>APA4}6jr;s8t~AfUjGK{|;U*hZ41|$3U<>q9 z?D|y4>lo<8oE>e4F3a*>wjRe_-j&nm?zj1 z7HCG}qE3~Xq4`p1KWYbLi>hza%;IoQ`@W|L<5`}OgdQu{U70m`4c|5_7)&>YW_i59 zkHY<4M8&n-op3pbyf2^B0PGB`fb&aqYt3Zj*@v*E1+~2bZRz|N6M@-{S9ose%PPrf zoZ_b*tg(#&`O%w;Pm6r8OtuB|-J8>0>;dg?NXAC?PP$#~*mI*$ClMQRV((H4C~5*S z5BTRfHg4EPfT z7vT#-%7hU}xhYZzdu7n0FyvW4e9jVpio?s==hfAN>y+u-nw=ZOpG)3ck8VS0VrX?v zYao#KG0mBcn3dIHUcQ0^u*!VgW{GXSvMgIvs z{hLK)pJd_(2!9Wk7j&QgPk3ERYi4bS?W6YxSiV~P6M*9n;VF_Ps`m|J9}0Ek-a4E~ zFuU~X@FECU{&E09(sKh4sVv^gP||3WO0IVb3#&jPYY%>}s$nRuwv`|GeV z(>wu6?;mU#q_ueOb2>IX{2^a$;T|F=ugyiukZMQxY*@AuR+rNZdBrmc98j5i9!&p? z{&bhaNsc-xLn#fb$_=rMvq8M|un4D2=NcSkcY6*A#w_;jMw5ShI4F;`OO&NqS28}! zPAHa#`?xl?!VOgIua<+Nm?W&Ah8jbA2llH9q4@y-#_K<)&46Xr%%J`(Bp91uI@@(N z@U4n*8{{4lOrbItylD(N_11hSPqMi7$j#i+=E_p`_MF%XdsNt^T=}HJa`x2)}}P7*=IM* zoBWn|#Omxu4m)?HXkc)Uc@TW$RvQ(T7Dk-&QlpapN1dW|BKKOfvcj6IZheNf$p*VM zW*0S_$!f~jocQM1tsWlqIWyrHsY--F@Hzv><~T$Agf47Ge4! z14%~_g= z(FpL;9k2<>3`KkJqK$nhbM^7!*=NMtWOx<*3NG_`J^&}e6GMgnr_mUN+Q(}Bnj_hKI!g-!v%D~i8(i`U*&CF zorut?6%esIapt7HMaF_z!kd01iq=9Or0iL?NK_!rvHg{eO+NNc39)h z*%nx->oo=ghxt8FJ+d3s7A?F9nXd-6=+G*Tq>}6^Pr_1i@YglT{!S&>a)QJRb3P?|O-dQ7dJ&*E(AW%YPQnYD z0};Wj2XZ>pN$JgSg)sI;#!>QR`@}7wUScWDNwK@h;k!4YYi4r>RfB1e-}_Alp@p_w zglVgEss!T@s%l=v+>$$--bBwVm8@QAG*`y)%mRG+C3T*Gk0cs>T0hM8JC=+d#ow)H z)x@zjEGz8=!?}TuMJ(`ieBv+N+xs7jIw>}&BmHrc3z=-7_OcApz5%Haqy~a>r6_0A zRa(*uIIvRZ?z6}eswrW?Sy^XAH_f8P`1kFL(Wv<)O>{5v6Ix)1!T}Ldj}E{C@`*(& z5`c|b#)}$*VE9qi2tgCABH=V&B!Z44HPkiAk`ydA$IAJxD!;xnR9eRM*7DHz%T=hv zCB1jbaHB7R!tk5ax@;3o2yvrvqKRbxtVmDds+}yvUt3n2yh|>_nRE$_wsIH z&q_e|*Nq1I%!f|%QwN=N|tPUu0HP*Oec3ze&1-NLQ`b3W5+6~mz{xWja4Q`@+ z)u$=3o=UkER@%-63B_v;Wv3rzLoG1R1;{@%wwY@|EN%U{hY)n^0lCQ&vUoSjdlq&8 z{;l!l&hHhC7#YBxBA#tm=7d%QVXlZAU?L z5eh#rQXfg)JhjfXNMsJrOd~uAvr{$&>8mzgQ)f^kjGK@~J-W$_%K3E)GLc5mtTvNy z90+lCY%Iej#89t@TF0w zWqQ2t!)K&~JMgPhhL#PwsIqP_5iENS|JEJNUOBiEV`5z%36Acmciti^nj{(Jy_-Y3 z&02ksjWLni@4aDyKcr}JBy1*_o!4%Y`>6j7frg~%c(Q>pqDOL8~4Qdl2M}S}?UPyt02+?xm=DH+-QQR{NH4~UGXY=xk zu#eJL8qehv&;?WlU9QR_`njC_)H9a;yZ5E@pk{jqFGk}F59-pj>ovj2B!S+AJ`27x za9Vvf`II^HGd>w9P;<<1t8y1RRkac|Z;dQ_>nvqh5dB^$zInv{06Q&7L7T zxN$T2dFlgO#{j2#8+5dak-0a>Y#v{lRM(8|W#(#Sacj4kW!5W zVUCPV=;*xIj@YCO-Gxsf_q_6vg4oHacN)?ZIEq#?yzgf)o8J?@(Gtwfb8yTw0+ETb zItaF>VSR|`mf#bkTYe?}sh9K0F}Cn}L^j>;N4B2jUWo_uYIAJr89cKU<3lO=5W{FM z(D2X;uXqad!Xrxz}L9qy+Rq)u+O3|X_)T|b=mA|;YV3#X=c6k&RL+q8lcNE?c}SLYE66<)eFcg}uP zm$LX=>9l!Q2$*A1c%a2>BxD@j^R2$_tAKejr9Hs%c*UWIY!L)wwX6AV&D-R85qFG& z_`#}pr8eHAnb{>t&i3s6!&%vAi8Kso8)D)djEjT-AXP51K|ec0z>q>6>}?RB^W*he z6*N;>ru<-38IO>10b=lT4TWSW$bX1WTRDVIiRnK9NRR*Rmqhg5HiO;Tb1;el zsDJ)RmXbGe_YyXvKK9$U!%A(D!@S*$=zmN%&mr63OVziCEk%+|;GY;DY(*&Oh8@m# zqb&X+oSn+H2djC%Ebh5S+c&fDG)rqM|E~ldsK7nT4680%{#slSg`3j?Heg8YXoKoN zv`1mZRtES-AvDUE&Vq6iR{AD;$;|ACzXo=Ni={b5jOvG?vXNAaVdKAg*ikbn$VXgh zuy2`~7{Xl8{?HucBe8Ta>35oEJ4Hrf?dtn0&!EUdLVpQQ^%27rUHm-}jDeh?48Y}O zAkE2u2f|ohh^gQENe%`sMH{?gae=QXr<~Mgu@k~Pl;tu9ezuyB{XWkh5~so`*bWLv z^8fjaZqFSBPD)vS7J_3k*3=yZK$Ca92UuN%eECBqkW%{%KJ+aL-(htd=!)2`5Fh9( zzUW8x@*CfhSS*GG^Ywc*7Bl4%Z)k|d^;V!T#rcggcA=67(Q>|sZ4L2SGF=CvlktIQ zd-XaYt@x@0c2*9M32!qk1Et3nZ9;G}xuYiY%U9+MsNr5r)}=TxQo}7<7*Sg&T;Rix zLfW%gi?LjlnQB4foEq?Aq*^@RDgRLX@EFKf>f@7%tmXy;GFNB4i)v=HibDY$zJ0DZ zFNXNtlu8C}YPE#QteE`Iu?JpBOQgBP$vU}zJP}>`#M9Y_Ds~Dv6y--wefD~PzxBA0 zFg4-{pvL7^aauWxRLAo*jR~5V)N(VHi|`7YPvh!TBM(in8rZ@Z^|L6%Wk%`l@0 zM;sF9fRT>}mBGtTfGXA{E9-Of(~i=jI9|oIBIj)0cZ%P@7~3S!s?t*J5_g zu`0HFCPs3u;}zb5U@|{fr&K(if3VG8c67Py5M{Z8g-r#5~aAJ*x6N< zLuXOc!I=+BqMaKHbruMt8Keb9gby20n61O5TB@@EUg3b9*9CZB3|^!IU~a@B=c<6# zY@5ekZprKf$@@yWOzL$@xppJwH~OBxk+F@UU@LI`GyW^KC27T z@FHArO0^2(|K#oP8|zSwd7g~FRf42spy$WBA_1=+GXG8%Zo!guEI4R*SbS&Q_sWlI zBprP63CUu0P#13$oKCd_a+0@9qoiKfM(c0+Y7z2pjfff^{GN;FW8~JL*7DDRQ+ioS zVf)IBH07>{6Ha|$fU?G=tu)_jq0DV?RFctvP7x)7q8Um})8alJPHr?Z+7DR`_VZ<3 zk?G<)LKl;R92Y<%BvdURz)^9c2&g%8Qrh5I=|MDB$G)#aF#>%{o!Z{YCX~-^?wbNB zjdcdN_>#ZY=PcHMhhn^6A=WF-hJX!fLffTMypuanRWW(AyZ%X!$iMqbYNeHpx1m6g zgYdQTE_Eo>BfLpGc4KDe-C#@X5Liap_ddjnT;=S7iF18HojOi6;&c6>M3Uc2AxAe; zb#U^BD)SU~{&EptT6RZ0(w-ot-zG-S!9FUi2I1}e8*ve3aZ( z>N(*myU5v`xpc96-7rjgR@?f|RZT@*%|5m&D5KA>zE^r!$1A1V0&Y$tTE261$=Nuy zbj__9GUuimqY}3+#-)A_3HGbExWT=Z^>*}MKQS^-&u5XRRLi*o&|%BM*pd>wMl$#W zdMsZTsZkw=WKuM=B~kECXCkZ^lAX~rWEuL|-|egVMxxfnWHc_guWBdW-MuToD<{$& z z;#TSi8R~q#*+Y@C$NobB94W>NVo*3dowNBj_Iv|DWQK`>?sptKHxI*9$S| zim$%%FXa8J(DBw#GBqtp#}g@x_rqi}HXOFZNLSyy4B5i`r;44W;6<5(Yc3J!dY@N~ zR>jf5be6%LPk{eh0?27#^k|H+QlPB@t~*7n0_d2!;cR*Mh~7!`R}pN4dDa!7t)#P9 zdZTQcP@>7HjLiVhCBCiFaIjI_kPic zgf0yR?5MUXnUNxIQF7x3?a#)`f8P+^Ep~MAh$(4Cu>@$?K&_!KU!c|8h}EwAuYq8n z$c(e{LiPcaocOB(NToa!co6YksqqQ^ts}99qp^1uXVh8w39gu>qI4q2Q j;RnXGUQ35}xY&mH81LT|qE#{{p(d#?sQf?Qp4R>kf!Gq~ diff --git a/src/com/itmill/toolkit/demo/features/containers.jpg b/src/com/itmill/toolkit/demo/features/containers.jpg deleted file mode 100644 index 863e1342b137a5412de4177c3781a23e49578316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12327 zcmb8UXIPU<)Gi!40jW}?*8rhP@4Y4%APK#LL?<%?zvgG*#J;Obs#zbJUl#r-t7mt`3qpw z^g%iJp`17a(0(qQ#x5vMT?owRW*MLfASEUyAtoXvAt3<*Ny+ZeQQRRXzr#d(mx_*! znS-5;nU$53SCpTVTbPHHRX`Rjd|zBjN{WMDURh2;NmNow;vWz^AP{(m{LVcJihB}V ztXvZR&*kPFfQA%s1o%sU#|^-z!6Tr-yBPqm0sweK|CsTA3JE>|ArUbifb_Q4k{WGM3lj)a~^N+Y#*a*J0I;pkgG zrRf)rEokTi@kz^Qn>=*dWR&%fDEy&ioL1D>e|(G0j0eCc_}_{F_=I=_L;&L3K1mt? z{;gs{LLz)(g8ydrk761waoW4;a3VSh1UHYQgLmBzVvXl1`Mtc8$2UuWI|R3gGz2sN zRe+e|MQ03c>a?CqQJ%maVb03gnTcz2hSy(M5-#l0*QIBQ^g8QTb}{&Cle^VKsUW)1 z!P*Aw!QKOkkxsNdzzDUX1ESfG>KV1f&ayIUzPx?*(eOt3%_gq1M+#O zQ;R&KFw`XU>=TPOl`PAC#S!iygeUPI3Eh7r4u)2A*0U4OOn%Kr&291j7Faj23x&Uy zGb;icZHa0uAxHEenm|slQyED4S*jq&(~~}v&bPg?Cu>5y>0S;_1KSUFsS*&RDBCxr zaAS(Tl2SQ+e=mE6k2>esp$UrkyzVpF?7|%le0o=G1TkW|4CC(mc$ICe_Ei=>UuMMS zz2pTp<*d?rbE)C_mf<0N_$8xcZm!k$^3yw^t?43pJE-0u{`dgZty1FoEvMy_1Vy8o zt(w>0PK`4kwigLgkilN2hu(EP&T^alaT3sq*;xrVD&eepi@QhZQ`yjee||d*l)ZxW z#MNw7v(*i#U(Nhe&2MDujys9<@B>LSp+{sYhxzMk92_qmb3f(Hp2l6@nKL>=inlap zOlnhh^{qCTZD)Y?3PZJ@(ucek)*sWk#Qha4Kp2bo9o5j$R5cd-#4491Nt>HoF2L@U=%ZtzG}M<9gz{{tu=RcB#u_D$j+)djekSgXAECe9Ex>%541`%-gZ^2$!*!X zip`oGn^0OER%5f1ZgFD&!;#DU=f_@|9I<-;4^BL|#>&bp=oTg57DYzRbS6-5SS(d@ z(2@|JsLSbWE~P1&nogFPq=##$xm^+s2MQN0UqTCI?m_dL4Ylp92Xz_?*%E_keM)k` z$2WktJm(MBT+{rF!a>cv4MJfd%i)HA-BiyFJ=@h$c zQcKgt%9z=HSKe_=Ei(}V>=Y?}tYk)^Ht%bpMOan$HQm0t1%Sd3&uCW<4vz(DOBiQ- z=Mi<1G2T;OdQ!a~3)4pBuB#(#gC)@qWZ>LxFQX#x7W7yq8pGL@DF-1*Ft zb@SZR-z_Pg!sCv>NW-{SMo-VTV1idEv4VRC8U6(Mq;$l3zopLMQ_LggnU_)_4Eb7o{nwEZtL<{;{?K>t)VrAz&1 z`L$d0C@ysfukBp1YFEz^U+Wk4JKg;@&1Il+3?tj%#@peNDpx_Ppp+5-9MY!v5{XF$+vzI0bBB`%3qvwfi zrNp9Iq5a3Xl6PyPMaXQbtxV$>7*~--+a6MxEZ#!U7BJt&MC_L%Eq_tKPC#-{Jb1>d zs-^dL^LS?@wQ;Oq+jqdUakbpqeK;Z-f6IzF-Yzn*=m*^w;`t`8wX6@V&nK-%ecN+^ z^izQ9VQ}K|72DUxD1Q< z?b6@zR6&!7HwU5D#$Du8M3*zWud&EOhw%9tVjLb018MXn>WOlthNo14MCfZ^t{OTa zakxxr?M-&UIQXbcCOgZg5kL`T0Ul%Z_B*A(iNIk#H*tr`AdHA71)_+yqR4-d#PT^s zqcpn&lOEKVQ?S3N%2nmknwP7E8_UbZ)!bIjureC=3ztcxpb6P3i@mH$JD;UBFch}* zXBk!{aWHVKv&EA)+SxMHUc-MoWQ|#*o_cM}%PH_DY@{mYAoejeW@^dW!*Z-O{8Hqo zT#{}HrKzvxqvHkS$&+a~M;vB6%3&_`?$>~L-T(?I+KU_{S)pVx!3GiMql{;sXGV}J z3(rY9*Q9Fln3TLviht%^1V3E8uF*1?UgUnF$dvOZ_vs1wH|f13Y31Y5W*hE0uOJ@3d}edskSuHvitz#Ux| zug`P6QA>#0-|BVqiG$7$_otL;Y<(fZXDcB>wY8e-zBcg>Nn8Me}o z|IoKNE;)y40a-VoC%FiH@z|J|C;BebVyN#d9P+N4NY~Uy*R2Yw;pq%=Uppb#`~@*; z@k`jq@8*!sU1p!gVpE`W0&z^>5L1jByBieFoDUtz->)FzEJX;*8Hr`>r`8qpX(!Qi zcvqOSAQLt_pFMKSMf2n?cm8nqpE)p`KE9_95oVfwBC2oc$@QFjs~s6Uuz3R@trC8* zbzfgIK7nO@*78GZH;Xct(Qe~jGiMHsfkx${1_tMu<_g$;tc8b&4RF(Nm#9{q`H*w1 z4Lj*gzVpG+?x53f@9Xs$Jcs;uT3Afpny^RI;3VWOeND?~AT~N?`&sD*2Vnr5fy~4YM3pGc=u< z>}&kC;L3?`-B2^CoABg4#4jRlpztF|G}xf{G9M{aLLPVI-GFp{as=c!S^t~qN=#ijwyAY=&oLBdxQh6^-sctZ zzCY;~<>V>&P5t}N*9j7NYvYa{ISW0~0L#nr&w%q3^^C|Y_pq|U2fCPsz-*DO#gVp6 zXPdkR?vFCEC)#kn$%@U6Pd~jUJAIlr?HsQd`a>LRwYvEUyWUo zsw`PX#W56p~%wWCH6nP)wuG7D_r?H&60Yy-jgZSplsGke-`dNp# z!K7st@5o#D?4~Xnn1t0aN>eEbzunUo{&3fk^WuRSi{7+6v)$v%u`PkxF)xpUJ%fjtDObL0Opcwl}fB5Lxe1iW$*JDBNjZ&esO(6b?NSSFU)ByRU6mEmjs`}VB zw6T=m`J$s?@ix#B)!L$-VN{5N!Xzz+ujlx zEVh2i)9vi2AR&8!$sy+k5HWwngR;PQq*rBHtGD$`wVpH2qUJ+Mz1T`^>0-qlwaGM7 zStU%jpe2%`2r}Bpx*foR>5U*r@mNo!u7`b}IQy^(}yjVY%$-SjwM+ zLWch~dy6crFw#B$L-<8d9TO1VR9QJ9bI6@&Zuc?gRQu72(rg-AGYk>;5E(t1q*Jg| zJa%;hz!frg=Ul))A2EK)+(By$%dEr7dGlDFPoYmdq%($&lSnP%>9u4ia?Q7Az}ax$ zK#f=La*=dDn(ozMH37Sp@2B_KOl-1v3;MOGNl=O2d3X!}fOd4HSqjc--&+-<`mT_b zeB2_KQmQ)eK;XQpr#njq0#-m zhtKR3|J9ELi2U@?{Tr`Qxj4_Nws{=!z6~3Pd*z;${8cMy)yX7{d7Fa$l~4K#HjcOn zRNViz<&wDEE%LN~>3u@7L8K`_yS%RYyX zmGPr4aI~}yS&wS>ZUFkBE;Np*RN6*cUuW$aRQf1Pc-fStxHTDT4=S*~WpJc}7HwV9 zKKS3gs#(f`Idr_{_LCN=S6C%F4XDYO!g6AHf`O2DG4FeSH;pL>IRp31065hF>OF_a zeMXrJUTiH)TSZgWFEQlKBksDbm!x7{eeYV`8PccX5ih7V6lO7S45z3m@6iU)yd~Nx zCMRl0SEE>MJY+|1QgZ2|h+qrg5|U%>0k#v`FfVUH8EJ#J5P-_TuSxN z*X{iZo{)}x>bDSUOt%40Dp*E-0ZGy-Xj6N=I$21hN=+K+-^+J3_~BV)1>K8H`N{mgl6ktu50gY_&bFWWU5kw~7a8@cn%{ z3r~c;`h8@AI3J`-pT(?#h(HYAP=r zUMNvxsc|wj(v2J;o4s5N(~#47_{O|3ktnEM!^2&;;*WL^f6n^(yr?{gU@CMg&P|{~ zAyL45Js(E7%YRt1X13!x?Mrq8I3`&~@IHId3IPxitQ2$nm?2@O)Owo6u4%xxKkfJE z{W4_K=hDLIRmLZI!uaHimZ}tFq0kj>_y&+9^$Ue-d*I_S0tZ34{=BKSs5A9GI!+_} z{dMhh#<_f!8|(G<2)~v{gb%1upY}o*(z@aK%lM#8+I4Q zcE`rw^a#g#)ouWvO|D0qSjGELh$^L4XV_Eq1Zj{tC8r!?Dc}0G8@>xX8#K0V)p_?BN}dCx4x415GuvV$cGN z42Tx5bz29@a)i<3XP+X zZ~3%}Jn+fRAo>PC=$mFqTU16KPPuJtKJBJiMU)TWzh9rKJDKPE00i_5e<_PKG^+3u zl0=*7;aqZ}QI;(qQOqpN&_}N+BNAygp9w6`EuF6-#pP58K+kOTUmfOYU`h(V;Wp|v zfij!`&)~-o3Xa{&QBVWp_#XsbxF7e|wY-a@b{g|{cibcVQC(dopqK+4?hGz{rd(Km ztbC|WVZKPFX>ltpA`Kgs(mK_d15C8@o|qK*5CTl@pZFYQ$Ai_VbocCwVG%HPpe=pp zBJ|;4J(%MoM|ylHt(dP>;!A%~9q)9MV*0~X)2ZM%>q{iR{NHv7^;QwS)xDQ;{~j0w z*mY3TBu&WTi-T(r{QbY_Rdr?=P6f+n_c^K1{E6epkh9&F#%EOim=XcdbpUF9+57=a zYil8PZqX9|8aq~Om|gJD)+q3`;krgwf9P^KgcaRkqcHteYpIL)egZ#EZ&PVXZsAWk z8A-0PYJG+WqVBTP&V(!Y?i~FgourdCJ9Y_zz=|4~lKgFw*oS84ik&hL-2j~W(4UR< z0=>z6SFX7R_I&K?l&;_T*Q$&_tr!Nog;{geHA{YV_yGUbrkop>(7Wp>pQ_NvE1X9d zNJc>4L~?;e!lMzURZ67|N%rNmyWbAS>3iZGg`@Fjj`&P`QoGLeW+uGLsvx^Nz`ET|-(;C*C+*}`E(BVjq=-R`cCVzNuMh${cSe0vQ;g+FC+(;uQW zs{DmyzQfS><#nj_H|Q-OL|{hVM@`PwZ7wGWsZGn*8K|$`yA9Nq&Y)MtDNi!iT&=Np z)4rI=ortsV{^aE|oz)ED?tQ?!aLWyq{C9@c;jO5;6>@Fqzm&)%?GE30>1mqzo$qDV zzcKqjP%s5)11+Vr+W4kBV4MafZOU|uzzEUA+HJGym&5oMt;!Rk`M6Ap)BseW_Q&)b zlmj;a*9GOF>;|{DN$W_lfl@~8vZMJc>K5Bh()w7b<(HIR-7V$bUSA~;CdphKzYWl~ z;l6P%OLJaGis&5}?aWU;wAQCm=}B`>RtLOZE-$}09N%;mc*S-MuZlNhY&n<+de~@CW%Xv_jqhAGm4-z(y9Uc}XuPGu$neGKE=hNuTG;oCcSD@7b4sj24}<|4^Ip>4W>m{TO(pu z$kdzAg|vpeMNuzbY5xJ2P%nz{Ek#-fn7p|gB}6~)gq{kNl3b;41`s6MZeyfPr+4y6 zR6rESvKSv~epz+veXIKIOI^@)hS~IVbo!V%g&5Z z+6uP@ydf@n|4^y3^wbkBP8`nOViG{+bi#WoeNX4p{WTt{zM^7^a!j$uUH5W+8nMX-6{c(-|qgDV*Xq>*ZosP8?T7XQ7&L=GyYaUzi~6==a7`+4a88V>Q}V z6sZHLc|lrff7D@Z4fo=->%(<525D1?RND{*WSEYUmZyZDWMsNT${y`Ll*{e1G?o6w z>Pj9|tJ*O$22_tsEIsb~y!^6;5dbb%N})!c z5HYfG2z*|272f=Zm7@bMHPSud>L)_krE(th@3KzCE&LbHV4U~H%MaC({@f*(DaTAe z)DJp3k2m<&QmR9564|YPmBJiZghD|=-WvNrgFH&U(krgKS3YbIE||lprJiEUxb|%- z9?ey>b*}(XI-(K(sX~20pzXN%cNQkiu+Qdn zTQf^WBtb^We#pkkiE7x964v!=Ch=^A1zoV^DM+U!CWP4|H>y?mK_4G0&8^;?VbpazgdIz+IQmz{3xn?c7nA?4;Z zi#9TN+<++%EW`54{|w=~`f!Rk8#0~rcQ8R-38n**Yr#RddWx!H`~UK zeDS1`xzF$Gq4mbFMUmv;RAh0PGk>{HM!EF8QBWTLv9GRf67C}KECUM%?v?2(A7{CA z7g)xRQVV9@`Ed7>?sg>K#$%Is2jDFONkh;-ITu$mgdj{NQLm6|A9tIOwtE?`Z|G3) z<&JI14S>jq_P)QTQUh`S(+q*FmLRSy&rP)l`1%u04r$cW9&~hIE~jO9=J&$vg`l4k zq96s|XY`W&5nIb;#d@XQ#A|r{52QNvnRb~qGLO@ScEZxr&!^XbbV)f)tJdJ1x)n^V z--9XLszzpn9%KUDT>$o5cmz9@yf`@O#ZEbDsH5~g7BC6UeTL>x1L4epn;0SyK!x;l z4V&P+sbOt2o#-t6sM$-c7v;kdmZ(Gg@p?HAw72>38e! z%9nQvhSvJbo35lQowGL6Q;zYpgACo;%odj1~U-vA_Z zkE-JW{|y$F)#n~3P_b{0kADY*&}u|QknuiF{k&?Y&>`|$pW4zE2*M zf*X%}sT^?XaG9o=Jmr$^5T?{r`h1o_IN@}LE|;)$gk9YM4@W|BK)%{JT5Ff4JK~S3 zz~JC!w{*jEUVk=$j#D?86KL$4(tc*Yr{&*P#QHiZUra$5YphYsQ;SlyV1C2vQ?uvo z9THQtu*g8Rkc#@pMBawgt!a6uZqF7WU*=jVCX|`KrG@uV^6rpCBoqt6wX17FgFV24 zZZX#ByeWAjIp)TM3t;xdpy?-F(0sVQ2px0@TT-%J65qv_NSb_N7FmJFh0D1{=fg&qsg`V8S%r8Mc#(+qA^&lDR5= z@TAp`Yg1#CH)tvq{?U0)3~4{W%3`{!6Dol}BLV6YRf+w^`A0}TMv@}eDMr4H7W>Ah zT7BEBTgn0I?sMU@V%xd3fdigwe;SlG|H!}$glYi0P*y`NvJ&H}y?)1uWMY58o69!# zcUtzV+4wrb+L7#fRZVp%$eGcs5f#>9f?z>P6;BXJ*~}h2y7IBHaz2ojg~uu)IJ1`A z*CM)-pCIn*#@HuZQW#wZ-7rFu_aJ|@z57XD23s%BeFzbZ+7R>QIJ|4~!U>45z%!6Y zN3FYEM-^0Vl@CKu;;uNdPJX151B&`_Av^e|30ROVveB$&-e#b_si}1z0Bjh`@%KTO zKym1vNPAa1hvnx(t!570h2@jj#C-jz%{tQH14Rfr?Yb*WBKSx@bd;W+7oc4MC zn%B1ew<*rH1bItHlm2C1#UvPTdA|$aLC|7+y*jQN8L}FyA0A+|Z?{SKw$2S8DzM>^ zDHamB=Nbu#sh>p)5Mqh=LdA1kBVi|7J_u6Db7F+ zhs5jX{x))GlD*U;aw0GSHl;mC$dhbkhGOzMbMD)E1Hy)sv&>dneCg!2K*aK%t|vae znuMh}T^^gt~vb?Rw-Hi%{Ak}qmm zPvX1Q;S9$&zUn6PGUtob->Ne>5i|yz1UfB+4Her#qrNt5oS7CVT{VMt)S0m}P6_o> zDQ(QNhfJ}JLzD-RtyhgsWhkVkWLsxMSb_gO{TutgMnuD$c)mlelu~P?<4=B%cg$z4 z9#nVzO}48}o^1N#`o*2+cG+bZ?s`X?=q|Bwcs9RA+hN};8_!L+9ypy&DnGL=va_#B zcYrg7`1(wCICA)3rzP0=%6lrRrFgg+Bb1*RA@OB<9sTXrbwVR$7wN(#H?JE^)jjxw z>oa#o9mk2jzmY52Pi@vy=1HSxd$b)|Zl1Ms-oXGNq>ZBJ$%l#fb%{ZxT+zah@0P)m z?gsCE6R}1_me+S(P8O8-XjJz{yhNJk!Yv*Z-2nP}ysIKce@ic)8n)N9=69C7*N2v6 ze97wE0b!UMz7H`}=PDOoH%+?zdn?apkguM%@42v2?Q9qQH=&?+x_(fy=$NWjv*|vp zBN5FF30C|P;nzAzoV-$!k`7Z^O3C}8h!fisrJG{^k&`u@gV;Au`S>vyN08Nkd19a5T+!DY zf#`Vd7W{$UTTmhSMKNSFjK?U1!ilwG85yTZ8TBAzS<_X9R{&74JmaR4igaJA@+qX- z`h}7TEgvjw4bqnRLN2Q@{jkS>5X1Gr!(9vFa>9_}J)u5hG`L}z`X@k8z#q+fBx6!z z^*W7rgZYTEk^?30t0PE;2448D>>GRK4CgBdF9(22Q6PRb;?3Y=Go^#m-Wtx|vRg1- zcRwYn6c4(CuLu@|Ay!b{R10L<2H~4sM9f^WK|Irp)J$)QZnnOa44{Jb>y>FuObMC6 z)F`<;)~BqZh^DkQZl(4QE|3?uEtr_3#wZ=R)a1MbW?i-cvh`IpT}B1OPPwL-Z|cE; zCe!Z@%M6m8_-zT1i&9PHsS;)U(AnP4sM^`VKVWyOj2^1XI3xV!Rx^B`PV6CpjoWi9 z6SGcMTnCJ+p{H@)N$4sMr$LGPUQuvLUA`}pV?;S9yA63i8$jccjTWqb$R3HPYw&N@ zWtKT5@`(QkoVwpS+!fV*DfdmwU%c*Ew6@?<|J_TbvG3pW9^;|xk9+4vO_(18Eo5L_ z5WLU$>Wa_c6aHpSru(80ful6B##_o#SzIEp{(YMXk^Wrn(qi4__cxq7(TD}BJE$HG zL7e5lLh?KRye5#=Gm-MTCQ9+V>3JV-pB!X59R&H}MY9^i%#;mwIbggo$;Nwu&4095 zvusY6&YYHo-!9EG-S3=lHb##hc0Sc0SJ)C-9EQWmqVG}{$Ce49Yw3yT2_nVIPcwCd z|J_d`0^=QC7rkR4%xy*De@>G3bL#u+v|b>vyARGkonXFj8CZ#LJm%3cwIGX1Uz;D1 ztX|zQjYicjfZuH?laOjg?oDmIwIoIf9PvX3pU9T+Y|_#u{i)+v>#!gV?A&{$Vfhx+ z$ZG-CF9Ik;I-9h3zEO(B81m*< z>V!J>oM46C(`2Ya(uE^#0Bm-lTA2Of3gAfgtOp}&U&h2IV#`=Nny1D!uKbHuN59m+-oW#=kg401s9-3n?whwNia;P6d!bNdl%`SFCxP$= z55qcASqUNO7BLijXX3Fh3$Xq;H5g}7sKlwuag{2GN+UA+L}ns95Rhor#lq*;w7U?mcUI79LuW~pumIkL^2pD z2~XP7Qs+uH&$#=h3he#}M(m9=d6Dj}UT@neYUOe@vl#6?>KeLs`ToQ1{)5HZ5ohrc zp9%yMIaB?Q_JGq_>77>DUYMnaKI~&spOV_&1qfU-H|K$bsgaZ($h1eN-PFIlfG!MD zyQ~M1L5vO0huS>>J0k9XFU?_VvXR)9h^|lEA zntre?KRu~Yl%C6gZBE-%{v{aNfI+bd&YjWRzeuan)AD*l?+j#;YfH6L)fe+u$hzv0 zUw%dc^Cy)p2jee2^IO$Q)spFBoAI{E`B*HF07|*NlAKMp{P!Rq;#6^Wu@5%fx75|+ zvden^-$$2M9z?2of)~b%B;wZf*x6FE8n`}jZO_y4(QuS9!jPF(ZjI&U7Z?;vbZr?IzNF> z&gVIuGYKsU3+H4%3)>uN)WHT;wRw4sddZi}so^Ub%b`s{5KHwg(*!PIFtneq2WZj2 zQ1iOj-~5m*qm<4G^w7%OJX~6O;`fBms>u(%I)N}^jsZR`3=du3G*{P3qj>gpnZomf z>h~d3gQjH*kNDC*Ga2`ta{3dwts?sSMPD3k!%O-iVz__un<0xNt*POk_w-brT#RZ5; z#ncqvW5%e?SH+iomB{bsST!jgKo?&-=#Y?lQBk+godEL(D zFyEiKg0Q7}w>vN9615yU!r}l@w5`R@3ZaF;;Ry!rtA#-&V!3GY?!EL8PSMWT){U9aQcYEx`@m4H^gNW1 z-uf)Ad`&b)8Y8l-b4NRva@t{HUDh}-#@&3y9Bfs#9eFj}qh;jFfP$Yd(bD(y8a-`p z7ypl#8U%Z5OT2m?xly*{635>+IWC}Mov~i7c_BfdFm7%{OH(TuInL}V^lke=#28!>}=16&%^JIv-o^uxB3L(-h3ps}K&jW{#+q<*74M~d+gwne=`u&I~iwdh-Z zq|V#_JxHru+dXFQ1F27)?`IaCdxCSVcAMp-gBg>*MY2)M*Ys2yg{turog*O?YyVnZ z?q%r3+R(~naGMag=TbkPV85b!%OuXSz7=`yb9+NfVE^CFiB4yD@M!xhApx2{J}DNf z`~3z$A%KyZP@Qn)FU`D?viZ-_kpG;|8uyRad%lo%I=}t9V`ljIU+D*bZUA{>J)RdX zEnBBz5^wf@{W~9=QkTkm-~9l>HR(@1mv?ReXSW2D0LE{#1Mgo~Uj1)Z24t2l96tFI zUc<`&v=!D~6h?Nu^m}d^&q$f?)``8^cK_QYHoN7Id0wk*6e~K!5GGfWrcLo$UD2gA zEj;JUrO;VF;Ruia{~1|0iuh)z658wh66tpXkR6LU8c`(*Qgl}4&v{nnmjqnDjssu( zyH>jXGvG)>zhyt*b_9#Z$M?$x+(wy1AzU_0IqicGG#xs zYXATOZ~y=hzES-ISQP9%?HmC6t{V*q0>B{E?+~ zjE{#;3?stFCxXFANMIx+a57@p4H1*UDJZEZDd2Q;3=DL1>}+go?A-rDAOd`R0zv{J zLP8=K@y#IryM&w)1|x;RDCx=JH$+ZPLrXC9mB9TjY9VL> z2o2otfhOz;i9#Sk;vusmy{6yl9Ag#+{9tnRZtpJhJ}yFwj!17?#gQhP{JeE*(f&}Z z<9!>6+m%btuD;H5|Fh_8Aj78fo>K%78Z{^z)1+$Zn2FwGe0-!i4nxNmgiVnw*n55n- zr_SH+Q2DWI?7Efm(ggFNj{R0`)#u(%-WJ}ycUkRx((WAE*wq~;1~b}nydVu2f7MuC zs5M{MAM-se=r^fXh3TpE-ew#9p!mnRpc9K*N?F^-q56X*qr!m)A&q+}Ze_M6*|JN5 z%8{?8r6q%frG4L}Reey&Yava{MInl)|J~bd)oC zQ~4bf1THq$xHVU8OP0tP{kjJ3ZW%onkjpW6*ukffAJwO;P<%okQ{euL#oV%{YvU+1 zS!*gz*RbL^=L6L@rfxCu*<;8$SL}Ixj}(zUOibm@!syT+SDA$wb9j(+B~h+TNW`FJ z@_ed-MQmqc-ORH%ZKZne`0Yh|c80BYTJcsQ^c^{0t4_TH|2(Z(?LK`kbF282OrM-UyO5Ffp^dI;r=2WZO*vr zlkc=i+j)ODoJ5`DNj;d~3H(Bo zYRvL42$e_zpKcH{%h}>0$!Q~;`tfrLl-~}8BrlEs0~zuc@->i1K`=OO<1XGwhtHi? zYTg>_H-?rhPCzJfWP7>3lg%C5miNXG4BM?*$>dIo;P$eTHP6%cIC+wn+_$P6iifM( zi;%rp?vcQyh>iZ8JtdX6C7n28aUkNn``Ym(wZ;kfg`&Wg6)|Q^q)nK~m$iNB8qf%R zdX6i%q`N!#4-nA*D|i2$$^ZX1$wJ);J7HR4TrfQ~A7pX~uc}l2IP;!5PD3Dm!k~sB zBVBm6q_}M1m_4Pv2yM)ahiL5z(hlsBjEFx$4J6RBabVm^dC5B}(SygYEU49=cMJ~u z-@nwIj7eVh(Yh}=*6(}v{p^d-O|NqJUTd-(Ik1tR@kjt&?gK;d({zKf1USYKHy(&syvssg*^z(O8uVyJDP=Uj$cjY7HW5&r8`+CwQ^f<2Z-I@ab86A=IHP|VqkZkU720rqIx=&Nb1p>CUs+8hhq6kbLJ?#X4*Co_IzMkRI^@t|RW7HbHbU*3i=P5dPe-XagYMQx$}QYNvPWFG@9+3yuEx&ng}thd+xGl)EJcs|mbYEq#mltd2Ge9@>Y`gqYPKIV7Nj z#DixU5R#Ynsg^~Y=Jg-*ze$@fM819@rk~}XH<1?@lq&T)v7r;&z&%*JaHoVZwrT$w z;ArC2402j-6XSZ6vSz!v|JoIqz-7g#4t3J#q%cor@NH-*ZeSA&jyT+jt+0Q{7|7*3 zvpDsl=0yK~oyQ@gLR(W!=qDcw**uz0=ry>e3;%*f8?}<0BS+Sn^Lajll{7Idv7SE~ zlX=UiGpsi_@J-~=teb=F)(N?~-Y48_O$PirYId)L(j_J8&OY~{4M$KY=ED8%8!wN$ zL|8`(7?p@H<1Hy2;R+6%>%!&)F{s9paFfSU>Rt>wg zozG1twER2AMx0O~-#z@f;F&u;wqIMG{|wXOYtez#1%2?sWri2gm^D*mCQfK>*9fcYU#O{_Y;Kg=Hf8z%^K6X!LcbTw+sdvNJ` zP;-zNG(de$3w9j}su^+}w&<3$B)0gRgFeRliA8?6;-_<5rF_dHTz=L;_U z6+Wf|8FRc4QJr4D5*ptE`G%Q4^a8>eLF_!!w>uMh^K`4Dyu${rrkA;n&S6_eVR#f; zu3)L2%{R`R-=&>?0l8dnTpP>Y(4Sx7h(%>RjO$-J34PrWjs1XGPspn$YJ!%OO$D9O zo%sf!EM76jiPX*L?k888tPw-Xbf>w8%gOHxJRwmEqfN=eYNx+54a2rUl6m4x-oc$|dg9DK&2S9tsz6Wn6$bY@wH%Wg?f<-(4JRlK$=J zztpgz@~6=dBw;4cQ`_-@pk<}LO^WA5cu}`6gUJ`8#8ps z+pA8TASKYp^R}f|`q?cEh2emn^UkZG>HKf}ENXJIYy;@@zu~Re#95* zt4@>+8zXZIX7y_56|`Ko16Pj=;2C+73+sNfMNq3S1`t@say6kiGx zHDz!)c%$vT+&>UyYnK|$-W&F{V+QXW;5iUr2?+2JPhfb`ChZj8lvc9ChkMCJnin+p zGZegK8KBfVEzQCmgAOh%iDd`FM70TUf_8YE7ggCcF#Y4!1s0Z$`YI{w%^>pqWs33# znWW4}w*(;V(N8FsvrbBgW){QXl*q|b))m%fR#?u2@TI$IvL(7CEubp^;$JlEYF0?5 zWrcTo$fNp|S$-vWex17{3uO9+U1PO=Yi>?ygGtc+u;WCN&Wk7-hX-wLX8(D(cIuP& z3yu^Fph)_-dAdNUI7xBAg7yRjTVIQ~B|no+9U0CW>gOG*A zdt{ga{WRFHbd85LL11z&PltC`8K|@jNVL2hs0ZCb% zQezZ`(nCg_5@(x}#r*L+Uobz(;F!0h?{r>~CPizruep9!0R-jf*~^8m+S^P&@ndC? zjD2`Q@i)81CK#l+h($?A`T-R^?>L{acv1@dlFOER46YEPB-=YWYJ4$~miZ2D<(rpLWMKvCAy9bZ0+JNtktdj~$ISN9{*66B~ap zX1v)7DmTODrRcqayd;->s_3&N&k4-@<6LKrB)McCiqWGZ8y-Fw!KQ20+6U7u4?HqS z>t9drYd_j~nbqnWCH|Vzmj-@QFuQa8I44i*xEUO7lJZy{49Im)>a_dbC?76HJE0LNOm1UxO}@?!lzce#Ggww1KLl3+)Lk z+Ak|*EqOtwQ(y=a){tvZ=Xk00$hud;Zy9QNNTQWfaY%sOB$ z-QEo6icZXUG}oTbAp~x=XlEM>lCljH+%}xVtK*<{3)?el1v# z#>?&2$^@qMdopQz!$UB!wP<{%0MG)g=iNS1l_c|VE$NPr7npVIdJ*=d-O2Uh7)@3G zp6z}yq3E)*gsbLoDC7crPhwiYWQZX2KetgIl`!Cf(JJj!)Cz-@pC zC``^MPdKcV5^9uTgCNc@2%|S zWH&#?WKRAVF||Q%+<(sMQU*BpY}ugrwYwbusK1agxt*%i5N!RE&z*V0 zu#(;4O^2ECw>R^{?`4#;7(SfK|5*v**t}C>L zK3)8Vsk`C)HEz`ny9hBJBl1Gy&klJJC+KL+;=LWuNq7RrsX`GJb4UO1*&z-?xb#xw zn0jRUsW?Y-@wBXf1XG*)so5iwFw#ES7FIJl2FlZzS_y)v3M6j5Rm-J<{MuGV9Q$U% zsOB-Bq0YywIv$bQ=*@IexyL|b%jZ81ZfWjKWeq*mXL!pQ(R}Y@K1Y!pDA5+xjU8}` z&DIl!qg&GgjkiyMG8%WEk>iMJ+If>YoB9M-919Q2gX&{xNB=v$sdDC7=Y*p{A2tMz z(zgbEF8O|1@5%VCsvX=Dm6WxHIBb}{jCzUZE9-9>u|o6x%{34{kFNX)_rC`IJv#qe zl{;sFZDIepLIVJ(#{R$cc~ho?NgRKPy$HEiFP`7z2j$P~W;VI((|LXEucnzriB+4AV$h~~by=Nsyq^LKqZ}q%`k6>ID)@GSC0@3ZWooMp_3CrG&aCE(WHIvy z0tRJvR+B38n2ve7)Z%GLy4@`Z`(sA<#Rv?UDlE8cJ+ETXE~_bk#-`FmleO1v?FD_j z1{?!+#&(sWFNI>ZETD@u-^rx;GR~N?+C;hSTLFh11vh3vr_3>7(o!Lsehv%Oh)+u1 z@@@EUDLx9i@v6DTYUFBEo)Vb?RHG62nDoNVcLrnoeZp@-?X2#7(dzRLSK9)O@H)9% zVHf!8WbzxImbkil&*@8$OoyjQw0$A-e?YsZT{ghlEbD$H2FwKj7qt0#P*wH({aoa!@uf`y6-QN3%TKNlN&(ooLdSaPb(or0-T7>okS$Tcg)e;#c&p#2J z9p%i_vT$^|0=f+5{|DRr7_A^rR=6a@D=B*vuY=lYG~f>17BGy+CG*9{CQ#Y2}R zOE_$&Kj@ezHigYGcGi^@u+GehqqGBn^=$&Q(LBxp&D6_L5SdDw7d)VM#CXGagutua zD6%o^l)-DW6|_LYfd}fgcRV{IbslhDbGv^oXMNnM6U}ZKGSPPhSDvwu)B{ z4M3N{E9n(WscEb{8l@H~1lQN~2*`Y8Qb_~Fl^IH1XHs0d^Thl0FmN9K;a>AM!W~Vz zU99#tt9iz;nzHB*#@*O;?oX%&WCHOuP<8KsaC)xLJqM2lTKW`sKwt3-@7}yC_#%Vj ziq1NE#!KEVwnL?47WI1KB>ZyI-6Ss4R1rZo;?rH&TWO-t&(%{FXG}jlTjkQUN;>RV zKYc9D8r=w?&2>77<_{u?70_-S01tUi^g>-^1Cfhk4r-4Z*ZsNxtuID}i)iN*e2#TpRi(UZ<9%LU?jm${CXV7DDjfcdaaDl7zNpUJq zhZzCJOy2$kpBhBB{9qS5oI)gDV9cVET+gR<(#UUH0OWzdpE~xvTg}f*HQ^l)F(-fU z3DiY43N|Ehyc3&+JqP;Uc`)<)MI3CHQrjw#?`pDtiiyumeWuj*`@GDm8w|EGxjvl!X(g<>HGlqdTH zK$28`>uc4Fi+`M)gdh3ncXIQd5f?qvy%GS{ivv`H3j4HAl{-V7nc_3A0YN{t=V-Uu z;^yG}7#Jq-8u$n|b-cxyLhnJogyoY-;=48%9{Duyesk|zh1w96tE_gu z?~JG6B6mv_XPU7VJ!X!`BIGpn;vg6J4c#PUsVlGice3lD%-0RtqJHxwZRHhFZK1SA zo54=aO0@|FQI+M$Akae~upVFTAdRQrrk5YB1~nL8?=Vd;ja-Wq4fe5p$Yv821FoD7 zDd+q6nI{WS7f?&_-Q+fxY;;E-6kewd3qHsvz*vcw4j)?O;LhOi}QtpfZhU zJb`HEc8{d(0^?6k;lsfwH)0D@EDMfJBXa`>ZD=16W*{#+r^mV4Q^LVAQrn8LHinp^ve+_WbJvmOnC>S`ii`zos&wxS}PciH`>qpR9Gyan*T<%(`!Dqeu! ze0;+jAN8c2EXLp~l0UjqVy8`Al`)sSXkTug;1tXbLz5u$KV796fcrl%M4Q8DhsMc7 z;ojQQyD{JaZd*yMHM~Y05sElV2y589)vGj{xB1?od(OX7Ej@BY1_CtF1?6FhsXil4 z4D$9OywqpC?St^bM@K8G_q7=Lc=D()whtao`O`CMr13lNt$sKbcwfj;h&DDo#zF5! z6y|Z@9A=V0jYr;OO@Vf+?g0!1M^6eY c&UFuDa(C@cP^T0uaWrb^rhX diff --git a/src/com/itmill/toolkit/demo/features/properties.jpg b/src/com/itmill/toolkit/demo/features/properties.jpg deleted file mode 100644 index 3c2ef430f26fe1489cd79bd35f0b5018392e5ce5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8877 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 B7zY3V diff --git a/src/com/itmill/toolkit/demo/features/validators.gif b/src/com/itmill/toolkit/demo/features/validators.gif deleted file mode 100644 index 55faff17963d090df060f5a29218fd9aa10cb4d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28209 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