1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.vaadin.gwt.client.dialog.connector;
35
36 import info.magnolia.ui.vaadin.dialog.FormDialog;
37 import info.magnolia.ui.vaadin.gwt.client.dialog.widget.BaseDialogView;
38 import info.magnolia.ui.vaadin.gwt.client.form.widget.FormViewImpl;
39
40 import java.util.Arrays;
41 import java.util.List;
42
43 import com.google.gwt.dom.client.Node;
44 import com.google.gwt.dom.client.NodeList;
45 import com.google.gwt.event.logical.shared.ResizeEvent;
46 import com.google.gwt.event.logical.shared.ResizeHandler;
47 import com.google.gwt.event.shared.HandlerRegistration;
48 import com.google.gwt.user.client.Element;
49 import com.google.gwt.user.client.Window;
50 import com.google.gwt.user.client.ui.Widget;
51 import com.vaadin.client.ui.layout.ElementResizeEvent;
52 import com.vaadin.client.ui.layout.ElementResizeListener;
53 import com.vaadin.shared.ui.Connect;
54
55
56
57
58
59
60 @Connect(FormDialog.class)
61 public class DialogContainingFormConnector extends BaseDialogConnector implements ResizeHandler {
62
63 private BaseDialogView view;
64 private HandlerRegistration registration;
65
66 @Override
67 protected BaseDialogView createView() {
68 this.view = super.createView();
69 return this.view;
70 }
71
72 @Override
73 protected void init() {
74 super.init();
75 getLayoutManager().addElementResizeListener(getWidget().getElement(), listener);
76 registration = Window.addResizeHandler(this);
77 }
78
79 private final ElementResizeListener listener = new ElementResizeListener() {
80 @Override
81 public void onElementResize(ElementResizeEvent e) {
82 doResize();
83 }
84 };
85
86 @Override
87 public void onUnregister() {
88 registration.removeHandler();
89 getLayoutManager().removeElementResizeListener(getWidget().getElement(), listener);
90 }
91
92
93
94
95 @Override
96 public void onResize(ResizeEvent event) {
97 doResize();
98 }
99
100
101 private static int LIGHT_DIALOG_BOTTOM_MARGIN = (40-2);
102
103 private void doResize() {
104 Widget content = getContent().getWidget();
105 if (content instanceof FormViewImpl) {
106 FormViewImpl formView = (FormViewImpl) content;
107 Element element = view.asWidget().getElement();
108 NodeList<Node> childNodes = element.getChild(0).getChildNodes();
109 int footerHeight = 0, headerHeight = 0, marginHeight = 0;
110 List<String> marginElements = Arrays.asList("dialog-description", "dialog-error", "dialog-content", "dialog-footer");
111 for (int i = 0; i < childNodes.getLength(); i++) {
112 Node item = childNodes.getItem(i);
113 if (item.getNodeType() == Node.ELEMENT_NODE) {
114 Element child = (Element) item;
115 if (child.getClassName().equalsIgnoreCase("dialog-footer")) {
116 footerHeight = child.getOffsetHeight();
117 } else if (child.getClassName().isEmpty()) {
118 headerHeight = child.getOffsetHeight();
119 }
120 if (marginElements.contains(child.getClassName())) {
121 marginHeight += 2;
122 }
123 }
124 }
125 int topMargin = element.getOffsetTop();
126 int bottomMargin = 0;
127 if ("light".equals(getState().modalityLevel)){
128 bottomMargin = LIGHT_DIALOG_BOTTOM_MARGIN;
129 }
130 formView.setMaxHeight(view.asWidget().getElement().getOffsetHeight() - footerHeight - headerHeight - marginHeight - topMargin - bottomMargin);
131 }
132 }
133 }