org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.wicket.extensions.ajax.markup.html.autocomplete;

import org.apache.wicket.util.io.IClusterable;

/**
 * This class encapsulates various settings for {@link AbstractAutoCompleteBehavior}. See the
 * documentation for the property accessors of this class for further information.
 * <p>
 * Default settings:
 * <table>
 * <tr>
 * <th>setting</th>
 * <th>default value</th>
 * </tr>
 * <tr>
 * <td>preselect</td>
 * <td>false</td>
 * </tr>
 * <tr>
 * <td>maxHeightInPx</td>
 * <td>-1</td>
 * </tr>
 * <tr>
 * <td>showListOnEmptyInput</td>
 * <td>false</td>
 * </tr>
 * </table>
 * </p>
 * 
 * @author Gerolf Seitz
 */
public final class AutoCompleteSettings implements IClusterable {
    private static final long serialVersionUID = 1L;

    private boolean preselect = false;

    private int maxHeightInPx = -1;

    private boolean showListOnEmptyInput = false;

    private boolean useSmartPositioning = false;

    private boolean ignoreBordersWhenPositioning = true;

    private String cssClassName = null;

    private boolean adjustInputWidth = true;

    private boolean showListOnFocusGain = false;

    private boolean showCompleteListOnFocusGain = false;

    private int throttleDelay = 300;

    private String parameterName = "q";

    private int minInputLength = 1;

    /**
     * Indicates whether the first item in the list is automatically selected when the autocomplete
     * list is shown.
     * 
     * @return true if the first item of the autocomplete list should be preselected, false
     *         (default) otherwise
     */
    public boolean getPreselect() {
        return preselect;
    }

    /**
     * Sets whether the first item in the autocomplete list should be selected when the autocomplete
     * list is shown.
     * 
     * @param preselect
     *            the flag
     * @return this {@link AutoCompleteSettings}
     */
    public AutoCompleteSettings setPreselect(final boolean preselect) {
        this.preselect = preselect;
        return this;
    }

    /**
     * set the throttle delay how long the browser will wait before sending a request to the browser
     * after the user released a key.
     * 
     * @param throttleDelay
     *            The delay in milliseconds.
     * @return this {@link AutoCompleteSettings}
     */
    public AutoCompleteSettings setThrottleDelay(final int throttleDelay) {
        this.throttleDelay = throttleDelay;
        return this;
    }

    /**
     * get the throttle delay how long the browser will wait before sending a request to the browser
     * after the user released a key.
     * 
     * @return the throttle delay in milliseconds (default 300)
     */
    public int getThrottleDelay() {
        return throttleDelay;
    }

    /**
     * Gets the maximum height of the autocomplete list in pixels. <code>-1</code> indicates that
     * the autocomplete list should have no maximum height.
     * 
     * @return the maximum height in pixels
     */
    public int getMaxHeightInPx() {
        return maxHeightInPx;
    }

    /**
     * Sets the maximum height in pixels of the autocomplete list.
     * <p>
     * The maximum height can also be specified via css (and by setting maxHeightInPx to -1):
     * 
     * <pre>
     * div.wicket-aa-container { maxHeight: 100px; }
     * </pre>
     * 
     * Note that this does not work in IE6.
     * </p>
     * 
     * @param maxHeightInPx
     *            the maximum height in pixels
     * @return this {@link AutoCompleteSettings}
     */
    public AutoCompleteSettings setMaxHeightInPx(final int maxHeightInPx) {
        this.maxHeightInPx = maxHeightInPx;
        return this;
    }

    /**
     * Indicates whether the popup positioning will take into account the borders of the input
     * element and its ancestors.
     * 
     * @return true if borders are ignored, false otherwise.
     */
    public boolean getIgnoreBordersWhenPositioning() {
        return ignoreBordersWhenPositioning;
    }

    /**
     * Sets whether the popup positioning will take into account the borders of the input element
     * and its ancestors (by including the <code>clientLeft</code> and <code>clientTop</code> DOM
     * properties in the computation).
     * 
     * @param ignoreBordersWhenPositioning
     *            the flag
     * @return this {@link AutoCompleteSettings}.
     */
    public AutoCompleteSettings setIgnoreBordersWhenPositioning(final boolean ignoreBordersWhenPositioning) {
        this.ignoreBordersWhenPositioning = ignoreBordersWhenPositioning;
        return this;
    }

    /**
     * Indicates whether the popup positioning will take into account browser window visible area or
     * not. (so always show popup bottom-right or not)
     * 
     * @return true if popup smart positioning is used, false otherwise.
     */
    public boolean getUseSmartPositioning() {
        return useSmartPositioning;
    }

    /**
     * Indicates whether the autocomplete list will be shown if the input is empty.
     * 
     * @return true if the autocomlete list will be shown if the input string is empty, false
     *         otherwise
     */
    public boolean getShowListOnEmptyInput() {
        return showListOnEmptyInput;
    }

