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.magnoliashell.viewport;
35
36 import info.magnolia.ui.vaadin.gwt.client.jquerywrapper.JQueryCallback;
37 import info.magnolia.ui.vaadin.gwt.client.jquerywrapper.JQueryWrapper;
38 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.viewport.animation.FadeAnimation;
39 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.viewport.animation.SlideAnimation;
40 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.viewport.widget.ShellAppsViewportWidget;
41 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.viewport.widget.ViewportWidget;
42
43 import com.google.gwt.dom.client.Style;
44 import com.google.gwt.user.client.Element;
45 import com.google.gwt.user.client.ui.Widget;
46 import com.vaadin.client.Util;
47
48
49
50
51
52
53
54 public class ShellAppsTransitionDelegate implements TransitionDelegate {
55
56 private final static int SLIDE_DURATION = 600;
57
58 private final static int FADE_DURATION = 600;
59
60 private final static int ALPHA_MIN = 0;
61
62 private final static int ALPHA_MAX = 1;
63
64 private SlideAnimation slideUpAnimation;
65
66 private SlideAnimation slideDownAnimation;
67
68 private FadeAnimation fadeOutAnimation;
69
70 private FadeAnimation fadeInAnimation;
71
72 private ShellAppsViewportWidget viewport;
73
74 public ShellAppsTransitionDelegate(final ShellAppsViewportWidget viewport) {
75 this.viewport = viewport;
76 initAnimations();
77 }
78
79 private void initAnimations() {
80 this.fadeInAnimation = new FadeAnimation(ALPHA_MAX, false) {
81 @Override
82 protected void onStart() {
83 super.onStart();
84 Style style = getCurrentElement().getStyle();
85 String currentOpacity = style.getOpacity();
86 if (currentOpacity == null || currentOpacity.isEmpty()) {
87 style.setOpacity(0d);
88 }
89 style.clearDisplay();
90 }
91 };
92 this.fadeInAnimation.addCallback(new JQueryCallback() {
93 @Override
94 public void execute(JQueryWrapper query) {
95 viewport.onShellAppLoaded(Util.<Widget>findWidget(query.get(0), null));
96 }
97 });
98
99
100 this.slideUpAnimation = new SlideAnimation(false);
101 this.slideDownAnimation = new SlideAnimation(false);
102
103 this.slideDownAnimation.addCallback(new JQueryCallback() {
104 @Override
105 public void execute(JQueryWrapper query) {
106 if (!slideDownAnimation.isCancelled()) {
107 viewport.onShellAppLoaded(viewport.getVisibleChild());
108 }
109 }
110 });
111
112 this.slideUpAnimation.addCallback(new JQueryCallback() {
113 @Override
114 public void execute(JQueryWrapper query) {
115 if (!slideUpAnimation.isCancelled()) {
116 viewport.onShellAppsHidden();
117 }
118 }
119 });
120 this.fadeOutAnimation = new FadeAnimation(ALPHA_MIN, false);
121 }
122
123
124
125
126 @Override
127 public void setActive(final ViewportWidget viewport, boolean active) {
128 final Element viewportElement = viewport.getElement();
129 if (active) {
130 boolean isViewportCurrentlyVisible = viewport.isVisible();
131 viewport.setVisible(true);
132
133
134 if (!isViewportCurrentlyVisible) {
135 viewportElement.getStyle().setTop(-viewportElement.getOffsetHeight(), Style.Unit.PX);
136 }
137 slideUpAnimation.cancel();
138 slideDownAnimation.setTargetValue(0);
139 slideDownAnimation.run(SLIDE_DURATION, viewportElement);
140 } else {
141 slideDownAnimation.cancel();
142 slideUpAnimation.setTargetValue(-viewport.getOffsetHeight());
143 slideUpAnimation.run(SLIDE_DURATION, viewportElement);
144 }
145 }
146
147
148
149
150 @Override
151 public void setVisibleChild(final ViewportWidget viewport, final Widget visibleChild) {
152 if (viewport.getVisibleChild() == null || !((ShellAppsViewportWidget)viewport).isActive()) {
153
154 viewport.showChildNoTransition(visibleChild);
155 } else {
156 fadeInAnimation.run(FADE_DURATION, visibleChild.getElement());
157 fadeOutAnimation.run(FADE_DURATION, viewport.getVisibleChild().getElement());
158 }
159 }
160
161 @Override
162 public boolean inProgress() {
163 return fadeInAnimation.isRunning() ||
164 fadeOutAnimation.isRunning() ||
165 slideDownAnimation.isRunning() ||
166 slideUpAnimation.isRunning();
167 }
168 }