001: /*
002: * Copyright (c) 2005-2008 Substance Kirill Grouchnikov. All Rights Reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of Substance Kirill Grouchnikov nor the names of
015: * its contributors may be used to endorse or promote products derived
016: * from this software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
020: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
021: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
022: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
023: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
025: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
026: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
027: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
028: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029: */
030: package org.jvnet.substance.utils;
031:
032: import java.awt.Component;
033: import java.util.Set;
034:
035: import org.jvnet.lafwidget.animation.*;
036:
037: /**
038: * Fade-related utilities.
039: *
040: * @author Kirill Grouchnikov.
041: */
042: public class SubstanceFadeUtilities {
043: /**
044: * Returns the component that is being tracked by the {@link FadeTracker}
045: * with the highest value of the fade cycle.
046: *
047: * @param fadeKind
048: * Fade kind.
049: * @param comps
050: * Components.
051: * @return The component that is being tracked by the {@link FadeTracker}
052: * with the highest value of the fade cycle. May be
053: * <code>null</code>.
054: */
055: public static Component getTracked(FadeKind fadeKind,
056: Component... comps) {
057: FadeTracker tracker = FadeTracker.getInstance();
058: Component result = null;
059: float highest = -1.0f;
060: for (Component comp : comps) {
061: if (tracker.isTracked(comp, fadeKind)) {
062: float fade10 = tracker.getFade10(comp, fadeKind);
063: if (fade10 > highest) {
064: result = comp;
065: highest = fade10;
066: }
067: }
068: }
069: return result;
070: }
071:
072: /**
073: * Returns the highest fade cycle for the specified component and the fade
074: * kind.
075: *
076: * @param fadeKind
077: * Fade kind.
078: * @param comps
079: * Components.
080: * @return The highest fade cycle for the specified component and the fade
081: * kind.
082: */
083: public static FadeState getFadeStateWithHighestFadeCycle(
084: FadeKind fadeKind, Component... comps) {
085: FadeTracker tracker = FadeTracker.getInstance();
086: FadeState result = null;
087: float highest = -1.0f;
088: for (Component comp : comps) {
089: FadeState curr = tracker.getFadeState(comp, fadeKind);
090: if (curr != null) {
091: if (curr.getFadePosition() > highest) {
092: result = curr;
093: highest = curr.getFadePosition();
094: }
095: }
096: }
097: return result;
098: }
099:
100: /**
101: * Returns the first matching fade state for the specified component.
102: *
103: * @param comp
104: * Component.
105: * @param fadeKinds
106: * A list of fade kinds. The list is scanned from the start. The
107: * first fade kind that is currently "happening" on the specified
108: * component will be used to fetch the fade state.
109: * @return The first matching fade state for the specified component.
110: */
111: public static FadeState getFadeState(Component comp,
112: FadeKind... fadeKinds) {
113: FadeTracker tracker = FadeTracker.getInstance();
114: for (FadeKind fadeKind : fadeKinds) {
115: FadeState result = tracker.getFadeState(comp, fadeKind);
116: if (result != null)
117: return result;
118: }
119: return null;
120: }
121:
122: /**
123: * Returns the first matching fade state for the specified component.
124: *
125: * @param comp
126: * Component.
127: * @param comparable
128: * Identifier of a sub-entity.
129: * @param fadeKinds
130: * A list of fade kinds. The list is scanned from the start. The
131: * first fade kind that is currently "happening" on the specified
132: * component will be used to fetch the fade state.
133: * @return The first matching fade state for the specified component.
134: */
135: public static FadeState getFadeState(Component comp,
136: Comparable<?> comparable, FadeKind... fadeKinds) {
137: FadeTracker tracker = FadeTracker.getInstance();
138: for (FadeKind fadeKind : fadeKinds) {
139: FadeState result = tracker.getFadeState(comp, comparable,
140: fadeKind);
141: if (result != null)
142: return result;
143: }
144: return null;
145: }
146:
147: /**
148: * Cancels the specified fade sequences.
149: *
150: * @param initiatedFadeSequences
151: * Fade sequence IDs to cancel.
152: */
153: public static void cancelFades(Set<Long> initiatedFadeSequences) {
154: FadeTracker fadeTrackerInstance = FadeTracker.getInstance();
155: for (long fadeId : initiatedFadeSequences) {
156: fadeTrackerInstance.cancelFadeInstance(fadeId);
157: }
158: }
159: }
|