    /**
     * Sets whether the list should be shown when the input is empty.
     * 
     * @param showListOnEmptyInput
     *            the flag
     * @return this {@link AutoCompleteSettings}
     */
    public AutoCompleteSettings setShowListOnEmptyInput(final boolean showListOnEmptyInput) {
        this.showListOnEmptyInput = showListOnEmptyInput;
        return this;
    }

    /**
     * Get CSS class name to add to the autocompleter markup container
     * 
     * @return CSS class name, or <code>null</code> if not used
     */
    public String getCssClassName() {
        return cssClassName;
    }

    /**
     * Sets an CSS class name to add to the autocompleter markup container
     * <p/>
     * This makes it easier to have multiple autocompleters in your application with different style
     * and layout.
     * 
     * @param cssClassName
     *            valid CSS class name
     * @return this {@link AutoCompleteSettings}.
     */
    public AutoCompleteSettings setCssClassName(final String cssClassName) {
        this.cssClassName = cssClassName;
        return this;
    }

    /**
     * Tells if wicket should adjust the width of the autocompleter selection window to the width of
     * the related input field.
     * 
     * @return <code>true</code> if the autocompleter should have the same size as the input field,
     *         <code>false</code> for default browser behavior
     */
    public boolean isAdjustInputWidth() {
        return adjustInputWidth;
    }

    /**
     * Adjust the width of the autocompleter selection window to the width of the related input
     * field.
     * <p/>
     * Otherwise the size will depend on the default browser behavior and CSS.
     * 
     * @param adjustInputWidth
     *            <code>true</code> if the autocompleter should have the same size as the input
     *            field, <code>false</code> for default browser behavior
     * @return this {@link AutoCompleteSettings}.
     */
    public AutoCompleteSettings setAdjustInputWidth(final boolean adjustInputWidth) {
        this.adjustInputWidth = adjustInputWidth;
        return this;
    }

    /**
     * Indicates whether the autocomplete list will be shown when the input field receives focus.
     * 
     * @return true if the autocomplete list will be shown when the input field receives focus,
     *         false otherwise
     */
    public boolean getShowListOnFocusGain() {
        return showListOnFocusGain;
    }

    /**
     * Sets whether the list should be shown when the input field receives focus.
     * 
     * @param showCompleteListOnFocusGain
     *            the flag
     * @return this {@link AutoCompleteSettings}.
     */
    public AutoCompleteSettings setShowCompleteListOnFocusGain(final boolean showCompleteListOnFocusGain) {
        this.showCompleteListOnFocusGain = showCompleteListOnFocusGain;
        return this;
    }

    /**
     * Indicates whether the autocomplete list will be shown when the input field receives focus.
     * 
     * @return true if the autocomplete list will be shown when the input field receives focus,
     *         false otherwise
     */
    public boolean getShowCompleteListOnFocusGain() {
        return showCompleteListOnFocusGain;
    }

    /**
     * Sets whether the list should be shown when the input field receives focus.
     * 
     * @param showListOnFocusGain
     *            the flag
     * @return this {@link AutoCompleteSettings}.
     */
    public AutoCompleteSettings setShowListOnFocusGain(final boolean showListOnFocusGain) {
        this.showListOnFocusGain = showListOnFocusGain;
        return this;
    }

    /**
     * Sets whether the popup positioning will take into account browser window visible area or not.
     * (so always show popup bottom-right or not)<br>
     * THIS WILL PRODUCE UNWANTED BEHAVIOR WITH IE versions < 8 (probably because of unreliable
     * clientWidth/clientHeight browser element properties).
     * 
     * @param useSmartPositioning
     *            the flag
     * @return this {@link AutoCompleteSettings}.
     */
    public AutoCompleteSettings setUseSmartPositioning(final boolean useSmartPositioning) {
        this.useSmartPositioning = useSmartPositioning;
        return this;
    }

    /**
     * Sets the name of the request parameter that will bring the value of the user input
     * 
     * @param parameterName
     *            the name of the request parameter that will bring the value of the user input
     * @return this {@link AutoCompleteSettings}
     */
    public AutoCompleteSettings setParameterName(final String parameterName) {
        this.parameterName = parameterName;
        return this;
    }

    /**
     * @return the name of the request parameter that will bring the value of the user input
     */
    public String getParameterName() {
        return parameterName;
    }

    /**
     * @return the minimum input length required to display the autocomplete list
     */
    public int getMinInputLength() {
        return minInputLength;
    }

    /**
     * Set the minimum input length required to display the autocomplete list
     *
     * @param minInputLength
     *            the minimum input length required to display the autocomplete list
     * @return this {@link AutoCompleteSettings}
     */
    public AutoCompleteSettings setMinInputLength(int minInputLength) {
        this.minInputLength = minInputLength;
        return this;
    }
}