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.DivWidget;
019 import com.github.gwtbootstrap.client.ui.base.HasSize;
020 import com.github.gwtbootstrap.client.ui.base.SizeHelper;
021 import com.github.gwtbootstrap.client.ui.config.Configurator;
022 import com.github.gwtbootstrap.client.ui.constants.Constants;
023 import com.google.gwt.uibinder.client.UiConstructor;
024 import com.google.gwt.user.client.ui.Widget;
025
026 //@formatter:off
027 /**
028 * Column of the Bootstrap grid system.
029 * <p>
030 * It has to be added to a {@link Row} or a {@link FluidRow}.
031 * </p>
032 *
033 * <p>
034 * <h3>UiBinder Usage:</h3>
035 *
036 * <pre>
037 * {@code
038 * <b:Column size="3">
039 * <b:Well />
040 * </b:Column>}
041 * </pre>
042 * Setting the <code>size</code> is mandatory.
043 * </p>
044 *
045 * @since 2.0.4.0
046 *
047 * @author Carlos Alexandro Becker
048 * @author Dominik Mayer
049 *
050 * @see <a href="http://twitter.github.com/bootstrap/scaffolding.html#gridSystem">Bootstrap documentation</a>
051 * @see Configurator#hasResponsiveDesign()
052 */
053 //@formatter:on
054 public class Column extends DivWidget implements HasSize {
055
056 private static final String OFFSET_ERROR_MESSAGE =
057 "The offset of the Column has to be between "
058 + Constants.MINIMUM_OFFSET + " and "
059 + Constants.MAXIMUM_OFFSET + "!";
060
061 /**
062 * Creates a new Column of given size.
063 *
064 * @param size
065 * the size of the Column in the Bootstrap grid system
066 */
067 @UiConstructor
068 public Column(int size) {
069 super();
070 setSize(size);
071 }
072
073 /**
074 * Creates a new Column of given size and with given offset.
075 *
076 * @param size
077 * the size of the Column in the Bootstrap grid system
078 * @param offset
079 * the offset from the left side
080 */
081 public Column(int size, int offset) {
082 this(size);
083 setOffset(offset);
084 }
085
086 /**
087 * Creates a new Column of given size, with given offset and widgets
088 *
089 * @param size
090 * the size of the Column in the Bootstrap grid system
091 * @param offset
092 * the offset from the left side
093 * @param widgets
094 * the widgets to be added to the Column
095 */
096 public Column(int size, int offset, Widget... widgets) {
097 this(size, offset);
098 add(widgets);
099 }
100
101 /**
102 * Creates a new Column of given size and with given widgets.
103 *
104 * @param size
105 * the size of the Column in the Bootstrap grid system
106 * @param widgets
107 * the widgets to be added to the Column
108 */
109 public Column(int size, Widget... widgets) {
110 this(size);
111 add(widgets);
112 }
113
114 /**
115 * Sets the size of the Column in the Bootstrap grid system.
116 *
117 * @param size
118 * the size of the Column
119 */
120 public void setSize(int size) {
121 SizeHelper.setSize(this, size);
122 }
123
124 /**
125 * Sets the offset of the Column from the left side.
126 *
127 * @param offset
128 * the offset in the Bootstrap grid system
129 */
130 public void setOffset(int offset) {
131 if (offset < Constants.MINIMUM_OFFSET)
132 throw new IllegalArgumentException(OFFSET_ERROR_MESSAGE);
133
134 if (offset > Constants.MAXIMUM_OFFSET)
135 throw new IllegalArgumentException(OFFSET_ERROR_MESSAGE);
136
137 addStyleName(Constants.OFFSET + offset);
138 }
139
140 /**
141 * Adds the provided widgets to the Column.
142 *
143 * @param widgets
144 * the widgets to be added
145 */
146 public void add(Widget... widgets) {
147 for (Widget widget : widgets) {
148 add(widget);
149 }
150 }
151 }