/*
 * @(#)DefaultSplitButtonModel.java 2/17/2005
 *
 * Copyright 2002 - 2005 JIDE Software Inc. All rights reserved.
 */
package com.jidesoft.swing;

import javax.swing.*;
import java.awt.event.ItemEvent;

/**
 */
public class DefaultSplitButtonModel extends DefaultButtonModel implements SplitButtonModel {
    /**
     * Indicates that the button part of the split button has been selected.
     */
    public static final int BUTTON_SELECTED = 1 << 6;

    /**
     * Indicates that the button part of the split button is enabled or disabled.
     */
    public static final int BUTTON_ENABLED = 1 << 7;

    /**
     * Indicates that the button part of the split button is rollover.
     */
    public static final int BUTTON_ROLLOVER = 1 << 8;


    public DefaultSplitButtonModel() {
        setButtonEnabled(true);
    }

    /**
     * Selects or deselects the button part of the JideSplitButton.
     *
     * @param b true selects the button, false deselects the button
     */
    public void setButtonSelected(boolean b) {
        if (this.isButtonSelected() == b) {
            return;
        }

        if (b) {
            stateMask |= BUTTON_SELECTED;
        }
        else {
            stateMask &= ~BUTTON_SELECTED;
        }

        fireItemStateChanged(new ItemEvent(this,
                ItemEvent.ITEM_STATE_CHANGED,
                this,
                b ? ItemEvent.SELECTED : ItemEvent.DESELECTED));

        fireStateChanged();

    }

    /**
     * Indicates if the button part of the JideSplitButton has been selected.
     *
     * @return true if the button is selected
     */
    public boolean isButtonSelected() {
        return (stateMask & BUTTON_SELECTED) != 0;
    }

    /**
     * Selects or deselects the button part of the JideSplitButton.
     *
     * @param b true selects the button, false deselects the button
     */
    public void setButtonEnabled(boolean b) {
        if (this.isButtonEnabled() == b) {
            return;
        }

        if (b) {
            stateMask |= BUTTON_ENABLED;
        }
        else {
            stateMask &= ~BUTTON_ENABLED;
        }

        fireStateChanged();

    }

    /**
     * Indicates if the button part of the JideSplitButton has been enabled.
     *
     * @return true if the button is enabled
     */
    public boolean isButtonEnabled() {
        return (stateMask & BUTTON_ENABLED) != 0;
    }

    /**
     * Sets the button part of the JideSplitButton as rollover.
     *
     * @param b true set the button as rollover, false set the button as not rollover
     */
    public void setButtonRollover(boolean b) {
        if (this.isButtonRollover() == b) {
            return;
        }

        if (b) {
            stateMask |= BUTTON_ROLLOVER;
        }
        else {
            stateMask &= ~BUTTON_ROLLOVER;
        }

        fireStateChanged();
    }

    /**
     * Indicates if the button part of the JideSplitButton is rollover.
     *
     * @return true if the button is rollover
     */
    public boolean isButtonRollover() {
        return (stateMask & BUTTON_ROLLOVER) != 0;
    }

    @Override
    public void setRollover(boolean b) {
        super.setRollover(b);
        if (!b) {
            setButtonRollover(false);
        }
    }
}
