All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.guise.framework.component.ToolButton Maven / Gradle / Ivy

There is a newer version: 0.5.3
Show newest version
/*
 * Copyright © 2005-2008 GlobalMentor, Inc. 
 *
 * Licensed 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 io.guise.framework.component;

import java.net.URI;

import io.guise.framework.event.MouseAdapter;
import io.guise.framework.event.MouseEnterEvent;
import io.guise.framework.event.MouseExitEvent;
import io.guise.framework.model.*;
import io.guise.framework.prototype.ActionPrototype;

/**
 * Control with an action model rendered as a tool button. Tool buttons are typically presented on toolbars and rendered differently than a normal button; they
 * usually are more subtle and may only present button decorations upon certain gestures such as mouse overs.
 * @author Garret Wilson
 */
public class ToolButton extends AbstractButtonControl implements ToolButtonControl {

	/** Default constructor. */
	public ToolButton() {
		this(new DefaultInfoModel(), new DefaultActionModel(), new DefaultEnableable()); //construct the class with default models
	}

	/**
	 * Label constructor.
	 * @param label The text of the label, or null if there should be no label.
	 */
	public ToolButton(final String label) {
		this(label, null); //construct the class with no icon
	}

	/**
	 * Label and icon constructor.
	 * @param label The text of the label, or null if there should be no label.
	 * @param icon The icon URI, which may be a resource URI, or null if there is no icon URI.
	 */
	public ToolButton(final String label, final URI icon) {
		this(new DefaultInfoModel(label, icon), new DefaultActionModel(), new DefaultEnableable()); //construct the class  with a default info model and the given label text
	}

	/**
	 * Info model, action model, and enableable object constructor.
	 * @param infoModel The component info model.
	 * @param actionModel The component action model.
	 * @param enableable The enableable object in which to store enabled status.
	 * @throws NullPointerException if the given info model, action model, and/or enableable object is null.
	 */
	public ToolButton(final InfoModel infoModel, final ActionModel actionModel, final Enableable enableable) {
		super(infoModel, actionModel, enableable); //construct the parent class
	}

	/**
	 * Prototype constructor.
	 * @param actionPrototype The prototype on which this component should be based.
	 * @throws NullPointerException if the given prototype is null.
	 */
	public ToolButton(final ActionPrototype actionPrototype) {
		this(actionPrototype, actionPrototype, actionPrototype); //use the action prototype as every needed model
		addMouseListener(new MouseAdapter() { //listen for the mouse over the control TODO eventually promote this (with modified logic for menus) to the tops of all action control hierarchy, as we already ignore rollover change unless needed

			@Override
			public void mouseEntered(final MouseEnterEvent mouseEvent) {
				setRollover(true); //turn on the rollover state
			}

			@Override
			public void mouseExited(final MouseExitEvent mouseEvent) {
				setRollover(false); //turn off the rollover state
			}

		});
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy