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 */
016package com.github.gwtbootstrap.client.ui;
017
018import com.github.gwtbootstrap.client.ui.base.HoverBase;
019import com.github.gwtbootstrap.client.ui.constants.Placement;
020import com.github.gwtbootstrap.client.ui.constants.Trigger;
021import com.github.gwtbootstrap.client.ui.constants.VisibilityChange;
022import com.google.gwt.dom.client.Element;
023import com.google.gwt.user.client.ui.Widget;
024
025//@formatter:off
026/**
027 * Link with a small tooltip with additional information.
028 * <p>
029 * Technically it's an html {@code <a>} tag. The text of the popup will be the
030 * content of the anchor's <code>title</code> attribute. 
031 * 
032 * @since 2.0.4.0
033 * 
034 * @author Dominik Mayer
035 * 
036 * @see <a href="http://twitter.github.com/bootstrap/javascript.html#tooltips">Bootstrap documentation</a>
037 * @see Popover
038 */
039//@formatter:on
040public class Tooltip extends HoverBase {
041
042        private String tooltip;
043
044        /**
045         * Creates an empty link without text and tooltip text.
046         */
047        public Tooltip() {
048                super();
049        }
050
051        /**
052         * Creates a link with the
053         * 
054         * @param tooltip get
055         */
056        public Tooltip(String tooltip) {
057                this();
058                setText(tooltip);
059        }
060
061        /**
062         * Sets the text that should appear in the tooltip.
063         * 
064         * @param tooltop
065         *            the text
066         */
067        public void setText(String tooltop) {
068                this.tooltip = tooltop;
069        }
070        
071        public String getText() {
072                return this.tooltip;
073        }
074
075        /**
076         * {@inheritDoc}
077         */
078        @Override
079        public void reconfigure() {
080                
081                removeDataIfExists();
082                
083                setDataAttribute(getWidget().getElement(), "original-title", tooltip);
084                
085                configure(getWidget().getElement(), getAnimation(), getPlacement().get(),
086                                getTrigger().get(), getShowDelay(), getHideDelay());
087        }
088
089        /**
090         * {@inheritDoc}
091         */
092        @Override
093        protected void changeVisibility(VisibilityChange visibilityChange) {
094                changeVisibility(getWidget().getElement(), visibilityChange.get());
095        }
096        
097        /**
098         * 
099         * @param e
100         * @param animated
101         * @param placement
102         * @param trigger
103         * @param showDelay
104         * @param hideDelay
105         */
106        public static void configure(Widget e,boolean animated,Placement placement,Trigger trigger,int showDelay,int hideDelay) {
107                configure(e.getElement(), animated, placement.get(),trigger.get(), showDelay, hideDelay);
108        }
109
110        //@formatter:off
111        public static native void configure(String selector,String text, boolean animated,
112            String placement, String trigger, int showDelay, int hideDelay) /*-{
113        $wnd.jQuery(selector).tooltip({
114            title : text,
115            animation : animated,
116            placement : placement,
117            trigger : trigger,
118            delay : {
119                show : showDelay,
120                hide : hideDelay
121            }
122        });
123    }-*/;
124        
125        public static native void configure(Element element, boolean animated,
126                        String placement, String trigger, int showDelay, int hideDelay) /*-{
127                $wnd.jQuery(element).tooltip({
128                        animation : animated,
129                        placement : placement,
130                        trigger : trigger,
131                        delay : {
132                                show : showDelay,
133                                hide : hideDelay
134                        }
135                });
136        }-*/;
137
138        public static native void changeVisibility(Element e, String visibility) /*-{
139                $wnd.jQuery(e).tooltip(visibility);
140        }-*/;   
141        //@formatter:on
142
143        /**
144         * {@inheritDoc}
145         */
146        @Override
147        protected String getDataName() {
148                return "tooltip";
149        }
150
151}