Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(590)

Side by Side Diff: frontend/client/src/autotest/common/ui/MultiListSelectPresenter.java

Issue 3541002: Revert "Merge remote branch 'cros/upstream' into tempbranch2" (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/autotest.git
Patch Set: Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 package autotest.common.ui; 1 package autotest.common.ui;
2 2
3 import com.google.gwt.event.dom.client.ChangeEvent; 3 import com.google.gwt.event.dom.client.ChangeEvent;
4 import com.google.gwt.event.dom.client.ChangeHandler; 4 import com.google.gwt.event.dom.client.ChangeHandler;
5 import com.google.gwt.event.dom.client.ClickEvent; 5 import com.google.gwt.event.dom.client.ClickEvent;
6 import com.google.gwt.event.dom.client.ClickHandler; 6 import com.google.gwt.event.dom.client.ClickHandler;
7 import com.google.gwt.event.dom.client.DoubleClickEvent; 7 import com.google.gwt.event.dom.client.DoubleClickEvent;
8 import com.google.gwt.event.dom.client.DoubleClickHandler; 8 import com.google.gwt.event.dom.client.DoubleClickHandler;
9 import com.google.gwt.event.dom.client.HasClickHandlers; 9 import com.google.gwt.event.dom.client.HasClickHandlers;
10 import com.google.gwt.event.shared.GwtEvent; 10 import com.google.gwt.event.shared.GwtEvent;
(...skipping 14 matching lines...) Expand all
25 public HasClickHandlers getRemoveButton(); 25 public HasClickHandlers getRemoveButton();
26 public HasClickHandlers getRemoveAllButton(); 26 public HasClickHandlers getRemoveAllButton();
27 public HasClickHandlers getMoveUpButton(); 27 public HasClickHandlers getMoveUpButton();
28 public HasClickHandlers getMoveDownButton(); 28 public HasClickHandlers getMoveDownButton();
29 public SimplifiedList getAvailableList(); 29 public SimplifiedList getAvailableList();
30 public SimplifiedList getSelectedList(); 30 public SimplifiedList getSelectedList();
31 // ListBoxes don't support DoubleClickEvents themselves, so the display needs to handle them 31 // ListBoxes don't support DoubleClickEvents themselves, so the display needs to handle them
32 public HandlerRegistration addDoubleClickHandler(DoubleClickHandler hand ler); 32 public HandlerRegistration addDoubleClickHandler(DoubleClickHandler hand ler);
33 } 33 }
34 34
35 /* Optional additional display allowing toggle between a simple ListBox and a 35 /* Optional additional display allowing toggle between a simple ListBox and a
36 * DoubleListSelector 36 * DoubleListSelector
37 */ 37 */
38 public interface ToggleDisplay { 38 public interface ToggleDisplay {
39 public SimplifiedList getSingleSelector(); 39 public SimplifiedList getSingleSelector();
40 public ToggleControl getToggleMultipleLink(); 40 public ToggleControl getToggleMultipleLink();
41 public void setDoubleListVisible(boolean doubleListVisible); 41 public void setDoubleListVisible(boolean doubleListVisible);
42 } 42 }
43 43
44 public interface GeneratorHandler { 44 public interface GeneratorHandler {
45 /** 45 /**
46 * The given generated Item was just deselected; handle any necessary cl eanup. 46 * The given generated Item was just deselected; handle any necessary cl eanup.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 86
87 @Override 87 @Override
88 public int hashCode() { 88 public int hashCode() {
89 return name.hashCode(); 89 return name.hashCode();
90 } 90 }
91 91
92 @Override 92 @Override
93 public String toString() { 93 public String toString() {
94 return "Item<" + name + ", " + value + ">"; 94 return "Item<" + name + ", " + value + ">";
95 } 95 }
96 96
97 private boolean isSelected() { 97 private boolean isSelected() {
98 if (isGeneratedItem) { 98 if (isGeneratedItem) {
99 return true; 99 return true;
100 } 100 }
101 return selected; 101 return selected;
102 } 102 }
103 103
104 private void setSelected(boolean selected) { 104 private void setSelected(boolean selected) {
105 assert !isGeneratedItem; 105 assert !isGeneratedItem;
106 this.selected = selected; 106 this.selected = selected;
107 } 107 }
108 } 108 }
109 109
110 /** 110 /**
111 * Null object to support displays that don't do toggling. 111 * Null object to support displays that don't do toggling.
112 */ 112 */
113 private static class NullToggleDisplay implements ToggleDisplay { 113 private static class NullToggleDisplay implements ToggleDisplay {
(...skipping 17 matching lines...) Expand all
131 131
132 @Override 132 @Override
133 public void selectByName(String name) { 133 public void selectByName(String name) {
134 return; 134 return;
135 } 135 }
136 136
137 @Override 137 @Override
138 public HandlerRegistration addChangeHandler(ChangeHandler handle r) { 138 public HandlerRegistration addChangeHandler(ChangeHandler handle r) {
139 throw new UnsupportedOperationException(); 139 throw new UnsupportedOperationException();
140 } 140 }
141
142 @Override
143 public void setEnabled(boolean enabled) {
144 throw new UnsupportedOperationException();
145 }
146 }; 141 };
147 } 142 }
148 143
149 @Override 144 @Override
150 public ToggleControl getToggleMultipleLink() { 145 public ToggleControl getToggleMultipleLink() {
151 return new ToggleControl() { 146 return new ToggleControl() {
152 @Override 147 @Override
153 public HandlerRegistration addClickHandler(ClickHandler handler) { 148 public HandlerRegistration addClickHandler(ClickHandler handler) {
154 throw new UnsupportedOperationException(); 149 throw new UnsupportedOperationException();
155 } 150 }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 this.toggleDisplay = toggleDisplay; 198 this.toggleDisplay = toggleDisplay;
204 toggleDisplay.getSingleSelector().addChangeHandler(this); 199 toggleDisplay.getSingleSelector().addChangeHandler(this);
205 toggleDisplay.getToggleMultipleLink().addClickHandler(this); 200 toggleDisplay.getToggleMultipleLink().addClickHandler(this);
206 toggleDisplay.getToggleMultipleLink().setActive(false); 201 toggleDisplay.getToggleMultipleLink().setActive(false);
207 } 202 }
208 203
209 private boolean verifyConsistency() { 204 private boolean verifyConsistency() {
210 // check consistency of selectedItems 205 // check consistency of selectedItems
211 for (Item item : items) { 206 for (Item item : items) {
212 if (item.isSelected() && !selectedItems.contains(item)) { 207 if (item.isSelected() && !selectedItems.contains(item)) {
213 throw new RuntimeException("selectedItems is inconsistent, missi ng: " 208 throw new RuntimeException("selectedItems is inconsistent, missi ng: "
214 + item.toString()); 209 + item.toString());
215 } 210 }
216 } 211 }
217 return true; 212 return true;
218 } 213 }
219 214
220 public void addItem(Item item) { 215 public void addItem(Item item) {
221 if (item.isGeneratedItem && isItemPresent(item)) { 216 if (item.isGeneratedItem && isItemPresent(item)) {
222 return; 217 return;
223 } 218 }
224 items.add(item); 219 items.add(item);
225 Collections.sort(items); 220 Collections.sort(items);
226 if (item.isSelected()) { 221 if (item.isSelected()) {
227 selectedItems.add(item); 222 selectedItems.add(item);
228 } 223 }
229 assert verifyConsistency(); 224 assert verifyConsistency();
230 refresh(); 225 refresh();
231 } 226 }
232 227
233 private boolean isItemPresent(Item item) { 228 private boolean isItemPresent(Item item) {
234 return Collections.binarySearch(items, item) >= 0; 229 return Collections.binarySearch(items, item) >= 0;
235 } 230 }
236 231
237 private void removeItem(Item item) { 232 private void removeItem(Item item) {
238 items.remove(item); 233 items.remove(item);
239 if (item.isSelected()) { 234 if (item.isSelected()) {
240 selectedItems.remove(item); 235 selectedItems.remove(item);
241 } 236 }
242 assert verifyConsistency(); 237 assert verifyConsistency();
243 refresh(); 238 refresh();
244 } 239 }
245 240
246 public void clearItems() { 241 public void clearItems() {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 } 287 }
293 refreshSingleSelector(); 288 refreshSingleSelector();
294 } 289 }
295 } 290 }
296 291
297 private void selectItem(Item item) { 292 private void selectItem(Item item) {
298 item.setSelected(true); 293 item.setSelected(true);
299 selectedItems.add(item); 294 selectedItems.add(item);
300 assert verifyConsistency(); 295 assert verifyConsistency();
301 } 296 }
302 297
303 public void selectItemByName(String name) { 298 public void selectItemByName(String name) {
304 selectItem(getItemByName(name)); 299 selectItem(getItemByName(name));
305 refresh(); 300 refresh();
306 } 301 }
307 302
308 /** 303 /**
309 * Set the set of selected items by specifying item names. All names must e xist in the set of 304 * Set the set of selected items by specifying item names. All names must e xist in the set of
310 * header fields. 305 * header fields.
311 */ 306 */
312 public void setSelectedItemsByName(List<String> names) { 307 public void setSelectedItemsByName(List<String> names) {
(...skipping 11 matching lines...) Expand all
324 } 319 }
325 } 320 }
326 321
327 if (selectedItems.size() < 2) { 322 if (selectedItems.size() < 2) {
328 switchToSingle(); 323 switchToSingle();
329 } 324 }
330 refresh(); 325 refresh();
331 } 326 }
332 327
333 /** 328 /**
334 * Set the set of selected items, silently dropping any that don't exist in the header field 329 * Set the set of selected items, silently dropping any that don't exist in the header field
335 * list. 330 * list.
336 */ 331 */
337 public void restoreSelectedItems(List<Item> items) { 332 public void restoreSelectedItems(List<Item> items) {
338 List<String> currentItems = new ArrayList<String>(); 333 List<String> currentItems = new ArrayList<String>();
339 for (Item item : items) { 334 for (Item item : items) {
340 if (hasItemName(item.name)) { 335 if (hasItemName(item.name)) {
341 currentItems.add(item.name); 336 currentItems.add(item.name);
342 } 337 }
343 } 338 }
344 setSelectedItemsByName(currentItems); 339 setSelectedItemsByName(currentItems);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 } 382 }
388 383
389 private Item findItem(String name) { 384 private Item findItem(String name) {
390 for (Item item : items) { 385 for (Item item : items) {
391 if (item.name.equals(name)) { 386 if (item.name.equals(name)) {
392 return item; 387 return item;
393 } 388 }
394 } 389 }
395 return null; 390 return null;
396 } 391 }
397 392
398 public boolean hasItemName(String name) { 393 public boolean hasItemName(String name) {
399 return findItem(name) != null; 394 return findItem(name) != null;
400 } 395 }
401 396
402 @Override 397 @Override
403 public void onClick(ClickEvent event) { 398 public void onClick(ClickEvent event) {
404 boolean isItemSelectedOnLeft = display.getAvailableList().getSelectedNam e() != null; 399 boolean isItemSelectedOnLeft = (display.getAvailableList().getSelectedNa me() != null);
405 boolean isItemSelectedOnRight = display.getSelectedList().getSelectedNam e() != null; 400 boolean isItemSelectedOnRight = (display.getSelectedList().getSelectedNa me() != null);
406 Object source = event.getSource(); 401 Object source = event.getSource();
407 if (source == display.getAddAllButton()) { 402 if (source == display.getAddAllButton()) {
408 addAll(); 403 addAll();
409 } else if (source == display.getAddButton() && isItemSelectedOnLeft) { 404 } else if (source == display.getAddButton() && isItemSelectedOnLeft) {
410 doSelect(); 405 doSelect();
411 } else if (source == display.getRemoveButton() && isItemSelectedOnRight) { 406 } else if (source == display.getRemoveButton() && isItemSelectedOnRight) {
412 doDeselect(); 407 doDeselect();
413 } else if (source == display.getRemoveAllButton()) { 408 } else if (source == display.getRemoveAllButton()) {
414 deselectAll(); 409 deselectAll();
415 } else if ((source == display.getMoveUpButton() || source == display.get MoveDownButton()) 410 } else if ((source == display.getMoveUpButton() || source == display.get MoveDownButton())
416 && isItemSelectedOnRight) { 411 && isItemSelectedOnRight) {
417 reorderItem(source == display.getMoveUpButton()); 412 reorderItem(source == display.getMoveUpButton());
418 return; // don't refresh again or we'll mess up the user's selection 413 return; // don't refresh again or we'll mess up the user's selection
419 } else if (source == toggleDisplay.getToggleMultipleLink()) { 414 } else if (source == toggleDisplay.getToggleMultipleLink()) {
420 if (toggleDisplay.getToggleMultipleLink().isActive()) { 415 if (toggleDisplay.getToggleMultipleLink().isActive()) {
421 switchToMultiple(); 416 switchToMultiple();
422 } else { 417 } else {
423 switchToSingle(); 418 switchToSingle();
424 } 419 }
425 } else { 420 } else {
426 throw new RuntimeException("Unexpected ClickEvent from " + event.get Source()); 421 throw new RuntimeException("Unexpected ClickEvent from " + event.get Source());
427 } 422 }
428 423
429 refresh(); 424 refresh();
430 } 425 }
431 426
432 @Override 427 @Override
433 public void onDoubleClick(DoubleClickEvent event) { 428 public void onDoubleClick(DoubleClickEvent event) {
434 Object source = event.getSource(); 429 Object source = event.getSource();
435 if (source == display.getAvailableList()) { 430 if (source == display.getAvailableList()) {
436 doSelect(); 431 doSelect();
437 } else if (source == display.getSelectedList()) { 432 } else if (source == display.getSelectedList()) {
438 doDeselect(); 433 doDeselect();
439 } else { 434 } else {
440 // ignore double-clicks on other widgets 435 // ignore double-clicks on other widgets
441 return; 436 return;
442 } 437 }
443 438
444 refresh(); 439 refresh();
445 } 440 }
446 441
447 @Override 442 @Override
448 public void onChange(ChangeEvent event) { 443 public void onChange(ChangeEvent event) {
449 assert toggleDisplay != null; 444 assert toggleDisplay != null;
450 SimplifiedList selector = toggleDisplay.getSingleSelector(); 445 SimplifiedList selector = toggleDisplay.getSingleSelector();
451 assert event.getSource() == selector; 446 assert event.getSource() == selector;
452 // events should only come from the single selector when it's active 447 // events should only come from the single selector when it's active
453 assert !toggleDisplay.getToggleMultipleLink().isActive(); 448 assert !toggleDisplay.getToggleMultipleLink().isActive();
454 449
455 for (Item item : getItemsCopy()) { 450 for (Item item : getItemsCopy()) {
456 if (item.isSelected()) { 451 if (item.isSelected()) {
457 deselectItem(item); 452 deselectItem(item);
458 } else if (item.name.equals(selector.getSelectedName())) { 453 } else if (item.name.equals(selector.getSelectedName())) {
459 selectItem(item); 454 selectItem(item);
460 } 455 }
461 } 456 }
462 457
463 refresh(); 458 refresh();
464 } 459 }
465 460
466 /** 461 /**
467 * Selecting or deselecting items can add or remove items (due to generators ), so sometimes we 462 * Selecting or deselecting items can add or remove items (due to generators ), so sometimes we
468 * need to iterate over a copy. 463 * need to iterate over a copy.
469 */ 464 */
470 private Iterable<Item> getItemsCopy() { 465 private Iterable<Item> getItemsCopy() {
471 return new ArrayList<Item>(items); 466 return new ArrayList<Item>(items);
472 } 467 }
(...skipping 26 matching lines...) Expand all
499 Item item = getItemByName(display.getSelectedList().getSelectedName()); 494 Item item = getItemByName(display.getSelectedList().getSelectedName());
500 int positionDelta = moveUp ? -1 : 1; 495 int positionDelta = moveUp ? -1 : 1;
501 int newPosition = selectedItems.indexOf(item) + positionDelta; 496 int newPosition = selectedItems.indexOf(item) + positionDelta;
502 newPosition = Math.max(0, Math.min(selectedItems.size() - 1, newPosition )); 497 newPosition = Math.max(0, Math.min(selectedItems.size() - 1, newPosition ));
503 selectedItems.remove(item); 498 selectedItems.remove(item);
504 selectedItems.add(newPosition, item); 499 selectedItems.add(newPosition, item);
505 refresh(); 500 refresh();
506 display.getSelectedList().selectByName(item.name); 501 display.getSelectedList().selectByName(item.name);
507 } 502 }
508 } 503 }
OLDNEW
« no previous file with comments | « frontend/client/src/autotest/common/table/DynamicTable.java ('k') | frontend/client/src/autotest/common/ui/RadioChooser.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698