diff options
Diffstat (limited to 'src/com/vaadin/demo/SimpleAddressBook.java')
-rw-r--r-- | src/com/vaadin/demo/SimpleAddressBook.java | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/com/vaadin/demo/SimpleAddressBook.java b/src/com/vaadin/demo/SimpleAddressBook.java new file mode 100644 index 0000000000..d9a687feff --- /dev/null +++ b/src/com/vaadin/demo/SimpleAddressBook.java @@ -0,0 +1,137 @@ +package com.vaadin.demo; + +import com.vaadin.Application; +import com.vaadin.data.Property; +import com.vaadin.data.Property.ValueChangeEvent; +import com.vaadin.data.util.IndexedContainer; +import com.vaadin.ui.Button; +import com.vaadin.ui.Form; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.SplitPanel; +import com.vaadin.ui.Table; +import com.vaadin.ui.TextField; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; +import com.vaadin.ui.Button.ClickEvent; + +public class SimpleAddressBook extends Application { + + private static String[] fields = { "First Name", "Last Name", "Company", + "Mobile Phone", "Work Phone", "Home Phone", "Work Email", + "Home Email", "Street", "Zip", "City", "State", "Country" }; + private static String[] visibleCols = new String[] { "Last Name", "First Name", + "Company" }; + + private Table contactList = new Table(); + private Form contactEditor = new Form(); + private HorizontalLayout bottomLeftCorner = new HorizontalLayout(); + private Button contactRemovalButton; + private IndexedContainer addressBookData = createDummyData(); + + public void init() { + initLayout(); + initContactAddRemoveButtons(); + initAddressList(); + initFilteringControls(); + } + + private void initLayout() { + SplitPanel splitPanel = new SplitPanel( + SplitPanel.ORIENTATION_HORIZONTAL); + setMainWindow(new Window("Address Book", splitPanel)); + VerticalLayout left = new VerticalLayout(); + left.setSizeFull(); + left.addComponent(contactList); + contactList.setSizeFull(); + left.setExpandRatio(contactList, 1); + splitPanel.addComponent(left); + splitPanel.addComponent(contactEditor); + contactEditor.setSizeFull(); + contactEditor.getLayout().setMargin(true); + contactEditor.setImmediate(true); + bottomLeftCorner.setWidth("100%"); + left.addComponent(bottomLeftCorner); + } + + private void initContactAddRemoveButtons() { + // New item button + bottomLeftCorner.addComponent(new Button("+", new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + Object id = contactList.addItem(); + contactList.setValue(id); + } + })); + + // Remove item button + contactRemovalButton = new Button("-", new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + contactList.removeItem(contactList.getValue()); + contactList.select(null); + } + }); + contactRemovalButton.setVisible(false); + bottomLeftCorner.addComponent(contactRemovalButton); + } + + private String[] initAddressList() { + contactList.setContainerDataSource(addressBookData); + contactList.setVisibleColumns(visibleCols); + contactList.setSelectable(true); + contactList.setImmediate(true); + contactList.addListener(new Property.ValueChangeListener() { + public void valueChange(ValueChangeEvent event) { + Object id = contactList.getValue(); + contactEditor.setItemDataSource(id == null ? null : contactList + .getItem(id)); + contactRemovalButton.setVisible(id != null); + } + }); + return visibleCols; + } + + private void initFilteringControls() { + for (final String pn : visibleCols) { + final TextField sf = new TextField(); + bottomLeftCorner.addComponent(sf); + sf.setWidth("100%"); + sf.setValue(pn); + sf.setImmediate(true); + bottomLeftCorner.setExpandRatio(sf, 1); + sf.addListener(new Property.ValueChangeListener() { + public void valueChange(ValueChangeEvent event) { + addressBookData.removeContainerFilters(pn); + if (sf.toString().length() > 0 && !pn.equals(sf.toString())) + addressBookData.addContainerFilter(pn, sf.toString(), + true, false); + getMainWindow().showNotification( + "" + addressBookData.size() + " matches found"); + } + }); + } + } + private static IndexedContainer createDummyData() { + + String[] fnames = { "Peter", "Alice", "Joshua", "Mike", "Olivia", + "Nina", "Alex", "Rita", "Dan", "Umberto", "Henrik", "Rene", + "Lisa", "Marge" }; + String[] lnames = { "Smith", "Gordon", "Simpson", "Brown", "Clavel", + "Simons", "Verne", "Scott", "Allison", "Gates", "Rowling", + "Barks", "Ross", "Schneider", "Tate" }; + + IndexedContainer ic = new IndexedContainer(); + + for (String p : fields) + ic.addContainerProperty(p, String.class, ""); + + for (int i = 0; i < 1000; i++) { + Object id = ic.addItem(); + ic.getContainerProperty(id, "First Name").setValue( + fnames[(int) (fnames.length * Math.random())]); + ic.getContainerProperty(id, "Last Name").setValue( + lnames[(int) (lnames.length * Math.random())]); + } + + return ic; + } + +} |