blob: 61492adc39bd15c546cf06837cecf8822adff09b (
plain)
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
package com.vaadin.tests.minitutorials.v7b9;
import java.util.Date;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.ObjectProperty;
import com.vaadin.navigator.Navigator;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.DateField;
import com.vaadin.ui.InlineDateField;
import com.vaadin.ui.Layout;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Notification.Type;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.Reindeer;
public class SettingsView extends Panel implements View {
public static String NAME = "settings";
Navigator navigator;
DateField date;
Button apply;
Button cancel;
String pendingViewAndParameters = null;
public SettingsView(final Navigator navigator) {
this.navigator = navigator;
Layout layout = new VerticalLayout();
date = new InlineDateField("Birth date");
date.setImmediate(true);
layout.addComponent(date);
// pretend we have a datasource:
date.setPropertyDataSource(new ObjectProperty<Date>(new Date()));
date.setBuffered(true);
// show buttons when date is changed
date.addValueChangeListener(new ValueChangeListener() {
public void valueChange(ValueChangeEvent event) {
hideOrShowButtons();
pendingViewAndParameters = null;
}
});
// commit the TextField changes when "Save" is clicked
apply = new Button("Apply", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
date.commit();
hideOrShowButtons();
processPendingView();
}
});
layout.addComponent(apply);
// Discard the TextField changes when "Cancel" is clicked
cancel = new Button("Cancel", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
date.discard();
hideOrShowButtons();
processPendingView();
}
});
cancel.setStyleName(Reindeer.BUTTON_LINK);
layout.addComponent(cancel);
// attach a listener so that we'll get asked isViewChangeAllowed?
navigator.addViewChangeListener(new ViewChangeListener() {
public boolean beforeViewChange(ViewChangeEvent event) {
if (event.getOldView() == SettingsView.this
&& date.isModified()) {
// save the View where the user intended to go
pendingViewAndParameters = event.getViewName();
if (event.getParameters() != null) {
pendingViewAndParameters += "/";
pendingViewAndParameters += event.getParameters();
}
// Prompt the user to save or cancel if the name is changed
Notification.show("Please apply or cancel your changes",
Type.WARNING_MESSAGE);
return false;
} else {
return true;
}
}
public void afterViewChange(ViewChangeEvent event) {
pendingViewAndParameters = null;
}
});
setContent(layout);
}
// Hide or show buttons depending on whether date is modified or not
private void hideOrShowButtons() {
apply.setVisible(date.isModified());
cancel.setVisible(date.isModified());
}
// if there is a pending view change, do it now
private void processPendingView() {
if (pendingViewAndParameters != null) {
navigator.navigateTo(pendingViewAndParameters);
pendingViewAndParameters = null;
}
}
public void navigateTo(String fragmentParameters) {
hideOrShowButtons();
}
@Override
public void enter(ViewChangeEvent event) {
// TODO Auto-generated method stub
}
}
|