001package gwt.material.design.addins.client.tree.base.mixin; 002 003/* 004 * #%L 005 * GwtMaterial 006 * %% 007 * Copyright (C) 2015 GwtMaterialDesign 008 * %% 009 * Licensed under the Apache License, Version 2.0 (the "License"); 010 * you may not use this file except in compliance with the License. 011 * You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, software 016 * distributed under the License is distributed on an "AS IS" BASIS, 017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 018 * See the License for the specific language governing permissions and 019 * limitations under the License. 020 * #L% 021 */ 022 023import com.google.gwt.core.client.GWT; 024import com.google.gwt.event.logical.shared.CloseEvent; 025import com.google.gwt.event.logical.shared.OpenEvent; 026import com.google.gwt.event.logical.shared.SelectionEvent; 027import com.google.gwt.user.client.ui.Widget; 028import gwt.material.design.addins.client.stepper.base.mixin.AbstractMixin; 029import gwt.material.design.addins.client.tree.base.HasTreeItems; 030import gwt.material.design.addins.client.tree.MaterialTree; 031import gwt.material.design.addins.client.tree.MaterialTreeItem; 032import gwt.material.design.client.base.HasFontSize; 033 034import java.util.ArrayList; 035import java.util.List; 036 037/** 038 * @author kevzlou7979 039 */ 040public class TreeItemMixin<T extends Widget & HasFontSize> extends AbstractMixin<T> implements HasTreeItems { 041 042 private boolean hide = true; 043 private List<MaterialTreeItem> treeItems = new ArrayList<>(); 044 private MaterialTree tree; 045 private MaterialTreeItem parentTree; 046 private Object object; 047 public TreeItemMixin(final T widget) { 048 super(widget); 049 } 050 051 052 @Override 053 public void initTreeItem() { 054 MaterialTreeItem item = (MaterialTreeItem) uiObject; 055 // Fire selection event 056 SelectionEvent.fire(getTree(), item); 057 if(!getTreeItems().isEmpty()) { 058 for (MaterialTreeItem treeItem : getTreeItems()) { 059 if (hide) { 060 treeItem.setVisible(false); 061 } else { 062 treeItem.setVisible(true); 063 } 064 } 065 // Firing of events based on the status of the tree item 066 if (hide) { 067 CloseEvent.fire(getTree(), item); 068 hide = false; 069 } else { 070 OpenEvent.fire(getTree(), item); 071 hide = true; 072 } 073 } 074 } 075 076 @Override 077 public void setParentTree(MaterialTreeItem parentTree) { 078 this.parentTree = parentTree; 079 } 080 081 @Override 082 public MaterialTreeItem getParentTree() { 083 return parentTree; 084 } 085 086 @Override 087 public void setTree(MaterialTree tree) { 088 this.tree = tree; 089 } 090 091 @Override 092 public MaterialTree getTree() { 093 return tree; 094 } 095 096 @Override 097 public void setTreeItems(List<MaterialTreeItem> treeItems) { 098 this.treeItems = treeItems; 099 } 100 101 @Override 102 public List<MaterialTreeItem> getTreeItems() { 103 return treeItems; 104 } 105 106 @Override 107 public void setObject(Object object) { 108 this.object = object; 109 } 110 111 @Override 112 public Object getObject() { 113 return object; 114 } 115 116 @Override 117 public void expand() { 118 for(MaterialTreeItem item : getTreeItems()){ 119 item.setVisible(true); 120 } 121 } 122 123 @Override 124 public void collapse() { 125 for(MaterialTreeItem item : getTreeItems()){ 126 item.setVisible(false); 127 } 128 } 129 130 public boolean isHide() { 131 return hide; 132 } 133 134 @Override 135 public void addItem(MaterialTreeItem item) { 136 getMaterialTreeItem().add(item); 137 getMaterialTreeItem().expand(); 138 getMaterialTreeItem().getTree().initTree(getMaterialTreeItem()); 139 } 140 141 @Override 142 public void removeItem(MaterialTreeItem item) { 143 getMaterialTreeItem().remove(item); 144 getMaterialTreeItem().getTree().initTree(getMaterialTreeItem()); 145 } 146 147 @Override 148 public void removeItem(int index) { 149 getMaterialTreeItem().remove(getMaterialTreeItem().getWidget(index)); 150 getMaterialTreeItem().getTree().initTree(getMaterialTreeItem()); 151 } 152 153 @Override 154 public void insertItem(MaterialTreeItem item, int index) { 155 getMaterialTreeItem().insert(item, index); 156 getMaterialTreeItem().expand(); 157 getMaterialTreeItem().getTree().initTree(getMaterialTreeItem()); 158 } 159 160 @Override 161 public void removeFromTree() { 162 getMaterialTreeItem().removeFromParent(); 163 getMaterialTreeItem().getTree().initTree(getMaterialTreeItem()); 164 } 165 166 public void setHide(boolean hide) { 167 this.hide = hide; 168 } 169 170 protected MaterialTreeItem getMaterialTreeItem(){ 171 if(uiObject instanceof MaterialTreeItem){ 172 return (MaterialTreeItem)uiObject; 173 }else{ 174 GWT.log("Widget is not instanceof MaterialTreeItem"); 175 return null; 176 } 177 } 178}