/*
 * @(#)Alignable.java
 *
 * Copyright 2002 - 2004 JIDE Software. All rights reserved.
 */
package com.jidesoft.swing;

/**
 * <code>Alignable</code> is an interface that can be implemented by any components to provide information such as how
 * to set orientation and check whether a component supports vertical orientation or horizontal orientation.
 * <p/>
 * Some components support both vertical orientation and horizontal orientation. For example, an icon-only JideButton.
 * It can be put on either a vertical toolbar or normal horizontal toolbar. However most components don't support both.
 * For example, a combo box. It's hard to imagine a combobox putting on a vertical toolbar.
 * <p/>
 * By implementing this interface, a component can choose if it wants to support vertical orientation or horizontal
 * orientation. However if a component which doesn't implement this interface is added to toolbar, by default, it will
 * be treated as supportHorizontalOrientation() returning true and supportVerticalOrientation() returning false.
 */
public interface Alignable {
    /**
     * Property name to indicate the orientation is changed.
     */
    public static final String PROPERTY_ORIENTATION = "orientation";

    /**
     * Checks if the component support vertical orientation. doesn't consider the component orientation, it should
     * return false.
     *
     * @return true if it supports vertical orientation
     */
    boolean supportVerticalOrientation();

    /**
     * Checks if the component support horizontal orientation.
     *
     * @return true if it supports horizontal orientation
     */
    boolean supportHorizontalOrientation();

    /**
     * Changes the orientation. If the component is a Swing component, the default implementation is this.
     * <br><code>JideSwingUtilities.setOrientationOf(this, orientation);<code>
     *
     * @param orientation the new orientation
     */
    void setOrientation(int orientation);

    /**
     * Gets the orientation. If the component is a Swing component, the default implementation is this. <br><code>return
     * JideSwingUtilities.getOrientationOf(this);<code>
     *
     * @return orientation
     */
    int getOrientation();
}
