BrightSide Workbench Full Report + Source Code
DossierTypeCtrl.java
Go to the documentation of this file.
1 /*
2  * TurrĂ³ i Cutiller Foundation. License notice.
3  * Copyright (C) 2016 Lluis TurrĂ³ Cutiller <http://www.turro.org/>
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU Affero General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU Affero General Public License for more details.
14  *
15  * You should have received a copy of the GNU Affero General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 package org.turro.dossier.zul.dossier;
20 
21 import java.util.HashSet;
22 import java.util.Set;
23 import org.turro.dossier.entity.DossierType;
24 import org.turro.i18n.I_;
25 import org.turro.util.PhraseBuilder;
26 import org.zkoss.zk.ui.event.Event;
27 import org.zkoss.zk.ui.event.EventListener;
28 import org.zkoss.zk.ui.event.Events;
29 import org.zkoss.zk.ui.event.SelectEvent;
30 import org.zkoss.zul.Bandbox;
31 import org.zkoss.zul.Bandpopup;
32 import org.zkoss.zul.Listbox;
33 import org.zkoss.zul.Listhead;
34 import org.zkoss.zul.Listheader;
35 import org.zkoss.zul.Listitem;
36 
41 public class DossierTypeCtrl extends Bandbox {
42 
43  private Set<DossierType> typeSet = new HashSet<>();
44  private Listbox type;
45 
46  public DossierTypeCtrl() {
47  addPopup();
48  }
49 
50  public Set<DossierType> getTypeSet() {
51  return typeSet;
52  }
53 
54  public void setTypeSet(Set<DossierType> typeSet) {
55  this.typeSet = typeSet;
56  updateCheckMarks();
57  updateText();
58  }
59 
60  private void addPopup() {
61  setReadonly(true);
62 
63  Bandpopup popup = new Bandpopup();
64  appendChild(popup);
65 
66  type = new Listbox();
67  type.setWidth("300px");
68  type.setMultiple(true);
69  type.setCheckmark(true);
70  Listhead lh = new Listhead();
71  lh.appendChild(new Listheader(I_.get("Type")));
72  type.appendChild(lh);
73  type.addEventListener(Events.ON_SELECT, new EventListener() {
74  @Override
75  public void onEvent(Event event) throws Exception {
76  Set<Listitem> selected = ((SelectEvent) event).getSelectedItems();
77  if(selected != null) {
78  for(Listitem li : selected) {
79  typeSet.add((DossierType) li.getValue());
80  }
81  }
82  Set<Listitem> unselected = ((SelectEvent) event).getUnselectedItems();
83  if(unselected != null) {
84  for(Listitem li : unselected) {
85  typeSet.remove((DossierType) li.getValue());
86  }
87  }
88  updateText();
89  }
90  });
91  popup.appendChild(type);
92 
93  for(DossierType is : DossierType.values()) {
94  Listitem li = new Listitem(I_.byKey(is.toString()));
95  li.setValue(is);
96  type.appendChild(li);
97  }
98  }
99 
100  private void updateCheckMarks() {
101  for(Object obj : type.getChildren()) {
102  if(obj instanceof Listitem) {
103  Listitem li = (Listitem) obj;
104  li.setSelected(typeSet.contains(li.getValue()));
105  }
106  }
107  }
108 
109 
110  private void updateText() {
111  PhraseBuilder pb = new PhraseBuilder();
112  for(Object obj : type.getChildren()) {
113  if(obj instanceof Listitem) {
114  Listitem li = (Listitem) obj;
115  if(li.isSelected()) {
116  pb.addWord(I_.byKey(((DossierType) li.getValue()).toString()));
117  pb.addPendingSeparator(",");
118  }
119  }
120  }
121  Events.postEvent(new Event(Events.ON_CHANGE, DossierTypeCtrl.this));
122  setText(pb.toString());
123  }
124 }
125 
void setTypeSet(Set< DossierType > typeSet)
static String get(String msg)
Definition: I_.java:41