001/*
002 * $Id: DateSelectionEvent.java 3272 2009-02-25 11:06:37Z kleopatra $
003 *
004 * Copyright 2006 Sun Microsystems, Inc., 4150 Network Circle,
005 * Santa Clara, California 95054, U.S.A. All rights reserved.
006 *
007 * This library is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 *
012 * This library is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this library; if not, write to the Free Software
019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
020 */
021package org.jdesktop.swingx.event;
022
023import java.util.Date;
024import java.util.EventObject;
025import java.util.SortedSet;
026
027import org.jdesktop.swingx.calendar.DateSelectionModel;
028
029/**
030 * @author Joshua Outwater
031 */
032public class DateSelectionEvent extends EventObject {
033    public static enum EventType {
034        DATES_ADDED,
035        DATES_REMOVED,
036        DATES_SET,
037        SELECTION_CLEARED,
038        SELECTABLE_DATES_CHANGED,
039        SELECTABLE_RANGE_CHANGED,
040        UNSELECTED_DATES_CHANGED,
041        LOWER_BOUND_CHANGED,
042        UPPER_BOUND_CHANGED, 
043        ADJUSTING_STARTED, ADJUSTING_STOPPED, 
044        CALENDAR_CHANGED,
045    }
046
047    private EventType eventType;
048    private boolean adjusting;
049
050    /**
051     * Constructs a prototypical Event.
052     *
053     * @param source The object on which the Event initially occurred.
054     * @param eventType the type of the event
055     * @param adjusting the adjusting property of the source
056     * @throws IllegalArgumentException if source is null.
057     */
058    public DateSelectionEvent(Object source, EventType eventType, boolean adjusting) {
059        super(source);
060        this.eventType = eventType;
061        this.adjusting = adjusting;
062    }
063
064    /**
065     * Returns the selection of the source dateSelectionModel.<p>
066     * 
067     * PENDING JW: that's the "live" selection, that is the source is re-queried on every call
068     * to this method. Bug or feature?
069     * 
070     * @return the selection of the source.
071     */
072    public SortedSet<Date> getSelection() {
073        return ((DateSelectionModel)source).getSelection();
074    }
075
076    /**
077     * Returns the type of this event.
078     * 
079     * @return the type of event.
080     */
081    public final EventType getEventType() {
082        return eventType;
083    }
084
085    /**
086     * Returns a boolean indicating whether the event source is in adjusting state.
087     * 
088     * @return true if the event is fired while the model is in adjusting state.
089     */
090    public boolean isAdjusting() {
091        return adjusting;
092    }
093
094    @Override
095    public String toString() {
096        return "[" + String.valueOf(getSource()) + " type: " + getEventType() + " isAdjusting: " + isAdjusting();
097    }
098    
099    
100}