ItEr29S06CUAsignacionGrupoRecursosAPlanificacionItEr28S06: [Refactoring] Open all criterions when being rendered for the first time
This commit is contained in:
parent
d0a2047cb6
commit
c193fd4e46
3 changed files with 90 additions and 46 deletions
|
|
@ -30,6 +30,7 @@ import org.navalplanner.business.resources.entities.CriterionType;
|
|||
import org.navalplanner.business.resources.entities.Worker;
|
||||
import org.navalplanner.web.common.components.WorkerSearch;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.zkoss.lang.Objects;
|
||||
import org.zkoss.zk.ui.Component;
|
||||
import org.zkoss.zk.ui.event.Event;
|
||||
import org.zkoss.zk.ui.event.EventListener;
|
||||
|
|
@ -46,7 +47,10 @@ import org.zkoss.zul.SimpleTreeNode;
|
|||
import org.zkoss.zul.Textbox;
|
||||
import org.zkoss.zul.Tree;
|
||||
import org.zkoss.zul.TreeModel;
|
||||
import org.zkoss.zul.Treecell;
|
||||
import org.zkoss.zul.Treeitem;
|
||||
import org.zkoss.zul.TreeitemRenderer;
|
||||
import org.zkoss.zul.Treerow;
|
||||
|
||||
/**
|
||||
* Controller for searching for {@link Worker}
|
||||
|
|
@ -67,6 +71,8 @@ public class WorkerSearchController extends GenericForwardComposer {
|
|||
|
||||
private Listbox listBoxWorkers;
|
||||
|
||||
CriterionRenderer criterionRenderer = new CriterionRenderer();
|
||||
|
||||
public WorkerSearchController() {
|
||||
|
||||
}
|
||||
|
|
@ -96,16 +102,11 @@ public class WorkerSearchController extends GenericForwardComposer {
|
|||
});
|
||||
}
|
||||
|
||||
// Feed criterionsTree with criterions
|
||||
if (criterionsTree.getModel() == null) {
|
||||
criterionsTree.setModel(getCriterions());
|
||||
}
|
||||
|
||||
// Set renderer for listboxWorkers
|
||||
if (listBoxWorkers.getItemRenderer() == null) {
|
||||
listBoxWorkers.setItemRenderer(getListitemRenderer());
|
||||
}
|
||||
// Initialize components
|
||||
criterionsTree.setTreeitemRenderer(criterionRenderer);
|
||||
listBoxWorkers.setItemRenderer(getListitemRenderer());
|
||||
|
||||
// Show all workers
|
||||
refreshListBoxWorkers(workerSearchModel.getAllWorkers());
|
||||
}
|
||||
|
||||
|
|
@ -315,4 +316,49 @@ public class WorkerSearchController extends GenericForwardComposer {
|
|||
item.appendChild(listName);
|
||||
}
|
||||
}
|
||||
|
||||
public CriterionRenderer getCriterionRenderer() {
|
||||
return criterionRenderer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render for criterionsTree
|
||||
*
|
||||
* I had to implement a renderer for the Tree, for settin open to tree for
|
||||
* each treeitem while being rendered.
|
||||
*
|
||||
* I tried to do this by iterating through the list of items after setting
|
||||
* model in doAfterCompose, but I got a ConcurrentModificationException. It
|
||||
* seems that at that point some other component was using the list of item,
|
||||
* so it was not possible to modify it. There's not other point where to
|
||||
* initialize components but doAfterCompose.
|
||||
*
|
||||
* Finally, I tried this solution and it works
|
||||
*
|
||||
* @author Diego Pino Garcia <dpino@igalia.com>
|
||||
*
|
||||
*/
|
||||
private class CriterionRenderer implements TreeitemRenderer {
|
||||
|
||||
/**
|
||||
* Copied verbatim from org.zkoss.zul.Tree;
|
||||
*/
|
||||
@Override
|
||||
public void render(Treeitem ti, Object node) throws Exception {
|
||||
Treecell tc = new Treecell(Objects.toString(node));
|
||||
Treerow tr = null;
|
||||
ti.setValue(node);
|
||||
if (ti.getTreerow() == null) {
|
||||
tr = new Treerow();
|
||||
tr.setParent(ti);
|
||||
ti.setOpen(true); // Expand node
|
||||
} else {
|
||||
tr = ti.getTreerow();
|
||||
tr.getChildren().clear();
|
||||
}
|
||||
tc.setParent(tr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -145,12 +145,12 @@
|
|||
</listhead>
|
||||
</listbox>
|
||||
|
||||
<workerSearch />
|
||||
|
||||
<hbox>
|
||||
<button label="${i18n:_('Accept')}" onClick="allocationController.accept()" />
|
||||
<button label="${i18n:_('Apply')}" id="applyButton"/>
|
||||
<button label="${i18n:_('Cancel')}" onClick="allocationController.cancel()" />
|
||||
<button label="${i18n:_('Search resources...')}"
|
||||
onClick="allocationController.showSearchResources()" />
|
||||
<button label="${i18n:_('Advance allocation')}" onClick="allocationController.advanceAllocation();"/>
|
||||
</hbox>
|
||||
</window>
|
||||
|
|
|
|||
|
|
@ -18,43 +18,41 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<window self="@{define(content)}" id="workerSearch"
|
||||
apply="org.navalplanner.web.resources.search.WorkerSearchController"
|
||||
title="${i18n:_('Search worker')}" closable="true" visible="false">
|
||||
<vbox apply="org.navalplanner.web.resources.search.WorkerSearchController">
|
||||
|
||||
<hbox style="margin-top: 3px">
|
||||
<vbox style="margin-right: 5px">
|
||||
<!-- Name -->
|
||||
<label value="${i18n:_('Name/ID')}" />
|
||||
<textbox id="txtName"
|
||||
onChanging="controller.searchWorkers(event)" />
|
||||
<hbox>
|
||||
<vbox>
|
||||
<!-- Name -->
|
||||
<label value="${i18n:_('Name/ID')}" />
|
||||
<textbox id="txtName"
|
||||
onChanging="controller.searchWorkers(event)" />
|
||||
|
||||
<!-- Criterions -->
|
||||
<label value="${i18n:_('Criterions')}" />
|
||||
<tree id="criterionsTree" width="280px"
|
||||
model="@{controller.criterions}" multiple="true">
|
||||
<treecols>
|
||||
<treecol label="Name" />
|
||||
</treecols>
|
||||
</tree>
|
||||
</vbox>
|
||||
<!--Matchings -->
|
||||
<listbox id="listBoxWorkers" width="200px" mold="paging"
|
||||
pageSize="10" rows="10" multiple="true"
|
||||
itemRenderer="@{controller.listitemRenderer}">
|
||||
<listhead>
|
||||
<listheader label="${i18n:_('Name')}" sort="auto" />
|
||||
<listheader label="${i18n:_('NIF')}" sort="auto" />
|
||||
</listhead>
|
||||
</listbox>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<!--Matchings -->
|
||||
<listbox id="listBoxWorkers" width="200px" mold="paging"
|
||||
pageSize="10" rows="10" multiple="true"
|
||||
itemRenderer="@{controller.listitemRenderer}">
|
||||
<listhead>
|
||||
<listheader label="${i18n:_('Name')}" sort="auto" />
|
||||
<listheader label="${i18n:_('NIF')}" sort="auto" />
|
||||
</listhead>
|
||||
</listbox>
|
||||
</vbox>
|
||||
</hbox>
|
||||
|
||||
<hbox>
|
||||
<button style="margin-top: 5px" label="${i18n:_('Accept')}"
|
||||
onClick="controller.onAccept(event)" />
|
||||
<vbox>
|
||||
<!-- Criterions -->
|
||||
<label value="${i18n:_('Criterions')}" />
|
||||
<tree id="criterionsTree" width="280px"
|
||||
model="@{controller.criterions}"
|
||||
multiple="true">
|
||||
<treecols>
|
||||
<treecol label="Name" />
|
||||
</treecols>
|
||||
</tree>
|
||||
</vbox>
|
||||
</hbox>
|
||||
|
||||
</window>
|
||||
<hbox>
|
||||
<button label="${i18n:_('Accept')}"
|
||||
onClick="controller.onAccept(event)" />
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue