blob: 422fb70a5c2250020a873eb5cd17af4b047376bb [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
*/
package org.eclipse.osbp.vaadin.addons.designer.overlay;
import javax.servlet.annotation.WebServlet;
import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.AddChildEvent;
import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.RemoveChildEvent;
import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.ShowPropertiesEvent;
import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.ShowPropertiesListener;
import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.SwitchEditableEvent;
import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.ThemeResource;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Component;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Notification;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
@SuppressWarnings("serial")
@Theme("valo")
public class OverlayApplication extends UI {
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = OverlayApplication.class, widgetset = "org.eclipse.osbp.vaadin.addons.designer.overlay.OverlayWidgetset")
public static class Servlet extends VaadinServlet {
}
@Override
protected void init(VaadinRequest request) {
TabSheet tabSheet = new TabSheet();
tabSheet.setSizeFull();
setContent(tabSheet);
addGridlayout(tabSheet);
addHorizontallayout(tabSheet);
addVerticallayout(tabSheet);
addLayoutInlayout(tabSheet);
}
/**
* Add gridlayout to the tabsheet.
*
* @param tabSheet
*/
private void addGridlayout(TabSheet tabSheet) {
final GridLayout gridLayout = new GridLayout(3, 3);
gridLayout.setSizeFull();
gridLayout.setMargin(true);
tabSheet.addTab(gridLayout, "GridLayout");
DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(gridLayout);
layoutExt.setSupportsAlignments(false);
layoutExt.setSupportsMargins(true);
layoutExt.setSupportsSpacing(true);
layoutExt.setSupportsPropertiesDialog(true);
layoutExt.setSupportsRemove(false);
layoutExt.setSupportsAdd(true);
layoutExt.setIcon(new ThemeResource("sample/sample.gif"));
layoutExt.addSwitchEditableListener(new DesignerOverlayExtension.SwitchEditableListener() {
@Override
public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
gridLayout.setEnabled(!gridLayout.isReadOnly());
}
});
layoutExt.addSwitchMarginListener(new DesignerOverlayExtension.SwitchMarginListener() {
@Override
public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
gridLayout.setMargin(gridLayout.getMargin().getBitMask() == 0);
}
});
layoutExt.addSwitchSpacingListener(new DesignerOverlayExtension.SwitchSpacingListener() {
@Override
public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
gridLayout.setSpacing(!gridLayout.isSpacing());
}
});
layoutExt.addShowPropertiesListener(new ShowPropertiesListener() {
@Override
public void showProperties(ShowPropertiesEvent event) {
Notification.show("Requested properties dialog");
}
});
layoutExt.addAddChildListener(new DesignerOverlayExtension.AddChildListener() {
@Override
public void addChild(DesignerOverlayExtension.AddChildEvent event) {
gridLayout.addComponent(new TextField("added"));
}
});
addToGrid(gridLayout, 0, 0);
addToGrid(gridLayout, 0, 1);
addToGrid(gridLayout, 0, 2);
addToGrid(gridLayout, 1, 0);
addToGrid(gridLayout, 1, 1);
addToGrid(gridLayout, 1, 2);
addToGrid(gridLayout, 2, 0);
addToGrid(gridLayout, 2, 1);
addToGrid(gridLayout, 2, 2);
}
private void addToGrid(final GridLayout gridLayout, int col, int row) {
final Component text = new TextField("Text " + col + "/" + row);
text.setId("Text " + col + "/" + row);
gridLayout.addComponent(text, col, row);
DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
extension.setSupportsAlignments(true);
extension.setSupportsMargins(false);
extension.setSupportsSpacing(false);
extension.setSupportsPropertiesDialog(true);
extension.setSupportsRemove(true);
extension.setSupportsEditable(true);
extension.addAlignmentChangedListener(new DesignerOverlayExtension.AlignmentChangedListener() {
@Override
public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
AlignmentInfoUtil.apply(gridLayout, text, event.getAlignment());
}
});
extension.addRemoveChildListener(new DesignerOverlayExtension.RemoveChildListener() {
@Override
public void removeChild(RemoveChildEvent event) {
gridLayout.removeComponent(event.getComponent());
}
});
extension.addSwitchEditableListener(new DesignerOverlayExtension.SwitchEditableListener() {
@Override
public void switchEditable(SwitchEditableEvent event) {
text.setReadOnly(!text.isReadOnly());
}
});
extension.addShowPropertiesListener(new ShowPropertiesListener() {
@Override
public void showProperties(ShowPropertiesEvent event) {
Notification.show("Requested properties dialog");
}
});
extension.getState().alignment = AlignmentInfo.MIDDLE_CENTER;
AlignmentInfoUtil.apply(gridLayout, text, AlignmentInfo.MIDDLE_CENTER);
}
/**
* Add verticallayout to the tabsheet.
*
* @param tabSheet
*/
private void addVerticallayout(TabSheet tabSheet) {
final VerticalLayout verticalLayout = new VerticalLayout();
verticalLayout.setSizeFull();
verticalLayout.setMargin(true);
tabSheet.addTab(verticalLayout, "VerticalLayout");
DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(verticalLayout);
layoutExt.setSupportsAlignments(false);
layoutExt.setSupportsMargins(true);
layoutExt.setSupportsSpacing(true);
layoutExt.setSupportsPropertiesDialog(true);
layoutExt.setSupportsRemove(false);
layoutExt.setSupportsAdd(true);
layoutExt.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
@Override
public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
verticalLayout.setReadOnly(!verticalLayout.isReadOnly());
}
@Override
public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
verticalLayout.setMargin(verticalLayout.getMargin().getBitMask() == 0);
}
@Override
public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
verticalLayout.setSpacing(!verticalLayout.isSpacing());
}
@Override
public void showProperties(ShowPropertiesEvent event) {
Notification.show("Requested properties dialog");
}
@Override
public void addChild(AddChildEvent event) {
addToVerticalLayout(verticalLayout, 10);
}
});
addToVerticalLayout(verticalLayout, 0);
addToVerticalLayout(verticalLayout, 1);
addToVerticalLayout(verticalLayout, 2);
addToVerticalLayout(verticalLayout, 3);
addToVerticalLayout(verticalLayout, 4);
addToVerticalLayout(verticalLayout, 5);
}
private void addToVerticalLayout(final VerticalLayout verticalLayout, int index) {
final TextField text = new TextField("Mouse over " + index);
text.setId("Mouse over " + index);
verticalLayout.addComponent(text);
DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
extension.setSupportsAlignments(true);
extension.setSupportsMargins(false);
extension.setSupportsSpacing(false);
extension.setSupportsPropertiesDialog(true);
extension.setSupportsRemove(true);
extension.setSupportsEditable(true);
extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
@Override
public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
AlignmentInfoUtil.apply(verticalLayout, text, event.getAlignment());
}
@Override
public void removeChild(RemoveChildEvent event) {
verticalLayout.removeComponent(event.getComponent());
}
@Override
public void switchEditable(SwitchEditableEvent event) {
text.setReadOnly(!text.isReadOnly());
}
@Override
public void showProperties(ShowPropertiesEvent event) {
Notification.show("Requested properties dialog");
}
});
extension.getState().alignment = AlignmentInfo.TOP_CENTER;
AlignmentInfoUtil.apply(verticalLayout, text, AlignmentInfo.TOP_CENTER);
}
/**
* Add horizontallayout to the tabsheet.
*
* @param tabSheet
*/
private void addHorizontallayout(TabSheet tabSheet) {
final HorizontalLayout horizontalLayout = new HorizontalLayout();
horizontalLayout.setSizeFull();
horizontalLayout.setMargin(true);
tabSheet.addTab(horizontalLayout, "HorizontalLayout");
DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(horizontalLayout);
layoutExt.setSupportsAlignments(false);
layoutExt.setSupportsMargins(true);
layoutExt.setSupportsSpacing(true);
layoutExt.setSupportsPropertiesDialog(true);
layoutExt.setSupportsRemove(false);
layoutExt.setSupportsAdd(true);
layoutExt.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
@Override
public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
horizontalLayout.setReadOnly(!horizontalLayout.isReadOnly());
}
public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
horizontalLayout.setMargin(horizontalLayout.getMargin().getBitMask() == 0);
}
public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
horizontalLayout.setSpacing(!horizontalLayout.isSpacing());
}
@Override
public void showProperties(ShowPropertiesEvent event) {
Notification.show("Requested properties dialog");
}
@Override
public void addChild(AddChildEvent event) {
addToHorizontalLayout(horizontalLayout, 10);
}
});
addToHorizontalLayout(horizontalLayout, 0);
addToHorizontalLayout(horizontalLayout, 1);
addToHorizontalLayout(horizontalLayout, 2);
addToHorizontalLayout(horizontalLayout, 3);
}
private void addToHorizontalLayout(final HorizontalLayout horizontalLayout, int index) {
final TextField text = new TextField("Mouse over " + index);
text.setId("Mouse over " + index);
horizontalLayout.addComponent(text);
DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
extension.setSupportsAlignments(true);
extension.setSupportsMargins(false);
extension.setSupportsSpacing(false);
extension.setSupportsPropertiesDialog(true);
extension.setSupportsRemove(true);
extension.setSupportsEditable(true);
extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
@Override
public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
AlignmentInfoUtil.apply(horizontalLayout, text, event.getAlignment());
}
@Override
public void removeChild(RemoveChildEvent event) {
horizontalLayout.removeComponent(event.getComponent());
}
@Override
public void switchEditable(SwitchEditableEvent event) {
text.setReadOnly(!text.isReadOnly());
}
@Override
public void showProperties(ShowPropertiesEvent event) {
Notification.show("Requested properties dialog");
}
});
extension.getState().alignment = AlignmentInfo.TOP_CENTER;
AlignmentInfoUtil.apply(horizontalLayout, text, AlignmentInfo.TOP_CENTER);
}
/**
* Add texts in horizontal layouts in verticallayout to the tabsheet.
*
* @param tabSheet
*/
private void addLayoutInlayout(TabSheet tabSheet) {
final VerticalLayout verticalLayout = new VerticalLayout();
verticalLayout.setSizeFull();
verticalLayout.setMargin(true);
tabSheet.addTab(verticalLayout, "Layout in Layout");
DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(verticalLayout);
layoutExt.setSupportsAlignments(false);
layoutExt.setSupportsMargins(true);
layoutExt.setSupportsSpacing(true);
layoutExt.setSupportsPropertiesDialog(true);
layoutExt.setSupportsRemove(false);
layoutExt.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
@Override
public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
verticalLayout.setReadOnly(!verticalLayout.isReadOnly());
}
@Override
public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
verticalLayout.setMargin(verticalLayout.getMargin().getBitMask() == 0);
}
@Override
public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
verticalLayout.setSpacing(!verticalLayout.isSpacing());
}
@Override
public void showProperties(ShowPropertiesEvent event) {
Notification.show("Requested properties dialog");
}
});
addToLayoutInLayout(verticalLayout, 0);
addToLayoutInLayout(verticalLayout, 1);
addToLayoutInLayout(verticalLayout, 2);
addToLayoutInLayout(verticalLayout, 3);
addToLayoutInLayout(verticalLayout, 4);
addToLayoutInLayout(verticalLayout, 5);
}
private void addToLayoutInLayout(final VerticalLayout verticalLayout, int index) {
final HorizontalLayout hl = new HorizontalLayout();
verticalLayout.addComponent(hl);
DesignerOverlayExtension extension = DesignerOverlayExtension.create(hl);
extension.setSupportsAlignments(true);
extension.setSupportsMargins(true);
extension.setSupportsSpacing(true);
extension.setSupportsPropertiesDialog(true);
extension.setSupportsRemove(true);
extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
@Override
public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
AlignmentInfoUtil.apply(verticalLayout, hl, event.getAlignment());
}
@Override
public void removeChild(RemoveChildEvent event) {
verticalLayout.removeComponent(event.getComponent());
}
@Override
public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
hl.setMargin(hl.getMargin().getBitMask() == 0);
}
@Override
public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
hl.setSpacing(!hl.isSpacing());
}
@Override
public void switchEditable(SwitchEditableEvent event) {
hl.setReadOnly(!hl.isReadOnly());
}
@Override
public void showProperties(ShowPropertiesEvent event) {
Notification.show("Requested properties dialog");
}
});
extension.getState().alignment = AlignmentInfo.TOP_CENTER;
AlignmentInfoUtil.apply(verticalLayout, hl, AlignmentInfo.TOP_CENTER);
addToHorizontalLayoutNoAlignment(hl, 0);
addToHorizontalLayoutNoAlignment(hl, 1);
addToHorizontalLayoutNoAlignment(hl, 2);
addToHorizontalLayoutNoAlignment(hl, 3);
addToHorizontalLayoutNoAlignment(hl, 4);
addToHorizontalLayoutNoAlignment(hl, 5);
}
private void addToHorizontalLayoutNoAlignment(final HorizontalLayout horizontalLayout, int index) {
final TextField text = new TextField("Mouse over " + index);
text.setId("Mouse over " + index);
text.setSizeFull();
horizontalLayout.addComponent(text);
DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
extension.setSupportsAlignments(false);
extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
@Override
public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
AlignmentInfoUtil.apply(horizontalLayout, text, event.getAlignment());
}
@Override
public void removeChild(RemoveChildEvent event) {
horizontalLayout.removeComponent(event.getComponent());
}
@Override
public void switchEditable(SwitchEditableEvent event) {
text.setReadOnly(!text.isReadOnly());
}
@Override
public void showProperties(ShowPropertiesEvent event) {
Notification.show("Requested properties dialog");
}
});
AlignmentInfoUtil.apply(horizontalLayout, text, AlignmentInfo.FILL_FILL);
}
}