/* * This file is part of WebLookAndFeel library. * * WebLookAndFeel library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WebLookAndFeel library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WebLookAndFeel library. If not, see . */ package com.alee.extended.checkbox; import com.alee.laf.WebLookAndFeel; import com.alee.laf.checkbox.WebCheckBox; import com.alee.utils.ReflectUtils; import javax.swing.*; /** * This WebCheckBox extension class provides additional third selection state - mixed state. * * @author Mikle Garin */ public class WebTristateCheckBox extends WebCheckBox { /** * Unique UI class ID. * * @see #getUIClassID */ private static final String uiClassID = "TristateCheckBoxUI"; /** * Constructs new tristate checkbox. */ public WebTristateCheckBox () { super (); } /** * Constructs new tristate checkbox. * * @param checked whether checkbox should be checked or not */ public WebTristateCheckBox ( final boolean checked ) { super ( "", checked ); } /** * Constructs new tristate checkbox. * * @param state initial check state */ public WebTristateCheckBox ( final CheckState state ) { super (); setState ( state ); } /** * Constructs new tristate checkbox. * * @param icon checkbox icon */ public WebTristateCheckBox ( final Icon icon ) { super ( icon ); } /** * Constructs new tristate checkbox. * * @param icon checkbox icon * @param checked whether checkbox should be checked or not */ public WebTristateCheckBox ( final Icon icon, final boolean checked ) { super ( icon, checked ); } /** * Constructs new tristate checkbox. * * @param icon checkbox icon * @param state initial check state */ public WebTristateCheckBox ( final Icon icon, final CheckState state ) { super ( icon ); setState ( state ); } /** * Constructs new tristate checkbox. * * @param text checkbox text */ public WebTristateCheckBox ( final String text ) { super ( text ); } /** * Constructs new tristate checkbox. * * @param text checkbox text * @param checked whether checkbox should be checked or not */ public WebTristateCheckBox ( final String text, final boolean checked ) { super ( text, checked ); } /** * Constructs new tristate checkbox. * * @param text checkbox text * @param state initial check state */ public WebTristateCheckBox ( final String text, final CheckState state ) { super ( text ); setState ( state ); } /** * Constructs new tristate checkbox. * * @param text checkbox text * @param icon checkbox icon */ public WebTristateCheckBox ( final String text, final Icon icon ) { super ( text, icon ); } /** * Constructs new tristate checkbox. * * @param text checkbox text * @param icon checkbox icon * @param checked whether checkbox should be checked or not */ public WebTristateCheckBox ( final String text, final Icon icon, final boolean checked ) { super ( text, icon, checked ); } /** * Constructs new tristate checkbox. * * @param text checkbox text * @param icon checkbox icon * @param state initial check state */ public WebTristateCheckBox ( final String text, final Icon icon, final CheckState state ) { super ( text, icon ); setState ( state ); } /** * Constructs new tristate checkbox. * * @param action checkbox action */ public WebTristateCheckBox ( final Action action ) { super ( action ); } /** * Initializes checkbox settings. * * @param text initial text * @param icon initial icon */ @Override protected void init ( final String text, final Icon icon ) { // Custom button model model = new TristateCheckBoxModel (); setModel ( model ); super.init ( text, icon ); } /** * Returns actual tristate checkbox model. * * @return actual tristate checkbox model */ public TristateCheckBoxModel getActualModel () { return ( TristateCheckBoxModel ) model; } /** * Returns whether partially checked tristate checkbox should be checked or unchecked on toggle. * * @return true if partially checked tristate checkbox should be checked on toggle, false if it should be unchecked */ public boolean isCheckMixedOnToggle () { return getActualModel ().isCheckMixedOnToggle (); } /** * Sets whether partially checked tristate checkbox should be checked or unchecked on toggle * * @param checkMixedOnToggle whether partially checked tristate checkbox should be checked or unchecked on toggle */ public void setCheckMixedOnToggle ( final boolean checkMixedOnToggle ) { getActualModel ().setCheckMixedOnToggle ( checkMixedOnToggle ); } /** * Returns tristate checkbox check state. * * @return tristate checkbox check state */ public CheckState getState () { return getActualModel ().getState (); } /** * Returns next check state for toggle action. * * @param checkState current check state * @return next check state for toggle action */ public CheckState getNextState ( final CheckState checkState ) { return getActualModel ().getNextState ( checkState ); } /** * Sets tristate checkbox check state. * * @param state new tristate checkbox check state */ public void setState ( final CheckState state ) { getActualModel ().setState ( state ); } /** * Returns whether checkbox is checked or not. * * @return true if checkbox is checked, false otherwise */ public boolean isChecked () { return getActualModel ().isSelected (); } /** * Forces checked state. */ public void setChecked () { setState ( CheckState.checked ); } /** * Returns whether checkbox is in mixed state or not. * * @return true if checkbox is in mixed state, false otherwise */ public boolean isMixed () { return getActualModel ().isMixed (); } /** * Forces mixed state. */ public void setMixed () { setState ( CheckState.mixed ); } /** * Returns whether checkbox is unchecked or not. * * @return true if checkbox is unchecked, false otherwise */ public boolean isUnchecked () { return !isChecked () && !isMixed (); } /** * Forces unchecked state. */ public void setUnchecked () { setState ( CheckState.unchecked ); } /** * Returns Web-UI applied to this class. * * @return Web-UI applied to this class */ @Override public WebTristateCheckBoxUI getWebUI () { return ( WebTristateCheckBoxUI ) getUI (); } /** * Installs a Web-UI into this component. */ @Override public void updateUI () { if ( getUI () == null || !( getUI () instanceof WebTristateCheckBoxUI ) ) { try { setUI ( ( WebTristateCheckBoxUI ) ReflectUtils.createInstance ( WebLookAndFeel.tristateCheckBoxUI ) ); } catch ( final Throwable e ) { e.printStackTrace (); setUI ( new WebTristateCheckBoxUI () ); } } else { setUI ( getUI () ); } } /** * {@inheritDoc} */ @Override public String getUIClassID () { return uiClassID; } }