| /* |
| * @(#)$RCSfile: MTabRuler.java,v $ $Revision: 1.1 $ $Date: 2000/04/20 17:45:10 $ |
| * |
| * (C) Copyright IBM Corp. 1998-1999. All Rights Reserved. |
| * |
| * The program is provided "as is" without any warranty express or |
| * implied, including the warranty of non-infringement and the implied |
| * warranties of merchantibility and fitness for a particular purpose. |
| * IBM will not be liable for any damages suffered by you as a result |
| * of using the Program. In no event will IBM be liable for any |
| * special, indirect or consequential damages or lost profits even if |
| * IBM has been advised of the possibility of their occurrence. IBM |
| * will not be liable for any third party claims against you. |
| */ |
| package com.ibm.richtext.styledtext; |
| |
| /** |
| * This interface represents a sequence of TabStops, ordered by position. |
| * The first |
| * TabStop in the ruler can be obtained with the <code>firstTab</code> |
| * method; subsequent TabStops are obtained with the <code>nextTab</code> |
| * method. |
| * <p> |
| * If a TabStop with type <code>TabStop.kAuto</code> is returned, all tabs |
| * after that TabStop will also have type <code>TabStop.kAuto</code>, and |
| * their positions will be multiples of <code>autoSpacing</code>. |
| * @see TabStop |
| */ |
| public abstract class MTabRuler |
| { |
| static final String COPYRIGHT = |
| "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved"; |
| /** |
| * Return first tab in the ruler. If an autoTab, it is at position zero, and |
| * all subsequent tabs will be autotabs at autoSpacing intervals. |
| */ |
| public abstract TabStop firstTab(); |
| |
| /** |
| * Return the first tab in the ruler with fPosition > position. If it is an |
| * autotab, it is at an increment of autoSpacing, and all subsequent tabs will be |
| * autotabs at autoSpacing intervals. |
| */ |
| public abstract TabStop nextTab(int position); |
| |
| /** |
| * Return the interval for autotabs. |
| */ |
| public abstract int autoSpacing(); |
| |
| /** |
| * Compute the hashCode for this ruler. The hashCode is the |
| * hashCode of the first tab multiplied by the autoSpacing |
| * interval. |
| */ |
| public final int hashCode() { |
| |
| return firstTab().hashCode() * autoSpacing(); |
| } |
| |
| /** |
| * Return true if this tab ruler contains the given tab. |
| * @param tabToTest the tab to search for |
| * @return true if this tab ruler contains <code>tabToTest</code> |
| */ |
| public boolean containsTab(TabStop tabToTest) { |
| |
| for (TabStop tab = firstTab(); |
| tab.getType() != TabStop.kAuto; |
| tab = nextTab(tab.getPosition())) { |
| if (tab.getPosition() >= tabToTest.getPosition()) { |
| return tabToTest.equals(tab); |
| } |
| } |
| |
| return false; |
| } |
| |
| /** |
| * Return a tab ruler identical to this ruler, except with the |
| * given tab added. This ruler is not modified. |
| * @param tabToAdd the tab to add to the new tab ruler |
| * @return an MTabRuler resulting from this operation |
| */ |
| public MTabRuler addTab(TabStop tabToAdd) { |
| |
| return StandardTabRuler.addTabToRuler(this, tabToAdd); |
| } |
| |
| /** |
| * Return a tab ruler identical to the given ruler, except with the |
| * tab at the given position removed. This ruler is not modified. |
| * @param position the position of the tab to remove from the new tab ruler |
| * @return an MTabRuler resulting from this operation |
| */ |
| public MTabRuler removeTab(int position) { |
| |
| return StandardTabRuler.removeTabFromRuler(this, position); |
| } |
| |
| /** |
| * Return a tab ruler identical to this ruler, except with the |
| * tab at position <code>fromPosition</code> moved to position |
| * <code>toPosition</code>. This ruler is not modified. |
| * @param fromPosition the position of the tab to move |
| * @param toPosition the new position of the tab |
| * @return an MTabRuler resulting from this operation |
| */ |
| public MTabRuler moveTab(int fromPosition, int toPosition) { |
| |
| return StandardTabRuler.moveTabOnRuler(this, fromPosition, toPosition); |
| } |
| } |