001 /* 002 * Copyright 2012 GWT-Bootstrap 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package com.github.gwtbootstrap.client.ui; 017 018 import com.github.gwtbootstrap.client.ui.base.HasStyle; 019 import com.github.gwtbootstrap.client.ui.base.IsResponsive; 020 import com.github.gwtbootstrap.client.ui.base.ResponsiveHelper; 021 import com.github.gwtbootstrap.client.ui.base.StyleHelper; 022 import com.github.gwtbootstrap.client.ui.constants.Device; 023 import com.google.gwt.core.client.GWT; 024 import com.google.gwt.resources.client.CssResource.ImportedWithPrefix; 025 import com.google.gwt.resources.client.ImageResource; 026 import com.google.gwt.user.client.ui.Image; 027 import com.google.gwt.user.client.ui.Widget; 028 import com.google.gwt.view.client.ProvidesKey; 029 030 /** 031 * 032 * CellTable for Bootstrap style. 033 * 034 * @since 2.0.4.0 035 * @author ohashi keisuke 036 * 037 * @param <T> 038 * Data Set 039 */ 040 public class CellTable<T> extends 041 com.google.gwt.user.cellview.client.CellTable<T> implements HasStyle, 042 IsResponsive { 043 044 public static enum TableType implements 045 com.github.gwtbootstrap.client.ui.base.Style { 046 BORDERED("table-bordered"), STRIPED("table-striped"), CONDENSED( 047 "table-condensed"); 048 049 private final String styleName; 050 051 private TableType(String styleName) { 052 this.styleName = styleName; 053 } 054 055 @Override 056 public String get() { 057 return styleName; 058 } 059 } 060 061 /** 062 * The default page size. 063 */ 064 private static final int DEFAULT_PAGESIZE = 15; 065 066 private static Resources DEFAULT_RESOURCES = null; 067 068 private static Resources getDefaultResources() { 069 if (DEFAULT_RESOURCES == null) { 070 DEFAULT_RESOURCES = GWT.create(Resources.class); 071 } 072 return DEFAULT_RESOURCES; 073 } 074 075 public interface Resources extends 076 com.google.gwt.user.cellview.client.CellTable.Resources { 077 078 @Override 079 @Source(Style.DEFAULT_CSS) 080 public Style cellTableStyle(); 081 } 082 083 public interface SelectableResources extends Resources { 084 085 @Override 086 @Source(SelectableStyle.DEFAULT_CSS) 087 public Style cellTableStyle(); 088 } 089 090 @ImportedWithPrefix("gwt-bootstrap-cellTable") 091 public interface Style extends 092 com.google.gwt.user.cellview.client.CellTable.Style { 093 094 String DEFAULT_CSS = "com/github/gwtbootstrap/client/ui/GwtBootstrapCellTable.css"; 095 } 096 097 @ImportedWithPrefix("gwt-bootstrap-cellTable") 098 public interface SelectableStyle extends 099 com.google.gwt.user.cellview.client.CellTable.Style { 100 101 String DEFAULT_CSS = "com/github/gwtbootstrap/client/ui/GwtBootstrapCellTableSelectable.css"; 102 } 103 104 public CellTable() { 105 this(DEFAULT_PAGESIZE); 106 } 107 108 public CellTable(int pageSize, Resources resources, 109 ProvidesKey<T> keyProvider, Widget loadingIndicator) { 110 super(pageSize, resources, keyProvider, loadingIndicator); 111 setStyleName("table"); 112 } 113 114 public CellTable(int pageSize, 115 Resources resources, 116 ProvidesKey<T> keyProvider) { 117 this(pageSize, resources, keyProvider, createDefaultLoadingIndicator(getDefaultResources())); 118 } 119 120 public CellTable(int pageSize, Resources resources) { 121 this(pageSize, resources , null); 122 } 123 124 public CellTable(int pageSize, ProvidesKey<T> keyProvider) { 125 this(pageSize, keyProvider, createDefaultLoadingIndicator(getDefaultResources())); 126 } 127 128 public CellTable(int pageSize, ProvidesKey<T> keyProvider, Widget loadingIndicator) { 129 this(pageSize, getDefaultResources(), keyProvider, loadingIndicator); 130 } 131 132 public CellTable(int pageSize) { 133 this(pageSize, getDefaultResources()); 134 } 135 136 public CellTable(ProvidesKey<T> keyProvider) { 137 this(DEFAULT_PAGESIZE, keyProvider); 138 } 139 140 public void setStriped(boolean striped) { 141 if (striped) { 142 StyleHelper.addStyle(this, TableType.STRIPED); 143 } else { 144 StyleHelper.removeStyle(this, TableType.STRIPED); 145 } 146 } 147 148 public void setBordered(boolean bordered) { 149 if (bordered) { 150 StyleHelper.addStyle(this, TableType.BORDERED); 151 } else { 152 StyleHelper.removeStyle(this, TableType.BORDERED); 153 } 154 } 155 156 public void setCondensed(boolean condensed) { 157 if (condensed) { 158 StyleHelper.addStyle(this, TableType.CONDENSED); 159 } else { 160 StyleHelper.removeStyle(this, TableType.CONDENSED); 161 } 162 } 163 164 /** 165 * Create the default loading indicator using the loading image in the 166 * specified {@link Resources}. 167 * 168 * @param resources 169 * the resources 170 * @return a widget loading indicator 171 */ 172 private static Widget createDefaultLoadingIndicator(Resources resources) { 173 ImageResource loadingImg = resources.cellTableLoading(); 174 return (loadingImg == null) ? null : new Image(loadingImg); 175 } 176 177 /** 178 * {@inheritDoc} 179 */ 180 @Override 181 public void setShowOn(Device device) { 182 ResponsiveHelper.setShowOn(this, device); 183 } 184 185 /** 186 * {@inheritDoc} 187 */ 188 @Override 189 public void setHideOn(Device device) { 190 ResponsiveHelper.setHideOn(this, device); 191 192 } 193 194 /** 195 * {@inheritDoc} 196 */ 197 @Override 198 public void setStyle(com.github.gwtbootstrap.client.ui.base.Style style) { 199 StyleHelper.setStyle(this, style); 200 201 } 202 203 /** 204 * {@inheritDoc} 205 */ 206 @Override 207 public void addStyle(com.github.gwtbootstrap.client.ui.base.Style style) { 208 StyleHelper.addStyle(this, style); 209 210 } 211 212 /** 213 * {@inheritDoc} 214 */ 215 @Override 216 public void removeStyle(com.github.gwtbootstrap.client.ui.base.Style style) { 217 StyleHelper.removeStyle(this, style); 218 219 } 220 }