001package gwt.material.design.client.base;
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 gwt.material.design.client.base.mixin.FontSizeMixin;
024import gwt.material.design.client.base.mixin.IdMixin;
025import gwt.material.design.client.constants.Display;
026
027import com.google.gwt.dom.client.Element;
028import com.google.gwt.dom.client.Style;
029import com.google.gwt.editor.client.IsEditor;
030import com.google.gwt.editor.client.LeafValueEditor;
031import com.google.gwt.editor.ui.client.adapters.HasTextEditor;
032import com.google.gwt.user.client.ui.HasHTML;
033import com.google.gwt.user.client.ui.Widget;
034
035/**
036 * @author Ben Dol
037 */
038public abstract class AbstractTextWidget extends Widget implements HasId, HasHTML, HasInlineStyle,
039        IsEditor<LeafValueEditor<String>> {
040
041    private final IdMixin<AbstractTextWidget> idMixin = new IdMixin<>(this);
042    private LeafValueEditor<String> editor;
043
044    private final FontSizeMixin<AbstractTextWidget> fontSizeMixin = new FontSizeMixin<>(this);
045
046    protected AbstractTextWidget(final Element element) {
047        setElement(element);
048    }
049
050    @Override
051    public void setId(final String id) {
052        idMixin.setId(id);
053    }
054
055    @Override
056    public String getId() {
057        return idMixin.getId();
058    }
059
060    @Override
061    public void setText(final String text) {
062        getElement().setInnerText(text);
063    }
064
065    @Override
066    public String getText() {
067        return getElement().getInnerText();
068    }
069
070    @Override
071    public String getHTML() {
072        return getElement().getInnerHTML();
073    }
074
075    @Override
076    public void setHTML(final String html) {
077        getElement().setInnerHTML(html);
078    }
079
080    @Override
081    public void setMargin(double margin) {
082        getElement().getStyle().setMargin(margin, Style.Unit.PX);
083    }
084
085    @Override
086    public void setMarginTop(final double margin) {
087        getElement().getStyle().setMarginTop(margin, Style.Unit.PX);
088    }
089
090    @Override
091    public void setMarginLeft(final double margin) {
092        getElement().getStyle().setMarginLeft(margin, Style.Unit.PX);
093    }
094
095    @Override
096    public void setMarginRight(final double margin) {
097        getElement().getStyle().setMarginRight(margin, Style.Unit.PX);
098    }
099
100    @Override
101    public void setMarginBottom(final double margin) {
102        getElement().getStyle().setMarginBottom(margin, Style.Unit.PX);
103    }
104
105    @Override
106    public void setPadding(double padding) {
107        getElement().getStyle().setPadding(padding, Style.Unit.PX);
108    }
109
110    @Override
111    public void setPaddingTop(final double padding) {
112        getElement().getStyle().setPaddingTop(padding, Style.Unit.PX);
113    }
114
115    @Override
116    public void setPaddingLeft(final double padding) {
117        getElement().getStyle().setPaddingLeft(padding, Style.Unit.PX);
118    }
119
120    @Override
121    public void setPaddingRight(final double padding) {
122        getElement().getStyle().setPaddingRight(padding, Style.Unit.PX);
123    }
124
125    @Override
126    public void setPaddingBottom(final double padding) {
127        getElement().getStyle().setPaddingBottom(padding, Style.Unit.PX);
128    }
129
130    @Override
131    public void setBackgroundColor(String bgColor) {
132        getElement().getStyle().setBackgroundColor(bgColor);
133    }
134
135    @Override
136    public String getBackgroundColor() {
137        return getElement().getStyle().getBackgroundColor();
138    }
139
140    @Override
141    public void setTextColor(String textColor) {
142        getElement().getStyle().setColor(textColor);
143    }
144
145    @Override
146    public String getTextColor() {
147        return getElement().getStyle().getColor();
148    }
149
150    @Override
151    public void setFontSize(String fontSize) {
152        fontSizeMixin.setFontSize(fontSize);
153    }
154
155    @Override
156    public String getFontSize() {
157        return fontSizeMixin.getFontSize();
158    }
159
160    @Override
161    public void setFontSize(double fontSize, Style.Unit unit) {
162        fontSizeMixin.setFontSize(fontSize, unit);
163    }
164
165    @Override
166    public void setOpacity(double opacity) {
167        getElement().getStyle().setOpacity(opacity);
168    }
169
170    @Override
171    public double getOpacity() {
172        return Double.parseDouble(getElement().getStyle().getOpacity());
173    }
174
175    @Override
176    public void setDisplay(Display display) {
177        getElement().getStyle().setProperty("display", display.getCssName());
178    }
179
180    @Override
181    public LeafValueEditor<String> asEditor() {
182        if (editor == null) {
183            editor = HasTextEditor.of(this);
184        }
185        return editor;
186    }
187}