root / src / gr / grnet / pithos / web / client / GroupCreateDialog.java @ 59aa2375
History | View | Annotate | Download (5.9 kB)
1 | 53f8abed | Christos Stathis | /*
|
---|---|---|---|
2 | e6e9f6e6 | Christos KK Loverdos | * Copyright 2011-2013 GRNET S.A. All rights reserved.
|
3 | 53f8abed | Christos Stathis | *
|
4 | 53f8abed | Christos Stathis | * Redistribution and use in source and binary forms, with or
|
5 | 53f8abed | Christos Stathis | * without modification, are permitted provided that the following
|
6 | 53f8abed | Christos Stathis | * conditions are met:
|
7 | 53f8abed | Christos Stathis | *
|
8 | 53f8abed | Christos Stathis | * 1. Redistributions of source code must retain the above
|
9 | 53f8abed | Christos Stathis | * copyright notice, this list of conditions and the following
|
10 | 53f8abed | Christos Stathis | * disclaimer.
|
11 | 53f8abed | Christos Stathis | *
|
12 | 53f8abed | Christos Stathis | * 2. Redistributions in binary form must reproduce the above
|
13 | 53f8abed | Christos Stathis | * copyright notice, this list of conditions and the following
|
14 | 53f8abed | Christos Stathis | * disclaimer in the documentation and/or other materials
|
15 | 53f8abed | Christos Stathis | * provided with the distribution.
|
16 | 53f8abed | Christos Stathis | *
|
17 | 53f8abed | Christos Stathis | * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
18 | 53f8abed | Christos Stathis | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
19 | 53f8abed | Christos Stathis | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
20 | 53f8abed | Christos Stathis | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
21 | 53f8abed | Christos Stathis | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
22 | 53f8abed | Christos Stathis | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
23 | 53f8abed | Christos Stathis | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
24 | 53f8abed | Christos Stathis | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
25 | 53f8abed | Christos Stathis | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
26 | 53f8abed | Christos Stathis | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
27 | 53f8abed | Christos Stathis | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28 | 53f8abed | Christos Stathis | * POSSIBILITY OF SUCH DAMAGE.
|
29 | 53f8abed | Christos Stathis | *
|
30 | 53f8abed | Christos Stathis | * The views and conclusions contained in the software and
|
31 | 53f8abed | Christos Stathis | * documentation are those of the authors and should not be
|
32 | 53f8abed | Christos Stathis | * interpreted as representing official policies, either expressed
|
33 | 53f8abed | Christos Stathis | * or implied, of GRNET S.A.
|
34 | 53f8abed | Christos Stathis | */
|
35 | 53f8abed | Christos Stathis | package gr.grnet.pithos.web.client; |
36 | 53f8abed | Christos Stathis | |
37 | dc8cc18a | Christos KK Loverdos | import gr.grnet.pithos.web.client.commands.AddUserCommand; |
38 | dc8cc18a | Christos KK Loverdos | import gr.grnet.pithos.web.client.foldertree.Folder; |
39 | dc8cc18a | Christos KK Loverdos | import gr.grnet.pithos.web.client.grouptree.Group; |
40 | dc8cc18a | Christos KK Loverdos | |
41 | 53f8abed | Christos Stathis | import com.google.gwt.dom.client.NativeEvent; |
42 | 53f8abed | Christos Stathis | import com.google.gwt.event.dom.client.ClickEvent; |
43 | 53f8abed | Christos Stathis | import com.google.gwt.event.dom.client.ClickHandler; |
44 | 53f8abed | Christos Stathis | import com.google.gwt.event.dom.client.KeyCodes; |
45 | 53f8abed | Christos Stathis | import com.google.gwt.event.dom.client.KeyDownEvent; |
46 | 5ec7b091 | Christos Stathis | import com.google.gwt.user.client.Command; |
47 | 53f8abed | Christos Stathis | import com.google.gwt.user.client.Event.NativePreviewEvent; |
48 | dc8cc18a | Christos KK Loverdos | import com.google.gwt.user.client.ui.Anchor; |
49 | dc8cc18a | Christos KK Loverdos | import com.google.gwt.user.client.ui.Button; |
50 | dc8cc18a | Christos KK Loverdos | import com.google.gwt.user.client.ui.DialogBox; |
51 | dc8cc18a | Christos KK Loverdos | import com.google.gwt.user.client.ui.FlexTable; |
52 | dc8cc18a | Christos KK Loverdos | import com.google.gwt.user.client.ui.HasHorizontalAlignment; |
53 | dc8cc18a | Christos KK Loverdos | import com.google.gwt.user.client.ui.TextBox; |
54 | dc8cc18a | Christos KK Loverdos | import com.google.gwt.user.client.ui.VerticalPanel; |
55 | 53f8abed | Christos Stathis | |
56 | 53f8abed | Christos Stathis | /**
|
57 | 53f8abed | Christos Stathis | * The 'Folder properties' dialog box implementation.
|
58 | 53f8abed | Christos Stathis | */
|
59 | 53f8abed | Christos Stathis | public class GroupCreateDialog extends DialogBox { |
60 | 53f8abed | Christos Stathis | |
61 | 53f8abed | Christos Stathis | protected Pithos app;
|
62 | 53f8abed | Christos Stathis | |
63 | 5ec7b091 | Christos Stathis | private Command callback;
|
64 | dc8cc18a | Christos KK Loverdos | |
65 | dc8cc18a | Christos KK Loverdos | /**
|
66 | dc8cc18a | Christos KK Loverdos | * The widget that holds the folderName of the folder.
|
67 | dc8cc18a | Christos KK Loverdos | */
|
68 | dc8cc18a | Christos KK Loverdos | TextBox groupName = new TextBox();
|
69 | dc8cc18a | Christos KK Loverdos | |
70 | dc8cc18a | Christos KK Loverdos | final VerticalPanel inner;
|
71 | dc8cc18a | Christos KK Loverdos | |
72 | dc8cc18a | Christos KK Loverdos | public GroupCreateDialog(final Pithos app) { |
73 | dc8cc18a | Christos KK Loverdos | this(app, null); |
74 | dc8cc18a | Christos KK Loverdos | } |
75 | dc8cc18a | Christos KK Loverdos | |
76 | dc8cc18a | Christos KK Loverdos | /**
|
77 | dc8cc18a | Christos KK Loverdos | * The widget's constructor.
|
78 | dc8cc18a | Christos KK Loverdos | */
|
79 | dc8cc18a | Christos KK Loverdos | public GroupCreateDialog(final Pithos app, Command callback) { |
80 | 53f8abed | Christos Stathis | this.app = app;
|
81 | 5ec7b091 | Christos Stathis | this.callback = callback;
|
82 | dc8cc18a | Christos KK Loverdos | |
83 | dc8cc18a | Christos KK Loverdos | Anchor close = new Anchor("close"); |
84 | dc8cc18a | Christos KK Loverdos | close.addStyleName("close");
|
85 | dc8cc18a | Christos KK Loverdos | close.addClickHandler(new ClickHandler() {
|
86 | dc8cc18a | Christos KK Loverdos | |
87 | dc8cc18a | Christos KK Loverdos | @Override
|
88 | dc8cc18a | Christos KK Loverdos | public void onClick(ClickEvent event) { |
89 | dc8cc18a | Christos KK Loverdos | hide(); |
90 | dc8cc18a | Christos KK Loverdos | } |
91 | dc8cc18a | Christos KK Loverdos | }); |
92 | dc8cc18a | Christos KK Loverdos | |
93 | dc8cc18a | Christos KK Loverdos | setGlassEnabled(true);
|
94 | dc8cc18a | Christos KK Loverdos | setStyleName("pithos-DialogBox");
|
95 | dc8cc18a | Christos KK Loverdos | |
96 | dc8cc18a | Christos KK Loverdos | // Enable IE selection for the dialog (must disable it upon closing it)
|
97 | dc8cc18a | Christos KK Loverdos | Pithos.enableIESelection(); |
98 | dc8cc18a | Christos KK Loverdos | |
99 | dc8cc18a | Christos KK Loverdos | // Use this opportunity to set the dialog's caption.
|
100 | dc8cc18a | Christos KK Loverdos | setText("Create group");
|
101 | dc8cc18a | Christos KK Loverdos | |
102 | dc8cc18a | Christos KK Loverdos | // Outer contains inner and buttons
|
103 | dc8cc18a | Christos KK Loverdos | VerticalPanel outer = new VerticalPanel();
|
104 | dc8cc18a | Christos KK Loverdos | outer.add(close); |
105 | dc8cc18a | Christos KK Loverdos | // Inner contains generalPanel and permPanel
|
106 | dc8cc18a | Christos KK Loverdos | inner = new VerticalPanel();
|
107 | dc8cc18a | Christos KK Loverdos | inner.addStyleName("inner");
|
108 | dc8cc18a | Christos KK Loverdos | |
109 | dc8cc18a | Christos KK Loverdos | VerticalPanel generalPanel = new VerticalPanel();
|
110 | 53f8abed | Christos Stathis | FlexTable generalTable = new FlexTable();
|
111 | 53f8abed | Christos Stathis | generalTable.setText(0, 0, "Name"); |
112 | 53f8abed | Christos Stathis | |
113 | dc8cc18a | Christos KK Loverdos | generalTable.setWidget(0, 1, groupName); |
114 | 53f8abed | Christos Stathis | |
115 | 53f8abed | Christos Stathis | generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels"); |
116 | 53f8abed | Christos Stathis | generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values"); |
117 | 53f8abed | Christos Stathis | generalTable.setCellSpacing(4);
|
118 | 53f8abed | Christos Stathis | generalPanel.add(generalTable); |
119 | 53f8abed | Christos Stathis | inner.add(generalPanel); |
120 | 53f8abed | Christos Stathis | |
121 | 53f8abed | Christos Stathis | outer.add(inner); |
122 | 53f8abed | Christos Stathis | |
123 | dc8cc18a | Christos KK Loverdos | // Create the 'Create/Update' button, along with a listener that hides the dialog
|
124 | dc8cc18a | Christos KK Loverdos | // when the button is clicked and quits the application.
|
125 | dc8cc18a | Christos KK Loverdos | String okLabel = "Create"; |
126 | dc8cc18a | Christos KK Loverdos | final Button ok = new Button(okLabel, new ClickHandler() { |
127 | dc8cc18a | Christos KK Loverdos | @Override
|
128 | dc8cc18a | Christos KK Loverdos | public void onClick(ClickEvent event) { |
129 | dc8cc18a | Christos KK Loverdos | createGroup(); |
130 | dc8cc18a | Christos KK Loverdos | closeDialog(); |
131 | dc8cc18a | Christos KK Loverdos | } |
132 | dc8cc18a | Christos KK Loverdos | }); |
133 | dc8cc18a | Christos KK Loverdos | ok.addStyleName("button");
|
134 | dc8cc18a | Christos KK Loverdos | outer.add(ok); |
135 | 53f8abed | Christos Stathis | outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); |
136 | 53f8abed | Christos Stathis | |
137 | 53f8abed | Christos Stathis | setWidget(outer); |
138 | dc8cc18a | Christos KK Loverdos | } |
139 | dc8cc18a | Christos KK Loverdos | |
140 | dc8cc18a | Christos KK Loverdos | @Override
|
141 | dc8cc18a | Christos KK Loverdos | public void center() { |
142 | dc8cc18a | Christos KK Loverdos | super.center();
|
143 | dc8cc18a | Christos KK Loverdos | groupName.setFocus(true);
|
144 | dc8cc18a | Christos KK Loverdos | } |
145 | dc8cc18a | Christos KK Loverdos | |
146 | dc8cc18a | Christos KK Loverdos | @Override
|
147 | dc8cc18a | Christos KK Loverdos | protected void onPreviewNativeEvent(NativePreviewEvent preview) { |
148 | dc8cc18a | Christos KK Loverdos | super.onPreviewNativeEvent(preview);
|
149 | dc8cc18a | Christos KK Loverdos | |
150 | dc8cc18a | Christos KK Loverdos | NativeEvent evt = preview.getNativeEvent(); |
151 | dc8cc18a | Christos KK Loverdos | if (evt.getType().equals(KeyDownEvent.getType().getName()))
|
152 | dc8cc18a | Christos KK Loverdos | // Use the popup's key preview hooks to close the dialog when either
|
153 | dc8cc18a | Christos KK Loverdos | // enter or escape is pressed.
|
154 | dc8cc18a | Christos KK Loverdos | switch (evt.getKeyCode()) {
|
155 | dc8cc18a | Christos KK Loverdos | case KeyCodes.KEY_ENTER:
|
156 | dc8cc18a | Christos KK Loverdos | createGroup(); |
157 | 53f8abed | Christos Stathis | closeDialog(); |
158 | dc8cc18a | Christos KK Loverdos | break;
|
159 | dc8cc18a | Christos KK Loverdos | case KeyCodes.KEY_ESCAPE:
|
160 | dc8cc18a | Christos KK Loverdos | closeDialog(); |
161 | dc8cc18a | Christos KK Loverdos | break;
|
162 | dc8cc18a | Christos KK Loverdos | } |
163 | dc8cc18a | Christos KK Loverdos | } |
164 | dc8cc18a | Christos KK Loverdos | |
165 | dc8cc18a | Christos KK Loverdos | |
166 | dc8cc18a | Christos KK Loverdos | /**
|
167 | dc8cc18a | Christos KK Loverdos | * Enables IE selection prevention and hides the dialog
|
168 | dc8cc18a | Christos KK Loverdos | * (we disable the prevention on creation of the dialog)
|
169 | dc8cc18a | Christos KK Loverdos | */
|
170 | dc8cc18a | Christos KK Loverdos | public void closeDialog() { |
171 | dc8cc18a | Christos KK Loverdos | Pithos.preventIESelection(); |
172 | dc8cc18a | Christos KK Loverdos | hide(); |
173 | dc8cc18a | Christos KK Loverdos | if (callback != null) |
174 | dc8cc18a | Christos KK Loverdos | callback.execute(); |
175 | dc8cc18a | Christos KK Loverdos | } |
176 | dc8cc18a | Christos KK Loverdos | |
177 | dc8cc18a | Christos KK Loverdos | /**
|
178 | dc8cc18a | Christos KK Loverdos | * Generate an RPC request to create a new folder.
|
179 | dc8cc18a | Christos KK Loverdos | */
|
180 | dc8cc18a | Christos KK Loverdos | void createGroup() {
|
181 | dc8cc18a | Christos KK Loverdos | String name = groupName.getText().trim();
|
182 | dc8cc18a | Christos KK Loverdos | if (name.length() == 0) |
183 | dc8cc18a | Christos KK Loverdos | return;
|
184 | dc8cc18a | Christos KK Loverdos | Group group = app.addGroup(name);
|
185 | dc8cc18a | Christos KK Loverdos | |
186 | dc8cc18a | Christos KK Loverdos | new AddUserCommand(app, null, group).execute(); |
187 | dc8cc18a | Christos KK Loverdos | } |
188 | 53f8abed | Christos Stathis | } |